Симуляция жидкостей в Blender

Автор: Константин Евдокименко a.k.a Qew (qew@email.su)

Дата: 27.10.2005

Версия документа: 0.1

Примечание: вся информация представленная здесь относится к Blender 2.40alpha1


Введение

Разработчики Blender'а с каждым релизом всё больше и больше радуют пользователей новыми возможностями, особенно много новшеств введено в последнию на момент написания статьи версию Blender 2.40alpha1. Конечно это только альфа, но думаю, что появление информации о новых возможностях заранее будет полезным.

В данной статье я раскажу о новом свойстве объектов, а именно fluid, которое позволяет создавать удивительные эффекты различных жидкостей и вязких веществ. Я не претендую на полноту описания, а просто хочу рассказать от том, как можно быстро начать работать с этой функцией.

Подход

Главное понять какой подход используется, а иначе можно долго ковыряться и ни к чему не прийти. Чтобы понять в чём идея, я потратил пару часов, а могло быть гораздо больше, если бы вдруг не вспомнил Maya. Хотя единственное сходство - это только то, что в ней также как и в Blender'е для симуляции используется контейнер, остальное всё по другому. Однако этого мне хватило и придало сил ковыряться дальше. О том, что я наковырял, читайте ниже, примеры простые, т.к. у меня ещё не было времени наковырять что-то серьёзное, но они хорошо демонстрируют то, что можно сделать с помощью fluid.

Коротко можно сказать так. Создаётся контейнер (domain), bouding box которого используется как домен симуляции. То, что внутри участвует в симуляции, остальное нет. В него помящаются объекты (только Mesh, как и для домена), объём и форма которых используютя для симуляции. Если для объекта включена опция fluid - он будет использоваться для создания объёма жидкости, а если включена опция obstacle, то он будет препятствием для жидкости. Про остальные опции сказано ниже.

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

Интерфейс

Теперь быстренько об интерфейсе. Я не буду описывать каждую кнопку, только те, которые наиболее важны.

Кнопки физики Для начала нужно перейти на панель Physics Buttons. Жмите F7, а потом на кнопку, которая обведена белым кружком.
Кнопки для симуляции жидкостей На панели Fluid Simulation нужно нажать кнопку Enable для объектов участвующих в симуляции.
Кнопки настройки домена Возьмите объект побольше для домена и включите для него опцию Domain.

BAKE - запустить симуляцию с сохранением кеша, нажимать только после того как всё настроено.

Resolution - точность симуляции, т.е воксельное (воксел (voxel) - объёмный пиксел) разрешение. Чем больше, тем точнее и медленнее.

Preview-Res - разрешение при просморте в 3D окне.

Первый выпадающий список отвечает за детализацию в 3D окне, а второй за детализацию при рендеринге. Если симуляция не очень сложная, лучше поставить в обоих случаях final, а то можно вообще ничего не увидеть.

Ниже выбирается каталог куда будет сохранятся кеш симуляции и префикс для файлов кеша.
Кнопки дополнительной настройки домена Здесь собраны допольнительные параметры симуляции.

Gravity - гравитация.

Ниже в выпадающем списке можно выбрать вязкость, по умолчанию water (вода), ещё есть oil и honey (масло и мёд), а также manual для самотоятельной настройки вязкости.

Realworld-size - размер реального мира, влияет на масштаб симуляции, по умалчанию тянет на мир жуков. Значение подбирается шаманскими танцами.
Кнопки для жидкостных объектов Опция Fluid включается для объектов, которые будут символизировать жидкость.

Initial Velocity - вектор начальной скорости объекта.
Кнопки препятствий Obstacle - это объекты, которые будут препятствиями для жидкости.
Кнопки добавления к жидкости Объекты Inflow добавляют жидкость к симуляции в направлении укзанном в Inflow Velocity. Попробуйте и поймёте как оно работает.
Кнопки исключения жидкости Вся жидкость которая попадает в область объектов Outflow исчезает, т.е исключается из симуляции.

Процесс

Здесь я кратко опишу весь процесс создания симуляции.

Кубик и шарик
Создаём такую вот не хитрую сцену. Начальный и конечный кадры (F10) можно оставить как есть (1, 250), но если вы хотите побыстрее, то измените как вам угодно.
Настройки шарика
Включаем для шарика опцию Fluid и задаём начальную скорость по вектору (0, 0, -1), как показано на картинке.
Настройки кубика
Для кубика включаем опцию Domain и устанвливаем параметры так, как показано на картинке. Вообще когда весь домен вплотную входит в экран то достаточно разрешения от 60 до 100. Но чем объект жиже, тем большее требуется разрешение для реалистичного результата. При приближении естественно нужно увеличивать разрешение, а при удалении можно и уменьшить
Допольнительные настройки шарика
Устанавливаем viscosity в water (вода, по моему мнению, наиболее красива), жмём BAKE, ... и ждём, это довольно ресурсоёмкая операция.
В процессе
В процессе.

Я оставил детализацию для 3D окна как Preview, поэтому жидкость отображается упращённо. Когда расчёты завершатся всё ещё будет можно включить final и в 3D окне будет всё также как и при рендеринге.
Результат
А вот и результат. Только не забудьте сделать Set Smooth (F9 и кнопка Set Smooth на панели Link and Materials) для куба (хотя это уже совсем не куб), чтобы он отображался гладко.

Жмите Alt+A для запуска анимации и наслаждайтесь.

Примеры

Несколько простых примеров.

Всплеск при падении
Всплеск при падении. Использован YafRay без GI. Жидкость на самом деле прозрачная, материал Color Class, только вот на фоне ничего нет. Удобно то, что при симуляции жидкость остаётся мешем и к ней можно применять любые метериалы любого рендера. Видно что жидкость не выходит за границы домена, а ударяется об его стенки.

Параметры fluid:
    viscosity (вязкость) - water
    resolution: 82
    шарик fluid имел начальную скорость (-1.0) по оси Z
Расплавленная голова
Расплавленная голова. Очень похоже на мазут. Здесь рендером был родной Blender с рэйтрэйсингом. Кубик, однако, немного меньше домена симуляции.

Параметры fluid:
    viscosity (вязкость) - oil
    resolution: 100 (хотя здесь можно и меньше)
    обезьянка имела начальную скорость (-1.0) по оси Z
Жидкость стекает по желобу
Жидкость стекает по желобу. В качестве рендера опять Yafray, с теми же параметрами что и в первом примере. Желоб - это объект Obstacle. Шарик находился чуть выше желоба. При скорости болшей чем (0.2), жидкость с брызгами разлетается в стороны.

Параметры fluid:
    viscosity (вязкость) - water
    resolution: 78
    шарик fluid имел начальную скорость (-0.1) по оси Z

Заключение

Я так и не смог сделать эффект падения объекта в жидкость, т.к. Obstacle работает только как неподвижный объект, а при анимации используется только его начальное положение. Если у кого-нибудь получится сделать что-то подобное, то думаю многие были бы благодарны за такую информацию.


Copyright © 2005, Константин Евдокименко
Разрешается копировать, изменять и распространять без предварительного уведомления, при условии сохранения иформации об авторе