mental ray 绘制着色器

版本 3.11

版本 3.11.0.3
2012 年 7 月 20 日


mental ray 汽车绘制着色器

内容

绘制着色器

与绘制相关的着色器包含在绘制库中。着色器和现象的声明可在 paint.mi 文件中找到。要使用此着色器,必须要包含声明文件和链接库:

link "paint.so"
$include "paint.mi"

汽车绘制具有多个特殊特性。汽车车身顶部是颜料的薄层。此层的属性是:感觉到的实际颜色会根据查看角度和引入灯光的入射角度而发生色移

在此层内,细小的油漆碎片会挂起。油漆碎片反射光,并且由于单独的油漆碎片可以反射太阳光(观察者可直接看到),因此还可以在晴天看到油漆碎片闪光。

该层顶部是透明涂层,可以或多或少反射,并且或多或少具有光泽,具体情况取决于该层的质量以及是否添加蜡膜。更特别地是,该层趋向于显示显著的 Fresnel 效果 ,可以在掠射角反射更多灯光。


汽车绘制的结构

汽车绘制现象

在材质中,mi_car_paint_phen 应该用作表面着色器。该着色器支持:

mi_car_paint_phen
declare phenomenon "mi_car_paint_phen" 
(
    color       "ambient",
    color       "base_color",
    color       "edge_color",
    scalar      "edge_color_bias",
    color       "lit_color",
    scalar      "lit_color_bias",
    scalar      "diffuse_weight",
    scalar      "diffuse_bias",
    color       "flake_color",
    scalar      "flake_weight",
    scalar      "flake_reflect",
    scalar      "flake_exp",
    scalar      "flake_density",
    scalar      "flake_decay",
    scalar      "flake_strength",
    scalar      "flake_scale",
    color       "spec",         
    scalar      "spec_weight",      
    scalar      "spec_exp",         
    color       "spec_sec",
    scalar      "spec_sec_weight",  
    scalar      "spec_sec_exp",     
    boolean     "spec_glazing",
    color       "reflection_color",
    scalar      "edge_factor",    
    scalar      "reflection_edge_weight",
    scalar      "reflection_base_weight",
    integer     "samples",
    scalar      "glossy_spread",
    scalar      "max_distance",
    boolean     "single_env_sample",
    color       "dirt_color",
    scalar      "dirt_weight",
    scalar      "irradiance_weight",
    scalar      "global_weight",
    integer     "mode",
    array light "lights"
)

漫反射参数

ambient
是指环境光组件。请注意,该参数受其他漫反射颜色参数的影响,因此表示入射光而非该对象的“环境光颜色”,从这一点考虑,对该参数的处理方式不同于许多其他基础着色器的环境光/环境系数参数对。

base_color
是指材质的基础漫反射颜色。
edge_color
是指在看起来比较暗的掠射角(即,边)看到的颜色。对于所涂金属颜色确实很深的跑车,很可能看起来是黑色的。
edge_color_bias
定义朝向边的颜色的衰减比率。有用的范围是从 0.0 到大约 10.0,其中值 0.0 表示禁用此效果。较高的值会使边区域较窄,较低的值会使其较宽。

由于查看角度不同,因此颜色会发生色移:使用变化的 edge_bias 在红色 base_color
蓝色 edge_color
之间变化(选择的非典型颜色仅用于演示)
lit_color
是指在面对光源的区域中看到的颜色。
lit_color_bias
定义朝向光的颜色的衰减比率。有用的范围是从 0.0 到大约 10.0,其中值 0.0 表示禁用此效果。较高的值会使朝向光的彩色区域变小/变窄;而较低的值会使其变大/变宽。

由于查看角度不同,因此会发生色移:使用变化的 lit_bias 在红色 base_color
绿色 lit_color
之间变化(选择的非典型颜色仅用于演示)
diffuse_weight
控制漫反射参数的总体级别。
diffuse_bias
修改漫反射着色的衰减。有用的范围从大约 0.5 到 2.0,其中 1.0 表示标准的朗伯 (lambertian) 着色,较高的值会推动漫反射峰靠近光源,而较低的值会展平漫反射峰。
irradiance_weight
设置表面上间接照明(光子和最终聚集)的影响。以 PI 进行内部划分;即,值 1.0 表示标准量 1.0/PI。

镜面反射参数

spec
是指主镜面反射高光的颜色。
spec_weight
是指标量倍增。
spec_exp
是指 Phong 指数。
spec_sec
是指次镜面反射高光的颜色。
spec_sec_weight
是指标量倍增。
spec_sec_exp
是指 Phong 指数。
spec_glazing
可在主镜面反射高光上启用一个特殊模式,称为“玻璃”。通过将阈值应用到镜面反射高光,使表面看起来更加光亮、有光泽。对于打蜡的漂亮跑车,启用“玻璃”。对于垃圾场中的老爷车,将其禁用。

从左到右:仅限于油漆碎片镜面反射;标准镜面反射;已启用“玻璃”模式;带有油漆碎片的“玻璃”模式镜面反射

油漆碎片参数

flake_color
是指油漆碎片的颜色(反射率),通常为白色。
flake_weight
是指以上颜色的标量倍增。
flake_reflect
定义在油漆碎片中光线跟踪反射的数量,可进行如 HDRI 环境的闪烁反射。默认值为 0.0 表示禁用此效果。此效果非常精细,值 0.1 通常就已足够。最终反射强度还取决于 flake_colorflake_weight 的值。
flake_exp
是指油漆碎片的 Phong 镜面反射指数。
flake_density
设置油漆碎片的密度。有用的范围从 0.1 到大约 10.0,其中较小的值表示油漆碎片较稀少,较大的值表示油漆碎片较稠密。
因为油漆碎片本来较小,因此如果其可视密度远小于一个像素,则油漆碎片可能会容易带来不真实的渲染效果。如果将渲染的过采样设置为高,则小的油漆碎片还可能会触发大量过采样,并因此不必要地增加渲染时间,因为过采样产生的平均副作用会基本抵消油漆碎片效果。为了避免此情况,因此使用参数 flake_decay
flake_decay
设置油漆碎片影响衰减的距离。值为 0.0 表示禁用衰减。任何正值都会导致调整 flake_weight,以便它在此距离处达到零。

不同距离的油漆碎片,不存在油漆碎片衰减。最远的油漆碎片可能会引起动画闪烁,
或触发不必要的过采样和较长的渲染时间(此处使用低过采样进行渲染是为了进行说明)。

使用油漆碎片衰减。油漆碎片强度随距离而减弱。与上面的图像一样,同样故意使用低过采样。
flake_strength
设置油漆碎片方向之间的差异。有用的范围是从 0.0 到 1.0,其中 0.0 意味着所有油漆碎片与表面平行,较大的值表示油漆碎片的方向越来越不同。
flake_scale
是指油漆碎片的大小。程序纹理是在对象空间中计算的,因此将跟随对象。请记住,该比例因此会受对象实例中任何比例变换的影响。

反射参数

reflection_color
在透明涂层中设置反射的颜色,通常为白色。

透明涂层倾向于在掠射角(边)执行更多的反射。

edge_factor
定义该边的“狭窄程度”。
reflection_edge_weight
控制在边的反射强度(通常为 1.0)。
reflection_base_weight
定义正面角度的反射强度(通常较低:0.1 至 0.3)。

(可选)透明涂层可能有光泽。

samples 参数设置跟踪的光泽反射光线的数量。值为 0 表示禁用光泽度。
glossy_spread
设置光泽度量。通常汽车表面近似于镜面,所以应该使此值保持较小。

光泽反射是由着色器 mib_glossy_reflection 创建的。因此,参数 max_distance(限制反射光线的范围)和 single_env_sample(优化环境贴图的查找)是该着色器显示的参数。仅显示这些参数的子集。如果需要更多,可以构建自定义着色图形或创建 mi_car_paint_phen 现象的自身变体。

尘土参数


真正的汽车很少有干净的。此处显示尘土层(手绘的尘土放置贴图),包括应用在尘土区域的凹凸贴图。

单一的朗伯 (lambertian) 尘土层包含底部颜料和透明涂层。

dirt_color
是指该尘土的颜色。
dirt_weight
尘土量,可能会与纹理着色器连接以获得整个表面的尘土变化效果。如果 dirt_weight 为 0.0,则表明不添加尘土。

高级参数

irradiance_weight
设置表面上间接照明(光子和最终聚集)的影响。以 PI 进行内部划分;即,值 1.0 表示标准量 1.0/PI。
global_weight
是指影响整个漫反射、油漆碎片和镜面反射子系统的全局调整参数。它不影响反射率或尘土。
mode
是指灯光模式。
lights
灯光列表。

金属颜色

mi_metallic_paint 是用于进行金属颜色渲染的着色器。但是,它仅针对颜料和油漆碎片,对透明涂层反射来说并不是很重要。要完成完整效果,它需要组合使用反射着色器(即将其连接到 mib_glossy_reflection)的 base_material 参数)。对于油漆碎片,同时还需要凹凸着色器(通常为 mi_bump_flakes)。

要将这些所有连接自动完成,可以使用现成的现象 mi_car_paint_phen,同时还支持尘土层。请参见上面的文档,其中对这些参数进行了略微详细说明,并附有示例图像。

该着色器支持:

mi_metallic_paint
declare shader
color "mi_metallic_paint" (
    color       "ambient"           default 0 0 0 1,
    color       "base_color"        default 0.8 0.1 0.0 1,
    color       "edge_color"        default 0.0 0.0 0.0,
    scalar      "edge_color_bias"   default 1.0,
    color       "lit_color"         default 0.6 0.0 0.2,
    scalar      "lit_color_bias"    default 8.0,
    scalar      "diffuse_weight"    default 1.0,
    scalar      "diffuse_bias"      default 1.5,
    scalar      "irradiance_weight" default 1.0,
    color       "spec"              default 1 1 1 1,
    scalar      "spec_weight"       default 0.2,
    scalar      "spec_exp"          default 60.0,
    color       "spec_sec"          default 1 1 1 1,
    scalar      "spec_sec_weight"   default 0.3,
    scalar      "spec_sec_exp"      default 25.0,
    boolean     "spec_glazing"      default on,
    color       "flake_color"       default 1.0 1.0 1.0 1,
    scalar      "flake_weight"      default 1.0,
    scalar      "flake_reflect"     default 0.0,
    scalar      "flake_exp"         default 45.0,
    scalar      "flake_decay"       default 0.0,
    shader      "flake_bump",
    scalar      "global_weight"     default 1.0,
    integer     "mode"              default 3,
    array light "lights"        
)
version 2
apply material
end declare 

漫反射参数

ambient
是指环境光组件。请注意,该参数受其他漫反射颜色参数的影响,因此表示入射光而非该对象的“环境光颜色”,从这一点考虑,对该参数的处理方式不同于许多其他基础着色器的环境光/环境系数参数对。
base_color
是指材质的基础漫反射颜色。
edge_color
是指在看起来比较暗的掠射角(即,边)看到的颜色。对于所涂金属颜色确实很深的跑车,很可能看起来是黑色的。
edge_color_bias
定义朝向边的颜色的衰减比率。有用的范围是从 0.0 到大约 10.0,其中值 0.0 表示禁用此效果。较高的值会使边区域较窄,较低的值会使其较宽。
lit_color
是指在面对光源的区域中看到的颜色。
lit_color_bias
定义朝向光的颜色的衰减比率。有用的范围是从 0.0 到大约 10.0,其中值 0.0 表示禁用此效果。较高的值会使朝向光的彩色区域变小/变窄;而较低的值会使其变大/变宽。
diffuse_weight
用于调整漫反射参数的总体级别。
diffuse_bias
修改漫反射着色的衰减。有用的范围从大约 0.5 到 2.0,其中 1.0 表示标准的朗伯 (lambertian) 着色,较高的值会推动漫反射峰靠近光源,而较低的值会展平漫反射峰。
irradiance_weight
设置表面上间接照明(光子和最终聚集)的影响。以 PI 进行内部划分;即,值 1.0 表示标准量 1.0/PI。

镜面反射参数

spec
是指主镜面反射高光的颜色。
spec_weight
是指标量倍增。
spec_exp
是指 Phong 指数。
spec_sec
是指次镜面反射高光的颜色。
spec_sec_weight
是指标量倍增。
spec_sec_exp
是指 Phong 指数。
spec_glazing
可在主镜面反射高光上启用一个特殊模式,称为“玻璃”。通过将阈值应用到镜面反射高光,使表面看起来更加光亮、有光泽。对于打蜡的漂亮跑车,启用“玻璃”。对于垃圾场中的老爷车,将其禁用。

油漆碎片参数

flake_color
是指油漆碎片的颜色(反射率),通常为白色。
flake_weight
是指以上颜色的标量倍增。
flake_reflect
定义在油漆碎片中光线跟踪反射的数量,可进行如 HDRI 环境的闪烁反射。默认值为 0.0 表示禁用此效果。此效果非常精细,值 0.1 通常就已足够。最终反射强度还取决于 flake_colorflake_weight 的值。
flake_exp
是指油漆碎片的 Phong 镜面反射指数。
flake_bump
是指着色器使用的实际油漆碎片凹凸。除了可以使用修改法线向量的任何着色器(例如 mib_passthrough_bump_map),还可使用 mi_bump_flakes 着色器。
置于 flake_bump 中的着色器也可能会返回颜色,该颜色是油漆碎片的颜色(强度),或者可能不会修改该颜色。

因为油漆碎片本来较小,因此如果其可视密度远小于一个像素,则油漆碎片可能会容易带来不真实的渲染效果。为了避免此情况,因此使用参数 flake_decay。它可设置油漆碎片影响衰减的距离。值为 0.0 表示禁用衰减。任何正值都会导致调整 flake_weight,以便它在此距离处达到零。

其他参数

global_weight
是指着色器输出的全局倍增的全局调整参数。
mode
是指灯光模式。
lights
灯光列表。

油漆碎片凹凸着色器

此着色器专门用于创建方向稍不同、外观较小单个油漆碎片的凹凸贴图。基于程序生成的油漆碎片纹理,通过稍微修改当前法线向量,它实现相应操作。它还返回表示油漆碎片“强度”的颜色。

mi_bump_flakes
declare shader "mi_bump_flakes" (
    scalar      "flake_density"     default 0.5,
    scalar      "flake_strength"    default 0.8,
    scalar      "flake_scale"       default 0.2,
)
version 1
apply texture
end declare
flake_density
仅会对返回的颜色产生影响,而不会更改法线向量变化量。有用的范围是从 0.1 到大约 10.0,其中较低的值表示油漆碎片不太密集(将多个油漆碎片设定为接近黑色的低颜色值),而较高的值表示油漆碎片比较密集。
flake_strength
表示法线向量扰动量。有用的范围是从 0.0(表示禁用此效果)到 1.0。对于较低的值,油漆碎片几乎平行,对于较高的值,每个油漆碎片方向之间的差异较大。
flake_scale
是指油漆碎片的大小。程序纹理是在对象空间中计算的,因此将跟随对象。请记住,该比例因此会受对象实例中任何比例变换的影响。


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