ブレンドシェイプを追加する
AtomsRobot.maファイルを開いてロボットのヘッドを複製した後、メッシュを編集して複数の表情を作成しましょう。
次に、メッシュと元のヘッドを選択してブレンドシェイプデフォーマを作成します。
Meshをエクスポートする
Blend Shape Targetをエクスポートする必要があります。Variation Builderを使用すると、Atomsは、自動的にメッシュ内のブレンドシェイプデータをエクスポートします。
それらを手動でエクスポートしたい場合は、Atoms MenuからAtoms Mesh Exporterを開きます。Atoms > Export > Mesh exporter出力パスを設定した後、「Export Skin Weight」オプションをオンにします。
Skeleton Path File内で、AtomsMaya / dataフォルダーからatomsRobot.atomsskelを選択します。次に、ロボットのHipsジョイントを選択してRefreshボタンを押します。最後に、「Export Blend Shapes」オプションをオンにし、エクスポートしたいメッシュを選択して 「Export」ボタンを押します。このツールは、メッシュファイル内に各ターゲットのポイント、法線、ID、名前を自動的に書き込みます。
ターゲットメッシュをシーンから削除しないでください。ブレンドシェイプは、エクスポートされません。
メッシュの内容を確認したい場合は、ファイルをpythonまたはc ++でMapMetadataとして開くと、ブレンドシェイプデータは "BlendShapes"キー内に格納されます。
import AtomsCore mesh_file = "robot1_head_blend.geos" ark = AtomsCore.Archive() if ark.readFromFile(mesh_file): mesh = AtomsCore.MapMetadata() mesh.deserialise(ark) for geo in mesh.keys(): #iterate over each geo targets_data = mesh[geo]["blendShapes"] for i in range(len(targets_data)): target = targets_data[i] points = target["P"].value() normals = target["N"].value() id = target["id"].value() name = target["name"].value() print id, name
Meshをインポートする
新しいシーンを作成して、Robot Variation Tableをインポートします。Atoms メニューからAtoms > Variations > Import Variation jsonを実行します。
AtomsMaya \ data \ variationフォルダーからrobot.jsonファイルを選択します。これにより、ロボットのバリエーションテーブルがシーンにロードされます。
Atoms MenuからVariation Managerを開きます:
Atoms > Variations > Agents Variation Manager
左側の列から、atomsRobotを選択して、Geometryタブの中に入ります。robot1_headパスをエクスポートしたばかりのメッシュと置き換えます。
Ctrl + Sを押すか、WidgetメニューからFile > Register to Atomsを実行して変更を保存します。
バリエーションを設定する
- Agent Groupノードを作成します。
- Grid Layoutを追加して、Grid Sizeを(5,0,5)に設定します。
- State Machineモジュールを追加します。
- Variationモジュールを追加して、VariationNameアトリビュートを "Robot1"に設定します。
- Display TypeをVariationsに変更します。
- シーンを巻き戻します。
Targets Weightを設定する
Targets Weightは、Doubleメタデータによって制御されます。メタデータ名は次の規則に従います。AgentTypeName_VariationGeometry ame_TargetIndex
今回の場合、次のメタデータ名が有効です。
- atomsRobot_robot1_head_0
- atomsRobot_robot1_head_1
- atomsRobot_robot1_head_2
- atomsRobot_robot1_head_3
Target Indexは、Mayaブレンドシェイプデフォーマで使用される次数です。従って、0インデックスは最初のブレンドシェイプ、1インデックスは2番目のブレンドシェイプとなります。
AddMetadataモジュールを使用して、これらのメタデータを追加および制御できます。
- 「AddMetadata」Behaviourモジュールを追加します。
- nameアトリビュートをatomsRobot_robot1_head_0に設定します。
- typeアトリビュートをDoubleに設定します。
- double valueアトリビュートを1.0に設定します。
- シーンを巻き戻します。
atomRobot_robot1_head_1、atomsRobot_robot1_head_2などのメタデータを制御するために、同じエージェントグループに対して、さらにAddMetadataモジュールを追加してください。 doubleValueアトリビュートにキーフレームを追加して、ブレンドシェイプをアニメートすることも可能です。
Blend Shape Manager
ブレンドシェイプは、Blend Shape Managerモジュールを使用してより簡易的に扱うことができます。
AddMetadataモジュールをすべて削除し、 "BlendShapeManager"モジュールをエージェントグループに追加します。
BlendShapeManagerのオプションで、「Manage Blend Shapes」ボタンをクリックすると、右側のUIが表示されます。
そこから、エージェントグループに追加したいブレンドシェイプを選択することができます。ダブルクリックするか、リスト上部のボタンを使用して、ブレンドシェイプをselect/deselectすることができます。
バリエーションジオが多数存在する場合は、ツリー全体を表示するのに時間がかかる可能性があるため、「Expand」ボタンをクリックするときは注意してください。
右下隅のチェックボタンをクリックすると、ブレンドシェイプがBlendShapeManagerオプションの下に表示され、そこでアニメーション化することができます。
次のいずれかの場合、Blend Shape Manager UIは空になります。
- エージェントグループにエージェントが含まれていません。
- このエージェントグループに含まれ、エージェントタイプに使用可能なバリエーションはありません。
アニメーションの追加
より複雑なアニメーションまたはアニメーションサイクルをブレンドシェイプに追加するには、BlendShapesAnimモジュールを使用することができます。このモジュールを使用する前に、セットアップシーンからアニメーションカーブをいくつかエクスポートする必要があります。ブレンドシェイプを作成したatomsRobotシーンを開き、ブレンドシェイプデフォーマのTarget Weightにいくつかのキーフレームを追加します。
次に、Atomsメニューからロボットのheadを選択し、ブレンドシェイプのアニメーションエクスポータを開きます。
Atoms> Export > Blend shapes anim exporter
出力パスとフレーム範囲を設定し、ヘッドメッシュを選択して、Runボタンを押します。
Atomsシーンに戻り、BlendShapeManagerモジュールを削除します。
BlendShapesAnim Behaviourモジュールを追加し、BlendShapeAnimタブの下にある「Manage Animations」ボタンをクリックします。
「+」ボタンをクリックして、新しいアニメーションを追加します。「Geo」フィールドで「robot1_head」を選択して、先ほど、エクスポートしたアニメーションファイルへのパスを設定します。Propertyをloopのままにします(どのプロパティもブレンドシェイプアニメーションを1度だけ再生することはありません)。
もちろん、複数のアニメーションを追加することが可能ですが、この例では1つのアニメーションを使用します。
チェックボタンをクリックすると、このデータが "animData"パラメータ内で変換されることが確認できます。
Playボタンを押すと、ビューポート内でブレンドシェイプがループでアニメートされていることが確認できます。
再度、「Manage Animations」ボタンをクリックして、「Enable Trigger Metadata」チェックボックスをオンにします。メタデータの名前として「triggerAnim」と入力します。
AddMetadataモジュールを作成して、BlendShapesAnimモジュールの前に配置します。 nameアトリビュートをTriggerAnimに設定します。タイプをDoubleに変更し、DoubleValueを1.0に設定します。
シーンを巻き戻して、Playを押すと、結果は以前と完全に一致します。
メタデータを駆動するために、Area Triggerを使用しましょう。
最初に、State Machine内でエージェントのStateを1に変更した後、それらを動作して下さい。 AddMetadataモジュール内で、Double valueを0に変更します(Area Triggerモジュールが、この値を駆動します)。
次に、AreaTriggerモジュールを作成して、シーン内に平面を作成します。
平面をAreaTriggerモジュールに接続し(Translation/Rotate/Scaleを接続するように注意してください)、Metadata nameアトリビュートをTriggerAnimにして、Double valueを1.0にします。Blend inとoutを10にして、Random delay inとoutを5に設定します。
Area TriggerをBlendShapeAnimモジュールの上に移動します。
シーンを巻き戻して、Playを押します。
Copyright © 2017, Toolchefs LTD.