以下是分层包中当前应用的各个表面组件着色器:
漫反射组件与 mia_material 漫反射着色以及在 MDL 中定义的漫反射基本组件非常相似。它具有用于更均匀扩散灯光的 Oren-Nayer 粗糙度参数。下面是相关参数:
"mila_diffuse_reflection" (
color "tint" default 1 1 1,
scalar "roughness" default 0,
scalar "quality" default 1.0, #: min 0 softmax 2.0
scalar "direct" default 1.0,
scalar "indirect" default 1.0
)
光泽反射组件与 mia_material 反射着色以及在 NVIDIA 材质描述语言 (MDL) 中找到的光泽基本 BSDF 相似。实际上,此光泽反射组件采用粗糙度(由 MDL 使用),而不是光泽度(由 mia_material 使用)。尤其是,我们还在下方分别提供了简单的镜面反射组件,用于需要类似镜面反射的十分平滑曲面组件。下面是相关参数:
"mila_glossy_reflection" (
color "tint" default 1 1 1,
scalar "roughness" default 0.0, #: min 0.0 max 1.0
scalar "quality" default 1.0, #: min 0.0 softmax 2.0
scalar "anisotropy" default 1.0,
scalar "aniso_angle" default 0,
integer "aniso_channel" default -1,
boolean "use_max_dist" default off,
scalar "max_dist" default 0.0,
boolean "use_max_dist_color" default off,
color "max_dist_color" default 0 0 0,
scalar "direct" default 1.0,
scalar "indirect" default 1.0
)
镜面反射组件提供类似镜面的反射。它类似于光泽度设置为 1 时的 mia_material 反射着色。它也可以与 MDL 中使用的镜面反射基本 BSDF 关联。下面是相关参数:
"mila_specular_reflection" (
color "tint" default 1 1 1,
boolean "use_max_dist" default off,
scalar "max_dist" default 0.0,
boolean "use_max_dist_color" default off,
color "max_dist_color" default 0 0 0,
scalar "direct" default 1.0,
scalar "indirect" default 1.0
)
实施方式与 mia_material 折射部分基本相同 - 像以前一样,建筑库文档中将包含此处未介绍的所有内容。
"mila_glossy_transmission" (
color "tint" default 1 1 1,
scalar "roughness" default 0.0, #: min 0.0 max 1.0
scalar "quality" default 1.0, #: min 0.0 softmax 2.0
scalar "ior" default 1.2,
scalar "anisotropy" default 1.0,
scalar "aniso_angle" default 0,
integer "aniso_channel" default -1,
boolean "use_max_dist" default off,
scalar "max_dist" default 0.0,
boolean "use_max_dist_color" default off,
color "max_dist_color" default 0 0 0,
scalar "direct" default 1.0,
scalar "indirect" default 1.0
)
实施方式与 mia_material 折射部分基本相同 - 像以前一样,建筑库文档中将包含此处未介绍的所有内容。
"mila_specular_transmission" (
color "tint" default 1 1 1,
scalar "ior" default 1.2,
boolean "use_max_dist" default off,
scalar "max_dist" default 0.0,
boolean "use_max_dist_color" default off,
color "max_dist_color" default 0 0 0,
scalar "direct" default 1.0,
scalar "indirect" default 1.0
)
透明度(不发生折射,而是“直接穿过”透明度)
"mila_transparency" (
color "transparency" default 1 1 1
)
请务必要了解分层着色器中透明度和折射在概念上的区别。
此外,在技术上还有一个非常重要的区别,那就是透射由实际的 mila_glossy_transmission 着色器实现,而透明度由分层根节点实现(如帧缓冲区页面所述),并且作为元信息围绕着色树进行真正传播。
但这一点对最终用户而言不太重要。从最终用户的角度而言,重要的区别在于不管您何时希望光线直接穿过,透明度都适用,透明度可用于:
例如,创建实心玻璃球体表示应用折射镜面反射透射组件顶层上分层的菲涅尔权重镜面反射组件。创建“空心”玻璃球体(考虑直升机的座舱罩或肥皂泡),则是在透明度组件上应用一个类似的菲涅尔权重的反射组件。这两者之间的区别类似于在 mia_material 中使用 thin_walled 参数
实施方式与 mia_material 半透明基本相同
"mila_diffuse_transmission" (
color "tint" default 1 1 1,
scalar "roughness" default 0,
scalar "quality" default 1.0, #: min 0 softmax 2.0
scalar "direct" default 1.0,
scalar "indirect" default 1.0
)
这是一个非常简单的着色器,仅会在面上进行漫反射透射,因此仅在“薄”几何体中真正有用,从而使得后面的灯光可以射穿。
允许将其他颜色添加到着色,如同表面呈放射性一样
"mila_emission" (
color "tint" default 1 1 1,
scalar "intensity" default 10
)
这是一个非常简单的着色器,仅会添加一个常量值,不过是以一种可组合的方式来添加。超出该值不会执行任何复杂的操作,并且如果启用了 FG,将仅会拾取所有“发射的”灯光。
这是一种全新的次表面散射实施方法,渲染外观与 misss_fast_shader2 类似,但不使用光照贴图。
在旧的 SSS 着色器中使用光照贴图会引发问题,原因有如下几个:
次表面散射 (SSS) 着色器将使用“延迟评估”技术,其中灯光暂时存储(缓存)在可二次填充的缓冲区中,该缓冲区可在渲染时被所有核心访问。因此,即使在同一灯光需要计算两次(由于缓冲区大小溢出)的情形下,也可以在多个核心上并行完成操作。所以说,虽然使用预计算的光照贴图的旧 SSS 着色器在计算了光照贴图后速度可能会更快一些,但这些新 SSS 着色器(实时计算相同的信息)往往在整体上更胜一筹,因为所有核心均可以正确使用。
因此,所有参数都位于单个着色器上,而不是像使用旧的 misss_fast* 着色器时那样被拆分成光照贴图和着色阶段。
在大多数情况下,这种着色器是现在进行 SSS 的首选方法,而且如果您希望进行高效分层,尤其是进行蒙皮渲染,通常就应该摈弃那些旧的 misss_fast* 着色器。有关这一点的详细信息,请查看教程页面。
"mila_scatter" (
color "front_tint" default 1.0 1.0 1.0,
scalar "front_weight" default 1.0,
vector "front_radius" default 20 10 5,
color "front_radius_mod" default 1 1 1,
color "back_tint" default 1.0 1.0 1.0,
scalar "back_weight" default 1.0,
vector "back_radius" default 20 10 5,
color "back_radius_mod" default 1 1 1,
scalar "back_depth", # unassigned (zero) means "same as radius"
scalar "sampling_radius_mult" default 2.0,
scalar "light_storage_gamma" default 0.75,
scalar "scale_conversion" default 1.0,
integer "resolution" default 2,
scalar "quality" default 1.0,
scalar "direct" default 1.0,
scalar "indirect" default 1.0
)
此新的着色器仍使用与旧的 misss_fast* 着色器相同的分段方法,即分为“前向”和“后向”(有关“前向”和“后向”的详细信息,请参见该手册中的“次表面”库)。但是,在大多数的日常案例中,您会将这些参数设置为相同的值,因为散射的着色现在通过按颜色的散射半径来完成,这样红色(举例)就可以自动进行进一步的散射。这意味着,通过自动方式对红色进行“后向”散射,而非手动执行该操作。<&p>
同时,这也意味着该着色器本身仍在基于屏幕的坐标空间内工作。虽然新参数更接近“物理”散射的工作方式,但该着色器仍有点小“技巧”,并不是绝对准确 - 而是极其注重视觉效果。
下面是相关参数: