# 对标准着色器 Standard Shader 的使用(一)

学习材料来自:

笔记记于 2017/04/25

写在前面 #

Unity 5 的 Standard Shader 适用于各种材质的物体。为什么不同的材质看起来会是如此的不同呢?

材质和光的交互可以分成漫发射和高光反射两个部分,其中漫发射对应了次表面散射的结果,而高光反射对应了表面发射的结果。通过对金属材质和非金属材质的分析,我们可以得到它们的漫反射和高光反射的一些特点。

金属材质:// 几乎没有漫反射,因为所有被吸收的光都会被自由电子立刻转化为其他形式的能量; // 有非常强烈的高光反射; // 高光反射通常是有颜色的,例如金子的反光颜色为黄色;

非金属材质:// 大多数角度高光反射的强度比较弱,但是在掠射角时高光反射强度反而会增强,即菲涅尔现象;// 高光反射的颜色比较单一; // 漫反射的颜色多种多样;

PS:菲涅尔反射,是反射/折射与视点角度之间的关系。例如,如果你站在湖边,低头看脚下的水,你会发现水是透明的,反射不是特别强烈;如果你看远处的湖面,你会发现水并不是透明的,但反射非常强烈。这就是“菲涅尔效应”、“菲涅尔现象”。 也就是:视线垂直于表面时,反射较弱,当视线非垂直表面时,夹角越小,反射越明显。例如,看向一个球面,圆球的中心的反射较弱,靠近边缘较强,不过这种过渡关系被折射率影响。 在真实世界中,除了金属之外,其他物质均有不同程度的“菲涅尔效应”。

真实的材质大多混合了上面的这些特性,Unity 提供的工作流就是为了更加方便地让我们针对以上特性来调整材质效果。

使用标准着色器 #

Unity 官方提供了两个非常有参考价值的校准表格,即示例项目 Shader Calibration Scene

它们分别对应金属工作流和高光反射工作流使用的参考属性值,方便我们针对不同类型的材质来调整参数。

下图是金属工作流使用的校准表格 UnityMetallicChart

Albedo 定义物体的整体颜色,即我们视觉上认为的物体颜色;

金属材质的亮度一般在 186 ~ 255 之间, 非金属的亮度范围通常在 50 ~ 243 之间;

Metallic 定义物体表面看起来是否更像金属或非金属;
例如,把金属材质的 Metallic 值设为 1,表明该物体几乎完全是一个金属材质;把塑料材质的 Metallic 值设为 0,表明物体几乎没有任何金属特性。

Smoothness 是 Metallic 属性的附属值,定义从视觉上看该表面的光滑程度;
例如,Metallic 属性使用一张纹理,这张纹理的 A 通道就对应了表面的 Smoothness 值,此时纹理的 GB 通道被忽略。Smoothness 越大金属表面越光滑,反之对应于非金属表面越粗糙。

下图是高光反射工作流使用的校准表格 UnitySpecularChart

高光反射工作流使用了不同含义的 Albedo 属性,这里是定义材质表面的漫发射强度;
例如,对于非金属材质,它的值是视觉上认为的物体颜色;对于金属材质,它的值非常接近黑色,因为金属材质几乎不存在次表面散射的现象。

使用 Specular 替代了上述的 Metallic 属性,定义了表面的高光反射强度;
例如,非金属材质的 Specular 值通常使用一个灰度值范围在 0~55 的深灰色,以表明非金属的高光反射比较弱;金属材质则通常使用视觉上认为的金属的颜色作为 Specular 值。

Smoothness 是 Specular 的一个子属性,定义了从视觉上看该表面的光滑程度;
例如,使用一张纹理为 Specular 属性赋值,那么纹理的 RGB 通道 对应了 Specular 属性值,A 通道对应了 Smoothness 属性值。
 

—– 并不华丽的分割线 —–

 
除了以上的属性设置,还可为 Standard Shader 选择它使用的渲染模式,即材质面板上的 Render Mode。

Standard Shader 支持 4 种渲染模式,分别是 Opaque、Cutout、Fade 和 Transparent。

Opaque 用于渲染最常见的不透明物体,是默认的渲染方式;
Cutout 渲染模式下,Albedo 属性中纹理的 A 通道会成为一个掩码纹理,子属性 Alpha Cutoff 将是透明度测试时使用的阈值;
Transparent 模式用于玻璃这样的材质,Albedo 属性的 A 通道用于控制材质的透明度;当材质的透明值不断降低时,它的反射仍然能被保留;
Fade 模式与 Transparent 模式类似,但是不同的是,当材质的透明值不断下降时,该材质的所有渲染效果都会逐渐从屏幕上淡出;

要想得到可信度更高的渲染结果,我们需要对不同的材质使用合适的属性值,尤其是一些重要的属性值,例如 Albedo、Metallic、Specular。

要想让整个场景的渲染结果令人满意,尤其包含了复杂光照的场景,仅仅有这些使用了 PBS 的材质还不够,还需要使用 Unity 提供的其他一些重要技术,例如 HDR 格式的 Skybox、全局光照、反射探针、光照探针、HDR 和屏幕后处理等。

End.