Unity3D 的物理渲染和光照模型(4)

半金属性: 物体该具有怎样的金属含量。同常为0或1,但对于一些奇怪的材料可以使用中间的值。这个将决定光如何在材料上发生反射;

半平滑性:决定表面平滑程度, 从0到1;

半吸收性:指定 AO 特效大小。

你应当通过 SurfaceOutputStandardSpecular 使用镜面流,其使用 float3 镜面替换了半金属性注意当朗伯反射存在一个半镜面场,其在 PBR 中的镜面属性就是一个 float3。这符合镜面反射光波的 RGB 颜色值属性 。

Unity 中使用的着色技术

迄今为止已经介绍了四种不同的着色技术。为了避免混淆,可以参考下表中所示,顺序分别为:着色技术,表面着色器名,表面输出结构体名和内置着色器名称。

    Unity4 及以下   Unity5 及以上  
漫射  

Lambertian reflectance

Lambert, SurfaceOutput

Bumped Diffuse

\[I = N \cdot L\]

 

Physically Based Rendering (Metallic)

Standard, SurfaceOutputStandard

Standard

 
反射  

Blinn–Phong reflection

BlinnPhong, SurfaceOutput

Bumped Specular

\[I = \left ( N \cdot  H \right )^{specular} \cdot gloss\]

 

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/fb366dea235f5a11bd4d198e9f0d2501.html