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

Автор Pavel_Blend

Про что эта статья?

В этой статье я расскажу про симулятор жидкости в Blender 2.80. Этот симулятор был впервые добавлен в блендер ещё в конце 2005 года, в версию 2.40. С тех пор он изменялся не значительно (изменения были в основном в начале, после внедрения в блендер). Код симулятора был написан сторонним разработчиком по имени Nils Thuerey. Он написал библиотеку для симуляции жидкостей и назвал её El’Beem. Движок является воксельным и основан на методе решёточных уравнений Больцмана. Лучше всего подходит для создания воды, но имеет возможность создавать вязкие жидкости (мёд, шоколад…), которые реализованы не совсем хорошо. Скоро в блендер внедрят новый симулятор Mantaflow (кстати, Nils Thuerey принимает участие в его разработке).

Введение

Симулятор является воксельным, а это значит, что для создания жидкости нужен домен. Домен — это область 3д-пространства, которая представляет из себя параллелепипед (или куб), которая заполнена вокселями. Воксели — это трёхмерные пиксели, похожи на маленькие кубики, являются минимальной единицей в симуляции. Чтобы добавить домен, нужно создать куб (другие объекты создавать не имеет смысла, так как, при создании домена, учитываются только габариты объекта). Далее переходим в окно Properties вкладка Physics и нажимаем на кнопку Fluid.

Ниже появится вкладка Fluid, которая хранит параметр Type (тип жидкости). По-умолчанию этот параметр установлен на None. Это означает, что объект не будет участвовать в симуляции. Нужно изменить этот параметр на Domain.

Всё, мы создали домен. Но, если запустить симуляцию, то мы получим ошибку «No fluid input objects in the scene». Не будет создаваться ни какая жидкость. Так как мы не добавили источник жидкости. Чтобы это исправить, добавим любой объект, например, UV-сферу (её можно переместить и изменить масштаб), далее в той же вкладке Physics снова жмём на кнопку Fluid и указываем Type на Fluid. Теперь в сцене есть два объекта жидкости (Domain и Fluid). Далее можно запустить симуляцию. Это делается нажатием кнопки Bake у объекта домена (вкладка Fluid, под-вкладка Bake). Чтобы остановить симуляцию, нужно нажать на крестик в строке состояния (на которой написано количество процентов запечённой симуляции) статус бара (внизу). Если на крестик не нажимать, то симулятор просчитает кадры от нулевого до последнего (параметр Frame End в окне Timeline). В итоге сфера создаст некоторый объём жидкости, которая (по-умолчанию) под силой гравитации упадёт вниз на пол (если проиграть анимацию с помощью клавиши Space) и начнёт течь по нижней границе домена. Дело в том, что за пределы домена жидкость выйти не может. Домен — это закрытое «стенками» пространство, которое не выпускает за свои границы жидкость. Сам объект домена (по-умолчанию) превратится в жидкость. И в одной сцене может быть несколько доменов, но запекать жидкость можно только тогда, когда в сцене есть только один домен (иначе блендер выдаст ошибку «There should be only one domain object»). То есть, если вам нужно более одного домена, то запекать симуляцию у них нужно в отдельных сценах. А чтобы уже запечённые симуляции добавить в новую сцену, можно добавить с помощью оператора File > Append объект домена. И тогда у вас в сцене будет несколько жидкостей.

Коротко о типах жидкости

  • None — объект с этим типом не участвует в симуляции. Является как бы заготовкой для создания определённого типа жидкости.
  • Domain — как уже говорил, это пространство для симуляции. В этом пространстве ведутся все просчёты. За пределами области домена ничего не просчитывается.
  • Fluid — меш объект, который имеет этот тип жидкости, испускает жидкость из своего объёма один раз.
  • Obstacle — является препятствием, преградой, коллизией для жидкости.
  • Inflow — испускает жидкость, как водопроводный кран. То есть, в отличии от Fluid типа, может испускать жидкость не один раз, а непрерывно, создавая поток жидкости.
  • Outflow — является оттоком для жидкости, как слив в ванной. По-умолчанию жидкость, которая попадёт в объём объекта этого типа, будет удалена.
  • Particle — представляет настройки для частиц. Хоть и симулятор воксельный, он поддерживает так называемые вторичные частицы. Такие так: плавающие частицы (пена), капли/всплески/брызги/трейсеры (различные включения в жидкости, например, мусор в воде, ягоды в варенье, пузырьки в мёде и т.д.).
  • Control — является контролирующим объектом. Позволяет притягивать или отталкивать жидкость. Полезно при создании различных логотипов из жидкости и т.д.

Общие параметры

Все эти типы жидкости имеют параметры. Но некоторые параметры являются общими для различных типов.

И первый параметр — это Volume Initialization. Этот параметр есть у FluidObstacleInflowOutflow типов. Данный параметр указывает то, как будет использоваться объём меш объекта. Можно указать три типа инициализации объёма:

    • Volume. Означает, что объём меша будет использоваться в симуляции. И в симуляции объект будет полым. Например, объект Fluid или Inflow будут испускать жидкость только из своего объёма. А препятствие будет так же создано на основании объёма исходного меш объекта. И объём меша будет преобразован в воксели жидкости (в случае Fluid/Inflow) или в воксели препятствия (в случае Obstacle).
    • Shell. Использует только оболочку исходного меш объекта. То есть, если добавить Fluid сферу, то в симуляции из этой сферы будет создана пустая жидкостная сфера (то есть внешне сфера будет похожа на сферу, а внутри неё будет пустота, как у воздушного шарика). Толщина стенки пустого объекта будет в один воксель.
    • Both. Использует как объём исходного меш объекта, так и покрывается оболочкой слоем в один воксель.

И следующий общий параметр — это Export Animated Mesh. Если эта галочка выключена, то в симуляции будут учитываться только базовые трансформации исходного меш-объекта (позиция/поворот/масштаб). Иначе будут учитываться деформации исходного меша (например, деформации с помощью арматуры, ключей формы, различных модификаторов, меняющих геометрию и т.д.). В общем если у исходного меша меняются позиции вершин (или создаются новые вершины), то эту галочку стоит включить. Если исходный меш-объект имеет только объектные трансформации, эту галочку стоит выключить, так как симуляция будет просчитываться быстрее.

На этом общие параметры закончились. Далее — уникальные параметры различных типов жидкости.

Параметры домена

Под-вкладка Settings

Здесь находится всё, что связано с основными настройками симуляции.

Simulation Threads — указывает количество ядер процессора, которые будут использования в процессе симуляции. Если установлено в 0, то блендер автоматически определит количество ядер и будет использовать максимум доступных ядер, но иногда вместо использования 4 ядер, блендер будет использовать только 2 ядра. Поэтому желательно вручную указать этот параметр, если не хотите ждать дольше просчёта, или наоборот, если не хотите, чтобы система подвисала.

Final Resolution — разрешение финальной симуляции, а точнее количество вокселей самой длинной стороны домена (разрешения остальных сторон домена вычисляются автоматически, на основании пропорций домена).

Preview — разрешение, которое можно использовать для более быстрого проигрывания в окне 3д-вида. То есть, блендер даёт возможность указать два разрешения: Final и Preview. Первое разрешение — это разрешение симуляции, а второе разрешение — это разрешение для меша, который создаётся для предпросмотра. Дело в том, что воксели жидкости преобразовываются в меш, и можно указывать с помощью параметра Preview меньшее количество вокселей для преобразования в меш. Чтобы это легче понять, посмотрите на скриншот:

Слева на скриншоте меш сгенерирован с помощью параметра Final Resolution, а справа с помощью параметра Preview Resolution. Слева больше полигонов, а справа меньше. Одни и те же воксели жидкости преобразуются в меш с различными вариациями разрешения. То есть, имеется одна симуляция вокселей жидкости и две вариации сгенерированного меша (Final и Preview).

Render Display — указывает то, какой меш жидкости будет выводится на рендер:

    • Final — на рендере будет меш, сгенерированнный с помощью разрешения Final Resolution.
    • Preview — на рендере будет меш, сгенерированнный с помощью разрешения Preview.
    • Geometry — на рендере будет исходный меш домена.

Viewport — тоже самое, что и Render Display, но для окна 3д-вида. То есть указывает то, что будет отображено в окне 3д-вида.

Time Start — начальное время симуляции. Если будет установлено больше нуля, то блендер просчитает первые кадры симуляции в памяти и не сохранит их на жёсткий диск. И как только время симуляции будет больше Time Start, блендер начнёт записывать кадры симуляции в кеш. И в статус баре прогресс симуляции может долго показывать 0% (до тех пор, пока не начнётся запись в кеш). И стоит заметить, что симуляция всегда начинается с нулевого кадра.

End — конечное время симуляции. Если в сцене установлен FPS 30 кадров в секунду и конечный кадр в 120, то для симуляции в реальном времени этот параметр нужно установить в 4.0 секунды. Иначе, симуляция будет либо замедлена, либо ускорена. То есть, этот параметр указывает какое время будет в последнем кадре. Если Time Start равен 0.0, End равен 10.0, FPS равен 30, а последний кадр анимации (настройка сцены, находится в окне Timeline) будет равен 600, то симуляция будет в замедленном действии в два раза медленнее (симуляция как бы растянется на все 600 кадров).

Speed — это параметр, который указывает скорость симуляции. Он умножается на скорость, которая рассчитывается на основе параметров Time Start и End. И этот параметр можно анимировать. Например, чтобы сначала ускорить симуляцию, а потом замедлить.

Generate Speed Vecotrs — этот параметр указывает блендеру генерировать вектора скорости для меша жидкости или нет. То есть, если параметр включён, то вектора будут сгенерированны. И эти вектора скорости можно будет использовать в постобработке или в Cycles Render без постобработки, чтобы добавить размытие при движении. Полезно для быстро движущихся потоков, чтобы на рендере имитировать эффекты реальной камеры (в реальных камерах как правило быстро движущиеся потоки жидкости выглядят размытыми).

Reverse Frames — если этот параметр включён, то кадры симуляции будут воспроизводится в обратном направлении. Например, если запечены кадры от 0 до 3, то при отключённой опции при проигрывании анимации, кадры будут воспроизводится по очереди так: 0, 1, 2, 3. А если включить эту опцию, то кадры будут проигрываться так: 3, 2, 1, 0.

Offset — смещение кадров симуляции. Все кадры симуляции (кеш жидкости) хранятся на жёстком диске в виде *.gz файлов. Некоторым кадрам сцены соответствуют некоторые файлы из кеша. Например, кадру 0 соответствует файл из кеша под именем fluidsurface_final_0000.bobj.gz, а кадру 257 соответствует файл из кеша под именем fluidsurface_final_0257.bobj.gz. Но с помощью этого параметра можно указать к кадрам другие файлы кеша. Добавить смещение к кешу. Можно сделать так, что первый кадр кеша будет начинаться не с нулевого кадра, а с десятого. Для этого нужно указать параметр Offset на -10. Или если вам нужно, чтобы симуляция в нулевом кадре уже была 2 секунды при 30 FPS, то Offset нужно установить в 60.

Под-вкладка Bake

Здесь находится всё, что связано с кешем. В этой вкладке есть один параметр и один оператор (кнопка):

Cache Path — это директория, куда будет сохраняться кеш (то есть запечённая симуляция).

Bake — кнопка запуска симуляции. Когда симуляция уже запущена, её можно прервать в статус баре, нажав на крестик в полосе прогресса, либо можно нажать клавишу Esc. Помните об этом во время проигрывания уже запечённых кадров (интерфейс блендера не замораживается во время запекания). Можно случайно отменить процесс запекания жидкости и возобновить его уже будет невозможно.

Под-вкладка Boundary

Здесь находятся настройки границ домена и настройки генерации меша. Данная вкладка хранит следующие параметры:

Slip Type — указывает, какое трение/скольжение будет у жидкости о границы домена:

    • No Slip — отсутствует скольжение. Жидкость прилипает к границам домена.
    • Free Slip — отсутствует трение. Жидкость скользит по границам домена, как по льду (но без трения). Если жидкость попадает на границу домена, то она не сможет отскочить от неё, так как граница домена обнуляет скорость по вектору нормали.
    • Partial Slip — частичное скольжение. При включении этого типа скольжения добавляется параметр: Amound — величина скольжения. Если 0.0, то отсутствует скольжение (граница липкая), если 1.0, то отсутствует трение (100 % скольжения). 0.5 — 50 % скольжения и 50 % трения.

Surface Smoothing — сглаживание поверхности меша жидкости (эффект похож на работу модификатора Smooth). Чем выше значение, тем более гладкая поверхность меша жидкости. 0.0 — отсутствует сглаживание. Максимальное допустимое значение: 5.0.

Subdivisions — с помощью этого параметра можно подразбить решётку для генерации меша. Если параметр меньше 2, то подразбиения не будет, если равен 2, то одна клетка решётки для генерации меша будет разделена на 8 клеток (2 по вертикали, две по горизонтали и две по глубине, из одного кубика получится как бы 8 кубиков 2x2x2). Если этот параметр установить на 3, то одна решётка будет разделена на 27 решёток (3x3x3), при 4 на 64 (4x4x4) и т.д. Например, если разрешение симуляции равно 100x50x25, а Subdivisions — 2, то разрешение решётки для генерации меша жидкости будет 200x100x50 соответственно. В общем этот параметр позволяет создавать более высокополигональный меш жидкости.

Remove Air Bubbles — если эта опция включена, то между препятствиями и поверхностью жидкости удаляются воздушные зазоры, путём добавления дополнительных вокселей для генерации меша. Чтобы лучше понять этот параметр, посмотрите картинку:

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

Под-вкладка Particles

В этой вкладке хранятся настройки частиц.

Tracer — количество частиц трейсеров. Это может быть пузырьки в мёде, кусочки ягод в варенье (то есть различного рода включения в жидкости, которые плавают в ней). О трейсерах расскажу ниже.

Generate — этот параметр двусмысленный. Во первых, он влияет на количество генерируемых плавающих частиц (пены) и на количество всплесков (частицы Drops). Но второе значение этого параметра вступает в силу, когда значение Subdivisions (под-вкладка Boundary) выше 1. Если параметр Generate больше нуля и параметр Subdivisions больше или равен 2, то генерируются брызги, реализованные в виде геометрии (в виде полигонов). На рисунке ниже изображён пример с геометрическими частицами и без:

На картинке две симуляции имеют одинаковые параметры, за исключением параметра Generate. Слева этот параметр установлен на 10.0, а справа на 0.0.

Под-вкладка World

Здесь хранятся параметры пространства симуляции. По-умолчанию два параметра не активны. Это параметр Gravity и World Size Meters.

Gravity — это гравитация в симуляции жидкости. По-умолчанию используется гравитация сцены. Если во вкладке Scene окна Properties отключить гравитацию, то значение гравитации можно будет указать в этом параметре.

World Size Meters — реальный размер домена в метрах. По-умолчанию используется размер исходного объекта домена. Если во вкладке Scene окна Properties установить единицы измерения на None, то значение размера домена можно будет указать в этом параметре.

Под-вкладка Viscosity

Хранит настройки вязкости. В заголовке панели Viscosity можно выбрать предустановки: Water (вода), Oil (масло), Honey (мёд).

Base — базовое значение вязкости. Чем выше это значение, тем более вязкая жидкость.

Exponent — отрицательная экспонента значения вязкости. То есть значение Base умножается на 10 в степени минус Exponent. Например, если Base равно 4, а Exponent — 3, то вязкость будет равна 4 * 10 ^ (-3). Эта экспонента нужна, чтобы легче было указать слишком низкие или слишком высокие значения вязкости. Чем выше этот параметр, тем ниже вязкость (то есть присутствует обратная зависимость).

Параметры Fluid

Volume Initialization — общий параметр (описан выше).

Export Animated Mesh — тоже общий параметр, который я уже описал выше.

Initial Velocity XYZ — вектор, указывающий начальную скорость жидкости. Если равно (1.0, 0.0, 0.0), то начальная скорость жидкости будет одна единица (метр/блендер unit) по оси X.

Параметры Obstacle

Volume Initialization — описан выше.

Export Animated Mesh — описан выше.

Slip Type — аналогичен одноимённому параметру у объекта домена. Но у домена этот параметр отвечает за трение о стенки, а у Obstacle — за трение о поверхность препятствия. Если Free Slip, то жидкость будет скользить по поверхности препятствия, No Slip — будет прилипать, Partial Slip — промежуточное между отсутствием и наличием трения (частичное трение указывает параметр Amount, как и у домена).

Impact Factor — этот параметр указывает то, как препятствие действует на жидкость. Данный параметр вступает в силу, если объект препятствия движется. При значении 1.0 — препятствие обычным способом соударяется с жидкостью и толкает её со стандартной силой. Если значение больше 1.0, то сила, которую придаёт препятствие к жидкости будет увеличена. Если значение отрицательно, то при врезании препятствия в жидкость, жидкость будет удаляться, а при отдалении препятствия от жидкости, вся жидкость, которая находится на поверхности препятствия будет отталкиваться от неё. Поэкспериментируйте с этим параметром и поймёте что я имею в виду. Данный параметр может использоваться для подстройки массы препятствия. То есть препятствие можно сделать более или менее массивным, чем оно есть на самом деле.

Параметры Inflow

Галочка Flow в заголовке панели — включает или отключает испускание жидкости из объекта Inflow. Например, можно выключить (как водопроводный кран) источник жидкости, а потом опять включить. Данный параметр анимируемый, как и большинство параметров.

Volume Initialization — описан выше.

Export Animated Mesh — описан выше.

Local Coordinates — использовать локальные координаты исходного объекта, чтобы указать направление начальной скорости источника жидкости. Иначе (если выключен) будут использоваться глобальные координаты сцены. Например, если источник жидкости вращается, то желательно включить этот параметр.

Initial Velocity XYZ — так же, как и у объекта Fluid. Указывает начальную скорость и направление источника жидкости.

Параметры Outflow

Галочка Flow в заголовке панели — включает или отключает объект оттока. Аналогично одноимённой галочке у объекта Inflow. То есть отток можно выключить из симуляции, а потом опять включить.

Volume Initialization — описан выше.

Export Animated Mesh — описан выше.

Параметры Particle

Под-вкладка Settings

Influence Size — указывает на то, будут ли вторичные частицы разного размера. При значении 0.0 — все частицы будут иметь одинаковый размер. При 1.0 — размер частиц будет разным и колеблется от 0.2 до 2.0. Если значение выше 1.0, то разность размеров частиц будет ещё больше.

Influence Alpha — если это значение больше нуля, то значения прозрачности частиц изменяются в зависимости от их размера.

Drops — включает генерацию частиц-капель (те частицы, которые находятся над поверхностью жидкости).

Floats — включает генерацию частиц-пены (те частицы, которые находятся на поверхности жидкости).

Tracer — включает генерацию частиц-трейсеров (те частицы, которые являются вкраплениями в жидкости).

Можно создать три объекта Particle (для большего контроля) и у каждого активировать разные галочки. Либо можно создать один объект Particle, и активировать у него все галочки.

И у объекта Particle создаётся fluid-система частиц (имеет меньше настроек, чем обычная система частиц). Располагается там же, где и обычные частицы (вкладка Particles).

Под-вкладка Cache

Имеет один параметр:

Path — указывает на то, где искать кеш частиц (кеш частиц хранится в файлах fluidsurface_particles_####). Как правило это путь должен совпадать с параметром Cache Path у объекта домена.

Параметры Control

Quality — качество. Чем выше качество, тем медленнее просчёт.

Reverse Frames — перевернуть анимацию Control объекта задом на перёд. Например, есть 4 кадра анимации: 0, 1, 2, 3 у объекта Control. Если галочка выключена, то анимация будет в таком же порядке воспроизводиться. А если включена, то кадры будут следовать в обратном порядке: 3, 2, 1, 0.

Time Start — указывает начальное время работы контролирующего объекта. Например, если вам нужно, чтобы Control объект не сразу начал притягивать жидкость, а через определённое время, то повышайте этот параметр.

Time End — конечное время работы контролирующего объекта. Если вы хотите, чтобы жидкость притягивалась до последнего кадра, то установите этот параметр в такое же значение, что и у объекта домена в параметре Time End. Если нужно прекратить притягивание жидкости в середине симуляции, то понижайте этот параметр (чтобы он был ниже параметра Time End объекта домена).

Attraction Strangth — сила притяжения. Положительные значения притягивают жидкость, отрицательные — отталкивают.

Attraction Radius — радиус силового поля, на котором действует сила притяжения.

Velocity Strength — этот параметр отвечает за то, как зависит скорость жидкости от скорости Control объекта.

Velocity Radius — радиус силового поля, на котором действует влияние скорости Control объекта.