すあまの備忘録

誰得内容の自分のための非営利目的備忘録ブログ(筆者がわかっても内緒にしてください)

Mantraレンダリング周りメモ vol.8 :Deep Image

先日のオーラの記事で少し触れたDeepをレンダリングして、コンポジット時にマットアウトする方法

シーンファイルはこちら

godofsuama.hatenablog.com

Mantraの設定

MantraノードのImages -> Deep Outputに設定がある。ここのDeep ResolverをDeep Shadow Mapに変更することでDeep Imageが書き出せる。

f:id:godofsuama:20200831180037p:plain

しかし、これだけでは設定項目が不十分で何故かクオリティ周りの設定が隠されているので表示する必要がある。

設定したいManrtraノードからEdit Parameter Interface、Render Propertiesのタブで、「DSM」を検索

f:id:godofsuama:20200831180600p:plain

そうすると隠れていたクオリティ関連の設定がでてくるので、これを追加する。

ただし出てくる項目すべてが必要なわけではないので、最低限の部分のみ説明。その他はヘルプを見てください。

f:id:godofsuama:20200831180711p:plain
全部追加すると画像のような状態

この部分がDeep Imageのファイル名になる。

Deepのレンダリングのみを行うことは基本的にできず、通常のレンダリングをする際にこの部分で指定したパス(ファイル名)にDeep Imageを追加でレンダリングするという仕組みになっている。

  • DSM Compression

半透明部分に対して、Deepの値をどの程度圧縮するか。上げると半透明部分のサンプルが減って前後が正しく成立しづらくなるという感じ。

煙等であれば5が限界なきがする。

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以上が良さそう。

この値を閾値として、奥行き情報を結合し、ファイルサイズを減らす。結合された部分は平均値で保存される。

上げると奥行きが不正確になる代わりにファイルサイズを減らすことができる。ただしモデルなどのメッシュはそもそも見えている面しか保存しないためこれの効果は薄い。

とりあえずデフォのままでも良い気はする。

Nukeの設定

f:id:godofsuama:20200831183353p:plain
この設定でレンダリング

通常の画像にDeepを付与する

f:id:godofsuama:20200831183509p:plain f:id:godofsuama:20200831183716p:plain

DeepRecolorノードへ画像のように接続し、レンダリング画像をDeep Imageに変換する。

この状態ではDeep系ノード以外は接続することができなくなる。

AOVsを含んでいて、かつ必要な場合はDeep Recolorノードのchannnelsを適切に設定する。

target input alphaは、チェックするとAlphaがレンダリング画像と一致するように処理してくれる。基本はチェックで良いが、前後がともに半透明の場合はオフにしないと反騰名が重なっている場合に透けて見えてしまい、前後が怪しくなることがある。

Deep同士でマットアウト(Holdout)する

f:id:godofsuama:20200831184015p:plain f:id:godofsuama:20200831184144p:plain

DeepMergeのoperationをholdoutにし、Bにマットアウトされるもの、Aにマットアウトするものを接続。

DeepHoldoutノードもあるが、精度が低く前後がおかしくなることがあるのでDeepMergeのHoldoutモードのほうがおすすめ。

通常の画像へ戻す

f:id:godofsuama:20200831184321p:plain

DeepToImageノードを接続し、Deep Imageから通常の2D Imageへ戻す。

この処理後であればDeepではない通常のGradeノードなどが使用できるようになる。

レンダラーやUnit Sizeが違う場合

f:id:godofsuama:20200831184557p:plain f:id:godofsuama:20200831184635p:plain

DCCやレンダラーが違うことによって1Unitのサイズが異なる場合はDeepに対してDeep Transformノードを使用し、zscaleを調整してあげる必要がある。

画像の例は、Mantraが1Unit=1mで、キャラクターがMayaから出して1Unit=1cmのシーンからレンダリングされた想定。

基本的にはMantra側が他DCC似合わせてあげるほうが良いと思う。

Deepはcmやmなどの単位で保存しているわけではなく、あくまでもレンダリング時のカメラからのUnitの距離で保存していることに注意。

Deepの精度の確認

Deep Sampleノードを使用すると、画像のように各ピクセルに何個の奥行き情報があるか、等が見れる。レンダリング設定を詰めたい場合などに。

f:id:godofsuama:20200831185206p:plain

DeepをPoint Cloudに変換

DeepToPointsノードでPoint Cloudに変換することができる。前後の確認やNuke上でPoint Cloudを使用した処理をしたい場合に。

使用時はカメラが必要なので、レンダリングに使用したカメラを読み込むこと。

f:id:godofsuama:20200831185356p:plain f:id:godofsuama:20200831185454p:plain