テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】同じモデルなのに片方だけベイクした影が汚い場合の対処法

f:id:tsubaki_t1:20160420233736p:plain

【問題】上の画像には赤い2本の棒がある。これらは同じメッシュを使用している。
これらの棒に影をベイクした際、左の赤い棒にかかる影はハッキリしている右の棒にかかる影はボケている。このこの違いが発生する理由を記入欄にry。

 

【答】左の棒はスケールを変更していない物を使用し、右の棒は引き延ばしたブロックを使用しているため。

f:id:tsubaki_t1:20160421003350p:plain

オブジェクトを引き延ばした時、Lightmapも伸びる

これを引き起こしている要因は、オブジェクトのスケールを引き延ばした時でも、ライトマップのUVは変わらないという事です。

どういう事かといえば、ScenのBakedで比較すればわかります。左(青)が左の赤い棒、右(赤)が奥の赤い棒のライトマップ解像度です。
左のライトマップは正方形ですが、右のほうは引き延ばされているのが分かります。

f:id:tsubaki_t1:20160420235740p:plain

右のライトマップはどのようにUV展開されるのかといえば、こんな感じで展開されます。これを見てわかる通り、UV的には6面正方形を展開しようとしています。

つまり、6面正方形として展開する予定のUVを引き延ばして展開しているため、影が引き延ばされた、汚い感じで表現されているわけです。

f:id:tsubaki_t1:20160421000017p:plain

「拡大縮小」では問題は発生しない

ちなみに、この現象は「特定軸の引き延ばし」を行ったモデルを「Baked GIでベイクした」場合に発生します。
なので、リアルタイムな影を使用した場合は発生しませんし、単純にモデルを拡大・縮小した場合、拡大したモデルの影が荒くなる…といった事も無いみたいです。

f:id:tsubaki_t1:20160421000935p:plain

引き延ばしたLightmapを何とか良い感じにする

引き延びてしまったライトマップですが、一応は何とかする方法があります。それは、スケールを変更したLightmapを一旦メッシュとして出力し、Generate Lightmap UVsを設定する事です。

f:id:tsubaki_t1:20160421002437p:plain

オブジェクトをメッシュとして出力する場合は、OBJ Exporterがとりあえず便利です。

これがうまく行けば、ライトマップ用のUVが新しく生成され、特定のメッシュだけライトマップが伸びるような事無く焼けます。
まぁ、メッシュを2倍持つ事になりますが、そのあたりは色々な所と相談で。

f:id:tsubaki_t1:20160421003014p:plain

f:id:tsubaki_t1:20160421003023p:plain

という事で、スピードレベルデザイン的な物をプリミティブな(Unityに標準で付いている)オブジェクトでやろうとするとオブジェクトの拡縮が多発する訳ですが、場合によってはライトマップが悪くなるので注意というお話でした。

めでたしめでたし。

関連

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp

tsubakit1.hateblo.jp