Unity Shader-Universal Render Pipeline(URP)基础入门三

Physically Based Shading
在学习之前首先贴个基础知识普及
英文原版:https://marmoset.co/posts/basic-theory-of-physically-based-rendering/
大佬翻译:https://zhuanlan.zhihu.com/p/49564527

Energy Conservation(能量守恒)
Albedo(反照率)
Microsurface(微表面)
Reflectivity(反射率)
Fresnel(菲涅耳)
Ambient Occlusion(环境光遮蔽)
Cavity(腔数)

1-Energy Conservation

物体反射的光不能超过其接收的光
Unity Shader-Universal Render Pipeline(URP)基础入门三_第1张图片
出于实际目的,更多的漫反射和粗糙材质将反射较暗和较宽的高光,而更平滑和更多反射的材质将反射更亮和更紧密的高光

2-Albedo

反照率是基础颜色输入,通常称为漫反射贴图。
Unity Shader-Universal Render Pipeline(URP)基础入门三_第2张图片
albedo map(反射率贴图)定义了散射光的颜色。PBR系统中的反照率图与传统的漫反射图之间的最大区别之一是缺少方向性光或环境光遮挡。在某些照明条件下,定向光看起来不正确,因此应在单独的AO插槽中添加环境光遮挡。

反照率图有时还会定义比漫反射色还多的颜色,例如,当使用金属度贴图时,反照率图定义绝缘体(非金属)的漫反射色和金属表面的反射率。

3-Microsurface

微观表面定义了材料表面的粗糙度或光滑度。
Unity Shader-Universal Render Pipeline(URP)基础入门三_第3张图片
在这里,我们看到了能量守恒原理如何受到材料的微观表面的影响,较粗糙的表面将显示较宽但较暗的镜面反射,而较光滑的表面将显示较明亮但较尖的镜面反射。

根据您要为其编写内容的引擎,纹理可以称为粗糙度图,而不是光泽图。实际上,这两种类型之间几乎没有什么区别,尽管粗糙度图可能具有倒置的映射,即:暗值等于光泽/平滑表面,而亮值等于粗糙/无光泽表面。默认情况下,Toolbag希望白色定义最光滑的表面,而黑色则定义最粗糙的表面,如果要加载比例反转的光泽度/粗糙度图,请单击光泽度模块中的“反转”复选框。

4-Reflectivity

反射率是表面反射的光的百分比。所有类型的反射率(也称为基本反射率或F0)输入(包括镜面反射,金属度和IOR)都定义了正面观察时表面的反射率,而菲涅尔定义了掠射角时表面的反射率。
Unity Shader-Universal Render Pipeline(URP)基础入门三_第4张图片

重要的是要注意绝缘材料的反射率范围有多窄。结合节能的概念,很容易得出结论,通常应在微表面图中而不是反射率图中表示表面变化。对于给定的材料类型,反射率倾向于保持相当恒定。对于绝缘子,反射颜色趋向于是中性/白色,而对于金属,仅反射颜色。因此,可以丢弃专门用于反射强度/颜色的图(通常称为镜面图),而倾向于金属图。
Unity Shader-Universal Render Pipeline(URP)基础入门三_第5张图片
使用金属度贴图时,会为绝缘面(在金属度贴图中设置为0.0(黑色)的像素)分配固定的反射率值(线性:0.04 sRGB:0.22),并将反照率图用作漫反射值。对于金属表面-在金属度贴图中将像素设置为1.0(白色)-从反照率贴图中获取镜面反射的颜色和强度,并且在着色器中将漫反射值设置为0(黑色)。金属度图中的灰度值将被视为部分金属,并且将从反射率中拉出反射率,并使漫反射与该值成比例地变暗(部分金属材料不常见)。

同样,金属度贴图在物理上不比标准镜面贴图更准确。但是,这是一个可能更易于理解的概念,并且可以将金属度贴图打包到灰度插槽中以节省内存。在镜面贴图上使用金属贴图的缺点是无法控制绝缘材料的精确值

传统的镜面贴图可以更好地控制镜面反射强度和颜色,并在尝试复制某些复杂材质时具有更大的灵活性。高光贴图的主要缺点是通常会将其保存为24位文件,从而导致更多的内存使用。它还要求艺术家对物理材料的性能有很好的理解,以正确确定值,根据您的观点,值可以是正面的也可以是负面的。

提示:金属度贴图应使用0或1的值(对于过渡,可以使用某些渐变)。油漆金属等材料不应设置为金属,因为油漆是绝缘体。金属性值应代表材料的顶层。

IOR是定义反射率的另一种方式,等效于镜面反射和金属度输入。与镜面输入的最大区别是IOR值是用差异标度定义的。IOR标度确定相对于真空,光在材料中传播的速度。IOR值为1.33(水)意味着光在水中传播的速度是空旷空间的1.33倍。您可以在Filmetrics折射率数据库中找到更多测量值。

对于绝缘子,IOR值不需要颜色信息,可以直接在索引字段中输入,而消光字段应设置为0。对于具有颜色反射的金属,您需要输入红色,绿色的值和蓝色频道。这可以通过图像映射输入(映射的每个通道包含正确的值)来完成。还需要为金属设置消光值,通常可以在包含IOR值的库中找到该金属。

通常不建议使用IOR,而不是使用镜面反射或金属感输入,因为IOR通常不在游戏中使用,并且很难在具有多种材质类型的纹理中获得正确的值。在Toolbag 2中,IOR输入更多地出于科学目的而不是实际目的得到支持。

5-Fresnel

菲涅耳是表面以掠射角反射的光的百分比
Unity Shader-Universal Render Pipeline(URP)基础入门三_第6张图片
通常,菲涅耳应设置为1(并使用金属反射率模块将其锁定为1的值),因为所有类型的材料在掠射角处都可以100%反射。通过光泽度图的内容会自动解决微表面中的差异,这些差异会导致菲涅耳效果更亮或更暗。

注意: Toolbag 2当前不支持纹理贴图来控制菲涅耳强度。

在Toolbag 2和大多数PBR系统中,BRDF(在这种情况下为Blinn-Phong或GGX)自动近似菲涅耳,并且通常不需要其他输入。但是,对Blinn-Phong BRDF的菲涅耳有一个额外的控制,这是传统用途,因为它可能导致物理上不准确的结果。

6-Ambient Occlusion

环境光遮挡(AO)代表大规模的光遮挡,通常从3d模型中烘焙
Unity Shader-Universal Render Pipeline(URP)基础入门三_第7张图片
将AO作为单独的贴图添加,而不是将其烘焙到反照率和高光贴图中,可使着色器以更智能的方式使用它。例如,AO功能仅遮挡环境漫射光(工具包2中基于图像的照明系统的漫射组件),而不引导来自任何类型的动态光或镜面反射的漫射光。

AO通常不应与镜面或光泽图相乘。在过去,将AO乘以镜面贴图可能是减少不适当反射(例如,天空在被遮挡的物体上反射)的常用技术,但是如今,局部屏幕空间反射在表示对象间反射方面做得更好。

7-Cavity

腔图代表小规模的遮挡光,通常是从3D模型或法线贴图烘焙而来。
Unity Shader-Universal Render Pipeline(URP)基础入门三_第8张图片
腔图应仅包含曲面的凹面区域(凹坑),而不能包含凸面区域,因为腔图被相乘。内容物应该大部分是白色的,带有较暗的部分,以表示将陷入光的表面凹陷区域。腔图会影响环境光源和动态光源的漫反射和镜面反射。

或者,可以将反射遮挡图加载到腔体插槽中,但是在执行此操作时,请确保将漫反射腔体值设置为0。
这个用的不多,也不是很懂,参考链接:http://www.vfxnews.net/news/news-show.php?id=546

你可能感兴趣的:(UnityGrap,unity)