投射具有给定颜色的反射光线,并将结果与输入颜色合并。使用该着色器可将反射效果添加到提供照明的基础着色器中,可以与其他基础着色器添加的折射或透明效果相结合。如果不能投射反射光线(因为已超出跟踪深度或反射光线导致着色器调用失败,或已设定 notrace 参数),则对环境(如果有)进行采样。
color "mib_reflect" (
color "input",
color "reflect",
boolean "notrace")
以某一折射率投射具有给定颜色的折射光线,然后将结果与输入颜色合并。可以使用另一个基础着色器(例如 mib_refraction_index)计算折射率,该值还会存储回相应的状态变量。使用该着色器可将折射效果添加到提供照明的基础着色器中。
color "mib_refract" (
color "input",
color "refract",
scalar "ior")
投射具有给定颜色的透明光线,并将结果与输入颜色合并。此函数与假定折射率为 1 的上一函数类似。
color "mib_transparency" (
color "input",
color "transp")
继续具有给定颜色的光线,并将结果与输入颜色合并。用途是继续光线,好像当前相交点不存在。体积计算的跟踪深度、光线类型和距离不会修改。典型用途是展示厅的墙,在这种情况下,摄影机位于外部,以便该房间的墙必须被忽略。
color "mib_continue" (
color "input",
color "transp")
投射具有给定强度的透明光线,并将结果与输入颜色合并。该函数与上一个函数类似,只是给定不透明度而不是透明度。不透明度被定义为“1.0 - 透明度”。
color "mib_opacity" (
color "input",
color "opacity")
折射的另一种变体,增加了高光反射度(Snell 定律)。该着色器只执行绝缘体材质的折射部分;高光保留给其他照明节点。
color "mib_dielectric" (
color "input",
color "absorb",
scalar "refract",
scalar "ior")
color "mib_volume" (
color "color",
scalar "max",
boolean "lightrays")
Ray Marcher 从给定光线上的点投射光线,近似于透过该体积发射光线的光源的体积贡献。该着色器不使用诸如 mi_sample_light 等着色器界面函数,而是调用作为类型 shader 的输入参数提供的着色器。光线行进包括为光线起点与终点之间的常规点调用着色器,如果两个相邻着色器调用返回的颜色值小于给定的对比度阈值,则以自适应方式细分每个间隔,直到达到指定的细分限制为止。返回加权总和。
color "mib_ray_marcher" (
shader "shader",
scalar "distance",
integer "num",
integer "subdiv",
color "contrast")
选择一种或另一种输入颜色,具体取决于投射到几何体哪一侧。该着色器通常用作多路复用材质着色器,将其他两个材质着色器指定给前向和后向参数。
color "mib_twosided" (
color "front",
color "back")
基于父光线的扫描(不基于法线向量;如果场景包含可疑几何体(例如,仅在尖端具有一个与轴对齐的法线的圆锥体),这可能不可靠)确定光线是进入还是离开它投射到的对象。将返回折射率比(出射除以入射)。产生的副作用是,折射的入射率和出射率都存储在 state(分别为 ior_in 和 ior)中;如果光线进入,则当前的体积着色器成为折射体积。
struct {
scalar "ior",
boolean "enter"
} "mib_refraction_index" (
scalar "mtl_ior")
本部分中介绍的着色器是用于生成光泽(模糊)反射和折射的方法。以下内容阐述了这些着色器与物理 DGS 着色器之间的性能和可用性差异:
DGS 着色器投射一条光泽光线以进行反射和折射,这依赖于整个图像的过采样(具有关联的性能损失),以平均突出模糊的采样。每条光线都是一个新的独立采样。
相反,mib_glossy_* 着色器将进行多个光泽光线采样,从而导致仅在光泽表面(而不是整个图像)上进行过采样。采样使用 mental ray 严格确定的采样引擎创建,因此可以创建更吸引人的采样图案,从而以相同数量的采样可产生“外观更棒”的模糊。

上面的图像使用 samples 0 1 渲染,用户可以在左侧清楚地看到粗糙的结果。若要获得平滑结果,用户需要增加整个图像的采样。相反,mib_glossy_* 处理自己的过采样(在该示例中为8 个采样)并仅在光泽表面本身上应用。
虽然在反射情况下是严格非物理的,但是 mib_glossy_* 着色器允许限制反射光线和折射光线的范围。这样有助于消除因远距离的反射/折射对象导致的图像噪波,并可以极大地改善性能。

mib_glossy_* 着色器的一个目标是,通过过滤出远处的对象并替换为一种材质(对于折射)或环境(对于反射)来避免远距离图像噪波。但是,若要避免采样(比如环境)中噪波过量,反射着色器会特意对环境进行单采样(甚至还可以为其传递一个显式预模糊环境)以移除噪波。
这些着色器将使用显式传递的 UV 向量进行各向异性光泽反射/折射,但如果显式向量丢失(设定为 0,0,0),将尝试计算其本身。
DGS 着色器计算镜面反射或折射的方向,然后在 shiny 函数确定的范围内扰动此方向。相反, mib_glossy_* 着色器模拟光泽度,仿佛反射或折射之前微面位于曲面中。这意味着,反射和折射方向的计算方法为:实际扰动法线向量(模拟微小级别的粗糙曲面),然后基于更改的法线计算新的反射或折射方向。
很显然,这样会产生不同的结果,并使光泽度与视图方向有关。例如,地板上反射的光泽度图案将被垂直拉伸。看水上的日落时会看到同样的效果,这时太阳的反射似乎被垂直拉伸为长条纹的日光。

大多数反射材质在掠射角会反射更多光线,而透明材质在正面角度会透射更多光线。反射和透射之间的这种重新平衡称为“菲涅尔效应”。这些着色器允许为“边”(掠射角)和“基础”(正面角度)设定不同的权重以模拟这种效果。在 mib_glossy_* 着色器中,每采样计算此效果(而不是作为整个反射的全局权重计算),以获得更真实的效果。

请注意,右侧图像的边(呈掠射角的曲面)比左侧图像的边反射的多。
将显示 mib_glossy_* 着色器具有 dispersion 参数,用于设定“人造色度色差”的量。该效果未物理校正,只是真实现象的模拟。
这是用于光泽反射的着色器。它将光泽反射添加到与着色器连接的基础材质。
color "mib_glossy_reflection" (
shader "base_material",
color "reflection_color",
scalar "max_distance",
scalar "falloff" default 2.0,
color "environment_color",
scalar "reflection_base_weight" default 0.2,
scalar "reflection_edge_weight" default 1.0,
scalar "edge_factor" default 5.0,
shader "environment",
boolean "single_env_sample" default true,
integer "samples" default 16,
scalar "u_spread" default 0.5,
scalar "v_spread" default 0.5,
vector "u_axis",
vector "v_axis",
scalar "dispersion" default 0.0,
array color "spectrum"
)
apply material, texture
version 3
此着色器与 mib_glossy_reflection 非常类似,但存在一些差别。由于它处理折射,因此有一个“深材质”而不是环境。

color "mib_glossy_refraction" (
shader "top_material",
shader "deep_material",
shader "back_material",
boolean "render_reverse_of_back_material",
color "refraction_color",
scalar "max_distance",
scalar "falloff" default 2.0,
scalar "refraction_base_weight" default 1.0,
scalar "refraction_edge_weight" default 0.2,
scalar "edge_factor" default 5.0,
scalar "ior" default 1.0,
integer "samples" default 16,
scalar "u_spread" default 0.5,
scalar "v_spread" default 0.5,
vector "u_axis",
vector "v_axis",
scalar "dispersion" default 0.0,
array color "spectrum"
)
apply material, texture
version 2

Copyright © 1986, 2015 NVIDIA ARC GmbH. All rights reserved.