今天为大家分享一位来自荷兰的大三学生Emiel Boven,在成立游戏工作室并开发一款黑魂类动作冒险游戏的过程中,对Unity中的着色器编程所进行的探索与研究,本文不会涉及具体的代码,主要为大家分享在Unity中实现冰雪与天空着色器的一些经验。

Unity着色器基本概念

100429tfzljjhfof5bodqh.png

着色器的本质其实非常简单:就是用来传递并处理3D坐标及属性的小程序,最后写入屏幕以2D图像呈现。Unity自带的标准着色器都拥有特定功能,也可以利用自定义着色器来替换标准着色器来改变最终输出的图像效果,如自定义顶点及片段(或像素)着色器。例如,顶点着色器可以利用位移贴图对模型的顶点坐标进行位移,而无需改变所导入的模型文件。

100430t7lwg7ggwhsg57w2.png

想要编写光照交互效果正常的着色器比较复杂,所以大多数情况下通常会使用表面着色器来实现这类效果。Unity的表面着色器可以生成大部分的光照计算,所以开发者不用自己手动编写这些计算公式,从而专注于最终想要实现的效果。而对于不需要进行光照计算的特效,例如延迟贴花与后处理特效等,仍旧会使用顶点及片段着色器。

使用Unity进行着色器编程,也可以借助像Amplify Shader Editor或Shader Forge这样的可视化节点编辑器,无需编写代码即可实现非常酷炫的着色器特效。当然,了解更多的底层原理也更有助于理解渲染管线工作流,并利用这些节点编辑器来实现更加复杂的着色器。

冰雪着色器

100431pk9x3lkk27ckkx7k.jpg

天空盒着色器

100433ct4tnb4sx7boj7ii.png

云层是动态的,所以这里使用噪声纹理来操作静态图片的UV,让云层可以缓慢飘过天空并变换形状。

100434bipoojioio3w6i3z.png

着色器实现

在Unity中实现着色器是比较简单的,无论是手动编写还是利用节点编辑器插件。如果没有任何着色器相关经验,建议大家从Amplify Shader Editor或Shader Forge这样的可视化编辑工具开始入手,来实现一些简单的着色器特效并尝试理解材质、纹理及底层渲染原理,以便于后期可以制作出更加复杂更加酷炫的着色器。借助这些工具可以有效提高开发效率,避免手动编写带来的语法错误,也不必再去记住各种方法的具体名称。

结语

着色器的应用十分广泛,可以实现多种基于网格的奇妙效果,也能用于粒子系统与后处理特效。它除了可以为游戏效果增色添彩之外,还可以带来全新的游戏玩法设计。后面我们还会为大家分享更多着色器编程相关的实例教程在Unity官方中文社区(unitychina.cn),请大家保持关注!

原文链接:https://80.lv/articles/building-shaders-in-unity-5/
(如何加入翻译组)
转载请注明:来自Unity官方中文社区(forum.china.unity3d.com)
Unity, Shader, 着色器, 材质锐亚教育

锐亚教育 锐亚科技 unity unity教程