#15 UniVRM1.0 draft を試してみる
YATTA!駆動開発の第15回。UniVRM1.0draftとVRM1.0の試し方について
https://gyazo.com/57003da19818f25b0f5f1c9eac75fd52
基本情報
前回:#14 WebXRアプリをMetachromiumを使ってVRゲームにオーバレイする
次回:#16 VRoidのTシャツ用テクスチャ作成支援ツールを作ってみる
UniVRM1.0のリポジトリ
VRM1.0の仕様について
!.icon注意点
UniVRM1.0 draft は仕様が変更される可能性高いため、正式版が出るまではプロダクト等で使用しないでください。
https://github.com/vrm-c/UniVRM_1_0#univrm-10-draft
UniVRM1.0 draft で出力したVRMは流通させないでください。
仕様についての混乱の元になります。
このページの内容は古い情報になっている可能性が高いです。
Scrapboxのテロメアを参照して、編集された日時を確認してください。
UniVRM1.0 draftのインポート
Unity2019.4以降でプロジェクトを作成します。
Unity 2019.4.6f1 を使用しました。
PackageManager からインポート
AddPackage from git URL から以下のURLを入力します。
https://github.com/vrm-c/UniVRM_1_0.git?path=/Assets/Vrm10#20200831
https://github.com/vrm-c/UniVRM.git?path=/Assets/VRMShaders#v0.56.0
https://gyazo.com/7a9cfd5b011e721f55e87cfe8f72de76
VRM1.0 draft の変更点を試してみる
コンストレイント
ソースの移動や回転に追従させたり出来るコンストレイントが追加されています。
https://gyazo.com/9c10036933f047b84bf8fc7011878cfc
位置コンストレイント
Position Constraint はソースとなるノードの位置の変化に対して追従させることができます。
UniVRM10\Components\Constraint\VRMPositionConstraint.cs
図では水色のシリンダーに対して適用しています。
対象のノードに対しVRM Position Constraint コンポーネントを追加します。
ソースを左手のノードに設定してます。
https://gyazo.com/c7c4f7fd3ddc43b102eae7e31eff6e0e
この状態で手を動かすと手の位置に追従しますが、回転はしないことがわかります。
https://gyazo.com/b2f8405f0694490b03cb15215c863256https://gyazo.com/57003da19818f25b0f5f1c9eac75fd52
回転コンストレイント
Rotation Constraint はソースとなるノードの姿勢の変化(回転)に対して追従させることができます。
UniVRM10\Components\Constraint\VRMRotationConstraint.cs
対象のノードに対しVRM Position Constraint コンポーネントを追加します。
ソースを左手のノードに設定してます。
https://gyazo.com/c7c4f7fd3ddc43b102eae7e31eff6e0e
この状態で手を動かすと手の回転に追従しますが、移動はしないことがわかります。
https://gyazo.com/f42e4001ba55c8a39c643153aef956dbhttps://gyazo.com/32acaa1d2b1403634e50a91cc026b44c
Source Coordinate をLocalに変更するとソースのローカルな回転にのみ追従します
左手首をソースとした時、肩を動かして手の向きを変更しても追従しません。
左手の向きを直接を変更すると回転する
https://gyazo.com/4f29f61accc0551fa3a7fd830a193d52
Aim Constraint
WIP でした
コンストレイントによって手のねじれを分散して腕に適用させたり出来るほか、道具や装飾品の表現の幅も広がると思います。
コンストレイントに関するissue
コンストレイントをサポートしてほしい · Issue #6 · vrm-c/vrm-specification
表情排他フラグ
現状だと目や口の動きのモデルで喜怒哀楽の表情と瞬きや口パクを同時に適用するとモデルの表情が形状が破綻してしまうことがあります。
ignore Blinkなどのフラグを設定することで特定の表情時に瞬きや口パクを無効化することができます。
例えばJOYの表情とBlinkとOhをすべて同時に1にすると破綻してしまうことがあります
口や目が変化しすぎてしまう
https://gyazo.com/19a806deca9991ed55261686ae0191a6https://gyazo.com/7244455426c05284fff94dec19eb967f
このような場合Joyの表情の排他設定を変更します。
BlendShapeの設定からAdvancedを開いて以下の項目にチェックを入れます。
Ignore Blink
瞬きを無効化
Igonre Mouth
口パク(リップシンク)を無効化
https://gyazo.com/a031ef816a9d186a03028a266fc845ce
Joyの表情が0でないときに口パクや瞬きが無視されます
https://gyazo.com/21755de895b39d5a087257c3dccecc45
kawaii
これによって特定の表情時に口パクや瞬きを無効化できるのでフェイスキャプチャアプリを使う時などで役立ちそうです
モデル側がその情報を持てるのがうれしい
アプリごとで設定する必要がないので
BlendShapeに関するissue
BlendShapeProxyの現状の問題点と解決案 · Issue #4 · vrm-c/vrm-specification
これ以外にもSpringboneのコライダーにカプセルコライダーを設定できるようになっています。
UniVRM1.0draftでの新機能の試し方についてやり方を書いてみました。
UniVRM0.xでアバターのセットアップをしている方などにぜひ試してみて欲しいです。
またフィードバックも募集されています。
https://github.com/vrm-c/vrm-specification/issues
Twitter #VRMなんもわからん でツイート
次は#16 VRoidのTシャツ用テクスチャ作成支援ツールを作ってみる
参考
VRM1.0の仕様
VRM 1.0で使用可能になるConstraintについて
xR Developers Community Conference - connpass
BlendShapeの仕様
DO NOT MERGE 1.0-draft Proposal of VRMC_constraints by FMS-Cat · Pull Request #144 · vrm-c/vrm-specification