To synchronize agents you can use the "sync" modules. It is particularly useful with horse/rider setup or any other setup where you need to synchronize or constraint agents from different groups.
Let's see an example of a horse/rider setup.
Asset preparation
Since your agents will be synced by Atoms during the simulation, their animation clips should be synchronized before you export them to an animation clip file (i.e. Fbx).
A good practice is to add an extra joint to the horse and constrain the rider main pelvis to it. Alternatively you can bake the animation of the rider main pelvis and the copy it to the horse extra joint.
Export the animation clips as usual and load them inside Atoms alongside with your agent types.
Set the agent group order
Create two agent groups with a layout module (i.e. grid layout) and a clip reader or state machine module. On the first agent group set the "agentType" to "horse", and on the second one set it to "rider".
During the simulation Atoms computes sequentially the agent groups in the scene. In this case the agent group containing the horses should be computed first. In order to do that you should select the horse agent group and then the rider agent group (in this order). Then press the sync command from the Atoms shelf.
Under the hood a connection is made between the "message" attribute of the horse group and the "parentAgentGroup" attribute of the rider group.
Adding the sync module
The last step is to add the sync module to the rider agent group. This module copies some metadatas from the parent to the child agents. It also overrides the current layout module, for this reason you need to set the sync module "agentType" field to "rider". You must also set the "parentJoint" name (the driver joint) and the rider "joint" name (the driven joint).
Finally, you might as well add an offset and activate the keepOffset checkbox to maintain the child joint animation. If the keepOffset is off then the module applies a normal constraint without offset. If you need to copy more metadatas, expand the "metadata" list and add the metadata names you want copy from the parent agents.
Rewind the scene and you will see the riders constrained to the horses.
エージェントを同期させるためには "Sync"モジュールを使用することができます。これは、horse/riderのセットアップや、異なるグループのエージェントを同期またはコンストレイントする必要がある場合など、その他のセットアップ時に役立ちます。
horse/riderの設定の例を見てみましょう。
アセットの準備
エージェントは、シミュレーション実行中にAtomsによって同期されるため、アニメーションクリップは、Animation Clipファイル(Fbxなど)にエクスポートする前に同期させる必要があります。
良い練習は、horseに余分なジョイントを加えて、ライダーのメインとなるpelvisをコンストレイントすることです。または、ライダーのメインとなるpelvisのアニメーションをベイクして、それをhorseの余分なジョイントにコピーすることも可能です。
アニメーションクリップを通常どおりエクスポートし、それらをエージェントタイプと一緒にAtoms内にロードします。
エージェントグループの順番を設定する
Layoutモジュール(Grid Layout)とClip readerまたはState Machineモジュールを使用して2つのエージェントグループを作成します。最初のエージェントグループでは「Agent Type」を「horse」に設定し、2番目のエージェントグループでは「rider」に設定します。
シミュレーション実行中、Atomsは、シーン内のエージェントグループを順次計算します。この場合、horseを含むエージェントグループが最初に計算されます。
よって、riderのエージェントグループを選択する必要があります。パラメータエディタの一番下に移動し、「Parent Agent Group」パラメータ内にhorseのエージェントグループを設定します。
Syncモジュールを追加する
最後のステップは、Syncモジュールをriderのエージェントグループに追加することです。
このモジュールは、いくつかのメタデータを親から子のエージェントにコピーします。
現在のLayoutモジュールも上書きします。このため、Syncモジュールの「Agent Type」フィールドを「rider」に設定する必要があります。また、「parentJoint」の名前(driverジョイント)とriderの「joint」の名前(drivenジョイント)も設定する必要があります。
最後に、オフセットを追加して、KeepOffsetチェックボックスを有効にします。よって、子のジョイントアニメーションを維持することも可能です。KeepOffsetがオフの場合、モジュールはオフセットなしで通常のコンストレイントを適用します。さらに、メタデータをコピーする必要がある場合は、「metadata」リストを展開し、コピーしたいメタデータ名を親のエージェントから追加します。
シーンを巻き戻すと、riderがhorseにコンストレイントされていることが確認出来ます。