HoudiniのMantraからCryptomatteをレンダーし、Nukeで使う手順。
Cryptomatteは、モーションブラーやデフォーカスがはいっていても綺麗にマスクが取れるためとても使い勝手が良い。
ただし、屈折や反射の部分は当然ながら取れないため注意が必要。
NukeにCryptomatteを入れる
Gizmoなので、プラグインに制限が入っているnon-Commercial版でも使用可能です。
以下手順で配置
Cryptomatte/nuke.md at master · Psyop/Cryptomatte · GitHub
うまく行くとツールバーにアイコンが表示され、Cryptomatteノードが使えるようになります。
Mantraの設定
MantraノードのImages -> Cryptomatteに設定がある。
必要な数Cryptomatte Layerを増やし設定する。
Property
ここが何によってCryptomatteのIDを作成するか、
デフォルト用意されている、materialnameとnameは、それぞれマテリアルパスとオブジェクトパスが入るように設定されています。
Channel Name
Nuke等で読み込んだ際のChannel名
Propertyを変更してもここの部分は変わらないので、わかりやすい名称をいれる。
Channel Nameがかぶった場合は、2個めから接尾に_aなどがつきます。
Overlap Limit
各ピクセルに格納可能なIDの数。6が推奨らしいです。
Different File
個別に保存する場合のファイル名とファイルパス。
それぞれかぶらないファイルにする必要があります。
これを使うよりは、ライトなしの複製したCryptomatteレンダリング用のMantraを別途用意のほうがわかりやすいかなと思う。
Manifest File
マニフェストファイルと呼ばれる、CryptomatteのIDがどれに該当するかを記録したデータを外部に書き出す。らしい。
使ったことはない。
RBD各ピースのCryptomatte
Copy to Pointsしたものや、inside/outside別でのオブジェクトや、マテリアルをCryptomatteで取得できる。
ただしこの方法は必ず1回はPackしなければいけない。
通常であればifd書き出しのためにPackd Disk Primitiveにすると思うので問題はないはず。
例として、簡単に以下のように組んだノードとMantraの設定は済ませているとする。
Mantra
Mantraはデフォルトで用意されているもののみを使用
RBDネットワーク
set_name_insideとset_name_outsideでinsideとoutsideのnameを変更し、Materialはinsideとoutsideのグループで別のものを割り当てる。
その後、File CacheのLoad form FileでPacked Disk Primitive状態でロードしている。
Material Style Sheets
Material Style Sheetsを図の設定にすることで、レンダリング時にオブジェクト名とマテリアル名をPackから取得したもので上書きする。
MaterialをSOP上でアサインしていない場合はshop_materialpath
の部分はいらない。
注意点
シーン内にMaterial Style SheetsなしでもCryptomatteが出せるものと出せないものが混在している場合には、各ジオメトリごとにMaterial Style Sheetsの設定を行わないと結果がおかしくなってしまう。
その場合は下図のように設定する。
この例では
- rbd:SOP上のnameからオブジェクト名、マテリアル名を取得
- sphere1:SOP上のnameからオブジェクト名を取得し、obj階層でマテリアルをアサイン
- その他:obj階層名とobj階層でマテリアルをアサイン
Nukeの設定
今回は、いわゆるBeautyと、Cryptomatteを別素材として書き出している。
CryptomatteのMantraはライトをなしにしてCryptomatteの設定をしたもの。
注意しなければいけない点は、Cryptomatteの素材はRAWで読み込む必要があるということ。
NukeのWorking Spaceと、Mantraからのレンダー画像が同じカラースペースの場合は変更する必要はない。
今回はどちらも同じカラースペースなので変更する必要はないが、わかりやすくするためにRAWになおしている。
Cryptomatteでマットを作る
画像の下に「Cryptomatte」ノードを作成する。
Layer Selectionから、マット作成の基準となるIDが格納されたレイヤーを選択する。(Objectでマットを作りたければObjectでIDを作成したレイヤー)
Picker Addをクリックし、ViewerのほしいID部分でCtrl + クリック
(複数選択も可能)
そうするとKeyer Expressionや Matte Listに選択したものの名前などが入る。
除外する場合はPicker Removeに変更してCtrl + クリック
する。
Alpha表示にするとちゃんとマットができている。
maskとして使う場合
以下のようにGradeノードなどのmaskインプットで使いたい場合
フチが出てくるのでUnpremultする必要がある。
その場合は、CryptomatteのUnpremultiplyのチェックをオンにする。
Expressionにする
Cryptomatteノードでマットを作った状態で、ツールバーのアイコンからDecryptomatte Selectionを選択するとExpressionでマットを作った状態になる。
実践で使ったことはないがこちらのほうが軽かったりする?