Legacy/Mobile シェーダーを使うとライトマップにゴミが入る

高橋 啓治郎 -

(下記の内容は執筆時点での状況を記したものであり、既に修正されている可能性もあります。)

Unity 5 において、Legacy あるいは Mobile シェーダーと、ベイクされたライトマップを組み合わせて使用すると、ライトマップにゴミのようなものが入ることがあります。詳しく言うと、ライトマップの UV がズレて、キワの部分に黒が染み出したような見た目になります。

この現象は Editor 上では再現しないのが特徴で、OpenGL ES デバイス上で実行した場合のみ発生します(ゆえに Metal 対応の iOS デバイス上では再現しません)。

この問題は、Legacy シェーダーと Mobile シェーダーの一部が Unity 5 のライトマップ方式に対応していないために生じています。具体的には、Unity 4 と Unity 5 ではライトマップ UV の座標変換の式が異なっており、そのために UV がズレてしまっています。Surface shader を使用していれば、この辺りの差異は自動的に吸収されますが、vertex/fragment shader を直書きしているようなケースでは注意が必要です(公式が気をつけろという話ですが……)。

シェーダーを適切に書き直すことによって、この問題は回避が可能です。例えば "Mobile/Unlit (Supports Lightmap)" を対応させるには、こちらのシェーダーのような内容に変更します。

他にご質問がございましたら、リクエストを送信してください

0 コメント

ログインしてコメントを残してください。
Powered by Zendesk