ユーティリティ シェーダ
ユーティリティ シェーダ
ガンマ/ゲイン ノード
declare shader "mip_gamma_gain" (
color "input",
scalar "gamma" default 1.0,
scalar "gain" default 1.0,
boolean "reverse" default off,
)
apply texture, environment, lens
version 1
end declare
これは、カラーの場合にガンマおよびゲイン(乗算)を適用する単純なシェーダです。mental ray のさまざまな OEM 統合で同様のシェーダは数多く存在するため、このシェーダは、スタンドアロンの mental ray およびクロス プラットフォームのフェノメナ開発を主な対象としています。
reverse がオフ の場合、シェーダは input を取り込み、それを gain で乗算してからガンマ補正の gamma をカラーに適用します。
reverse がオン の場合、シェーダは input を取り込み、反転ガンマ補正の gamma をカラーに適用してから、それを gain で除算します。つまり、reverse がオフの場合と正反対の操作です。
シェーダは、input を使用しない場合、単純なガンマ レンズ シェーダとしても使用されることがあり、視点からのレイのカラーが代わりに使用されます。
シーンのレンダー サブセット
このシェーダを使用して、マテリアル、ジオメトリック オブジェクト、またはインスタンス ラベルで定義された、シーンのオブジェクトのサブセットを再レンダリングできます。シーンのほとんどすべてが完成していて、オブジェクト 1 つ、マテリアル 1 つだけに微調整が必要になった場合、これは理想的な "クイック修正" ソリューションです1 。
これは、レンズ シェーダとして適用され、視点からのレイがどのオブジェクトにヒットするか最初にテストする時に動作します。さらに、{オブジェクトが希望のサブセットの一部である場合に限り、いずれにしろ実際にシェーディングされます}。
バックグラウンドなどのオブジェクトのピクセルは、既定で透明の黒(0 0 0 0)を返し、オリジナルのレンダー上に直接合成する理想的な最終レンダー イメージを作成します。
たとえば、シーンのあるマテリアルが満足できる結果にならなかった場合、次の処理を簡単に実行できます。
マテリアルを修正する。
このレンズ シェーダを適用し、そのマテリアルを選択する。
イメージをレンダリングする(イメージ全体を再レンダリングする時間に対してわずかな時間で)。
オリジナルのレンダー上に結果を合成する。
1 つのマテリアルで
mip_render_subset を使用した例
当然、マテリアルを "直接" 表示するピクセルのみが再レンダリングされ、たとえば、そのマテリアルを表示するその他の オブジェクトの反射はレンダリングされません。
シェーダは、レイ トレーシングで使用される呼び出し順に依存し、ラスタライザを使用する場合は正しく機能しません(レンダー時間の利点もありません )。サーフェスをシェーディングした後 、ラスタライザがレンズ シェーダを呼び出すためです。
declare shader "mip_render_subset" (
boolean "enabled" default on,
array geometry "objects",
array integer "instance_label",
material "material",
boolean "mask_only" default off,
color "mask_color" default 1 1 1 1,
color "background" default 0 0 0 0,
color "other_objects" default 0 0 0 0,
boolean "full_screen_fg" default on
)
apply lens
version 5
end declare
enabled はシェーダのオンとオフを切り替えます。オフの場合、何も実行されず、レンダリングに何の影響もありません。
objects 、instance_label および material は、シェーディングするオブジェクトのサブセットの検索に適用できるコンストレイントです。コンストレイントが 2 つ以上存在する場合、そのすべてを満たす必要があります。つまり、1 つのマテリアルと 3 つのオブジェクトの両方を選択した場合は、実際にそのマテリアルを持つオブジェクトのみがシェーディングされます。
サブセットのシェーディングを必要とせず、スクリーンのどこに存在するかを検索するだけの場合は、mask_only をオンにできます。サブセット内のオブジェクトをシェーディングする代わりに、mask_color が返され、どのようなシェーディングも実行しないため、非常に高速 です。
オブジェクトを何もヒットしないレイは background カラーを返し、サブセット内にはない オブジェクトをヒットするレイは other_objects カラーを返します。
最後に、full_screen_fg で、FG の前処理がすべてのオブジェクトに適用されるか、サブセット内のオブジェクトのみに適用されるか判断します。FG は隣接する FG サンプルをブレンドするため、特定のオブジェクトがサブセット内ではなく、近くのオブジェクトから取得した FG ポイントの情報を使用する可能性があります。これは、オブジェクトが共面である場合、特に当てはまります。したがって、FG の事前パスにシーン全体を "見せる" ことをお勧めします。
当然、このオプションをオフにしてオブジェクトのサブセットのみに対して FG ポイントを作成する方が速く なりますが、境界のアーティファクト、特にアニメーションには一定のリスクがあります。保存された FG マップをシーンで使用する場合は、このオプションをオフ のままにできます。
バイナリ プロキシ
このシェーダを使用すると、デマンド ロードされたジオメトリを実装する非常に速い方法を実現できます。その主な目標はパフォーマンスです。レンダー時に RAM に直接取り込まれるバイナリ ファイル形式に直接書き込むことで、どのような変換や解析も避けるからです。mental ray には、デマンド ロードを実行する他の方法も数多くあります(アセンブリ、ファイル オブジェクト、ジオメトリ シェーダなど)。ただし、これには、ホスト アプリケーションでの特定のサポートが必要です。通常、パフォーマンスに影響する可能性のある解析や変換の手順を伴います。
これを使用するには、シーンでシェーダをジオメトリ シェーダとして適用します。ジオメトリ シェーダについては、mental ray のマニュアルを参照してください。
declare shader
geometry "mip_binaryproxy" (
string "object_filename",
boolean "write_geometry",
geometry "geometry",
scalar "meter_scale",
integer "flags"
)
version 4
apply geometry
end declare
object_filename は、読み込む(または書き込む)ファイル名です。表記法により、"mental images バイナリ" のファイル拡張子は ".mib" です。
シェーダには、"読み込み" モードと "書き込み" モードがあります。
ブール型 write_geometry がオンで、geometry パラメータが既存のシーン オブジェクトのインスタンスを指している場合、このオブジェクトは、object_filename で指定された .mib ファイルに書き込まれます。
write_geometry がオフの場合、geometry パラメータは無視されます(使用されません)。代わりに、mental ray のプレースホルダ オブジェクトは、オンデマンドで実際のジオメトリをファイルからロードするコールバックを含むシェーダによって作成されます(mental ray で他の理由によりロードを選択する場合もありますが、レイがヒットすると、通常それはバウンディング ボックスです)。
meter_scale により、単位に依存しない方法で、オブジェクトを解釈できます。これが 0.0 の場合、フィーチャーは使用されません。値を使用する場合は、1 メートルを表すシーン単位の数でなければなりません。つまり、シーン単位がミリメートルの場合、これは 1000.0 などとなります。
書き込み時(write_geometry がオン)に、この値はメタ データとして .mib ファイルに単に保存されます。読み込み時(write_geometry がオフ)に、ファイルに保存されている値と "読み込み時" に渡された値の比率でオブジェクトがスケールされ、必要に応じて、単位の違いを計算します。
flags パラメータは、アルゴリズム制御用のパラメータであり、ほとんどの場合、0 のままにします。これは、各ビットが特定の意味を持つビット フラグです。
現在使用している値は次のとおりです。
[1] "プレースホルダ" ではなく "アセンブリ" の使用を強制します。mental ray がデマンド ロード オブジェクトに対して使用する、わずかに異なる内部技法が 2 つあります。詳細については、mental ray のマニュアルを参照してください。アセンブリのみが BSP2 アクセラレーションと連動し、同一アセンブリの複数のインスタンスには、異なるマテリアルまたはオブジェクトのフラグを適用できない点に注意してください。プレースホルダに対して、この制限はありません。
[2] "自動アセンブリ" モード。BSP2 アクセラレーションが使用されている場合、シェーダはアセンブリを使用し、使用されていない場合はプレースホルダを使用します。
[4] オブジェクトを書き込む前にテッセレーションしないでください。オブジェクトは未処理の形式で書き込まれます。オブジェクトは既に、これを動作させる mental ray の primlist (miBox)でなければなりません。このビットを設定すると、ディスプレイスメントがファイルにベイク処理されます。設定されていない場合(既定)、ディスプレイスメントがベイク処理されます2 。
他のすべてのビットはゼロのままにしておきます。今後のバージョンで使用する場合があります。
FG シュータ
このシェーダは、決まった方法でシーンに目掛けてファイナルギャザー(FG)レイを「シュート」するために使用します。FG ポイントが特定の位置に強制配置されます。
通常は、このシェーダを使用せずに、mental ray のファイナルギャザーを再計算する段階で、視線がカメラを通ってシーン内に投入されます。そして FG ポイントは、レンダー カメラの現在のビューに合わせてシーン内に配置されます。1 つの利点は、FG ポイントの密度はイメージ スペースに相関性があり、対象の可視領域に自動的にアダプティブになります。
ただし、カメラのアニメーションでは、FG ポイントの位置が実際にはカメラとともに移動します。このため、特定の状況でアーティファクトが生じる可能性があります。特に、カメラがゆっくり 移動する場合や、移動量が少ない場合(例: 小さいパン、ティルト、トラック、クレーンの移動)などです。
このような起こりえる状態に備え、「FG シュータ」というシェーダが存在します。これにより、1 つまたは複数の固定の変換マトリックスをルートの位置として使用し、ファイナルギャザー再計算の段階でのみ 視点からのレイをその位置から「シュート」することができます。これにより、実際のレンダー カメラが移動した場合でも、指定のマトリクスで決められたとおりに FG ポイントの位置が確実に維持されます。
declare shader "mip_fgshooter" (
integer "mode",
array transform "trans"
)
version 1
apply lens
end declare
trans パラメータには、変換マトリックスの配列が含まれ、ファイナル ギャザーの事前パス中に視点からのレイを照射する方法を定義します。"視点からの" レイの計算にカメラを使用する代わりに、0,0,0 点から照射され、点 0,0,-1 の周囲の単位正方形にシーン平面をマッピングしてから、渡された行列(またはマトリックス)によってワールド空間に変換されます。
mode パラメータは、ファイナル ギャザーの事前パス中に渡された行列(またはマトリックス)を表示する方法を定義します。この表示 方法は、適応性に影響するため、機能上の影響があります。
0 は、レンダーを "サブフレーム´´ に分割し、各サブフレームには特定の位置から表示されるイメージが含まれます。これには、同じ数のディテールを解決するのに、より高いファイナル ギャザー密度 が要求されます。
1 は、互いの上に異なる結果をスタックします。これにより、さらに密度を要求されることはありませんが、ファイナル ギャザーの適応性も機能しません。
2 は 1 と同じように機能しますが、1 つのパスを視覚的に表示するだけです(ただし、その他はすべてまったく同じに計算されます)。
脚注1
さらにクライアントは途中の段階にあります。 2
ディスプレイスメントのベーク処理時は、表示に従属した近似を使用できないことに注意してください。これは、このシェーダの実行時に表示設定が存在しないためです。このため、結果のテッセレーションの品質が非常に下がります。