- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Unity着色器教程 | 积雪效果
本文将展示在Unity中如何创建Image Effect(屏幕空间着色器)来快速改变场景的季节。使用着色器前后效果图对比如下:
工作原理
上面两张图显示的是同一个场景。它们之间唯一的区别就是第二张图启用了相机上的雪花特效。实现该效果无需对场景的贴图做任何更改。这是什么原理呢?其实原理非常简单。就是假定所有法线朝上的像素点(如:草,地板等)都需要覆盖雪花。同样,法线朝着其它方向的像素点(如:松树,墙),则需要在雪花纹理和原始纹理之间进行平缓过渡。
获取所需数据
实现上面的雪花效果有以下准备事项:
将渲染路径设置为Deferred(延迟渲染)
将Camera.depthTextureMode设置为DepthNormals
由于第二项可以很方便地由屏幕特效脚本进行设置,所以如果游戏已经使用了前向渲染路径(Forward Rendering Path)时,第一项很容易出问题。将Camera.depthTextureMode设置为DepthNormals后可以读取屏幕深度(像素与相机之间的距离)和法线(所朝的方向)。创建一个屏幕特效(Image Effect)由至少一个脚本和一个着色器构成。通常这个着色器不是用来渲染3D物体的,而是根据给定的输入数据渲染一个全屏的图像。在本文的例子中,输入数据就是一张相机渲染的结果图片以及一些用户设置的属性。
这里只是基础的设置,还不能生成雪花。有趣的事情还在后面。
着色器
雪花着色器是无光照着色器(unlit shader),因为屏幕空间是没有光照的,所以也不会用到任何光照信息。片段着色器才是重要部分,通过ScreenSpaceSnow脚本来获取所有数据。脚本代码请点击【阅读原文】查看。
找出需要下雪的地方
正如之前所说,所有法线朝上的表面都将覆盖雪。相机已经设置了生成深度法线贴图,所以现在直接获取即可。
查看Unity官方文档可以了解_CameraDepthNormalsTexture的意义:
深度贴图可以作为一个着色器的全局着色器属性进行采样。通过声明名为_CameraDepthTexture的采样器,就能够采样相机的主深度纹理。_CameraDepthTexture总是引用相机的主深度贴图。
Unity文档解释深度和法线的数据都打包为16位。所以获取法线需要调用DecodeDepthNormal方法进行解包。这个方法检索的是相机空间的法线。也就是说,如果旋转屏幕相机,那么法线朝向也会改变。脚本中将法线乘以_CamToWorld 矩阵就是为了避免这种情况。它会将法线从相机空间转换为世界空间,这样就不再依赖于相机的透视。
暂时渲染为RGB图像。在Unity中,Y轴是默认向上的。图中绿色部分表示Y坐标轴的值。目前为止结果不错!接下来配置积雪覆盖区域顶部和底部的阀值,以便于调整场景的积雪量。
雪纹理
如果没有纹理,雪看起来会不真实。最难的部分就是将2D纹理(屏幕空间)应用到3D物体上。一种方法是获取像素的世界坐标,然后将世界坐标的X和Z值作为纹理坐标。
这里涉及到一些数学知识,您只需知道vpos是视口坐标,wpos是由视口坐标与_CamToWorld矩阵相乘而得到的世界坐标,并且它通过除以远平面的位置(_ProjectionParams.z)来转换为有效的世界坐标。最后使用XZ坐标乘以可配置参数_SnowTexScale和远平面,来计算雪的颜色并获取适当的值。
合并
下面将积雪与场景进行合并。获取场景原始颜色,并使用snowAmount进行插值渐变为snowColor?。
最后一步:将_TopThreshold设为0.6:
结论
全屏效果见下图。看起来不错吧?
本文来源于:
您可能关注的文档
- Photoshop单元设计 教程.doc
- Solidworks培训及考证 Solidworks培训及考证 6.3 表格驱动阵列(logo).docx
- Solidworks培训及考证 Solidworks培训及考证 6.8 综合实例.docx
- Solidworks培训及考证 Solidworks培训及考证 7.4 综合实例(logo).docx
- Solidworks培训及考证 Solidworks培训及考证 12.1 考点一 绘制草图与创建实体.docx
- Solidworks培训及考证 Solidworks培训及考证 12.1考点一 绘制草图与创建实体(logo).docx
- Solidworks培训及考证 Solidworks培训及考证 UP BStudio软件应用.docx
- Unity3D虚拟现实交互制作(拓展) Unity3D虚拟现实交互制作(拓展) Adam.docx
- Unity3D虚拟现实交互制作(拓展) Unity3D虚拟现实交互制作(拓展) 用游戏引擎拍电影:Unity遇见《奇幻森林》(下).docx
- Windows Server网络操作系统 Windows Server 2008安全管理 Windows Server 2008安全管理(一).docx
- Windows Server网络操作系统 配置与管理DNS服务器 配置与管理DNS服务器(一).docx
- Windows Server网络操作系统 配置与管理基本磁盘和动态磁盘 配置与管理动态磁盘.docx
- Windows Server网络操作系统 配置与管理基本磁盘和动态磁盘 配置与管理基本磁盘.docx
- windows程序设计 windows程序设计 课程设计报告_跳山羊游戏_杨建椿.docx
- XML应用开发(软件品牌)-1期 XML Schema应用 第3单元 单元设计-XML Schema应用.doc
- 安装工程定额定价 电子教材、课件、案例 第8章 刷油、防腐蚀、绝热工程施工图预算的编制.doc
- 安装识图与工艺 给排水 003 - 超详细水电安装工程交房标准.docx
- 氨基酸发酵生产技术 谷氨酸制备味精工艺 学习手册:引导文-单元设计-实训指导书-谷氨酸制备味精技术.doc
原创力文档


文档评论(0)