こちらのセクションでは、いくつかのBehaviourモジュールを確認していきます。
Animation モジュール
これらのBehaviourモジュールは、アニメーションクリップをインタラクトに処理します。
Clip Reader Behaviourモジュール
- エージェントグループを作成します。
- Grid Layoutモジュールを追加し、Sizeアトリビュートを(3,0,3)に設定します。
- Clip Readerモジュールを追加します。
- Clip ReaderモジュールのclipNameアトリビュートにCompatible Clipを設定してください。
- 一部のエージェントに対して、別のクリップを設定したい場合は、ClipNameフィールドの横にあるアイコンを押します。agents override dialog内のリストから必要なエージェントを選択して、クリップ名を設定します。Agent Layout Toolを使用してエージェントを選択することもできます。
- ユーザーのシーンとプレスプレイを巻き戻します。
State Machine Behaviour モジュール
このモジュールは、各エージェントのDG Network内にステートマシン(clip reader, merge, state machine)が必要とするすべてのノードを作成し、state machineからのデータに基づいて「State」メタデータを使用して適切なアニメーションクリップを再生します。- エージェントグループを作成します。
- Grid Layoutモジュールを追加し、Sizeアトリビュートを(3,0,3)に設定します。
- State Machineモジュールを追加します。
- State MachineモジュールのStateアトリビュートに有効なID番号を設定します(AtomsRobotエージェントタイプを使用している場合は、ウォークステートに1を使用します)。
- ユーザーのシーンとプレスプレイを巻き戻します。
- Stateアトリビュートは、アニメートすることができるので、値1のフレーム20と値2のフレーム21にキーフレームを配置します。Mayaでは、フィールドを右クリックして「Set key」を選択することで、これを実行できます。
- ユーザーのシーンとプレスプレイを巻き戻します。
- agents override dialogを使用して、一部のエージェントのステートを上書きすることができます。
Sync Behaviour モジュール
Syncモジュールは、エージェントを同期させ、異なるエージェントグループのエージェント間に親子関係またはコンストレイント関係を作成するために使用されます。詳細については、Syncモジュールのセクションを参照してください。
Directional モジュール
ユーザーのエージェントを動作するために、ユーザーは異なるBehaviourモジュールを使用することができます、これらのモジュールは、エージェントの「Direction」メタデータを変更します。
Follow Curve Behaviour モジュール
Follow Curveモジュールから始めましょう。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加します。
- State Machineモジュールを追加します。StateMachineモジュールの "State"アトリビュートを1に設定します。
- シーンにカーブを描きます。
- Follow Curveモジュールを追加します。
- Follow CurveモジュールのCurveアトリビュートで、Outliner(マウスの中央ボタン)からカーブをドラッグアンドドロップするか、アトリビュートフィールド内にカーブ名を入力します。
- ユーザーのシーンとプレスプレイを巻き戻します。エージェントは、ユーザーのCurveに追従します。
Curve Field Behaviour モジュール
Curveフィールドは、複数のカーブを使用してベクトルフィールドを生成するため、エージェントは複数のカーブの方向に影響されます。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加し、サイズを(3,0,3)に設定します。
- State Machineモジュールを追加します。 StateMachineモジュールの "State"アトリビュートを1に設定します。
- シーンにカーブをいくつか作成します。
- Curve Fieldモジュールを追加します。
- Curve FieldモジュールのCurveアトリビュートで、パネルを展開し、Addボタンを押します。入力のカーブを追加した後、OutlinerからCurveをドラッグアンドドロップするか(マウスの中央ボタン)、または各フィールド内に名前を入力します。
- Max Distanceアトリビュートを500に設定します。シーンとプレスプレイを巻き戻します。エージェントは、作成したカーブに追従します。
Mesh Avoidance Behaviour モジュール
このモジュールを使用すると、シーン内のエージェントとジオメトリの間の交差を回避することができます。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加します。
- State Machineモジュールを追加します。 StateMachineモジュールの "State"アトリビュートを1に設定します。
- シーンにカーブを作成します。
- Follow Curveモジュールを追加します。
- Maya:Follow CurveモジュールのCurveアトリビュートで、Outliner(マウスの中央ボタン)からカーブをドラッグアンドドロップするか、Attribute Field内にカーブ名を入力します。
Dini:カーブをCurve Parameterに割り当てます。シーンにキューブまたはジオを作成します。ユーザーが複数のジオを作成しようとしている場合は、すべてを一緒に組み合わせることに注意して下さい。 - Mesh Avoidanceモジュールを追加してください。
- Mesh AvoidanceモジュールのMeshアトリビュートで、Outliner(マウスの中央ボタン)からジオをドラッグアンドドロップするか、Attribute Field内に該当する名前を入力します。
- ユーザーのシーンとプレスプレイを巻き戻します。エージェントは、ジオを回避して作成したカーブに従います。
モジュールは、上から下に向かって評価されることに注意してください。
この場合、Mesh Avoidanceは、Follow Curveモジュールから受ける方向をオーバーライドする必要があるため、一番下にする必要があります。
Follow Curveの前にMesh Aviodanceモジュールを配置すると、Follow CurveがMesh Aviodanceモジュールからの方向をオーバーライドするため、誤った動作になります。
他にもDirectionalモジュールがあります。BehaviourモジュールのReferenceセクションをご覧ください。
Area Trigger Behaviour モジュール
このモジュールを使用すると、エージェントがメッシュ領域内に入ったときに、メタデータ値を変更することができます。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加し、サイズを(5,0,5)に設定します。
- State Machineモジュールを追加します。 StateMachineモジュールの "State"アトリビュートを1に設定します。
- シーンにカーブを作成します。
- Follow Curveモジュールを追加します。
- Follow CurveモジュールのCurveアトリビュートで、Outliner(マウスの中央ボタン)からカーブをドラッグアンドドロップするか、Attribute Field内にカーブ名を入力します。
- 平面を作成し、それを拡大縮小して、エージェントの前に配置します。
- Area Triggerモジュールを追加します。
- 平面をArea TriggerのMeshアトリビュートに接続します。Outliner(マウスの中央ボタン)からドラッグアンドドロップするか、Mesh Fieldに平面の名前を書き込むことができます。
- 平面のTranslate、Scale、RotateをAgentGroupShapeNode1に接続します。atat_areTrigger_meshTranslation / Rotation / Scale
- 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に設定します。
- locator/ nullを作成した後、フレーム0で(0,0,400)に移動して、キーフレームを追加します。次にフレーム50で(400,0,400)に、移動してキーフレームを追加します。 フレーム100は(400,0,0)に移動してキーフレームを追加します。
- エージェントグループを選択して、Network Editorモジュールを追加します。
- Module Optionsの中にある "Open Network Editor"ボタンを押してください。
- ネットワークエディタで、PreBuildPoseノードの近くまでズームインします。
- Tabキーを押して「ExposeVector3」と入力し、リストから選択した後、Enterキーを押します。このノードは、Houdiniのmayaとパラメータにアトリビュートを公開します。
- 新しいノードをダブルクリックして展開し、Inspector Widgetでノードの名前をTargetPositionに変更します。Exposeノードの名前は、アトリビュート/パラメータの名前になります。
- では、 "getAgentVectorMetadata"ノードを作成し、GlobalTime.outポートを新しいノードのTime Inputに接続します。Inspectorで、 "name"ポートを "Position"に設定します。このノードは、エージェントのPositionメタデータを読み取ります。
- 「SubtractVector」ノードを作成します。最初の入力で、TargetPosition Outputノードを接続し、2番目の入力でgetAgentVectorMetadata出力を接続します。
- NormalizeVectorノードを作成し、SubtractVectorノードの出力を接続します。
- setAgentVectorMetadataを作成し、nameアトリビュートを "Direction"に設定してから、normalizeVectorノードの出力をinポートに接続します。
- setAgentVectorMetadataノードのoutポートをpreBuildPoseNodeの最初の入力に接続します。
- 「File」メニューから「Register」をクリックして、ネットワークを保存するか、Ctrl + Sを押します。
- シーンを巻き戻します。
- locator.translateをtcAgentGroupNodeShape1.atoms_ne workEditor_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の範囲を入力した後、Randamizeを押します。
- シーンを巻き戻します。
Joint Transform Behaviour モジュール
このモジュールは、ジョイントのオフセットの変換をオーバーライドまたは追加します。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加し、Sizeアトリビュートを(5,0,5)に設定します。
- State Machineモジュールを追加します。
- Joint Transformモジュールを追加します。
- JointNameアトリビュートを "Head"に設定します。
- Rotateを(0,90,0)に設定します。
- Offsetをオンに設定します。
- シーンを巻き戻します。
- ウェイトを変更したり、キーフレームを追加することもできます。
エージェントのジョイントを編集するには、Joint Transform Toolを使用することもできます。
Parent Constraint Behaviour モジュール
このモジュールは、エージェントとシーン内のオブジェクトとの間にコンストレイントを作成します。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加し、Sizeアトリビュートを(5,0,5)に設定します。
- State Machineモジュールを追加します。
- Parent Constraintモジュールを追加します。
- ロケータを作成するフレーム0に、キーフレームを追加して、次にフレーム50で(500,0,500)に移動します。回転、拡大縮小して別のキーフレームを追加します。
- locator1.worldMatrixをtcAgentGroupNodeShape1.atoms_pa entConstraint_parentMatrixに接続します。
- シーンを巻き戻して、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に設定します。
- いくつかの坂でGround Meshを作成します。
- AtomsメニューのAtomsHeight Field ManagerからHeight Field Managerを開きます。
- グラウンドを選択し、Height Field Managerで「Add」ボタンを押します。
- Height Field名を "hf"に設定し、selectボタンを押してメッシュを設定し、「OK」を押します。
- State Machineモジュールで、Height Fieldとして "hf"を設定し、シーンを巻き戻します。
- Tiltモジュールを追加してください。
- TiltモジュールのHeight Fieldアトリビュートを "hf"に設定します。
- エージェントの上下の角度を5、グラウンドの上下の角度を10に設定します。
- maxTiltAngleRateを0.5に設定します。
- シーンを巻き戻して、Playを押します。
- module名のRewindの近くにあるチェックボックスを使用して、Tiltモジュールを無効にし、Playを押して違いを確認してください。