今天是圣诞节平安夜,为此特别制作了一个雪花飘落的场景,我们的雪花渲染方式不同于网上流行的使用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屏幕雪花另类实现方式相关推荐

  1. [Unity热更新]04.卸载方式

    [Unity热更新]04.卸载方式 参考链接: https://www.jianshu.com/p/b37ee8cea04c 1.AssetBundle.Unload(false):释放AssetBu ...

  2. 如何实现Windows Phone代码与Unity相互通信(插件方式)

    一些废话 原文地址: http://imwper.com/unity/petto/%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0windows-phone%E4%BB%A3% ...

  3. 私有属性的另类访问方式

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #http://blog.itpub.net/26250550/viewspace-1411768/#私有属性 ...

  4. Unity屏幕永远保持为固定分辨率

    Unity屏幕永远保持为固定分辨率 Unity屏幕永远保持为固定分辨率 前言 开题废话 Unity版本 正题: 打开一场景 创建脚本并且编写 挂在脚本到场景摄像机上边 以不同比的分辨率运行程序,并且观 ...

  5. Unity 屏幕模糊效果

    Unity 屏幕模糊效果 前几天,美术要我做一个屏幕模糊的效果,百度了半天,最后总算解决了. 趁着有时间,现在来总结一下. 首先我这边是为了出效果,所以原理先放一边,来谈谈如何实现.什么高斯模糊,均值 ...

  6. android 12去掉屏幕锁屏(屏幕默认锁屏方式改成无)

    需求:在11.0 12.0定制化开发中,需求要求去掉屏幕锁屏功能,默认无锁屏功能,所以要去掉系统默认锁屏功能 一共分两步: a.在SettingProvider数据库加载时默认无锁屏 b.去掉Sett ...

  7. android7.0 8.1 9.0 10.0 去掉屏幕锁屏(屏幕默认锁屏方式改成无)

    1.概述 在10.0的系统产品开发中,系统在开机后会默认进入锁屏界面,但是产品需求要求去掉锁屏方式,默认无锁屏,就是需要实现去掉屏幕锁屏功能 2.去掉屏幕锁屏(屏幕默认锁屏方式改成无)的核心类 fra ...

  8. Unity 屏幕特效 之 简单地调整颜色的 色散效果 的实现

    Unity 屏幕特效 之 简单地调整颜色的 色散效果 的实现 目录 Unity 屏幕特效 之 简单地调整颜色的 色散效果 的实现 一.简介

  9. 计算机屏幕面积大约多少,电脑屏幕尺寸怎么计算?-常见电脑屏幕尺寸的计算方式 - 河东软件园...

    电脑屏幕尺寸如何计算?电脑屏幕尺寸的计算方式!现如今电脑屏幕尺寸有多种多样,我们通过对笔记本与台式显示器的尺寸进行对比就会发现明显的区别,市面上常见的电脑屏幕尺寸包含19.21.21.5.22.23. ...

最新文章

  1. Cannot find snapshot in models/VGGNet/VOC0712/SSD_300x300
  2. B/S模式下如何使软件屏蔽系统热键
  3. Linear Regression、Logistic Regression、激励函数activation function(relu,sigmoid, tanh, softplus)
  4. linux jdk1.7 tomcat mysql_Linux环境搭建 jdk+tomcat+mysql
  5. aws emr 大数据分析_DataOps —使用AWS Lambda和Amazon EMR的全自动,低成本数据管道
  6. linux Swap交换分区概念
  7. Android 系统(138 )---Mtk平台 Android 打包解包*.img ,修改system.img 参数
  8. bzoj 1070: [SCOI2007]修车【最小费用最大流】
  9. L2-035 完全二叉树的层序遍历 (25 分)-PAT 团体程序设计天梯赛 GPLT
  10. java set 接口_java笔记四:Set接口
  11. HIVE 命令行操作和参数指引
  12. 日本互联网 20 年沧桑路
  13. 获取时间差几小时几分钟前 (类似于新浪微博 发表于几小时几分钟前)
  14. linux可变剪切分析,SpliceR:一个用RNA-Seq数据进行可变剪接分类和预测潜在编码区域的R包...
  15. 时间序列之ARIMA模型原理
  16. shader TileMap html的Canvas绘图 缓动/反弹动作 unity
  17. 【Matlab数学建模】灰色预测模型
  18. C++各种经典小游戏
  19. Blockathon2018(上海)顺利结束,9个项目打开区块链落地新思路
  20. 微信公众号查看粉丝信息接口

热门文章

  1. 四核处理器_你知道双核和四核CPU有什么区吗?
  2. ISE使用impact下载比特流或固化程序
  3. 为什么视频网站的视频链接地址是blob
  4. 全面分析反应釜的防腐问题和清洗
  5. 电子邮件营销的七大特殊案例
  6. 《cypher》游戏附加关卡攻略
  7. 0xC0000005: 读取位置 0x0000000000000030 时发生访问冲突的解决
  8. aac转化为mp3,详细转换步骤
  9. Matlab 编辑器框与命令行框视图分开两个窗口
  10. [极客大挑战 2019]PHP1-原创超详细