In this section we are going to have a look at some behaviour modules.このセクションでは、いくつかのBehaviourモジュールを見ていきましょう。
Animation
modulesThese behaviour modules handle and interact with the animation clips.
Clip reader behaviour module
This module attaches a clip reader node to each agent, so every agent will play a specific clip
- Create an agent group.
- Add a grid layout module and set the size attribute to (3,0,3).
- Add a clip reader module.
- Set a compatible clip in the clipName attribute of the clip reader module.
- If you want set a different clip for some agents press the icon next to the clipName field. Select the agent you want from the list inside the agents override dialog and set a clip name. You might also select the agents with the agent layout tool.
- Rewind your scene and the press play.
State machine behaviour module
This module creates all the nodes needed by the state machine (モジュール
これらのBehaviourモジュールは、アニメーションクリップをインタラクトに処理します。
Clip Reader Behaviour モジュール
このモジュールは各エージェントにClip Readerノードを接続するので、すべてのエージェントは特定のクリップを再生します。
- エージェントグループを作成します。
- Grid Layoutモジュールを追加し、Sizeアトリビュートを(3,0,3)に設定します。
- Clip Readerモジュールを追加します。
- Clip ReaderモジュールのclipNameアトリビュートに互換クリップを設定してください。
- 一部のエージェントに別のクリップを設定したい場合は、ClipNameフィールドの横にあるアイコンを押します。Agent Override Dialog内のリストから必要なエージェントを選択し、クリップ名を設定します。Agent Layout Toolを使用してエージェントを選択することもできます。
- ユーザーのシーンとプレスプレイを巻き戻します。
Pose modules
The pose modules affect the joints transformation.
Agent scale behaviour module
This module can change the scale of each agent
- Create an agent group.
- Add a grid layout module and set the size attribute to (5,0,5).
- Add state machine module.
- Add an agent scale module and set the scale attribute of the module to 2.
- Rewind the scene.
- To add more variation open the override dialog of the scale attribute, select some agents form the list, then press the "Value:" button and enter a range of 0.5-2.5, then press randomize.
- Rewind the scene.
Joint transform behaviour module
This module override or add an offset transformation to a joint
- Create an agent group.
- Add a grid layout module or a point layout.
- Add state machine module.
- Add a joint transform module.
- Set the jointName attribute to "Head".
- Set rotate to (0,90,0)
- Set offset to on.
- Rewind the scene.
- You can also change the weight or add some keyframe to it.
Parent constraint behaviour module
This module create a constraint between the agents and an object in your scene
- Create an agent group.
- Add a grid layout module and set the size attribute to (5,0,5).
- Add state machine module.
- Add a parent constraint module.
- Create a null add a keyframe at frame 0, then at frame 50 move to (500,0,500), rotate, scale it and add another keyframe.
- Connect null worldMatrix to parent constraint parent matrix
- Rewind the scene and press play.
Joint aim behaviour module
This module change the orientation of one joint in order to aim a point. It can also propagate the transformation to hi parents
- Create an agent group.
- Add a grid layout module.
- Add state machine module.
- Create a locator and move to (400,0,400).
- Add a joint aim module.
- Set the joint to "Head".
- Set the aim axis to Z.
- Set hierarchy propagation to 5.
- Rewind the scene and press play.
Joint constraint behaviour module
This module creates a parent constraint between two joints of the same agent. This is useful in cases where a constraint prop joint is not animated and you want to attach it to an hand joint.
Tilt behaviour module
This module add a tilt transformation to the agents based on the slope of the group
- Create an agent group
- Add a grid layout module
- Add a state machine module and set the "state" attribute to 1
- Create a ground mesh with some hills
- Open the height field manager from the Atoms menu Atoms→Height field manager
- Select the ground and in the Height field manager press the ad button
- Set the height field name to "hf" and press the select button to set the mesh and press ok
- On the state machine module set "hf" as height field and rewind the scene
- Add the tilt module
- Set the height field attribute of the tilt module to "hf"
- Set the agent up and down angle to 5 and the ground up and down angle to 10
- Set the maxTiltAngleRate to 0.5
- Rewind the scene and press play
- Try to disable the tilt module using the checkbox near the module name rewind and press play to see the difference.
Vex behaviour module
The vex behaviour module execute some vex context for each agents at different stage of the simulation. Is it possible to use any Houdini vex function/node to be able to access to any Houdini data.
- Create an agent group
- Add a grid layout module
- Add a state machine module and set the "state" attribute to 1
- Add a vex module
- On the vex module attributes, press the "Create VOP" button next to the initFrame field. This create a vex context called at the init frame stage.
- Go inside the vop node created
- Create a "Set Agent Metadata" vex node. Then set the signature parameter to vector, the metadata name to direction and the default value to 1,0,1
- Connect the agentId of the global node to the agent id of the set agent metadata node
- Press the updateSim button inside the atoms shelf
- Rewind the scene and press play
State Machine Behaviour モジュール
こちらのモジュールは、各エージェントのDGネットワーク内にState Machine(clip reader, merge,state machine) inside the DG network of each agent, then the "state" metadata is used to play the right animation clip based on the data from the state machine.
- Create an agent group.
- Add a grid layout module and set the size attribute to (3,0,3).
- Add a state machine module.
- Set a valid id number in the state attribute of the state machine module (if you are using the atomsRobot agent type, use 1 for the walk state).
- Rewind your scene and the press play.
- The state attribute can be animated, so put a key frame at frame 20 with value 1 and one at frame 21 with value 2
- Rewind your scene and the press play.
- You can override the state of some agent using agents override dialog.
Sync behaviour module
The sync module is used to synchronize agents and create a parent/child or constraint relationship between agents of different agent group, please look at the sync module section for more information.
Directional modules
To drive your agents you can use different behaviour modules, these modules change the "direction" metadata of the agents.
Follow curve behaviour module
Let's start with the follow curve module.
- Create an agent group.
- Add a grid layout module.
- Add state machine module. Set the "state" attribute of the stateMachine module to 1.
- Create a curve in your scene.
- Add a follow curve module.
- Type the curve path or select it with the buttons on the right.
- Rewind your scene and the press play. The agent will follow your curve.
- You can also animate the curve and set the max distance and weight to change the curve influence.
Curve field behaviour module
The curve field generates a vector field using multiple curves so the agents are affected by the direction of multiple curves
- Create an agent group.
- Add a grid layout module, Set the size to (3,0,3).
- Add state machine module. Set the "state" attribute of the stateMachine module to 1.
- Create some curves in your scene.
- Add a curve field module.
- Add few entries in the curve list and assign your curves.
- Set max distance attribute to 500.
- Rewind your scene and the press play. The agents will follow the curves you created.
Mesh avoidance behaviour module
With this module you can avoid the intersection between agents and geometries in your scene
- Create an agent group
- Add a grid layout module
- Add state machine module. Set the "state" attribute of the stateMachine module to 1
- Create a curve in your scene
- Add a follow curve module
- Assign the curve to the curve parameter.
- Create a cube or some geo in your scene. If you are going to create multiple geos, please remember to combine all together.
- Add a mesh avoidance module.
- Assign the mesh to the mesh parameter.
- Rewind your scene and the press play. The agent will follow the curve you created avoiding the geos
Please remember that the module are evaluated from top to down. In this case the mesh avoidance should be at the bottom because it should override the direction that comes from the follow curve module. If you put the mesh avoidance module before the follow curve you will have a wrong behaviour because the follow curve will override the directions from the mesh avoidance module
There are others directional modules, please have a look to the behaviour modules reference section
Area trigger behaviour module
With this module you can change a metadata value when the agents enter inside a mesh area
- Create an agent group
- Add a grid layout module and set the size to (5,0,5)
- Add state machine module. Set the "state" attribute of the stateMachine module to 1
- Create a curve in your scene
- Add a follow curve module
- Assign the curve to the curve parameter.
- Create a grid, scale it and put it in front of the agents
- Add a area trigger module
- Assign the mesh to the mesh attribute.
- Connect the grid translate,scale,rotate to the area trigger meshRotation/Scale/Translation parameters
- Set the metadata attribute in the area trigger module to state
- Set the intValue attribute in the area trigger module to 2 in this way the agents will change the state to 2
- Set the keepValue on so the agents will keep the new state value
- Add another area trigger module and create and attach a new plane
- Inside the new area trigger module, set the metadata to frameRate and the doubleValue to 0.5, the keepValue to off.
- Set the Blend In Frame and Blend Out Frame attribute of the new trigger module to 10
- To add more variation to your simulation set the Random In and Random Out Delay to 5
- Rewind your scene and the press play. Now when the agents enter inside the first plane they'll start to run because the state metadata is changed to 2, then when they enters in the second plane they slow down but only inside the plane.
Network editor behaviour module
With this module you can edit the dependency graph of the agents, let's create a follow target behaviour with this module
- Create an agent group
- Add a grid layout module
- Add state machine module. Set the "state" attribute of the stateMachine module to 1
- Create a null and then at frame 0 move to (0,0,400) and add a keyframe, then at frame 50 move to (400,0,400) and add a keyframe, at frame 100 move to (400,0,0) and add a keyframe
- Select the agent group and add a network editor module
- Press the "Open Network Editor" button inside the module options
- In the network editor zoom in closer to the preBuildPose node.
- Press tab and type "ExposeVector3", select it form the list and press enter. This node expose an attribute to maya and a parameter in Houdini.
- Double click on the new node to expand it and change the name of the node to targetPosition in the inspector widget. The name of the expose node will become the name of the attribute/parameter.
- Now create a "getAgentVectorMetadata" node and connect the globalTime.out port to the time input of the new node, in the inspector set the "name" port to "position". This node read the position metadata of the agent
- Create a "SubtractVector" node. On the first input connect the targetPosition output node while on the second input connect the getAgentVectorMetadata output.
- Create a NormalizeVector node and connect the output of the SubtractVector node
- Create a setAgentVectorMetadata, set the name attribute to "direction" and then connect the output fo the normalizeVector node to the in port.
- Connect the out port of the setAgentVectorMetadata node the the first input of the preBuildPoseNode.
- Form the File menu click on Register to save your network, or press ctrl+s.
- Rewind the scene.
- Connect the null translation to the new targetPosition parameter.
- Rewind the scene and press play
For more information about the network editor module please look at this section.
)が必要とするすべてのノードを作成します。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モジュールのリファレンスページを確認してください。