更新时间:2022-10-07 08:47:36
本节书摘来自华章计算机《Unity着色器和屏幕特效开发秘笈(原书第2版)》一书中的第2章,第2.2节,作者 [英]艾伦朱科尼(Alan Zucconi)[美]肯尼斯拉默斯(Kenneth Lammers),译 占红来,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
在开始学习纹理映射之前,我们需要先理解漫反射着色是怎么工作的。某些物体的颜色比较均匀,表面很光滑,但是又不是光滑到那种像镜子一样光亮的程度。这种非反光材料***的渲染方式就是使用漫反射着色器。虽然在真实世界中纯漫反射材料本身并不存在,但在游戏世界中漫反射着色器是一种大量用到的相对廉价的着色方式。
创建漫反射着色器有多种方式。最快的一种方式是从Unity 5 的标准着色器开始,然后编辑标准着色器,移除所有纹理。在第1章中我们就是这么做的。
我们从标准着色器开始,按照下面的步骤逐步进行:
因为该着色器是在一个标准着色器的基础上修改的,它会使用基于物理基础的渲染方式来模拟光照行为。如果你想做一种非拟实的外观,可以直接修改第一个#pragma指令来让其使用Lambert而不是Standard。如果你这么做了,还应该将SurfaceOutputStandard替换为SurfaceOutput。
着色器中,材质的渲染属性和光照模型之间是通过表面输出来通信的。表面输出是对当前光照模型所需的所有参数的一个封装。所以你应该能理解不同的光照模型需要不同的表面输出结构了。下面列出了Unity 5中三种主要的表面输出结构。
SurfaceOutput结构有如下属性:
SurfaceOutputStandard结构有如下属性:
SurfaceOutputStandardSpecular结构有如下属性:
正确使用表面着色器很重要的一点是用正确的值初始化表面输出结构。