tags: [vr-ar]
Проверка корректності масштабів об'єктів графіки у VR
У звичайних іграх масштаб — умовність. Меч може бути трохи довший або коротший — ніхто не помітить. У VR користувач стоїть рядом з об'єктами. Стіл висотою 90 см сприймається мозком як «правильний» або «надто низький» — тому що у людини є досвід взаємодії з реальними столами. Дверний проём в 1.9 м змушує користувача інстинктивно пригнутися. Об'єкт розміром «з кулак» у грі, який у VR виглядає розміром з голову — руйнує сприйняття.
Перевірка масштабів у VR — це не «посмотрели й показалось нормальне». Це вимірювання в Unity одиницях проти реальних фізичних розмірів.
Калібрування: 1 Unity Unit = 1 метр
Базове правило Unity для VR: 1 unit = 1 метр. Це не рекомендація — це вимога. Якщо сцена моделювалася в інших одиницях (сантиметри, дюйми) та була імпортована без пересчету, все об'єкти опиняться або гігантськими, або мікроскопічними у VR.
Частий джерело проблем — імпорт із 3D-редакторів. Blender за умовчанням працює в метрах, Autodesk Maya — в сантиметрах. FBX-файл з Maya без явного вказання одиниць при експорті потрапляє в Unity з Scale Factor 0.01 на ModelImporter. Об'єкт «коректно» виглядає тільки якщо де-то по ланцюзі трансформів компенсується цей factor. Якщо ні — він або в 100 разів менше потрібного, або розробник вручну ставить Scale (100, 100, 100) на GameObject, що ламає фізичні розрахунки та NavMesh.
Правильний підхід при імпорті: в ModelImporter → Model → Scale Factor виставляємо значення, приводящее об'єкт до реальних метрових розмірів. Для Maya FBX це звичайно 0.01. Після — верифікуємо: людський персонаж має бути 1.7–1.85 м від ніг до макушки.
Еталонні об'єкти та VR Height Reference
Для верифікації масштабів у VR використовуємо еталонні об'єкти — референсні меші з відомими реальними розмірами:
- Ріст середнього дорослого: 1.75 м (від підлоги до макушки)
- Стандартний дверний проём: 2.0 м висота, 0.9 м ширина
- Обідний стіл: 0.75 м висота
- Стіл: 0.45 м сиденя від підлоги
- Автомобіль (легковий): ~1.5 м висота, 4.5 м довжина
- Цегла: 25 × 12 × 6.5 см
Створюємо сцену ScaleVerificationScene з цими еталонами та площиною підлоги. Кожен новий або змінений ассет розміщується рядом з еталонами у VR та верифікується візуально. Це займає 2–3 хвилини на ассет та виключає клас проблем «виглядало нормально в редакторі, у VR виглядає дивно».
VR Height Reference — спеціальний інструмент у XR Interaction Toolkit Samples: віртуальний манекен зі стандартними пропорціями, який розміщується у сцені для швидкої візуальної перевірки масштабів інтерактивних об'єктів.
Масштаб рук та зона досяжності
У VR руки гравця — частина ігрової геометрії. Якщо віртуальні руки візуально «короткі» порівняно з рукоятками та кнопками у сцені — гравець тягнеться до об'єкту, але рука не досягає. Дискомфорт без очевидної причини.
Зона досяжності: рука середнього дорослого витягнена на 0.7–0.8 м від плеча. У VR XRRig.cameraFloorOffsetObject визначає висоту камери над підлогою. Інтерактивні об'єкти мають розміщуватися у зоні комфортної досяжності: 0.5–1.2 м висота, не далі 0.6 м від центру тіла горизонтально.
Тест: кожен інтерактивний об'єкт сцени проходить перевірку на досяжність. Метод: у редакторі використовуємо Gizmos з відрисовкою сфери радіусу 0.7 м від XRRig.centerEyeAnchor — всі інтерактивні об'єкти мають перетинатися з цією сферою хоча б частково.
Автоматизація перевірки масштабів
Для проектів з великою кількістю ассетів ручна верифікація нераціональна. Пишемо редакторний інструмент — EditorWindow у Unity — який:
- Збирає всі
GameObjectз тегомInteractableабо компонентомXRBaseInteractable - Перевіряє їх
Bounds.sizeпроти заданих min/max для категорії об'єкту (зброя: 0.15–1.5 м, меблі: 0.3–2.5 м) - Виводить список об'єктів, що виходять за межі норми
Пороги задаються в ScriptableObject ScaleVerificationConfig. Це не замінює візуальну перевірку у VR, але відсіває явні помилки — випадковий scale 0.01 або 100 на імпортованому об'єкті.
Додаткова перевірка: ModelImporter для всіх FBX у проекті — убезпечитися, що немає об'єктів з scaleFactor != 1 після нормалізації. Це вирішується пост-процесором імпорту (AssetPostprocessor.OnPreprocessModel), який логує або автоматично коригує неправильний scale factor.
Процес верифікації
| Етап | Зміст |
|---|---|
| Аудит настройок імпорту | Перевірка FBX Scale Factor для всіх ассетів |
| Верифікація еталонними об'єктами | Ключові ассети рядом з людським манекеном у VR |
| Автоматичні тести в редакторі | Скрипт перевірки Bounds.size по категоріях |
| Тест досяжності | Інтерактивні об'єкти у зоні 0.5–1.2 м |
Орієнтовні строки: базовий аудит — 2–5 днів, повна верифікація всіх ассетів крупного проекту — 2–4 тижні. Вартість розраховується після оцінки числа ассетів та складності сцени.





