这些着色器具有优异的布局灵活性,并使用 NVIDIA ARCS 的 MDL 作为其组件的灵感。在此图中,您可以看到:
可通过使用灯光路径表达式 (LPE)术语指定额外的输出过程。这些 LPE 的子集由分层着色器提供支持,并可以自动写入用户帧缓冲区(只需在摄影机中指定其名称即可完成此过程)。也可以使用全局字符串选项指定可将哪个 LPE 转到任意命名的用户帧缓冲区。大多数典型的着色子集输出(例如“漫反射”)可显示出来,并且应以线性方式将所有分离输出添加到美景“结果”输出。因此,这些相加过程支持合成。可在以下位置获得关于当前支持的过程的详细信息:多个 LPE 过程
着色器接受多个全局设置作为字符串选项,一些用于测试,一些用于调整功能。
| “light relative scale” | 着色器通过侦听“light relative scale”匹配 BSDF 的着色,即它基于“灯光相对规模”调整灯光演示。要匹配 mia_material 着色,“light relative scale”必须为 1/PI。 | “mila ray cutoff” | 这强调中止的重要性,此时光线开始被忽略。它类似于 mia_material 中的refr_cutoff,但在此处它是全局设置。默认值为 0.01(即贡献低于 1% 的光线开始被拒绝)。 | “mila clamp output” | 启用/禁用。在 mila_material 中启用/禁用输出值钳制。默认设置为“禁用”。 | “mila clamp level” | 如果已启用上面的钳制输出,则使用此级别值大致钳制为亮度。默认值为 1.0。如果允许输出值超过 1,但是需要缩小动态范围以进行优化,请尝试使用介于 1 和 5 的值;这些值依赖于场景和流水线要求。 | “mila quality” | 用于分层库中位于其后的所有其他质量设置的质量倍增值。默认值为 1.0。 | “mila glossy quality” | 控制用于光泽反射或光泽透射的采样数目。默认值为 1.0。将使用公称采样数,还由跟踪深度、重要性以及光泽着色器中的粗糙度控制。 | “mila scatter quality” | 控制触点周围的散射采样的采样数目。默认值为 1.0。如果所有其他关于重要性、跟踪深度等的系数较高,则标称值为 64 个采样。 | “mila diffuse quality” | 控制在使用间接漫反射细节时用于间接漫反射的采样数目。默认值为 1.0。 | “mila diffuse detail” | 启用/禁用。启用间接漫反射局部模式,类似于 ao 颜色溢出/FG 力,仅针对 mila_diffuse_reflection 着色。 | “mila diffuse detail distance” | 用于详图的距离。超出该距离时使用常规间接漫反射控制 (GI/FG)。 | “LPE: xxx” | 现已弃用。现在使用帧缓冲区 LPE 属性。定义灯光路径表达式 XXX 将要写入的用户帧缓冲区。要获取当前支持的过程的详细信息,请单击此处。字符串选项必须以“LPE: ”(即冒号后面有空格)开头,然后再指定 LPE。基于典型过程名称的字符串选项示例包括:
|
| “mila share lights” | 可用于调试和性能比较。当禁用时,则灯光共享功能将被禁用,并且每个层(组件)着色器将运行自己的灯光循环。默认设置为启用。 |
| “mila propagate importance” | 可用于调试和性能比较。当禁用时,则到子着色器和子光线的重要性传播将被禁用,以便可以判断此优化所产生的影响。默认设置为启用。 |
| “mila separate interactions” | 用于调试和性能比较。确定是否在第一次投射后,根据组件的概率(即,计算出的最终权重)跟踪次级光线。默认设置为启用。 |
该着色器必须是着色树的根着色器(否则,透明度和阴影着色器将不起作用)。它还可以随意写入帧缓冲区。
declare shader "mila_material" (
# Shader to call
shader "shader",
#
boolean "thin_walled",
shader "backface_shader",
#
scalar "visibility" default 1.0,
#
# Debug/test tool: Show a given fb as beauty
# 1 = ALL, 2 = transparency, 3 = absorb, 4 = LrDE, 5 = LrGE etc.
integer "show_framebuffer" default 0,
#
# overall bump vector for whole material
vector "bump",
#
# Name of framebuffers to output to
# If empty, nothing is written
array struct "extra_color" {
color "color",
string "color_fb",
boolean "color_comp"
},
array struct "extra_vector" {
vector "vector",
string "vector_fb",
boolean "vector_comp"
},
array struct "extra_scalar" {
scalar "scalar",
string "scalar_fb",
boolean "scalar_comp"
}
)
apply material, shadow, photon
version 4
end declare
mila_material 根着色器需要单个 mila_layer 或 mila_mix 作为“着色器”窗口的输入,并且着色树将从此处开始成长。
它还具有以下附加输入:
mila_layer 和 mila_mix 着色器执行针对分层和混合的所有“硬提升”。应仅使用它们
着色器在分层着色器系统之外将无法正常工作,如果您尝试在其他位置使用,它们甚至可能会崩溃。
这些着色器返回单个颜色输出,以将合并着色器组件输入表示为图层。mila_layer 着色器界面是一个初始参数,后跟一个结构数组(如下所示),每个图层对应一个结构。请注意,在某些 DCC 应用程序中使用时,用户界面中不支持类型为“结构数组”的参数。要解决此问题,将提供用于显示固定图层集的现象。
declare shader
color "mila_layer" (
array struct "layers" {
shader "shader",
boolean "on" default on,
scalar "weight" default 1.0, #: min 0 softmax 1
color "weight_tint" default 1 1 1 1,
boolean "use_directional_weight" default off,
integer "directional_weight_mode" default 0, #: enum "fresnel:custom"
scalar "ior" default 1.2,
scalar "normal_reflectivity" default 0.05,
scalar "grazing_reflectivity" default 1.0,
scalar "exponent" default 5.0,
vector "bump"
}
)
version 5
end declare
mila_layer 着色器在合成系统中使用类似于“over”操作的权重,其中权重表示顶层下面的内容相对于顶层的百分比。也就是说,第一层(顶层)组件按指定的确切权重使用,下面的层以 (1 - 权重) 来加权。这将向下递归地应用于各个图层(按其指定顺序)。此行为类似于 mia_material 的内置能量守恒。输入参数如下所示:
declare shader
color "mila_mix" (
boolean "clamp" default off,
array struct "components" {
shader "shader",
boolean "on" default on,
scalar "weight" default 1.0, #: min 0 softmax 1
color "weight_tint" default 1 1 1 1,
vector "bump"
}
)
apply material, texture, shadow, photon
version 2
end declare
mila_mix 着色器混合其各个组件,就如同两个绘制被混合在一个渲染块中。对于 mila_mix,组件输入大致相似,但没有方向权重依赖。权重不会像图层那样解释为百分比。因此,出于能量守恒,使用另一个参数来混合指定的权重,如下所示: