Slide 1

Slide 1 text

2024/08/01 VRM Meetup #4 VRM LT大会! アバター配信 アプリ『Vフレット 』 でVRM 1.0対応をしてみた

Slide 2

Slide 2 text

なかじ @nkjzm ● VRとプログラミング が得意 ● 個人開発で「Vフレット」を作っている Unity / VR Engineer

Slide 3

Slide 3 text

アンケート 
 本日の参加者ってどんな属性ですか? 
 
 ● 開発者の方 
 ● VRoid / 3Dモデルを触ってる方 
 ● とりあえず興味があって来てみた方 


Slide 4

Slide 4 text

今日は開発者向けの話がメインですが、 雰囲気だけでも伝わるとうれしいです 🙏


Slide 5

Slide 5 text

VRMとは
 ● VR向けの3Dアバターファイルフォーマット 
 ○ アバターを VRM形式で作っておくと、いろいろなプラットフォームで使えるのが特徴 
 ○ 発表後にすごい勢いで流行った(会場の clusterでも採用している!) 
 ● VRM 0.x:2018年にベータ版として発表 
 ● VRM 1.0:2022年9月に正式版としてリリース 
 ○ 変数名として 「VRM10」表記が使われることが多い 
 ○ (個人的な印象) VRM 0.xほど浸透していない・・・? 


Slide 6

Slide 6 text

知ってるサービスの VRM 1.0 対応状況を調べてみた 
 
 
 2022年
 ● 9月
 ○ VRM 1.0リリース 
 ○ バーチャルキャスト 
 ● 11月
 ○ VMagicMirror
 2023年
 ● 3月
 ○ VRoid Studio
 ○ VDRAW
 ● 8月
 ○ LuppetX


Slide 7

Slide 7 text

知ってるサービスの VRM 1.0 対応状況を調べてみた 
 
 
 2022年
 ● 9月
 ○ VRM 1.0リリース 
 ○ バーチャルキャスト 
 ● 11月
 ○ VMagicMirror
 2023年
 ● 3月
 ○ VRoid Studio
 ○ VDRAW
 ● 8月
 ○ LuppetX
 ➡めちゃくちゃ対応進んでた

Slide 8

Slide 8 text

自分のアプリでも 
 VRM1.0 対応をやってみた 
 
 (未完了なので現時点の所感です 🙏)


Slide 9

Slide 9 text

Vフレットとは ● アバターを使ってギターの弾き語りができるアプリ 
 ● Windows / Mac 向けに Booth で配布中! 
 ● VRMアバター読み込みに対応 
 ○ プリセットアバター ○ PC内のVRMファイル ○ VRoid Hub連携 ● トラッキング不要、アバターと PCがあれば使える 
 ● 最近は YouTube ショートとかに使ってくれる人も 
 https://booth.pm/ja/items/3024741

Slide 10

Slide 10 text

VRoid SDK とは
 ● VRoid Hubと連携させる開発者向けライブラリ 
 ● Web(API)、Unity、Unreal Engineに対応(開発者登録が必要) 
 https://developer.vroid.com/sdk/ より

Slide 11

Slide 11 text

環境
 ● Unity 2021.3.35f1
 ● VRoid SDK for Unity 0.5.2 (2024/06/24)
 ○ アップデートのバージョンは 0.1.0
 ● UniVRM v0.122.0 (2024/05/10)
 ○ アップデート前: v0.89.0 
 ○ VRoid SDKに内包されている UniVRMを使用


Slide 12

Slide 12 text

このスライドがめちゃくちゃ参考になる 
 (ので抜粋して紹介します )
 UniVRM 利用アプリケーションの VRM 1.0 への移行について - Speaker Deck

Slide 13

Slide 13 text

UniVRM 利用アプリケーションの VRM 1.0 への移行について - Speaker Deck より

Slide 14

Slide 14 text

UniVRM 利用アプリケーションの VRM 1.0 への移行について - Speaker Deck より

Slide 15

Slide 15 text

UniVRM 利用アプリケーションの VRM 1.0 への移行について - Speaker Deck より

Slide 16

Slide 16 text

➡ 基本的にはリネームとか メンバアクセスの修正で⾏けそう UniVRM 利用アプリケーションの VRM 1.0 への移行について - Speaker Deck より

Slide 17

Slide 17 text

対応が簡単だった差分 
 ● モデル読み込み 
 ○ メソッド名が変わっただけで使い勝手は変更なし 
 ● VRM 0.x系の変換処理 
 ○ ほぼすべて自動で変換してくれるので、共存について考えることが少ない 
 ● 表情
 ○ 「VRMBlendShape」から「 Expression」に変わっただけ 
 ■ 例:BlendShapePreset → ExpressionPreset


Slide 18

Slide 18 text

対応が大変そうな差分 
 ● アクセス方法が変わっている箇所について 
 ○ 一部 MonoBehaviourとして提供されなくなった 
 ○ GetComponent()している箇所を、親のクラスなどのメンバ変数からを辿る必要がある 
 ● ライセンス 
 ○ 仕様として、意図的に 1:1 変換をしていない 
 ○ 0.x系ライセンスは 0.x系ライセンスとして表示する必要がある 
 ● ボーン
 ○ 正規化された?ボーン構造が変わった?らしい 
 ○ まだやっていないのでここが一番大変そう 


Slide 19

Slide 19 text

VRoid SDK の対応
 ● 基本的には専用の対応は不要だった 
 ○ メタデータは VRoid SDK独自の型で返ってくるので差分なし 
 ○ VRMをUnity上で3Dデータとして生成した型 RuntimeGltfInstance を
 ■ VRMファイル読み込みの場合は UniVRMから
 ■ VRoid Hub上のキャラクターの場合は VRoid SDKから
 ○ 読み込むという違いのみ 
 ● → アプリのVRM 1.0対応ができれば自動的に対応完了っぽい 


Slide 20

Slide 20 text

まとめ
 ● VRM 0.xから 1.0への互換性がかなり考慮されていて共存が可能 
 ● 型名が全体的に変更されているが、機械的に変換していける 
 ● ライセンス回りとボーン回りはちょっと大変そう 
 ● VRoidSDKへの対応は一瞬だった 


Slide 21

Slide 21 text

余談:困っていること 
 ● Vrm10Dataからサムネイルが取得できない取得の例 
 ● https://vrm.dev/api/vrm1_load/ によると、下記のように取得可能 
 
 
 ● 返ってくる値は nullではないが、 RawImage.textureに渡すと Missing になる
 ● もし何かわかる方がいたらぜひ教えてください 🙏
 using var loader = new Vrm10Importer(vrm); var texture2D = await loader.LoadVrmThumbnailAsync();

Slide 22

Slide 22 text

宣伝: VketRealに出展します! 8/4(日) 秋葉原 【B8】

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

ご清聴ありがとうございました! 


Slide 25

Slide 25 text

No content