著者

【Unity】ProbeAnchorを使用してメッシュごとの影の落ち方を統一する

はじめに

主にVRCでの話ですが、モデルのメッシュが別れているときにマテリアルごとの光源計算の指定がうまくいっていない影響で顔と体の影の入り具合に差ができてしまって、首のところに境目ができるという不具合がありました。この不具合が起きている時点でのマテリアルの設定はVRM標準のMtoonで、メッシュごとのマテリアル設定のValueは統一している状態です。

メッシュごとの光源計算がうまくいっていない
メッシュごとの光源計算がうまくいっていない。かわいくない!!(撮影に坪倉家をお借りしています)

この問題に関して@kuukuukon #空々神社社務所さんが「Home等の一部のワールドでアバターのメッシュごとに明るさが違う問題に対処する」としてドキュメントを公開しており、記載されていた方法で解決できました。全てのメッシュのSkinned Mesh Renderer コンポーネントのProbeAnchorに同じオブジェクトを指定して光源計算の基準点を統一することで解決します。なお、ここではVroid製のアバターを対象に説明しています。

ProbeAnchorを設定する

アバター内に空のゲームオブジェクトを作成し、Position Yを1にしてください。
全メッシュを選択してProbe Anchorに高さ1にしたからのゲームオブジェクトを指定してください。
(空のゲームオブジェクトじゃなくても、Body(顔)を指定するとかでも良い)
https://docs.google.com/document/d/1px69Ryms4wgxeNniAO4gDEPC-dTjmeIwFQQ7e18fp-A/edit#

参考ドキュメントから引用させていただきました。アバター内に空のゲームオブジェクトを作成し、Position Yを1にします。空のゲームオブジェクトの作成は、Hierarchyを右クリックでCreateEmptyです。名前を変更しても問題ないので私は「ProbeAnchor」としました。

ProbeAnchorの統一して明るさを揃える
ProbeAnchorを設置して高さ調整する。(※メガネになってるのは関係ありません)

ここで、設定中のモデルについての補足ですが、Hierarchyにあるのは、Vroidで作ったVRMをUniVRMで読み込んだあとVRM_Converter_for_VRChatでVRChat用にクローンしたものになります。Vroid上のいじり方次第で変わってくるかもしれませんが、この状態でのモデルプレハブ内でメッシュを含むのは、「Face」「Body」「Hair001」でした。これらを選択したあと、Lighting>AnchorOverride に作成したProbeAnchorをアタッチします。もし追加でアクセサリーなどをボーンの階層に追加していたりしたら、インスペクターでSkinner Mesh Rendererコンポーネントのあるものを探して、おなじようにLighting>AnchorOverride に作成したProbeAnchorを関連付けておくといいと思います。

ProbeAnchorの統一して明るさを揃える
メッシュオブジェクトのLighting>AnchorOverride に作成したProbeAnchorを放り込む。

 

おわりに

メッシュごとの光源計算がうまくいった
明るいところ。メッシュごとの光源計算がうまくいった。境目がない。
メッシュごとの光源計算がうまくいった
はい、かわいい。暗いところでもいい感じです。

 

 

この記事を書いた人

伊澄 理夢

伊澄 理夢 / イズミ リム / IZUMI Rhime
2017年3月からブロックチェーンに興味を持って以来、デザインの面から、"NEM"を通じて技術の普及に貢献できる道を探しています。
児童文学と純文学、哲学と現代思想、仏教と禅、黒い服と民族衣装が好きなINTROVERT(内向型)です。
大学ではデザインを学ぶ。