すあまの備忘録

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

Mantraレンダリング周りメモ vol.9 :Cryptomatte

HoudiniのMantraからCryptomatteをレンダーし、Nukeで使う手順。

Cryptomatteは、モーションブラーやデフォーカスがはいっていても綺麗にマスクが取れるためとても使い勝手が良い。

ただし、屈折や反射の部分は当然ながら取れないため注意が必要。

cryptomatte.zip - Google ドライブ

NukeにCryptomatteを入れる

Gizmoなので、プラグインに制限が入っているnon-Commercial版でも使用可能です。

ここからダウンロード

以下手順で配置

Cryptomatte/nuke.md at master · Psyop/Cryptomatte · GitHub

うまく行くとツールバーにアイコンが表示され、Cryptomatteノードが使えるようになります。

f:id:godofsuama:20200922154732p:plain

Mantraの設定

MantraノードのImages -> Cryptomatteに設定がある。

必要な数Cryptomatte Layerを増やし設定する。

f:id:godofsuama:20200922181654p:plain

Property

ここが何によってCryptomatteのIDを作成するか、

デフォルト用意されている、materialnameとnameは、それぞれマテリアルパスとオブジェクトパスが入るように設定されています。

Channel Name

Nuke等で読み込んだ際のChannel名

f:id:godofsuama:20200922182109p:plain

Propertyを変更してもここの部分は変わらないので、わかりやすい名称をいれる。

Channel Nameがかぶった場合は、2個めから接尾に_aなどがつきます。

Overlap Limit

ピクセルに格納可能なIDの数。6が推奨らしいです。

Different File

個別に保存する場合のファイル名とファイルパス。

それぞれかぶらないファイルにする必要があります。

これを使うよりは、ライトなしの複製したCryptomatteレンダリング用のMantraを別途用意のほうがわかりやすいかなと思う。

Manifest File

マニフェストファイルと呼ばれる、CryptomatteのIDがどれに該当するかを記録したデータを外部に書き出す。らしい。

使ったことはない。

www.sidefx.com

RBD各ピースのCryptomatte

f:id:godofsuama:20200926014401p:plain

f:id:godofsuama:20200926014424p:plain

Copy to Pointsしたものや、inside/outside別でのオブジェクトや、マテリアルをCryptomatteで取得できる。

ただしこの方法は必ず1回はPackしなければいけない。

通常であればifd書き出しのためにPackd Disk Primitiveにすると思うので問題はないはず。

例として、簡単に以下のように組んだノードとMantraの設定は済ませているとする。

Mantra

f:id:godofsuama:20200926015008p:plain

Mantraはデフォルトで用意されているもののみを使用

RBDネットワーク

f:id:godofsuama:20200926014637p:plain

set_name_insideとset_name_outsideでinsideとoutsideのnameを変更し、Materialはinsideとoutsideのグループで別のものを割り当てる。

その後、File CacheのLoad form FileでPacked Disk Primitive状態でロードしている。

f:id:godofsuama:20200926014832p:plain

Material Style Sheets

f:id:godofsuama:20200926015201p:plain

Material Style Sheetsを図の設定にすることで、レンダリング時にオブジェクト名とマテリアル名をPackから取得したもので上書きする。

MaterialをSOP上でアサインしていない場合はshop_materialpathの部分はいらない。

注意点

f:id:godofsuama:20200926021047p:plain

f:id:godofsuama:20200926021720p:plain

シーン内にMaterial Style SheetsなしでもCryptomatteが出せるものと出せないものが混在している場合には、各ジオメトリごとにMaterial Style Sheetsの設定を行わないと結果がおかしくなってしまう。

その場合は下図のように設定する。

f:id:godofsuama:20200926021237p:plain

この例では

  • rbd:SOP上のnameからオブジェクト名、マテリアル名を取得
  • sphere1:SOP上のnameからオブジェクト名を取得し、obj階層でマテリアルをアサイ
  • その他:obj階層名とobj階層でマテリアルをアサイ

Nukeの設定

今回は、いわゆるBeautyと、Cryptomatteを別素材として書き出している。

CryptomatteのMantraはライトをなしにしてCryptomatteの設定をしたもの。

f:id:godofsuama:20200922183127p:plain

注意しなければいけない点は、Cryptomatteの素材はRAWで読み込む必要があるということ。

NukeのWorking Spaceと、Mantraからのレンダー画像が同じカラースペースの場合は変更する必要はない。

今回はどちらも同じカラースペースなので変更する必要はないが、わかりやすくするためにRAWになおしている。

Cryptomatteでマットを作る

f:id:godofsuama:20200922183612p:plain

画像の下に「Cryptomatte」ノードを作成する。

f:id:godofsuama:20200922183719p:plain

Layer Selectionから、マット作成の基準となるIDが格納されたレイヤーを選択する。(Objectでマットを作りたければObjectでIDを作成したレイヤー)

Picker Addをクリックし、ViewerのほしいID部分でCtrl + クリック(複数選択も可能)

そうするとKeyer Expressionや Matte Listに選択したものの名前などが入る。

除外する場合はPicker Removeに変更してCtrl + クリックする。

f:id:godofsuama:20200922184507p:plain

Alpha表示にするとちゃんとマットができている。

f:id:godofsuama:20200922184334p:plain

maskとして使う場合

以下のようにGradeノードなどのmaskインプットで使いたい場合

f:id:godofsuama:20200922184712p:plain

フチが出てくるのでUnpremultする必要がある。

f:id:godofsuama:20200922184746p:plain

その場合は、CryptomatteのUnpremultiplyのチェックをオンにする。

f:id:godofsuama:20200922184902p:plain

Expressionにする

Cryptomatteノードでマットを作った状態で、ツールバーのアイコンからDecryptomatte Selectionを選択するとExpressionでマットを作った状態になる。

実践で使ったことはないがこちらのほうが軽かったりする?

f:id:godofsuama:20200922185400p:plain

f:id:godofsuama:20200922185423p:plain

f:id:godofsuama:20200922185443p:plain