Добавить в корзинуПозвонить
Найти в Дзене

№5. Окружение.

Окружение — самая неотъемлемая часть, и оно очень сильно влияет на атмосферу самой игры. В него входит: В этой статье речь пойдет о небе, точнее, о его базовой части, которая используется в самой игре. Изначально я планировал симулировать полностью небо в физически корректном стиле. Это было далеко от порта, но я хотел сделать его визуально "красивым". Однако я быстро спустился на землю, так как на это нужно потратить много времени, плюс можно упереться не в порт, а в какой-нибудь ремейк игры. Физически корректное небо (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: В
Оглавление
Для начала нужно главное понять, как всё работает и устроено.
Для начала нужно главное понять, как всё работает и устроено.

Начало

Окружение — самая неотъемлемая часть, и оно очень сильно влияет на атмосферу самой игры. В него входит:

  • Визуальный стиль и цветокоррекция.
  • Полноценное освещение.
  • Звуковой эмбиент и прочие звуки, связанные напрямую, например, с ландшафтом.
  • Погода и частицы.
  • Небо.
  • И прочие другие вещи...

В этой статье речь пойдет о небе, точнее, о его базовой части, которая используется в самой игре.

Общий план

Изначально я планировал симулировать полностью небо в физически корректном стиле. Это было далеко от порта, но я хотел сделать его визуально "красивым". Однако я быстро спустился на землю, так как на это нужно потратить много времени, плюс можно упереться не в порт, а в какой-нибудь ремейк игры.

Физически корректное небо (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:

Сама игра

Стандартное небо в S.T.A.L.K.E.R. Call of Pripyat. В "улучшенной" версии, кстати, оно ещё крутится по часовой стрелке, создавая динамичность, как будто небо двигается. В обычной версии это реализовано не до конца, поэтому оно полустатичное (за исключением смешивания).
Стандартное небо в S.T.A.L.K.E.R. Call of Pripyat. В "улучшенной" версии, кстати, оно ещё крутится по часовой стрелке, создавая динамичность, как будто небо двигается. В обычной версии это реализовано не до конца, поэтому оно полустатичное (за исключением смешивания).

Чтобы придерживаться порта, я решил всё-таки остаться на стандартной реализации неба, как в оригинальной / улучшенной версии, но с некоторыми оговорками: реализовать / эмулировать Physically Based Sky (а именно освещение) поверх стандартного неба.

В этом случае будет два преимущества: картинка будет чуть покрасивее, и я не буду отходить от "Порта" далеко.

Небо в оригинале состоит из разных слоев текстур, шейдеров и прочих внутренностей движка X-Ray и, коротко говоря, разбито на части:

  • Skybox (коробка неба) - фейковая текстура с уже раскрашенным небом и облаками.
  • Одного направленного источника света для солнца и его текстуры.
  • Множество раскиданных источников Hemi-света по уровню создают уникальный Ambient-свет для нужного участка уровня или места на уровне.
  • Луна в игре не реализована, есть только текстура и куски кода.
  • Один или два источника света для молнии. Они генерируются в момент дождливой погоды (сама молния — это 3D моделька, кстати, программно анимированная).
  • Плоские облака, которые стелются над миром и отбрасывают тени на землю.
  • Ветер вырезан из игры, но частично реализован на траве и деревьях.

Остальное — это часть окружения и идёт отдельно, но всё это объединено через скрипты и конфиги в один куб для простора всего.

Ага, куб..., кубище прямо... Я тоже так думал. Как оказалось, это прямоугольный параллелепипед (объёмный прямоугольник), но об этом уже подробно в следующей статье.

Порт

Некоторые моменты я всё же затрону в этой статье.

Hemi-свет (сокращение от Hemisphere Light — «Полусферический свет») — это тип освещения в 3D-графике и игровых движках, который имитирует свет, исходящий от всего небесного купола.
Если обычный источник (например, Directional Light — Солнце) светит из одной точки в одном направлении, то Hemi-свет работает как огромная светящаяся чаша над игровым миром.

Пример:

Тех.демка из Three.js - Hemisphere.
Тех.демка из Three.js - Hemisphere.

В Godot Engine нет такого понятия или возможности, как Hemi-свет, но это мне и не нужно, так как там есть IBL, ReflectionProbes, GI и т.д. — современные возможности.

Если Hemi-свет — это технологии эпохи PlayStation 2 и ранней PS3, то IBL — это современный стандарт AAA-игр, основа фотореализма и всей системы PBR (Physically Based Rendering).

Заключение

Я старался объединить в начале окружение и затронуть тему того, как реализовано небо в оригинале / в порте. Я сделал похожее в одной статье, но оказалось, что выйдет огромный формат, поэтому я ужал его и перенёс на следующую статью. На этом, пожалуй, всё.