modoでCryptomatteをレンダリングする方法について書いてみます。modo 14.2でmPathがCryptomatteに対応しました。Cryptomatteを使用するとAfter Effectsでマテリアル単位のマスク作成が簡単にできるようになります。
■ サンプルファイル(xlo)
■ サンプルファイル(exr)
Cryptomatte とは
Cryptomatteは映像スタジオの「Psyops」がSIGGRAPH 2015で発表したオープン標準のIDマット技術です。モーションブラー、透明度、被写界深度をサポートしたマットを自動的に作成できます。DeepDataに比べてはるかに高速で軽量というのが特長です。
CGは3Dソフトでレンダリングした様々な画像を、AfterEffectsやNukeのようなコンポジットソフトで合成して最終的な映像にするのが一般的です。コンポジット段階ではオブジェクトやマテリアル単位で色を調整したい場合があります。
画像の中のオブジェクトやマテリアルで色を調整したい場合、昔からある方法だと白黒のマット(マスクやアルファと呼ぶこともある)をレンダリングして画像を編集します。しかし、オブジェクトやマテリアル数が100や1000を超えるシーンだと、マットを作成するのも手間がかかります。
Cryptomatteを使用すると、事前にオブジェクトやマテリアルにマット用のIDを設定する必要がなく、自動的にIDを持ったマットを作成できるのが便利です。また、独自形式の画像ファイルフォーマットではなく、オープン標準の「OpenEXR」を使用しているのも特長です。
同じような物だと RLAファイルやRPFファイルがあります。
Cryptomatteのレンダリング方法
modoでCryptomatteを使用するには、いくつかのルールがあります。
- レンダラーに「mPath」を使用する
- シェーダーツリーに「Cryptomatte Output」 を追加する
- レンダリングに「アニメーションをレンダー」を使用する
1. レンダラーに「mPath」を使用する
Render アイテムでレンダラーを「mPath」を設定する必要があります。
2. シェーダーツリーに「Cryptomatte Output」 を追加する
シェーダーツリーに「Cryptomatte Output」を追加します。
クリプトマットのメニューには「Cryptomatte ID Output」や「Cryptomatte Coverage Output」もありますが、追加する必要はありません。「Cryptomatte ID Output」「Cryptomatte Coverage Output」はレンダリング時に自動的に使用されます。
3. レンダリングに「アニメーションをレンダー」を使用する
Cryptomatte をレンダリングするには「アニメーションをレンダー」を使用する必要があります。
保存形式に「レイヤー画像」を使用すると、複数の「レンダー出力」を1つのexrファイルにまとめて保存できます。
「画像シーケンスの保存」ダイアログで、ファイルの種類を「レイヤーOpenEXR ハーフ 16ビット」または「レイヤーOpenEXR 浮動小数点 32ビット」を選択して「保存」します。レンダリングが実行されてexrファイルが出力されます。
Cryptomatteレンダリングの注意点
modoのCryptomatteやEXRには、レンダリングに関する謎な挙動があります。謎にはまると時間が溶けるので注意点を書いておきます。
Cryptomatteの制限
Cryptomatteはオブジェクトマットとマテリアルマットの2種類レンダリングできるレンダラーがあります。modoではマテリアルマットのみをサポートしています。また、modoは恐らくマテリアルの「透明度」に対応していません。
Cryptomatteの「透明度」はaiStandardSurfaceでいう所のGeometryのOpacityのことです。Transmission(屈折)ではないです。下の画像はArnoldのOpacityを使用したものです。
LPEラベル
同じ質感のマテリアルだけど、テクスチャを使用する等の理由でマテリアルが別になっている場合があります。「LPEラベル」を使用すると、異なるマテリアルを1つのマットにできて便利です。
シェーディングエンジン「NVIDIA CUDA (GPU)」は使用不可
modo 16.1v7の段階では、シェーディングエンジンの「NVIDIA CUDA (GPU)」は使用できません。「NVIDIA CUDA (GPU)」を使用すると空のCryptomatteを出力します。
EXR ハーフ 16ビットを使用するとCryptomatteが別になる
modoはファイルの種類が16ビットと32ビットの時で、ファイルの出力構成が違います。
保存形式が「レイヤー画像」の場合、通常は全ての「レンダー出力」が1つのファイルに格納されるのが正しい動作ですが、16ビットでCryptomatteを使用した場合は別ファイルとして保存されます。
16ビット
Cryptomatteが別々のファイルで出力されます。恐らくEXR出力の不具合です。
32ビット
1つのファイルにCryptomatteも保存されます。
「アニメーションをレンダー」以外は使用できない?
マニュアルには以下のような記述があります。「アニメーションをレンダー」を使用しなくてもEXRを保存できますが、CryptomatteとFinal Color Outputが別ファイルになります。
「レンダー F9」「現在のビューをレンダー F10」「選択アイテムをレンダー Shift + F9」コマンドも使用できます。これらのコマンドは、Cryptomatte Output Output Filenameプロパティで指定された場所に.exrを生成します。
しかし、Render Animationは、Cryptomatte出力とFinal Color Outputの両方を含む.exrイメージを生成でき、より理想的です。
レンダーウィンドウからは保存できない
レンダーウィンドウからはCryptomatteを保存できません。
- Cryptomatteが保存されない
- Cryptomatte ID Output、Cryptomatte Coverage Outputのような不要なデータが保存されてしまう
レンダリング用のコマンド
毎回ダイアログを表示するのが面倒な場合は、以下のようにレンダリングコマンドでレンダリングできます。
render.animation "C:\フォルダ名\ファイル名_" openexrlayers32
Final Color Output が空になる場合がある
原因はわからないのですが、EXRを使用した場合だけ Final Color Output が保存されなくなり、After Effectsに読み込むと何も描画されてない状態になる場合がありました。
この問題が発生した場合はシェーダーツリーで「Final Color Output」を削除して、新規に「Final Color Output」を作成したら問題が解決しました。
After EffectsでCryptomatteを使用する方法
After EffectsでCryptomatteを使用するのは簡単です。
1.EXRを読み込んでCryptomatteエフェクトを適用します。画像にCryptomatteが含まれていればカラフルな色が表示されます。
2.Outputを任意に変更します。
3.Cryptomatteエフェクトを選択した状態で、レイヤーをクリックするとマスクを選択できます。Shift + クリック で追加選択、Ctrl + クリック で選択解除できます。
オブジェクトやマテリアルにIDを設定することなく、レイヤーをクリックするだけで直感的に画像をマスクできて便利ですね。
modoでAmbient Occlusion、Depth、Reflectionなどの「レンダー出力」を追加した場合は、「レンダー出力」を1つのEXR内に保存できます。EXR内のレイヤーはEXtractoRエフェクトを使用して取り出すことができます。
mPathの将来性があやしい
ここからは余談です。mPathはいろいろ制限があるのであまり使ってませんでした。Cryptomatteに対応してるしそろそろ使ってみようかと思ったのですが、将来性があやしくなってきました。
modo 14.2で追加されたCPU/GPUのハイブリッド パストレースレンダラー「mPath」ですが、modo 16.1では念願のシェーディング計算がGPUに対応しました。
現在はSSSを使用するとレンダリングアーティファクトが発生したり、Depthが正常にレンダリングできなかったり、プロシージャルテクスチャが使用できないなど問題や制限があります。
しかし、シェーディングのGPU計算は高速です。Arnoldのように「ライトパス出力」に対応していますし、modo 17ではmPathのプレビューに対応した「新しいレンダリングウィンドウ」の搭載が予定されています。今後mPathの改善が進めば使用頻度が上がりそうだと思ってました。
だが急展開。今年2月のライブストリームでmPathの開発者でありLuxology創設者の最後の一人Allen HastingsさんがFoundryを辞めたことがわかりました。
ライブストリーム内でmodoプロダクトマネージャーのGregさんは、mPathの開発は一時保留、Modoが外部のレンダラーとより簡単に接続できるようにする新しいAPIの開発を予定していると説明しました。具体的な方向性はmodo開発チームとのミーティングで話し合うとのことでした。
そのミーティングの結果かわかりませんが、「新しいレンダリングウィンドウ」を開発し、ライブストリームで「新しいレンダリングAPI」やHydraサポートについて語っていたGiorgeさんが6月にFoundryを辞めてしまったようです。
実際のところFoundry内部で何が起きているのかわかりませんが、mPathがもう少しで実用的なGPUレンダラーになりそうなタイミングで開発がストップしてしまいそうで残念です。最低限使えるようにバグ修正されれば限定的に使用できるのですが、今後mPathがどうなるのかだいぶ不安な状態になってます。
Cryptomatte自体は便利な物なので、用途に応じて使っていきたいですね。