Вспомните привычные кадры рекламы: струи минеральной воды или популярного пенного напитка — прозрачная красивая жидкость, играя светом, растекается по бокалу и собирается в удивительно правильные формы, демонстрируя самым лучшим образом свойства рекламируемого товара. А сколько раз перед доверчивым зрителем на экране демонстрировался аппетитно разламывающийся батончик или заливаемый шоколадом рожок мороженого! Многие из зрителей полагают, что такая красивая картинка — это заслуга одного лишь оператора и постановщика съемок.
Но на самом деле столь эффектная съемка может иметь совершенно иное объяснение — компьютерная 3D-графика. С помощью современных компьютерных технологий можно творить удивительные вещи: делать предметы съемки красивее, чем они есть на самом деле, менять их форму, делать их текучими и заставлять двигаться в нужном направлении.
Трехмерная графика — это целый мир, где есть место всему: и программированию, и математическому анализу, и творческому началу. Сегодня мы хотим поговорить только об одном инструменте для создания 3D-графики — частицах. На его примере вы увидите, насколько универсален этот инструмент, и узнаете, как создаются спецэффекты в современных фильмах и как талантливые 3D-аниматоры обманывают зрителя рекламы.
Все вокруг нас состоит из частиц — все вещи, любой материал, даже Вселенная. Эта простая истина кажется очевидной и удивительной, простой и в тоже время трудно принимаемой. В основе всего лежит маленькое нечто.
Город состоит из домов, дома состоят из кирпичей, кирпичи состоят из песчинок, песчинки — из атомов и так далее. Для компьютерного моделирования это знание имеет очень большое значение. Используя всего лишь симулятор поведения частиц, мы можем воссоздать любую физическую модель и любой видимый процесс. Звучит сложно и не очень понятно, поэтому попробуем объяснить это на примере компьютерной анимации, где частицы могут решать любые задачи.
На заре анимации перед художниками-мультипликаторами стояла труднейшая задача — покадрово отобразить сюжет фильма. Создать на бумаге узнаваемый образ — это уже само по себе сложная работа, но угадать, как этот образ должен видоизменяться со временем, как он должен выглядеть в каждом новом кадре — еще сложнее.
Художникам-мультипликаторам Оливеру Джонстону (Oliver Martin Johnston) и Томасу Фрэнку (Frank Thomas) понадобились годы, чтобы хоть как-то упорядочить алгоритмы создания анимации. В их знаменитой книге Disney Animation, The Illusion of Life (1981 год) эти два человека постарались сформулировать основные постулаты для аниматоров.
Фрэнк Томас
Олли Джонсон
Интересно, что подход к созданию рисованных мультфильмов у Оливера и Томаса был точно такой же, какой сегодня используется во всех программах для создания анимации. Рисуя какую-нибудь сценку, авторы создавали несколько характерных поз персонажа, а затем отрисовывали промежуточные кадры, заполняя временные «пробелы». Ну чем не метод анимирования при помощи ключевых кадров!
Всего Оливер и Томас изложили двенадцать правил создания анимации, которые остаются актуальными несмотря на то, что средства для ее создания теперь совсем иные.
Но даже используя колоссальный опыт аниматоров «Диснея», очень трудно передать на экране движения некоторых вещей. Вот примеры таких объектов: струящийся дым, поток воды, брызги жидкости от удара, изображение разлетающихся осколков разбитого стекла и так далее. Пока классическая 2D-анимация держала свои позиции, все эти сцены можно было делать лишь приблизительно, полагаясь на то, что часть недостающих деталей зритель сам домыслит.
Однако с приходом компьютерной графики ситуация изменилась. Перед художниками появилась новая, более сложная задача: отобразить реалистичные движения предметов в кадре. Когда мы имеем дело с движением персонажей или неодушевленных предметов (автомобиль, падающий мяч, парящая в небе чайка и так далее), движение очень простое и потому предсказуемое, его легко нарисовать или смоделировать. Но как можно предугадать, скажем, какие брызги возникнут от опрокинутой на туфлю чашки молока, какой они будут формы и куда полетят? И тут мы подошли к самой сути проблемы — моделированию физического процесса при помощи частиц.
Представьте себе ситуацию, когда стакан, наполненный водой, переворачивается. Очевидно, что жидкость, которая находится внутри, вытечет и постарается занять максимальную площадь поверхности.
А теперь представьте себе аналогичную ситуацию, только вместо жидкости в стакане находятся крохотные стальные шарики. Перевернув такой стакан, мы получим очень схожую картину — массив шариков «растечется» по поверхности, приблизительно повторяя контуры жидкости из первого примера. Чем меньше размер у шариков и чем больше их число, тем более похожим становится поведение рассыпанной массы. Для компьютерной модели подобной аналогии вполне достаточно, чтобы смоделировать взаимодействие жидкости с окружающими объектами. Именно такой подход и был выбран для создания программы RealFlow.
Когда в 1997 году Джеймс Кэмерон снял фильм «Титаник», использованные декорации и спецэффекты обошлись создателям в рекордную сумму. Узнав стоимость съемок (а они и вправду превышали стоимость самого Титаника), Кэмерон воскликнул: «Лучше бы мы его заново построили!» На то время использование компьютерной графики в таких масштабах было действительно дорогостоящим удовольствием. И хотя в 1997 году не существовало хорошего симулятора жидкостей, в этом фильме студия Digital Domain предприняла попытку обмануть зрителя компьютерным дымом и водой.
Примерно в это же время двое студентов из Мадрида сделали первую попытку смоделировать всплеск жидкости с помощью компьютера. На просторах Интернета сохранились уникальные кадры первой симуляции, в которой использовалась технология RealFlow.
Изначально компания Next Limit состояла всего из двух человек — Виктора Гонсалеса и Игнасио Варгаса.
Штат Next Limit довольно долго не расширялся, а сами сотрудники ютились в небольшом арендованном офисе с парой компьютеров. По словам основателей Next Limit, наибольшей трудностью для начинающих бизнесменов было заняться продвижением своей идеи практически без первоначального капитала. Когда компания только-только была зарегистрирована, интуиция подсказывала парням, что их ждет большой успех, эта мысль давала им стимул и вдохновляла. Но одно дело интуиция, совсем другое — реалии жизни. Поэтому первые годы разработчики особенно старательно трудились над первой версией симулятора жидкости RealFlow, которая должна была развеять все сомнения и привлечь клиентов. В конечном итоге энтузиазм и упорство студентов победили. Как только RealFlow был «допилен», первые лицензии продались очень быстро (что дало возможность программистам уже спокойно развивать свой перспективный проект), а новость о появлении нового симулятора жидкостей на рынке программного ПО для визуальных эффектов вызвала огромный интерес к этому продукту.
Виктор и Игнасио очень точно угадали нишу для своей программы. Предложенный ими способ симуляции поведения жидкостей решал огромное количество задач и проблем компьютерной 3D-графики: упростился просчет динамики текучих поверхностей, стало легче настраивать материал, появился простор для фантазии художников и дизайнеров.
К тому же движок основывался на классических законах физики, благодаря чему с помощью RealFlow можно было получить высокую точность просчета процесса и потрясающе реалистичную визуализацию.
Создание трехмерной поверхности воды не было проблемой даже тех слабых рабочих станций, которые имелись в распоряжении первых компьютерных аниматоров в конце 90-х. Однако метод, который использовался для имитации водной глади до появления RealFlow, основывался лишь на деформации поверхности и не учитывал мелких деталей — брызг, пены, пузырьков и так далее. Именно поэтому многие известные картины того времени (конец 1990-х — начало 2000-х) использовали послойный метод просчета жидкостей — отдельно визуализировались волны и отдельно просчитывалась гребневая шапка с помощью частиц, после чего на этапе видеомонтажа кадры накладывались, образуя полную картину. Это все было неудобно, да и компьютерная подделка была очень заметна.
Новый RealFlow появился очень своевременно — мощности компьютеров хватало для решения сложных задач, а конкуренции у симулятора жидкостей никакой не было. Чтобы закрепить успех, испанские разработчики очень много внимания уделили оптимизации использования ресурсов, благодаря чему RealFlow с самого начала его развития можно было запускать не только на топовых конфигурациях ПК.
Художники-аниматоры стали постепенно переходить на новый инструмент, отказываясь от прежних методов имитации жидкости, включая рельефное текстурирование водной глади или моделирование волн путем деформации поверхности несложным алгоритмом шума. Легко вообразить, как согнется лист бумаги при перелистывании страницы в книге, можно себе представить, как будет выглядеть нахмуренное лицо персонажа. Но представить мысленно геометрию морского прибоя крайне сложно и еще сложнее оживить эту картину, изменяя геометрию «воды» в каждом кадре. Стало очевидно, что такую задачу нужно автоматизировать.
RealFlow позволяет сгенерировать «жидкую» трехмерную поверхность, образованную частицами. Метод, на котором основан движок симулятора жидкостей, использует модель SPH (Smoothed Particle Hydrodynamics) — алгоритм просчета гидродинамики сглаженных частиц. Суть его та же самая, что и в описанном выше примере стакана со стальными шариками, с той лишь разницей, что модель SPH позволяет отдельным частицам образовывать единое целое, слипаться друг с другом. Помимо SPH, в программе также используется алгоритм Hybrido, предназначенный для симуляции масштабных сцен, например поверхности океана.
На сегодняшний день RealFlow доступна для всех основных настольных платформ. «Послужной список» программы включает бессчетное число рекламных роликов и более трех десятков художественных фильмов, выпущенных с 1998 года. Симулятором жидкости пользовались при создании фильмов «Аватар», «Властелин колец: Возвращение короля», «Код да Винчи», «Хищники», мультфильмов «Гадкий Я», «В гости к Робинсонам», «Ледниковый период» и многих других.
Принцип работы с RealFlow можно описать в двух словах. После того как пользователь укажет положение источников частиц, условия их рождения, а также определит внешние воздействия на эти частицы, запускается процесс симуляции, после чего RealFlow выполнит конечный просчет трехмерной модели жидкости.
C помощью дополнительных модулей RealFlow поддерживает интеграцию со всеми основными 3D-редакторами: Maya, 3ds Max, Houdini, LightWave, Softimage. Кроме того, весной 2015 года компания заявила о создании нового дополнения RFCORE для популярного 3D-редактора Cinema 4D. С помощью RFCORE можно использовать движок симулятора жидкостей RealFlow непосредственно внутри Cinema 4D. И хотя на данном этапе RFCORE не дублирует все возможности RealFlow, модуль RFCORE позволит работать в уже привычном интерфейсе (в отличие от прочих плагинов-коннекторов для 3D-редакторов, которые лишь выполняют импорт данных в 3D-редактор).
RealFlow поддерживает еще один продукт компании Next Limit — визуализатор Maxwell Render, поэтому визуализацию можно проводить прямо в самой программе. В отличие от прочих систем визуализации, Maxwell Render ориентирован на просчет физической модели сцены. Это усложняет просчет, но упрощает настройку рендеринга.
Перед тем как вы начнете работать с RealFlow, стоит обратить внимание на нюанс при сохранении результата. В компьютерной графике данные, используемые в проекте, часто хранятся не только в едином файле программы, и RealFlow в этом смысле не является исключением. Когда вы сохраняете свою работу в RealFlow, в том месте на диске, где вы сохраняете файл, программа автоматически создает целую коллекцию каталогов. Каждый из этих каталогов содержит свой тип данных, используемый в RealFlow, — информацию об объектах, обработанные данные предварительного просмотра, сведения о частицах и прочее. Все эти данные являются динамическими и используются RealFlow как кеш проекта.
Еще один важный момент, который следует иметь в виду при работе с RealFlow, — размерность. Динамика жидкостей и текучих тел во многом зависит от размеров исходных тел. Например, жидкость, вытекающая из бочки, смотрится иначе, чем водопад.
По умолчанию в RealFlow используется масштаб виртуального пространства, при котором одна клеточка схематической сетки приравнивается к одному метру. Если вы смоделируете в программе эффект переливания жидкости из бутылки в стакан, но забудете про размеры, RealFlow может симулировать сцену, где размер стакана измеряется метрами. Подобная ситуация сама по себе абсурдна, и результат будет далек от реалистичного. Для того чтобы размерность импортируемых в программу объектов совпадала с желаемой, можно использовать коррекцию масштаба. В настройках RealFlow можно выбирать автоматический множитель для изменения масштаба импортируемых объектов. Кроме того, можно использовать аналогичные множители для коррекции воздействия процедур на частицы или на объекты. Настройки для управления масштабом сцены вызываются с помощью кнопки Scale options возле элементов управления анимацией.