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

 更新时间:2020年6月25日 10:36  点击:1283

今天是圣诞节平安夜,为此特别制作了一个雪花飘落的场景,我们的雪花渲染方式不同于网上流行的使用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渲染,再看看效果如下所示:


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

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

[!--infotagslink--]

相关文章

  • mybatis-plus雪花算法自动生成机器id原理及源码

    Mybatis-Plus是一个Mybatis的增强工具,它在Mybatis的基础上做了增强,却不做改变,Mybatis-Plus是为简化开发、提高开发效率而生,但它也提供了一些很有意思的插件,比如SQL性能监控、乐观锁、执行分析等,下面一起看看mybatis-plus雪花算法自动生成机器id原理解析...2021-06-04
  • Unity时间戳的使用方法

    这篇文章主要为大家详细介绍了Unity时间戳的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • C#实现简单屏幕监控的方法

    这篇文章主要介绍了C#实现简单屏幕监控的方法,涉及C#的图标隐藏及屏幕截图等技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 三星C9Pro屏幕分屏模式如何开启?三星C9Pro分屏模式开启教程

    本篇文章主要介绍三星C9Pro如何设置开启分屏模式,有兴趣想要了解的朋友快来看一看吧。 1)首先点击Home键左边的【最近任务键】,唤出最近任务列表,在每个程序任务的右...2016-12-21
  • Unity中 ShaderGraph 实现旋涡传送门效果入门级教程(推荐)

    通过Twirl 旋转节点对Gradient Noise 梯度噪声节点进行操作,就可得到一个旋转的旋涡效果。具体实现代码跟随小编一起通过本文学习下吧...2021-07-11
  • Unity延时执行的多种方法小结

    本文主要介绍了4种延时执行的方法,主要包括Update计时器,Invoke,协程,DoTween,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-07-07
  • Unity shader实现遮罩效果

    这篇文章主要为大家详细介绍了Unity shader实现遮罩效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • unity 如何判断鼠标是否在哪个UI上(两种方法)

    这篇文章主要介绍了unity 判断鼠标是否在哪个UI上的两种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-10
  • 利用unity代码C#封装为dll的步骤分享

    这篇文章主要给大家介绍了关于利用unity代码C#封装为dll的相关资料,文中通过图文将实现的方法介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • Unity实现换装系统

    这篇文章主要为大家详细介绍了Unity实现换装系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-04-11
  • Unity Shader实现径向模糊效果

    这篇文章主要为大家详细介绍了Unity Shader实现径向模糊效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-09
  • 在vue中实现禁止屏幕滚动,禁止屏幕滑动

    这篇文章主要介绍了在vue中实现禁止屏幕滚动,禁止屏幕滑动,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-22
  • unity 实现摄像机绕某点旋转一周

    这篇文章主要介绍了unity 实现摄像机绕某点旋转一周,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • Unity实现截图功能

    这篇文章主要为大家详细介绍了Unity实现截图功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • Unity中EventTrigger的几种使用操作

    这篇文章主要介绍了Unity中EventTrigger的几种使用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-10
  • Unity 按钮添加OnClick事件操作

    这篇文章主要介绍了Unity 按钮添加OnClick事件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-10
  • Unity Shader实现2D水流效果

    这篇文章主要为大家详细介绍了Unity Shader实现2D水流效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • iPhone点击屏幕没有响应怎么办 iPhone点击屏幕没有响应解决方法

    点击iPhone 屏幕没有响应、有故障,通常是硬件问题,这种情况你需要找售后更换屏幕。但在考虑更换屏幕之前,请先确保问题是不是真的出现在你的物理屏幕上...2022-09-14
  • Unity使用EzySlice实现模型多边形顺序切割

    这篇文章主要为大家详细介绍了Unity使用EzySlice实现模型多边形顺序切割,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-11-03
  • unity 切换场景不销毁物体问题的解决

    这篇文章主要介绍了unity 切换场景不销毁物体问题的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-14