建筑材质
简介
什么是 mia_material?
mental ray mia_material 是一个集成的材质着色器,专门设计用于支持建筑和产品设计渲染中所用的大多数材质。它支持大多数硬表面材质,如金属、木材和玻璃。它进行了专门调试,可用于快速的光泽反射和折射(代替了 DGS 材质)和高质量的玻璃(代替了绝缘体材质)。
主要功能如下:
- 易于使用 - 灵活。控件以“最常用的在前”的逻辑方式排列。
- 模板 - 用于更快地获得所需效果。
- 物理精确 - 该材质能量守恒,因此不会导致着色器违反物理定律。
- 光泽性能 - 提升高级性能,包括插值、模拟光泽度和重要性采样。
- 可调整的 BRDF1 - 用户可以定义反射率与角度的关系。
- 透明度 -“实体”或“薄”材质 - 可将玻璃之类的透明对象视为“实体”材质(折射,用多个面构建)或“薄”材质(不折射,可使用单面)。
- 圆角 - 着色器可以模拟“圆角”以使锐边仍能以真实方式捕捉光线。
- 间接照明控件 - 设定每个材质的最终聚集精确度或间接照明级别。
- Oren-Nayar 漫反射 - 可产生“粉末状”的表面,例如粘土。
- 内置环境光遮挡 - 用于接触阴影,增强了小细节效果。
- 多功能着色器 - 内置光子和阴影着色器。
- 打蜡地板、毛玻璃和拂刷金属... - ...均可快速轻松地进行设置。
- 多个输出 - 当使用 mia_material_x 时
mia_material_x 增强功能
该材质具有两种变体,原始 mia_material 和新的扩展 mia_material_x。这些是使用相同基本代码的两个不同界面,因此功能相同,只是 mia_material_x...
-
...具有一些与凹凸页上所述的凹凸贴图相关的附加参数。
-
...支持设定 ao_do_details 为 2,以启用“具有颜色溢出的环境光遮挡”(请参见具有溢出的 AO 页)。
-
...以 mental ray struct 返回值形式返回多个输出。多个输出页对各种输出进行了详细的介绍。
本文档的结构
本文档分为不同的部分,“基础知识”部分(从基础知识页开始)解释材质的主要功能,“参数”部分(参数页)逐一介绍所有参数,“提示技巧”部分(提示和技巧页)为用户提供了一些建议。
基础知识
物理和显示
mia_material 主要试图做到物理精确,因此其输出具有较高的动态范围。材质外观的赏心悦目程度取决于渲染器内部的颜色映射到显示在屏幕上的颜色的方式。
当使用 mia_material 时,强烈建议您确保通过色调映射器/曝光控制操作或至少使用 Gamma 校正。
关于 Gamma 的说明
本文档不介绍 Gamma 校正的所有细节,只做简要概述。
普通的商用计算机屏幕的颜色空间不是线性的。正如我们所预料的一样,RGB 值为 200 200 200 的颜色的亮度并不是 RGB 值为 100 100 100 的颜色亮度的两倍。
这不是“错误”,因为事实上眼睛是以非线性方法看到光,实际感知的前一颜色的亮度约为后者的两倍。这使得普通计算机屏幕的颜色空间在感觉上大致是一致的。这是很有好处的,实际上这也是 24 位颜色(红色、绿色和蓝色分量分别只有 8 位 - 256 种离散级别)都能与我们的眼睛看到的颜色切合的主要原因。
问题是经过物理校正的计算机图形以真实的线性颜色空间运行,此处的值代表实际的光能。如果只是将渲染器的颜色输出范围以本地方式映射到每个 RGB 颜色组件的 0-255 范围,结果将不正确。
解决方案是引入某种贴图。其中一种方法称为 Gamma 校正。
大多数计算机屏幕具有大约 2.22 的 gamma,但大多数软件默认为 1.0 的 gamma,这使得所有内容(尤其是色调)看上去太暗,并且光线不能正确“添加”。
从理论上讲,2.2 的 gamma 值是“正确”的,使用该值可使渲染器内部的物理线性光源以正确的线性方式显示在屏幕上。
然而,由于照相胶片的响应曲线也不是线性的,因此用户发现这个“理论上正确的”值看上去太“亮”且“褪色”,非常常见的折衷方法是渲染 1.8 的 gamma,使外观看起来更像“摄影”,即,将图像拍摄到了照片胶片上,然后进行了冲洗一样。
色调映射
将渲染器内部的物理能量映射到赏心悦目的像素值的另一种方法称为色调映射。该操作可以通过渲染为浮点文件格式和使用外部软件实现,也可以使用某些渲染器插件随时执行该操作。
库中包含两个色调映射着色器,简单的 mia_exposure_simple 和更高级的 mia_exposure_photographic,色调映射器页上对二者进行了介绍。
注意:将色调映射与 Gamma 校正一起使用时需要特别小心;某些色调映射着色器内置了自己的 Gamma 校正功能,如果不小心,可能由于应用两次而以褪色的 Gamma 结束。确保密切注意 Gamma 工作流,以便只在一个位置应用。
使用最终聚集和全局照明
材质经过了精心设计,以在实际的照明环境中使用,即,实际的照明环境就是采用了全部直接照明和间接照明的环境。
在 mental ray 中,有两种基本方法生成间接灯光:最终聚集和全局照明。为获得最佳效果,至少应使用其中的一种方法。
用户至少应该启用最终聚集,或将最终聚集与全局照明(光子)结合使用以获得高质量的效果。使用最终聚集和全局照明的性能提示位于该文档的最终聚集性能页。
如果您对反射使用某个环境,要确保使用相同的环境(或其模糊副本)通过“最终聚集”对场景照明。
使用物理校正灯光
传统的计算机图形光源存在于卡通世界中,其光的强度不会随距离而发生变化。在现实世界中不能做这样的简化。光在离开光源时会发生衰退,因为光线离开其光源后会发散,而且光线的“强度”会随距离发生变化。点光源的衰退是 1/d²,即灯光强度与到光源的距离的平方成反比。
造成这种传统意义上的过分简化的原因之一是:在计算机图形发展的早期并未使用色调映射,因此颜色以不理想的方式3“退化”为白色的情况非常严重。
然而,只要是仅将“最终聚集”(FG) 用作间接照明方法,就仍然可以使用这种传统的简化方法。没有衰退的光源仍然会产生合理的渲染!这是因为 FG 只与光从一个表面传输到下一个表面有关,而与光从该光源传输到表面无关。
使用全局照明 (GI)(即使用光子)时便会出现问题。
启用 GI 后,光源会发射光子。mia_material(或其他任何 mental ray 材质)必须正常用于这些光子的能量才能匹配由相同的光投射的直接光!并且由于光子会以物理方式对光进行建模,因此“内建”了衰退。
因此,在使用 GI 时:
- 光源必须以正确的能量发射光子
- 直接光必须以物理正确的方式进行衰退,以匹配光子的衰退。
因此要确保光的灯光着色器和光子发射着色器能够协同工作,这一点很重要。
为解决该问题,提供了 mia_photometric_light 着色器(请参见光度学灯光页),可以按照正确的方式自动平衡光子和直接光。
功能
着色模型
从使用角度说,着色模型包含以下三个组件:
- 漫反射 - 漫反射通道(包括 Oren Nayar“粗糙度”)。
- 反射 - 光泽各向异性反射(带有高光)。
- 折射 - 光泽各向异性透明度(和半透明)。
mia_material 着色模型
场景中的直接光与间接光均会引起漫反射和半透明效果。直接光源也会导致传统“高光”(镜面反射高光)。
光线跟踪用于创建反射和折射效果,而高级的重要性驱动的多重采样用于创建光泽反射和折射。
可以借助最终聚集实现插值和“模拟”反射,从而进一步加快光泽反射/折射的渲染速度。
能量守恒
材质最重要的功能之一就是自动实现能量守恒。这意味着可以确保漫反射 + 反射 + 折射 <= 1,即,不会凭空产生能量,入射光能量会按照热力学第一定律4正确分布到漫反射、反射和折射组件。
例如,在实践中这表示,增加反射率时,必须从某处带走能量,因此漫反射级别和透明度将自动随之降低。同样,增加透明度时,将降低漫反射级别。
定律如下所示:
- 透明度会从漫反射中带走能量,也就是说,透明度为 100 时将没有漫反射。
- 反射率会从漫反射和透明度中带走能量,也就是说,反射率为 100% 时,既不存在漫反射也不存在任何透明度。
- 半透明是透明度的一种类型,refr_trans_w 定义了透明度与半透明的百分比。

从左到右:反射率 0.0、0.4、0.8 和 1.0

从左到右:透明度 0.0、0.4、0.8 和 1.0
这也意味着高光的强度与表面的光泽度有关。较高的 refl_gloss 值产生较窄但非常强烈的高光,而较低的值会产生范围较宽但不太强烈的高光。这是因为此时能量不仅散开,而且消散在较大的立体角上。
BRDF - 反射率与角度的关系
在真实世界中,表面的反射率通常与视角有关。对此进行描述的一个恰当术语是 BRDF(双向反射比分布函数),即定义从各个角度进行观察时材质的反射程度的方式。

木地板的反射率取决于视角
许多材质都表现出了这种行为。具有菲涅尔效果(角度依存关系由折射率严格决定)的玻璃、水和其他绝缘体材质是最明显的示例,但是其他分层材质(如涂了漆的木头、塑料等)显示类似的特征。
mia_material 允许通过折射率定义该效果,也允许显式设置以下两个反射率值:
- 0 度面(直接面向摄影机的表面)
- 90 度面(与摄影机成 90 度角的表面)
有关更多详细信息,请参见 BRDF 页上的“BRDF”部分。
反射率特性
最终表面反射率实际上是计算以下三个组件反射率的和得到的:
- 漫反射效果
- 实际的反射
- 模拟光源反射的镜面反射高光

漫反射、反射和高光
在真实世界中,“高光”只是光源的(光泽)反射。在计算机图形中,对其进行单独处理会更加有效。但是,为保持物理精确度,材质会自动保持“高光”强度、光泽度、各向异性等与反射的强度、光泽度和各向异性同步,而由于两者均由反射率设置驱动,因此它们没有单独的控件。
透明度特性
该材质支持完全光泽各向异性透明度,并包括半透明组件,有关详细描述,请参见半透明页。

半透明
实体与薄壁
透明/半透明可以将对象视为实体或薄壁。
如果一直将所有对象视为实体,那么,就必须将建筑模型中的每个窗格建模为两个面;入射面(在某个方向上对光线进行轻微折射)以及出射面(随后将光线重新折射回初始方向)。
这不仅需要额外的建模工作,而且还会浪费渲染资源为对图像几乎没有任何效果的折射进行建模。因此,材质允许将整个窗格建模为单个平面,随后进行任何实际光“折射”。

实体与薄壁的透明和半透明
在上图中,直升机座舱罩、窗格、半透明窗帘和右侧球体使用的都是“薄壁”透明或半透明,而玻璃高脚杯、塑胶脚架和左侧球体使用的都是“实体”透明或半透明。
裁切不透明度
除对材质实际特性建模的“物理”透明度外,该材质还提供了完全分离的非物理“裁切不透明度”通道,以允许树木之类的“布告牌”对象,或裁切带有不透明遮罩的扣环围栏这样的对象。
特殊效果
内置环境光遮挡
环境光遮挡(以下称为“AO”)是胶片业率先采用的一种方法,通过使用计算遮挡(即阻塞)区域接收入射光程度的着色器来模拟真实全局照明的“外观”。
只使用 AO 着色器5创建灯光无法到达的“暗”区域和灯光可以到达的“明亮”区域的灰度输出:

应用于场景的 AO 示例
如上图所示,AO 的一个主结果是黑暗的裂缝和区域,其中光被其他表面阻塞,光暴露到环境中的区域明亮。
AO 的一个重要方面就是用户可以调整在其中查看遮挡几何体的“距离”。

在较短的半径内进行查看的 AO
使用半径仅创建“局部化”的 AO 效果;只有给定半径内的表面被实际视为遮光板(也会更快地渲染)。实际的结果是 AO 提供了完美的“接触阴影”效果并使小裂缝可见。
有两种方式可在 mia_material 中使用内置 AO:
- “传统”AO 用于添加无所不在的环境光,然后由 AO 进行衰减以创建细节。
- 为细节增强使用 AO 并配合现有的间接照明方法(如最终聚集或光子)。
在使用非常“平滑”的间接照明解决方案(即较大的光子半径或极低的最终聚集密度)时(这时可能会丢失其他小细节),适合采用后一种方法。通过应用具有较短光线的 AO 可以恢复这些细节。
最后,mia_material 包含一个较大的内置功能集有助于获得顶级性能,其中包括但不限于:
- 带有光线阻碍阈值的高级重要性采样
- 自适应光泽采样计数
- 带有细节增强的插值光泽反射/折射
- 超快速模拟的光泽反射(refl_hl_only 模式)
- 忽略玻璃对象内部反射的概率
- 使您可以根据每个材质选择传统的透明阴影(适用于窗格等)或者折射焦散(适用于实体玻璃对象)。
材质参数快速指南
本部分为已经熟悉 mia_material 的用户提供适合作为内存刷新工具的参数的快速概述。详细参数页上提供了更详细的内容。标有 [+] 的参数仅存在于 mia_material_x 中。
- diffuse_weight 漫反射的数量。
- diffuse 漫反射颜色,即材质的主颜色。
- diffuse_roughness Oren-Nayar“粗糙度”。
- reflectivity 总体反射率级别。乘以 brdf_xx_degree_refl 参数。
- refl_color 总体反射率颜色。通常情况下为白色。
- refl_gloss 反射光泽度。1.0 = 最佳镜像。
- refl_gloss_samples 光泽反射的采样数(光线数)。
- refl_interpolate 光泽反射的插值(平滑)。速度与精确度相互制约。
- refl_hl_only 跳过实际的反射,仅通过 FG 实现高光和“模拟”反射。
- refl_is_metal 金属模式。使用漫反射颜色作为反射颜色。
- transparency 总体透明度级别。
- refr_color 透明度(折射)颜色。
- refr_gloss 透明光泽度。
- refr_ior 折射率。
- refr_gloss_samples 光泽折射的采样数(光线数)。
- refr_interpolate 光泽折射的插值(平滑)。
- refr_translucency 启用半透明。
- refr_trans_color 半透明颜色。
- refr_trans_weight 半透明权重。
- anisotropy 各向异性。1.0 = 等向。
- anisotropy_rotation 各向异性方向的旋转。
- anisotropy_channel 导出各向异性方向的坐标空间。
- brdf_fresnel 启用时,使用菲涅尔公式(基于 IOR)获得反射率曲线;禁用时,使用下面的“用户定义”设置。
- brdf_0_degree_refl 面向观察者的表面的用户定义反射率曲线值。
- brdf_90_degree_refl 掠射表面的用户定义的反射率曲线值。
- brdf_curve 用户定义的反射率曲线形状。
- brdf_conserve_energy 启用时,可确保能量守恒。请启用该选项!
- intr_grid_density 插值栅格密度。
- intr_refl_samples 反射的插值采样数量。
- intr_refl_ddist_on 启用“细节距离”。
- intr_refl_ddist 细节距离。
- intr_refr_samples 折射的插值采样数量。
- single_env_sample 仅执行单个环境采样,即使跟踪多个反射率光线。与 mia_envblur 一起使用。
- refl_falloff_on 启用反射的距离衰减。
- refl_falloff_dist 看不到反射的距离。
- refl_falloff_color_on 启用衰减颜色。禁用时,将衰减为环境颜色。
- refl_falloff_color 启用上一个选项时的衰减颜色。
- refl_depth 反射的跟踪深度。
- refl_cutoff 反射的重要性中止。
- refr_falloff_on 启用折射(透明度)的距离衰减。
- refr_falloff_dist 看不到透明度或达到衰减“颜色”时的距离。
- refr_falloff_color_on 禁用时,反射会衰减为黑色(总吸收)。启用时,衰减到给定颜色染色。
- refr_falloff_color 根据在介质中移动时的距离而变化的反射颜色染色。
- refr_depth 折射的跟踪深度。
- refr_cutoff 折射的重要性中止。
- indirect_multiplier 间接照明的权重(FG、GI、焦散)。
- fg_quality 最终聚集 (FG) 的质量。
- fg_quality_w 上面参数的权重(用于纹理映射)。
- ao_on 启用环境光遮挡 (AO)。
- ao_samples AO 检查光线的数量。
- ao_distance 查找遮挡的最大距离。距离越短速度越快。
- ao_dark AO 的“阴影颜色”。
- ao_ambient AO 的“附加光”。
- ao_do_details 间接照明细节增强模式。1=使用 AO,2=具有颜色溢出。
- thin_walled 将表面视为材质的薄片,而不是实体的边界。
- no_visible_area_hl 为可见区域光禁用传统“高光”。
- skip_inside_refl 跳过玻璃内部的弱反射。
- do_refractive_caustics 进行折射焦散,而不是透明阴影。仅当焦散模式处于启用状态时。
- backface_cull 使表面(仅对摄影机)从背面不可见。
- propagate_alpha 透明表面传播后面的 Alpha 通道值。
- hl_vs_refl_balance“高光”对反射的相对强度。
- cutout_opacity 总体不透明度。用于蒙板/裁切效果。
- additional_color 仅添加至其他着色的附加颜色。
- bump 用于扰动法线的着色器。
- no_diffuse_bump 为漫反射着色禁用凹凸贴图。
- mode 灯光列表模式。
- lights 灯光列表本身。
- [+] bump_mode 定义新凹凸输入的模式。如果为零,则使用上面的兼容“bump”。
- [+] overall_bump 始终会影响所有对象的凹凸。
- [+] standard_bump 常规凹凸。当 no_diffuse_bump 处于启用状态时,不会影响漫反射。
- [+] multiple_outputs 启用时,可激活多个输出。禁用时,仅写入“结果”。
材质参数的详细描述
漫反射
diffuse_weight 设定所需的漫反射反射率级别(和漫反射颜色)。由于该材质具有能量守恒的特性,因此所用的实际漫反射级别取决于反射率和透明度,如上所述。
漫反射组件使用 Oren-Nayar 着色模型。当 diffuse_roughness 为 0.0 时,与经典的朗伯着色相同,但是如果该值变大,则表面的“粉末状”程度越大:

粗糙度 0.0(左)、0.5(中)和 1.0(右)
反射
基本特性
reflectivity 和 refl_color 一起定义反射的级别和传统“高光”(也称为“镜面反射高光”)的强度。
该值为最大值 - 实际值还取决于曲面的角度,并来自于 BRDF 曲线。该曲线(BRDF 页提供了详细介绍)允许定义 brdf_0_degree_refl(面向视图的曲面)和 brdf_90_degree_refl(与视图垂直的曲面)。

没有反射率(左)、依赖于角度(中)、恒定(右)
- 左侧的杯子是没有反射率并具有纯漫反射的材质。
- 位于中心位置处杯子的 brdf_0_degree_refl 为 0.1,brdf_90_degree_refl 为 1.0。
- 右侧杯子的 brdf_0_degree_refl 和 brdf_90_degree_refl 均为 0.9,即整个曲面的反射率恒定。
请注意高反射率自动从白色漫反射颜色“减去”的方式。如果不这样的话,该材质将过亮以至于失真,从而违反物理定律6。
refl_gloss 参数定义表面“光泽度”,范围是 1.0(最佳镜像)到 0.0(漫反射表面):

光泽度值为 1.0(左)、0.5(中)和 0.25(右)
refl_samples 参数定义发出以创建光泽反射的最大7采样数(光线数)。值越高,渲染速度越慢,但得到的结果也越平滑。值越低,渲染速度越快,但得到的结果也越粗糙。大多数情况下,值为 32 就足够了。
有两种特殊情况:
- 由于 refl_gloss 值为 1.0 相当于采用“最佳镜像”,因此在这种情况下发出多条光线是没有意义的,只需要发出一条反射光线即可。
- 如果 refl_samples 值设定为 0,反射将是“最佳镜像”(且仅发出一条光线),而与 refl_gloss 的实际值无关。可以使用该方法提高反射很弱的表面的性能。高光仍然不会影响光泽度值。
金属对象实际上会影响其反射的颜色,而其他材质不存在这一问题。例如,金条的反射光为金色,但红色玻璃球的反射光并不是红色的。这通过 refl_is_metal 选项获得支持。
- 禁用时,refl_color 参数定义颜色,reflectivity 参数(与 BRDF 设置一起)定义反射的强度和颜色。
- 启用时,diffuse 参数定义反射的颜色,reflectivity 参数设定漫反射和光泽(金属)反射之间的“权重”。

没有金属反射(左)、金属反射(中)、金属反射混合漫反射(右)
左侧的图像显示非金属反射(禁用 refl_is_metal)。很显然,反射中包含它们反射的对象的颜色,但不受这些材质的颜色的影响。
中间的图像使用金属反射(启用 refl_is_metal)。现在,反射的颜色受材质颜色的影响。右侧图像显示了 reflectivity 值为 0.5 时的材质变体,在彩色反射和漫反射之间创建 50:50 的混合。
光泽反射需要跟踪多条光线以生成平滑的结果,这可能会成为性能问题。因此,提供了以下两种特殊功能专门用来提高其性能。
第一个功能是插值。通过启用 refl_interpolate,平滑算法使得可以重用光线并使其平滑8。得到的光泽反射较快、较平滑,但不精确。插值页对插值进行了更详细的介绍。
对于高反射表面,很显然需要真实的反射光线。但是,对于较少反射的表面(反射内容不太“明显”),有一个增强性能的快捷方式,这就是 refl_hl_only 开关。
当 refl_hl_only 处于启用状态时,不跟踪实际的反射光线。相反,只会显示“高光”和通过使用“最终聚集”9 模拟的软反射。
与无光泽(漫反射)表面相比,refl_hl_only 模式不需要花费更多的渲染时间,却能得到令人非常满意的效果。或许该模式下得到的场景中的“英雄”对象不是十分令人信服,但对于不太重要的场景元素来说,该模式的效果非常好。它最适合于具有弱反射或强光泽(模糊)反射的材质:

左侧的两个杯子使用实际反射,右侧的杯子使用
refl_hl_only
很明显,左侧的两个杯子比右侧的杯子更为真实,与完全无反射的表面相比,右侧的杯子不需要花更多的渲染时间,这一事实使该模式非常有用。模拟反射仍然使用平行颜色溢出,这样,杯子底部受木地板颜色的影响,就好像它真的被反射。
折射
transparency 参数定义折射级别,refr_color 定义颜色。可使用该颜色创建“彩色玻璃”,而彩色玻璃页介绍了执行该操作更为精确的方法。
由于材质具有能量守恒的特性(请参见能量守恒页),因此在 transparency 参数中设定的值为最大值 - 实际值取决于反射率和 BRDF 曲线。
refr_ior 定义折射率,用于衡量光线在进入材质时的“弯曲”度。光线的弯曲方向取决于它是进入还是离开对象。不管是进入还是离开对象,mia_material 都使用曲面法线的方向作为主要的计算信息。因此,要使用指向正确方向的曲面法线对透明的折射对象进行建模,这一点非常重要。
也可以使用 IOR 定义 BRDF 曲线,该曲线属于透明材质类别(称为“绝缘体”材质),下面对此进行了说明:

折射率 1.0(左)、1.2(中)和 1.5(右)
请注意,最左侧的杯子看起来非常不真实,几乎完全看不见。由于 IOR 不可能为 1.0(空气的折射率),因此穿越材质后反射率没有发生变化,从而也就没有保留任何“边”或变化。而中间和最右侧杯子的反射率由 IOR 控制发生真实更改。
然而不强制反射率以 IOR 为基础,但可以改用 BRDF 模式对其进行手动设定:

不同的透明类型
左侧的杯子再次从折射率获取曲线。中间的杯子有一条手动定义的曲线,brdf_90_degree_refl 设定为 1.0,brdf_0_degree_refl 设定为·0.2,这样看起来更像金属化玻璃。最右侧的杯子使用相同的 BRDF 曲线,但却设定为“薄壁”透明度(请参见薄壁页)。很显然,与我们上面所尝试的仅将 refr_ior 设定为 1.0 的方法相比,该方法是创建“无折射”对象的更好方式。
对于反射,refr_gloss 参数定义折射/透明度的尖锐或模糊程度,范围是 1.0(完全清晰的透明度)到 0.0(极度漫反射透明度):
refr_gloss 为 1.0(左)、0.5(中)和 0.25(右)
就像光泽反射,光泽透明度具有 refr_interpolate 开关,从而可以更快地创建更平滑但不太精确的光泽透明度。插值页上对插值进行了介绍。
半透明
半透明作为透明的特例处理,即,要使用半透明,首先必须存在某个级别的透明度,refr_trans_w 参数确定用作透明和半透明的程度:
transparency 为 0.75 且
refr_trans_w 为 0.0(左)、0.5(中)和 1.0(右)
- 如果 refr_trans_w 为 0.0,全部 transparency 用于透明。
- 如果 refr_trans_w 为 0.5,transparency 一半用于透明,一半用于半透明。
- 如果 refr_trans_w 为 1.0,全部 transparency 用于半透明,没有实际透明。
半透明主要用于“薄壁”模式(如上面的示例所示),为窗帘、宣纸或此类效果建模。在薄壁模式中,只允许对该对象反转的一侧着色以进行“渗色”。
着色器也可以在“实体”模式中运作,但 mia_material 中的半透明实现只是灯光从对象背面传输到正面的简化,不是“真正”的 SSS(次表面散射)。可以通过结合使用光泽透明和半透明来生成“类似 SSS”的效果,但与专用的 SSS 着色器相比,该方法的速度较慢,而且功能也较少。

实体半透明权重
refr_trans_w 为 0.0(左)、0.5(中)和 1.0(右)
各向异性
各向异性反射和折射可以使用 anisotropy 参数创建。该参数设定高光的“宽度”和“高度”之间的比率,因此,当 anisotropy 值为 1.0 时,没有各向异性,即效果处于禁用状态。
对于其他 anisotropy 值(高于和低于 1.0 均有效),高光的“形状”(和反射的外观)将发生更改。
anisotropy 值为 1.0(左)、4.0(中)和 8.0(右)
可以使用 anisotropy_rotation 参数旋转各向异性。值 0.0 表示不旋转,值 1.0 表示一个完整的旋转(即 360 度)。这有助于使用纹理贴图设定角度:
anisotropy_rotation 值为 0.0(左)、0.25(中)和带纹理(右)
注意:如果使用带纹理 anisotropy_rotation,该纹理一定不能抗锯齿(已过滤)。否则,抗锯齿像素将在各向异性中导致显示为接缝瑕疵的局部漩涡。
对于 0 或更大的值,定义高光“拉伸方向”的空间源自 anisotropy_channel10 设定的纹理空间。
anisotropy_channel 还可以具有以下“特殊”值:
- -1:根旋转遵循局部对象坐标系
- -2:根旋转遵循凹凸基础向量
- -3:根旋转遵循曲面导数
- -4:根旋转遵循调用
state>texmia_material 之前放置的向量
请参见提示部分中拂刷金属页上的“拂刷金属”。
BRDF
如角度页上的简介中所述,材质的反射率最终由观察的入射角度控制。

0 度(绿色)和 90 度(红色)观察角度
有两种模式定义该 BRDF 曲线:
第一种模式为“按 IOR”,即启用 brdf_fresnel 时。此时,反射率依赖于角度的程度仅由材质的 IOR 决定。这称为菲涅尔反射,是大多数绝缘体材质(如水和玻璃等)的行为。
第二种模式是手动模式,即禁用 brdf_fresnel 时。在该模式中,brdf_0_degree_refl 参数定义直接面向观察者的曲面(或入射光)的反射率,brdf_90_degree_refl 定义垂直于观察者的曲面的反射率。brdf_curve 参数定义该曲线的衰减。
该模式可用于大多数混合材质或金属。大多数材质都在掠射角显示出较强的反射,因此 brdf_90_degree_refl 参数一般可以保持在 1.0(并改用 reflectivity 参数控制总体反射率)。金属通常是相当均匀地反射,并且 brdf_0_degree_refl 值很高(0.8 到 1.0),但是许多其他分层材质(如油布、涂了漆的木头等)具有较低的 brdf_0_degree_refl 值 (0.1 - 0.3)。
请参见材质提示页上的提示,了解一些准则。
特殊效果
内置环境光遮挡
内置环境光遮挡(以下简称为“AO”)可以以两种方式使用。可以用于增强细节和间接照明中的“接触阴影”(在这种情况下,第一个位置首先必须存在某种形式的间接照明),或以更传统的方式与指定的“环境光”一起使用。因此,如果不存在间接光,也未指定任何“环境光”,AO 将没有任何效果 11。
ao_samples 设定发出的用于创建 AO 的采样数(光线数)。值越高越平滑,但速度也越慢;值越低速度越快,但也越粗糙。16 是默认值,64 涵盖大多数情况。
ao_distance 参数定义可找到遮挡对象的半径。较小的值会将 AO 效果仅限制为很小的裂缝,但是渲染速度会更快。值越大覆盖的范围也越大,但是渲染的速度也越慢。下图展示了两个不同距离的原始 AO 效果:

较大的距离

较小的距离
如环境光遮挡效果页上的简介中所述,AO 可以用于间接照明的“细节增强”。将 ao_do_details 设定为 1,可启用该模式。
该模式可用于应用短距离 AO,将其乘以现有的间接照明(最终聚集或全局照明/光子),显示出小细节。
请看,该直升机几乎完全由间接灯光照亮:

不使用 AO

使用 AO
请注意为什么左图中的直升机感觉没有“着陆”,以及为什么着陆橇下边的阴影太过模糊。右图使用 AO 来“冲压出”细节和接触阴影。
也可以将 ao_do_details 设定为 2,这可以启用 mental ray 3.6 中引入的更复杂的 AO 模式。不是执行简单的遮挡,只添加不同阶数的“黑暗度”,着色器实际上将查看周围对象的颜色,然后使用该颜色而不是“黑暗度”。由于这涉及每个点的着色,因此不如纯 AO 那样快,但具有解析明亮和黑暗细节的附加效果。
ao_do_details = 1
ao_do_details = 2
左侧的图像显示了传统 AO 出现的问题;它适用于所有间接照明,并始终使其较暗。在发光球体上非常明显(其下有暗点),但是,即使前面的立方体以及马腿之间和红色球体下面被强烈照亮,也可以感知立方体前面的地面可能很暗。
相反,右侧图像为所有材质使用 ao_do_details=2,地面现在被发光球正确照亮,来自立方体的白色反弹光照亮了地板,马腿之间和红色球体下面有光。
如果您找到使用 AO 创建角落里较周围颜色更暗淡的“尘土”效果或自发光对象周围出现黑边的方法,请尝试将 ao_do_details 设定为 2 以获得更精确的结果。
ao_dark 参数设定 AO 阴影的“黑暗度”。它被用作完全遮挡曲面的倍增值。实际上,这表示:黑色会使得 AO 效果非常暗,中间灰度的颜色会使效果不太引人注目(较亮),等等。当使用新 ao_do_details 模式 2 时,会设定从临近对象拾取的颜色与“黑暗度”之间的“混合”。混合如下:
(1-ao_dark) *(对象颜色)+ 黑色 * ao_dark。
ao_ambient 参数用于执行“更传统”的 AO,即提供假想的“永久存在的环境光”,然后由 AO 效果对其进行衰减以产生阴影。
尽管通常在没有其他间接光的情况下进行渲染时使用“传统 AO”,但也可以将其与现有的间接光合并到一起。需要记住,这种神奇的“永久存在的环境光”物理上并不存在,但可能会帮助照亮一些难以处理的黑暗角落。
高级渲染选项
反射优化设置
这些参数定义反射的某些性能加速选项。
refl_falloff_dist 能够将反射限制为一定的距离,这不仅可提高渲染速度,同时可避免将较远处的对象拉到强光泽反射中。
如果启用并使用 refl_falloff_color,反射将褪色为该颜色。如果未启用,反射将褪色为环境颜色。前者更适合于室内场景,而后者更适合室外场景。

完全反射(左)、淡入淡出 100mm(中)或 25mm(右)
每个材质可以在本地使用 refl_depth 参数设定最大跟踪深度。达到该跟踪深度时,材质的行为方式就像已启用 refl_hl_only 开关,即仅显示高光和“模拟”反射。如果 refl_depth 为零,将使用全局跟踪深度。
refl_cutoff 是拒绝进行反射(不跟踪)的阈值。它是一个相对值,即,默认值 0.01 意味着将忽略对最终像素的贡献低于 1 的光线。
折射优化设置
折射的优化设置(透明度)与反射的优化设置几乎相同。例外情况是 refr_falloff_color,其行为方式有所不同。
- 使用 refr_falloff_dist 时,不会使用 refr_falloff_color,透明光线将褪色为黑色。这就像烟色玻璃或吸收性很强的材质一样。透明度在某一距离完全停止。这具有与为反射使用 refl_falloff_dist 相同的性能优势,即跟踪的光线越短,速度就越快。
- 但是,使用 refr_falloff_color 时,它的工作方式有所不同。材质会进行符合物理规律的吸收。在 refr_falloff_dist 指定的精确距离处,折射的颜色将由 refr_falloff_color 指定 - 但光线不在范围限制内。在两倍距离处,refr_falloff_color 产生的影响也是双倍的,而在 1/2 距离处,其影响也会减半,依此类推。

无限制(左)、褪色为黑色(中)、褪色为蓝色(右)
最左侧的杯子没有褪色。中间的杯子禁用了 refr_falloff_color,因此褪色为黑色,其中也包含与用于反射时相同的限制跟踪距离的性能优势。
但是,最右侧的杯子褪色为蓝色。这将在材质中产生正确的指数衰减,材质越厚颜色越深。请参见彩色玻璃页,了解有关真实彩色玻璃的讨论。
注意:若要在使用 refr_falloff_dist 时渲染正确的阴影,必须使用光线跟踪阴影,并且必须将阴影模式设定为分段。请参见有关阴影模式的 mental ray 手册。
每个材质可以在本地使用 refl_depth 参数设定最大跟踪深度。当达到该跟踪深度时,材质将切换为跟踪透明光线。这是 mental ray 3.8 中的新功能,按照设计,着色器将忽略折射中的跟踪深度限制。threeeightrefraction 页对此进行了详细的介绍。
通过将该参数设定为 -1,可以切换为用尽折射跟踪深度的旧行为(返回黑色)。如果 refl_depth 为零,将使用全局跟踪深度。
refl_cutoff 工作原理与反射情况相同,如上所述。
选项
选项包含多个启用/禁用切换开关,控制材质的某些最细微的细节:
thin_walled 确定材质是会导致折射(即,行为方式就像它是由实体的透明物质组成一样)还是不会导致折射(即,行为方式就像它是由透明材质的薄片组成一样)。本主题在薄壁页进行了详细的讨论。

实体(左)和薄壁(右)
do_refractive_caustics 参数定义焦散处于启用状态时玻璃的行为方式。
当不渲染焦散时,mia_material 使用阴影着色器创建透明阴影。对于窗格之类的对象,这已经足够了,而且实际上会产生比使用焦散更好的效果,这是因为允许直接光通过玻璃进入(或多或少)像房间这样的空间。
传统上,在 mental ray 中启用焦散会导致所有材质停止投射透明阴影,而开始生成折射焦散。在大多数建筑场景中,这并不是需要的结果;您或许希望桌面上的玻璃装饰能够生成焦散效果,但也希望正常的直接光能够透过窗口进入房间。使用该开关,可以在材质级别实现这一点。

使用透明阴影

使用折射焦散
左侧的图像显示禁用 do_refractive_caustics 时发生的结果,右侧的图像显示启用该参数时发生的结果。两种模式可以在相同的渲染内自由地混合。内置光子着色器会据此自动处理光子;在前一种情况中会直接发出直射光,在后一种情况中会折射为焦散。
backface_cull 开关启用一种特殊模式,使从另一侧观察时摄影机完全看不到曲面。这对于在房间中创建“魔术墙”非常有用。如果所有的墙都是作为法线朝向里边的平面进行创建,则使用 ackface_cull 开关可以从“外部”渲染房间。摄影机放置在房间外时,将看到房间内部,但墙仍然“存在”,投射阴影、反弹光子等会被魔术般地“看穿”。

无背面消隐

墙上背面消隐
propagate_alpha 开关定义透明对象如何处理背景中的任何 Alpha 通道信息。启用时,折射和其他透明度效果将“穿过”透明对象传播背景的 Alpha。禁用时,透明对象将有一个不透明的 Alpha。
no_visible_area_hl 参数确定可见区域光的行为。
请记住,传统“高光”(即镜面反射效果)是计算机图形“技巧”,而不是实际创建实际可见发光表面的光泽反射。
但是,mental ray 区域光可以是可见的,且当可见时,它们将在任何(光泽)反射对象中反射。如果可见区域光和高光的反射都被渲染,光将添加两次,从而导致照明效果失真。该开关(默认设置为启用)会导致可见区域光丢失其“高光”,而且只会作为反射出现12。
hl_vs_refl_balance 修改高光强度和反射强度之间的平衡。默认值 1.0 是“尽可能接近物理校正”的值。使用该参数可以调整该默认值,值大于 1.0 可使高光更强,值低于 1.0 可使高光更弱。
最终的优化开关(默认也启用)是 skip_inside_refl 复选框。透明对象内侧的大多数反射都非常弱,但特殊情况除外,即在称为“整体内部反射”(TIR) 的特定角度处。该开关将完全忽视弱反射,但保留 TIR,因此节省了渲染时间。
indirect_multiplier 允许调整材质对间接光的响应程度,fg_quality 是材质发出的最终聚集射线数目的局部倍增。两者默认设置都为 1.0,即使用全局值。
为协助将纹理映射到 fg_quality,可使用附加的 fg_quality_w 参数。当为零时,fg_quality 是原始质量设置,但对于非零 fg_quality_w,使用的实际质量是两个值的乘积,最小值为 1.0。这意味着将颜色纹理映射到 fg_quality 且 fg_quality_w 设定为 5.0 时,纹理中的黑色产生的质量为 1.0(即发出的最终聚集射线数是全局默认值),纹理中的白色产生的质量为 5.0(是发出的光线数的五倍)。
插值
光泽反射和折射可以插值。这意味着它们渲染速度更快并且变得更平滑。
插值的工作方式是预计算图像栅格中的光泽反射。在每个点获得的采样数(光线数)由 refl_samples 或 refr_samples 参数控制,这与无插值的情况相同。该栅格的分辨率由 intr_grid_density 参数设定。
但是,插值可导致瑕疵。由于这是在低分辨率栅格上完成的,因此可能会漏掉细节。因为这会混合该低分辨率栅格的相邻,所以可能导致过度平滑。因此,这主要适用于平面。波状、高度细化的表面或使用凹凸贴图的表面不适于使用插值。此外,由于栅格存在于屏幕空间中,建议不要进行涉及摄影机运动的动画,因为可能导致该栅格特性变得可见。
intr_grid_density 参数的有效值如下:
- 0 = 栅格分辨率是渲染分辨率的两倍
- 1 = 栅格分辨率与渲染分辨率相同
- 2 = 栅格分辨率是渲染分辨率的一半
- 3 = 栅格分辨率是渲染分辨率的三分之一
- 4 = 栅格分辨率是渲染分辨率的四分之一
- 5 = 栅格分辨率是渲染分辨率的五分之一
在栅格内,数据被存储并在点之间共享。栅格分辨率越低速度越快,但丢失的细节信息也越多。反射和折射都有 intr_refl_samples 参数,用于定义要查找多少存储栅格点(在当前渲染点周围的 N x N 组内)才能平滑光泽度。默认值为 2,更高的值会“涂抹”更多的光泽度,但因此会产生更多过度平滑的瑕疵。

无插值(左)、查找 2 个点(中)和 4 个点(右)
地面上左侧杯子的反射没有使用插值,用户可以感知某些粗糙颗粒(此处故意夸张了一些)。其他两个杯子下面的地面瓷砖使用一半分辨率插值,分别是 2(中)和 4(右)个点查找。
该图像还说明了使用插值的一个结果:位于地面附近的左侧杯子的底部被非常强烈地反射,只有杯子距离地面较远的部分比较模糊。但是,右侧杯子的插值反射有一个“基本”的模糊度,这是由插值的平滑效果引起的,它甚至使最近的部分都有某种程度的模糊。在大多数光泽反射较弱的场景中,永远也不会发现这种矛盾;但在其他情况下,比如反射率较高时,可能会让人感觉桌子腿和椅子腿“未与地面瓷砖接触”。
为解决该问题,提供了 intr_refl_ddist 参数。它允许跟踪另一组细节光线,以在该半径内创建“更清晰”的对象。

无细节距离(左)、25mm 细节距离(中)和 150mm 细节距离(右)
所有三块地面瓷砖都使用了插值,但最右侧的两块使用了不同的“细节距离”。
这样还可以使用一种实用的“技巧”:将 refl_samples 设定为 0,这会对反射进行渲染,使它们就像最佳镜像一样,但也可使用插值将模糊引入该“最佳”反射中,另外可能会使用 intr_refl_ddist 使附近的部分不太模糊。这是获得光泽反射的一种快速方法。

无细节距离(左)、有细节距离(右)
上面的地面瓷砖用镜像反射进行了渲染,而且“模糊度”只来自于插值。该渲染速度与纯镜像反射一样快(或更快!),并且产生得到令人满意的真实光泽反射效果的错觉,尤其是像右侧一样使用 intr_refl_ddist 时。
特殊贴图
mia_material 还支持以下特殊输入:
凹凸贴图
bump 参数接受扰动法线以进行凹凸贴图的着色器。该参数仅在新 bump_mode 参数为零时使用。
当 no_diffuse_bump 处于禁用状态时,凹凸将应用于所有着色组件(漫反射、高光、反射、折射...)。当启用时,凹凸将应用于除漫反射之外的所有组件。这意味着可以在反射、高光等中看到凹凸,但是漫反射着色不显示凹凸。材质的漫反射表面似乎是平滑的,但它上面覆盖了凹凸不平的涂层。
no_diffuse_bump 禁用(左)和启用(右)
在 mia_material_x 中,还有三个与凹凸贴图相关的新参数:两个向量凹凸输入 overall_bump 和 standard_bump,以及定义向量坐标空间的 bump_mode 参数。放入 overall_bump 或 standard_bump 的着色器应返回向量,但这些着色器修改法线向量本身并返回 (0,0,0) 也是合法的。
overall_bump 定义始终应用于漫反射和镜面反射组件的总体凹凸,与 no_diffuse_bump 的设置无关。standard_bump 是旧 bump 参数的向量等效参数,之所以这样说是因为,no_diffuse_bump 禁用时会全局应用,no_diffuse_bump 启用时仅应用于镜面反射/反射“层”。但是,standard_bump 会添加在 overall_bump 结果的“顶部”。
预期用途是将 mia_roundcorners 着色器放入 overall_bump,将您的法线凹凸着色器放入 standard_bump。这样,“圆角”效果将应用于漫反射和镜面反射组件,而与 no_diffuse_bump 的设置无关。
bump_mode 参数定义向量的坐标空间以及是否将其相加。以下是合法的值:
- 0:兼容模式。使用旧 bump 参数代替 overall_bump 和 standard_bump。
- 1:内部空间中的“添加”模式
- 2:世界空间中的“添加”模式
- 3:对象空间中的“添加”模式
- 4:摄影机空间中的“添加”模式
- 5:内部空间中的“设定”模式
- 6:世界空间中的“设定”模式
- 7:对象空间中的“设定”模式
- 8:摄影机空间中的“设定”模式
“添加”模式表示向量应该包含法线扰动,即“添加”到当前法线的修改。而“设定”模式表示实际法线由上述坐标空间中说明的传入向量替换。
这种新的方案使 mia_material_x 凹凸贴图与多个 mental ray 集成兼容,并允许应用圆角,即使启用了 no_diffuse_bump。
裁切不透明度和附加颜色
cutout_opacity 用于应用不透明贴图,以完全移除对象的某些部分。经典示例是将树图像映射到一个平面,并使用不透明度来剪切掉树不在平面上的部分。

映射透明度(左)与
cutout_opacity(右)
additional_color 是一个输入,用户可以对其应用任何着色器。该着色器的输出仅添加到由 mia_material 完成的着色的顶部,并可用于“自发光”类型效果以及添加想要的其他任何着色。
材质还支持标准置换着色器和环境着色器。如果未提供环境,会使用全局摄影机环境。
mental ray 3.8 新增的折射新行为
在 mental ray 3.8 中,用尽折射跟踪深度的行为已更改。
在 3.9 之前的版本中,用尽折射跟踪深度会返回黑色折射。大多数其他透明度/玻璃着色器会返回环境,在室外环境非常明亮的情况下渲染室内渲染时,会创建非常奇怪的结果,明亮区域出现在突兀地折射部分天空的深色壁柜中的玻璃对象中。
但与早期版本一样返回黑色而破坏性更小并不是理想的选择。用户不希望在玻璃安装中突然弹出大面积的黑色。必须手动调整跟踪深度相当麻烦并且容易出错。
理想情况下,用户希望玻璃始终折射其周围对象,将跟踪深度的选择留给渲染器。
存在如 refl_depth 的跟踪深度限制,禁止光线无限反弹从而产生大量的渲染时间。但只有更改方向(如反射和折射)的光线可以无限反弹 - 直线(透明度)光线不能。这些光线最终将逸出场景,或照亮不透明对象。mia_material 利用重要性传播,这样将自动消隐对最终像素变为 refl_cutoff 值存在贡献的任何光线。
鉴于这些原因,mental ray 3.8 中的 mia_material 将设计为忽略折射跟踪深度,并在达到折射跟踪深度时不会停止跟踪光线。相反,它将从折射光线切换为普通的直线透明度光线。由于这些光线可保证逸出对象(如上所述),因此它们将始终返回深折射的合理颜色,如天空或周围不透明的对象。
新行为使用户不必考虑折射跟踪深度 - 深折射将始终合理,即使技术上可能不正确。
如果需要旧行为(返回黑色),将 refl_depth 设定为 -1 即可切换回来。照亮场景全局折射跟踪深度的光线将为黑色。

新折射跟踪深度行为
在上图中,第一行显示使用传统着色器(绝缘体)的结果(返回环境,因此在室内看起来不正确),第二行显示使用 mental ray 3.8 前的 mia_material 的结果(返回黑色,因此在室外看起来不正确),第三行显示使用新 mia_material 的结果(在室内和室外看起来都正确)。
mia_material_x 的多个输出
简介
以下是 mia_material_x 可用输出的详细列表:
大多数输出遵循模式 xxx_result、xxx_raw 和 xxx_level。“result”是最终效果,“raw”是非缩放的效果,“level”是缩放效果。“level”通常关联到输入参数(或其中的组合),并在经修改后遵循材质的能量守恒特性。
除非另有说明,否则 xxx_result = xxx_raw * xxx_level。

不同的输出以及它们之间的关系
因此,输出包含一些冗余;如果只希望“当前反射”存在于单独的通道中,请使用 refl_result;但如果希望在后期制作中对反射的数量有更多的控制,可以改用 refl_raw 和 refl_level,在将其添加到最终颜色之前的合成阶段中使二者相乘。
请注意,mia_material_x 将特意采样在低质量的实际渲染阶段具有非常低级别的反射(出于性能考虑),因此应避免在后期对反射强度执行大量修改。
所有输出的列表
存在以下输出:
- result 是主混合输出,即“美景”过程。它等同于 mia_material 的单个输出。如果禁用“安全”参数 multiple_outputs,该输出之外的其他输出都不会写入 13。
- diffuse_result 是照明后的结果漫反射组件(包括纹理),diffuse_raw 表示漫反射照明本身(无纹理),diffuse_level 是漫反射纹理颜色,由能量守恒调整。
- spec_result 是结果镜面反射组件,spec_raw 是原始未衰减高光,spec_level 是镜面反射级别,输入参数 hl_vs_refl_balance 为 1.0 时与 refl_level 相同。
- refl_result 是结果反射组件,refl_raw 是原始(全强度)反射,refl_level 是实际反射率,包括反射颜色和 BRDF(或菲涅尔)曲线衰减效果。
- refr_result 是结果折射(透明度)组件,refr_raw 是原始全强度透明度,refr_level 是实际透明度级别,其通过能量守恒来调整。
- tran_result 是结果半透明组件,tran_raw 是原始半透明,而 tran_level 是实际半透明级别,其通过能量守恒来调整。
- indirect_result 是结果间接照明(包括环境光遮挡效果,并乘以漫反射颜色),indirect_raw 是来自 mi_compute_avg_radiance 的原始结果,indirect_post_ao 是受 AO 影响但没有与漫反射颜色相乘的间接照明,ao_raw 是 AO 的原始贡献。
- add_result 是 add_color 参数的直接通过。
- opacity_result 包含输入 cutout_opacity 小于 1.0 时的结果对象的任何背景的最终贡献。opacity_raw 包含没有经过不透明度缩放的背景。如果 cutout_opacity 为 1.0,这些输出将包含黑色,因为在这种情况下不跟踪实际透明光线!opacity 输出包含实际不透明度自身。如果 opacity 等于零,则必须多加注意,因为这就意味着材质未执行过任何类型的着色,而且其他输出中没有一种输出包含任何值!

输出示例
适当的合成
由于输出中存在冗余度,因此有几种方法可以合成这些输出以产生同美景渲染相同的结果。我们在此以等式形式概括两种合成方式。
首先,我们具有“简单”变量,该变量只是各种 result 参数的总和。该版本仅允许对材质间的总体平衡做出最小的后期制作更改。
但优点在于无需很多文件,也可以很好地进行非浮点合成。
Beauty = diffuse_result + indirect_result + spec_result +
refl_result + refr_result + tran_result +
add_result
我们还有更“复杂”的变量,该变量使用各种 raw 和 level 输出,由此允许在后期制作中进行更多的控制。
请注意,raw 输出需要在浮点中存储和合成以保持动态范围。level 输出始终在 0.0-1.0 范围内,并且不需要浮点存储。
Beauty = diffuse_level * (diffuse_raw + (indirect_raw * ao_raw)) +
spec_level * spec_raw +
refl_level * refl_raw +
refr_level * refr_raw +
tran_level * tran_raw +
add_result
请注意,该公式包含相乘,渲染流程中位于各个采样后面的某个阶段的后期相乘向下过滤到具有基本数学限制的像素,它可能显示为对象之间的边上的瑕疵,或显示在 alpha 小于 1.0 的图像的任何部分中。
如果为每个采样应用数学运算,则不会存在这些问题(通过将这些输出传递到着色树的其他部分并对其执行数学运算)。
提示和技巧
mental ray 3.5 中的最终聚集算法比早期版本有了极大的改进,特别是在其自适应方面。这意味着通常可以使用比早期版本的 mental ray 更少的光线数和更低的密度。
可以使用极限设置渲染很多静止图像(如 50 束光线以及密度 0.1),如果这导致“过度平滑”瑕疵,则可以使用内置 AO(请参见环境光遮挡页)解决这些问题。
当最终聚集与 GI(光子)一起使用时,应首先在禁用最终聚集的情况下进行渲染,以确保光子解决方案具有相当的“平滑性”。如果光子解决方案很杂乱,则增加光子搜索半径,直到它“平静下来”,然后重新启用最终聚集。
一些常用材质的快速指南
以下是创建各种材质的一些快速指南。均假定采用基本默认设置作为起点。
适用于有光泽的木材、地板等的一般指南
该类型的“混合”材质用于许多建筑渲染;涂了漆的木材、油布等。
对于这些材质,brdf_fresnel 应禁用(即,我们定义自定义 BRDF 曲线)。开始时使用 brdf_0_degree_refl 为 0.2 且 brdf_90_degree_refl 为 1.0,并将某些合适的纹理贴图应用于漫反射。将 reflectivity 设定为 0.5 到 0.8 之间。
材质的光泽程度如何?反射非常清晰还是非常模糊?是强还是弱?
- 对于清晰的、相当强的反射,保持 refl_gloss 值为 1.0
- 对于有些模糊但很强的反射,设定较低的 refl_gloss 值。如果性能出现问题,则尝试使用 refl_interpolate。
- 对于有些模糊但非常弱的反射,通常可以设定较低的 refl_gloss 值(以获得更广的高光),但将 refl_samples 值设定为 0 进行“欺骗”。这样仅射出反射的一条镜像光线,但是如果所有的反射都非常弱,通常可以不显示任何光线。
- 对于中等模糊的表面,设定更低的 refl_gloss,并可以增加 refl_samples。同样,出于性能考虑,请尝试 refl_interpolate。
- 对于强模糊的表面或反射非常弱的表面,尝试使用 refl_hl_only 模式。
典型的木地板可以使用 refl_gloss 值为 0.5、refl_samples 值为 16、reflectivity 值为 0.75,以及 diffuse 的漂亮木材纹理,可能是轻微凹凸贴图(如果只在涂漆层上出现凹凸,请尝试勾选 no_diffuse_bump 复选框)。
油布地毯可以使用上述相同的值,但使用不同的纹理和凹凸贴图,并且使用稍低的 reflectivity 和 refl_gloss。
陶瓷
陶瓷材质是磨光的,即包含于透明材质的薄层中。这类材质遵循与上述一般材质类似的规则,但您应启用brdf_fresnel,并将 refr_ior 设定为约 1.4,将 reflectivity 设定为 1.0。
diffuse 应设定为适当的纹理或颜色,即白色用于白色的浴室瓷砖。
石头材质
石头通常很粗糙,或者反射非常模糊(几乎是漫反射)。可以使用 diffuse_roughness 参数(首先尝试 0.5 值)模拟石头的“粉末状”特征。多孔的石头(如砖)应具有更高的值。
石头具有非常低的 refl_gloss(低于 0.25),您通常可以使用 refl_hl_only 实现很好的效果,以获得非常不错的性能。为 diffuse 使用漂亮的石头纹理(某种凹凸贴图或者是 refl_gloss 值可变化的贴图)。
如果禁用 brdf_fresnel,并且 brdf_0_degree_refl 为 0.2,brdf_90_degree_refl 为 1.0,则 reflectivity 介于 0.5-0.6 之间。
玻璃
玻璃是绝缘体,因此必须始终启用 brdf_fresnel。玻璃的 IOR 为 1.5 左右。将 diffuse_weight 设定为 0.0,reflectivity 设定为 1.0,transparency 设定为 1.0。这样足以创建基本的、完全清晰的折射玻璃。
如果将这种玻璃用于窗格,请将 thin_walled 设定为启用。如果这是实体玻璃块,则将 thin_walled 设定为禁用,并考虑是否需要焦散,然后相应地设定 do_refractive_caustics。
这是覆盖了霜的玻璃吗?将 refr_gloss 设定为适当的值。调整 refr_samples 以获得好的质量或使用 refr_interpolate 获得良好性能。
彩色玻璃
对于透明玻璃,前面部分中介绍的提示适用。但彩色玻璃略有不同。
许多着色器设定玻璃表面的透明度。如果只将 refr_color 设定为某个值(如蓝色),则的确可以使用该功能。对于启用了 thin_walled 的玻璃,该操作非常有效。但是对于实心玻璃对象,则不会产生真实的效果。
请看下面的示例。它包含两个大小不同的玻璃块,以及一个带有球形孔的球体14和玻璃脚架。

使用蓝色
refr_color:表面上发生颜色更改的玻璃
该问题很明显:
- 这两块玻璃的厚度完全不同,但它们具有程度完全相同的蓝色。
- 内部球体比外部球体暗。
为什么会发生这种情况?
考虑进入玻璃对象的光线。如果“表面上”带颜色,则当光线进入对象时会稍被着色,光线在通过对象时会保持此种颜色,并在离开对象时第二次被着色(衰减):

表面上发生颜色更改的玻璃图表
在上图中,光线从左侧进入,它在入射面上降低级别并稍稍变暗(该图底部以图解的方式演示了该级别)。光线通过介质,然后又进入出射面的层级,在这个过程中其颜色保持不变。
对于简单的玻璃对象,这已足够。对于使用 thin_walled 的任何玻璃,按照定义这就是正确的操作,但对于任何复杂的实体则不然。尤其不适用于玻璃内实体周围的空间(如示例中的球体),因为光线必须通过四个表面(而不是两个),所以需要增加两个额外的“表面衰减”步骤。
在实际的彩色玻璃中,光线通过介质,并在“离开”介质时发生衰减。在 mia_material 中,完成该过程需要启用 refr_falloff_dist 并使用 refr_falloff_color,以及将 refr_color 设定为白色。以下为结果:

介质内发生颜色更改的玻璃
以上结果显然更令人满意;厚玻璃块比薄玻璃块具有更深的蓝色,使空心球体看起来更为真实。在图表格式中,看起来如下:

d=
refr_falloff_dist,其中衰减为
refr_falloff_color
光线进入介质,并在整个移动过程中衰减。衰减的强度精确位于 refr_falloff_dist(图中的 d),衰减将匹配 refr_falloff_color(即,在该深度,衰减与以前模型中在曲面接收到的相同)。衰减是指数级的,即在双倍 refr_falloff_dist 处,效果是 refr_falloff_color 的平方,依此类推。
这里有一个较小的折衷:
若要使用该方法正确渲染材质的阴影,必须使用焦散或确保 mental ray 以“分段”阴影模式渲染阴影。
自然地使用焦散可以显示最为正确的阴影(上图未使用焦散渲染),但需要启用焦散光子和发射焦散光子的物理光源。
另一方面,mental ray“分段”阴影的性能稍逊于使用更为普遍的“简单”阴影模式的性能。但是,如果不使用“分段阴影”,阴影强度将不会对介质中的衰减给予恰当的考虑15。
水和液体
水与玻璃一样,是 IOR 为 1.33 的绝缘体。因此,用于玻璃的相同原则(如上)也适用于真正需要折射对象的水的实体...例如水从水龙头流出。彩色饮料与彩色玻璃等使用相同的原则。

将水倒入酒中
若要如上图所示创建容器中的饮料,请务必了解 mia_material 如何处理透过多个曲面的折射,以及“真实世界”如何处理相同的问题。
对于折射,重要的是如何从一个介质过渡到另一个具有不同 IOR 的介质。此类过渡称为界面。
对于玻璃中的柠檬水,可想象一条从空气中射过来的光线 (IOR = 1.0) 进入玻璃,然后按照玻璃的 IOR (1.5) 折射。光线穿过玻璃后,离开玻璃并进入液体中,即它通过一个界面从一个 IOR 为 1.5 的介质进入另一个 IOR 为 1.33 的介质。
在计算机图形中为此建模的一种方法是将玻璃变成一个独立的闭合曲面,法线指向玻璃的内部,并且 IOR 为 1.5;另一个闭合曲面代表饮料,其法线都指向内侧,并且 IOR 为 1.33,并在容器和液体之间留出一条非常小的“气隙”。
该方法可行,但存在一个问题:当光从较高的 IOR 传入较低的 IOR 时,可能产生称为“整体内部反射”(TIR) 的效果。在游泳池中潜水并向上看时会看到这种效果 - 曲面上方的对象只能在头顶上一个小圈内看到,低于某个特定角度的任何对象只能显示水池的反射以及曲面以下的对象。两个介质的 IOR 差值越大,就越可能产生 TIR。
在我们的示例中,由于光线是从杯子 (IOR=1.5) 折射到空气,因此更有可能产生 TIR。然而在现实生活中,光线是从 IOR 为 1.5 的介质传输到 IOR 为 1.33 的介质,这个跨度非常小,因此产生 TIR 的几率也很小。下面的情况看起来有所不同:

正确的折射(左)与“气隙”方法(右)
左侧的结果是正确的,但是如何得到该结果?
唯一的办法就是重新思考建模,不再考虑介质,而是考虑界面。在所举的示例中,有三个不同的界面,可以将外部介质 IOR 和内部介质 IOR 之间的比率作为其 IOR:
- 空气-玻璃界面 (IOR = 1.5/1.0 = 1.5)
- 空气-液体界面 (IOR = 1.33/1.0 = 1.33)
- 玻璃-液体界面 (IOR = 1.33/1.5 = 0.8)
在最常见的具有空气的界面情况下,使用的 IOR 都是介质的 IOR(因为空气的 IOR 为 1.0),而在两种不同介质之间的界面上,情况则有所不同。
若要为该方案正确建模,需要三个曲面,且每个都应用单独的 mia_material:

玻璃中液体的三个
界面
- 空气-玻璃曲面(蓝色)的法线指向玻璃外部,该曲面覆盖了空气与玻璃直接接触的区域,IOR 为 1.5。
- 空气-液体曲面(绿色)的法线指向液体外部,该曲面覆盖了空气与液体直接接触的区域,IOR 为 1.33。
- 玻璃-液体曲面(红色)的法线指向液体外部,该曲面覆盖了玻璃与液体接触的区域,IOR 为 0.8。
通过为两种液体材质设定合适的 refr_falloff_dist 和 refr_falloff_color(以获得彩色液体),可产生以上比较图中左侧图像的结果。
海面和水面
水面与明显透明的液体稍有不同。
海洋不是蓝色的,其具有反射性。并不是很多穿透海面的光线都能够随意投射。一些光线再次散射回来形成一串非常小的“次表面散射”。
若要使用 mia_material 创建海洋曲面,请执行以下步骤:
将 diffuse_weight 设定为 0.0,reflectivity 设定为 1.0,而 transparency 设定为 0.0(是,我们不使用折射!)。
将 refr_ior 设定为 1.33,brdf_fresnel 设定为启用。为 bump 应用相应的摆动着色器,海洋就基本完成了!
该海洋只有由 IOR 控制的反射。但这可能很好地发挥效用,请尝试使用它。确保此处有内容可以进行反射!添加天空贴图、对象或只添加蓝色的渐变背景。必须存在事物,否则它将完全为黑色。

海洋不是蓝色的 - 天空才是
为获得更具“热带特征”的外观,请尝试将 diffuse 设定为某种略带绿色/蓝色的颜色,diffuse_weight 设定为某个非常小的数字 (0.1) 并勾选 no_diffuse_bump 复选框。
现在,水中具有“基础颜色”,用来模拟出现在海平面上的少量散射。

尽享热带风景
金属具有很强的反射性,这意味着它们需要一些物体进行反射。具有真实 HDRI 环境的金属才能拥有最佳外观,该环境既可以来自以球形方式贴图的 HDRI 照片16,也可以来自类似 mental ray 物理天空的物质。
若要设置经典的铬金属,请禁用brdf_fresnel,将 reflectivity 设定为 1.0,brdf_0_degree_refl 设定为 0.9,brdf_90_degree_refl 设定为 1.0。将 diffuse 设定为白色,然后勾选 refl_is_metal 复选框。
这将创建几乎完全反射的材质。调整 refl_gloss 参数以获得各种级别的模糊反射。还应该考虑使用“圆角”效果,该选项能够对金属对象发挥很好的作用。
金属还影响其反射的颜色。由于启用了 refl_is_metal,因此已经发生这种情况;尝试将 diffuse 设定为“黄金”色以创建黄金。
尝试各种级别的 refl_gloss(必要时可借助 refl_interpolate 提高性能)。
也可以更改 reflectivity,refl_is_metal 处于启用状态时其含义稍有不同;它在反射(由 diffuse 着色)和正常的漫反射着色之间混合。这允许在光泽反射和漫反射着色之间“混合”,这两种都由相同的颜色驱动。例如,铝制材质需要一定的漫反射混合,而铬合金不需要。

金、银和铜或者其他?
拂刷金属是有趣的金属特例。在某些情况下,创建拂刷金属只是将 refl_gloss 调低到获得“非常模糊”反射的级别。当拂刷方向为随机设置,或笔刷太小以至于无法看到(即使是聚合效果)时,该操作便足以创建拂刷金属。
对于具有清晰拂刷方向和/或实际笔划可见的材质,创建令人信服的外观是稍微复杂的过程。
拂刷金属曲面微小的凹槽一起起作用会造成各向异性反射。这一点可以通过下图说明,该图通过对许多相邻的微小圆柱体(用简单的 Phong 着色器进行着色)实际建模来模拟笔刷槽:

许多小的相邻圆柱体
正如您所看到的,每个圆柱体中的镜面反射高光协同工作,以产生各向异性高光的聚合效果。
另外请注意,高光不是连续的,它实际上被分解为若干相邻的小分段。即,材质为“拂刷金属”的主要可视线索为:
- 在与拂刷方向垂直的方向拉伸的各向异性高光。
- 在拂刷方向有“中断”的不连续高光。
模拟拂刷金属的许多尝试只看到第一个效果,即各向异性。另一个最常犯的错误就是认为高光在拂刷方向拉伸。这都是不正确的。
因此,若要模拟拂刷金属,我们需要模拟这两个可视线索。第一个操作很简单:使用 anisotropy 和 anisotropy_rotation 得到各向异性高光。可以采用以下几种方法执行第二个操作:
- 采用凹凸贴图
- 采用 anisotropy 或 refl_gloss 可变的贴图
- 采用 refl_color 可变的贴图
每种方法都各有其优缺点,不过我们此处尝试使用最后一种方法。选择该方法的原因是它能够与插值很好地协同工作。
- 为“笔刷条纹”创建贴图。执行该操作的方法有很多,可以通过绘图程序绘制贴图,也可以使用已在一个方向高度拉伸的“噪波”贴图。
- 该贴图应该在中间灰度和白色之间变化。按照适合拂刷的比例将该贴图应用于 refl_color。
- 将 diffuse 设定为白色(或金属颜色),而将 diffuse_weight 设定为 0.0(或较小的值)。
- 确保 refl_is_metal 处于启用状态。
- 将 refl_gloss 设定为 0.75。
- 将 anisotropy 设定为 0.1 或类似值。使用 anisotropy_rotation 将高光与贴图正确对齐。如有必要,可使用 anisotropy_channel 将其建立在与贴图相同的纹理空间基础上。

拂刷金属
脚注- 1
- 双向反射比分布函数
- 2
-
这也称为“sRGB”颜色空间。
- 3
- sRGB 颜色空间中的粗糙剪裁看起来很不美观,当一个颜色通道先于其他颜色通道进行剪裁时更是如此。通常情况下,色调映射通过使用比 sRGB 更适合的颜色空间中的“柔性剪裁”来解决该问题。
- 4
-
热力学第一定律是尚无人谈论的热力学定律;
- 5
- 与单独的 mental ray mib_amb_occlusion 着色器类似。
- 6
- 请参见能量守恒页。
- 7
-
实际的数量是自适应的,取决于反射率、光线重要性和许多其他因素。
- 8
- 该方法在平面上使用效果最佳。
- 9
-
如果未启用最终聚集,则该模式仅显示高光且不会尝试模拟反射。
- 10
-
请注意,从纹理空间生成各向异性只能为每个三角形创建一个空间,并可能导致三角形之间产生可见的接缝。
- 11
-
有时,用户使用 AO 作为所有漫反射光的常规倍增。这存在影响使用“AO 阴影”均匀地照亮直接照亮区的明显缺陷,其看起来可能存在问题。内置 AO 着色器中未涵盖这一用法,因为它只需要通过为材质的漫反射颜色应用 mib_amb_occlusion 着色器并将材质的原始颜色放入其 Bright 参数中即可实现。
- 12
- 当然,这不适用于 refl_hl_only 模式,因为它不会实际反射任何内容。
- 13
- 为更轻松地支持在现象和以前使用 mia_material 的其他位置使用 mia_material_x,提供了 multiple_outputs 参数。如果设定为禁用,则 result 以外的其他参数都不会写入(不修改其他参数,因此其处于未定义状态)。这也会使您可以安全地将 mia_material_x 提供给“着色器”类型的参数,此类参数只会有一个颜色返回值。
- 14
-
通过插入第二个球体,法线在外球体内部翻转而创建。不要忘记翻转此类曲面的法线,否则它们将不能正确渲染!
- 15
- 但是,它可能看起来仍是“完美的”。
- 16
- 在线提供许多 HDRI 图像。