HK-87@UEのブログ -10ページ目

HK-87@UEのブログ

UE4で理想のVRゲームを作るまでの軌跡

前回から大分期間が開いてしまった。

その間、ワールドデータのシリアライズ/デシリアライズ処理を整えたり
ObjectId を GUID 化したり、システム的な整えをいろいろ対応した。
セーブ/ロードが出来るようになったので、ようやく継続的にプレイすることが可能になった。
つかれた・・・

ので、そろそろ新しいゲーム要素を実装したい!
どこから手を付けようか。

----
Control Rig を勉強する。
・・・また整え作業だけど気にしない。


この動画に従いながらデータを作ってみる。

(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 とを繋ぐのにまぁまぁ苦労したけれど
とりあえず目的は達成できた気がする。


動画