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

群衆の基本

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

On this page

概要

群衆は、本質的にはパーティクルに取り付けられたアニメーションキャラクタです。 群衆シミュレーションにおけるキャラクタの動きは、DOPによる基本的なパーティクルシミュレーションに基づいています。

群衆シミュレーションでは、キャラクタのことを エージェント と呼び、常にエージェントは立ったり、歩いたり、走ったりといった特定の ステート(状態) にあります。 群衆シミュレーションでは、そのエージェントのステートを変化させるイベント(例えば、歩行から走行への遷移)を発生させることができます。 このようなイベントのことを トリガー と呼びます。

辺りをうろつく群衆を作成するには、idleステートのエージェントとwalkステートのエージェントを使用することになります。 idleステートでは、エージェントの取り付け先である大元のポイントは静止したままになります。 walkステートでは、その大元のポイントは移動します。 トリガは、各エージェントが現在のステートで特定の期間よりも長くとどまっていないかどうかをチェックし、 条件を満たしたすべてのエージェントに対してidlewalkまたはwalkidleといったステートトランジション(状態遷移)を生成します。

群衆シミュレーションは、ジオメトリ(SOP)ネットワークとシミュレーション(DOP)ネットワークの両方を必要とします:

  • ジオメトリ(SOP)ネットワークは、エージェントの作成と定義をするのに使用します。HoudiniのSOPノードのフルパワーを使用すれば、地形などの既存モデルからエージェント用の位置を生成することができます。

  • シミュレーション(DOP)ネットワークは、実際の群衆シミュレーションを走らせるのに使用します。DOP群衆シミュレーションネットワークには、各パーティクル(と、そのパーティクルに取り付けられているエージェント)の動きを制御するロジックを格納します。このDOPネットワーク内では、エージェントは他のダイナミクス(DOPs)エレメントと相互作用させることができます。

シェルフツールとネットワークエディタを使用して基本的な群衆シミュレーションを作成する方法については、群衆シミュレーションの設定方法を参照してください。

Tip

群衆の作成方法をすぐにでも学習したいのであれば、Zombies for Everyoneチュートリアルを参照してください。

概念

エージェント

エージェントは、例えば、群衆シーン内のそれぞれの人々である群衆シミュレーションの“アクター”です。 エージェントは、スキンジオメトリとアニメーションを含んだキャラクタスケルトンになっています。 エージェントは群衆シミュレーション内の各パーティクルに取り付けられます。

群衆ソース

群衆シミュレーションの“ソース”は、ジオメトリ(SOP)ネットワークのポイントです。 エージェントはそれらのポイント上にコピーされ、そのポイントがシミュレーション内のエージェントの開始位置を表します。 この群衆シミュレーションのソースポイントを設定しなかった場合、Crowd Source SOPノードは、指定した領域に特定の数のポイントをランダムにばら撒きます。

クリップ

クリップとは、エージェントが特定の状態になった時に再生される(walkrunなどの)エージェント上のアニメーションのことです。

ステート(状態)

常にどのエージェントも“walk”、“idle”、“attack”、“run_to_goal”などの特定の状態にあります。 ステートは、エージェントがその状態の時に再生されるアニメーションクリップと、そのエージェントの取り付け先である大元のパーティクルの動きに影響を与える ビヘイビアノード によって定義します。

トリガーとトランジション(遷移)

群衆シミュレーションの各ステップで、Houdiniはすべてのエージェントを見て、一連のトリガー条件をチェックします(例えば、“対象までの距離>2”など)。 トリガーが適用されると、Houdiniは、トリガーに付加されているトランジションを確認して、エージェントを新しい状態へ変更します(例えば、walk->run)。 トランジションには、Houdiniが新旧のステートのアニメーションクリップを自動的にブレンドする 持続時間 を入れることができます。

ウェイト

Houdiniには、エージェントが取り付けられている大元のパーティクルの動きを制御するビヘイビア系ノードとして使用可能な便利なPOPフォースがたくさん用意されています。 このような“ステアリングフォース”ノードは、基本的にパーティクルフォースで、そこに ウェイト の概念が加えられています。 そして、“特定のポイントの方へ移動”させたり、“パスを辿らせたり”する便利な群衆の挙動が用意されています。 エージェントは複数のフォース(例えば、“パスの追従”と“障害物回避”)から常に影響を受けることができます。 Crowd Solverは、個々のフォースをウェイトで乗算する前にウェイトを 正規化 する(合計が1になるようにスケーリングする)ことにより、複数のフォースを処理します。

群衆ステアリングフォースノードだけでなく、Crowd Solverには ウェイト の概念があるデフォルトのフォースも用意されています。

障害物

エージェントが回避する静的DOPオブジェクトを指定することができます。

地形

現在のところ、Houdiniは、単一の地形オブジェクト(Static RBDオブジェクト)に対応しています。 エージェントは、オプションのIK foot adaptationを使用して地形に追従します。

群衆シミュレーション

はじめよう

  • 基本

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

  • セットアップ

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

動くパーツ

  • エージェント

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

  • ステート

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

  • トリガー

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

  • キャッシュ

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

SOP群衆

挙動

外観

  • 多様性

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

  • 布の取り付け

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

地形

  • 足の着地

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

  • 地形

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

  • 障害物

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