23 мая 2017 г.

Использование bhkCollisionObject

Попытки добавить в плагин возможность импорта и экспорта коллизий bhkCompressedMeshShape привели к тому, что пришлось пересмотреть всю логику работы с коллизиями, так как несовершенными мне показались и настройки коллизий в редакторе, и сам программный код в плагине. Таким образом были удалены все объекты и модификаторы связанные с настройкой коллизий и создан один новый объект - bhkCollisionObject, позволяющий в полной мере настроить различные варианты моделей столкновения. Обо всех нюансах его использования я и хочу рассказать.


Возможности bhkCollisionObject:


  • Импорт, экспорт и настройка моделей столкновения bhkBoxShape, bhkSphereShape, bhkCapsuleShape, bhkConvexVerticesShape, bhkNiTriStripsShape, bhkListShape, bhkPackedNiTriStripsShape и bhkCompressedMeshShape;
  • Расчет MOPP кода для bhkPackedNiTriStripsShape и bhkCompressedMeshShape;
  • Построение оболочек bhkBoxShape, bhkSphereShape, bhkCapsuleShape и bhkConvexVerticesShape вокруг геометрических объектов с возможностью копирования этих оболочек в новый геометрический объект;
  • Настройка параметров bhkRigidBody;
  • Визуализация и настройка центра массы для динамических объектов;
  • Расчет инерции на основе объёма модели и указанной в bhkRigidBody массы;

Настройка модели столкновения:


Для примера разместим в сцене банальный чайник. И добавим вспомогательный объект bhkCollisionObject, находящийся на панели Create | Helpers | NifTools. Выделив его и перейдя на панель Modify увидим несколько свитков с параметрами.

Свиток «Parameters»

  • Collision Type: выбор базового типа коллизии, «Simple Shape» для простых моделей, таких как bhkBoxShape, bhkSphereShape, bhkCapsuleShape, bhkConvexVerticesShape, bhkNiTriStripsShape либо нескольких простых моделей объединенных в bhkListShape. «Packed Strips Shape» для модели  bhkPackedNiTriStripsShape, и «Compressed Mesh» для bhkCompressedMeshShape;
  • Collision Meshes: лист с геометрическими объектами используемыми для построения модели столкновения. Добавлять и удалять объекты можно кнопками «Add» и «Remove» находящимися ниже листа. Если в листе несколько объектов при базовом типе «Simple Shape», то при экспорте автоматически будет создан bhkListShape. При добавлении объекта в этот лист видимой остается только его сетка, в соответствующих режимах просмотра;
  • Edit Shape: переход в режим настройки объекта из листа. В этот режим так же можно перейти выбором соответствующего подуровня целевого объекта. Редактируется выделенный в данный момент в листе объект. В сцене при этом его сетка становится красной. Выделять объекты можно как выбором в листе, так и в сцене. Все ниже расположенные элементы становятся доступны только в этом режиме;
  • Material: выбор материала для объекта;
  • Simple Shape Type: при базовом типе «Simple Shape» из этого выпадающего списка можно выбрать тип примитива. Исключение составляют объекты типов Box, Sphere и Capsule. Для них данный пункт предопределен и несменяем. Следующие два пункта доступны только при выборе bhkConvexVerticesShape;
  • Inflation:"раздувание" выпуклой оболочки. Используется для корректировки её габаритов, может иметь значение от -10 до 10.
  • Vertices: количество вершин из которых будет состоять выпуклая оболочка. Чем вершин больше - тем точнее оболочка будет соответствовать исходному объекту. Чем их меньше - тем выше производительность в игре.
  • Export Source Mesh: при установке этого чекбокса исходный геометрический объект будет экспортирован как геометрия. В противном случае он экспортироваться не будет.
  • Clone Mesh: нажатие на эту кнопку создаёт копию геометрии созданной на основе исходной, и заменяет в листе исходную на вновь созданную. При этом в сцене она появляется как новый геометрический объект.
Свиток «Rigid Body Parameters»

Полной информации по всем параметрам пока нет, возможно будет позже. Пока можно посмотреть как настроены ванильные модели подобного типа и настраивать по ним. Отмечу лишь пункт «Mass». Это масса модели в американских футах. Если создаем динамическую модель, то до экспорта надо выставить значение, поскольку оно повлияет на расчет инерции.

Свиток «Center Of Mass»

  • Edit Center Of Mass: включает режим редактирования центра массы модели столкновения. В этот режим так же можно перейти выбором соответствующего подуровня целевого объекта. При включении данного режима становится виден маркер центра массы, если масса модели выше ноля. При этом в редакторе устанавливается режим передвижения. Таким образом можно двигать маркер в сцене манипулируя мышью. Так же можно менять его положение вводя значения в расположенные ниже поля с координатами;
  • Calculate from Mesh: при выборе данного пункта центр массы рассчитывается исходя из объема модели и помещается в цент объема. Если в листе насколько объектов - то рассчитывается общий объём. При редактировании или смещении объектов положение маркера корректируется;
  • Use Pivot: при выборе этого пункта центр массы помещается в опорную точку объекта, либо в среднее значение нескольких точек, если в листе несколько объектов. При редактировании или смещении объектов положение маркера так же корректируется;
  • Local Offset: в этом положении центр массы может иметь произвольное установленное пользователем значение и не зависит от задействованных объектов.
Свиток «Display Parameters»

  • Display Hull: включает отображение полигонов модели столкновения;
  • Z Buffer: отключает сквозную прорисовку граней;
  • Hide Source Mesh: скрывает исходный объект в зависимости от настроек видовых экранов;
  • Show Center of Mass: показывает маркер центра массы, при значении массы выше ноля.



Настроив необходимые параметры можно экспортировать модель и проверить результат.



5 комментариев:

  1. Can someone translate this into English?
    And I'm not talking about Google Translate.

    ОтветитьУдалить
  2. @perture подскажи пожалуйста как в maxscript добавить в .meshList объект из сцены.
    macrorecorder не помогает.

    ОтветитьУдалить
    Ответы
    1. Не могу сказать, возможно ни как. Я не заморачивался с поддержкой максскрипта.

      Удалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить