ブレンドシェイプを追加する

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.