はじめに
こんにちは!lainと申します。
普段はCG,VR,アバター系の研究室でアバターのプロシージャル制御の研究をしている修士学生です。
この記事はVRChat近況報告会 Advent Calendar 2024の22日の記事です。
今回はスタンドアローンのQuestなどのPCを使わないVRChatに透明なアバターを持ち込む方法を解説していきます。
なぜわざわざ透明アバターをAndroid版VRCに持ち込もうと思ったかというと、研究で自分のアバターのモーションをリアルタイムに別の人型3Dモデルに適用しているのですが、自分のアバターを透明にしてあたかも別の人型3Dモデルを自分のアバターのように見せたかったからです。この辺のモーション適用の詳しい話はIwakenlab tech confでしています。
今回作成したアバターはboothにて無料で公開もしているのでもしよかったらお使いください。
Android版の制約
Android版VRChatはQuest単機のような強力でないスペックで動作させるためにいくつかの制約があります。
具体的にはshaderやポリゴン数に制限があります。詳しくはVRChatの公式ガイドをご覧ください。
半透明なshaderをAndroidで扱えないために、shaderをいじってAndroid向け透明アバターを作ることは不可能です。従ってshaderをいじるのではなく直接頂点数を極限まで減らすことで透明アバターを作ることにしました。
Blenderで頂点を減らす
Blenderのバージョンは後述するAdd onに合わせて3.1系を使用しました。
FBXファイルを使う場合はAdd onインストールの部分はスキップしてください。
まずはBlenderで頂点を削っていきます。今回はVRMアバターを利用するため、BlenderでVRMファイルを読み込む準備が必要です。VRM Add on for Blenderのサイトからお使いのBlenderバージョンに合わせてAdd onをダウンロードしてください。ダウンロードしたファイルは解凍せずBlenderのEdit>Preferences>Add-ons>Installからインストールしてください。その後File>import>.vrmからvrmファイルを読み込みます。
ここで1頂点を残して全削除したいところですが、実はアーマチュア情報も消してしまうとUnityでアバターアップロードはできるものの、VRChat上でロボットアバターになってしまいます。
従って、アーマチュアではなくメッシュを選択して頂点を減らしていきます。今回利用したVRoidサンプルモデルにおいてはこのような階層構造になっており、メッシュはBody(merged).bakedでした。
あとは1,2頂点を残して頂点を削っていきます。1ポリゴンは3頂点からなるため3頂点以上残すとメッシュが貼られ、目に見えてしまう可能性があります。
モデリングがゴリゴリにできる必要はありませんが、必要な基本操作はできる必要があります。Blenderを初めて触る人はzenさんのチュートリアル動画が分かりやすいので一度やっておくとおススメです。
ちなみにBlender上では、モデルの頂点数は簡単に確認することができます(参考)。
頂点を削除し終わったらあとはfile>export>vrmからファイルエクスポートするだけです!
Unityからアバターアップロード
後はいつも通りUnityからアバターアップロードをするだけです。
ただ、Unityは標準でvrmインポートができないため、UniVRMを導入する必要があります。
UPMかunitypackageからUniVRMを導入してください。
あとはvrmファイルをインポートし(vrmをprojectフォルダにドラッグアンドドラッグでいけます)、いつも通りアバターアップロードしましょう!(Androidにswitch platformをお忘れなく)
なにかアップロード画面でエラーがでたらfix allで治ると思ます。エラーが消えなかったり
VRChatで確認してロボットアバターだったりしたら、アーマチュアの親子関係が崩れている可能性があります。Benderからエクスポートする前にアーマチュアの親子関係が変わっていないか確認してみてください。
最後に
Androidで透明アバターを実現するために、BlenderでVRMファイルの頂点数を削り、Unityにエクスポートし、アバターアップロードするまでを見てきました。
一部分でも参考になったのなら幸いです。