Поговорим о плагине RayFire для 3DS MAX. С помощью него можно анимировать динамические объекты, создавать разрушения и разбивать модели. Это отличное дополнение в работе фрилансера и VFX студий. Для симуляций используются PhysX от nVidia и Bullet (Bullet Physics Library) который распространяется под свободной лицензией zlib.
Больше интересного в Телеграм канале "Записки 3D-шника" https://t.me/notes3drus
Неполный список проектов, где использовался плагин:
Игры: Dishonored 2, Diablo 3, The Elder Scrolls Online, Batman: Arkham City, GTA San Andreas.
Фильмы: The Avengers, Transformers: Dark of the Moon, 2012, Star Trek Into Darkness.
Для просчета физики объектов можно использовать как статичную геометрию, так и анимированную. Стоит отметить, что плагин не использует оригиналы объектов, а создает копии исходных. При этом изначальные объекты скрываются из сцены. Таким образом, есть возможность быстро «откатиться» без использования дополнительных сохранений или бекапов.
При добавлении объектов в плагин есть несколько типов объектов. Для тех, кто уже сталкивался с подобными симуляциями, например во встроенном инструменте 3DS MAX – MassFX различия объектов будут знакомы. Первая вкладка окна отвечает за сами объекты.
Dynamic/Impact objects – это динамические объекты на которые воздействует сила гравитации и отскока от поверхности, скорость перемещения, и т.д.
Static & Kinematic objects – статические объекты не перемещаются, на них не действует гравитация и они не поддаются воздействию других объектов. Однако, они взаимодействуют с динамическими объектами. Как пример, можно рассматривать основу сцены – пол или другая поверхность, которая статична. Кинематические объекты могут быть проанимированы и могут воздействовать на другие динамические объекты, но не поддается воздействию извне. Как пример, пролет камня через стекло, когда изменением скорости камня при контакте со стеклом можно пренебречь. В данном случае камень будет кинематическим объектом. При этом камень можно назначить и динамическим объектом, но при этом будет необходим дополнительный просчет воздействия внешних сил, а это в свою очередь потребует больше времени на симуляцию. Стекло в свою очередь должно быть заранее разделено на фрагменты для визуального разрушения.
Sleeping objects – спящие объекты не участвуют в симуляции до взаимодействия с динамическим или кинематическим объектом. Из примера ранее, спящим объектом будет стекло, через которое проходит камень. Также в этом разделе можно дополнительно включить функцию Dead objects. При этом объекты будут взаимодействовать с динамическими или кинематическими объектами, а также перемещаться, но лишь до момента пока осуществляется контакт. Далее такие объекты просто останавливается. Инерция и гравитация на них не действует.
Для каждого типа объектов можно установить свои физические параметры.
Simulation geometry – тип геометрии который накладывается на меш и используется при для просчета взаимодействий. В игровых движках встречаются похожие термины, например: Collider или Collision. На выбор есть: Box, Sphere, Convex и Concave. Box и Sphere наиболее простые в просчете и требуют наименьшее количество ресурсов при симуляции. Convex – описывает общую форму используемого меша, без точного совпадения со всем рельефом и деталями объекта. Concave – самая точная геометрия взаимодействий. Полностью описывает форму меша, но при этом наиболее требовательная к ресурсам при симуляции. На одиночных объектах разница будет не заметна, однако в сложных сценах оптимизация даст приличную экономию времени.
Material – стекло, резина, металл и прочее. Заданные параметры каждого пресета содержат плотность, упругость и т.д. Здесь всё достаточно просто. Эти параметры можно редактировать.
На второй вкладке Physics есть возможность настройки движка – Physical options. На выбор можно использовать PhysX или Bullet. Выбор параметров будет одинаковый. Start и End Frame – диапазон кадров для симуляции. Time Range – количество кадров. Collision tolerance – на какое расстояние один объект может проникать в другой или пересекаться. Substeps – количество просчетов траектории объекта в один кадр. Gravity – коэффициент гравитации. Time Scale – коэффициент времени. В верхней части расположены кнопки: Preview, Bake, Pause и Stop. Preview – демонстрирует получившуюся анимацию без записи анимационных ключей. Bake – кроме просчета и показа процесс взаимодействия дополнительно размещает ключи анимации на таймлайне для последующего быстрого доступа и редактирования всех движений объектов. В режиме паузы доступно изменение параметров движка. Например, параметров гравитации или коэффициента времени. Все эти изменения будут записаны, как до редактирования параметров, так и после.
Далее во второй вкладке Physics есть окно Simulation properties. В него можно добавлять объекты, которые действуют на фрагментированный меш разрушения.
Как пример, рассмотрим RF_Bmb – «бомба».
На выбор есть сферическая, планарная и цилиндрическая. Также есть параметры настройки. Кроме «бомбы» из плагина, можно использовать тот же инструмент встроенный в Макс - PBomb. Настроек несколько меньше, а встроенный в плагин вариант будет работать быстрее.
Кроме перечисленных также можно использовать встроенные в Макс силы – ветер, гравитация и остальные.
Activation options в этом разделе можно задать включение спящих объектов с помощью сторонних сил (ветер и пр.), анимированной геометрии, мыши и текстуры.
Interactive demolition properties – интерактивное разрушение объекта. При его включении, меш будет разрушаться в реальном времени с заданными свойствами.
Следующая вкладка Fragments – параметры фрагментирования объекта (не интерактивное). В этом разделе можно задать способ разрушения, количество итерация и другие параметры.
Кроме отдельного рабочего окна плагина, есть несколько модификаторов, которые можно применять на объекты:
RayFire Asperity – добавляет детализацию на фрагменты, но и увеличивает количество полигонов.
RayFire Bricks – позволяет разбивать геометрию на кирпичи.
RayFire Clusters – позволяет объединять разбитые части объекта в более крупные группы.
RayFire Cracks - модификатор позволяет анимировать реальные трещины.
RayFire Rigid – расширенная настройка физики и разрушений в реальном времени.
RayFire Shatter - модификатор повреждений и фрагментации на основе тетраэдра.
RayFire Slice – повторяет функцию Макса Slice в Edit Poly, но с большим количеством настроек и в виде модификатора.
RayFire Voronoi – фрагментация меша путем алгоритма Voronoi.
RayFire Voxels – создаёт воксели на базе исходной геометрии. Воксель – тот же пиксель, но в объеме.
При последующем использовании разрушаемых объектов и интеграции их в движок есть проблема с топологией. Как и ProBoolean, RayFire оставляет после себя объекты с не очень правильной сеткой. Остается много неиспользуемых вертексов и некорректное применение групп сглаживания. Так как в будущем эти части разрушенного объекта не предполагают дальнейшее редактирование, то можно просто всё триангулировать, накинуть общий модификатор Smooth и сделать UV развертку автоматически, через Unwrap UVW используя Flatten Mapping.
RayFire - интересный и незаменимый инструмент в gamedev и повседневной работе. Это лишь поверхностный обзор плагина. Приемы и нюансы работы с ним, необходимо разбирать отдельно. Документацию на английском языке можно прочитать на сайте разработчика - https://rayfirestudios.com , видео версия на YouTube.
Плагин доступен по двум основным лицензиям: Single license - $285 и Three licenses - $695. Также доступна обучающая лицензия по цене $85.
Больше интересного в Телеграм канале "Записки 3D-шника" https://t.me/notes3drus
Пишите своё мнение в комментариях, задавайте вопросы и подписывайтесь на канал. Если вам понравилась статья, поддержите лайком. Спасибо.