При хостинг поддержке Интернет-сообщества VBIOS CS-Mapping.com.ua
Вернуться   CS-Mapping.com.ua > Forum > Разработка игр > 3D Графика > Blender
Ник
Пароль
Регистрация Правила форума FAQ Пользователи Администрация Календарь Поиск За 24 часа Пометить все разделы прочитанными

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.02.2018, 23:10  #1
Slux
Slux
CEO of CSM
Регистрация: 20.06.2006
Адрес: /dev/tty0
Возраст: 33
Сообщения: 5,774


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



Для тех, кто хочет сделать по-быстрому или если сцена содержит множество объектов, 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 Просмотров: 217 Размер:  121.0 Кбайт   2018-02-21 21_38_44-Blender.png Просмотров: 243 Размер:  171.9 Кбайт  

Теперь анимации можно перенести на арматуру, последовательность действий такая:
  1. Выбрать арматуру
  2. Выбрать объект
  3. Ctrl+L -> Animation Data



Теперь анимации необходимо отвязать от кубиков, для этого в окне Outliner выберите кубик, раскройте его дерево, выберите правой кнопкой Animation и нажмите Unlink Action. После этих действий можно привязать объекты к своим костям:
  1. Выбрать объект
  2. Выбрать арматуру
  3. Ctrl+P -> Bone

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



Оригинал урока на CSM Wiki
[ Миниатюры ]
2018-02-21 20_07_25-Blender.png Просмотров: 544 Размер:  40.0 Кбайт  2018-02-21 20_49_54-Blender.png Просмотров: 564 Размер:  21.7 Кбайт  untitled.jpg Просмотров: 553 Размер:  25.5 Кбайт  2018-02-21 21_38_02-Blender.png Просмотров: 217 Размер:  121.0 Кбайт  2018-02-21 21_38_44-Blender.png Просмотров: 243 Размер:  171.9 Кбайт  2018-02-21 22_26_55-Blender.png Просмотров: 558 Размер:  36.5 Кбайт  

[ Вложения ]
Тип файла: zip bake_physics.zip (103.6 Кбайт, 46 просмотров)
Тип файла: zip pieces-to-armature.zip (1.3 Кбайт, 31 просмотров)

Последний раз редактировалось slux, 02.03.2018 в 12:33.
Slux вне форума Ответить с цитированием
Старый 21.02.2018, 23:22  #2
xDShot
xDShot
Генерал-Полковник
Регистрация: 20.12.2010
Адрес: Санкт-Петербург
Возраст: 25
Сообщения: 1,819
Замечания: 2


По умолчанию

Спасибо
xDShot вне форума Ответить с цитированием
Старый 21.02.2018, 23:32  #3
nemyax
nemyax
тндайпц тра
Регистрация: 30.07.2015
Сообщения: 639


По умолчанию

Странный у тя метод. Я вот при словах "запечь в арматуру" ожидал бы, что под каждый объект создастся косточка, прискинит его себе, заберёт у него анимацию и склеит все объекты в единый меш. Ото было бы дело.
nemyax вне форума Ответить с цитированием
Старый 21.02.2018, 23:35  #4
Slux
Slux
CEO of CSM
Регистрация: 20.06.2006
Адрес: /dev/tty0
Возраст: 33
Сообщения: 5,774


По умолчанию

2 nemyax:
У меня пользовательский метод, а у тебя скриптовый. Если сделаешь аддон, все только спасибо скажут
Slux вне форума Ответить с цитированием
Старый 21.02.2018, 23:56  #5
nemyax
nemyax
тндайпц тра
Регистрация: 30.07.2015
Сообщения: 639


По умолчанию

2 slux:
Ок, я набарабаню скребтец потом без спешки. Но не в виде аддона, а для выполнения в текст-редакторе.
nemyax вне форума Ответить с цитированием
Старый 22.02.2018, 11:14  #6
H-3D
H-3D
Новобранец
Регистрация: 31.01.2013
Сообщения: 9


По умолчанию

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

Насколько помню, он в smd с мешем добавляет один лишний треугольник с левым материалом, но это легко обычным блокнотом удалить.
H-3D вне форума Ответить с цитированием
Старый 23.02.2018, 18:28  #7
Raid
Raid
Регистрация: 11.07.2006
Адрес: CSM-чат
Возраст: 29
Сообщения: 8,311


По умолчанию

Круть, надо будет попробовать. Жесять лет ждал такой тутор.
Raid вне форума Ответить с цитированием
Старый 23.02.2018, 19:27  #8
FiEctro
FiEctro
Регистрация: 28.07.2006
Адрес: Эквестрия
Возраст: 29
Сообщения: 17,146


По умолчанию

А можно сделать взрыв таким образом?
FiEctro вне форума Ответить с цитированием
Старый 24.02.2018, 12:18  #9
Slux
Slux
CEO of CSM
Регистрация: 20.06.2006
Адрес: /dev/tty0
Возраст: 33
Сообщения: 5,774


По умолчанию

[ Цитата ] Сообщение от FiEctro: А можно сделать взрыв таким образом?
Конечно можно! Аддон Cell Fracture поможет разбить объекты на осколки, он изначально есть в блендере, но по умолчнию выключен. Единственый недостаток моего метода - при количестве осколков более десяти задолбаешься к каждому привязывать кости. Поэтому дождёмся скрипт от nemyax.
Slux вне форума Ответить с цитированием
Старый 24.02.2018, 15:56  #10
nemyax
nemyax
тндайпц тра
Регистрация: 30.07.2015
Сообщения: 639


По умолчанию

2 slux:
Сделай тестовую сценку, битте.
nemyax вне форума Ответить с цитированием
Старый 24.02.2018, 20:43  #11
Slux
Slux
CEO of CSM
Регистрация: 20.06.2006
Адрес: /dev/tty0
Возраст: 33
Сообщения: 5,774


По умолчанию

2 nemyax:
Так ведь в аттаче лежит же. Или надо что-то посложнее и покруче?
Slux вне форума Ответить с цитированием
Старый 24.02.2018, 22:18  #12
FiEctro
FiEctro
Регистрация: 28.07.2006
Адрес: Эквестрия
Возраст: 29
Сообщения: 17,146


По умолчанию

2 slux:
А можешь написать тутор про создание рельефов и запекания их в текстуру со всеми картами нормалей, хейтмапами и глоссмапами?
FiEctro вне форума Ответить с цитированием
Старый 25.02.2018, 10:10  #13
Slux
Slux
CEO of CSM
Регистрация: 20.06.2006
Адрес: /dev/tty0
Возраст: 33
Сообщения: 5,774


По умолчанию

2 FiEctro:
Можно попробовать, почему бы и нет. Сам всегда забываю как это делается, вот и будет памятка.
Slux вне форума Ответить с цитированием
Старый 27.02.2018, 11:51  #14
nemyax
nemyax
тндайпц тра
Регистрация: 30.07.2015
Сообщения: 639


По умолчанию

По ходу дела в блендере бага. Не обновляет трансформации объектов при переключении кадров скриптом.
Вот убедитесь-ка. Заанимируйте кубику перемещение, выделите его и выполните:
Код:
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 вне форума Ответить с цитированием
Старый 27.02.2018, 12:05  #15
xDShot
xDShot
Генерал-Полковник
Регистрация: 20.12.2010
Адрес: Санкт-Петербург
Возраст: 25
Сообщения: 1,819
Замечания: 2


По умолчанию

sc.frame_current = i --> sc.frame_set(i)
xDShot вне форума Ответить с цитированием
Старый 27.02.2018, 12:06  #16
nemyax
nemyax
тндайпц тра
Регистрация: 30.07.2015
Сообщения: 639


По умолчанию

Да, так работает.

nemyax, подумав, добавил 27.02.2018 в 12:22
Вот, проверьте.
  1. Выделите в сцене объекты-мешы, для которых хотите создать риг. Можно взять сценку slux-а.
  2. Задайте диапазон кадров, которые надо перенести в скелетную анимацию.
  3. Откройте скрипт в блендерном текстовом редакторе или скопируйте туда его содержимое.
  4. Если не хотите, чтобы оригинальные мешы автоматически удалялись, в последней строчке скрипта сделайте pieces_to_armature(delete_orig=False) или просто pieces_to_armature()
  5. Нажмите в текстовом редакторе Run Script.
[ Вложения ]
Тип файла: zip pieces-to-armature.zip (1.3 Кбайт, 30 просмотров)

Последний раз редактировалось nemyax, 27.02.2018 в 15:40.
nemyax вне форума Ответить с цитированием
Старый 27.02.2018, 15:06  #17
Slux
Slux
CEO of CSM
Регистрация: 20.06.2006
Адрес: /dev/tty0
Возраст: 33
Сообщения: 5,774


По умолчанию

2 nemyax:
Как я понял, скрипт надо запускать уже после запекания физики в анимацию кубиков, но до переноса анимации на кости? Так работает, но кубик дублируется и у обоих экземпляров пустое поле Parent.

slux, подумав, добавил 27.02.2018 в 15:08
И у оригинального кубика анимация никуда не делась. Если что-то не так делаю, расскажи подробнее порядок действий.

Последний раз редактировалось slux, 27.02.2018 в 15:08.
Slux вне форума Ответить с цитированием
Старый 27.02.2018, 15:16  #18
nemyax
nemyax
тндайпц тра
Регистрация: 30.07.2015
Сообщения: 639


По умолчанию

[ Цитата ] Сообщение от slux: скрипт надо запускать уже после запекания физики в анимацию кубиков, но до переноса анимации на кости?
После запекания. Что там дальше куда переносится, не имеет значения. Главное что на мешах есть трансформации.
[ Цитата ] Сообщение от slux: И у оригинального кубика анимация никуда не делась. Если что-то не так делаю, расскажи подробнее порядок действий.
Создались новая арматура и новый меш, к ней прискиненный. Кости арматуры проанимированы. Если оригинальные мешы не нужны, их можно удолять.
nemyax вне форума Ответить с цитированием
Старый 27.02.2018, 15:23  #19
Slux
Slux
CEO of CSM
Регистрация: 20.06.2006
Адрес: /dev/tty0
Возраст: 33
Сообщения: 5,774


По умолчанию

А можно скриптом удалять старый объект? А то сотню дублей руками тереть тоже как-то не айс.
Slux вне форума Ответить с цитированием
Старый 27.02.2018, 15:24  #20
nemyax
nemyax
тндайпц тра
Регистрация: 30.07.2015
Сообщения: 639


По умолчанию

Попробовал вообще без запекания — тоже работает.

nemyax, подумав, добавил 27.02.2018 в 15:38
[ Цитата ] Сообщение от slux: А можно скриптом удалять старый объект? А то сотню дублей руками тереть тоже как-то не айс.
Добавил такую фичу.

Последний раз редактировалось nemyax, 27.02.2018 в 15:38.
nemyax вне форума Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 23:51.


Designed by FT-502, [email protected] Originally by Ulric Spaak
Hosted by: VBIOS.COM, Powered by: vBulletin
copyright © 2002 - 2020 by CS-Mapping.com.ua Community