【VRChat】VRChatのアバターに鏡を持たせてみた

こんばんは、kroです!
アバターに鏡を持たせることに成功したので手順をご紹介します!

概要

鏡と言いましたが、実際にはカメラレンダーテクスチャを使用しています。

Render Texture は、ランタイムで作成・更新される特殊な Texture です。使用するには、まず新しいレンダーテクスチャを作成し、カメラ の 1 つを指定して、そこにレンダリングします。これで、通常のテクスチャのように、Material 内のレンダーテクスチャを使用できます。

つまりどういうことかというと…

1.カメラの映像をレンダーテクスチャに反映
2.マテリアルにテクスチャを割当(通常のUnlit/Textureと同様)
3.3Dオブジェクト(Quad)にマテリアルを割当
4.カメラの位置とオブジェクトの位置を重ねる

という方法で鏡のようなものを実現しているわけです。
なお、Render Textureはフレンドにしか表示されません。

設定方法

それでは早速設定を見ていきましょう!

オブジェクトの作成

ヒエラルキーに作成するもの
・カメラ
・Quad
プロジェクトに作成するもの
・Render Texture
・マテリアル
これで準備は完了です。

設定

作成したオブジェクトの設定をしていきます。
1.カメラ
Target Texture→作成したRender Textureを割当
Culling Mask→UIを除外
Audio Listener→Remove Componentで削除
Clippng Plane/Near→どれだけ近くを描画できるか。私は0.01にしています。

2.マテリアル
Shader→Unlit/TextureにしてRender Textureを割り当て

3.Quad
Mesh Collider→Remove Componentで削除
Material→作成したマテリアルを割当

4.Render Texture
Size→ピクセル数の設定なのでお好みで。

設定は以上です。

位置調整

ここまでくればQuadに映像が表示されているかと思いますのでもう少しです!

1.カメラとQuadの位置関係の調整
鏡にするためには、Quadの中心にカメラを配置する必要があります。
カメラとQuadのPositionを同じにし、QuadのRotation Yを180にするとちょうどいいです。
※わかりやすいようにCubeを置いて映り方を確認しています。
※Positionは0,0,0の方が良いかもしれません。

2.カメラとQuadをまとめる
Create Emptyで空のオブジェクトを作り、その中にいれましょう。
こうすることでまとめて移動することができるようになります。

ここまでで鏡自体は完成です!

アニメーションの設定

アニメーションの設定は下記の記事が非常に参考になりますので簡潔にいきます。
アニメーションオーバーライドで物を取り出そう!

ポイントは、オブジェクトを非表示にするのを忘れないことです。
ちなみに表示したままだと下記のような警告が出て、自分以外から見えなくなります。

というわけで作成していきます。
位置はこんな感じ…?

アニメーションはこんな感じ

*************************************************************************
2018/8/29追記
アップロード時点ではインスペクター内のカメラもオフにしないとダメでした!
申し訳ございません…

ここのチェックを外して…

アニメーションに追加します。

*************************************************************************

じゃーん!

怒り顔でもミコちゃんはかわいい
ちょっと画質が悪いのでレンダーテクスチャのサイズを変更したほうがよさそうです。

さいごに

いかがだったでしょうか?
今回はQuadで作りましたが、他のものに割り当てたり色々活用できそうです。
ぜひ皆さんもチャレンジしてみてくださいね!

それではよきVRChatライフを~