CG のイメージは "不自然" に見えがちです。これは、現実世界ではすべてのエッジはわずかに丸みを帯びていたり、面取りされていたり、擦り減っていたり、またはある程度フィレットされているのに対し、CG のオブジェクトのエッジは幾何学的にシャープであるためです。現実世界の丸みを帯びたエッジは、"光を捉え"、ハイライトを作り出すため、より魅力的に見えます。
mia_roundcorners シェーダを使用すると、レンダリング時に "丸みを帯びたエッジ" を疑似的に作成できます。このシェーダの主な目的は、モデリングを高速化することです。このシェーダを使用すれば、テーブルの天板などのオブジェクトを作成する場合に、エッジをわざわざフィレットしたり、面取りしたりする必要はありません。
丸角
丸角を使用していない例 | 丸角を使用した例 |
このシェーダは、法線ベクトルを摂動させるため、通常バンプ マップが使用される箇所に適用する必要があります(たとえば、mia_material の場合は bump パラメータ)。
この関数はディスプレイスメントではなく、バンプ マッピングと同様に単なるシェーディング効果にすぎません。直線的なエッジやシンプルなジオメトリには最適ですが、大きくカーブしたジオメトリには適していません。
declare shader vector "mia_roundcorners" (
scalar "radius",
boolean "allow_different_materials",
shader "bump",
integer "bump_mode",
vector "bump_vector",
)
version 3
apply texture
end declare
radius パラメータは、丸め効果の半径をワールド空間の単位で定義します。
allow_different_materials が off の場合、丸め効果は同じマテリアルの面に対してのみ適用されます。on の場合、丸め効果はすべてのマテリアルの面に対して適用されます。
bump パラメータは、サーフェスの追加のバンプを処理する他のバンプ シェーダ(たとえば、mib_bump_map2 など)に渡されます。このパラメータは、bump_mode が 0 の場合にのみ使用されます。
OEM 統合をよりよくサポートするために、新しいパラメータ bump_mode と bump_vector が導入されました。
bump_mode は、bump_vector の座標空間とシェーダ自体の戻り値の座標空間(ベクトルでもある)を定義し、それを "法線ベクトルの摂動" として解釈するか、または完全に新しい"法線ベクトル" として解釈するかどうかを定義します。
有効な値は以下のとおりです。
"追加" モードとは、ベクトルに法線の摂動を含めることを意味します。すなわち、現在の法線に"追加"される変更です。"設定"モードでは、実際の法線が新しいベクトルによって置き換えられ、上記の座標空間で解釈されます。出力も同様に、"追加" モードでは、シェーダが現在の法線に追加されるベクトルの摂動を返し、"設定" モードでは、法線ベクトル全体を返します。いずれの場合も、シェーダ自体が実際に現在の法線を変更することはありません。
mia_envblur シェーダは、他の環境シェーダ(通常、HDRI 環境マップで環境参照を実行するシェーダ)を入力として受け取ることによって機能します。レンダリングの開始時に、1 回限りの設定を行い、特殊な形式のこの環境シェーダの結果を内部のピラミッド型のフィルタ構造にラスタライズします。
次に、レンダリング処理が進むと、このシェーダは、非常に大量の光沢反射光線を環境に照射する方法に非常に類似した方法で、この環境マップで非常に効果的なブラー処理を実行し、完全に滑らかな結果を迅速に作成します。
environment は、このシェーダによって参照される実際の環境シェーダです。これが指定されていない場合、グローバル カメラ環境が使用されます。
blur は、イメージに適用されるブラーの量(0.0 ~ 1.0 の範囲)です。0.0 の場合、内部のビットマップはバイパスされ、環境シェーダは、mia_envblur が存在しないかのように直接参照されます。
mia_material_blur を on に設定すると、ブラーの量は自動的に計算されます。mia_material によって実行される反射環境参照によって、mia_envblur で適切なブラーが生成されます。この場合、blur を 0.0 のままにします。この機能の詳細については、こちらを参照してください。
resolution は、フィルタリングに使用される内部のピラミッド型のデータ構造の解像度です。デフォルト値の 200 を設定すると、後続のフィルタリング用に 200 x 200 サンプルのマップが取得され、保存されます。これは、環境マップの最小機能を解決するのに十分高い値に設定する必要があります。一般に 200 は静止イメージには十分な値ですが、アニメーションにはより高い解像度(1000)が必要です。
mia_envblur は開始時に environment シェーダの 1 回限りのラスタライゼーションを実行する点に注意してください。つまり、このシェーダはシーン全体に対して一定でなくてはならず、環境シェーダの位置に依存する複雑なブレンドは実行できません。ラスタライゼーションはフレームごとに新たに実行されるため、環境は経時的に変化します。
環境ブラー シェーダ mia_envblur は、mental ray の環境を主に反射する(他のオブジェクトを主には反射しない)レンダリングの精度と性能を向上させるために使用します。
このシェーダは主に、HDRI 環境マップによる反射を利用したプロダクトのビジュアライゼーション レンダリングや、HDRI の反射を使用して CG オブジェクトを実写のシーンに統合して滑らかかつ迅速に参照を行えるビジュアル エフェクトを作成したいような場合に役立ちます。
このシェーダは、通常の屋内の建築レンダリング用ではありません。そのような(閉鎖された)シーンでは、ほとんどの反射光線はバウンドして他のオブジェクトに当たるためです。このシェーダの目的は、他のオブジェクトに当たらない反射光線をサポートすることです。つまり、"屋外" のシーンで最も役に立ちます1。
環境マップを反射するオブジェクト
これは、環境マップ2を反射している、光沢(完璧なミラー反射)のないオブジェクトの例です。擬似ランダム サンプリングが実行されていないため、問題は見られません。
しかし、ここで作成する必要があるのは光沢反射です。mia_material の光沢反射を単に使用すると、以下のような結果になります。
サンプル数 8 の光沢反射
デフォルトのサンプル数 8 の光沢反射では、特に高コントラストの環境マップにはまるで不十分です。光沢サンプルを 100 に設定すると(パフォーマンス ヒットは大きくなります)、以下のような結果になります。
サンプル数 100 の光沢反射
改善はされましたが、まだ "滑らかな" 光沢反射にはほど遠い状態です。サンプルを 100 に設定したことによって、レンダリング速度が極端に低下したにもかかわらず、まだ不十分な結果です。どうすればよいでしょうか。
ここでは、環境を何度も参照することが目的ではありません。参照する必要があるのは、8 回でも 100 回でもなく、1 回です。ただし、その参照には既に目的のブラーが含まれている必要があります。
これには、mia_material の single_env_sample(環境からの単一サンプル)パラメータを有効にし、mia_envblur を環境シェーダとして、"オリジナル" の環境マップを mia_envblur の environment パラメータとして適用する必要があります。
光沢サンプル数をオリジナルの 8 に戻すと、以下のレンダリング結果が迅速に得られます。
mia_envblur を使用した光沢反射
レンダリング結果は大幅に改善され、レンダリング速度も大幅に高速になりましたが、ブラーの度合いが一定です。より高度な方法は、mia_material_blur を有効にして、mia_envblur が適用対象のブラーを取得できるようにすることです。
ここでは、以下のマップを mia_material の refl_gloss パラメータに既に適用済みであると仮定します。
光沢マップ
mia_envblur を使用した場合のレンダリング結果は以下のとおりです。
mia_material_blur を介してマッピングされた光沢
このような使用方法では、mia_envblur シェーダは等方性参照のみをサポートし、mia_material の異方性パラメータを無視する点に注意してください。
また、single_env_sample 機能を必ず使用してください。通常、環境マップにブラーを適用するだけでは不十分で、ノイズが発生します。
他のオブジェクト は複数のサンプルを使用して従来の方法で反射し、この機能は環境参照にのみ適用される点に注意してください。そのため、refl_falloff_dist(最大距離)を使用して "実際の" 反射を隣接するオブジェクトのみに限定し、環境が遠方のオブジェクトの役目を引き継ぐようにするのに便利です3。
環境ブラー
シェーダの機能とパラメータ
declare shader "mia_envblur" (
shader "environment",
scalar "blur" default 0.0,
boolean "mia_material_blur" default on,
integer "resolution" default 200
)
version 1
apply environment, texture
end declare
使用例
refl_falloff_dist(最大距離)を使用していない例 | refl_falloff_dist(最大距離)を使用した例 |
右のイメージでは、馬の脚の床に非常に近い部分のみが反射しています。逆を言えば、馬の脚には最も近い床の部分のみが反射しています。その他は環境反射です。このため、これらの反射を実際にトレースする場合に比べて迅速に結果が得られ、イメージのノイズも削減できます。
mia_light_surface シェーダは、従来の CG の "ライト" を使用してシーンのイルミネーションを作成する一方で、蛍光灯の実際の管、電球の実際のバルブなど、光源の "可視" 部分の物理的に妥当なレンダリングを作成するために主に使用します(以下の使用例を参照)。
mia_light_surface の使用例
上のイメージでは、実際のイルミネーションは、細長い四角形のエリア ライトが光源で、スぺキュラ ハイライトが発生するようには設定されていません。蛍光灯の可視の "グロー" は、反射には現れるように設定されていますが(そのため、より正確な "ハイライト" になります)、FG レイに対しては不可視なので追加ライトとして間違って取り扱われることはありません。
mia_light_surface シェーダは、シェーダ自体がカラーを提供するか、シーン内の既存のライト(ライトのセット)からカラーを得ることができます。
シェーダ自体は、カラーを返すだけであり、他のシェーディングを行うことはありません。mia_material の additional_color(追加のカラー)に接続して使用することをお勧めします。
mia_light_surface シェーダのパラメータは以下のとおりです。
version 3
apply texture
end declare
color(カラー)は、全体的なカラーで、組み込み型のライトまたは光源から得たライトの両方に適用されます。
intensity(強度)は、"組み込み" のライトの強度です。つまり、color に intensity を乗じた強度のサーフェスがカメラに映ります(use_lights がオフに設定されている場合。以下を参照)。
fg_contrib(ファイナル ギャザーへの寄与度)は、FG レイに対して可視のライトの割合で、refl_contrib(反射への寄与度)は反射光線に対して可視のライトの割合です。
use_lights(ライトの使用)がオンの場合、lights(ライト)配列にリストされたライトはポーリングされ、ライトの強度(lights_multiplier(ライト マルチプライヤ)を乗じた強度)は、intensity パラメータによって指定された出力に追加されます。L が lights リストのすべてのライトの出力の場合、シェーダの最終的な出力のカラーは次の計算式で求められます。
color * (L * lights_multiplier + intensity)
lights_eval_point(ライト評価ポイント)が 0,0,0 の場合、ライトの強度は、シェーディング対象の 3D 空間のポイントで評価されます(シャドウは無効)。IES プロファイルが設定されたライトの場合は、望ましい結果が得られない可能性があるため、ライトのカラーを評価する明示的なポイントを指定できます。この場合、ライトの座標空間内のポイントを指定します。
現実の世界では、光を放出するすべてのオブジェクトは目に見えます。つまり、光を放出するオブジェクトには領域があり、その領域から光を放出します。FG を使用する場合、mental ray は、シーンに光エネルギーを追加するサーフェスをまるで光源のように扱います。しかし、可能な限り最高精度の結果を得るためには、FG を非常に高く設定する必要があります。ただし、レンダリング時間は長くなります。
コンピュータ グラフィックスの光源は、ポイント ライトまたはエリア ライトのいずれかです。エリアライト自体はレンダリングに表示される場合と表示されない場合があります。たいていは、単に実際の光源を使用する方がより効率的です。
FG を放出、FG を非放出、ポイント ライトを使用
上のイメージでは、チェック模様の床上に、mia_light_surface を使用している 3 つのパッチがあります。左のパッチは、fg_contrib が 1.0 に設定され(そのため、床を照らしています)、他の 2 つのパッチは、 0.0 に設定されています。ただし、右のパッチの背後にはポイント ライトが隠れています。
近距離では(または屋外の空全体のような非常に大きな光源がある場合)、FG はオブジェクトを非常に高精度で照らします。長距離では(または光源が小さい場合)、明示的な光源を使用した方がより効果的です。
mia_light_surface は、fg_contrib および refl_contrib パラメータを介してオブジェクトを反射光線または FG レイに対して "可視" に(およびその割合を)設定する必要がある場合に、個別のコントロールを提供します。下のイメージでは、わずかに反射するチェック模様の床を使用してこれを表しています。これらのパッチの背後では光源は使用されていません。
FG および反射に対する可視性
左のパッチは、FG(床を照らします)と反射(床に反射します)の両方に対して可視です。中央のパッチは床を照らさず(fg_contrib はゼロ)、右のパッチは床に反射しません(refl_contrib はゼロ)。
光源
シェーダの機能とパラメータ
declare shader "mia_light_surface" (
color "color" default 1 1 1,
scalar "intensity" default 1.0,
scalar "fg_contrib" default 0.0,
scalar "refl_contrib" default 0.0,
boolean "use_lights",
scalar "lights_multiplier" default 1.0,
vector "lights_eval_point" default 0.0 0.0 0.0,
array light "lights"
)
使用例
一般的なイルミネーション