VRChatパブリックログ

VRChatでの体験を紹介します

任意のメッシュを自身にだけ不可視にする方法【VRChat技術情報】

自分のメッシュが邪魔で前が見えない問題

f:id:mekokka:20180807134652p:plain
お分かりいただけただろうか・・・。アバターの目の前のキューブ、鏡に映っていても自分には見えないのである!

よくボクセルアバター作成者から、「カメラの位置(VRC SDKのView Positionのこと)を工夫しないと自分のメッシュで前が見えなくなる。でもカメラずらしすぎて操作性が悪い」という話を聞きます。今回はそのような場合に、自分の任意のメッシュを自分のカメラにのみ映さないようにする方法を紹介します。

今回の情報は、Unityのテクニックと言うより、VRChatの隠れ仕様のようです。(詳しくないのでよく分かりません)

今回は私のフレンドのXacsさん(@xacs_i)がこの仕様を発見して教えてくれました。

隠れ仕様解説

まず上の画像のような自分に見えないキューブの再現方法を説明します。

f:id:mekokka:20180807135516p:plain

こうです。妙なことは全くしていません。アバターのアーマチュアのHeadボーンのオブジェクトの下にCubeを作って置いただけです。*1

このままアップロードすれば、自分には見えず、他人からは見えるオブジェクト(メッシュ)になります。

つまり、Headボーンのオブジェクトの下にメッシュを置くと、自身のカメラからのみ不可視になると言うことです。

これは自身の一人称カメラからのみの不可視化で、鏡とか、例えばVRモードの自撮り用カメラなどには通常通り映ります。

これをどうアバターに活用するのか?

冒頭でも例に出しましたが、カメラに自分の顔のメッシュや前髪が映り込んでしまう問題の解決策になります。

f:id:mekokka:20180807140344p:plain

つまりこういうことです。頭周りのメッシュがカメラにかかってが邪魔な場合、邪魔なメッシュをHeadのオブジェクト以下に移動させましょう。(このアバターの場合Eye、Face、Hairのメッシュ。Bodyは自分の腕や体なので表示させたまま)

このとき注意が必要です。メッシュのオブジェクトをアーマチュア内に移動させるとPrefabが編集されます。アバターを構成している元データの方を編集することになります。同じプロジェクトファイルで同じ元データを参照しているアバターは全て影響を受けて同じ変更が加わります。(これがPrefabの機能です)

念のためあらかじめPrefabのバックアップを取っておくと良いと思います。バックアップの取り方はProject画面の該当ファイルを左クリックしてCtrl+Dです。

あるいは同じPrefabを参照しているアバターのうち、一つのアバターのみ変更したい場合はHierarchy上のアバターをProject画面にD&Dすれば新しいPrefabが生成され、そのアバターのみ新しいPrefabに紐付けされなおします。これで編集してもひとつのアバターにしか影響を及ぼさなくなります。

自分のメッシュが映り込まないようにView Positionを大きく動かすと、VR、デスクトップ共に操作性が著しく悪化します。この方法で頭の周りのメッシュを不可視化すれば、カメラの位置のZ座標は0でもよくなります。

ボクセルアバターの場合は恐らく全身一つのメッシュになっていることが多いと思いますが、頭周りの消したいメッシュをモデリングソフト上で分割しておけば、今回の方法で自分から不可視にすることができます。

ちなみに

この仕様の発見者のXacsさんはたばこの3Dモデルを販売しています。

100円と大変リーズナブルなので、「今回の情報で助かった~!」って人は以下の3Dモデルを購入することで本人に直接お礼ができます。いい時代ですね!

booth.pm

 

*1:Headの下に空のオブジェクトを作ってさらにその下にCubeを置いても同様でした。Head以下のどこかならいいようです