1物忘れは防げないこの広告は、90日以上更新していないブログに表示しています。Probeskyboxを動的に変更すると見た目がおかしくなる!?ランタイムでskyboxを変更したところ、環境光が適切に反映されず、一部見た目がおかしい結果となる症状に遭遇しました。今回はSkyboxによる環境光の影響を適切に反映してあげることで見た目をよくしたいと思います。Unityにおける環境マップUnityではSkyboxにSkybox用のシェーダーを割り当てたマテリアルを設定してあげることで特に追加の設定は必要なく、環境光をオブジェクトに反映させてげることができます。変化がわかりやすいように新規でStandardShaderを割り当てたマテリアルを作成し、MetallicとSmoothnessを1にしてパチンコ玉のような見た目にします。DefaultのSkyboxではこのようにパチンコ玉にSkyboxが映り込んでいるのを確認することができます。こちらのskyboxを違うskyboxに変更するとこういった結果が得られます。これは全天球画像から作られたskyboxで、劇場の椅子がしっかりと映り込んでいます。このようにEditor停止中では適切な結果を得ることができるのですが、skyboxから行われる環境光の計算はランタイムでは動的に切り替わりません。youtu.beこのskyboxの切り替え時にどういった処理が走っているかというと、環境マップとしてcubemapの生成を行います。ランタイムで更新(cubemapの再生成)するにはそれなりのコストがかかるため、エディタ停止中には動作し、ランタイムでは動作しないというのはUnityエディタでそのコストを吸収しているためだと思われます。Generateをオフにすると、環境光の影響が反映されなくなります。Lightingをクリックすると、シーン名フォルダが生成され、その中にcubemapが生成されます。これをEditor停止中に内部的に生成しているということです。ReflectionsのSourceをCustomに変更し、設定することで環境光の影響を受けるようにすることができます。動的にcubemapを生成し、環境光の影響を適切に反映されるようにするには今回はskybox変更時に、cubemapを生成し環境マップとして設定してあげる方向で修正を行いたいと思います。mapの生成するにはいくつかの方法があります。Probeを配置する。2つ目は、Camera.RenderToCubemap()を使用する方法です。Probeと選択し、シーンに配置するだけです。frameにするとマイフレーム更新することができます。マイフレームではかなりのコストがかかるので、ReflectionProbe.RenderProbe()を呼ぶことで任意のタイミングで更新をかけることができます。Camera.RenderToCubemap()こちらはスクリプトを作成する必要があります。mapを設定するスクリプトを載せておきます。}}使い方はCubemapTester.csのChangeCubemap()を実行します。ProbeもしくはCamera.RenderToCubemap()を使用し、任意のタイミングで更新をかけてあげることで動的に環境光を反映させることができるようになりました。まとめcubemapの解像度や、HDRの有効無効の設定が異なるので上記の2つの方法での結果が少しずつことなっていますが、自分のプロジェクトに最適な方法を使用することをお勧めします。(2)はてなブログをはじめよう!gounsxさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。