ブレンドシェイプの追加 - 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.