Оптимізація фізичних колайдерів у складних сценах ігор

Наша компанія з розробки відеоігор веде незалежні проекти, спільно з клієнтом створює ігри та надає додаткові операційні послуги. Досвід нашої команди дозволяє нам охопити всі ігрові платформи та розробити приголомшливий продукт, що відповідає баченню клієнта та перевагам гравців.

Від імерсивних застосунків до ігрових світів і 3D-сцен

Наша виділена команда для VR/AR/MR-розробки, Unity-продакшну і 3D-моделювання та анімації — з власними кейсами і презентаціями.

Відвідати персоналізований сайт
Показано 1 з 1 послугУсі 242 послуг
Оптимізація фізичних колайдерів у складних сценах ігор
Середня
~3-5 робочих днів
Часті питання

Наші компетенції

Які етапи розробки гри?

Останні роботи

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    685
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    866
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    492
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    534

id: 240 slug: physics-collider-optimization-in-complex-game-scenes title_ua: "Оптимізація фізичних колайдерів у складних ігрових сценах" tags: [vr-ar]

Оптимізація фізичних колайдерів у складних ігрових сценах

Сцена з 800 GameObject, у кожного MeshCollider по реальній геометрії — PhysX витрачає 8–12 мс на FixedUpdate лише на Broadphase та Narrowphase перевірки. Це половина фрейм-бюджету на одну фізику. У VR, де бюджет фрейма 11 мс (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 по реальній геометрії — 200 трикутників. Той ж стілець з 2 BoxCollider (ніжки + сидіння) — 2 примітива. Точність колізії 95% від оригіналу, вартість — у 50 разів менше.

Для органічних форм (камені, бочки, машини) набір з 3–6 ConvexMeshCollider (опуклі спрощені меші) працює в рази швидше non-convex та візуально невідрізняється. У Unity: MeshCollider.convex = true + спрощений меш через LOD або ручне створення collision proxy у Blender.

Compound Colliders — набір примітивів як дочірні об'єкти одного Rigidbody. Це єдиний спосіб отримати «non-convex» динамічну фізику без non-convex MeshCollider: кілька опуклих шматків = складна форма. Для зброї у VR, деталізованих об'єктів, роботів — стандартний підхід.

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.

Інструменти діагностики

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 хвилин, економить години пошуку.

З практики: у 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 мс.

Етапи роботи

Профілювання. Physics Profiler snapshot, визначення bottleneck.

Аудит сцени. Інвентаризація всіх колайдерів, класифікація за типом та вартістю.

Оптимізація. Заміна MeshCollider на примітива/Compound, налаштування Layer Matrix, Sleep Threshold.

Інструменти автоматизації. Editor скрипти для batch-заміни та валідації.

Повторне профілювання. Порівняння з baseline, документація змін.

Масштаб сцени Орієнтовні строки
1 сцена до 500 об'єктів 3–7 днів
Кілька сцен, 1000–3000 об'єктів 2–4 тижні
Крупний проект з автоматизованими інструментами 1–2 місяці

Вартість розраховується після профілювання та оцінки обсягу змін.