光の当たり方を調整するTips【VRChat技術情報】
顔だけ暗い、目が真っ暗になるなどの問題
テクスチャの画像上では顔と体の肌色は同じ色だが、光源の影響で色あいに段差ができている
光源とその影響に関する計算は、オブジェクト(メッシュ)ごとに行われます。
なので、顔と胴体のメッシュが分かれている場合、ワールドによっては画像のように顔と胴体の色が違うかのように表示されてしまいます。
フルスクラッチのアバターならば頭と胴体のメッシュを統合してしまう方法もありますし、そのような影響を受けにくいシェーダーに切り替える/書き換えるという方法もありますが、メッシュ統合は作業性が悪化しますし、シェーダーで対応するのも万能の解決策ではない上、技術的敷居が高いです。
でも実際には、Unity上で簡単な設定をするだけで、これらの問題を解決できます。
今回はその方法を紹介します。
今回は本当に簡単に設定できるので、Unityの知識が無い人でも分かるようにできる限り細かく説明します。
なにをいじれば良いか
3DモデルをUnityのHierarchyに放り込むと、いくつかのオブジェクトが入れ子状に配置されると思います。
初心者にはどれがメッシュにあたるのか理解しにくいと思いますので、まず見分け方を説明します。
これが私のアバターを読み込んだときの表示です。赤の点が打ってある物がメッシュのオブジェクトです。大体がアバターのオブジェクトの一番上の所に配置されているのが特徴です。しかし、3Dモデルによってはまれにアーマチュア(このアバターの場合Bonesと名前がつけられたオブジェクト内)の中にメッシュが格納されている場合もあるので注意して下さい。*1
見分け方は、Hierarchy上でそれぞれのオブジェクトをクリックしたときにInspector画面にでてくるコンポーネントの構成です。
Skinned Mesh Rendererというコンポーネントが配置されているオブジェクト、これがメッシュが格納されているオブジェクトとなります。
どういじればいいか
さて、先ほど上で示した画像はSkinned Mesh Rendererのデフォルト設定です。お手元のアバターのメッシュの設定も上のようになっているのではないでしょうか。
今回は光の当たり方を調整したいので、当然Lightingの項目をいじっていくことになります。
主にいじるのは、「Anchor Override」「Cast Shadows」「Receive Shadows」です。*2
・顔と胴体の光の当たり方を一緒にしたい場合
FaceのメッシュとBodyのメッシュの光の当たり方を一緒にしたい場合、上の画像のようにします。
Anchor Overrideの項目に、BodyのオブジェクトをD&Dで指定しました。
(あとで判明したのですが、ここにはメッシュのオブジェクトではなく、アーマチュアの適当なオブジェクトHeadやChest等を入れたほうがライティングが安定します。)
こうすることでFaceのメッシュはBodyのメッシュと同じ座標を基準に光の当たり方を計算するようになるので、胴体と顔の色あいに段差ができることは無くなります。
・目が異常に暗くなってしまうことがある場合
こちらは原因が様々考えられますが、デフォルトでは影の影響を受ける設定になっているため、これによって眼球(アニメ調の場合ほとんどがパラボナアンテナ型の凹面)がまるまる影におさまってしまい、その結果黒く変色していることが原因の一つとして考えられます。そこで、ここでは眼球に限り影が発生しないように設定してしまいます。
Cast ShadowsとReceive Shadowsを両方オフにしました。これで影の影響を受けなくなります。Cast Shadowsは影を発生させるかどうかなので、おそらく直接は関係ありませんが、念のためという意味と、どうせ奥まっているメッシュの影の計算をしてもリソースの無駄なのでオフにしました。
こんな感じに色合いに段差ができなくなりました。めでたし。