Unity屏幕雪花另类实现方式示例
今天是圣诞节平安夜,为此特别制作了一个雪花飘落的场景,我们的雪花渲染方式不同于网上流行的使用Camera Filter,需要将脚本挂接到相机上面,而我们是挂接到空对象上面,实现方式采用的是自定义Mesh,自定义Mesh可以帮助我们实现很多的效果,而且对效率的提升非常有帮助,雪花实现方式分为:C#脚本和Shader渲染,C#负责雪花的生成,Shader负责雪花的飞舞和渲染。下面我们介绍实现方式:
关于unity,每帧可渲染65000顶点,表示雪的网状物每1片雪花使用4个顶点,65,000 / 4 = 1,6250,这也是你可以一次画的雪数量。
自定义Mesh,我们需要这两个参数:雪花数量,雪花的范围,另外实现自定义Mesh需要如下几个参数:存放雪花顶点,雪花的三角形索引,雪花UV,最后我们需要MeshRender帮助我们渲染。首先我们针对定义的参数如下所示:
变量定义好了,接下来的工作就是初始化了,我们的初始化工作只需要做一次,因此在Start函数中完成的。下面我们根据定义的变量逐步将他们填充起来,先完成雪花顶点的生成如下所示:
顶点有了,再来填充索引,代码如下所示:
索引有了,下面就是UV了,再看看UV的实现方式:
顶点,索引,UV定义好了后,下面就是写自定义雪花Mesh了,将我们已经实现的顶点,索引,UV一次性的赋给我们的Mesh,如下所示:
到这里,我们的自定义Mesh就完成了,我们还需要对Mesh进行渲染,这个就用到了我们的Shader了,雪花是飘动的而且还需要材质,雪花位置的变化我们在顶点着色器中实现,这个也是重点,而片段着色器只是做了简单的渲染,核心代码如下所示:
剩下的是在C#中,使用CPU对GPU中定义的Shader传值,Shader中定义了以下变量:
这些变量需要在C#中完成对它们的传值操作,因为需要每帧去执行,我们将其放在了LateUpdate中完成,代码如下所示:
这样我们的雪花制作就完成了,我们将代码挂到自己新建的空对象上面,注意这里不是相机上,实现效果如下:
我们的雪景出现了,但是效果不是特别好,渲染力度不够,为此我将其加上,景深,雾效,Bloom渲染,再看看效果如下所示:
效果明显加强了,图中的鹿是给大家送祝福了,祝愿开发者技术更上一层楼,就写到这里吧,代码后面整理一下传上来,供参考,晚安各位。
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
- Unity中玩家通过点击行走 或 滑动屏幕行走的实现
- Unity 实现Log实时输出到屏幕或控制台上<二>
- Java实现转跳不同系统使用枚举加switch的方式示例
- 另类方式实现PHP后台运行
- 如何实现Windows Phone代码与Unity相互通信(插件方式)
- Android ListView长按弹出菜单二种实现方式示例
- Unity中UGUI人物血条跟随的几种实现方式(一)
- Unity 2D 实现屏幕滚动
- C++实现一个多线程同步方式的协同工作程序示例
- 原生JS实现Ajax通过GET方式与PHP进行交互操作示例
- Android中实现多线程下载的两种方式示例及浅析之二(Thread加断点续传)
- Unity 延迟执行一段代码的实现比较好的方式
- [python]python三元表达式另类实现方式
- Android 屏幕截图(底层实现方式)
- 在Unity中实现屏幕空间阴影(2)
- Python实现定时执行任务的三种方式简单示例
- Js实现双击鼠标自动滚动屏幕的示例代码
- C#实现创建桌面快捷方式与添加网页到收藏夹的示例
- C++中交换值与比较值的另类实现方式
- java实现区域内屏幕截图示例