Документация/Статьи/Обзор физической системы

From NeoAxis Engine Wiki

Jump to: navigation, search
Перейти на уровень выше
Physics08.jpg

Contents

Обзор

Физическая система позволяет обрабатывать столкновения между телами и имитировать физику твердого тела.

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

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

Возможности

  • Абстрагированный интерфейс подключения физической библиотеки. Позволяет без особых усилий подключить стороннюю физическую библиотеку.
  • Специальный формат файла, описывающего физическую модель (.physics файлы)
  • Примитивы: коробка (box), сфера (sphere), капсула (capsule), пользовательские примитивы, соответствующие форме модели.
  • Сочленения с одной (hinge), двумя (hinge2, universal) и тремя (ball) свободами вращения. Сочленение скольжения (slider) и фиксированное сочленение (fixed).
  • Моторы: притягивающий (attractor), роторный (geared), шаговый (servo)
  • Раздельные параметры, для затухания линейной и угловой скорости движения (linear damping, angular damping).
  • Разбиваемые сочленения
  • Возможность обработки столкновений для каждого примитива в отдельности
  • Отслеживание столкновения луча для каждого примитива в отдельности
  • Возможность выбирать тела в заданном объеме (например внутри коробки или сферы).
  • События: обработчик события столкновения, обработчик события разрыва сочленения.
  • Контактирующие группы (Contact groups) (определяет группы тел, которые могут взаимодействовать друг с другом).
  • Возможность сохранения настроенного физического материала (например дерево, металл или резина).
  • Возможность настройки материала для каждого примитива в отдельности.

Методы отслеживания столкновений

Дискретный просчет столкновений (Discrete Collision Detection) наиболее быстрый и простой в реализации метод, но не защищенный от возникновения туннельного эффекта, когда столкновение не успевает регистрироваться для небольших быстро движущихся объектов. Частоты вызовов обработчика физики может не хватить, для регистрации таких столкновений.

Дискретный просчет столкновений

Непрерывный просчет столкновений (CCD - Continuous Collision Detection) метод позволяет регистрировать в числе прочих столкновения небольших быстро движущихся объектов. Метод более требователен к процессорным ресурсам, но регистрация столкновений в этом случае не зависит от частоты кадров, размера и скорости объектов, и позволяет оперировать такими параметрами, как место столкновения, время столкновения и вектор столкновения.

Непрерывный просчет столкновений

Физическая подсистема NVIDIA PhysX

Бесплатный физический движок.

Официальный сайт: http://developer.nvidia.com/object/physx.html

Особенности системы непрерывного отслеживания столкновений:

  • Столкновение между динамическим и статичным телом не обрабатывается, если статичное тело состоит из примитивов sphere, capsule или box. В большинстве игр эти примитивы не используются в качестве статичной геометрии, алгоритм непрерывного отслеживания столкновений работает с примитивами основанными на форме полигональных 3d моделей.
  • В движке NeoAxis обнаружение столкновения двух динамических тел выключено по умолчанию, т.к. оно работает относительно медленно.
  • Алгоритм непрерывного отслеживания столкновений предполагает, что примитив не может развернуться более, чем на 180 градусов за один временной шаг.

Физическая подсистема Open Dynamics Engine (ODE)

Бесплатный физический движок, с открытым исходным кодом.

Официальный сайт: http://www.ode.org

В базовом функционале ODE нет поддержки непрерывного отслеживания столкновений (CCD). Отслеживание столкновений реализовано менее точным, но и менее требовательным к процессорным ресурсам методом.

Метод просчета столкновений основан на обработке луча, соединяющего текущую и предыдущую позицию движущегося тела, если луч пересекает другое физическое тело, то ожидается столкновение.

Для корректной работы данного метода следует соблюдать следующие правила:

  • Примитивы должны располагаться в центре тела. То есть находиться в координатах (0,0,0).
  • Метод работает лучше, если тела имеют сопоставимые размеры. То есть размеры тел приблизительно одинаковы.
  • Лучше всего метод работает для примитива Box. Примитивы Capsule и Sphere могут просчитываться с погрешностью.
  • Столкновения между двумя динамическими объектами не обрабатываются.

Данный метод не дает 100% гарантии надежной работы. Следует тщательно проверять физические модели с непрерывным отслеживанием столкновений (CCD).

Выбор активного физического движка

Для переключения между физическими подсистемами откройте Конфигуратор NeoAxis (Configurator.exe) (по умолчанию его можно вызвать через Пуск -> Все программы -> NeoAxis Engine SDK -> Configurator). Откройте вкладку Physics и выберите физический движок в выпадающем списке. Далее нажмите OK, для сохранения изменений. Для того, чтобы изменения вступили в силу следует перезапустить редакторы и Game.exe.

Выбор физического движка.