【Unity风格化草地】概述风格化草地的实现方法

news2024/11/16 22:54:18

写在前面

最近本专业开始多很多事情了,要开始建模写论文了(不然研究生毕不了业),TA方面的学习进度更慢了,,so sad。

废话不多说,这篇文章其实是个小总结,毕竟学习新东西就是先要当一只copy cat(不是)。

至于草地交互,把草地做出来再说!

1 基于物理(无合批)

2021.5 【Unity】ShaderGraph制作卡通草地教程

这个实现方法是非常基础的、基于物理的。我理解的“基于物理”是:用一个个小面片实现一根根草的效果,复制,实现草地。这种方法十分耗性能。

2021.3 风格化草地制作过程 Part.2 在Unity中实现草的Shader以及使用Unity内置地形工具刷草

这个教程也是,首先在Blender里做好一丛草的模型,导入Unity着色好后,

再结合Terrain在地形上刷草。

2 曲面细分+几何着色器

【技术美术百人计划】图形 3.3 曲面细分与几何着色器 大规模草渲染

首先贴个大家都很熟悉的百人计划里介绍曲面细分和几何着色器的视频。

2018.3 Unity Grass Shader Tutorial (roystan.net)

这篇文章利用几何着色器输入三角形(一根草)后再生成多个草,然后曲面细分着色器控制草的密度。

菜鸡都能学会的Unity草地shader - 知乎 (zhihu.com)

这篇文章算是复刻了上述文章的方法。

Geometry Grass Shader for URP | Patreon 上的 Minions Art

这是Minions大佬实现的草地,关于草shader部分也是参考了Roystan的方法,不同的是这是个URP下的Shader(带URP玩,妙!),不仅如此,Minions还通过脚本实现了在Mesh刷草地的Tool,Youtube链接及具体的文章如下:

2020.7 【Unity Shader】草地制作教程

Unity | I made an Interactive Grass Shader + Tool

搭配的文章:https://www.patreon.com/posts/grass-geometry-2-40077798 

3 Computer Shader

Unity | I made a better Interactive Grass Shader + Tool

搭配文章:Compute Shader Interactive Grass + Updated Painter Tool | Patreon 上的 Minions Art

仍旧是Minions,她考虑到Geometry Shader不被Windows以外的平台支持,选择用了适用于多平台的Computer Shader替代Geometry Shader再来实现一次草地。

4 基于GPU Instancing

基于GPU Instance的草地渲染学习笔记 | 烟雨迷离半世殇的成长之路 (lfzxb.top)

传递一个Mesh(草片),指定绘制次数和材质,Unity在GPU开辟好缓冲区以指定材质对Mesh进行指定次数的渲染,达到一次Drawcall绘制海量对象的目的。

这跟第1小节的方法有点相似,不同的是第1小节纯粹是绘制多少个草的mesh就要传递多少次数据,对于大世界草地来说性能一定是吃不消的,GPU Instancing只需要从CPU传递一次数据,效率上直接飞升。

5 优化*

说白了就是根据距离划分层次节省性能,按距离分成近景中景和远景,三个层次的草用不同的方式渲染。

除了优化其实还有草的交互,先码一个对交互挺好的实现:UE5手撸交互草Shader教程支持移动端(上)

目前来说首先会把重点放在草地的实现上。


废话说完了,开始实现!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/399030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

序列索引序列切片

六个标准数据类型中是序列的有:字符串(String)、列表(List)、元组(Tuple)。 通过索引和切片的方式可以访问序列中的元素。 一、序列索引 序列中的每一个元素都有一个属于自己的编号&#xff0c…

演唱会的火车票没了?Python实现12306查票以及zidong购票....

嗨害大家好!我是小熊猫~ 不知道大家抢到演唱会的门票没有呢? 不管抢到没有,火车票也是很重要的哇 24小时抢票不间断的那种喔~ ~ ~ 不然可就要走路去了喔~ 准备工作 环境 Python 3.8Pycharm 插件 谷歌浏览器驱动 模块 需要安装的第三方模块&am…

1/4车、1/2车、整车悬架LQR仿真合集

目录 前言 1. 1/4悬架系统 1.1数学模型 1.2 LQR求解反馈阵阵(负反馈) 1.3仿真分析 2. 1/2悬架系统 2.1数学模型 2.2 LQR求解反馈阵阵(负反馈) 2.3仿真分析 3. 整车悬架系统 3.1数学模型 整车7自由度主动悬架数学模型 3.2 LQR求解反馈阵阵(负反馈) 3.3仿真分析 4…

MySQL(四)视图、存储过程、触发器

视图、存储过程、触发器视图检查选项视图的更新存储过程存储过程基本语法变量系统变量用户自定义变量局部变量if判断参数casewhile循环repeat循环loop循环cursor游标handler条件处理程序存储函数触发器视图 视图(View)是一种虚拟存在的表。视图中的数据…

ERP原理与应用教程(作业2)

1. 简答题 ERP是一个高度集成的信息系统,从管理信息集成的角度来看,从MRP到MRPII到ERP,是企业管理信息继承的不断扩展和深化。 所有成为ERP的软件都把MRPII作为其生产和控制模块,以MRPII为基础的计划功能在整个供应链的业务处理…

Composer最小稳定性问题

Composer最小稳定性问题主要指的是,在使用Composer安装某个特定的依赖包时,可能会出现一些不稳定的情况,比如依赖包的版本号发生变化,或者依赖包的某些功能发生变化,这样就会导致应用程序出现问题。为了解决这个问题&a…

【数据结构】栈和队列 (栈 栈的概念结构 栈的实现 队列 队列的概念及结构 队列的实现 栈和队列面试题)

文章目录前言一、栈1.1 栈的概念结构1.2栈的实现二、队列2.1队列的概念及结构2.2队列的实现三、栈和队列面试题总结前言 一、栈 1.1 栈的概念结构 栈也是一种线性表,数据在逻辑上挨着存储。只允许在固定的一端进行插入和删除元素。进行插入和删除操作的一端叫栈顶…

记录 UE5 完全重新构建 UE C++项目

不知道搞了什么,C项目的实时代码编译罢工了,搞了半天都修不好,只能又重建了 UE5 版本为 v5.1.1 删除以下文件夹 /Binaries /Intermediate /SavedBinaries 文件夹是编译后的模块 Intermediate 文件夹里是中间层的C代码,完全由ue…

腾讯乐固加固+app签名+多渠道打包

一、腾讯乐固-基础版免费加固-上传未加固的app-下载加固包(加固成功会清除原apk的签名信息和多渠道信息)https://console.cloud.tencent.com/ms/reinforce/list/basic二、使用AndroidStudio自带工具apksigner对apk重新签名找到apksigner.bat文件 路径D:\…

CentOS7环境下Docker入门到dockerfile(一)CentOS7安装Docker、容器构建、文件复制与挂载

文章目录准备CentOS7虚拟机准备SecureCRT远程连接虚拟机Centos7环境下安装Docker安装Docker镜像Docker容器的基本操作Docker容器的文件复制与挂载可能遇到的问题准备CentOS7虚拟机 关于网络连接三种模式可以参看这篇博客 准备SecureCRT远程连接虚拟机 可以自行搜索相关安装博…

MQTT协议-发布消息和发布确认

MQTT协议-发布消息和发布确认 PUBLISH一发布消息 PUBLISH控制报文是指从客户端向服务端或者服务端向客户端传输一个应用消息。 发布消息报文由以下5个部分组成 固定报头由两个字节组成,第一个字节的高4位固定为0011,第2位和第1位表示Qos等级&#xff…

Redis单机版安装

文章目录前言Redis单机版安装下载1.安装依赖C语言依赖2.上传并解压3.编译并安装3.1编译3.2安装4.开启守护进程5.启动并测试5.1启动redis5.2关闭/重启redis5.3启动客户端工具5.4杀死进程的方式关闭redis前言 这里安装linux版本的redis,后续如有需要添加windowx版本 安装linux教…

电脑怎么重装系统?教你轻松掌握这些方法

重新安装计算机系统有两种原因:一种是计算机系统可以正常使用,但是电脑比较卡,为了提高它的运行速度,所以想要通过重新安装系统来解决这个问题;另一种原因是计算机系统文件丢失,系统出现蓝屏,或者黑屏的情况…

【Linux内核二】常用的网络丢包错包debug工具介绍

目录 ifconfig Ifconfig输出各字段简述 txqueuelen RX和TX的errors指哪些错误 dropped与overruns的区别 常用ifconfig配置命令 显示网卡信息 启动关闭指定网卡 配置和删除ip地址 修改MAC地址 启用和关闭ARP协议 设置最大传输单元 设置网卡的promiscuous模式 设置…

Git 学习(二)—— 工作区 — 本地仓库的操作命令

我们要上传文件到本地仓库,不是直接拷贝进去的,而是需要通过命令一步步上传。从工作区到本地仓库分为了三步,也可以说是三个区域: 目录 1、操作命令 (1) git init(获取本地仓库) (2) git add(…

【Linux】 -- 进度条小程序

Linux第一个小程序&#xff0d;进度条 目录 行缓冲区概念 \r 和 \n 进度条代码和演示 行缓冲区概念 用两段代码来感受下行缓冲区的存在 #include<stdio.h> …

C++回顾(十四)—— 函数模板

14.1 概述 所谓函数模板(function template)&#xff0c;实际上是建立一个通用函数&#xff0c;其函数类型和形参类型不具体指定&#xff0c;用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替&#xff0c;不必定义多个函数&a…

数据分析方法08用户画像

用户画像 1、 概念 用户画像是指用户信息标签化&#xff0c;通过收集用户多维度的信息数据&#xff08;如人口统计属性&#xff0c;社会属性&#xff0c;行为偏好&#xff0c;消费习惯等&#xff09;&#xff0c;对其进行统计&#xff0c;分析&#xff0c;从而抽象出用户信息…

Ubuntu c++ MySQL数据库操作

mysql安装sudo apt-get install updatesudo apt-get install mysql-server libmysqlclient-dev mysql-workbenchmysql启动/重启/停止sudo service mysql start/restart/stop登录mysql命令&#xff1a;mysql -uroot -p错误异常&#xff1a;解决办法&#xff1a;修改mysqld.cnf配…

软件测试员如何进行产品测试?

一般来讲&#xff0c;当软件成为一个成功的产品后&#xff0c;产品测试工作就会复杂很多。比如拥有的用户量大&#xff0c;迭代频繁&#xff0c;测试的周期短&#xff0c;重复性强。面对紧张复杂的产品测试工作&#xff0c;软件测试员应怎样完成这一系列的测试工作呢&#xff1…