Библиотека Oimo.js является физическим движком для JavaScript, ориентированным на симуляцию твердых тел с использованием упрощенной физики. В ядре движка лежит расчет столкновений и интеграция движения тел. Одним из ключевых факторов, влияющих на производительность симуляции, является тип геометрии тел, участвующих в узкой фазе столкновений.
В Oimo.js геометрические формы разделяются на базовые типы:
Каждый тип геометрии имеет различную сложность для алгоритмов столкновений. Алгоритмы узкой фазы (narrow-phase collision detection) выполняют точное определение пересечения после грубой фильтрации (broad-phase).
Box является наиболее простым и оптимизированным типом для узкой фазы. Столкновения двух параллелепипедов обрабатываются с использованием алгоритма Separating Axis Theorem (SAT), который проверяет проекции граней на потенциальные оси разделения. Преимущества:
Недостатки:
Сферы обеспечивают максимальную скорость в узкой фазе благодаря своей симметрии. Столкновение сводится к проверке расстояния между центрами, что требует минимального количества операций. Преимущества:
Недостатки:
Цилиндры и капсулы требуют более сложных вычислений:
Эти формы оптимальны для персонажей или объектов с вытянутой формой, где точность сфер и коробок недостаточна.
Выпуклые меши обеспечивают гибкость в моделировании, но узкая фаза для них является самой затратной:
Использование ConvexMesh оправдано только при необходимости точного моделирования сложных форм.
Сокращение количества сложных тел Чем больше объектов с ConvexMesh в сцене, тем больше нагрузка на узкую фазу. Замена на Box или Sphere значительно ускоряет расчеты.
Комбинированные коллайдеры Для сложных объектов часто используют комбинацию Box, Sphere и Capsule, избегая ConvexMesh, что снижает количество проверок пересечения.
Предварительная фильтрация в Broad Phase Упрощение геометрии на этапе грубой фильтрации уменьшает количество столкновений, которые нужно проверять в узкой фазе.
Использование размеров и ориентации Для Box и Cylinder ориентация влияет на количество проверяемых осей. Правильная установка осей объектов может уменьшить количество операций SAT.
Баланс точности и производительности Сферы и капсулы лучше всего подходят для динамических объектов, где важна скорость. Box подходит для статических препятствий. ConvexMesh используют для ключевых объектов с высокой визуальной точностью.
Эффективная работа узкой фазы напрямую зависит от правильного выбора типов геометрии и их количества, а также от грамотной комбинации базовых форм для оптимизации производительности симуляции в Oimo.js.