On this page |
Houdini Procedural: Crowd LOPは、レンダリング時に群衆シミュレーションを直接最適化することができる便利ツールです。
このプロシージャルは、よく似たポーズの背景エージェントを見つけ、それらのエージェントを同じ変形ジオメトリのインスタンスに変換します。
このツールは、シーンのカメラと解像度に基づいて、画像内のエージェントのピクセルサイズを決定します。
エージェントが LOD Threshold パラメータと照らし合わせて十分に離れている場合、ポーズが十分に類似していれば、このプロシージャルはそのエージェントを別のエージェントの変形ジオメトリのインスタンスに置き換えます。
それ以外のエージェントは、同じSkelRoot
プロトタイプのインスタンスである必要があります。
これによって、固有のジオメトリの量が低減され、リソース消費の少ないシーンにすることができます。
Note
SkelRoot
は基本的には以下を含んだトランスフォームプリミティブです。
-
スキニングウェイトとジョイントインデックスを記述したPrimvarを持つ、ジオメトリプリミティブ(メッシュなど)
-
ジョイント階層を記述した
Skeleton
プリミティブ -
スケルトンの(アニメーションされた)ポーズを記述した
SkelAnimation
プリミティブ *アニメーションとスケルトンをスキンプリミティブにバインドするアトリビュート。
よく似たメカニズムがMantraに既に存在しており、それが自動で有効になってバックグラウンドで実行されていました。 しかし、Solaris/Karmaでは、プロシージャルのパラメータを完全に制御することができます。 このツールの目的は、メモリとパフォーマンスの改善だけでなく、MantraからSolaris/USDへの移行工程を円滑かつユーザフレンドリーなものにすることです。
プロシージャルには、“従来”のワークフローと比べて、以下のようないくつかの利点があります。
-
ワークフロー全体が改善されています
-
Solaris/USD、Karma、他のレンダーデリゲートで動作します
-
プレビュープロシージャルによって、ビューポートで結果を確認することができます
-
他のHoudiniプロシージャルと統合されたワークフローになっています
以下の章では、SOPで群衆を作成し、その結果をこのプロシージャルへ接続する典型的な例について説明します。 適切なパラメータを使用して、エージェントおよびインスタンスの数を制御することができます。 エージェントとインスタンスをカラーで区別して検査することができます。
群衆シーン ¶
シーンは、Houdiniに同梱されている Stadium Example から始めます。
そのサンプルは、 Crowds シェルフにあります。

-
Crowds シェルフを開き、 Stadium Example
アイコンをクリックしてシーンに追加します。 少しすると、セットアップが完了します。
-
ビューポートの右上コーナーに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では、シーンのプリミティブとその階層を確認することができます。
ジオメトリのインポート ¶
シーンには、観客を配置するスタジアム席があります。 このオブジェクトは、このプロシージャルでは必要ありませんが、当然ながら全体像を把握するのに必要です。
-
stage レベルで、
SOP Import LOPを作成します。 SOP Path パラメータの横にある
Open floating operator chooser ボタンをクリックします。 ノード選択ダイアログを使用して
stadium
ノードを選択し、 Accept をクリックして選択を確定します。 この例でのフルパスは/obj/stadiumcrowdsexample/stadium
です。 -
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シーンのリソース消費を低く抑えることができます。
-
stage レベルで、SOP Crowd Import LOPを追加し、その入力をカメラインポートノードの出力に接続します。
-
SOP Path パラメータには、前述の
crowd
ジオメトリノードを指します。Open floating operator chooser ボタンをクリックします。 ノード選択ダイアログを使用して
crowd
ノードを選択し、 Accept をクリックしてその選択を確定します。 シェルフツールを使用した場合、このパスは/obj/stadiumcrowdsexample/crowd
です。 -
Import Path Prefix も指定することができます。このパラメータのエントリは、この群集プリミティブをScene Graph Tree内でどのように表示するかを定義します。 デフォルトの
$OS
はノードの名前を受け取りますが、これはあまり直感的ではありません。 SOPネットワークに直接関連しているため、/crowd
という名前の方が適切です。Scene Graph Treeで
/crowd
エントリを展開すると(以下の画像を参照)、群衆のすべてのキャラクタ、そのSkelRoot
およびMesh
、さらにはツリーの横にあるInspectorでPrimvar/アトリビュートにアクセスすることができます。画像をクリックするとズームします。 -
Import Rest Geometry Data セクションを展開し、 Attributes をオンにして、必要なアトリビュートのみをロードします。 静止状態に本当に必要なのは、
P transform uv boneCapture
です。 -
Import Animation Data を使用して、アニメーション状態のアトリビュートの数を制限することもできます。 必須の Attributes は
bounds transfrom
です。
レンダリング設定 ¶
多くのユーザは、レンダリング設定をネットワークの最後に適用しますが、Houdini Procedural: Crowdと組み合わせる場合は、プロシージャルの 前に 設定を適用する必要があります。 なぜなら、プロシージャルは最終画像におけるエージェントのピクセルサイズを予測するのに、画像解像度が必要になるためです。 例えば、わずか数ピクセルのサイズのエージェントは、群衆の外観に影響を与えることなく、置換することが可能です。
-
Karma Render Settings LOPを追加し、その 1つ目 の入力を群衆インポートノードの出力に接続します。
-
カメラが複数ある場合は、 Camera パラメータの関連するドロップダウンメニューを開き、最終レンダリングに使用したいカメラを選択します。
-
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
プリミティブは、プロシージャルによって変更されず、元の状態を維持します。
-
Visualize Instances をオンにすると、上記の3つのタイプをカラーで視覚的に区別することができます。
-
最終的にカラーを確認するには、
Preview Houdini Procedurals LOPを配置し、その入力を上流の群衆プロシージャルの出力に接続します。
-
プレビューノードの青の Display/Render タグをオンにして、ノードをアクティブにします。
群衆プロシージャルの LOD Threshold パラメータのスライダを左にドラッグします。この場合、多くのディテールが必要なため、白の デフォルト のエージェントが増えていきます。
以下の比較画像の左側では、 LOD Threshold は0.3
で、背景には少数の青のエージェントがいます。
反対に、スライダを右にドラッグすると、実際には遠く離れているため、青と緑のキャラクタが増えていきます。
エージェントはレンダリングで小さくなり、高い詳細レベルは必要ありません。
右側の画像では、 LOD Threshold は2.0
です。


前述のように、エージェントの分布は、レンダリング設定で定義したカメラに基づいています。 しかし、別のカメラに基づいてLOD計算を行なうこともできます。 スタジアムのシェルフシーンには3つの異なるカメラが付属しています。
LOD Camera をオンにすると、パラメータに関連付けられたドロップダウンメニューを使用して、使用可能な他のカメラを選択し、 LOD Threshold の増減に応じてタイプ間の比率がどのように変化するかを確認することができます。