Unity屏幕雪花另类实现方式示例

作者:海洋_ 时间:2022-06-18 23:32:43 

今天是圣诞节平安夜,为此特别制作了一个雪花飘落的场景,我们的雪花渲染方式不同于网上流行的使用Camera Filter,需要将脚本挂接到相机上面,而我们是挂接到空对象上面,实现方式采用的是自定义Mesh,自定义Mesh可以帮助我们实现很多的效果,而且对效率的提升非常有帮助,雪花实现方式分为:C#脚本和Shader渲染,C#负责雪花的生成,Shader负责雪花的飞舞和渲染。下面我们介绍实现方式:

关于unity,每帧可渲染65000顶点,表示雪的网状物每1片雪花使用4个顶点,65,000 / 4 = 1,6250,这也是你可以一次画的雪数量。

自定义Mesh,我们需要这两个参数:雪花数量,雪花的范围,另外实现自定义Mesh需要如下几个参数:存放雪花顶点,雪花的三角形索引,雪花UV,最后我们需要MeshRender帮助我们渲染。首先我们针对定义的参数如下所示:

Unity屏幕雪花另类实现方式示例

变量定义好了,接下来的工作就是初始化了,我们的初始化工作只需要做一次,因此在Start函数中完成的。下面我们根据定义的变量逐步将他们填充起来,先完成雪花顶点的生成如下所示:

Unity屏幕雪花另类实现方式示例

顶点有了,再来填充索引,代码如下所示:

Unity屏幕雪花另类实现方式示例

索引有了,下面就是UV了,再看看UV的实现方式:

Unity屏幕雪花另类实现方式示例

顶点,索引,UV定义好了后,下面就是写自定义雪花Mesh了,将我们已经实现的顶点,索引,UV一次性的赋给我们的Mesh,如下所示:

Unity屏幕雪花另类实现方式示例

到这里,我们的自定义Mesh就完成了,我们还需要对Mesh进行渲染,这个就用到了我们的Shader了,雪花是飘动的而且还需要材质,雪花位置的变化我们在顶点着色器中实现,这个也是重点,而片段着色器只是做了简单的渲染,核心代码如下所示:

Unity屏幕雪花另类实现方式示例

剩下的是在C#中,使用CPU对GPU中定义的Shader传值,Shader中定义了以下变量:

Unity屏幕雪花另类实现方式示例

这些变量需要在C#中完成对它们的传值操作,因为需要每帧去执行,我们将其放在了LateUpdate中完成,代码如下所示:

Unity屏幕雪花另类实现方式示例

这样我们的雪花制作就完成了,我们将代码挂到自己新建的空对象上面,注意这里不是相机上,实现效果如下:

Unity屏幕雪花另类实现方式示例

我们的雪景出现了,但是效果不是特别好,渲染力度不够,为此我将其加上,景深,雾效,Bloom渲染,再看看效果如下所示:

Unity屏幕雪花另类实现方式示例

效果明显加强了,图中的鹿是给大家送祝福了,祝愿开发者技术更上一层楼,就写到这里吧,代码后面整理一下传上来,供参考,晚安各位。

来源:https://blog.csdn.net/jxw167/article/details/85238951

标签:Unity,屏幕,雪花
0
投稿

猜你喜欢

  • WPF的ListView控件自定义布局用法实例

    2021-09-04 12:15:45
  • Android Scroll实现弹性滑动_列表下拉弹性滑动的示例代码

    2022-02-07 16:01:49
  • Android实现纸飞机的简单操作

    2022-05-16 12:26:04
  • RocketMQ producer发送者浅析

    2023-04-03 06:35:32
  • Mybatis控制台打印Sql语句的实现代码

    2021-10-08 22:06:28
  • 使用C#调用系统API实现内存注入的代码

    2021-12-01 00:25:59
  • Android TextView跑马灯效果实现方法

    2023-09-27 04:16:09
  • SpringBoot参数校验的最佳实战教程

    2023-11-28 21:13:47
  • 用C#来解析PDF文件

    2023-11-02 08:07:07
  • Java中JMM与volatile关键字的学习

    2022-03-24 00:12:00
  • adb通过wifi连接android设备流程解析

    2021-12-27 08:39:37
  • unity3d实现七天签到功能

    2023-01-05 08:57:21
  • ShardingSphere jdbc集成多数据源的实现步骤

    2023-11-25 07:54:56
  • Java 求解如何把二叉搜索树转换为累加树

    2021-11-19 14:09:54
  • 初识MyBatis及基本配置和执行

    2021-11-12 05:53:40
  • Java 将List中的实体类按照某个字段进行分组并存放至Map中操作

    2022-09-13 20:25:35
  • Hadoop+HBase+ZooKeeper分布式集群环境搭建步骤

    2022-02-13 01:16:33
  • spring boot集成smart-doc自动生成接口文档详解

    2023-11-28 23:08:02
  • C# BitArray(点矩阵)转换成int和string的方法实现

    2023-06-18 07:33:44
  • Java map存放数组并取出值代码详解

    2023-06-27 23:32:18
  • asp之家 软件编程 m.aspxhome.com