Unity и C #: как изменить общее освещение мира, а не только землю? Другие объекты не освещаются с помощью RenderSettings?

Я только начинаю заниматься освещением с помощью Unity 3d, и прямо сейчас у меня есть функция, которая постепенно усиливает освещение моей сцены. Я сделал это через настройки рендеринга и попробовал 3 разных подхода с освещением, я получил одинаковый результат со всеми из них:

                RenderSettings.ambientLight = Color.Lerp (RenderSettings.ambientLight, colors2 [currentColor], changeTime * Time.deltaTime);
                RenderSettings.ambientSkyColor = Color.Lerp (RenderSettings.ambientSkyColor, colors [currentColor], changeTime * Time.deltaTime);
                RenderSettings.ambientGroundColor = Color.Lerp (RenderSettings.ambientGroundColor, colors2[currentColor], changeTime*Time.deltaTime);

Я не совсем понимаю разницу между всем этим, и у меня проблема с освещением мира - когда цвет меняется, цвет неба И земли (который имеет тот же материал, что и другие блоки игровых объектов, которые находятся наверху это) меняют в соответствии с освещением. Т.е. моя белая земля становится оранжевой.

Проблема в том, что блоки на моей земле (тот же материал со стандартным шейдером) не подвержены влиянию / освещению в той же степени. Они остаются в основном белыми / незатронутыми, в то время как моя земля полностью оранжевая. Независимо от того, меняю ли я ambientGroundColor или SkyColor, это происходит.

Как я могу равномерно осветить всю сцену? Что здесь не так?

Проблема:

введите описание изображения здесь


person skyguy    schedule 26.05.2016    source источник
comment
Я тоже жду ответа на это. Освещение в Unity было моим самым большим препятствием. Похоже, что многое из этого не укоренено в какой-либо логике, которую я могу понять.   -  person Jesse Williams    schedule 26.05.2016


Ответы (1)


Unity реализует систему освещения, которая обычно сочетает в себе освещение в реальном времени и предварительно вычисленное освещение. Окружающий свет, падающий на землю, вероятно, рассчитан заранее. Однако блоки на поверхности земли не включаются в предварительно вычисленное освещение. Таким образом, отметка этих блоков как static добавит их к предварительно вычисленному освещению, но также сделает их недоступными для редактирования во время выполнения. Перейдите по ссылке ниже для получения дополнительной информации.

TL;DR:

Предварительно рассчитанные световые решения Unity учитывают только статическую геометрию. Чтобы начать процесс предварительного вычисления освещения, нам понадобится хотя бы один GameObject, помеченный как «static» в нашей сцене. Это можно сделать либо индивидуально, либо путем выбора нескольких GameObject с помощью сдвига на панели иерархии.

Цитата из документации unity 5 по освещению и рендерингу

person Sander Saelmans    schedule 26.05.2016
comment
Спасибо, но я не думаю, что это проблема - пол не был помечен как статический, и я не смог найти игровой объект, который был. Затем я сделал блоки и пол статичными без разницы. Я добавил картинку к своему вопросу - есть ли способ просто добиться равномерного освещения или изменить ТОЛЬКО цвет неба, а не объектов под ним? Между прочим, у меня есть сцена внутри более крупной сетки; это имеет значение? - person skyguy; 27.05.2016