On this page |
概要 ¶
ディープカメラマップ(Deep Camera Map)とは、カメラとそこから一番近い不透明なサーフェス間の半透明な領域(ボリュームなど)を深度情報付きで保存したレンダリング画像のことです。その画像内の各ピクセルは、シーンの奥行きに沿った透明度の変化のレベルをカーブとして表現しています。これによって、レンダリング画像を合成する際に、半透明な領域が正しく深度に基づいてブレンドすることができます。
ディープカメラは、オブジェクトを横切った非常に透明度の高いオブジェクト(スプライトの集まりと雲などのボリューム)に対して役に立ちます。そのようなオブジェクトはDCMとして別々にレンダリングするべきです。DCMは透明なオブジェクトをそれと作用するオブジェクトとは別にレンダリングすることができるので、より柔軟にコンポジット処理をすることができます。
ディープカメラマップの主な欠点は、ピクセル毎に保存する情報量が大きいので ディスク容量を圧迫する ことです。2K(2048×1080)のDCMフレームは通常で1~2 GB のディスク容量を必要とします。通常の1ショットに掛かるスペースの予算は1 TB ほどです。他の欠点は、コンポジットに追加するので、DCM内のオブジェクトはシャドウを受けることができません。
Houdiniは.rat
または.exr
のテクスチャファイルフォーマットへのDMCの保存のみをサポートしています。同じ画像にディープカメラマップ(ピクセルあたりの深度情報)とディープラスター(追加画像平面)を含めることができます。
How to ¶
ディープカメラマップをレンダリングするには、2つのレンダリングプロパティをレンダードライバノードに追加しなければなりません。
To... | Do this |
---|---|
レンダードライバノードをセットアップしてDCMとしてレンダリングする |
レンダリングすると、Mantraは出力画像に 加えて 、DCMを書き出します。 |
精度とファイルサイズの妥協点をカスタマイズする |
いくつかのプロパティでは、DCMファイルサイズを小さくするために深度合成精度を下げることができます。DCM内のオブジェクトが細かくない、またはニアとファーのクリップ平面間の距離が小さい場合、深度合成精度はあまり重要ではないので、それらのプロパティが非常に役に立ちます。
|
2つのレンダリングしたDCMを合成する |
|
DCMファイルを平坦な画像に変換する |
DSM Flattenコンポジットノードを使います。 |
シェーダでディープマップを使用する方法 ¶
VOPの場合は、Shadow Map VOPを参照してください。
VEXの場合は、teximport、dsmpixelの関数を使用することで、ディープマップからディープピクセル情報にアクセスすることができます:
cvex dsminfo(string map="foo.rat") { string names[], name; float Pz[]; vector Of[]; vector res; int x, y; if (teximport(map, "texture:resolution", res)) printf("%s resolution: %g\n", map, res); teximport(map, "texture:channelnames", names); printf("%d channels:\n", arraylength(names)); foreach (name; names) printf("\t'%s'\n", name); x = res[0] * .5; y = res[1] * .5; if (dsmpixel(map, "Pz", x, y, Pz) && dsmpixel(map, "Of", x, y, Of)) { int i, n; n = arraylength(Pz); printf("Depth complexity[%d,%d] = %d\n", x, y, n); for (i = 0; i < n; i++) printf("\tZ=%g, Of=%g\n", Pz[i], Of[i]); } }