Атомные взрывы - мой давний гештальт, страсть и желание повторить это величественное зрелище по ту сторону экрана.
Визуальные эффекты взрывов в кино и играх в основе своей делаются одинаково. Берется приличная программа, например Blender, в ней на основе системы частиц и довольно сложной и хитрой гидрогазодинамической симуляции художники получают итоговый эффект. Красивый.
Как-то так:
Click to view
Далее, если речь идет о кино, этот эффект отрисовывается в сцену, образается и так далее. Рендер одного кадра может длиться десятки минут или даже часы, но для кино это нормально. Получается чертовски красивый настоящий объёмный эффект
В играх этот взрыв разделяется на несколько частей-слоёв, каждый из которых на компьютере художника отрисовывается в отдельный анимированный спрайт взрыва. И, когда в игре этот взрыв происходит, несколько этих анимированных слоев возникают в разных геометрических точках. При взгляде с одного ракурса создается ощущение объёмного эффекта, но при повороте камеры видно, как он "распадается" на слои. Впрочем, игровые взрывы - процессы скоротечные:
Click to view
Ещё одним ограничением является разрешение. Анимированный эффект нужно сделать с высокой частотой кадров и в достаточном разрешении. И если этот эффект имеет большие геометрические размеры и детализацию, расход памяти и других ресурсов растёт лавинообразно.
Ну и есть эффекты, которые в игре сделать таким способом практически невозможно. К ним относится и атомный взрыв
Атомный взрыв физически огромный, а длительность эффекта очень большая, по сравению с любым другим взрывом. И если обычный взрыв можно быстро "свести на нет", то с атомным так не получится. Если след от атомного взрыва растворяется в воздухе за несколько секунд, это нихило так его обесценивает. Мы тут полкарты снесли, такое обычно не забывается.
Атомный взрыв - нередкий гость в играх, но почти всегда на его отображение накладывается ряд ограничений, которые делают выбранный технологический подход адекватным.
Например, взрыв показывается исключительно с одного ракурса и дистанции. Когда слоеный пирог из нескольких анимированных спрайтов не демонстрирует своей природы, и не разрушает магию эффекта.
Или когда взрыв всегда показывается при виде сверху, как в стратегических играх. Так можно здорово сэкономить на сортировке частиц, вдобавок, игровой процесс в стратегиях зачастую требует, чтобы в эпицентр взрыва уже в скором времени двинулись войска. Поэтому "растворение" эффекта в воздухе выглядит адекватно предъявляемым требованиям.
А если эффект нужно и можно посмотреть со всех сторон, в реальном времени, с частотой 60 (а лучше 120) кадров в секунду, стандартные методы пасуют. "Запечь" такой эффект в анимацию невозможно - очень дорого, очень сердито, и ракурс только один. Рассчитать правильно, с законами гидрогазодинамики - нереально долго (десятки минут на кадр, при сомнительном качестве). Стандартные инструменты художников в таком случае пасуют, и за работу принимаются программисты.
Создание объёмного эффекта можно, наверно, сравнить с лепкой. Лепкой в четырёхмерном пространстве, ведь эффект не заморожен во времени, а развивается вместе с ним.
С помощью довольно простых математических функций задается функция плотности облака взрыва от координаты и времени. Поскольку атомный взрыв имеет довольно характерную топологию - тороидальная шляпка гриба, растущая ножка и плоское основание - все эти функции определяются в соответствующих системах отсчета. Точка из прямоугольной декартовой системы координат переводится в цилиндрическую или даже тороидальную. И в этом тороидальном пространстве определяется, какая будет плотность у облака, как оно вращается и какое в ней распределение температур и цветов.
Для того, чтобы создать неоднородности и неравномерности в процессе, используется перлиновский шум, который нарушает исходную осевую симметрию эффекта. Это математический трехмерный шум, который лучше всего подходит для генерации облаков, дымов и других газодинамических процессов.
Далее получившееся облако надо вписать в контекст остальной сцены. Надо учесть туман, надо понять, как это облако освещается солнцем, небом и изнутри своим собственным пламенем.
Полученные функции плотности, цвета и света численно интегрируются вдоль лучей, исходящих из камеры, получая итоговую картинку. По-нашему это называется scattering.
И, наконец, саму сцену надо перерисовать с учетом контекста атомного взрыва. Взрыв вызывает мощную световую вспышку, которая освещает и небо, и землю, отбрасывая тени и ослепляя глаза.
А сверхзвуковая ударная волна от взрыва вызывает кратковременное повышение температуры в точке ее прохождения - из-за чего облака испаряются и конденсируются вновь в огромном радиусе.
Click to view
Все это добро рисуется 60 раз в секунду в разрешении 4к, каждый раз пересчитываясь заново практически с нуля. Несмотря на то, что я уже долгие годы занимаюсь компьютерной графикой, мне до сих пор иногда не верится, насколько много вычислений мы проводим в секунду. На сегодняшний день это десятки триллионов.
Получившийся эффект имеет максимальный размер около 4 километров, а если учитывать воздействие на облака - то все 30, при характерном размере авиационной карты в 20 километров, а танковой - 2.
Внешний вид вдохновлен взрывами
Upshot-Knothole "Grable",
Upshot-Knothole "Annie",
Buster Jangle "Easy". А инверсия облаков лучше всего была видна на взрыве
Crossroads "Baker".
Какие всё-таки потрясающие картины.