【問題】上の画像には赤い2本の棒がある。これらは同じメッシュを使用している。
これらの棒に影をベイクした際、左の赤い棒にかかる影はハッキリしているが右の棒にかかる影はボケている。このこの違いが発生する理由を記入欄にry。
【答】左の棒はスケールを変更していない物を使用し、右の棒は引き延ばしたブロックを使用しているため。
オブジェクトを引き延ばした時、Lightmapも伸びる
これを引き起こしている要因は、オブジェクトのスケールを引き延ばした時でも、ライトマップのUVは変わらないという事です。
どういう事かといえば、ScenのBakedで比較すればわかります。左(青)が左の赤い棒、右(赤)が奥の赤い棒のライトマップ解像度です。
左のライトマップは正方形ですが、右のほうは引き延ばされているのが分かります。
右のライトマップはどのようにUV展開されるのかといえば、こんな感じで展開されます。これを見てわかる通り、UV的には6面正方形を展開しようとしています。
つまり、6面正方形として展開する予定のUVを引き延ばして展開しているため、影が引き延ばされた、汚い感じで表現されているわけです。
「拡大縮小」では問題は発生しない
ちなみに、この現象は「特定軸の引き延ばし」を行ったモデルを「Baked GIでベイクした」場合に発生します。
なので、リアルタイムな影を使用した場合は発生しませんし、単純にモデルを拡大・縮小した場合、拡大したモデルの影が荒くなる…といった事も無いみたいです。
引き延ばしたLightmapを何とか良い感じにする
引き延びてしまったライトマップですが、一応は何とかする方法があります。それは、スケールを変更したLightmapを一旦メッシュとして出力し、Generate Lightmap UVsを設定する事です。
オブジェクトをメッシュとして出力する場合は、OBJ Exporterがとりあえず便利です。
これがうまく行けば、ライトマップ用のUVが新しく生成され、特定のメッシュだけライトマップが伸びるような事無く焼けます。
まぁ、メッシュを2倍持つ事になりますが、そのあたりは色々な所と相談で。
という事で、スピードレベルデザイン的な物をプリミティブな(Unityに標準で付いている)オブジェクトでやろうとするとオブジェクトの拡縮が多発する訳ですが、場合によってはライトマップが悪くなるので注意というお話でした。
めでたしめでたし。