概要
シーン単位で背景などの3Dモデルの見た目を開発し、LightMapをベイクしてそれをマルチシーンで読み込んだ時の見た目が異なったため、それを解消する方法について調べる。
環境
Unity 2021.3.4f1
(この記事の内容はRenderPipelineに依らない内容となっています)
状況
SampleSceneとBakeStageSceneを用意しました。
今回SampleSceneの中には何もなく、
BakeStageSceneは仮のPlaneとCubeが配置されており、LightMapをベイクしています。
PlaneとCubeはともにStaticであり、DirectionLightとPointLight3つはすべてBakedとなっています。
BakeStageSceneのSkyboxにはSkybox/Proceduralシェーダーの自作マテリアルを当てています。
LightMapベイクへの影響などをわかりやすくするためにいろいろと値を変えています。
問題
この状態でSampleSceneにBakeStageSceneを読み込むと、BakeStageScene単体で見ていた時と全く異なることに気が付きます
SampleSceneにBakeStageSceneを追加で読み込んだだけの時
BakeStageScene単体の見た目
こちらを解決する方法を2つ示します。
解決方法① 読み込んだBakeStageSceneをアクティブにする
読み込んだシーンを右クリック→SetActiveSceneとすることで、Skyboxの設定や、Fogの影響度合いが変わっていることがわかります。これはもともとシーン単体で開発し、想定していた見た目と合致しています。
解決方法② シーン依存な情報を読み込んだシーンに合わせる
なにかしらの問題で読み込んだシーンをActiveにできないとき、アクティブなシーンに依存するLighting情報を合わせてあげることでこれを解決します。
アクティブなシーンに依存するLighting情報は以下の通りです
- Skybox
- Fog(Lightingの情報ではないですが…)
- Environment Reflection
これらを読み込んだシーンに対して合わせて設定してあげることで解決できます。
Skyboxを合わせる
LightingタブのEnvironment/EnvironmentのSkyboxMaterialに、BakeStageSceneと同じものをアタッチします。
Fogを合わせる
LightingタブのEnvironment/OtherSettingsのFogから、BakeStageSceneのFogの各パラメータを合わせます。
Environment Reflectionを合わせる
Environment Reflectionはベイクされたシーンの場合、少し事情が異なってきます。
ベイクする際にReflectionProbeとして反射計算用のテクスチャをCubemapとして書き出しており、ベイクされたオブジェクトはこちらを参照するためです。
そのため、LightingタブのEnvironment/EnvironmentのEnvironmentReflectionsのSourceをCustomにし、CubemapをBakeStageSceneのベイクデータフォルダ内のReflectionProebe-0というCubemapをアタッチします。