Houdini 20.5 SolarisとKarma

Houdini Procedural: Crowd

レンダリング時に群衆シーンを最適化します。

On this page

Houdini Procedural: Crowd LOPは、レンダリング時に群衆シミュレーションを直接最適化することができる便利ツールです。 このプロシージャルは、よく似たポーズの背景エージェントを見つけ、それらのエージェントを同じ変形ジオメトリのインスタンスに変換します。

このツールは、シーンのカメラと解像度に基づいて、画像内のエージェントのピクセルサイズを決定します。 エージェントが LOD Threshold パラメータと照らし合わせて十分に離れている場合、ポーズが十分に類似していれば、このプロシージャルはそのエージェントを別のエージェントの変形ジオメトリのインスタンスに置き換えます。 それ以外のエージェントは、同じSkelRootプロトタイプのインスタンスである必要があります。 これによって、固有のジオメトリの量が低減され、リソース消費の少ないシーンにすることができます。

Note

SkelRootは基本的には以下を含んだトランスフォームプリミティブです。

  • スキニングウェイトとジョイントインデックスを記述したPrimvarを持つ、ジオメトリプリミティブ(メッシュなど)

  • ジョイント階層を記述したSkeletonプリミティブ

  • スケルトンの(アニメーションされた)ポーズを記述したSkelAnimationプリミティブ *アニメーションとスケルトンをスキンプリミティブにバインドするアトリビュート。

よく似たメカニズムがMantraに既に存在しており、それが自動で有効になってバックグラウンドで実行されていました。 しかし、Solaris/Karmaでは、プロシージャルのパラメータを完全に制御することができます。 このツールの目的は、メモリとパフォーマンスの改善だけでなく、MantraからSolaris/USDへの移行工程を円滑かつユーザフレンドリーなものにすることです。

プロシージャルには、“従来”のワークフローと比べて、以下のようないくつかの利点があります。

以下の章では、SOPで群衆を作成し、その結果をこのプロシージャルへ接続する典型的な例について説明します。 適切なパラメータを使用して、エージェントおよびインスタンスの数を制御することができます。 エージェントとインスタンスをカラーで区別して検査することができます。

群衆シーン

シーンは、Houdiniに同梱されている Stadium Example から始めます。 そのサンプルは、 Crowds シェルフにあります。

画像をクリックするとズームします。
  1. Crowds シェルフを開き、 Stadium Example アイコンをクリックしてシーンに追加します。 少しすると、セットアップが完了します。

  2. ビューポートの右上コーナーに2つのボタンがあります。その2つ目のボタン( No cam エントリ)をクリックして、ドロップダウンメニューを開きます。 そこから stadiumcrowdexample/cam1_side を選択して、群衆がよく見えるようにします。

ネットワークを見ると、3つのグレーのネットワークボックスがあります。 Simulationネットワークボックスは、特に重要なノードを含んでいます。 crowdネットワークボックスは、このプロシージャルで使用されるアニメーションキャラクタを含んでいます。

Solarisセットアップ

Tip

Solarisネットワークの作成を始める前に、私どもはHoudiniのデスクトップを変更することを推奨しています。 メインメニューバーの1つ目のドロップダウンメニュー(デフォルトで Build に設定されています)を開き、 Solaris または Solaris LookDev を選択します。 これはScene Graph Treeにアクセスするのに重要です。 Scene Graph Treeでは、シーンのプリミティブとその階層を確認することができます。

ジオメトリのインポート

シーンには、観客を配置するスタジアム席があります。 このオブジェクトは、このプロシージャルでは必要ありませんが、当然ながら全体像を把握するのに必要です。

  1. stage レベルで、SOP Import LOPを作成します。 SOP Path パラメータの横にある Open floating operator chooser ボタンをクリックします。 ノード選択ダイアログを使用してstadiumノードを選択し、 Accept をクリックして選択を確定します。 この例でのフルパスは/obj/stadiumcrowdsexample/stadiumです。

  2. Solaris/USDでは、名前が重要な役割を果たします。Scene Graph Treeでは、新しくインポートされたジオメトリの名前は単にsopimport1で、これはノードの名前です。 インポートノードの名前をstadiumに変更して、識別しやすくします。

カメラのインポート

このプロシージャルは、カメラを使用して距離やピクセルサイズを測定することでエージェントをインスタンスに置換するかどうかを判断するので、カメラは必須となります。

⇥ Tabを押してTabメニューを開きます。 そこから Scene Import (Cameras) を選択します。 これは、SOPネットワークからシーンの3つのカメラを自動的に取得するように事前設定されたScene Import LOPです。

ビューポートの右上コーナーにあるドロップダウンメニューが No cam になっていると思います。 このドロップダウンメニューを開いて、インポートしたカメラのいずれかを選択します。

群衆のインポート

群衆には、静止状態とアニメーション状態があります。 このプロシージャルを動作させるには、両方の状態が必要です。 SOP Crowd Import LOPは、1つのノードを介して両方の状態をロードするように設計されました。 また、群集には幅広いアトリビュートがあります。 このノードには様々なトグルがあるので、本当に必要なアトリビュートのみをインポートすることができます。 これによって、Solarisシーンのリソース消費を低く抑えることができます。

  1. stage レベルで、SOP Crowd Import LOPを追加し、その入力をカメラインポートノードの出力に接続します。

  2. SOP Path パラメータには、前述のcrowdジオメトリノードを指します。 Open floating operator chooser ボタンをクリックします。 ノード選択ダイアログを使用してcrowdノードを選択し、 Accept をクリックしてその選択を確定します。 シェルフツールを使用した場合、このパスは/obj/stadiumcrowdsexample/crowdです。

  3. Import Path Prefix も指定することができます。このパラメータのエントリは、この群集プリミティブをScene Graph Tree内でどのように表示するかを定義します。 デフォルトの$OSはノードの名前を受け取りますが、これはあまり直感的ではありません。 SOPネットワークに直接関連しているため、/crowdという名前の方が適切です。

    Scene Graph Treeで/crowdエントリを展開すると(以下の画像を参照)、群衆のすべてのキャラクタ、そのSkelRootおよびMesh、さらにはツリーの横にあるInspectorでPrimvar/アトリビュートにアクセスすることができます。

    画像をクリックするとズームします。
  4. Import Rest Geometry Data セクションを展開し、 Attributes をオンにして、必要なアトリビュートのみをロードします。 静止状態に本当に必要なのは、P transform uv boneCaptureです。

  5. Import Animation Data を使用して、アニメーション状態のアトリビュートの数を制限することもできます。 必須の Attributesbounds transfromです。

レンダリング設定

多くのユーザは、レンダリング設定をネットワークの最後に適用しますが、Houdini Procedural: Crowdと組み合わせる場合は、プロシージャルの 前に 設定を適用する必要があります。 なぜなら、プロシージャルは最終画像におけるエージェントのピクセルサイズを予測するのに、画像解像度が必要になるためです。 例えば、わずか数ピクセルのサイズのエージェントは、群衆の外観に影響を与えることなく、置換することが可能です。

  1. Karma Render Settings LOPを追加し、その 1つ目 の入力を群衆インポートノードの出力に接続します。

  2. カメラが複数ある場合は、 Camera パラメータの関連するドロップダウンメニューを開き、最終レンダリングに使用したいカメラを選択します。

  3. Resolution を使用して、画像のサイズをピクセルで指定します。

Engine Settings やサンプル数などの他のパラメータは、プロシージャルに影響しません。

エージェントとカメラ間の距離を測定して群衆のLOD(詳細レベル)を定義するために、レンダリング設定で指定したカメラを使用する必要はありません。 代わりに、プロシージャルで直接LOD Cameraを指定することもできます。

Note

ネットワークにUSD Render ROPが含まれ、カメラと解像度の上書きが設定されている場合、プロシージャルはそれらを考慮します。

Houdini Procedural: Crowd

プロシージャルはネットワークの中心部であり、上流のデータをすべて収集して、レンダリング時に直接群衆シミュレーションを最適化します。 作業の大半は内部で行なわれ、実際はデフォルト設定のまま進めることができます。 ただし、ビューポートでプロシージャルの出力をプレビューできるLOD設定があります。 そこではインスタンスの量を調整したり、様々なカラーで視覚化することができます。

  • Houdini Procedural: Crowd LOPを追加し、その入力をKarma Render Settings LOPの出力に接続します。

LOD

デフォルトでは、プロシージャルはレンダリング設定ノードの Camera パラメータのエントリを読み込み、カメラと各エージェント間の距離を計算します。 プロシージャルの LOD Threshold パラメータを使用して、 プロトタイプ インスタンスデフォルト のエージェント間の比率を決定することができます。

  • SkelRootプリミティブの変形ジオメトリは、背景プリミティブの プロトタイプ として使用することができます。

  • 背景SkelRootプリミティブは、別のプリミティブの変形ジオメトリの インスタンス になることができます。

  • デフォルトSkelRootプリミティブは、プロシージャルによって変更されず、元の状態を維持します。

  1. Visualize Instances をオンにすると、上記の3つのタイプをカラーで視覚的に区別することができます。

  2. 最終的にカラーを確認するには、Preview Houdini Procedurals LOPを配置し、その入力を上流の群衆プロシージャルの出力に接続します。

  3. プレビューノードの青の Display/Render タグをオンにして、ノードをアクティブにします。

群衆プロシージャルの LOD Threshold パラメータのスライダを左にドラッグします。この場合、多くのディテールが必要なため、白の デフォルト のエージェントが増えていきます。 以下の比較画像の左側では、 LOD Threshold0.3で、背景には少数の青のエージェントがいます。

反対に、スライダを右にドラッグすると、実際には遠く離れているため、青と緑のキャラクタが増えていきます。 エージェントはレンダリングで小さくなり、高い詳細レベルは必要ありません。 右側の画像では、 LOD Threshold2.0です。

前述のように、エージェントの分布は、レンダリング設定で定義したカメラに基づいています。 しかし、別のカメラに基づいてLOD計算を行なうこともできます。 スタジアムのシェルフシーンには3つの異なるカメラが付属しています。

LOD Camera をオンにすると、パラメータに関連付けられたドロップダウンメニューを使用して、使用可能な他のカメラを選択し、 LOD Threshold の増減に応じてタイプ間の比率がどのように変化するかを確認することができます。

SolarisとKarma

USD

ジオメトリ

  • SOP Geometry I/O

    HoudiniがSOPジオメトリをUSDに変換する方法、その工程を制御する方法の詳細。

  • Component Builder

    Component Builderツールは、マテリアル、バリアント、ペイロード、レイヤをサポートし、SOPからUSDモデルを作成するためのネットワークスニペットを配置します。

レイアウト

  • Stage Manager

    Solarisステージを効率的に扱う方法。

  • Editノード

    ビューア内でインタラクティブにPrimsをトランスフォームさせます。物理衝突を使用して、プロップを現実的に配置することができます。

  • Layoutノード

    インスタンス化されたUSDアセットをシーンに取り込むツールが備わっています。個々にコンポーネントを配置したり、カスタマイズ可能なブラシを使って色々な方法でコンポーネントをペイント/スキャッターしたり、既存のインスタンスを編集することができます。

  • カスタムレイアウトブラシ

    Layout LOPの挙動をカスタマイズして利用可能なレイアウトブラシデジタルアセットの作成方法。

ルック開発

  • MaterialX

    HoudiniにはMaterialXシェーダノードに呼応させたVOPノードが用意されています。これらのノードを使用してシェーダネットワークを構築したり、既存のMaterialXベースのシェーダをインポートすることで、(HoudiniのUSDレンダラーの)KarmaでMaterialXシェーダノードを利用することができます。

  • UDIMパス

    テクスチャ空間の異なるタイルを、それぞれ別の解像度で、異なるテクスチャファイルにエンコードすることができます。その後、kaiju.exrといったテクスチャファイル名を指定すると、Houdiniがロード時にそのトークンを特定のタイルアドレスに置き換えてくれます。

  • シェーダ変換フレームワーク

    シェーダノードのUSDプリミティブへの変換を含む、Solarisシェーディングフレームについて説明しています。

Karmaユーザガイド

Karmaの基本とワークフロー