見出し画像

アバターのクロスプラットフォーム管理法

[2023/12/24更新] Blenderでの管理法を追加しました。

この記事はその2 Resonite Advent Calendar 2023の11日目の記事です。
10日目の記事は獅子座の人さんのQuest3+ALVRで指を動かすお話でした。わたしはQuest3を持ってませんが、未来を感じますね(執筆時点)。
12日目の記事はCj-bc/陽鞠莉桜さんの作成中のコントローラーベースのキーボードについてとかの予定です。現状のVRでのテキスト入力はとても大変なので、興味深いですね。

こんにちは。

昨今ではメタバースとも呼ばれるVRSNSの空間で多くのユーザーが様々に生活しています。
ある人はワールドを探索したり、ある人はお着替えを楽しんだり、またある人はただお喋りに興じたり……

そんなVRSNS空間ですが、そこに入るためのプラットフォームにはいくつかの種類があります。

例えば、最も知名度が高く、Unityを使用した多くのコンテンツを有するVRChat。

スマホでも参加可能な国産VRSNSであるcluster。

そしてゲーム空間内での多彩なコンテンツ共有・編集が可能なResonite。

その他バーチャルキャストやNeosVRなど、さまざまなVRSNSのプラットフォームが存在します。
上記でそれぞれ一言ずつ述べたように、それぞれのプラットフォームに様々な特色があります。

そんな中で、様々なプラットフォームを相互に行き来し、それぞれの用途に応じたプラットフォームで活動するという考え方があります。
複数のプラットフォームを相互に行き来するVRSNS空間(メタバース)は"オープンメタバース"と呼ばれています。

技術的な制限によって"ひとつの万能なメタバース"の実現が難しい現状において、この"オープンメタバース"の考え方は一つの解決策といえます。

この"オープンメタバース"の実現において障壁の一つとなっているのが「アバターの相互運用」です。
アバターとはVRSNS空間におけるユーザーの"第二の身体"であり、ユーザーにとって極めて重要なものです。
「VRSNS空間の中のキャラクターを操作している」のではなく「自分がVRSNS空間に入っている」と感じることは、VRSNS空間を生活空間たらしめるための必須要素となります。
そのためにも、アバターが自分の身体であると感じることは重要であると言えます。
従って、"オープンメタバース"の実現にはユーザーが自分のアバターをそれぞれのプラットフォームで使用できる必要があります
しかし現状では、それぞれのプラットフォームでアバターのアップロード方法が異なり、それぞれの対応が必要となっています。

さらに、アバターの相互運用においてはアバターの改変方法についても考える必要があります。
現在のVRSNSでは、購入などで入手したアバターをそのまま使用するのではなく、自分好みに改変するユーザーが多く存在します。
例えばアバターにアクセサリーを付けたり、テクスチャの色合いを自分のイメージカラーに変更したりするものが改変に相当します。
そのような改変を、複数のプラットフォームで運用しているアバターにどのように適用するかを考える必要があります。

そこで、この記事では一つのアバターを複数のプラットフォームで運用する場合の運用法について3つの方式を取り上げ、その利点と欠点について考えていきたいと思います。
この記事では例として主に販売アバターを改変してVRChat、cluster、Resoniteの3プラットフォームで相互運用する場合を考えていきます。
clusterではアバターをVRMと呼ばれるファイル形式でアップロードすることでそのアバターを使用できるようになるため、cluster対応とVRM対応はほぼ同義となります。
また、バーチャルキャストはclusterと同じくVRMが使用可能なので、clusterとほとんど同じ考え方が適用できると思います。


1. それぞれのプラットフォームで個別に管理

これはそれぞれのプラットフォームに対して個別に管理する方式です。
販売アバターを購入してダウンロードしたファイルを、それぞれのプラットフォーム専用の形式で個別にアップロード、改変します。

方式1のフローチャート

この方式の利点の1つに、作者が個別にプラットフォーム対応している場合はその設定をそのまま適用できることが挙げられます。
現在販売されているアバターの中には、「VRChat対応」や「VRM対応」、「Resonite対応」と表記されているものがあります。
このようなアバターにおいては、それぞれのプラットフォームに必要なアバター設定が既に適用されたファイルが同梱されています。
また、メニューからアクセサリーの表示/非表示を切り変えるなど、それぞれのプラットフォームで使用可能なギミックも設定されている場合があります。
この方式を用いることで、アバター作者が行った設定やギミックをそのまま適用して使用することが可能です。
プラットフォームそれぞれのアバター設定には、そのプラットフォーム専用の知識が必要となります。
あまり詳しくないプラットフォームに対してこれらの設定を自分で行うのは困難です。
そのため、もし複数のプラットフォームで使用することを前提にアバターを選ぶのであれば、それぞれのプラットフォームに対応したアバターを選び、対応ファイルを用いてこの方式で運用するのが最も手軽でしょう。

また、この方式のもう1つの利点として、改変を行った場合に各プラットフォーム専用の設定やギミックを維持できることが挙げられます。
先程も述べた通り、各プラットフォームの対応には専用のアバター設定が必要となります。
また、アバターに仕込むギミックや揺れ物設定もまた基本的にはプラットフォーム専用であり、そのままでは他のプラットフォームで使用できません。
この方式を用いれば、アバターに新たに改変を行った場合に元々設定していたそれぞれのプラットフォーム専用設定が維持されます。
そのため、プラットフォーム専用に拘った設定やギミックを仕込みたい場合はこの方式が望ましいでしょう。

その一方で、この方式の欠点として作業量が比較的多くなりがちなことが挙げられます。
アバター作者がプラットフォーム対応をしていない場合、FBXファイルなどからアバターセットアップを行う必要があるため、1つ目の恩恵を受けることができません。
また、改変を行う場合、それぞれのプラットフォームに対して改変作業を行うことになります。
例えばテクスチャ改変する場合は改変したテクスチャは使い回せるため、完全にn倍という訳ではありませんが、個別に作業を行うのは煩雑ではあります。
そのため、アバター改変の頻度が多く、かつそれをすべてのプラットフォームで使用したい場合は少し手間が多くなります。

2. VRMをメインに管理

これはVRMファイルをメインに管理・改変を行い、それぞれのプラットフォームに対して変換を行う方式です。

方式2のフローチャート

まずVRMとは"VRアプリケーション向けの人型3Dアバター(3Dモデル)データを扱うファイルフォーマット"です。

すなわち、VRMはアバターデータのファイル形式の一つで、様々なアプリケーションで汎用的に使用できることを目指した設計になっています。
VRMは汎用性を重視した設計のため、プラットフォームに依存するような設定は含まれていないものの、どのプラットフォームにも必要であると思われる視点位置や基本的な表情などの情報を含んでいます。
現在VRSNSではclusterとバーチャルキャストが標準でVRM対応しており、自分のアバターのVRMファイルを持っていれば、それをアップロードするだけですぐにアバターとして利用可能となります。
また、「VRM Converter for VRChat」と呼ばれるUnity拡張を用いることによって、VRMをVRChat用アバターへ変換することができます。

この「VRM Converter for VRChat」を使用することによって、VRM内の情報に基づいて基本的なVRChat用の設定を自動で行ってくれます。
さらに、このVRMはglTFと呼ばれる3Dモデルファイルをベースとしたフォーマットであり、VRMファイルの拡張子を.vrmから.glbに変えることでglTFのバイナリ版であるGLBファイルとして読み込むことができます。
Resoniteは標準でGLBのインポートに対応しているため、これを用いてVRMファイルの中の3Dモデルデータだけは取り込むことができます。
ただし、VRMのバージョンやボーン名の問題で拡張子を変更しただけではResoniteにうまくインポートできない場合もあるので、その場合は「VRM to GLB for Neos」と呼ばれるツールを用いて変換してみると良いでしょう。

この方式の利点はアバターを一括して管理・改変できることにあります。
VRMが汎用性を重視したフォーマットなだけあって、様々なプラットフォームにも比較的持ち込みやすい形式となっています。
そのため、VRM形式をメインとしてアバターを管理しておけば、標準でVRM対応していないプラットフォームであっても比較的少ない手間でセットアップすることができます。
また、VRMファイルに対して改変を施し、各プラットフォームへ持ち込むことで、比較的容易にそれぞれのプラットフォームに改変を適用することができます。
一度変換作業の流れを覚えてしまえば改変前後で変わることはほとんど無いため、それぞれのプラットフォームで改変内容を適用するよりは困難が少ないと考えられます。
何よりそれぞれのプラットフォームで別々にアバターを管理するのは大変なので、VRMのみで管理を行い、必要に応じてそれぞれのプラットフォームに変換することで管理を簡潔化することができます。
そのため、改変の頻度が高く、なおかつそれを複数のプラットフォームに適用したい場合にはこの方式がおすすめです。

VRMアバターの改変方法には2種類あります。
1つはUnityを使用せずにVRM専用の改変ツールを使用する方法です。
VRM専用の改変ツールがいくつか存在するので、これらを用いて基本的な改変を行うことができます。

もう1つはUniVRMを使用する方法です。
UniVRMはUnityでVRMファイルを読み書きする標準実装であり、これを用いてUnity上でVRMを編集することが可能です。
アバター作者がVRM対応していない場合はFBXなどから自分でVRMをセットアップすることになるため、UniVRMが必須となります。

この方式の欠点は各プラットフォーム専用の設定を変換時に毎回行う必要があることです。
VRMが汎用性を重視している一方で、各プラットフォーム専用の設定やギミックはVRMには含まれていません。
VRM標準対応のプラットフォームであればそのまま利用できますが、それ以外のプラットフォームではいくつかの設定作業が必要になります。
「VRM Converter for VRChat」では表情や揺れ物などの基本的なアバター情報を自動でVRChat用に設定してくれますが、Expression Menuなどの高度な設定を行いたい場合は変換後に行う必要があります。
また、ResoniteではglTFとして3Dモデルデータしか読み込むことができないため、アバタークリエイターを使用してアバターセットアップを行う必要があります。
さらに、VRChatやResoniteはアバターに複雑なギミックを仕込むこともできますが、それらもこの方式を採用する場合は毎回変換後に適用する必要があります。
そのため、ギミックを凝るよりは自分の姿のアバターを手軽に様々なプラットフォームで使いたい場合にこの方式が向いていると言えるでしょう。

3. Blenderで管理・改変する

これはBlender上でアバターを管理・改変し、それぞれのプラットフォームでセットアップする方式です。
販売アバターを購入してダウンロードしたFBXファイルをBlender上で改変し、それぞれのプラットフォーム専用の形式で個別にセットアップします。


方式3のフローチャート

この方式は方式2とよく似ていますが、VRMというアバターファイルではなくFBXやGLBという3Dモデルファイルで管理するため、性質が少し異なります。
方式2と比べたときの利点は確実性が高いことです。
VRChat SDKやVRM、Resoniteにはアバターとして使用できるモデルデータに制約があり、それに従っていない場合はセットアップ時に不具合が発生します。
これらはBlenderで予め修正しておくことが最も確実な回避法になります。
また、非対応衣装などの特殊な改変を行う際、Unity上でのTransformを用いた強引な改変に比べて不具合も起こりにくいです。

方式2と比べたときの欠点は方式1と同じく各プラットフォームでのセットアップが必要なことです。
アバター作者がプラットフォーム対応している場合はそのファイルから設定を再利用することもできますが、基本的にはそれぞれのプラットフォームに対してセットアップを最初からする必要があります。
VRMセットアップやそこから変換されるVRChatアバター設定をスキップできないため、方式2に比べて作業量が多くなります。
そのため、多少手間でも確実性を求めるならこの方式が向いていると言えます。

4. VRChat用アバターを変換する

これはUnity上のVRChat用アバターを変換して他プラットフォームに持ち込む方式です。

方式4のフローチャート

2の方式でも取り上げた「VRM Converter for VRChat」にはVRChat向けにセットアップされたアバターをVRMに変換する機能も含まれています。
これを用いてVRMファイルやGLBファイルをエクスポートし、他のプラットフォームに持ち込むことができます。

この方式の利点はVRChat用に施した設定や改変の一部をそのまま他のプラットフォームに適用できることです。
現在のVRSNSではVRChatが最も知名度が高く、またVRChatではアバター改変文化も盛んです。
VRChatのみでアバター改変を行った後に他のプラットフォームを知り、その姿を手軽にそのまま他プラットフォームに持ち込みたい場合にこの方式が視野に入るでしょう。
また、現在販売されているアバターの中にはまだVRChatのみの対応、すなわちVRM未対応のものも多いです。
このようなアバターに対して「VRM Converter for VRChat」を用いてVRM化することで、VRChat用アバターの設定の一部がVRMに引き継がれます。

この方式の欠点の1つ目に、変換した際に維持できる設定に限度があることが挙げられます。
上記の記事で「VRM Converter for VRChat」の作者が以下のように述べている通り、VRChat用アバターからVRMへの変換は簡易的な手法として実装されているようです。

FBXなどからセットアップする場合、VRChat向けにセットアップするのに比べ、VRMはよりかんたんにセットアップできます。
しかしながら、VRChat向けにセットアップ済みのアバターを手っ取り早くVRM化したいとか、UniVRMよくわからんというときは、この記事の手順を試してみてください。
細かく設定する場合、継続的にメンテナンスする場合は、FBXなどからセットアップすることをおすすめします。

VRChat用モデルを標準アバター形式「VRM」へ変換する #VRChat - Qiita

このため、揺れ物などの一部の設定は変換されず、VRMに引き継ぐことができません。
VRMとしてより詳細にセットアップしたい場合はVRChat用アバターを経由せずにUniVRMのみでセットアップするほうが望ましいでしょう。
また、Resoniteへはアバタークリエイターで別途設定が必要であるのは2の方式と同様です。

この方式の欠点の2つ目に、問題が発生したときの対応が困難である場合が多いことが挙げられます。
この方式を使用した場合によく見られる問題として、例えばシェイプキーが壊れる現象があります。
このような問題が発生したときに、他の手法に比べて解決法の模索が難航する場合が多いです。
原因の可能性の1つとしてUniVRMのバージョンが挙げられます。
本記事投稿直前のアップデートまではVRChat SDKはUnity2019.4にのみ対応していました。
このUnity2019.4は既にUnity Technologiesのサポートが終了しており、それに伴い最新のUniVRMでもサポートされていません。
VRChat SDKと同じプロジェクトにインポートする必要があるVRM Converter for VRChatはUnity2019.4で動かす必要があるため、最新のUniVRMを使うことができず、古いバージョンのUniVRMを使用することになります。
この古いバージョンのUniVRMは歴史的な事情で問題を抱えており、エクスポートされたVRMがglTF互換となっていない場合があります。
この辺りの事情は以下の記事が詳しいです。

この場合、最新のUniVRMを導入したUnityプロジェクトを通したり、上記の「VRM to GLB for Neos」を使用したりすることで解決する場合があります。
また、ユーザーがVRChat SDK上で行った改変が原因である可能性も考えられます。
現状Unityの扱いに慣れている/いないに関わらず、多くのVRChatユーザーが独自の手法でUnity上の改変を行っています。
そこで行ったVRChat用の改変が何らかの原因となり、「VRM Converter for VRChat」が上手くVRMやGLBに変換できなくなっている場合も考えられます。
そのような場合、改変を行った本人がVRMやResoniteの仕様に詳しくない限り問題の対処はほぼ不可能と言えます。
そのため、この方式を試して上手くいかない場合は諦めて1や2の方式を採用することも重要です。

以上、複数のVRSNSプラットフォームで同じアバターを運用する場合の管理法について3つ挙げてみました。
1つ目はそれぞれのプラットフォームで個別に管理する方式であり、改変の頻度が低かったりプラットフォーム毎の設定やギミックを拘りたい場合におすすめです。
また、アバター作者が対応しているプラットフォームに関してはセットアップの手間も省略できます。
2つ目はVRMをメインに管理する方式であり、改変の頻度が高かったりプラットフォーム毎の設定やギミックはそこそこで良い場合におすすめです。
アバター作者がVRM対応している場合はUnityを使わずに改変を行うこともできます。
3つ目はBlender上で管理する方式であり、方式2に似ていますが手間が多くても確実性を取りたい場合におすすめです。
4つ目はVRChat用アバターを変換する方式であり、VRChat用に改変したアバターを手軽に他のプラットフォームでも使用したい場合に試してみても良いでしょう。
もし複数のプラットフォームで活動することを前提にアバターを選ぶなら、最初から各プラットフォームに対応したアバターを選び、1の方式を使うのが最も手軽でおすすめです。

本記事はあくまでVRSNSの1ユーザーによって書かれたものなので、表現等が正確でない可能性があります。
もし問題等があれば、以下の連絡先までお知らせ下さい。

【連絡先】
Misskey: https://misskey.io/@tonby
Discord: tonby_oxide

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