<aside>

※余談

個人的な考えですが、VRM0.Xモデルのユーザーは急いで1.0モデルで作り直す必要はないと思っています。

というのも揺れ物の設定方法がβより面倒になっている点、そもそもアプリ側で0.Xモデルを1.0モデルに自動変換できるためです。

公式ドキュメント整備が後回しになっているのもそういう事情がある気がしています(もっと設定しやすい形に落ち着いてから利用してもらいたい…みたいな)

</aside>

今回VRM1.0対応するにあたって特殊な対応を行いました。

それにより少々複雑になってしまったのでVRMの基本的な部分から簡単に解説します。

VRMには2つのバージョンの概念があります。(なんとなくShader名も混乱しそうなので載せておきます)

SDK 通称 Shader SDKバージョンの範囲
β版 UniVRM0.x MToon 現行の全てです(v0.100.0なら100以上だから1.0ではありません🙅‍♂️ )
正式版 VRM1.0 MToon10 リリース:v0.104.0~
1.0のβ時代も存在しています(v0.80.0~v0.103.2)

便宜上、β版SDKで出力したVRMを0.Xモデル、正式版SDKで出力したVRMを1.0モデルと呼称します。

ちなみに0.Xモデルでも正式版SDKで出力し直せば1.0モデルに変換できます(通常は不可逆ですが、非公式ならいくつか戻せるソフトもあるようです)

また正式版SDKを利用したアプリ上でも標準で1.0モデルに自動変換されます(後方互換があり1.0モデルにマイグレーション)。

このβ版/正式版の違いと、それぞれのSDK自体にもバージョンがあり平行して開発されているというのが現況です。もうややこしいですね

前提が分かったところで本アプリの対応状況は下記になります。

SDKバージョン:v0.120.0 ( ~v0.120.0 までのモデルであれば読み込めますが、なるべく近いバージョンにしておくことをお勧めします)

しかしあえて今回は、ユーザーがロード方法を選択できるようにβ版SDKのルートも残したまま対応しました。 (UniVRM0.Xが0.Xモード、VRM1.0が1,0モード)

赤丸の選択肢を残しました(多分やってるアプリほとんど無いと思います、通常であればメリットがほぼないので…)編集用

赤丸の選択肢を残しました(多分やってるアプリほとんど無いと思います、通常であればメリットがほぼないので…)編集用

モデルがどちらで作成されたか不明な場合は、とりあえず1.0モードでロードすればOKです(デフォルト)。

揺れ物に触れた時のコントローラー振動が必要な場合のみ0.xモードを利用してください。このために残したと言っても過言ではない

ロードモード別比較

項目 0.xモード 1.0モード 詳細
VRMSpringBone
Actorサイズ拡縮 0.Xモード:どうもScale1のままを前提とした揺れ物システムなようで、ランタイムにサイズ変更すると計算が破綻するようです。(SDK最新版では修正されたようなので、後日アップデートします)
1.0モード:サイズ変更後の再計算処理で破綻しなくなりました。
VRMSpringBone
PlayerHandと接触 コライダー設定済みモデルであれば手で接触できるようにしています。
特定部位は意図的に除外してあります、しょうがないね
VRMSpringBone
コントローラー振動 × 1.0で仕組みが別物になり接触判定の取得が困難になりました。(将来的に対応するかもしれません)
振動を感じたい方は0.XモードでLoadしてください。
Material / Shader 見た目重視の場合は1.0モードでLoadしてください。

0.Xモード:アプリ独自の簡易ToonShaderにフォールバックします。 またモデルに設定されたOutlineが無視されるので、設定画面にOutline調整スライダーを設けましたので好みで調整してください。

1.0モード:VRM標準のShaderを使用します(URP/MToon10) Lightの影響を受けるようになったので設定画面から好みで調整してください。 | | Lookat-Head | ※〇 | ※〇 | ※VMD利用中は適用されません | | Lookat-Eye | ※〇 | ※〇 | ※モデルによって目のLookat手法が異なり一部サポートできていません。(?) Bone方式:プリセットダンス〇 / VMD〇 BlendShape方式:プリセットダンス〇 / VMD〇 UV方式:未確認 | | vmd | 〇 | 〇 | | | vrma | - | - | 未定 |