Houdini 20.0 レンダリング

Cryptomatte

オリジナルソースシーン内のオブジェクト名/マテリアル名を使用して、画像内の各ピクセルと関連付けられた画像マップを生成する方法。

On this page

概要

Cryptomatteは、個々のピクセルをオブジェクトIDと関連付けた画像を生成、使用するためのオープンソースツールセットです。 一般的には、“Cryptomatte”は、ツールによって、あるいはHoudiniをはじめとするソフトウェアに搭載された同等の機能によって生成される画像タイプとして知られています。 これはピクセル毎にオブジェクト名/マテリアルを格納するディープEXR画像で、特殊なフィルタリングによってアンチエイリアシングと透明度を適切にサポートします。

この画像を使用すると、特定の3Dソースオブジェクトと関連付けられたピクセルを対象に、コンポジットエフェクトをマスクすることができます。

下図の例では、Cryptomatte画像を使用して、Houdiniコンポジターネットワークの特定のマテリアルを分ける方法を示しています。

仕様や一般的なコンポジットアプリケーションのプラグインについては、Cryptomatteの公式サイトを参照してください。

Note

CryptomatteはKarma CPUとKarma XPUでサポートされています。

Tipsとメモ

  • Cryptomatteは、プライマリ平面のピクセルフィルタを使用します。 独自のピクセルフィルタプラグインを使うこともできますが、追加画像平面からデータを読み込むフィルタ(例えば、Z平面からデータを読み込むminmaxフィルタ)は許可されていません。

  • マイクロポリゴンレンダリングモードでCryptomatteを生成することはできません。

  • Opacity(不透明度)とTransparency(透明度)は別物であることを覚えておいてください: 部分的に不透明なマテリアルは、カメラ光線を通過できるのに対し、透明マテリアルはカメラ光線を遮り、セカンダリ(屈折)光線を放射します。 ピクセル領域はOpacity(不透明度)に基づいて計算されるので、屈折マテリアルの背後にあるオブジェクトに対してマットを生成することができません。

How to

To...Do this

Karmaを使用してUSDシーンをCryptomatte画像に出力する

KarmaのCryptomatteを参照してください。

Mantraを使用して従来のHoudiniオブジェクトレベルシーンをCryptomatte画像に出力する

Mantra ROPは、Cryptomatte画像をメインレンダリング画像内または追加生成ファイル内のAOV平面として生成することができます。

  1. シーンのレンダリングに使用したいMantra ROPをセットアップします。

  2. Images > Cryptomatte タブをクリックします。

  3. Cryptomatte Layers の隣にある+をクリックして、レイヤーを追加します。

  4. Property フィールドを使用して、Cryptomatte IDの生成方法を選択します。

    このテキストフィールドの隣りにあるドロップダウンメニューを使用することで、オブジェクト名またはマテリアル名でIDを生成することができます。

    または

    Propertiesノードを使ってオブジェクトまたはマテリアルに追加されたユーザ文字列プロパティを入力することができます。 オブジェクトまたはマテリアルにユーザプロパティを追加する方法に関する詳細は、レンダープロパティを参照してください。

  5. デフォルトでは、このCryptomatteレイヤーはメインレンダリング画像の画像平面として生成されます。Cryptomatteレイヤーを別ファイルに書き出したいのであれば、 Different File を有効にして、生成される.exrファイルの出力パスを設定してください。

Cryptomatteからコンポジター内にマスクを生成する

Cryptomatte COPのヘルプを参照してください。

インスタンス化と固有IDs

他のインスタンス間で特定のインスタンスをマットするには、各インスタンスに固有の値のユーザ文字列プロパティを使って、Cryptomatteを生成する必要があります。

以下がMaterial Stylesheetsを使った方法の例です:

  1. インスタンスをセットアップします。

  2. 必ず Fast Point Instancing を使ってください。

  3. Attribute Expression(または、あなたが気に入っているメソッド)を使って、Instanceノード内の各ポイントに固有の整数値を割り当てます。

  4. Instanceノードにユーザ文字列プロパティを追加します。

  5. ルートレベルでスタイルシートを追加し、Targetを Point Instances 、Override Scriptを Render Property にして、 Inline Script を使ってスクリプトを記述し、適切なバインドをセットアップします:

    インラインスクリプトの例:

    cvex myFn(int id=0; export string myuserprop="") 
    {
        myuserprop = sprintf("foo%d", id);
    }
    

この例では、ユーザプロパティの名前がmyuserpropです。Point整数アトリビュートの名前がmypointidです。 生成される固有のプロパティ値は、foo0, foo1, foo2など(mypointidアトリビュートからの値が入ります)です。

この例では、 Inline Script は、整数アトリビュートを文字列プロパティに変換するためだけに必要でした。 文字列アトリビュートを使っている場合は、単に Attribute Binding を使うことで、このスクリプトとデータバインドの処理をスキップすることができます。

スタイルシートの使い方の詳細は、Material Stylesheetsを参照してください。

レンダリング

Mantraユーザガイド

基本

ライティング

次のステップ

導師レベル

他のレンダラー