US2S2L7-1——表面着色器

这里仅保留概念相关知识,关于表面着色器的详细知识,请直接参见:US5L9——表面着色器

表面着色器

表面着色器(Surface Shader)是 Unity 自己创造的一种着色器代码类型,
它的本质是对顶点 / 片元着色器的一层封装,它需要的代码量很少,很多工作都帮助我们去完成了

它的优点在于,它帮助我们处理了很多光照细节,我们可以直接使用而无需自己计算实现光照细节,
它的缺点是渲染的消耗较大,可控性较低,

我们可以在创建 Shader 时,选择创建 Standard Surface Shader

image

通过观察该 Shader 文件的内部结构,会发现着色器相关代码被放在 SubShader​ 语句块中(并非 Pass​ )的 CGPROGRAM​ 和 ENDCG​ 之间

image

表面着色器的特点就是:

  1. 直接在 SubShader​ 语句块中书写着色器逻辑
  2. 我们不需要关心也不需要使用多个 Pass​,每个 Pass​ 如何渲染,Unity会在内部帮助我们去处理
  3. 可以使用 CG 或 HLSL 两种 Shader 语言去编写 Shader 逻辑
  4. 代码量较少,可控性较低,性能消耗较高
  5. 适用于处理需要和各种光源打交道的着色器(主机、PC平台时更适用,移动平台需要考虑性能消耗)