[覚え書き](戦え...)rotation constraintとdynamicboneで作るケープ(戦え...!)

どうも、いとづみです
次回のモデリングまで期間が開きそうなので、現状で把握できているvrchatにおける比較的綺麗で、なおかclothを使用しないrotation constraintとdynamicboneを利用したケープの実装について纏めます

注意点として
現時点で実装を行ってきたケープ...というよりは肩に掛かる布状構造についてはいくつかの制約があり、「肘より丈の長い物」など、本ノートの内容では最適化しきれていない形状があります。ご了承ください。

目次

全体的な工程を列すると

1.ケープ形状の定義と作成
2.ボーンの入れ込み
3.blender上でのコンストレイント下付け
4.unity上へ
5.rotation constraintの組み込み
6.ダイナミックボーンの組み込み

これらの工程をitodumiのモデル「オリヴィア」を基軸にご紹介します。

1.ケープ形状の定義と作成

ケープのモデリングです
現状トポロジーについて最適解を見つけられてはいませんが
Tポーズでモデリングする際、腕を下した時にシワ形状を補完したい場合は
波状に割っておくと後で動きがいいかもしれません。

画像2

画像3

この時点で特筆すべき点はないですが、動作を自然にするために肘丈より短いデザインにしています。

2.ボーンの入れ込み

オリヴィアの場合、概ねこの通りになります

画像4

特筆すべき点として、sholderの子になっている主にケープとして振る舞う予定のボーンをsholderより内側から延ばす事です。
これによってコンストレイントによる挙動がある程度綺麗になります。

また、コンストレイントを用いるボーンは必ずロールを0にしておきましょう
後にunityへ持ち込んだ際、変な挙動をしにくくなります。

3.blender上でのコンストレイント下付け

緑色がupperarmから回転コンストレイントの値を貰ってくるボーンです
影響の数値については動かしながら適宜調整です
腕に近いボーンほど影響を強くすると比較的自然に動くように感じます。

画像5

4.5.unity上へ持ち込み、rotation constraintを付ける

blenderからfbxをエクスポートする際、コンストレイントを付けっぱなしだと変形した状態で出てきてしまうことがあるので、
一度コンストレイントをすべて隠してからエクスポートしましょう
unity諸々の設定を行った後、rotation constraintをblender上と同じように適応してください

6.ダイナミックボーンの組み込み

最後にダイナミックボーンを付けるのですが
「ダイナミックボーンとローテーションコンストレイントは喧嘩します」
ローテーションコンストレイントを付けたボーンより下の階層のボーンにダイナミックボーンを付けましょう。

IK問題

この記事を参考に設定した場合、ケープ構造ボーンはすべてsholderボーンの子であるため、sholderが動いた際に全てのケープ構造ボーンが追従してなんか強そうな見た目になってしまう事があると思います。

vrchat上でのsholderの挙動はプレイ時の端末によって大分異なってくるため、sholderのボーンの挙動が不安定=ケープの挙動が不安定という事に繋がってしまいます
各環境ごとのsholderボーンのおおまかな挙動の違いとしては

デスクトップ「めっちゃ動く」
三点トラッキング「それなりに動く」
フルトラッキング「あまり動かない」

対症療法的な解決策になりますが
ケープ下端のボーンにダイナミックボーンを割り当て、これをinsideコライダーで上がりすぎない程度に範囲制限する
事で自分は解決を図っています。

以上、読みにくい記事で申し訳ありませんでしたがitodumiのケープついて覚書となります。

この記事が気に入ったらサポートをしてみませんか?