Сцена с 800 GameObject, у каждого MeshCollider по реальной геометрии — PhysX тратит 8–12 мс на FixedUpdate только на Broadphase и Narrowphase проверки. Это половина фрейм-бюджета на одну физику. В VR, где бюджет фрейма 11 мс (90 FPS), это моментальный дроп. Наша команда не раз сталкивалась с такими проектами: оптимизация коллайдеров — задача, где правильная архитектура с самого начала экономит недели работы. Типичная экономия на проекте — от 40 до 60 часов ручного труда. Мы гарантируем стабильные 90 FPS после доработок. Свяжитесь с нами — мы оценим ваш проект и предложим план оптимизации.
Как PhysX тратит время и где потери
Физика в Unity проходит два этапа: Broadphase (быстрый отсев: какие объекты вообще близко друг к другу?) и Narrowphase (точная проверка пересечений для отфильтрованных пар).
Broadphase использует AABB-дерево (Axis-Aligned Bounding Box). Если объекты постоянно двигаются — дерево постоянно перестраивается. 200 Rigidbody с isKinematic = false, которые двигаются каждый фрейм, дают постоянный rebuild AABB-дерева. Решение: объекты, которые не двигаются в данный момент, переводим в isKinematic = true через скрипт — они выпадают из динамического дерева.
Narrowphase — это где MeshCollider убивает производительность. Проверка пересечения двух произвольных мешей — O(n×m) по треугольникам. Коллайдер персонажа против коллайдера здания с 50 000 треугольников — это тысячи операций за один Narrowphase. PhysX не поддерживает non-convex MeshCollider против MeshCollider в динамических объектах вообще — только против Static.
Почему MeshCollider так дорог?
Каждый треугольник в MeshCollider требует проверки в Narrowphase. Для статичных объектов (стены, пол) это ещё терпимо, но для динамических — катастрофа. Даже с convex = true физика считает все грани выпуклой оболочки. Практика: заменив 10 сложных MeshCollider в персонажах на Compound Collider, мы снизили Physics CPU time на 40% в одном VR-тренажёре.
Как Compound Collider снижает нагрузку?
Compound Collider — набор примитивов как дочерние объекты одного Rigidbody. Единственный способ получить non-convex динамическую физику без non-convex MeshCollider: несколько выпуклых кусков = сложная форма. Для оружия в VR, детализированных объектов, роботов — стандартный подход. Замена одного MeshCollider на Compound из 3–5 примитивов снижает стоимость физики в 50 раз при точности >90%.
Практические замены и упрощения
Правило первое: заменяй MeshCollider там, где это не заметно игроку. Стул с MeshCollider по реальной геометрии — это 200 треугольников. Тот же стул с 2 BoxCollider (ножки + сиденье) — 2 примитива. Точность коллизии 95% от оригинала, стоимость — в 50 раз меньше.
Для органических форм (камни, бочки, машины) набор из 3–6 ConvexMeshCollider (выпуклые упрощённые меши) работает в разы быстрее non-convex и визуально неотличим. В Unity: MeshCollider.convex = true + упрощённый меш через LOD или ручное создание collision proxy в Blender.
Collision Matrix (Layer Collision Matrix). В Physics Settings → Layer Collision Matrix отключаем проверки между слоями, которые никогда не должны взаимодействовать: Environment vs Environment, UI vs Physics Objects, VFX vs любой слой. Каждая отключённая пара — меньше Broadphase пар. При правильной настройке матрицы можно сократить количество активных пар на 30–50%.
Sleep Threshold. Rigidbody засыпает, когда скорость падает ниже Physics.sleepThreshold. Спящий Rigidbody не участвует в физике — почти нулевая стоимость. Значение по умолчанию (0.005) слишком низкое для сложных сцен: объекты остаются активными при микровибрациях. Для VR-сцен без симуляции жидкости/cloth ставим 0.1–0.2.
Как мы проводим оптимизацию: разбор кейса
Из практики: в VR-тренажёре для промышленного оборудования сцена цеха содержала 1200 объектов, большинство с MeshCollider по импортированным CAD-моделям (15 000–80 000 треугольников каждый). Physics CPU time — 14 мс. После замены всех статичных MeshCollider на Convex proxy (автоматически через Editor скрипт + VHACD decomposition) и отключения ненужных Layer Matrix пар — Physics CPU time упал до 2.8 мс. Выигрыш — 80% времени физики. Средняя экономия на проекте — от 40 до 60 часов разработки. Снижение затрат на облачные вычисления за счёт сокращения физики достигает 30–50%.
| Тип коллайдера | Примерная стоимость (CPU time) | Когда использовать |
|---|---|---|
| MeshCollider (non-convex) | ~10–20 мс для 500 тр. | Статика, если точность критична |
| Compound Collider (5 примитивов) | ~0.2 мс | Динамика, сложные формы |
| Convex MeshCollider (упрощённый) | ~1–2 мс | Органические объекты, не требующие полной точности |
Инструменты диагностики
Physics Profiler в Unity Profiler — показывает время Broadphase, Narrowphase, отдельно SimulateAndCollide, UpdateTriggers. Здесь видно, где потери.
Physics Debugger (Window → Analysis → Physics Debugger) — визуализирует коллайдеры прямо в Scene View с цветовым кодированием по типу (Static, Dynamic, Kinematic, Trigger). Позволяет быстро найти объекты с неожиданно тяжёлыми коллайдерами.
PhysicsViewer кастомный Editor Tool — скрипт, который выводит список всех MeshCollider в сцене, отсортированных по количеству треугольников. Пишем за 30 минут, экономит часы поиска.
Типичные ошибки при оптимизации коллайдеров
- Замена всех MeshCollider без оглядки на точность — может сломать геймплей. Проверяйте коллизии на критических объектах. - Настройка Layer Matrix «на глаз» без анализа пар. Всегда профилируйте до/после. - Игнорирование Sleep Threshold: объекты, которые должны спать, остаются активными из-за низкого порога.Что входит в работу
- Профилирование Physics CPU time, выявление bottleneck
- Полная инвентаризация коллайдеров сцены с классификацией
- Замена тяжелых MeshCollider на примитивы/Compound с сохранением точности
- Настройка Layer Collision Matrix и Sleep Threshold
- Написание Editor-скриптов для автоматизации batch-замен и валидации
- Повторное профилирование и отчёт с дельтой производительности
- Передача документации и обучение команды поддерживать оптимизацию
Этапы работы
- Профилирование — Physics Profiler snapshot, определение bottleneck.
- Аудит сцены — инвентаризация всех коллайдеров, классификация по типу и стоимости.
- Оптимизация — замена MeshCollider на примитивы/Compound, настройка Layer Matrix, Sleep Threshold.
- Инструменты автоматизации — Editor скрипты для batch-замены и валидации.
- Повторное профилирование — сравнение с baseline, документация изменений.
| Масштаб сцены | Ориентировочные сроки |
|---|---|
| 1 сцена до 500 объектов | 3–7 дней |
| Несколько сцен, 1000–3000 объектов | 2–4 недели |
| Крупный проект с автоматизированными инструментами | 1–2 месяца |
Стоимость рассчитывается после профилирования и оценки объёма изменений. Свяжитесь с нами — оценим ваш проект бесплатно и предложим план оптимизации. Закажите профилирование уже сегодня: наша команда гарантирует стабильные 90 FPS после доработок.






