前回から大分期間が開いてしまった。
その間、ワールドデータのシリアライズ/デシリアライズ処理を整えたり
ObjectId を GUID 化したり、システム的な整えをいろいろ対応した。
セーブ/ロードが出来るようになったので、ようやく継続的にプレイすることが可能になった。
つかれた・・・
ので、そろそろ新しいゲーム要素を実装したい!
どこから手を付けようか。
----
Control Rig を勉強する。
・・・また整え作業だけど気にしない。
- Using Control Rig in Unreal Engine
https://www.youtube.com/watch?v=y2WzNvJZk0E
この動画に従いながらデータを作ってみる。
(1) Control Rig プラグインの有効化
(2) SkeletalMesh を右クリックして、Create Control Rig
(3) Control Rig Editor を起動。My Blueprint タブを開いておく。
(4) Basic IK ノードを設定
・・・
あれ? 動画のようにうまくいかない。
IK繋ぐと骨が崩れる。なんでだろう?
ボーンの軸の向きがそろっていない?
+X 方向をボーン方向とするべきのようだ。
ひとまず骨を整えなおす。
Houdini状のJointの向きをどうすれば骨が+X方向になるのか確認。
Houdini -> UE4
+X -> -Y
+Y -> +Z
+Z -> +X
になるっぽい。
+X がボーン方向だとして、+Y はどっち向きにするのがよいのだろうか?
一般的なボーンの軸に関する情報はここが詳しかった。
https://backbone-studio.com/rignightv05-act/
とにかく統一されていればいいはず、ということで
- ボーン方向を +X (Primary Axis と呼ぶらしい。) (Houdini上では +Z)
- よく曲がる方向を + 値の回転になるようにする。(Houdini上では - 値回転) (Secondary Axis。所説宗派があるらしい。)
- つまり膝の裏方向が +Y (Houdini上では -X)
- 判断に迷うものは前後の一連のつながりに従う。
このルールでいこう。
・・・
うー、Houdiniでボーン方向にz軸を向けるのが、何気にめんどくさいぞ?
何かもっといい手はないのだろうか。
※-> 後で調べた。KineFX の Re-Orient Joints ノードが使えるかもしれない。けど今回使わなかったのでわからない。
----
とりあえずボーンの軸方向の整えが完了した。
-> まだ駄目だ。 Control Rig のIK が期待通り動かない。
なんで?
・・・
わかった。
Skeleton の Root のスケールが 100 倍になっているのが原因だった。
具体的には Basic IK ノードのボーンの長さを表す部分、
Item A Length, Item B Length の値を 0.0 に設定した時の自動判定が、
スケルトンルートのスケール値を考慮していないようだ。
いや、このスケルトンルートのスケール値 100。
前から気になっていたのだけれど、
普通に Houdini でモデル作ってUE4にインポートするとこうなってしまうんだよなぁ。
インポートのやりかた次第でなんとかなるのだろうか?
・・・
インポートに関連するパラメータの組み合わせをいろいろ試してみたけれど、無理っぽい?
結局FBX的には各座標値は変わらず、Scale 値の調整だけで実現されてしまう様子。
いや!きっと KineFX を通せば行けるはず!
・・・
出来た!
結論としてはこんな手順で実現できた。
- (1) Houdini 上では 1m ユニットでモデリングする。
- (2) Convert Units をオフにした Filmbox FBX ROP で .fbx を出力
- (3) Convert Units をオフにした FBX Character Import ノードで (2) の .fbx をインポート
- (4) 3つの出力をそれぞれ Transform ノードで 100 倍にスケーリング。(ここでtransform属性も100倍されてしまう)
- (5) 右2つの出力はさらに Rig Attribute Wrangle ノードで、transform を 0.01 倍にしてスケール値を 1.0 に戻す。
- (6) Convert Units をオフにした ROP FBX Character Output ノードで .fbx をエクスポート
- (7) Import Uniform Scale = 1.0, Convert Scene Unit オフ で UE4 にインポート
こう書くと手順は長く見えるけれど、(2) ~ (6) は .hda で 1ボタン化したので気にする必要はなし。
※ノードグラフはこんな感じ。
はぁ、
これでようやく Control Rig 作業に戻れる。
-----
よし。
ブレンドシェイプで表情を変える Control Rig を作ってみよう。
Houdiniでブレンドシェイプを追加。
-> OK
Ouch !。
変形が期待通りの大きさになっていない。
どうやらブレンドシェイプには KineFX での 100倍スケール加工が効いていない模様。
KineFX で BlendShape はどこに入っているんだ?
・・・
んー、わからん。
BlendShpae はまだ KineFX でも気軽に加工できなさそう?
ひとまず BlendShape だけは元形状の段階から 100 倍してしまうことにした。
今後の KineFX のバージョンアップに期待。
あと細かいところでは BlendShape の名前が ~_channel という名前になってしまうのが気になるけれど
実害はないのでまぁいいか。
・・・
その後も、BlendShape と ControlRig と AnimBP と AI とを繋ぐのにまぁまぁ苦労したけれど
とりあえず目的は達成できた気がする。
動画
ue4-master@ue4master80
UE4 Control Rig & NPC Facial Control. I successfully removed the root bone scale value of 100.0 using Houdini Kine… https://t.co/4cJcv0G1QN
2021年03月19日 19:48