Behaviourの追加 - Houdini
このセクションでは、いくつかのBehaviourモジュールを見ていきましょう。
Animation モジュール
これらのBehaviourモジュールは、アニメーションクリップをインタラクトに処理します。
Clip Reader Behaviour モジュール
このモジュールは各エージェントにClip Readerノードを接続するので、すべてのエージェントは特定のクリップを再生します。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加し、Sizeアトリビュートを(3,0,3)に設定します。
- Clip Readerモジュールを追加します。
- Clip ReaderモジュールのclipNameアトリビュートに互換クリップを設定してください。
- 一部のエージェントに別のクリップを設定したい場合は、ClipNameフィールドの横にあるアイコンを押します。Agent Override Dialog内のリストから必要なエージェントを選択し、クリップ名を設定します。Agent Layout Toolを使用してエージェントを選択することもできます。
- ユーザーのシーンとプレスプレイを巻き戻します。
State Machine Behaviour モジュール
こちらのモジュールは、各エージェントのDGネットワーク内にState Machine(clip reader, merge, state machine)が必要とするすべてのノードを作成します。state machineからのデータに基づいて「State」メタデータを使用して、正しいアニメーションクリップを再生します。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加し、Sizeアトリビュートを(3,0,3)に設定します。
- State Machineモジュールを追加します。
- State Machineモジュールのstateアトリビュートに有効なID番号を設定します(atomsRobotエージェントタイプを使用している場合は、walk stateに1を使用します)。
- ユーザーのシーンとプレスプレイを巻き戻します。
- Stateアトリビュートは、アニメートすることができるので、Valueが1のフレーム20とValueが2のフレーム21にキーフレームを配置します。
- ユーザーのシーンとプレスプレイを巻き戻します。
- Agent Override Dialogを使用して、一部のエージェントのStateを上書きできます。
Sync Behaviour モジュール
Syncモジュールは、エージェントを同期させ、異なるエージェントグループのエージェント間に親子関係またはコンストレイント関係を作成するために使用されます。詳細については、Syncモジュールのセクションを参照してください。
Directional モジュール
ユーザーのエージェントを動作するために、ユーザーは異なるBehaviourモジュールを使用することができます。これらのモジュールは、エージェントの「Direction」メタデータを変更します。
Follow Curve Behaviour モジュール
Follow Curveモジュールから始めましょう。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加します。
- State Machineモジュールを追加します。 StateMachineモジュールの "State"アトリビュートを1に設定します。
- シーンにカーブを描きます。
- Follow Curveモジュールを追加します。
- カーブパスを入力するか、右側のボタンで選択します。
- ユーザーのシーンとプレスプレイを巻き戻します。エージェントは、ユーザーのカーブに従います。
- カーブのアニメートや、最大距離とウェイトを設定してカーブの影響を変更することもできます。
Curve Field Behaviour モジュール
Curve Fieldは、複数のカーブを用いてVectorフィールドを生成するので、エージェントは複数のカーブの方向に影響される。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加し、サイズを(3,0,3)に設定します。
- State Machineモジュールを追加します。 StateMachineモジュールの "State"アトリビュートを1に設定します。
- シーンにカーブをいくつか作成します。
- Curve Fieldモジュールを追加します。
- カーブリストにいくつかのエントリを追加して、カーブを割り当てます。
- Max Distanceアトリビュートを500に設定します。
- ユーザーのシーンとプレスプレイを巻き戻します。エージェントは、作成したカーブに従います。
Mesh Avoidance Behaviour モジュール
こちらのモジュールを使用して、エージェントとユーザーのシーンのジオメトリとの交差を回避することができます。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加します。
- State Machineモジュールを追加します。 StateMachineモジュールの "State"アトリビュートを1に設定します。
- シーンにカーブを作成します
- Follow Curveモジュールを追加します。
- カーブをカーブパラメータに割り当てます。
- シーンにキューブまたはジオを作成します。ユーザーが複数のジオを作成しようとしている場合、すべてを一緒に組み合わせることに注意してください。
- Mesh Avoidanceモジュールを追加してください。
- メッシュをMeshパラメータに割り当てます。
- ユーザーのシーンとプレスプレイを巻き戻します。エージェントは、ジオを回避して作成したカーブに従います。
モジュールは、上から下に向かって評価されることに注意してください。
この場合、メッシュの回避は、Follow Curveモジュールから受ける方向をオーバーライドする必要があるため、一番下にする必要があります。フォローカーブの前にMesh Avoidanceモジュールを配置すると、フォローカーブがMesh Avoidanceモジュールからの方向を上書きするため、誤った動作になります。
他にもDirectionalモジュールがあります。Behaviourモジュールのリファレンスセクションをご覧ください。
Area Trigger Behaviour モジュール
こちらのモジュールでは、エージェントがメッシュ領域内に入ったときにメタデータの値を変更することができます。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加し、Sizeを(5,0,5)に設定します。
- State Machineモジュールを追加します。 StateMachineモジュールの "State"アトリビュートを1に設定します。
- シーンにカーブを作成します。
- Follow Curveモジュールを追加します。
- カーブをCurveパラメータに割り当てます。
- グリッドを作成し、それを拡大縮小してエージェントの前に配置します。
- Area Triggerモジュールを追加します。
- メッシュをMeshアトリビュートに割り当てます。
- グリッドの移動、スケール、コネクトをArea Triggerに接続します。meshRotation / Scale / Translationパラメータ
- Area TriggerモジュールのMetadataアトリビュートをStateに設定します。
- このようにして、エージェントがStateを2に変更するように、Area TriggerモジュールのintValueアトリビュートを2に設定します。
- エージェントが新しいState値を保持するように、KeepValueをonに設定します。
- 別のArea Triggerモジュールを追加して新しい平面を作成した後、アタッチします。
- 新しいArea Triggerモジュール内で、メタデータをFrameRateに、DoubleValueを0.5に、KeepValueをoffに設定します。
- 新しいTriggerモジュールのBlend In FrameおよびBlend Out Frameアトリビュートを10に設定します。
- シミュレーションにバリエーションを追加するには、Random InとRandom Out Delayを5に設定します。
- ユーザーのシーンとプレスプレイを巻き戻します。Stateメタデータが2に変更されたため、エージェントが最初の平面の内側に入ると実行が開始され、次に2番目の平面に入ると遅くなりますが平面の内側のみになります。
Network Editor Behaviour モジュール
こちらのモジュールでエージェントのDependencyグラフを編集することができます。このモジュールでFollow Target Behaviourを作成しましょう。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加します。
- State Machineモジュールを追加します。 StateMachineモジュールの "State"アトリビュートを1に設定します。
- Nullを作成した後、フレーム0で(0,0,400)に移動して、キーフレームを追加します。次に、フレーム50で(400,0,400)に移動して、キーフレームを追加します。また、フレーム100で(400,0,0)に移動して、キーフレームを追加します。
- エージェントグループを選択してNetwork Editorモジュールを追加します。
- Module Option内の「Open Network Editor」ボタンを押してください。
- ネットワークエディタで、preBuildPoseノードの近くまでズームインします。
- Tabキーを押して「ExposeVector3」と入力します。リストから選択して、Enterキーを押します。このノードは、HoudiniとMayaのパラメータにアトリビュートを公開します。
- 新しいノードをダブルクリックして展開し、Inspector widgetでノードの名前をtargetPositionに変更します。
- Exposeノードの名前は、アトリビュート/パラメーターの名前になります。
- 次に、 "getAgentVectorMetadata"ノードを作成し、globalTime.outポートを新しいノードの入力のtimeに接続します。Inspectorで、 "name"ポートを "position"に設定します。このノードはエージェントのPositionメタデータを読みます。
- 「SubtractVector」ノードを作成します。最初の入力で、targetPosition outputノードを接続し、2番目の入力でgetAgentVectorMetadata出力を接続します。
- NormalizeVectorノードを作成し、SubtractVectorノードの出力を接続します。
- setAgentVectorMetadataを作成し、Nameアトリビュートを "Direction"に設定した後、normalizeVectorノードの出力をinポートに接続します。
- setAgentVectorMetadataノードのoutポートをpreBuildPoseノードの最初の入力に接続します。
- 「File」メニューから「Register」をクリックしてネットワークを保存するか、Ctrl + Sを押します。
- シーンを巻き戻します。
- null translationを新しいtargetPositionパラメータに接続します。
- シーンを巻き戻して、Playを押します。
Network Editorモジュールの詳細については、こちらのセクションをご覧ください。
Pose モジュール
Poseモジュールは、ジョイントの変換に影響します。
Agent Scale Behaviour モジュール
こちらのモジュールは、各エージェントのスケールを変更することができます。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加し、Sizeアトリビュートを(5,0,5)に設定します。
- State Machineモジュールを追加します。
- Agent Scaleモジュールを追加し、そのモジュールのScaleアトリビュートを2に設定します。
- シーンを巻き戻します。
- そして、バリエーションを追加するには、ScaleアトリビュートのOverride Dialogを展開して、リストからエージェントを選択します。「Value:」ボタンを押し、0.5〜2.5の範囲を入力してから「Randomize」を押します。
- シーンを巻き戻します。
Joint Transform Behaviour モジュール
こちらのモジュールは、ジョイントにオフセットの変換を上書きまたは追加します。
- エージェントグループを作成します。
- Grid LayoutモジュールまたはPoint Layoutを追加します。
- State Machineモジュールを追加します。
- Joint Trancformモジュールを追加します。
- JointNameアトリビュートを "Head"に設定します。
- Rotateを(0,90,0)に設定します。
- Offsetをオンに設定します。
- シーンを巻き戻します。
- ウェイトの変更や、キーフレームを追加することもできます。
Parent Constraint Behaviour モジュール
こちらのモジュールは、エージェントとユーザーのシーン内のオブジェクトとの間にコンストレイントを作成します。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加し、Sizeアトリビュートを(5,0,5)に設定します。
- State Machineモジュールを追加します。
- Parent Constraintモジュールを追加します。
- Nullを作成して、フレーム0にキーフレームを追加します。次に、フレーム50で(500,0,500)に移動し、回転、拡大縮小して別のキーフレームを追加します。
- null worldMatrixをparent constraint parent matrixに接続する。
- シーンを巻き戻して、Playを押します。
Joint Aim Behaviour モジュール
こちらのモジュールは、ポイントに向けて1つのジョイントの向きを変えます。これは、ペアレントに変換を伝播することができます。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加します。
- State Machineモジュールを追加します。
- ロケーターを作成して(400,0,400)に移動します。
- Joint Aimモジュールを追加します。
- ジョイントを「Head」に設定してください。
- Aim AxisをZに設定します。
- Hierarchy Propagationを5に設定します。
- シーンを巻き戻して、Playを押します。
Joint Constraint Behaviour モジュール
こちらのモジュールは、同一のエージェントの2つのジョイント間にペアレントコンストレイントを作成します。これは、コンストレイントプロップジョイントがアニメートされていない為、それをハンドジョイントにアタッチする場合に役立ちます。
Tilt Behaviour モジュール
こちらのモジュールは、グループの勾配に基づいてエージェントにチルトの変換を追加します。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加します。
- State Machineモジュールを追加し、 "State"アトリビュートを1に設定します。
- いくつかの坂でグラウンドメッシュを作成します。
- AtomsメニューからHeight Field Managerを開きます。
Atoms > Height Field Manager - グラウンドを選択し、Height Field Managerで「Add」ボタンを押します。
- heightフィールド名を "hf"に設定します。Selectボタンを押して、メッシュを設定し、「OK」を押します。
- State Machineモジュールで、Heightフィールドとして "hf"を設定し、シーンを巻き戻します。
- Tiltモジュールを追加します。
- TiltモジュールのHeight fieldアトリビュートを "hf"に設定します。
- エージェントの上下の角度を5、グラウンドの上下の角度を10に設定します。
- maxTiltAngleRateを0.5に設定します。
- シーンを巻き戻して、Playを押します。
- モジュール名のRewindの近くにある、チェックボックスを使用してTiltモジュールを無効にします。Playを選択して、違いを確認してください。
Vex Behaviour モジュール
vex Behaviourモジュールは、シミュレーションの異なる段階で各エージェントに対して、いくつかのVEXコンテキストを実行します。 Houdiniの任意のデータにアクセスできるように、HoudiniのVEX関数/ノードを使用することは可能です。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加します。
- State Machineモジュールを追加し、 "State"アトリビュートを1に設定します。
- VEXモジュールを追加します。
- VEXモジュールのアトリビュートで、InitFrameフィールドの隣にある「Create VOP」ボタンを押してください。これは、Initフレーム段階で呼ばれるVEXコンテキストを作成します。
- 作成したVOPノードの中に入ります。
- 「Set Agent Metadata」VEXノードを作成します。次に、Signatureパラメータをvector、メタデータ名をdirection、デフォルト値を1,0,1に設定します。
- グローバルノードのAgentIdを、設定されたAgent MetadataノードのエージェントIDに接続します。
- Atomsシェルフ内の「UpdateSim」ボタンを選択します。
- シーンを巻き戻して、Playを押します。
利用可能なモジュールの全てのリストについてはBehaviourモジュールのリファレンスページを確認してください。
Copyright © 2017, Toolchefs LTD.