Облака в CG: как и чем их делают и что получается

«Компьютерре» уже доводилось писать про генераторы ландшафтов, генераторы растений и даже генераторы городов в компьютерной графике. Есть ещё одна область визуализации, где иногда бывает очень полезно использование вычислительных алгоритмов, — облака.

В компьютерных играх многие годы использовались плоские и далеко не всегда даже анимированные изображения небосвода. В допотопном шутере Heretic, например, явно использовалась фотография:

В Quake I-III использовались анимированные текстуры, в которые был одет скайбокс (skybox). В ставшем уже давно классикой The Elder Scrolls III: Morrowind небо потрясало всех своим реализмом, притом что там явно использовался очень ограниченный набор анимированных текстур (как минимум некоторые из которых представляли собой фотографии высокого разрешения). Ну и так далее.

Сегодня требования к реализму в играх уже совсем другие; а если речь идёт о CG-сценах в кино и на телевидении, то они там были другими всегда. Можно использовать готовые фото- и видеоматериалы с обработкой в Adobe After Effects, например (и чаще всего так и делают), однако этот способ не годится, если требуется тотальный контроль над тем, как должны выглядеть облака (с какой стороны освещены, какого оттенка быть и так далее). Ну и, наконец, нужных фотографий может элементарно не оказаться под рукой.

Самый простой и распространённый способ визуализации облаков без особых ухищрений — это использование шума Перлина — математического алгоритма по генерированию процедурной текстуры псевдо-случайным методом. Именно на нём основаны «облачные» эффекты — в Photoshop, GIMP, Paint.NET и других — и процедурные текстуры, используемые, кажется, во всех мыслимых графических редакторах, включая трёхмерные.

Шум Перлина, или процедурные облака (пакет Paint.NET). В Photoshop и GIMP используется тот же алгоритм, так что всё выглядит очень похоже.

Шум Перлина используется, кроме того, для визуализации ландшафтов, давая весьма реалистичные результаты. Вот два простых примера использования процедурной «облачной» текстуры на сфере в Blender 2.49: во втором случае на основе этой текстуры рассчитывается ещё и карта нормалей, чем имитируется её рельефность.

Процедурная "облачная" текстура
Та же текстура с нормалями

На том же шуме Перлина всё держалось и в незабвенном Terragen 0.9, который теперь именуется Terragen Classic. В общедоступной версии облака, впрочем, выглядели относительно плоскими, даже если был выставлен флажок 3D, вдобавок был доступен только один слой. В своё время Terragen мог давать весьма фотореалистичные изображения, особенно если к нему подходить умело:

Облака в Terragen Classic. Автор изображения - Люк Бьянко. Ссылка с изображения ведёт на галерею на сайте разработчиков Terragen.
Автор изображения - Фрэнк Басински (Frank Basinski). Полноразмерный оригинал - по ссылке.

Однако это не идёт ни в какое сравнение с тем, что позволяет с облаками делать Terragen 2:

Облака в Terragen 2. Автор - Люк Бьянко.
Облака в Terragen 2 (автор - Ральф Виллетто)

Terragen 2, впрочем, — коммерческий продукт, стоит 299 долларов.

Коммерческим является и используемый в самом серьёзном кинематографе пакет Vue (более 700 долларов за лицензию), который позволяет делать вот такие вот штуки:

Автор ролика указывает, что рендерил он на компьютере с четырёхъядерным процессором Core i7-920 2,67 ГГц, с 4 Гбайтами памяти, и весь рендер занял примерно 14 часов (900 кадров). В общем, мало не покажется.

Отжирают все такие расчёты весьма и весьма много. Зато, как подсказали в ЖЖ-сообществе ru-vfx.livejournal.com, Vue интегрируется с Autodesk Maya и 3ds Max.

В Maya и Max, как бы там ни было, имеются и свои средства. Ниже представлен видеоурок создания туч в Maх (правда, очень долгий).

(Опять же, спасибо за ссылку участникам сообщества ru-vfx.)

А вот что позволяет делать сногсшибательный модуль пакета Maya — Fluids. Несмотря на его название, данный модуль предназначен не только для имитации жидкостей, но и для визуализации газов, дыма, снега, пара, тумана, огня и всего прочего — зыбкого, текучего и заполняющего весь предоставленный объём. Вот какие получаются там облака:

Для пакета Blender версий 2.4х и 2.5х (со всеми их колоссальными различиями) также существовали скрипты под названием Cloud Generator — правда, радикально меж собой различающиеся. Поскольку только в Blender 2.5 появилась поддержка «объёмного» материала, с помощью которого можно «честно» визуализировать всякие дымно-газовые среды, визуализировать волюметрические облака до этого было (практически) невозможно. Скрипт Alan’s Cloud Generator позволял довольно лихо имитировать облачную среду с помощью бильбордов (плоских затекстурированных поверхностей, постоянно обращённых к зрителю, точнее, к камере), и надувательство получалось весьма убедительным, в том числе при анимации:

C помощью Blender 2.58 (в который зашит генератор облаков) можно делать вот такие вот вещи, но с ним, как говорится, без поллитры не разобраться: работает он с эпичной неторопливостью, и придётся потратить часы, а то и дни и недели, чтобы добиться сколько-нибудь вменяемых результатов. Таких, например:

Cloud Generator в Blender 2.58

И, как и везде в компьютерной графике, главную роль в реалистичности играет освещение.

Что будем искать? Например,ChatGPT

Мы в социальных сетях