Unity3D Built-in Shader 详解一
Unity3D 的 Shader
Unity 里面的 Shaders 是使用一种叫 ShaderLab 的语言编写的,它同微软的.FX 文件或者 NVIDIA 的
CgFX 有些类似。传统意义上的 vertex shader 和 pixel shader 还是使用标准的 Cg/HLSL 编程语言
编写的。(因此 Unity 文档里面的 Shader,都是指用 ShaderLab 编写的代码) 然后我们来看下 Unity3D
自带的 60 多个 Shader 。 这些 Shader 被 分 为 五 个 大 类 : Normal,Transparent,Transparent
Cutout,Self-llluminated,Reflective。由于数量比较多,将分几个篇幅一一介绍。
(一) Normal Shader Family 这个家族一共 9 个 Shader,都是针对不透明的对象的。 (1) Vertex-Lit:
最简单的一种 Shader 之一,所有照射在该物体上的光在一个 Pass 里面渲染完,光源只在顶点计算。
所以不会有任何基于像素渲染得效果,比如说:normal mapping,light cookies 和 shadows.这个
shader 对模型的剖分(将一个物体从几何描述变为多边形表示的过程)非常敏感,如果你将一个点
光源放在很靠近一个立方体的一个顶点那里,并且对立方体使用这个 shader,光源只会在角落计算。
基于像素光照的 shader 对剖分没有要求,在表现圆形高光上效果也很好。如果上述情况时你想要的
效果,你可以考虑使用一个基于像素光照的 shader 或者增加模型的剖分。(增加顶点数) 总的来说,
这个 shader 的渲染代价比较小。这个 shader 包含了 2 个 subshader,分别对应可编成管线和固定管
线。是所有硬件都支持的一个最基本的 shader。如果设备支持可编成管线,那使用可编成管线的
subshader,否则使用固定管线的。
评论14