VMCAvatar MaterialChange

OVERVIEW

ビートセイバー内にアバターを表示するMOD[VMCAvatar]のサポートMODとして、本体だけでは有効にできなかったBloomを使用できるようにしたMOD

YEAR 2020

 ビートセイバー+アバター配信を行うのにあたって欠かせないアバター表示アプリ「バーチャルモーションキャプチャー」のアバターをゲーム内に表示するという画期的なMOD「VMCAvatar」が発表されました。

 しかし、使用するためには、ゲーム設定で「BloomをOFF」にする必要があったが、これを行ってしまうとゲーム表現への影響があり、見た目が残念になってしまうことが多いという課題がありました。

※BloomONの場合のアバター表示


上記問題を解決するため、「VMCAvatar」の作者と会話を行い課題の定義を行いました。

[課題]

  • ビートセイバーのポストエフェクトが特殊でテクスチャのアルファチャンネル(透過率)が0(非表示側)意外だと光ってしまう。
  • ポストエフェクトの設定だけを操作することが難しく、パラメータだけでどうにかならない。
  • ポストエフェクトの設定を操作することで、ゲーム側の表現が壊れる可能性がある

 これらの課題を精査した結果「アルファチャンネル0でも描画されるシェーダーを作成」することで解決していくことに決めました。

※この段階ではUnity初心者・シェーダー未経験という状態でした。


バージョン<0.1.0~0.1.1>

VRM/MToonを自作のUnlit系シェーダーに変換。


[課題]

  • VRM/MToonとの見た目が違いすぎる。
  • 影の処理がないためのっぺりしてしまう。
  • 対応しきれないアバターがいる

バージョン<0.2.0~0.3.3>

 VRM/MToonを改造したシェーダーへ変更。これにより、見た目の問題は解決しましたが、Transparent系がアルファチャンネル使用しなければいけない関係上、Cutoff処理へ変更したため表現しきれないものがありました。

[課題]

  • Transparent系の設定はCutoffへ変更対応しているため、シースルー的な表現が使えない。
  • 眼鏡などのガラス表現ができない。

バージョン<0.4.0~0.4.1>

VRM/MToonを改造したシェーダーのTransparentへの完全対応。


 この時期にVMCAvatarとは別のVRMアバターを表示するMODが作成され、そちらのほうが透過対応のMToonを実装してきたため、透過対応しつつ光らせない方法があることを知り、独自に調査及び解決に乗り出すことにしました。(非公開MODのため方法の調査ができなかった。)

 結果として、対処の方法としては「1.通常通りのシェーダーでレンダリングする」「2.同じ範囲をアルファチャンネルだけ全て0で塗り替える」という方法を取ることで、MToonと同じ表現のまま発光しないシェーダーを作り上げる事ができました。(ただしレンダリングは1PASS増えるので負荷的には少し上がってしまう)

 また、後追いで同じことをしても真似をしただけになってしまうため、新機能としてEmissionに対応しました。
 ビートセイバーでEmissionに対応させようと思うと、普通の方法では表現をすることができないため、Emission演算の結果をアルファチャンネルに調整して書き込むことで再現しています。


[課題]

  • なし

バージョン<0.5.0~>

 これ以降は付加機能としての拡張がメインとなっています。


[要望1]VRM/MToon以外のシェーダーが使いたい。

 大体の配信者が使用しているアバターはVRChatでの使用を想定しているため、標準シェーダーがUTS2等のVRM非対応シェーダーとなっており、この設定をVRM/MToonに置き換える作業が必ず必要になっていました。しかし、同じ色味や表現をするのはとても難しく、どうにかして付属のシェーダーを使用することができないかと言われるようになりました。


[対応]販売アバターで多く使用されてるシェーダーを調査し、ビートセイバー対応シェーダーへすべて改造・Materialの設定情報をAssetBundleで持ち込む事としました。 

 以下のシェーダーをすべて専用シェーダー改造を行い対応することにしました。

  • Sunaoシェーダー
  • ユニティーちゃんトゥーンシェーダー
  • arktoon
  • Crystal Shader
  • glass Shader[おやすみやさんメガネシェーダー]
  • Seiso Shader
  • GamingEffect Shader
  • poiyomi Shader
  • Reflex Shader
  • ArxCharacterShaders
  • 3チャンネル式ArktoonShader


 ただし、VRMの設計理念に抵触しないよう、VRM本体に手を付けることはせず、ゲーム上で変換する事としました。

 そのため、AssetBundleを使用して必要ファイルを持ち込む必要があるため、Unity上の操作が必要になるが、使用ユーザーがUnityに詳しくない可能性が高いため、Unity拡張エディタで専用画面を用意し手順を簡略化を図り、また、初めての作業に戸惑わないよう、作業手順書の作成も行いました。

<Unity拡張エディタの画面>


[要望2]ゲーム中にキャリブレーションせずにお着換え又はアバター変更したい。

 MVの作成中や配信イベントの時に、曲に合わせた衣装のアバターを使用したいという要望があったが、既存の機能を使用してやるためには、VRM変更後必ずキャリブレーションをしなければいけないという課題がありました。


[対応]VRChatのAvatars3.0のようにお着換えできる機能を実装するために、Animationを追加する事にしました。

 Animationを追加することでお着換えを可能にし、また付帯効果でアクセサリー類の回転等のAnimationを追加したいという要望にも答える事がでました。



これらの成果に対する使用技術

  • HLSLシェーダー
  • Unity C#
  • AssetBundle 
  • Unity拡張エディタ


WEBSITE