先日のオーラの記事で少し触れたDeepをレンダリングして、コンポジット時にマットアウトする方法
シーンファイルはこちら
Mantraの設定
MantraノードのImages -> Deep Outputに設定がある。ここのDeep ResolverをDeep Shadow Mapに変更することでDeep Imageが書き出せる。
しかし、これだけでは設定項目が不十分で何故かクオリティ周りの設定が隠されているので表示する必要がある。
設定したいManrtraノードからEdit Parameter Interface、Render Propertiesのタブで、「DSM」を検索
そうすると隠れていたクオリティ関連の設定がでてくるので、これを追加する。
ただし出てくる項目すべてが必要なわけではないので、最低限の部分のみ説明。その他はヘルプを見てください。
- DSM Filename
この部分がDeep Imageのファイル名になる。
Deepのレンダリングのみを行うことは基本的にできず、通常のレンダリングをする際にこの部分で指定したパス(ファイル名)にDeep Imageを追加でレンダリングするという仕組みになっている。
- DSM Compression
半透明部分に対して、Deepの値をどの程度圧縮するか。上げると半透明部分のサンプルが減って前後が正しく成立しづらくなるという感じ。
煙等であれば5が限界なきがする。
- DSM Of Size
Full ColorとMonochromeが選べる。デフォルトのFull Colorにすると、半透明部分の値がRGBで保存される。
Full Colorのほうが精度は上がるようだが、ファイルサイズも増え、Nukeに読み込んでプレビューするとおもすぎてクラッシュすることもあるため、Monochromeを推奨。VrayはデフォルトがMonochromeだった気がする。
- DSM Of Storage
半透明の浮動小数点数の精度の設定。16bit Floatで問題を感じたことはない。詳しくは検索すればでる。
- DSM Z Storage
depthの浮動小数点数の精度の設定。細かいパーティクルを飛ばした際などに16bit Floatにした場合に前後がおかしくなったことがある。
32bit Float以上が良さそう。
- DSM Z Bias
この値を閾値として、奥行き情報を結合し、ファイルサイズを減らす。結合された部分は平均値で保存される。
上げると奥行きが不正確になる代わりにファイルサイズを減らすことができる。ただしモデルなどのメッシュはそもそも見えている面しか保存しないためこれの効果は薄い。
とりあえずデフォのままでも良い気はする。
Nukeの設定
通常の画像にDeepを付与する
DeepRecolorノードへ画像のように接続し、レンダリング画像をDeep Imageに変換する。
この状態ではDeep系ノード以外は接続することができなくなる。
AOVsを含んでいて、かつ必要な場合はDeep Recolorノードのchannnelsを適切に設定する。
target input alphaは、チェックするとAlphaがレンダリング画像と一致するように処理してくれる。基本はチェックで良いが、前後がともに半透明の場合はオフにしないと反騰名が重なっている場合に透けて見えてしまい、前後が怪しくなることがある。
Deep同士でマットアウト(Holdout)する
DeepMergeのoperationをholdoutにし、Bにマットアウトされるもの、Aにマットアウトするものを接続。
DeepHoldoutノードもあるが、精度が低く前後がおかしくなることがあるのでDeepMergeのHoldoutモードのほうがおすすめ。
通常の画像へ戻す
DeepToImageノードを接続し、Deep Imageから通常の2D Imageへ戻す。
この処理後であればDeepではない通常のGradeノードなどが使用できるようになる。
レンダラーやUnit Sizeが違う場合
DCCやレンダラーが違うことによって1Unitのサイズが異なる場合はDeepに対してDeep Transformノードを使用し、zscaleを調整してあげる必要がある。
画像の例は、Mantraが1Unit=1mで、キャラクターがMayaから出して1Unit=1cmのシーンからレンダリングされた想定。
基本的にはMantra側が他DCC似合わせてあげるほうが良いと思う。
Deepはcmやmなどの単位で保存しているわけではなく、あくまでもレンダリング時のカメラからのUnitの距離で保存していることに注意。
Deepの精度の確認
Deep Sampleノードを使用すると、画像のように各ピクセルに何個の奥行き情報があるか、等が見れる。レンダリング設定を詰めたい場合などに。
DeepをPoint Cloudに変換
DeepToPointsノードでPoint Cloudに変換することができる。前後の確認やNuke上でPoint Cloudを使用した処理をしたい場合に。
使用時はカメラが必要なので、レンダリングに使用したカメラを読み込むこと。