Ещё по стаканчику мороженого. И всё!
Урок для тех, кто хочет попробовать свои силы в создании жидкости с использованием RealFlow.
Я это сделаю на примере наполнения рожка мороженого, потому что летом это очень актуально.
Давайте начнём.
Я хочу, чтобы в рекламном ролике мороженого невидимый вафельный рожок наполнялся жидким мороженым, которое постепенно застывает. И сверху вырастает специфичная «розочка», не растекаясь при этом наружу.
А рожок сворачивается на уже застывшем мороженом. Но это уже совсем другая история.
Для выполнения этой задачи буду использовать 3DS MAX 8 и RealFlow3.
(Пока урок писал 4-я версия RealFlow вышла, буду попутно давать объяснения и для неё).
Устанавливаю плагин RealFlow для 3DS MAX, который можно скачать с официального сайта.
Моделирую вот такие объекты. Внизу это как бы внутренняя часть рожка, а вверху – розочка, которая получается в реальности при наполнении.
Обязательно уменьшите количество полигонов, т.к. на внешнем виде это вряд ли скажется, а времени на симуляцию потребуется меньше.
Проверьте модель на дырки, чтобы мороженое впоследствии не вытекло.
(Используйте для этого модификатор STL Check.)
Теперь нужно отправить обе модели из 3DS MAX в RealFlow.
В данном примере буду использовать формат .OBJ.
File > Export > file.obj.
Даю им понятные имена.
(Если бы было нужно экспортировать ещё и анимацию, то нужно воспользоваться форматом .SD. Для этого предназначена утилита SceneDataSaver. Она появляется после установки плагина.)
Закрываю MAX. Открываю RealFlow.
Загружаю модели в программу.
Для RF3.
Для RF4.
Правая кнопка->Add->Objects->Import->файлы.
Создаю эмиттер Circle.
(в RF4 правая кнопка->Add->Emitter->Circle).
Помещаю его внутрь модели. (Горячие клавиши перемещения, вращения, масштабирование – W,E,R, как и в MAX).
Масштабирую.
Настраиваю модель.
Хочу чтобы жидкость лилась вниз, билась о рожок, плескалась, постепенно заполняла рожок, бурлила.
Если, например, вы хотите лить мороженное сверху (т.е. снаружи модели), необходимо указать, что «розочка» будет «прозрачна» для частиц с внешней стороны. Нужно указать Collision side. В моём случае в этом нет необходимости, т.к. эмиттер будет находиться внутри модели и Collision Side=Both. Т.е. частицы не смогут проходить сквозь неё с любой стороны. Выберите объекты и укажите.
RF3 и RF4 идентично.
Collisiondistance – расстояние на котором оболочка начинает взаимодействовать с частицами.
(не указывайте очень маленькие значения, от этого возрастает время просчёта).
Friction– сила трения.
Bounce – сила отскока частиц.
Настройте их по своему вкусу. Это зависит от того, что вы хотите получить и ещё от размера модели.
Если нужно, можно заставить эмиттер двигаться. Для этого ставлю ключи (правая кнопка мыши по нужному параметру). Значение с ключом меняет цвет. И редактирую их редакторе.
(в RF4 правая кнопка по параметру->OpenCurve).
Настраиваю эмиттер/
Как видите, поставил ключи по положению, вращению и скорости. Хочу, чтобы струя меняла направление и силу. Так даже смешнее.
Попробуйте менять Viscosity (вязкость).
Max particles – максимальное число частиц. При превышении их числа рождение частиц прекращается. Поэтому поставьте достаточное количество, чтобы хватило на весь рожок. Узнать сколько сейчас частиц в сцене можно в свитке Statistics (когда выбираете эмиттер).
Resolution – разрешение.
Density – плотность.
Чем больше разрешение, тем лучше качество. Будет задействовано больше частиц в единице объёма.
Чем больше плотность, тем тяжелее жидкость. Но так как жидкость в данной сцене одна, плотность менять нет смысла.
При пробных симуляциях имеет смысл уменьшить разрешение.
Меняю настройки симуляции
Количество кадров в секунду и общее количество кадров.
Иногда имеет смысл поставить количество кадров в секунду большее, чем 25. Тогда впоследствии можно будет замедлять анимацию без потери качества.
Для RF4:
Стрелка рядом с кнопкой Simulate->Options…
Открывается окно
Да! Для ускорения просчётов можно уменьшить параметр MAX substeps, примерно, до 50 или даже меньше. (Там же, где меняли количество кадров в секунду.)
Уменьшать можно до тех пор, пока частицы ведут себя адекватно. Если начинают, например, разлетаться в разные стороны – параметр нужно увеличить.
Применяю гравитацию.
(в RF4 правая кнопка->Add->Daemons->Gravity).
Меняю силу гравитации по желанию. (Выбираю значок гравитации и меняю параметр Strength).
Указываю, что будет влиять на жидкость.
Теперь на жидкость будут действовать оба объекта и гравитация.
В RF4
RealFlow работает таким образом:
Он генерирует частицы, а потом надевает на них оболочку.
Это занимает довольно много времени. Я предпочитаю разделять этот процесс пополам. Сначала я «считаю» частицы и записываю их в секвенцию частиц. И только после того, как мне понравилась симуляция, я загружаю полученную секвенцию в новый эмиттер для расчета оболочки.
Поэтому включаю экспорт частиц и не включаю экспорт оболочки.
В RF4
меню Export->ExportCentral...(F12)
Запускаю симуляцию
В RF4
Теперь нужно подождать пока вся модель не заполнится частицами.
Останавливаю симуляцию. (Та же кнопка).
Включаю Play. Если что-то не нравится, подправляю. Снова включаю симуляцию. И так пока не получу желаемый результат.
Теперь можно увеличить количество частиц в симуляции для более качественного результата. (Resolution – разрешение)
И просчитать всё заново.
Итак, у меня есть секвенция файлов, в которой записано движение частиц во время симуляции.
Но для рендера в MAX мне нужна секвенция файлов, в которой записано движение поверхности мороженого.
Для этого удаляю старый эмиттер и создаю новый Binary Loader.
Загружаю в него секвенцию частиц, которою только что получил.
(В RF4 почти аналогично).
Теперь просчёт частиц почти не займёт время времени.
Надеваю на них Mesh.
Присваиваю этот Mesh моему новому эмиттеру.
Теперь оболочка будет создаваться для нового эмиттера.
В RF4 правая кнопка->Add->Mesh
Правая кнопка на mesh->InsertFluids...
Настраиваю Mesh.
Выбираю Binary Loader. Указываю радиус.
Чем больше радиус, тем дальше от частицы будет находиться оболочка. Т.к. он действует на все частицы, то в результате получится более сглаженная (раздутая) оболочка. Чтобы получить более точную оболочку радиус нужно уменьшать. Но в результате жидкость может превратиться в отдельные капли, если частиц недостаточно. Используйте BlendFactor. Его увеличения приводит к слиянию отдельных капель не за счёт радиуса, а за счёт появления оболочки между ними. Просто попробуйте разные варианты и поймёте.
Включите Filters. Он сглаживает маленькие бугорки.
Для просмотра текущего mesh в RF3 нажимайте кнопку с изображением глаза (build mesh),
В RF4 – правая кнопка на названии mesh->build.
Выбираю Mesh. Указываю Polygon size.
Это количество полигонов на каждую частицу. Чем их меньше, тем быстрее просчёт, но в результате ломаная поверхность.
Подберите нужный вариант для своего масштаба.
Выключаю экспорт частиц и включаю экспорт оболочки (Mesh).
(В RF4 – F12).
Запускаю симуляцию. Жду.
После окончания у меня есть секвенция файлов с движущейся оболочкой.
На этом работа с RealFlow окончена.
Запускаю MAX.
Создаю RF Loader.
Загружаю в него 2-ю полученную секвенцию (оболочка).
Жму кнопку «Create Mesh».
Присваиваю полученному объекту материал – что-то напоминающее молоко.
Рендерю.
Использую AfterEffects для сборки всего материала (фон + рожок + мороженое).
Если жидкость слишком густая увеличиваю скорость воспроизведения секвенции. (вот тут и понадобится больше 25 кадров в секунду).
Всё. Теперь попробуйте сами. Если хотите можно всё это дело полить сверху шоколадом. Для этого нужно смоделить оболочку для шоколада так же как до этого делали оболочку для мороженого. И дальше всё по-порядку.
Желаю успехов в мороженоделании.