Houdini 19.0 群衆シミュレーション

エージェントに布を取り付ける方法

Vellum Clothをエージェントシェイプジオメトリの一部として追加/拘束すれば、エージェントの動きに基づいて布をシミュレーションすることができます。

On this page

概要

VellumはHoudiniの高速なCloth(と他のPBD)ソルバです。布をエージェントシェイプと関連付けてから、その布を群衆ダイナミクスやリジッドボディといった他のダイナミクスと一緒に全体のダイナミクスシミュレーションの一部としてシミュレーションすることができます。

SOPsを使ってジオメトリ内にVellum Clothをセットアップすることができるので、このVellum Clothはエージェントシェイプ内に含めるのに適しています。

エージェントにマントを取り付けてシミュレーションさせた完全に動作したサンプルは、SimpleCrowdClothノードのサンプルを参照してください。

布のセットアップ

エージェント定義をセットアップしたSOPネットワークに入って、インポートしたエージェントジオメトリにVellum Clothを追加してから、それをエージェントシェイプジオメトリとして使用します。

  1. エージェント定義SOPsとは別に、布ジオメトリを作成するSOPチェーンを新しく作成します。

    ここでは、布ジオメトリをインポートするか、それを定義します。マントのサンプルでは、その布は単純にグリッドです。

  2. Vellum Constraintsノードを布ジオメトリに追加します。 Constraint Type を“Cloth”に設定します。これは、Vellum Solverがそのジオメトリを布として扱うように、そのジオメトリ上にアトリビュートをセットアップします。

  3. エージェントシェイプのRestジオメトリ(静止ジオメトリ)をVellum Constraintsノードの3番目の入力に接続します。

  4. もう1つVellum Constraintsノードを追加し、 Constraint Type を“Attach to Geometry”に設定します。

    特定のポイントを取り付ける必要はなくて、単にその布ジオメトリ上のグループを指定して、 Constrain to Closest Point を有効にすればよいだけです。

  5. Vellum Packノードを追加して、その布ジオメトリと拘束をパック化し、その布セットアップの固有の説明的な名前(例えば、long_cape)を Name パラメータに設定します。この名前は、エージェントシェイプとエージェントレイヤーの名前としてAgent Layerで使用されます。

  6. 複数の布シェイプを作成する場合、Mergeノードを追加して、複数のVellum Packノードからの出力を結合します。

Tip

Vellumセットアップチェーンの最後にVellum Solver SOPを追加すれば、高速な布シミュレーションを行なうことができます。 例えば、布がどのようにキャラクタ上に掛かるのかチェックすることができます。 これは、群衆と布をフルシミュレーションするよりも高速です。

布をエージェント定義に追加する

  1. エージェントを定義したSOPチェーンの上記のAGENT_DEFINITION Nullに、Agent Layerノードを追加します。

    エージェントレイヤーを使用してエージェントに複数のシェイプを割り当てることで、ジオメトリのバリエーションを生成することができます。

  2. 布シェイプ(Vellum Packノードからの出力)をAgent Layerノードの2番目の入力に接続します。

  3. Use Layer Name Attribute を有効にして、 Layer Name Attributenameを設定します。

    これは、布シェイプと同じ名前(Vellum PackName パラメータを使用して割り当てられたシェイプ名)で布シェイプ毎に別々にエージェントレイヤーを生成します。

布レイヤーを群衆に割り当てる

  1. 群衆を配置した後に、Crowd Assign Layersノードを追加します。

    Tip

    布をシミュレーションする前の任意の箇所(例えば、群衆シミュレーションの後)でVellumレイヤーをエージェントに割り当てることもできます。

  2. エージェントにランダムに割り当てたいVellumレイヤーを Layer Choices に設定して、 Weight 値を調整してそのランダムな分布を制御します。 cape_*といったパターンを使用することで、均一な確率で選択されるレイヤーのリストを指定することができます。

  3. 特定のジオメトリバリエーションを持ったエージェントにのみVellumレイヤーを割り当てたいのであれば、 Select ByCurrent Layer に設定し、 Layer Pattern にレイヤー名のリストまたはパターンを設定します。

  4. Group パラメータを使用するか、または、 Percent to Select を指定することで、レイヤーの割り当てを特定のエージェントに制限することもできます。

布をシミュレーションする

  1. SOPネットワークで、Crowd Solver DOPの出力を取得します。

    例えば、DOP Import SOPを使って、そこにDOPネットワーク内のCrowd Objectを指定し、 Import Style を“Fetch Geometry from DOP Network”に設定します。

  2. Agent Vellum Unpackノードを追加して、Vellumジオメトリを抽出します。

    Vellumシェイプを含んだレイヤーの名前(例えば、cape_*)を Layers to Simulate に設定します。 すると、エージェントに割り当てられている他のレイヤーがCollisionジオメトリとしてアンパックされます。

    群衆内の一部のエージェントのみがVellumシェイプを持っている場合、 Select By パラメータを使用することで、プリミティブグループまたはエージェントに割り当てられているレイヤーに基づいて、シミュレーションするエージェントを選択することができます。

  3. Vellum Solver SOPを追加して、Vellumジオメトリをシミュレーションします。

  4. オプションで、シミュレーションした布ジオメトリと群衆ジオメトリをマージしてその結果を視覚化することができます。 Agent Vellum Unpackの4番目の出力には、 Layers to Simulate で指定されたレイヤーを現行レイヤーのリストから除外したオリジナルのエージェントが用意されるので、シミュレーションしたVellumジオメトリと一緒にそれらのエージェントを表示することができます。

群衆シミュレーション

はじめよう

  • 基本

    Houdiniにおける群衆シミュレーションの考え方の概要を説明します。

  • セットアップ

    群衆シミュレーションのセットアップと編集の方法

動くパーツ

  • エージェント

    群衆シミュレーションの要員である動くアクターであるエージェントについて説明します。

  • ステート

    各エージェントのアニメーションや仕草を制御する仮想的な雰囲気。

  • トリガー

    エージェントの状態を変更する条件を指定する方法です。

  • キャッシュ

    群衆シミュレーションの効率的なキャッシュ化と読み込みのTips。

挙動

外観

  • 多様性

    エージェントに異なる外観と行動を作成することで、より現実的な群衆を作成する方法。

  • 布の取り付け

    Vellum Clothをエージェントシェイプジオメトリの一部として追加/拘束すれば、エージェントの動きに基づいて布をシミュレーションすることができます。

地形

  • 足の着地

    エージェントのアニメーションを地形に適応させて滑りを回避するためのセットアップ方法。

  • 地形

    エージェントが歩く地形ジオメトリを指定する方法です。

  • 障害物

    エージェントが回避する障害物を設定する方法です。