質問内容
UnityのLightingについて質問です。
ゲーム再生中に Lighting の SkyboxMaterial を動的に変更し、陰を再計算させる方法、もしくは関数を知りたいです。
下画像の Lighting ウィンドウ右下の Auto Generate を押した時のように変更させたいです。
ご回答よろしくお願いいたします。
以下に目標・現状、テスト環境を載せておきます。
目標
理想は以下のような画面の変化です。
↑ ↓ Cubeの陰が変わる
現状
現在は以下のような画面の変化です。
↑ ↓ Cubeの陰が変わらない
テスト環境について
「スペースキーを押すと SkyboxMaterial を変更する」テスト環境を作りました。
Unity Ver 2018.3.12f1 Mac
C#
1public class SkyboxController : MonoBehaviour 2{ 3 public Material[] skyboxList; 4 private int current; 5 6 private void Awake() 7 { 8 current = 0; 9 } 10 11 private void Update() 12 { 13 if (Input.GetKeyDown(KeyCode.Space)) 14 { 15 current = (current + 1) % skyboxList.Length; 16 RenderSettings.skybox = skyboxList[current]; 17 } 18 } 19}
未検証ですが、RenderSettings.ambientLight 等の環境光系の設定を変えたらどうでしょうか?
https://docs.unity3d.com/ja/current/ScriptReference/RenderSettings.html
ご回答ありがとうございます。
ご提案してくださった内容は、各背景ごとに色(陰影?)を保存しておき、それを制御することで、陰影を変更するというやり方と認識しました。
その方法も検討してみたいと思います。
しかし、私が現段階で考えていることは、背景(skybox)によって物体の陰影をUnityが計算し、変更することであるため、少々違うのかもしれません。
なるほど、状況把握しました。
https://docs.unity3d.com/ja/current/ScriptReference/RenderSettings-skybox.html
こちらも未検証ですが、再計算という意味では上記ページにあるように、設定変更後にDynamicGI.UpdateEnvironmentを呼び出す必要があるのではと思います。
なお、理想図ぐらい明るくする場合、RenderSettings.reflectionIntensityも変更する必要がありそうな気がします。Skyboxモードの場合はSkyboxのテクスチャから色を取得して反映するだけっぽいので「光の強さ」は変わらないんじゃないかと。
https://docs.unity3d.com/ja/current/ScriptReference/RenderSettings-reflectionIntensity.html
ありがとうございます。まさに私が知りたかったものは上のものです。
また、下の情報もありがとうございます。こちらも重要な情報でした。
Cubeについては上の関数のみで実現できましたが、複雑なオブジェクトなどは下の値も変化させないと実現できませんでした。
本当にありがとうございました。
解決して何よりです。
後からこのページを見た人の為、お手隙の際に自己解決として回答して質問のクローズをお願いします。
回答1件
あなたの回答
tips
プレビュー