Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Налаштування XR
Знайомство з системою XR в Godot
Godot пропонує модульну систему XR, яка абстрагує багато різних особливостей платформи XR від користувача. В основі лежить XRServer, який діє як центральний інтерфейс до системи XR, що дозволяє користувачам відкривати інтерфейси та взаємодіяти з компонентами системи XR.
Кожна підтримувана платформа XR реалізована як XRInterface. Список підтримуваних платформ можна знайти на сторінці списку функцій here. Підтримувані інтерфейси реєструються в XRServer і можуть бути запитані за допомогою методу find_interface на XRServer. Коли бажаний інтерфейс знайдено, його можна ініціалізувати, викликавши initialize на інтерфейсі.
Попередження
Зареєстрований інтерфейс означає лише те, що інтерфейс доступний. Якщо інтерфейс не підтримується хост-системою, ініціалізація може завершитися помилкою та повернути false. Це може мати багато причин, і, на жаль, причини відрізняються від платформи до платформи. Причиною може бути те, що користувач не встановив необхідне програмне забезпечення або просто не підключив гарнітуру. Таким чином, ви як розробник повинні правильно реагувати на інтерфейс, який не вдається ініціалізувати.
У зв’язку з особливими вимогами до виведення в XR, особливо для пристроїв на голові, які надають різні зображення для кожного ока, XRServer у Godot замінить різні функції в системі відтворення. Для автономних пристроїв це означає, що кінцевий вивід обробляється XRInterface, а звичайна система виведення Godot вимкнена. Для настільних пристроїв XR, які працюють як другий екран, можна виділити окремий Viewport для обробки виводу XR, залишаючи головне вікно Godot доступним для відображення альтернативного вмісту.
Примітка
Зауважте, що лише один інтерфейс може відповідати за обробку виводу на пристрій XR, він відомий як основний інтерфейс і за замовчуванням буде першим інтерфейсом, який ініціалізується. Таким чином, Godot наразі підтримує лише впровадження з однією гарнітурою. Можливо, але все рідше, мати вторинний інтерфейс, наприклад, щоб додати відстеження до пристрою, який інакше підтримує лише 3DOF.
Існує три типи вузлів XR, які можна знайти майже в усіх програмах XR:
XROrigin3D представляє, для всіх намірів і цілей, центральну точку вашого ігрового простору. Це надто спрощене твердження, але ми розглянемо його докладніше пізніше. Усі об’єкти, які відстежуються у фізичному просторі платформою XR, розташовані відносно цієї точки.
XRCamera3D представляє (стерео)камеру, яка використовується під час візуалізації виведення для пристрою XR. Позиціонування цього вузла контролюється системою XR і автоматично оновлюється за допомогою інформації відстеження, наданої платформою XR.
XRController3D представляє контролер, який використовується гравцем, зазвичай їх два, по одному в кожній руці. Ці вузли надають доступ до різних станів цих контролерів і надсилають сигнали, коли гравець натискає на них кнопки. Позиціонування цього вузла контролюється системою XR і автоматично оновлюється за допомогою інформації відстеження, наданої платформою XR.
Існують інші вузли, пов’язані з XR, і про ці три вузли можна сказати ще багато, але ми поговоримо про це пізніше.
Який метод руху використовувати
Godot має 3 варіанти візуалізації для проектів: сумісність, мобільний і вперед+. Поточна рекомендація полягає в тому, щоб використовувати мобільний рендерер для будь-якого проекту віртуальної реальності для настільних комп’ютерів і використовувати рендерер сумісності для будь-якого проекту, що виконується на автономній гарнітурі, як-от Meta Quest 3. Проекти XR запускатимуться з рендерером Forward+, але він зараз не дуже оптимізований для XR порівняно з двома іншими.
openXR
OpenXR — це новий галузевий стандарт, який дозволяє різним XR-платформам представляти себе через стандартизований API для XR-додатків. Цей стандарт є відкритим стандартом, що підтримується Khronos Group, і таким чином дуже добре відповідає інтересам Godot.
Реалізація OpenXR від Vulkan тісно інтегрована з Vulkan, зайнявши частину системи Vulkan. Це вимагає тісної інтеграції певних основних графічних функцій у рендерер Vulkan, які необхідні перед налаштуванням системи XR. Це було одним із головних вирішальних факторів для включення OpenXR як основного інтерфейсу.
Це також означає, що OpenXR потрібно ввімкнути під час запуску Godot, щоб налаштувати все правильно. Перевірте параметр Enabled у параметрах вашого проекту в розділі XR > OpenXR.
Тут також можна знайти кілька інших налаштувань, пов’язаних з OpenXR. Їх не можна змінити під час роботи програми. Параметри за замовчуванням допоможуть нам почати, але для отримання додаткової інформації про те, що тут, див. Налаштування OpenXR.
Вам також потрібно буде перейти до XR > Shaders у налаштуваннях проекту та поставити прапорець Enabled, щоб увімкнути їх. Зробивши це, натисніть кнопку Зберегти та перезапустити.
Попередження
Багато ефектів після обробки ще не оновлено для підтримки стереоскопічного рендерингу. Їх використання призведе до негативних наслідків.
Налаштування сцени XR
Для кожної програми XR потрібен принаймні вузол XROrigin3D і XRCamera3D. Більшість матиме два XRController3D, один для лівої руки та один для правої. Майте на увазі, що вузли камери та контролера мають бути дочірніми вузлами походження. Додайте ці вузли до нової сцени та перейменуйте вузли контролера на LeftHand і RightHand, ваша сцена має виглядати приблизно так:
Піктограми попереджень очікувані та мають зникнути після налаштування контролерів. Виберіть ліву руку та налаштуйте її наступним чином:
І праву руку:
Зараз усі ці вузли знаходяться на підлозі, вони будуть правильно розташовані під час виконання. Для полегшення розробки може бути корисним перемістити камеру вгору, щоб її y було встановлено на 1.7, а також перемістити вузли контролера на -0.5, 1.0, -0.5 та 0.5, 1.0, -0.5 для лівої та правої руки відповідно.
Далі нам потрібно додати скрипт до нашого кореневого вузла. Додайте наступний код у цей скрипт:
extends Node3D
var xr_interface: XRInterface
func _ready():
xr_interface = XRServer.find_interface("OpenXR")
if xr_interface and xr_interface.is_initialized():
print("OpenXR initialized successfully")
# Turn off v-sync!
DisplayServer.window_set_vsync_mode(DisplayServer.VSYNC_DISABLED)
# Change our main viewport to output to the HMD
get_viewport().use_xr = true
else:
print("OpenXR not initialized, please check if your headset is connected")
using Godot;
public partial class MyNode3D : Node3D
{
private XRInterface _xrInterface;
public override void _Ready()
{
_xrInterface = XRServer.FindInterface("OpenXR");
if(_xrInterface != null && _xrInterface.IsInitialized())
{
GD.Print("OpenXR initialized successfully");
// Turn off v-sync!
DisplayServer.WindowSetVsyncMode(DisplayServer.VSyncMode.Disabled);
// Change our main viewport to output to the HMD
GetViewport().UseXR = true;
}
else
{
GD.Print("OpenXR not initialized, please check if your headset is connected");
}
}
}
Цей фрагмент коду припускає, що ми використовуємо OpenXR, якщо ви бажаєте використовувати будь-який з інших інтерфейсів, ви можете змінити виклик find_interface.
Попередження
Як ви можете бачити у фрагменті коду вище, ми вимикаємо v-sync. Під час використання OpenXR ви виводите результати візуалізації на HMD, який часто вимагає від нас роботи з частотою 90 Гц або вище. Якщо ваш монітор має частоту 60 Гц і ввімкнено V-sync, ви обмежите вихід до 60 кадрів на секунду.
Інтерфейси XR, такі як OpenXR, виконують власну синхронізацію.
Також зауважте, що за замовчуванням фізичний движок також працює на частоті 60 Гц, і це може призвести до переривчастої фізики. Ви повинні встановити для Engine.physics_ticks_per_second більше значення.
Якщо ви запустите свій проект у цей момент часу, все працюватиме, але ви опинитесь у темному світі. Отже, щоб завершити нашу відправну точку, додайте DirectionalLight3D і WorldEnvironment вузол до вашої сцени. Ви також можете додати екземпляр mesh як дочірній елемент до кожного вузла контролера, щоб тимчасово візуалізувати їх. Переконайтеся, що ви налаштували небо у своєму світовому середовищі.
Тепер запустіть свій проект, ви повинні парити десь у космосі та мати можливість оглядатися навколо.
Примітка
Хоча традиційне перемикання рівнів безперечно можна використовувати з додатками XR, де це налаштування сцени повторюється на кожному рівні, більшість вважає, що легше налаштувати це один раз і завантажувати рівні як підсцени. Якщо ви змінюєте сцени та повторюєте налаштування XR у кожній з них, переконайтеся, що ви не запускаєте ініціалізацію кілька разів. Ефект може бути непередбачуваним залежно від використовуваного інтерфейсу XR.
Для решти цієї базової серії посібників ми створимо гру, яка використовує одну сцену.