🐭

Houdini18.5でBlendShapeをFBXで書き出す

3 min read

前書き

Houdini18.5で, 導入されたKineFXにより, ジョイントに加えBlendShapeの取り扱いも容易になり, 最近のリリースではFBX形式でBlendShapeが書き出せるようになった

これまで

  • Houdini 18.5のリリース, KineFXの導入
  • 18.5.449ROP FBX Character Output SOPにBlendShapeの書き出しが実装
  • Houdini19でBlendShapeをセットアップするユーティリティノード(HDA)が追加予定(らしい)

環境

  • Platform: Fedora 33
  • Houdini: py3-18.5.462

サンプルプロジェクト

2つのFBXファイル(ベースメッシュ/ターゲットメッシュ)を入力にとり, Houdini内でBlendShapeを構築して, FBXとしてエクスポートするサンプル

KineFXでのBlendShapeの構造

Character Blend Shapes SOPROP FBX Character Output SOP等でBlendShapeを取り扱うために, Houdiniでは上記の図のようなデータ構造が使用されている

これらのAttributeを設定すれば, Houdini内でBlendShapeの定義が行え, FBXに書き出して外部ツールでそのまま利用することが可能

ベースメッシュの要件

ベースメッシュに必要なAttributesは以下

  • v@P (point attr)
  • s@name (prim attr)
    • Deformer(Skin)Nameを設定する意味合いがある

ターゲットメッシュの要件

ターゲットメッシュは Packed primitiveであることが求められる

Pack前に必要なAttributes

Packする前の, ターゲットメッシュに必要なAttributes

  • v@P (point attr)
  • i@id (point attr) (Optional)
    • 対応するベースメッシュの頂点番号を指定する
    • 存在しない場合, 自身の@ptnumが使用される

Pack後に必要なAttributes

Pack後のPrimitiveに必要なAttributes

  • s@blendshape_channel (prim attr)

    • Mayaにおける, Target Shapeに相当
    • FBXにおける, FbxSubDeformerに相当
    • Houdini内からBlendShapeの値を操作する際に使用される
  • s@blendshape_name (prim attr)

    • 外部ツールで使用される際の, TargetMesh自身の名前の定義
    • foo.bar.baz と設定して, MayaでFBXを読み込むと, bar.bazという名前のメッシュになる
  • s@name (prim attr)

    • ベースメッシュと同じs@nameである必要がある
    • Deformer(Skin)Nameを設定する意味合いがある

FBX書き出しの注意点

現時点(18.5.462)で確認できる問題について

Deformer名を指定できない

Mayaにおける, BlendShapeDeformer, FBXにおけるFbxDeformer の名前が, 常に{s@name}_blendshape というものになってしまう

参考