Unity3D 内置了很多 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,否则使
用固定管线的。