Анимация воды в Maya

Рубрика: VFX, Анимация Комментариев: 0

Всем привет! В этой статье вы узнаете, как сделать анимацию воды в Maya при помощи эффектов и системы частиц.

Прежде чем приступить к анимации воды надо сделать предметы, с которыми она будет взаимодействовать. Я смоделировал стакан и бутылку, из которой будет литься вода. При моделировании не забудьте выставить масштаб. Я предпочитаю использовать сантиметры и моделирую все примерно в реальном масштабе.

2030_tid_01

Теперь в сцену можно добавить частицы, но сначала надо настроить nParticle. В меню nParticles > Create nParticles по умолчанию есть пять опций настройки частиц.

2030_tid_02

Я выбрал Water, а затем в том же меню нажал Create Emitter. После этого в сцене появился Emitter с типом Omni и объект nParticle. В Emitter с типом Omni параметр Max Distance по умолчанию равен нулю. Это означает, что все частицы будут появляться в одном и том же месте. Силы, управляющие симуляцией, будут очень быстро отталкивать частицы далеко друг от друга, это еще одна проблема для моей симуляции воды. Поэтому в панели Attribute Editor в разделе Distance/Direction Attributes в параметре Max Distance я указал 2, если что его можно будет потом изменить. Кроме того я указал 500 в параметре Rate и поместил Emitter в бутылку.

2030_tid_03_

Также желательно сразу изменить настройки параметра Substeps во вкладке nucleus. По умолчанию он равен 4, что может привести к нестабильной анимации. Я сдвинул ползунок до 12, и если во время анимации частицы начнут взрываться или двигаться сквозь объекты, то ползунок можно подвинуть еще. Помимо этого надо поставить галочку Use Plane в разделе Ground Plane, чтобы частицы, которые не попадают в стакан, не разлетались в бесконечность. Если геометрия расположена не в начале координат, то можно создать плоскость и использовать ее в качестве коллайдера.

2030_tid_04

Теперь нужно добавить геометрию в качестве объектов столкновения для частиц. Выберите геометрию и нажмите nMesh > Create Passive Collider. Это создаст новые объекты nRigid в сцене для каждого выбранного объекта. В панели Attribute Editor можно настроить параметры столкновения для nRigidShape, такие как плотность, отскок и трение. По идеи, выставленные по умолчанию параметры должны работать нормально.

Теперь можно воспроизвести анимацию воды и посмотреть, что получилось. Работает неплохо даже со стандартным пресетом Water, но я немного усовершенствую его.

Совет: если вы не используете пресет Water, обязательно включите Liquid Simulations и отключите Self-Collisions (взаимопроникновение). Когда Liquid Simulations включен, то на частицы действуют силы притяжения и отталкивания, благодаря чему получается симуляция воды, позволяющая частицам проникать сквозь друг друга. Если Self-Collide не отключить, то он будет конфликтовать с симуляцией жидкости и из-за этого она не будет похожа на воду.

Для начала я изменил радиус падения частиц во вкладке nParticleShape в панели Attribute Editor. Чем крупнее частицы, тем меньше их надо, чтобы заполнить стакан, но при этом симуляция получается менее детализированной. Для такой сцены хорошо подойдет радиус 0,15. Кроме того, в параметре Radius Scale Input я указал Randomized ID и увеличил Radius Scale Randomize от 0 до 0,1. Это делает радиус падения частиц разным и предотвращает равномерную укладку частиц, как показано на изображении ниже.

2030_tid_05_

Так же я хочу, чтобы частицы немного взаимодействовали со стеклом, для этого мне надо убрать зазор между сеткой и стеклом. Чтобы сделать это, надо указать параметр Collide Width Scale на 0,7.

Во вкладке Liquid Simulation есть параметр под названием Liquid Radius Scale. Он влияет на то, как сильно частицы будут проникать друг в друга. Чтобы получить гладкую поверхность при построении сетки мне надо чтобы частицы сильно перекрывали дркг друга. По умолчанию значение равно 1, что очень много. Я опустил его до 0,5. Но имейте в виду: чем сильнее частицы будут перекрывать друг друга, тем больше их понадобится, чтобы наполнить стакан.

Параметр Viscosity может немного изменить поведение жидкости. Более плотные жидкости, такие как мед или сироп имеют более высокую вязкость, в то время как вода менее вязкая. У эмиттера я установил ключ на 140 кадре, чтобы вода не лилась вечно. Вполне возможно, что после просмотра первой анимации, придется подкорректировать тайминг. Ниже показаны мои финальные настройки.

2030_tid_06

Можно закешировать симуляцию, чтобы видео воспроизводилось быстрее. Выберите свои nParticles, а затем в меню nCache, нажмите на квадратик справа от Create New Cache. Здесь можно настроить директории и другие опции. Я предпочитаю использовать по одному файлу на каждый кадр, чтобы в случае сбоя я мог продолжить с того места где остановился, не рискуя при этом повредить весь кеш. После настроек кеша переходим в нижнюю часть вкладки Cashe на панели Attribute Editor , там есть информационная панель с описанием кеша. Здесь я могу посмотреть все закешированные аттрибуты. Это поможет мне отслеживать с какими настройками был сохранен тот или иной кеш.

На анимацию 300 кадров потребовалось 17 минут. Итоговое количество частиц: 34 750.

2030_tid_zzzzchapter01_movie01

Выглядит довольно неплохо для первого раза, хотя я бы добавил немного анимации в самой бутылке, чтобы вода не текла все время из одного и того же места. А еще я хочу, чтобы в стакане было больше воды. Примерно 150 000 частиц со скоростью 25 000 частиц в секунду за 140 кадров. Также я повысил значение параметра Liquid Radius Scale до 0,7 и запустил симуляцию, чтобы посмотреть, как она работает.

В этот раз получилось 380 кадров, на их анимацию ушло 3 часа 5 минут (зависит от мощности вашей системы). Общее количество частиц: 144 791.

2030_tid_zzzzchapter01_movie02

Теперь, когда получилась хорошая симуляция, можно приступить к созданию сетки. Нажмите Modify > Convert > nParticles to Polygons. В сцене появится сетка, а частицы не будут отображаться, что значительно ускорит работу вьюпорта.

По началу, возможно, на экране ничего не появится, либо будет несколько капель.

2030_tid_07

Это потому, что параметр Mesh Triangle size слишком высокий. Его значение зависит от масштаба сцены. В итоге для своей сцены я выставил следующие параметры:

2030_tid_08_

Параметры Threshold и Blobby Radius Scale влияют на то, как сетка смешивается с частицами. Threshold уплотняет сетку основываясь на плотности частиц.

Параметр Mesh Triangle Size влияет на размер полигонов, из которых состоит сетка. Если воксельная сетка, образующая основную сетку, становится больше, чем значение Resolution, то параметр Max Triangle Resolution автоматически изменяет значение Mesh Triangle Size. То есть, если мы укажем Triangle Size 100, а количество полигонов на всю ширину вдоль одной оси сетки превысит 100, то размер Triangle Size автоматически изменится. В большинстве случаев, размер треугольника меняется в процессе моделирования, что приведет к выскакиванию сетки между кадрами. Чтобы избежать этого, я устанавливаю Triangle Size его довольно высоко.

Motion Streak растягивает форму частиц в направлении их движения, тем самым сглаживая поток частиц. Параметр Mesh Smoothing Iterations также помогает сгладить сетку.

Я предпочитаю использовать Quad Mesh в параметре Mesh Method, потому что это позволяет работать с низко полигональной сеткой, а затем включить сглаживание, нажав на клавишу 3. Кроме того, я проверил, включена ли галочка Velocity Per Vertex, т.к. я планирую рендерить с моушен блюром.

Затем применил несколько шейдеров к своей геометрии, добавил немного освещения и плоскость пола, и отрендерил все.

2030_tid_09

2030_tid_zzz9

2030_tid_zzzzchapter01_movie03

Автор: Майк Цугшверт
Источник: 3dtotal.com
Перевод: RAIT.kz — статьи о компьютерной графике