半金属性: 物体该具有怎样的金属含量。同常为0或1,但对于一些奇怪的材料可以使用中间的值。这个将决定光如何在材料上发生反射;
半平滑性:决定表面平滑程度, 从0到1;
半吸收性:指定 AO 特效大小。
你应当通过 SurfaceOutputStandardSpecular 使用镜面流,其使用 float3 镜面替换了半金属性。注意当朗伯反射存在一个半镜面场,其在 PBR 中的镜面属性就是一个 float3。这符合镜面反射光波的 RGB 颜色值属性 。
Unity 中使用的着色技术迄今为止已经介绍了四种不同的着色技术。为了避免混淆,可以参考下表中所示,顺序分别为:着色技术,表面着色器名,表面输出结构体名和内置着色器名称。
Unity4 及以下 Unity5 及以上漫射
Lambertian reflectance
Lambert, SurfaceOutput
Bumped Diffuse
Physically Based Rendering (Metallic)
Standard, SurfaceOutputStandard
Standard
反射
Blinn–Phong reflection
BlinnPhong, SurfaceOutput
Bumped Specular
Physically Based Rendering (Specular)
Standard, SurfaceOutputStandardSpecular
Standard (Specular setup)
PBR 背后的方程非常复杂。如果你对背后的数学比较感兴趣,维基百科中的渲染方程和这篇文章 将是非常好的起点。
如果你导入 Unity3D 包 (包含了该例程中用到的着色器), 你将注意到内置 “Bumped Diffuse” 着色器是怎么产生一个与其最初实现“Simple Lambert”非常不同的结果。这是因为 Unity3D 的着色器增加了额外的特性,比如正常的映射。
结论
本文介绍了用于表面着色的自定义光照模型。通过一个关于如何修改获得不同特性的真实例子简单解释了朗伯和 Blinn-Phong 模型。有必要注意下单纯的漫射材料实际上在生活中是不存在的:即使是你所想到的最钝的材料也会有一些镜面反射。漫射材料在过去中非常普遍,因为计算镜面反射开销太大。
本文也介绍了什么是 PBR,以及在 Unity5 中如何使用。PBR 着色器与表面着色器没有什么区别,仅仅是带有了一个非常高级的光照模型。
Unity3D 的详细介绍:请点这里
Unity3D 的下载地址:请点这里
英文原文:Physically Based Rendering and lighting models in Unity3D