Top
MayaНовостиУроки

Частицы и динамика в Maya

Mike Zugschwert, CG-generalist с более чем десятилетним опытом работы, расскажет о симуляции воды в Maya.

3D_papa_kak_nalit_stakan_vody_v_maya_12

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

3D_papa_kak_nalit_stakan_vody_v_maya_01

Теперь я мог добавить в сцену частицы и воспользоваться преимуществом пресета nParticle. Ниже меню nParticles > Create nParticles расположено пять опций дефолтных настроек.

3D_papa_kak_nalit_stakan_vody_v_maya_02

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

3D_papa_kak_nalit_stakan_vody_v_maya_03

Далее мне было необходимо изменить число Substeps у Nucleus Solver’а. По умолчанию было установлено 4, что могло привести к нестабильным симуляциям. Я накрутил его до 12, если во время симуляции я увижу, как частицы будут взрываться или двигаться внутри Collision Objects, я всегда смогу увеличить это число. Также я включил галочку Use Plane, расположенную под настройками Ground Plane. Это удержит частицы, промахнувшиеся мимо стакана, от падения в бесконечность. Если я не создал геометрию в начале координат, то могу всегда могу создать в сцене плоскость, которую буду использовать как Collider.

3D_papa_kak_nalit_stakan_vody_v_maya_04

И, наконец, мне необходимо добавить геометрию как объект столкновения частиц. Я выбрал геометрию и выполнил команду nMesh > Create Passive Collider. Это создаст новые nRigid-объекты в сцене для каждого выбранного объекта. Во вкладке nRigidShape в Attribute Editor я могу настроить такие свойства столкновения, как толщина (Thickness), отскок (Bounce) и трение (Friction). Дефолтные настройки обычно неплохо справляются с симуляцией.

Теперь я могу просчитать симуляцию. Дефолтные свойства пресета воды отлично работают, но я хочу внести несколько правок.

Совет: Если вы не используете пресет воды, то обязательно включите Liquid Simulations и выключите Self Collisions. С включенной симуляцией жидкости частицы начнут вести себя подобно воде, благодаря возникшим силам притяжения и отталкивания, что позволит им взаимопроникать. Если галочка Self Collide будет включена, она будет мешать симуляции жидкости.

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

3D_papa_kak_nalit_stakan_vody_v_maya_05

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

Ниже Liquid Simulation расположен атрибут Liquid Radius Scale. Он влияет на то, как сильно частицы проникают друг в друга. Мне был нужен небольшой оверлап, чтобы получить гладкий меш. Дефолтное значение 1 было слишком высоким. Я скрутил его до .5, помня при этом, что чем больше я позволяю частицам взаимопроникать, тем больше частиц мне понадобится, чтобы наполнить стакан.

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

3D_papa_kak_nalit_stakan_vody_v_maya_06

Для более быстрого проигрывания симуляции ее необходимо кешировать. Я выбрал nParticles, зашел в меню nCache и выбрал настройки команды Create New Cache. Здесь я настроил различные опции и выбрал папку для кэша. Обычно я предпочитаю использовать настройку One file per frame, чтобы в случае краша я мог продолжить с того места, где закончил, а не пересчитывать кэш с самого начала. После кеширования я увидел, что настройки кэша появились во вкладке Info внизу вкладки Cache в Attribute Editor. Там я мог увидеть все настройки, использованные при создании кэша, что могло мне помочь следить за тем, какие настройки имеют разные кэши.

Симуляция заняла 17 мин и 300 кадров. В конце я имел 34,750 частиц.

3D_papa_kak_nalit_stakan_vody_v_maya_07

Для первой симуляции она выглядела неплохо, хотя я хотел еще заанимировать бутылку, чтобы вода из нее не лилась постоянно в одно и то же место. Также я хотел наполнить стакан чуть больше. Наверное, 150.000 частиц, при этом скорость бы составила 25.000 частиц в секунду за 140 кадров. Я повысил Liquid Radius Scale до .7 и снова запустил симуляцию, чтобы посмотреть, как она будет выглядеть.

Новая симуляция растянулась на 380 кадров и 3 часа (все зависит от системных мощностей). В сцене насчитывалась 144, 791 частица.

3D_papa_kak_nalit_stakan_vody_v_maya_08

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

Сразу после ряда этих операций я увидел в сцене всего лишь пару пузырей.

3D_papa_kak_nalit_stakan_vody_v_maya_09

Произошло это из-за слишком большого размера треугольников. Их размер зависит от масштаба сцены. Для своей сцены я использовал значения, приведенные на изображении ниже.

3D_papa_kak_nalit_stakan_vody_v_maya_10

Threshold и Blobby Radius Scale будут влиять на то, как меш смешивается с частицами. Threshold уменьшает меш, исходя из плотности частиц.

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

Motion Streak растягивает форму частиц в направлении движения, создавая Motion blur. Mesh Smoothing поможет сгладить меш.

Для параметра Mesh Method я стараюсь использовать значение Quad Mesh, что позволяет мне работать с лоупольным мешем, который я затем смужу нажатием клавиши 3. Также я включил галочку Velocity Per Vertex, потому что планировал рендер с Motion blur’ом.

Далее я назначил на геометрию шейдера, создал несколько светильников, плоскость пола и отрендерил сцену.

3D_papa_kak_nalit_stakan_vody_v_maya_11 3D_papa_kak_nalit_stakan_vody_v_maya_13 3D_papa_kak_nalit_stakan_vody_v_maya_12


Читайте в нашей предыдущей статье о том, как налить стакан вина в Maya 2015 с помощью Bifrost.

Хотите знать больше? Приходите на наши курсы 3D-моделирования, скульптинга, композитинга, анимации и VFX.


Журналист: Алена

Источник