mental ray ペイント シェーダ

バージョン 3.4.5.1
2005 年 6 月 30 日


mental ray カー ペイント シェーダ

目次


はじめに

ペイント関連のシェーダは、paint ライブラリにあります。シェーダとフェノメナの宣言は、ファイル paint.mi にあります。シェーダを使用するには、宣言ファイルをインクルードし、ライブラリをリンクする必要があります。
	link "paint.so"
	$include "paint.mi"
	

自動車の塗装には固有の特性がいくつかあります。自動車のボディの上には、薄い顔料の層があります。この層は、見る角度や入射光の入射角に応じて、色が変化して見えるという特性があります。

この層には非常に小さな金属片(フレーク)が浮いています。金属片は光を反射し、晴れた日にはキラキラ輝いて見えます。これは、個々の金属片が太陽光を直接反射するためです。

この層の上にはクリア コート層があります。この層の反射と光沢は、クリア コート層の性質や、ワックス コーティングが施されているかどうかに応じて異なります。この層は特にフレネル効果が顕著に現れ、浅い視射角から見たときほど反射が強くなります。


カー ペイントの構造

カー ペイント フェノメナ

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 で効果は無効になります。値が低いほどエッジの領域が狭くなり、値が高いほどエッジの領域が広くなります。


見る角度による色の変化: base_color の赤から edge_color の青
(分かりやすいように、非現実的なカラーを使っています)への変化を、さまざまな edge_bias 値を使用して示した例

lit_color は、光源に面する領域のカラー。

lit_color_bias は、カラーのライト方向の減衰率を定義します。有効範囲は 0.0 ~ およそ 10.0 で、値 0.0 で効果は無効になります。値が高いほどライトに面する色付きの領域が小さく/狭くなり、値が低いほどライトに面する色付きの領域が大きく/広くなります。


見る角度による色の変化: base_color の赤から lit_color の緑
(分かりやすいように、非現実的なカラーを使っています)への変化を、さまざまな lit_bias 値を使用して示した例

拡散パラメータの全体的なレベルは、diffuse_weight パラメータを使用して調整できます。

diffuse_bias は、拡散シェーディングの減衰を変更します。有効範囲はおよそ 0.5 ~ 2.0 で、値 1.0 が標準的な均等拡散シェーディングに相当します。値が高いほど拡散のピークが光源に近づき、値が低いほど拡散のピークが均等化されます。

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 パラメータを使用します。このパラメータは、フレークの影響を減衰させる距離を設定します。値 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_reflections を使用して作成されるため、パラメータ max_distance(反射レイの到達範囲を制限します)と single_env_sample(環境マップのルックアップを最適化します)はシェーダ mib_glossy_reflection のエクスポーズされたパラメータです。パラメータのサブセットのみがエクスポーズされ、さらに必要な場合は、カスタム シェーディング グラフを作成するか、mi_car_paint_phen フェノメナの独自のバリエーションを作成します。

ダーティ パラメータ


現実世界の自動車には、たいてい汚れが付着しています。この汚れの層は、汚れた部分にバンプ マップを適用するなど、汚れを付けるためのマップを手描きでペイントして再現します。

シンプルな汚れの均等拡散層で、その下にある顔料層とクリア コート層を覆います。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_reflectionbase_material パラメータに接続します)。また、フレークを再現するには、(通常は mi_bump_flakes のバンプ シェーダも必要です。

これらすべてのコネクションを自動的に作成するには、mi_car_paint_phen という名前の既成のフェノメナを使用できます。これは、汚れの層もサポートしています。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 
  

拡散パラメータ

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 が標準的な均等拡散シェーディングに相当します。値が高いほど拡散のピークが光源に近づき、値が低いほど拡散のピークが均等化されます。

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_decay パラメータを使用します。このパラメータは、フレークの影響を減衰させる距離を設定します。値 0.0 で減衰は無効になります。正の値を指定すると、flake_weight の値が徐々に変化して、この距離でゼロになります。

flake_bump は、実際に使用するフレーク バンプ シェーダ。シェーダ mi_bump_flakes をこの目的のために使用できますが、法線ベクトルを変更する他のシェーダ(たとえば、mib_passthrough_bump_map)を使用することもできます。

flake_bump に指定したシェーダは、カラーを返すか(このカラーはフレークのカラー(強度)になります)、カラーを変更しないままにします。

その他のパラメータ

global_weight は、グローバルな調整を行うパラメータで、シェーダの出力に対するグローバルの乗数です。

そして最後に、mode はライト モードで、lights はライトリストです。

フレーク バンプ シェーダ

このシェーダは、わずかに異なる方向を向いた個々の小さなフレークの外観を表すバンプ マップを作成するために設計されています。このシェーダは、手続き的に生成されたフレーク テクスチャに基づいて現在の法線ベクトルを少し変更します。また、そのフレークの "強度" を示すカラーも返します。

    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_strenght は、法線ベクトルの摂動量を示します。値の有効範囲は 0.0(効果は無効です)~ 1.0 です。値が低いほどフレークはサーフェスに平行になり、値が高いほど各フレークの方向の差異が大きくなります。

flake_scale は、フレークのサイズ。手続き型テクスチャはオブジェクト スペースで計算されるため、オブジェクトによって制御されます。したがって、フレークのスケールは、オブジェクトのインスタンスにおけるスケール変換の影響を受けます。


Copyright © 1986-2009 by mental images GmbH