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

 更新时间:2019年10月09日 14:19:34   作者:海洋_  
这篇文章主要介绍了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渲染,再看看效果如下所示:


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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • c#数据的序列化和反序列化(推荐版)

    c#数据的序列化和反序列化(推荐版)

    今天项目中用到了数据的序列化和反序列化,数据用的是EF自动生成的代码
    2011-09-09
  • c# 委托和事件实例学习

    c# 委托和事件实例学习

    今天把委托和事件研究了一个,winForm环境下,一般的小例子都是字符界面,我为了运用一下,写了winForm
    2009-01-01
  • 通过容器扩展属性IExtenderProvider实现WinForm通用数据验证组件

    通过容器扩展属性IExtenderProvider实现WinForm通用数据验证组件

    这篇文章介绍了通过容器扩展属性IExtenderProvider实现WinForm通用数据验证组件的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • C#中comboBox实现三级联动

    C#中comboBox实现三级联动

    给大家分享了C#中comboBox实现三级联动的全部代码,代码经过测试,有兴趣的朋友跟着做一下。
    2018-03-03
  • C#静态static的用法实例分析

    C#静态static的用法实例分析

    这篇文章主要介绍了C#静态static的用法,以实例形式较为深入的分析了静态类、静态变量、静态方法以及静态构造函数的特性与用法,需要的朋友可以参考下
    2014-10-10
  • C# 输出字符串到文本文件中的实现代码

    C# 输出字符串到文本文件中的实现代码

    本文通过一个简单的代码给大家介绍C# 输出字符串到文本文件中,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-05-05
  • C#给Excel添加水印实例详解

    C#给Excel添加水印实例详解

    这篇文章主要介绍了C#给Excel添加水印实例的相关资料,需要的朋友可以参考下
    2016-09-09
  • C#实现.net页面之间传值传参方法汇总

    C#实现.net页面之间传值传参方法汇总

    这篇文章主要介绍了C#实现.net页面之间传值传参方法,实例汇总了几类常见的传值传参的方法,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • c#中object、var和dynamic的区别小结

    c#中object、var和dynamic的区别小结

    这篇文章主要给大家介绍了关于c#中object、var和dynamic的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • C#实现字体旋转的方法

    C#实现字体旋转的方法

    这篇文章主要介绍了C#实现字体旋转的方法,涉及C#通过Matrix实现字体旋转效果的方法,需要的朋友可以参考下
    2015-06-06

最新评论