ブレンドシェイプの追加 - Houdini

AtomsRobot.hipファイルを開き、ロボットヘッドを複製してから、メッシュを編集して複数の表情を作成しましょう。

次に、メッシュと元のヘッドを選択して、ブレンドシェイプデフォーマを作成します。


メッシュをエクスポートする

ブレンドシェイプターゲットをエクスポートする必要があります。Variation Builderを使用すると、Atomsは自動的にメッシュ内のブレンドシェイプデータをエクスポートします。
それらを手動でエクスポートしたい場合は、AtomsメニューからAtoms Mesh Exporterを開きます。Atoms > Export > Mesh exporter


出力パスを設定してから、「Export Skin Weight」オプションをオンにします。
Skeleton Path File内で、AtomsMaya / Dataフォルダーから、atomsRobot.atomsskelを選択します。次に、ロボットのHipsジョイントを選択して、「Refresh」ボタンを押します。最後に「Export Blend Shapes」オプションをオンにし、エクスポートしたいメッシュを選択して「Export」ボタンを押します。このツールは、Mesh File内に各ターゲットのポイント、法線、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




メッシュのインポート

新しいシーンを作成して、ロボットバリエーションテーブルをインポートします。AtomsメニューからAtoms > Variations > Import Variation jsonを実行します。

AtomsHoudini \ 16.0.671 \ data \ variationフォルダーからrobot.jsonファイルを選択します。これにより、ロボットのバリエーションテーブルがシーンにロードされます。


Atomsメニューから、Variation Managerを開きます:

Atoms > Variations > Agents Variation Manager

左側の列から、atomsRobotを選択して、Geometryタブの中に入ります。

robot1_headパスをエクスポートしたばかりのメッシュと置き換えます。
Ctrl + Sを押すか、WigetメニューからFile > Register to Atomsを実行して変更を保存します。



バリエーションを設定する
  • エージェントグループノードを作成します。
  • Grid Layoutを追加して、Grid Sizeを5,0,5に設定します。
  • State Machineモジュールを追加します。
  • Variationモジュールを追加して、VariationNameアトリビュートを "Robot1"に設定します。
  • Display TypeをVariationに変更します。
  • シーンを巻き戻します。


ターゲットウェイトの設定

ターゲットウェイトは、Doubleメタデータによって制御されます。メタデータ名は、次の規則に従います。
AgentTypeName_VariationGeometry ame_TargetIndexの場合、次のメタデータ名が有効です。

  • atomsRobot_robot1_head_0
  • atomsRobot_robot1_head_1
  • atomsRobot_robot1_head_2
  • atomsRobot_robot1_head_3


ターゲットインデックスは、Houdiniブレンドシェイプデフォーマで使用される次数です。従って、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 UIは空になります。

  • エージェントグループにエージェントが含まれていません。
  • 該当するエージェントグループに含まれるエージェントタイプに使用できる、バリエーションはありません。




アニメーションの追加

より複雑なアニメーションまたはアニメーションサイクルをブレンドシェイプに追加する場合は、BlendShapesAnimモジュールを使用することができます。

このモジュールを使用する前に、セットアップシーンからアニメーションカーブをいくつかエクスポートする必要があります。ブレンドシェイプを作成した、atomsRobotシーンを開き、ブレンドシェイプデフォーマのターゲットウェイトにいくつかのキーフレームを追加します。


次に、Atomsメニューからロボットのheadを選択し、ブレンドシェイプのAnim Exporterを開きます。Atoms > Export > Blend shapes anim exporter

出力パスとフレーム範囲を設定し、headメッシュを選択して「Run」ボタンを押します。

Atomsシーンに戻り、BlendShapeManagerモジュールを削除します。
BlendShapesAnim Behaviourモジュールを追加し、BlendShapeAnimタブの下にある「Manage Animations」ボタンをクリックします。
「+」ボタンをクリックして、新しいアニメーションを追加し、「Geo」フィールドで「robot1_head」を選択して、先ほどエクスポートしたアニメーションファイルへのパスを設定します。プロパティをループのままにします(どのプロパティもブレンドシェイプアニメーションを一度だけ再生することはありません)。
もちろん、複数のアニメーションを追加することはできますが、この例では1つのアニメーションを使用します。
チェックボタンをクリックすると、このデータが "AnimData"パラメータ内で変換されるのがわかります。


Playボタンを押すと、ビューポート内でブレンドシェイプがループでアニメートされているのがわかります。
再度、「Manage Animations」ボタンをクリックして、「Enable Trigger Metadata」のチェックボックスをオンにします。メタデータの名前として「triggerAnim」と入力します。AddMetadataモジュールを作成して、BlendShapesAnimモジュールの前に配置します。 NameアトリビュートをTriggerAnimに設定し、タイプをDoubleに変更し、DoubleValueを1.0に設定します。
シーンを巻き戻して、Playを押すと、結果は以前と完全に一致します。


メタデータを駆動するためにArea Triggerを使用しましょう。

最初に、ステートマシン内でエージェントのStateを1に変更して、それらを動かしましょう。 AddMetadataモジュール内で、Double Valueを0に変更します(Area Triggerモジュールが、この値を駆動します)。
次に、AreaTriggerモジュールを作成し、シーン内に平面を作成します。平面をAreaTriggerモジュールに接続し(Translation/Rotation/Scaleも接続することに注意してください)、Metadata NameアトリビュートをTriggerAnimに、Double Valueを1.0に、Blend InとOutを10にします。また、Random Delay InとOutを5に設定します。 AreaTriggerをBlendShapeAnimモジュールの上に移動します。シーンを巻き戻して、Playを押します。

Copyright © 2017, Toolchefs LTD.