VRChatにモデルを上げたら頭と体の明るさが違っていた

こんばんは、みんなはモデルつくってる? わたしはモデルを作ってたらこんな問題にブチ当たりました!

モデルの構造は画像のような感じでそれぞれ

01_head 頭部
02_kami 頭部の髪の毛
05_eye 目
11_body 体
11_body.001 首周りの毛の部分

になっていて、頭部に1つ、体に1つマテリアルを割り当てています。

モデルオブジェクト構造

最初は頭部のパラメータをいろいろいじっていたのですが解決できずにTwitterで助けを求めたら

という助言をいただきました

マテリアルコピー

とのことなので早速マテリアルのコピーを実施、 Inspecter右上の歯車アイコンから「Copy Material Parameter」を選択すると コピー先のマテリアルを選択できるので体用マテリアルから頭用マテリアルへ パラメータをコピーしました。

Unlit Intensity

で、Unlit Intensity、もしくはGI Intensityの値をがおかしいかもしれないという事なのですが そもそもUnlit Intensityとは何ぞや?ということでマニュアルを見てみました UnityChanToonShaderマニュアルより引用
GI Intensity

GI Intensity を0以上に設定することで、 UnityのLightingウィンドウ内で管理されているGIシステム、 特にライトプローブに対応します。 GI Intensity が1の時、 シーン内のGIの強度が100%となります。 v.2.0.6で機能強化をしましたので、ライトプローブを含むGIを利用したい場合には、 まず1を設定した後(Standard Shaderとほぼ同様の明るさになります)で、必要に応じて調整してください。
Unlit Intensity

シーン内に有効なリアルタイムディレクショナルライトが1灯もない時に、 Environment LightingのSource設定を元にシーンの明るさとカラーを求め、 それをUnlit Intensityの値でブーストして光源として使用します (本機能を 「アンビエントブレンディング」 と呼んでいます)。 デフォルトは1(アンビエントカラーをそのまま受ける)で、0にすると完全に消灯します。 本機能は環境カラーにマテリアルカラーを馴染ませたい時に使いますが、 より暗めに馴染ませたい場合は 0.5~1 程度 に設定し、 より明るくカラーを出したい場合は 1.5~2 程度 に設定するとよいでしょう。 (v.2.0.6より、最大値が4になりました。)

用語だらけでやたら難しいですがどうやら前者はあらかじめ計算したライティング情報を 動くモデルに反映させるためのパラメータで、後者は光源が存在しない場合でもモデルが 暗くなりすぎないようにするためのパラメータっぽいです。

ですがマテリアルコピーをしても変わらず・・・。 というところでこんなアドバイスをいただきました

どうやらVRChat(というかUnity)ではオブジェクトごとにある座標(オブジェクトの中心?)を基準にライティングをしているようなので(以下の図を参照)その基準となる座標をすべてのオブジェクトで同じものを指定してあげようということらしいです。

頭と体でそれぞれ緑の点を基準にライティング計算しているイメージ
頭と体でそれぞれ緑の点を基準にライティング計算しているイメージ

ということなのでライティングの基準となるオブジェクトを作ります。キャラクターオブジェクトの直下にEmptyオブジェクトを作り、高さを胸の辺りに設定します。

次に各メッシュオブジェクトのAnchorOverrideに今作ったEmptyオブジェクトを設定します。

で、設定を完了させてVRChatにアップロードすると見事頭と体で明るさが違うのが解消されました!やったね!

まとめ

  • ・複数マテリアルを使うときは基準となるマテリアルをコピーして作る
  • ・メッシュオブジェクトはあらかじめすべて結合して1つにしておく(VRChatもそうする事 を推奨している)
  • ・メッシュオブジェクトが複数になってしまう場合は全てのメッシュオブジェクトのAnchorOverrideに光源処理の基準となるオブジェクトを設定する。
TOP

コメントする

メールアドレスが公開されることはありません。

CAPTCHA