有关分层着色器的技术信息

一些技术详细信息

支持的灯光路径表达式 (LPE)

在该版本的分层着色器中,可用的过程具有以下 LPE 描述。请注意,最近的典型过程名称遵循第三列中的描述。

 
LPEdescriptive nametypical pass name
"L<RD>E""direct_diffuse" (reflection)"diffuse"
"L<R[GS]>E""direct_glossy_specular""specular"/"highlight"
"L<RG>E""direct_glossy""specular"/"highlight", glossy part
"L<RS>E""direct_specular""specular"/"highlight", specular part
"L.+<RD>E""indirect_diffuse""indirect"
"L.+<R[GS]>E""indirect_glossy_specular""reflection"
"L.+<RG>E""indirect_glossy""reflection", glossy part
"L.+<RS>E""indirect_specular""reflection", specular part
"L.+<TD>E""diffuse_transmission""translucency"
"L.+<T[GS]>E""indirect_glossy_specular_transmission" refraction"
"L.+<TG>E""glossy_transmission" refraction", glossy part
"L.+<TS>E""specular_transmission""refraction", specular part
"<L'front'>.*TV[VR]*TE""front_scatter"
"<L'back'>.*TV[VR]*TE""back_scatter"
"L.*VE"
"LaE""emission"
"La<RS>E"
"debug_highlight"
"debug_reflection"
"L<RD><TS>+E""direct_diffuse_transmitted"
"L<RG><TS>+E""direct_glossy_transmitted"
"L<RS><TS>+E""direct_specular_transmitted"
"L.+<RD><TS>+E""indirect_diffuse_transmitted"
"L.+<RG><TS>+E""indirect_glossy_transmitted"
"L.+<RS><TS>+E""indirect_specular_transmitted"

LPE 名称可以原样用于帧缓冲区上的 LPE 属性,或者可以通过字符串选项任意指定以上任何给定 LPE 名称的供选择的描述性名称。如果不通过 LPE 名称指定,则可以将上面的描述性名称直接用作帧缓冲区名称。这意味着上面以用户帧缓冲区命名的任何描述性名称将自动由分层组件写入。

关于 mila_glossy_reflection 和“mila 使用可见区域高光”/“mila 可见区域高光”

在使用传统灯光循环时,光泽/镜面反射高光(透过有反射效果的曲面的直接可见光源)曾经是计算机图形中的一个技巧。实际上,它们是光源的反射。但要在具有跟踪反射光线的计算机图形中出现此反射,光源必须为区域光(即,不是 infinitessimal 点),而且还在场景中设置为可见。渲染那些使用或不使用灯光循环的操作很容易对用户造成困扰,使他们在如何指定他们习惯使用的术语方面很难做出抉择。此字符串选项允许为所有光泽着色器更清楚地定义此内容。

注意打开/关闭“mila 使用可见区域高光”会启用/禁用该功能。“mila 可见区域高光”字符串选项的默认值为 -1,它表示自动。在大多数情况下,请保留默认值,不进行更改。

下面是应用到该选项的逻辑:

与所有区域光一样,设置为不可见的区域光总是会生成镜面反射高光。这与 mia_material 具有相同的行为。

“mila 可见区域高光”字符串选项是旧 mia_material 参数 no_vis_area_highlight 的扩展,仅针对可见区域光启用/禁用镜面反射高光,且不会以任何方式更改可见区域光反射。

相反,此参数实际上是可见区域光实际反射,或指定灯光的镜面反射高光之间的合适平衡工具。

-1
(默认值,也是建议值)使用自动探试法来根据光泽度确定该值。
0.0
可见区域光生成镜面反射高光,而是在反射中 100% 可见。此值非常适于高光泽度或高光表面以及大型区域光(区域光在任何时间所覆盖的对角都大于光泽圆锥体的角度)。
1.0
可见区域光生成传统的镜面反射高光,且对于反射光线来说可见。此值非常适于光泽度较低并且区域光较小的表面。
0.0 > X > 1.0
大于 0.0 且小于 1.0 的任何值都是两种反射的混合。这些值仍然保持平衡状态,因此总能量是准确的。

示例

此处是一些示例图像,用于说明以两种不同的方式对可见区域光进行采样而导致的问题。这些图像有意使用低质量设置进行渲染,使我们清楚明白这两种情况中的颗粒问题:

“mila 可见区域高光”= 0.0(低光泽度曲面)。这意味着所有采样都在反射光线中完成,但由于光泽圆锥体的扩散所覆盖的区域大于灯光,这会导致严重的颗粒问题(特别是对于较小的灯光,其曲面具有更高的辐射以发射相同的总强度)
“mila 可见区域高光”= 0.0(低光泽度曲面)。这意味着所有采样都在反射光线中完成,但由于光泽圆锥体的扩散比灯光覆盖更大的区域,这会导致严重的颗粒问题(特别是对于较小的灯光,其曲面具有更高的辐射以发射相同的总强度)
“mila 可见区域高光”= 1.0(低光泽度曲面)。在此情况下,所有采样都是在灯光中完成,大幅度减少了颗粒,因为灯光采样在光泽圆锥体内结束的概率很高
“mila 可见区域高光”= 1.0(低光泽度曲面)。在此情况下,所有采样都是在灯光中完成,大幅度减少了颗粒,因为灯光采样在光泽圆锥体内结束的概率很高
“mila 可见区域高光”= 0.0(高光泽度(镜面反射)曲面)。所有采样都在反射光线中完成,但由于光泽圆锥体(在这种情况下是单个光线)的扩散区域远小于灯光区域,这将产生清晰的反射
“mila 可见区域高光”= 0.0(高光泽度(镜面反射)曲面)。所有采样都在反射光线中完成,但由于光泽圆锥体(在这种情况下是单个光线)远小于灯光区域,这将产生清晰的反射
“mila 可见区域高光”= 1.0(高光泽度(镜面反射)曲面)。相反,尝试在镜面反射情况中使用灯光采样时,将使得灯光采样在狭窄的镜面反射度圆锥体内存在的概率变得极低,由此产生噪波
“mila 可见区域高光”= 1.0(高光泽度(镜面反射)曲面)。相反,尝试在镜面反射情况中使用灯光采样时,将使得灯光采样在狭窄的镜面反射度圆锥体内存在的概率变得极低,由此产生噪波

我们可以看到,高光泽度曲面和低光泽度曲面“mila 可见区域高光”参数具有不同的合适设置。出于此原因,启发式设置“-1”得以存在,它基于光泽度计算使用的实际值。与可变光泽度结合使用时非常有用:

“mila 可见区域高光”= -1.0(可变光泽度曲面)。此模式尝试的最佳设置取决于光泽度,这样才能获得最佳图像
“mila 可见区域高光”= -1.0(可变光泽度曲面)。此模式尝试的最佳设置取决于光泽度,这样才能获得最佳图像