Как сделать физику в blender

Обновлено: 05.07.2024

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

Конечно, многое можно сделать в Blender без участия физических законов, заменяя их подсобными средствами. Так, например, практический урок предыдущей главы продемонстрировал использование модификатора Lattice для имитации движения жидкости. Но куда реалистичнее этот же пример выглядел бы с использованием физики Blender.

Но за все нужно расплачиваться. Используя физику, вы получите качественное поведение анимации в ущерб производительности. Время обработки даже простой сцены может быть очень длительным, и если есть возможность подмены реальной физики другими средствами, то, вероятно, лучше этим воспользоваться.

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

6.1. Физический мир Blender

Любая физическая функция в программе подчиняется гравитации, которая описывается в законе всемирного тяготения Ньютона. Не будем вдаваться в дебри фундаментальной физики. Важно знать, что ускорение притяжения предметов к Земле в реальном мире равно 9.8 м/с. Это же значение установлено в Blender по умолчанию.

В качестве оси притяжения используется Z, т. е. объект с включенной физикой будет падать вниз по оси. Однако многие функции Blender имеют свое значение гравитации, которое является относительным по отношению к глобальному. В свою очередь глобальный параметр можно изменить на панели Scene окна Properties

(рис. 6.1). Изменение этого параметра будет касаться всех локальных

в сцене, поэтому корректируйте его с осторожностью.

Физический мир Blender обширен. Вы можете с его помощью имитировать движение жидкостей, горение огня, дым, взрывы и многое другое. Все эффекты разбиты по тематическим группам в окне Properties . Основные настройки сконцентрированы на панели Physics (Физика) (рис. 6.2).

Рис. 6.1. Глобальная переменная Gravity

Рис. 6.2. Панель Physics окна Properties

 Force Field (Силовые поля). Здесь сконцентрированы функции, оказывающие динамичное воздействие на остальные физические объекты. К примеру, с их помощью можно имитировать дуновение ветра.

 Collision (Столкновение). Настройки поведения объектов при взаимодействии друг с другом. Например, каким образом будет вести себя ткань, положенная на обычный Mesh -объект.

 Soft Body (Мягкие тела). Этот инструмент можно использовать для создания тканей, волос, пружин. Он прекрасно взаимодействует с полями и столкновениями, поэтому оптимально подходит к имитации раскачивания чего-либо, например флага.

 Cloth (Ткань). Специальные настройки, оптимальные для создания одежды. Имеются заготовки различных тканей. Конечно, для этого можно использовать Soft Body , но Cloth предпочтительней.

 Fluid (Жидкость). Здесь вы найдете обширные настройки для имитации жидкостей. С помощью данного инструмента можно с легкостью создать: струйку воды, льющейся из крана; водяные брызги; тающий лед и многое другое.

 Smoke (Дым). Инструмент для имитации дыма, например от костра.

 Dynamic Paint (Динамичная краска). Уникальный инструмент, позволяющий создавать динамичные детали, такие как след краски от мазка кистью по стене, следы от шин в пыли, отпечатки сапог в снегу, рябь на воде.

Есть и еще одна панель физики в окне Properties , которая носит название Particles (Частицы) (рис. 6.3).

С них мы и начнем постигать столь сложный и прекрасный мир физики Blender.

Рис. 6.3. Настройки Particles в окне Properties

6.2. Создание и настройка частиц

Частицы ( Particles ) представляют собой множество мелких объектов, подчиняющихся физическим законам. Они прекрасно могут взаимодействовать с другими системами физики Blender. С помощью частиц можно создавать как динамичные объекты, так и статичные. Например: фейерверк, огонь, дым, фонтан, волосы, шерсть, мех и т. д.

Для того чтобы частицы могли функционировать, им нужен родительский объект, который называют эмиттером ( Emitter ). В качестве эмиттера могут служить примитивы Mesh .

Создать частицы очень легко. Нужно выделить Mesh в сцене, перейти на панель Particles окна Properties (см. рис. 6.3) и нажать кнопку с плюсом. Это действие создаст новую систему частиц. К одному и тому же объекту может быть присоединено сразу несколько систем частиц с разными настройками. Например, для создания огня понадобятся частицы, имитирующие пламя, и частицы, создающие дым.

Попробуйте добавить частицы к кубу, который содержится в сцене Blender. Уже по умолчанию они настроены на непрерывную генерацию и падение вниз под силой тяжести (рис. 6.4).

Частицы могут быть статичными и динамичными. Переключение режимов генерации осуществляется в меню Type (рис. 6.5).

Статичные (пункт меню Hair ) оптимально подходят для создания волос, меха, травы. Слово "статичные" не значит, что они не могут двигаться. Например, волосы имеют одинаковую длину, но способны шевелиться под воздействием ветра.

Динамичные (пункт меню Emitter ), наоборот, уже изначально участвуют в анимации. С их помощью можно создавать объекты, меняющие свою форму со временем: дождь, снег, огонь, дым, взрывы. Этот тип является активным по умолчанию.

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

Самый главный параметр, точнее группа опций, — это Emission (Излучение). Именно здесь выполняется начальная настройка генератора частиц (рис. 6.6).

Рис. 6.4. Генерация частиц по умолчанию

Рис. 6.5. Глобальные настройки системы частиц

Рис. 6.6. Закладка Emission —

Система динамичных частиц может функционировать только определенное время, которое устанавливается в параметрах Start (Начало) и End (Конец). По умолчанию там установлены значения анимации сцены в целом.

Если вы отъедете от куба несколько дальше, то увидите, что движение частиц обрывается в некоторой точке и дальше они просто исчезают. Возникает ощущение,

что поток резанули острым ножом. Здесь действует еще одно очень важное свойство частиц — это время жизни ( Lifetime ). На рис. 6.6 поле Lifetime содержит значение 50. Это значит, что каждая испускаемая частица живет ровно 50 кадров. А так как частицы проходят за отведенное время жизни одно и то же расстояние, то и получается эффект резкого обрыва.

Но есть еще один параметр регулирования времени жизни — это Random (Случайный). По умолчанию он выключен и содержит 0. Измените его в большую сторону, чтобы варьировать случайным образом время жизни каждой частицы. Попробуйте установить в поле Random значение 1 и проиграть анимацию. Вот теперь исчезание частиц будет крайне неравномерным.

Настраивая частицы, приходится часто проверять их в действии путем запуска анимации. Желательно установить первым активным кадром в анимации значение поля Start , хотя бы временно. Дело в том, что если проигрывание анимации начинается с того же кадра, что и запуск частиц, то Blender автоматически сбрасывает по новой генератор частиц. В противном случае вы, возможно, не увидите результата от своих манипуляций с настройками частиц.

Поле Number (Число) указывает, сколько частиц будет создано в соответствии с параметрами Start и End . Будьте осторожны с ним, излишне большое значение приведет к медленной работе системы.

На закладке Emission присутствует еще одна группа Emit From (Излучать из), которая ответственна за выбор источников генерации. Дело в том, что частицы могут испускаться разными частями объекта. По умолчанию эмиттерами являются плоскости примитива, но вы можете использовать в качестве генераторов вершины объекта. За это отвечают кнопки Verts (Вершины) и Faces (Грани) (рис. 6.7).

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

Совсем другой объем настроек появится, если выбрать тип источника Faces (см. рис. 6.6). Рассмотрим эти опции.

 Random (Случайный). Аналогично такой же опции, как и в случае с Verts .

 Even Distribution (Распределение). Включите эту опцию, если хотите, чтобы интенсивность испускания частиц зависела от размера конкретной плоскости.

 Кнопки Jittered , Random , Grid позволяют дополнительно настроить эмиттеры объекта.


Jittered (Дрожание). Включено по умолчанию. Указывает, каким образом каждая плоскость будет испускать частицы. Имеется два параметра:

 Particles/Face — отвечает за количество источников на одной плоскости, установка значения в ноль включает автоматическое определение;

Собственно решил поиграться с физикой в Blender по этому туториалу (blend файл здесь).
Но даже при достаточно маленьком (~250 объектов) количестве элементов уже начинаются заметные тормоза.

Я так понимаю, что Bullet Physics пока не умеет GPU? Или уже можно собрать с поддержкой OpenCL?

PS: Ну и да, мне интересен именно риалтайм.



Надеюсь вы понимаете влияние полигональности физ-объектов на фпс? А то знаете, бывают такие, кто не понимает, почему одна физ-сфера с миллионом поликов, съела все фпс. По OpenCL тут обсуждалось.


Надеюсь вы понимаете влияние полигональности физ-объектов на фпс?

Я видео привел, там примитивы и мало полигонов.
Железо у меня очень не слабое.

Там речь о рендере на основе OpenCL, а мне нужен обсчет физики :)


А тебе обязательно в игровом движке в рил-тайме обсчитывать? Ты же понимаешь, что к реальной физике это имеет мало отношения.


А тебе обязательно в игровом движке в рил-тайме обсчитывать?

Ну я не собираюсь на основе этого делать какую то игру для продажи/паблика.
Просто сделаю импорт из minetest и возможность крушить-ломать, т.к в принципе это просто реализуется.

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

Ты же понимаешь, что к реальной физике это имеет мало отношения.

Понимаю, но выглядит классно именно из за того, что в обсчет идет в реальном времени.
Мое железо (i7 2600K, 2x HD6950) вполне позволяет гонять очень тяжелые демки, а большего мне и не надо.

winddos ★★★ ( 18.12.12 01:27:39 )
Последнее исправление: winddos 18.12.12 01:29:23 (всего исправлений: 1)


Ну тогда ничем помочь не могу. У меня железо гораздо более слабое и физику симулировать совсем жалко.
Игровой движок в блендере сейчас не в приоритете, если туда OpenCL и прикрутят, то не скоро. Сейчас там работают в основном над рендерингом.



Untitled.jpg

Урок актуален для Blender 2.79.
Для тех, кто хочет сделать по-быстрому или если сцена содержит множество объектов, nemyax написал скрипт, который автоматически скиннит и запекает анимации. Нужно лишь настроить объектам физику и запустить скрипт в текстовом редакторе Blender. Истинных джедаев, которые не боятся ручной работы и хотят понять как это работает, приглашаю читать далее.

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

Так как арматура не может участвовать в симуляции физики, мы будем записывать анимацию прямо в кубики, а затем перенесём на арматуру. Внутри кубиков расположим арматуры, но кубики к ним привязывать не надо. Чтобы ориджин костей совпадал с ориджином соответствующего ей объекта, поможет такая последовательность действий:

  1. Выделить кубик
  2. Shift+S -> Cursor to Selected
  3. Shift+A -> Armature - Single Bone

Теперь на панели Physics нужно настроить свойства для всех объектов, кроме арматуры. К каждому объекту нужно применить такие параметры:

Для плоскости нужно убрать галочку Dynamic в параметрах Rigid Body, чтобы она не падала. Теперь можно протестировать симуляцию и заодно приблизительно засечь по таймлайну на каком кадре она завершится. Затем на таймлайне выбрать этот или чуть более поздний кадр и сделать его конечным, нажав E. У меня получилось чуть менее 100 кадров, поэтому ставлю сотый кадр конечным. Запуск симуляции: Alt+A.

Если всё хорошо, можно приступать к запеканию:

  1. Выделить объекты, для которых нужно записать анимацию
  2. На панели инструментов слева перейти на вкладку Physics
  3. Нажать кнопку Bake To Keyframes

Примечание: после запекания симуляции у всех выбранных объектов автоматически отключится свойство Rigid Body.

Если перейти в интерфейс анимации, там будет видно кривые анимаций в Graph Editor и ключевые кадры в Dope Sheet. Скорее всего ключевых кадров будет очень много, но можно сократить их количество и сгладить кривые с помощью аддона Simplify F-Curves (предварительно его нужно активировать в настройках), но будьте осторожны, используйте Shift на ползунке Distance Error и следите за изменением формы кривых.

Теперь анимации можно перенести на арматуру, последовательность действий такая:

  1. Выбрать арматуру
  2. Выбрать объект
  3. Ctrl+L -> Animation Data

Теперь анимации необходимо отвязать от кубиков, для этого в окне Outliner нужно:

  1. Выбрать кубик и раскрыть его дерево
  2. Выбрать правой кнопкой элемент Animation
  3. Нажать Unlink Action

После этих действий можно привязать объекты к своим костям:

  1. Выбрать объект
  2. Выбрать арматуру
  3. Ctrl+P -> Bone

На этом всё. Можно экспортировать в нужный формат и наслаждаться реалистичными столкновениями в любимом игровом движке без использования физики.


Риггинг необходим для анимации и симуляции физики в Blender, но обычно это делается для того, чтобы иметь возможность анимировать модель, такую как например человеческое тело. Такелаж дает четкую модель артикуляции в нужных точках определенным образом, обычно для имитации работы скелета. Прежде чем приступить к установке модели, вам нужно подумать о том, какие части должны двигаться и каким образом. Например, если это ноутбук, единственное, что должно быть в движении, в нашем случае вращение, — это экран, когда ноутбук открывается или закрывается.

Создание каракаса


Когда ваша модель готова, откройте Blender. Обратите внимание, что мы будем использовать Blender 2.8 для этого урока, хотя шаги не должны сильно отличаться для предыдущих версий Blender.

Сначала нам нужно создать каркас:

Установка и добавление костей


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

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

Для следующего шага нам нужно создать больше костей:

Риггинг костей


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

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

Воспитание кости очень просто:

Разъяснение еще проще: просто зайдите в тот же ящик и удалите текущую родительскую кость, если она есть.

Зеркальное отражение костей


Для тех из вас, кто работает с очень сложными, но симметричными моделями, есть быстрый способ сделать кости симметричными без необходимости делать их с нуля:

Именование костей


А теперь последний шаг: именование.

Если вы только начинаете работать с Blender, вы найдете эти учебники Blender 2.8 полезными.

Читайте также: