В этом третьем уроке серии об огне и дыме с использованием Fluid simulator в Blender 4.5 мы поговорим о том, как Blender выполняет и сохраняет Bake, то есть физическую симуляцию огня и дыма.


Этот урок является частью мини-серии из 10 эпизодов об основах огня и дыма в Blender 4.5. Чтобы просмотреть полный список эпизодов, нажмите здесь.

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


Текстовая расшифровка видео

Всем привет! В этом третьем уроке серии об огне и дыме с использованием Fluid simulator в Blender 4.5 мы поговорим о том, как Blender выполняет и сохраняет Bake, то есть физическую симуляцию огня и дыма. В частности, мы рассмотрим, как рассчитать симуляцию один раз для Domain, чтобы затем продублировать её и разместить в других частях сцены без повторного пересчёта для всех копий. В конце мы разберём, как задать Offset для воспроизведения симуляции, чтобы анимация начиналась с уже горящего огня, а не с момента воспламенения.

Исходная сцена для этого урока состоит из жаровни с уложенными в неё поленьями. Это два отдельных меша, при этом поленья объединены в один меш. Жаровня стоит на прямоугольном Plane, который служит полом, и позже мы разместим на нём другие жаровни. Виртуальный мир имеет Strength равный 0 и не содержит источников света, поэтому в режиме Rendered сцена выглядит полностью чёрной.

Из предыдущих уроков мы знаем, что чтобы объект создавал пламя, ему нужно назначить компонент Fluid типа Fire And Smoke Flow. Поэтому я добавляю к поленьям компонент Physics Fluid, устанавливая поведение Inflow, что означает, что древесина будет генерировать пламя на каждом кадре.

Затем я создаю Cube, назначаю ему компонент Flow типа Domain и размещаю его так, чтобы он изначально охватывал всю сцену. Сразу же становится заметна проблема: разрешение по умолчанию слишком низкое, из-за чего Voxel получаются слишком крупными, и пламя выглядит чрезмерно большим по сравнению с объектами, которые его создают.

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

Самое очевидное решение — изменить размер Domain так, чтобы он охватывал только жаровню и немного пространства над ней для развития пламени и дыма. Теперь разрешение работает даже слишком хорошо. Возможно, оно даже избыточно, поэтому можно вернуть его к 32, при этом пламя всё равно будет хорошо детализировано. Проблема скорее в том, что древесина создаёт слишком много огня.

Чтобы уменьшить количество создаваемого огня, можно отрегулировать параметр Fuel у объекта Inflow. Логично предположить, что чем выше значение Fuel, тем больше топлива сгорает на каждом кадре. Следовательно, нужно уменьшать это значение до тех пор, пока пламя не станет подходящего размера.

Как упоминалось в предыдущих уроках, данные, связанные с Baking, то есть расчётом физической симуляции, сохраняются в отдельной папке, путь к которой указан в разделе Cache объекта Domain. Перед созданием Domain я сохранил файл на диск, поэтому папка кэша находится в той же директории, что и файл проекта Blender.

В разделе Cache объекта Domain можно задать диапазон кадров, в пределах которого будет рассчитываться симуляция. Этот диапазон не обязательно должен совпадать с диапазоном кадров анимации сцены. Это может быть полезно для расчёта ограниченного числа кадров, чтобы просто оценить внешний вид огня перед выполнением полного Bake. Также это удобно, если объекты Fluid не находятся в поле зрения камеры, и для этих кадров нет необходимости рассчитывать физическую симуляцию.

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

Проблема в том, что при нажатии Play на Timeline Blender использует одну и ту же папку кэша для всех Domain, а значит, они будут совместно использовать одни и те же данные симуляции. Если вы уверены, что хотите сохранить одинаковые параметры для всех симуляций, можно попытаться немного обмануть зрителя, слегка повернув Domain или назначив каждому Domain разные Materials, чтобы разнообразить вид пламени при рендеринге.

Настоящая проблема возникает, если изменить разрешение или любой другой параметр одного из Domain, а затем снова выполнить Bake. Например, я уменьшаю разрешение для более удалённых Domain, поскольку для объектов на заднем плане высокая детализация не требуется. Теперь Blender действительно путает данные, потому что один и тот же набор объёмных данных используется объектами с разными характеристиками.

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

До сих пор Blender пересчитывал Bake симуляции каждый раз при нажатии Play на Timeline. Однако это не единственный режим работы. Существует и другой режим, который предоставляет доступ к очень полезному инструменту. Чтобы упростить сцену, я оставляю только одну жаровню с её Domain и удаляю остальные. Обратите внимание, что удаление Domain не удаляет его данные с диска. Это на самом деле удобно, поскольку позволяет сохранить и повторно использовать данные симуляции позже. Но в данном случае эти данные мне больше не нужны, поэтому я удалю их вручную.

В разделе Cache объекта Domain есть меню Type, которое по умолчанию установлено в режим Replay. Это режим, который мы использовали до сих пор: Blender пересчитывает новый Bake каждый раз, когда мы возвращаемся к первому кадру и нажимаем Play, перезаписывая предыдущие данные.

Режим Modular позволяет выполнять отдельные Bake для различных аспектов симуляции. В некоторых случаях это полезно, поскольку даёт возможность анализировать или заменять отдельные части без пересчёта всей симуляции целиком.

Режим All позволяет выполнить Bake всей симуляции, но рассчитывает её в фоновом режиме, а не через Timeline. Чтобы запустить расчёт, нужно нажать кнопку Bake All в панели. Blender отобразит индикатор выполнения процесса. После завершения расчёта можно нажать Play на Timeline и просматривать результат гораздо более плавно, поскольку он уже предварительно рассчитан.

Чтобы изменить настройки симуляции, сначала нужно удалить существующие данные, нажав кнопку Free All. После этого параметры снова станут доступными для редактирования, и вы сможете их изменить. Затем необходимо снова нажать Bake All, чтобы Blender пересчитал симуляцию.

Просмотр папки, которая используется для хранения данных, позволит понять, какие модули или этапы расчёта вычисляются и сохраняются отдельно при использовании режимов Modular и All.

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

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

Чтобы решить эту задачу, можно ввести отрицательное число в поле Offset.

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

Длительность анимации в кадрах останется той, которая задана между Frame Start и Frame End.

В данном случае последние 25 кадров Timeline остаются без симуляции, потому что с помощью Offset мы указали Blender воспроизводить 25-й кадр симуляции на первом кадре Timeline.

Чтобы исправить это, нужно просто рассчитать больше кадров при выполнении Bake, чтобы симуляция покрывала всю Timeline. Поэтому в разделе Cache объекта Domain я устанавливаю Frame End равным 275, нажимаю Free All, а затем снова запускаю расчёт, нажав Bake All.

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


РАСШИРЕННАЯ ИНФОРМАЦИЯ О ПОЛИТИКЕ КОНФИДЕНЦИАЛЬНОСТИ И ИСПОЛЬЗОВАНИИ ФАЙЛОВ COOKIE