Начало
Окружение — самая неотъемлемая часть, и оно очень сильно влияет на атмосферу самой игры. В него входит:
- Визуальный стиль и цветокоррекция.
- Полноценное освещение.
- Звуковой эмбиент и прочие звуки, связанные напрямую, например, с ландшафтом.
- Погода и частицы.
- Небо.
- И прочие другие вещи...
В этой статье речь пойдет о небе, точнее, о его базовой части, которая используется в самой игре.
Общий план
Изначально я планировал симулировать полностью небо в физически корректном стиле. Это было далеко от порта, но я хотел сделать его визуально "красивым". Однако я быстро спустился на землю, так как на это нужно потратить много времени, плюс можно упереться не в порт, а в какой-нибудь ремейк игры.
Физически корректное небо (Physically Based Sky) — это не просто красивая картинка (текстура), а сложная математическая модель, которая имитирует реальные физические процессы в атмосфере планеты, а именно:
1. Рассеивание света (Scattering).
2. Атмосферная перспектива (Aerial Perspective).
3. Озоновый слой и поглощение (Ozone based).
4. Объемные облака (Volumetric Clouds).
5. Динамическое освещение (Sky Skylight).
6. Лучи света (God Rays / Crepuscular Rays).
Примеры игр с Physically Based Sky:
В Godot Engine тоже можно реализовать его, там не прямо из коробки в комплекте, как у других движков (Unity / Unreal), а лишь заготовки с внутренней реализацией (низкоуровневой); дальше вы сами ручками должны всё реализовывать и настраивать, как вам нужно.
Примеры неба уже с Godot и Physically Based Sky:
Сама игра
Чтобы придерживаться порта, я решил всё-таки остаться на стандартной реализации неба, как в оригинальной / улучшенной версии, но с некоторыми оговорками: реализовать / эмулировать Physically Based Sky (а именно освещение) поверх стандартного неба.
В этом случае будет два преимущества: картинка будет чуть покрасивее, и я не буду отходить от "Порта" далеко.
Небо в оригинале состоит из разных слоев текстур, шейдеров и прочих внутренностей движка X-Ray и, коротко говоря, разбито на части:
- Skybox (коробка неба) - фейковая текстура с уже раскрашенным небом и облаками.
- Одного направленного источника света для солнца и его текстуры.
- Множество раскиданных источников Hemi-света по уровню создают уникальный Ambient-свет для нужного участка уровня или места на уровне.
- Луна в игре не реализована, есть только текстура и куски кода.
- Один или два источника света для молнии. Они генерируются в момент дождливой погоды (сама молния — это 3D моделька, кстати, программно анимированная).
- Плоские облака, которые стелются над миром и отбрасывают тени на землю.
- Ветер вырезан из игры, но частично реализован на траве и деревьях.
Остальное — это часть окружения и идёт отдельно, но всё это объединено через скрипты и конфиги в один куб для простора всего.
Ага, куб..., кубище прямо... Я тоже так думал. Как оказалось, это прямоугольный параллелепипед (объёмный прямоугольник), но об этом уже подробно в следующей статье.
Порт
Некоторые моменты я всё же затрону в этой статье.
Hemi-свет (сокращение от Hemisphere Light — «Полусферический свет») — это тип освещения в 3D-графике и игровых движках, который имитирует свет, исходящий от всего небесного купола.
Если обычный источник (например, Directional Light — Солнце) светит из одной точки в одном направлении, то Hemi-свет работает как огромная светящаяся чаша над игровым миром.
Пример:
В Godot Engine нет такого понятия или возможности, как Hemi-свет, но это мне и не нужно, так как там есть IBL, ReflectionProbes, GI и т.д. — современные возможности.
Если Hemi-свет — это технологии эпохи PlayStation 2 и ранней PS3, то IBL — это современный стандарт AAA-игр, основа фотореализма и всей системы PBR (Physically Based Rendering).
Заключение
Я старался объединить в начале окружение и затронуть тему того, как реализовано небо в оригинале / в порте. Я сделал похожее в одной статье, но оказалось, что выйдет огромный формат, поэтому я ужал его и перенёс на следующую статью. На этом, пожалуй, всё.