Технологии UNIGINE 2: облака
Когда небо — это не просто скайбокс.
Вы когда-нибудь задумывались, сколько бывает разновидностей облаков? Кто-то вспомнит кучевые или перистые, ну и, конечно, тучи. Но на самом деле их достаточно много — ученые выделяют 10 основных типов:
1. Слоистые (Stratus)2. Слоисто-кучевые (Stratocumulus)3. Слоисто-дождевые (Nimbostratus)4. Кучевые (Cumulus)5. Кучево-дождевые (Cumulonimbus)6. Перистые (Cirrus)7. Перисто-слоистые (Cirrostratus)8. Перисто-кучевые (Cirrocumulus)9. Высокослоистые (Altostratus)10. Высококучевые (Altocumulus)
И, как вы уже могли заметить, многие названия частично повторяют другие. Дело в том, что большинство типов облаков — смесь 2 из 3 базовых видов: слоистых, кучевых и перистых.
Слоистые (Stratus) встречаются ближе всего к земле (ниже 400 метров над уровнем моря) и иногда образуют туман.
Кучевые (Cumulus) — те самые «барашки», самый известный вид облаков. Они формируются в ясную погоду на уровне 1–2 тысяч метров над уровнем моря и не всегда связаны с осадками.
Перистые (Cirrus) облака встречаются в верхних слоях атмосферы (выше 5500 метров), имеют нитевидную форму и состоят из кристалликов льда. Их появление часто свидетельствует о скором ливне или буре.
На нашем движке можно смоделировать все 10 типов облаков! И не просто смоделировать, а заполнить ими небо до самого горизонта. При этом облака будут плыть по небосводу, реалистично освещаться и взаимодействовать друг с другом.
В сегодняшней статье расскажем про технологию моделирования облачного неба в UNIGINE 2.
А зачем подробно моделировать облака?
В крупномасштабных виртуальных мирах облака — неотъемлемая часть атмосферы. Они могут быть не просто частью декорации (скайбокса), но и мощным инструментом для художников. Именно облака отвечают за погоду в настоящем мире, поэтому с их помощью можно визуализировать реалистичные погодные условия, что только подчеркнет размеры виртуального мира и качество его проработки.
Самый яркий пример проекта, где особенно важно качество проработки облачного неба — авиасимулятор. Пилоты самолетов во многом ориентируются по облакам, когда прокладывают безопасный маршрут, а также лишь на облака приходится полагаться, в случае отказа авионики. Кроме того, авиадиспетчерам тоже важно визуально предсказывать погоду по облакам, чтобы обеспечивать безопасный заход на посадку прибывающих бортов, а также принимать решения по аварийным в считанные минуты. Поэтому визуализация облачного неба должна быть максимально близка к реальному миру для успешной тренировки персонала.
При создании инструментов для визуализации облаков мы в UNIGINE консультировались с пилотами и авиационным экспертами, часть из которых — наши клиенты. Это помогло учесть большинство формообразующих и других факторов, влияющих не только на внешний вид, но и на устройство облачного неба.
Каким можно сделать облачное небо в UNIGINE 2?
Очень близким к тому, что можно наблюдать в реальном мире. Все благодаря богатому функционалу настроек и особенностей. Облака в UNIGINE 2 — не просто текстуры на скайбоксе, а полноценные трехмерные волюметрические объекты. Их освещение и тени рассчитываются на основе комплексных физических моделей. Объемные облака визуализируются с использованием технологии Ray-marching на основе данных о покрытии и уточняются с помощью набора сложных шумовых искажений, предоставляющих художникам полный контроль и высочайший уровень детализации.
Облака реалистично выглядят не только снаружи, но и внутри (что особенно важно для авиасимуляторов), и даже отбрасывают тени друг на друга и на землю. При этом с любого ракурса не будет мерцания, шума, некорректной сортировки и других раздражающих артефактов изображения.
Все 10 основных типов облаков, представленных в природе, доступны в UNIGINE прямо из коробки в виде настраиваемых пресетов:
Пресеты облаков в UNIGINE 2
Как мы уже упоминали во вступлении, разные типы облаков располагаются на разной высоте:
Выше всех расположены перистые (Cirrus) и их производные (Cirrostratus, Cirrocumulus).
Ниже — кучевые (Cumulus) и их производные (Cumulonimbus и др.).
Ближе всего к земле — слоистые (Stratus) и их производные (Stratocumulus и др.).
В UNIGINE 2 можно создать несколько слоев облаков, что сделает небо еще реалистичнее:
Облачное небо из нескольких слоев в UNIGINE 2
В реальном мире облачное небо не плоское — оно слегка искривлено, повторяя форму планеты. В UNIGINE 2 можно учесть и эту особенность, включив поддержку кривизны Земли:
Это позволяет моделировать сценарии реального мира в масштабе всей планеты с 64-битной точностью координат и высокой степенью визуальной достоверности.
Круто, но тормозить же будет?
Вовсе не обязательно. В UNIGINE 2 можно гибко настроить оптимизацию для облаков либо воспользоваться одним из пресетов: от минимального качества (Low) до максимального (Extreme).
Для максимального качества облачного неба и правда может понадобиться супермощный компьютер, но оно избыточно для большинства проектов и сценариев использования. Именно поэтому в системе облаков предусматривается широкий спектр оптимизаций, позволяющих с учетом особенностей того или иного проекта снизить нагрузку на рендер, без видимого ущерба для визуальной составляющей.
Например, если камера в основном смотрит на небо с земли, то можно понизить разрешение до 4 раз или включить разреженную отрисовку облаков — разница с максимальным качеством будет едва заметна.
В настройках качества доступны следующие параметры:
Sampling Quality. Устанавливает количество образцов шума для придания формы облакам: от 1 (низкое качество) до 6 (максимальное). Чем выше значение — тем меньше артефактов.
Lighting Quality. Качество освещения, исходя из количества образцов: от 1 (низкое качество) до 6 (максимальное).
Samples Count. Количество образцов для отрисовки облаков: от 1 (низкое качество) до 6 (максимальное).
Step Accuracy. Отвечает за визуальный вид облаков при просмотре изнутри облачного слоя. Более высокие значения обеспечивают более точную форму и меньший шум, в то время как более низкие значения повышают производительность. Диапазон значений: от 0.0f до 1.0f. Значение по умолчанию — 0,5f.
Downsampling Rendering. Отрисовка облаков в пониженном до 4 раз разрешении.
Interleaved Rendering. Разреженная отрисовка облаков до значения 8×8.
Разреженная отрисовка облаков при ракурсе с земли заметна лишь при резких поворотах камеры
Depth Based Reconstruction. Отрисовка в полном разрешении только облаков на переднем плане, при включенном даунсемплинге.
Interleaved Rendering Temporal. Отображает, применяется ли временной сбор шумов для разреженного семплинга облаков.
Depth Based Reconstruction Threshold. Определяет разницу в глубине, начиная с которой пиксели считаются связанными с разными поверхностями. Диапазон значений: от 0.0f до inf (+бесконечности). Значение по умолчанию — 100f.
Настройки качества шума: Noise Step (шаг), Noise Iterations (итерации), Noise Lighting (освещение), Noise Step Skip (пропуск шагов).
А внешний вид облакам можно придать любой?
Можно сделать максимально реалистичные облака, соответствующие форме определенных типов, упомянутых выше. Самый сложный из них — кучево-дождевые (Cumulonimbus). Они могут иметь высоту в несколько километров и очень замысловатую форму. Поэтому специально для них мы сделали 3 отдельных пресета с базовыми формами:
А можно вообще сделать облако в виде кораблика или любого другого объекта:
Для создания реалистичного вида облаков их можно гибко настроить, задав тип формы (одним из пресетов или вручную), детализацию, разреженность, высоту над землей, оттенок освещения (дневной белый, сумеречный оранжевый и др.), затенение (в т.ч. тени от облаков на земле), влияние ветра и многое другое:
А как регулировать облачность в конкретных областях?
Каждый облачный слой может быть в Infinite (англ. «бесконечный») или Defined (англ. «определенный») режиме. Второй режим позволяет сделать облачный слой любого ограниченного размера с дополнительной маской для кастомной формы. Например, так можно сделать область из облаков размером 100 на 100 метров и в форме чего угодно.
Когда нужно создать контролируемые локальные грозы или облака с изменяющимся покрытием, можно использовать объект Field Weather. Он позволяет создавать локальные шторма или облака с собственной текстурой поверхности, а также контролировать их перемещение.
Количество объектов FieldWeather не ограничено, так как их влияние на производительность несущественно.
А можно ли задавать региональную погоду?
Да, но эта возможность доступна только в максимальной комплектации UNIGINE 2 Sim. Высокоуровневая система управления погодой (High Level Weather System) позволяет управлять погодой на глобальном и региональном уровнях, без написания кода.
Можно создавать неограниченное количество областей региональной погоды любой формы, добавлять к ним несколько слоев и управлять каждым из них по отдельности. Доступна регулировка видимости, давления, температуры, влажности, облачности, количества осадков, ветра и других параметров для каждого слоя.
Самый яркий пример региональной погоды — грозовые области. Они образуются в мощных кучево-дождевых облаках (Cumulonimbus) при взаимодействии холодного и теплого фронтов воздуха. В результате образуется то, что мы видим с земли — огромные темно-серые тучи, именуемые грозовым фронтом. В грозовых областях возможен не только дождь и молнии, но также они могут вызывать бури и смерчи.
* * *
Таким получилось наше второе путешествие по технологиям трехмерной графики в UNIGINE 2. Продвинутая визуализация облачного неба пригодится для многих проектов, в которых сделан акцент на пейзажи или вовсе действие происходит в воздухе! В нашем SDK можно не просто создать красивый скайбокс, но и полностью смоделировать любую погоду с соответствующим видом облаков, с учетом малейших деталей: от формообразующих факторов до освещения и даже имитации кривизны атмосферы планеты.
Если пропустили первый выпуск рубрики «Технологии UNIGINE 2», рассказывающий про нашу систему рендеринга воды, то перейдите по ссылке.