読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

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

【Unity】背景をSkyboxで描画する

3D Lightmap Unity

背景のモデルを全部Skyboxで描画してしまうアプローチについてです。

「遠距離にあるモデル=小さく・大量に描画」な訳ですが、もし背景が動かない場合は非常に勿体ないような印象を受けます。というのも

  • ライトマップ焼くときに背景は別で焼ける
    (手前の微調整が楽)
  • オブジェクトが多いとゲームの初期化のコストが高い
    (テクスチャのロードとどっちが安いかと言われると、範囲次第)
  • LODとか面倒くさい

で、もう面倒だから背景をCubemapにしてしまおう…と。


手前のキャラや家はモデル、背景の壁はCubemapです。
一応IBLパワーにより、ある程度の光源整合性は取れてる感じです。

f:id:tsubaki_t1:20150918015330p:plain

背景をCubemapにする手抜きな方法

Cubemapを作る方法についてはCamera.RenderToCubemapて機能もあるし環境マッピングで絵作り - テラシュールブログもある訳ですが、面倒くさいのでReflection Probeで作っちゃいます。

まずは適当な背景を作ります。

f:id:tsubaki_t1:20150918014002p:plain

あとは単純、カメラにReflectionProbeをくっつけて、ReflectionProbeをBake(非Auto)するだけです。

f:id:tsubaki_t1:20150918014350p:plain

ただそのままだと解像度が荒いので、Resolutionを512とか1024にすると良いかもしれません。

f:id:tsubaki_t1:20150918013503p:plain

f:id:tsubaki_t1:20150918014104p:plain

すると、シーンと同名のフォルダに「ReflectionProbe-*」が作成されます。片方は大抵の場合はProcedural Skyboxから作った環境マップです。

f:id:tsubaki_t1:20150918012540p:plain

で、これをテキトウなフォルダにコピーしてGlassy Reflectionのチェックを外します。そうしないと、何かボケた絵になります。
(Skyboxが何か解像度が低い感じの絵になる場合は、大体これのせいです)

f:id:tsubaki_t1:20150918012628p:plain

Materialを作成しSkybox>Cubemapシェーダーを設定、

Cubemapに先ほどコピーしたreflectionprobe-*を設定します。

あとは作ったマテリアルをSceneビューへドラッグ&ドロップすればSkyboxが更新され先ほど撮影したCubemapが背景になります。

f:id:tsubaki_t1:20150918013759p:plain

一度設定した後に更新するのは面倒くさいので、手抜きします。
ReflectionProbeのTypeをCustomに設定し、Cubemapに先ほどコピーしたCubemapを設定すると、Bakeした際の更新先が設定したCubemapになり、毎回Cubemapを作成→コピー→設定更新とかしなくても良くなります。

f:id:tsubaki_t1:20150918014846p:plain

基本的に「接触する可能性のあるモデル」に使うと簡単に絵が破たんしますが、もう少し遠距離の背景には使えなくもないかな…といった感じで。