版本 3.11
版本 3.11.0.3
2012 年 7 月 20 日
与绘制相关的着色器包含在绘制库中。着色器和现象的声明可在 paint.mi 文件中找到。要使用此着色器,必须要包含声明文件和链接库:
link "paint.so" $include "paint.mi"
汽车绘制具有多个特殊特性。汽车车身顶部是颜料的薄层。此层的属性是:感觉到的实际颜色会根据查看角度和引入灯光的入射角度而发生色移。
在此层内,细小的油漆碎片会挂起。油漆碎片反射光,并且由于单独的油漆碎片可以反射太阳光(观察者可直接看到),因此还可以在晴天看到油漆碎片闪光。
该层顶部是透明涂层,可以或多或少反射,并且或多或少具有光泽,具体情况取决于该层的质量以及是否添加蜡膜。更特别地是,该层趋向于显示显著的 Fresnel 效果 ,可以在掠射角反射更多灯光。
在材质中,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"
)





透明涂层倾向于在掠射角(边)执行更多的反射。
(可选)透明涂层可能有光泽。
光泽反射是由着色器 mib_glossy_reflection 创建的。因此,参数 max_distance(限制反射光线的范围)和 single_env_sample(优化环境贴图的查找)是该着色器显示的参数。仅显示这些参数的子集。如果需要更多,可以构建自定义着色图形或创建 mi_car_paint_phen 现象的自身变体。
单一的朗伯 (lambertian) 尘土层包含底部颜料和透明涂层。
mi_metallic_paint 是用于进行金属颜色渲染的着色器。但是,它仅针对颜料和油漆碎片,对透明涂层反射来说并不是很重要。要完成完整效果,它需要组合使用反射着色器(即将其连接到 mib_glossy_reflection)的 base_material 参数)。对于油漆碎片,同时还需要凹凸着色器(通常为 mi_bump_flakes)。
要将这些所有连接自动完成,可以使用现成的现象 mi_car_paint_phen,同时还支持尘土层。请参见上面的文档,其中对这些参数进行了略微详细说明,并附有示例图像。
该着色器支持:
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
因为油漆碎片本来较小,因此如果其可视密度远小于一个像素,则油漆碎片可能会容易带来不真实的渲染效果。为了避免此情况,因此使用参数 flake_decay。它可设置油漆碎片影响衰减的距离。值为 0.0 表示禁用衰减。任何正值都会导致调整 flake_weight,以便它在此距离处达到零。
此着色器专门用于创建方向稍不同、外观较小单个油漆碎片的凹凸贴图。基于程序生成的油漆碎片纹理,通过稍微修改当前法线向量,它实现相应操作。它还返回表示油漆碎片“强度”的颜色。
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