Sidebar

[Урок] Запекание симуляции физики в анимацию

Slux

Administrator
Команда форума
Администратор
20.06.2006
5 915
33
  • Золотая медаль 311
  • Tux
  • Серебряная медаль 311
[Урок] Запекание симуляции физики в анимацию



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

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

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



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

  • Collision
  • Rigid Body

Для плоскости нужно убрать галочку 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 и следите за изменением формы кривых.

2018-02-21 21_38_02-Blender.png 2018-02-21 21_38_44-Blender.png

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

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



Теперь анимации необходимо отвязать от кубиков, для этого в окне Outliner выберите кубик, раскройте его дерево, выберите правой кнопкой Animation и нажмите Unlink Action. После этих действий можно привязать объекты к своим костям:

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

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


Оригинал урока на CSM Wiki
 

Вложения

Последнее редактирование:

nemyax

тндайпц тра
Команда форума
Модератор
30.07.2015
643
25
18
Странный у тя метод. Я вот при словах "запечь в арматуру" ожидал бы, что под каждый объект создастся косточка, прискинит его себе, заберёт у него анимацию и склеит все объекты в единый меш. Ото было бы дело.
 

Slux

Administrator
Команда форума
Администратор
20.06.2006
5 915
33
  • Золотая медаль 311
  • Tux
  • Серебряная медаль 311
2 nemyax:
У меня пользовательский метод, а у тебя скриптовый. Если сделаешь аддон, все только спасибо скажут :)
 

nemyax

тндайпц тра
Команда форума
Модератор
30.07.2015
643
25
18
2 slux:
Ок, я набарабаню скребтец потом без спешки. Но не в виде аддона, а для выполнения в текст-редакторе.
 

H-3D

New member
31.01.2013
9
0
0
Если результат планируется экспортить в smd, есть вот такой скрипт. В своё время очень меня выручил, когда я осознал, что «вот этим 50 объектам теперь надо добавить по косточке» :) Плохо, когда не могёшь в скрипты, в общем.

Насколько помню, он в smd с мешем добавляет один лишний треугольник с левым материалом, но это легко обычным блокнотом удалить.
 

Raid

VIP
VIP
11.07.2006
8 320
29
  • Rocket медаль
Круть, надо будет попробовать. Жесять лет ждал такой тутор.
 

FiEctro

Супер Модератор
Команда форума
Супер Модератор
28.07.2006
17 154
28
  • Золотая медаль 213
  • Neh
А можно сделать взрыв таким образом?
 

Slux

Administrator
Команда форума
Администратор
20.06.2006
5 915
33
  • Золотая медаль 311
  • Tux
  • Серебряная медаль 311
FiEctro сказал(а):
А можно сделать взрыв таким образом?
Конечно можно! Аддон Cell Fracture поможет разбить объекты на осколки, он изначально есть в блендере, но по умолчнию выключен. Единственый недостаток моего метода - при количестве осколков более десяти задолбаешься к каждому привязывать кости. Поэтому дождёмся скрипт от nemyax.
 

nemyax

тндайпц тра
Команда форума
Модератор
30.07.2015
643
25
18
2 slux:
Сделай тестовую сценку, битте.
 

Slux

Administrator
Команда форума
Администратор
20.06.2006
5 915
33
  • Золотая медаль 311
  • Tux
  • Серебряная медаль 311
2 nemyax:
Так ведь в аттаче лежит же. Или надо что-то посложнее и покруче?
 

FiEctro

Супер Модератор
Команда форума
Супер Модератор
28.07.2006
17 154
28
  • Золотая медаль 213
  • Neh
2 slux:
А можешь написать тутор про создание рельефов и запекания их в текстуру со всеми картами нормалей, хейтмапами и глоссмапами?
 

Slux

Administrator
Команда форума
Администратор
20.06.2006
5 915
33
  • Золотая медаль 311
  • Tux
  • Серебряная медаль 311
2 FiEctro:
Можно попробовать, почему бы и нет. Сам всегда забываю как это делается, вот и будет памятка.
 
  • Like
Reactions: FiEctro

nemyax

тндайпц тра
Команда форума
Модератор
30.07.2015
643
25
18
По ходу дела в блендере бага. Не обновляет трансформации объектов при переключении кадров скриптом.
Вот убедитесь-ка. Заанимируйте кубику перемещение, выделите его и выполните:
Код:
import bpy
sc = bpy.context.scene
for i in range(sc.frame_start, sc.frame_end + 1):
    sc.frame_current = i
    print(bpy.context.active_object.matrix_world.to_translation()[:])
Все выведенные значения будут одинаковыми. Кабздец ога?
Если мотать кадры руками, трансформации обновляются.
 

nemyax

тндайпц тра
Команда форума
Модератор
30.07.2015
643
25
18
Да, так работает.

[ADDED=nemyax]1519726963[/ADDED]
Вот, проверьте.
  1. Выделите в сцене объекты-мешы, для которых хотите создать риг. Можно взять сценку slux-а.
  2. Задайте диапазон кадров, которые надо перенести в скелетную анимацию.
  3. Откройте скрипт в блендерном текстовом редакторе или скопируйте туда его содержимое.
  4. Если не хотите, чтобы оригинальные мешы автоматически удалялись, в последней строчке скрипта сделайте pieces_to_armature(delete_orig=False) или просто pieces_to_armature()
  5. Нажмите в текстовом редакторе Run Script.
 

Вложения

Последнее редактирование:

Slux

Administrator
Команда форума
Администратор
20.06.2006
5 915
33
  • Золотая медаль 311
  • Tux
  • Серебряная медаль 311
2 nemyax:
Как я понял, скрипт надо запускать уже после запекания физики в анимацию кубиков, но до переноса анимации на кости? Так работает, но кубик дублируется и у обоих экземпляров пустое поле Parent.

[ADDED=slux]1519736884[/ADDED]
И у оригинального кубика анимация никуда не делась. Если что-то не так делаю, расскажи подробнее порядок действий.
 
Последнее редактирование:

nemyax

тндайпц тра
Команда форума
Модератор
30.07.2015
643
25
18
slux сказал(а):
скрипт надо запускать уже после запекания физики в анимацию кубиков, но до переноса анимации на кости?
После запекания. Что там дальше куда переносится, не имеет значения. Главное что на мешах есть трансформации.

slux сказал(а):
И у оригинального кубика анимация никуда не делась. Если что-то не так делаю, расскажи подробнее порядок действий.
Создались новая арматура и новый меш, к ней прискиненный. Кости арматуры проанимированы. Если оригинальные мешы не нужны, их можно удолять.
 

Slux

Administrator
Команда форума
Администратор
20.06.2006
5 915
33
  • Золотая медаль 311
  • Tux
  • Серебряная медаль 311
А можно скриптом удалять старый объект? А то сотню дублей руками тереть тоже как-то не айс.
 

nemyax

тндайпц тра
Команда форума
Модератор
30.07.2015
643
25
18
Попробовал вообще без запекания — тоже работает.

[ADDED=nemyax]1519738731[/ADDED]
slux сказал(а):
А можно скриптом удалять старый объект? А то сотню дублей руками тереть тоже как-то не айс.
Добавил такую фичу.
 
Последнее редактирование:

Half-Life: Alyx release

000
Дней
00
часа(ов)
00
minutes
00
Секунды
До выхода Half-Life: Alyx
Half-Life: Alyx вышел!

Доноры Красавчики

Пользователи онлайн