@kotauchisunsun
個人でVRMメタバース VZero を作ってみた。
自己紹介
● @kotauchisunsun
● 本業サーバーサイドエンジニア
● 趣味XRエンジニア
● FaceVTuberの開発
○ 誰でも簡単にVTuberになれるWebアプリ(2018/3)
● オープンソースの10点トラッキングシステム
● Qiitaに技術記事を執筆
VZeroの紹介
● ブラウザで動くVRMアバターのメタバース(もどき)
○ VRMアバター機能
○ ボイスチャット
○ テキストチャット
https://facevtuber.com/vzero/index.html
なぜVZeroを作ったか?
● 暇つぶし
● ONE JAPAN HACKATHON 2020参加
→コロナの影響でオンライン開催
→1週間の準備期間
→割となんでも作れるなぁ
● なんかcluster流行ってるなぁ。
● 最近、Unity力上がってきたし、作れるかなぁ。
→作った。
初期のプロトタイプ
音声通信・ビデオチャット部分はTwilio
アバターは組み込みモデルのみ
→VRM対応し公開したのがVZero
クライアントの技術構成
https://qiita.com/kotauchisunsun/items/e
40d23997a8e3f63e3d4
WebSocket
サーバー・オンライン同期部分は自作
オンラインゲーム系のライブラリは不使用
サーバー構成
データ入稿サーバー
Webサーバー
VRM配信サーバー
ゲームサーバー
アバターぶっこぬきについて
Storage
VRM
VRM
Memory
VRM
①通信データのキャプチャ
②メモリー内のデータ
③高速化のために保存された
 キャッシュデータ
アバターぶっこぬきについて
Storage
VRM
VRM
Memory
VRM
①通信データのキャプチャ
②メモリー内のデータ
③高速化のために保存された
 キャッシュデータ
ブラウザは”自分に送られるデータ ”
は簡単に見ることが出来る。
→他人のアバターデータが
 ダウンロードしやすい。
アバターぶっこぬき防止策について
Memory
VRM
VRM
②VRMデータを鍵で暗号化
VRM
③暗号化したデータを
 サーバーへ送信
Memory
VRM
VRM
⑤VRMデータを鍵で復号化
VRM
④暗号化したデータを
 サーバーからダウンロード
暗号化されたデータなので、
キーを持たない人
(=VZero以外)がVRMデータ
として復号できない。
①鍵データを
 プログラムに埋め込む
技術的にハマったポイント
● UnityのWebGLビルドが遅い
 →1ビルドに20分程度かかる
 →動作チェックがしにくい
● マイクが動かない
 →UnityのWebGLビルドはマイク非対応(!)
 →ボイスチャットはSkywayのSDKをjslibで繋ぐ実装
 →動作確認がブラウザでしか出来ないがWebGLビルドが遅い
● 日本語入力できない
 →WebGLビルドではテキストボックスは英語のみ
 →ライブラリを入れて解決
https://baba-s.hatenablog.com/entry/2020/01/29/090000
 →動作確認がブラウザでしか出来ないがWebGLビルドが遅い
Unityでメタバースを作るということ
キーボード入力でキャラクターが動く
自分のPCで複数人でオンライン同期する
ネットワーク越しに複数人でオンライン同期する
● ゲームサーバー構築
● Photonに課金
自作のVRMアバターを同期させる
● VRM共有システムの構築
● VRoid Hub・TSO連携
一般の人が触れる
Unity/C#が触れる
Unityのサンプルが改造できる
ネットワーク /サーバーの知識
外部システムの知見
ボイスチャット機能
テキストチャット機能 ハードルや難所は多い。
自分のPCで動く
公開後の反響
● 11/3 23時頃:VZeroサービス公開
● 11/3 23時頃:Twitterにて告知
● 11/4 昼頃:サーバーダウン・リプレイス・復旧
(Firebaseの月間無料転送枠(10GB)超え)
● 11/4 夜頃:Twitter 100RT・100いいね達成
● 11/6 18時頃:Qiitaに技術記事公開
● 11/6 夜頃:Twitter 200RT・400いいね達成
● 11/7:Qiitaの日間トレンド入り(20LGTM)
● 11/8:Qiitaの日間トレンド3位(60LGTM)
● 11/9:Qiitaの日間トレンド1位(120LGTM)
● 11/10:Qiitaの週間トレンド入り(199LGTM)
アプリコンテストで企業賞受賞
※スマホ版は非公開
まとめ
● ブラウザで動くマルチプレイヤーのメタバース作った
● ゲームサーバーやオンラインのシステム自体も自作
● プロトタイプは1週間ぐらいで作れた
● UnityのWebGLビルド周りにはハマりどころが多かった
● メタバース作りには割と色んな知識が必要で大変は大変
● 作れれば2,3日は使われる

個人でVRMメタバースVZeroを作ってみた。