Создание динамического неба в Godot 4.0 с помощью новых шейдеров
Частой проблемой, с которой сталкивались пользователи Godot 3.x, была неспособность создавать динамическое небо, которое обновляется в режиме реального времени. Ситуация меняется с вводом шейдеров для неба. Реализацию можно посмотреть на Гитхабе.
В Godot 3.x было два типа скайбокса: ProceduralSky и PanoramaSky. Общие элементы между ними были из родительского класса Sky. В Godot 4.0 вы будете использовать класс Sky напрямую. Класс содержит 3 свойства:
- Material (может быть ShaderMaterial, PanoramaSkyMaterial, ProceduralSkyMaterial, PhysicalSkyMaterial).
- Radiance size.
- Режим обновления.
Вместо подклассов поведение теперь задаётся в материале. Для всех трёх типов SkyMaterial пользователи могут выбрать «Преобразовать в ShaderMaterial» и отредактировать код напрямую.
PanoramaSkyMaterial
PanoramaSkyMaterial ведёт себя точно так же, как и ранее PanoramaSky. Закрепите текстуру панорамы материалу, и всё готово!
ProceduralSkyMaterial
ProceduralSkyMaterial ведёт себя очень похоже на старый ProceduralSky с несколькими важными отличиями:
- Поддерживает до 4 солнц.
- Теперь обновляется мгновенно, так как вычисления выполняются на графическом процессоре.
- Свойства солнца (направление, энергия и цвет) извлекаются из DirectionalLights на сцене.
Эти изменения делают ProceduralSkyMaterial отличным вариантом для быстрого создания неба, когда реализм не нужен. Его легко настроить и обновить, и он использует легкий шейдер, чтобы избежать использования ресурсов графического процессора.
PhysicalSkyMaterial
PhysicalSkyMaterial - это новый ресурс, который отрисовывает небо на основе различных физических свойств, в частности рассеяния Ми и Рэлея. PhysicalSkyMaterial основан на модели дневного света Preetham (с несколькими хаками, чтобы сделать его более удобным для пользователя за счёт уменьшения физической точности).
PhysicalSkyMaterial может иметь только одно солнце, и для освещения неба требуется наличие DirectionalLight на сцене.
Основным преимуществом PhysicalSkyMaterial является то, что вы определяете свойства неба, а затем в небе происходят правдоподобные изменения, основанные на времени суток (например, автоматический закат и восход солнца).
PhysicalSkyMaterial создан для быстрой и легкой настройки. Существуют более реалистичные модели дневного света, если пользователям нужно что-то более реалистичное, они могут использовать ShaderMaterials для реализации своих собственных моделей неба.
Sky Shaders позволяет пользователям создавать произвольные сложные скайбоксы. Например, вот шейдер, перенесенный из Shadertoy под названием «Combustible Clouds»: