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 をベースとしたものです。サンプルは、 Crowd シェルフにあります。

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

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

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

Solarisセットアップ

Tip

Solarisネットワークの作成を始める前に、私どもはHoudiniのデスクトップを変更することを推奨しています。メインメニューのバーから最初のドロップダウンメニュー(デフォルトで 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を押してタブメニューを開きます。そこから Scene Import (Cameras) を選択します。これは、事前設定されたScene Import LOPで、SOPネットワークからシーンの3つのカメラを自動的に取得します。

ビューポートの左上に、 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の基本とワークフロー