バージョン 3.7.1.23
2008 年 6 月 26 日
自動車の塗装関連のシェーダは、ペイント ライブラリに含まれています。シェーダとフェノメナの宣言は、ファイル paint.mi で提供されます。シェーダを使用するには、宣言ファイルをインクルードし、ライブラリをリンクする必要があります。
link "paint.so"
$include "paint.mi"
自動車の塗装には固有の特性がいくつかあります。自動車のボディの上には、薄い顔料の層があります。この層は、見る角度や入射光の入射角に応じて、色が変化して見えるという特性があります。
この層には非常に小さな金属片(フレーク)が浮いています。金属片は光を反射し、晴れた日にはキラキラ輝いて見えます。これは、個々の金属片が太陽光を直接反射するためです。
この層の上にはクリア コート層があります。この層の反射と光沢は、クリア コート層の性質や、ワックス コーティングが施されているかどうかに応じて異なります。この層は特にフレネル効果が顕著に現れ、浅い視射角から見たときほど反射が強くなります。
mi_car_paint_phen または mi_car_paint_phen_x は、マテリアルのサーフェス シェーダとして適用する必要があります。mi_car_paint_phen_x 変数は、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"
)
declare phenomenon
struct {
color "result", # main output
color "ambient_result",
color "ambient_raw",
color "ambient_level",
color "diffuse_result",
color "diffuse_raw",
color "diffuse_level",
color "indirect_result",
color "indirect_raw",
color "indirect_level",
color "spec1_result",
color "spec1_raw",
color "spec1_level",
color "spec2_result",
color "spec2_raw",
color "spec2_level",
color "flake_result",
color "flake_raw",
color "flake_level",
color "flake_refl_result",
color "flake_refl_raw",
color "flake_refl_level",
vector "flake_normal",
color "dirt_result",
color "dirt_raw",
color "dirt_level",
color "reflection_result",
color "reflection_raw",
color "reflection_level"
} "mi_car_paint_phen_x" (
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_reflections を使用して作成されるため、パラメータ max_distance(反射レイの到達範囲を制限します)と single_env_sample(環境マップのルックアップを最適化します)はシェーダ mib_glossy_reflection のエクスポーズされたパラメータです。パラメータのサブセットのみがエクスポーズされ、さらに必要な場合は、カスタム シェーディング グラフを作成するか、mi_car_paint_phen フェノメナの独自のバリエーションを作成します。
シンプルな汚れの均等拡散層で、その下にある顔料層とクリア コート層を覆います。
このシェーダは、メタリック ペイントを表現するために使用します。ただし、顔料とフレーク(金属片)には対応しますが、非常に重要なクリア コートの反射には対応していません。完全な効果を得るには、反射シェーダと組み合わせて使用する必要があります(たとえば、mib_glossy_reflection の base_material パラメータに接続します)。また、フレークを再現するには、mi_bump_flakes のようなバンプ シェーダも必要です。
また、汚れの層をサポートする mi_car_paint_phen などのフェノメナも使用できるので便利です。フェノメナのドキュメントには、パラメータに関するもう少し詳しい説明がサンプル イメージと共に記載されています。
このシェーダは以下をサポートします。
このシェーダには次の 2 つのバリエーションがあります。mi_metallic_paint は単一の最終的な合成カラーを返し、mi_metallic_paint_x は合成前の個別のコンポーネントの個別のチャンネルを返します。
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
declare shader
struct {
color "result",
color "ambient_result",
color "ambient_raw",
color "ambient_level",
color "diffuse_result",
color "diffuse_raw",
color "diffuse_level",
color "indirect_result",
color "indirect_raw",
color "indirect_level",
color "spec1_result",
color "spec1_raw",
color "spec1_level",
color "spec2_result",
color "spec2_raw",
color "spec2_level",
color "flake_result",
color "flake_raw",
color "flake_level",
color "flake_refl_result",
color "flake_refl_raw",
color "flake_refl_level",
vector "flake_normal"
} "mi_metallic_paint_x" (
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
このシェーダは、わずかに異なる方向を向いた個々の小さなフレークの外観を表すバンプ マップを作成するために設計されています。このシェーダは、手続き的に生成されたフレーク テクスチャに基づいて現在の法線ベクトルを少し変更します。また、そのフレークの "強度" を示すカラーも返します。
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
Copyright (©) 1986-2008 by mental images GmbH