Jaké XR ovladače existují a proč je potřeba input manager?
Na trhu dnes najdeme mnoho VR a AR zařízení, často pracujících v rámci vlastních ekosystémů, s vlastními hardwarovými (ručními) ovladači i připojitelným příslušenstvím. Jednotný XR standard, dle nějž by se společnosti zabývající se virtuální realitou mohly řídit, po dlouhou dobu chyběl - první smysluplný návrh - OpenXR standard - byl představen teprve v polovině roku 2019 - po více jak 30 letech existence VR headsetů. Za návrhem stojí silné jméno - společnost Khronos Group - jež na přelomu tisíciletí dopomohla pomocí svého OpenGL ES a 3D API sjednocení standardů mobilních telefonů a jejich softwaru. V rámci odvětví virtuální a rozšířené reality získala Khronos Group podporu hlavních hráčů na poli vývoje VR harwaru i softwaru a lze tedy předpokládat, že historický úspěch z mobilních telefonů se zopakuje. VR trhu by to pomohlo, nakonec, hlavní hodnota obsahu přichází teprve s možností jeho přenositelnosti a konzumace v rámci různorodých zařízení.
Tento článek se věnuje výhradně problematice hardwarových ovladačů pro ovládání XR aplikací. Ačkoli ovladače od Oculusu, HTC, Valve, Google a dalších výrobců se liší, v aplikační vrstvě a logice ovládání příliš rozdílů není. Jak se podpora několika ovladačů s pomocí Input manageru řeší, kolik funkcí ovladače skutečně mají, a jak se od sebe liší, přiblíží následující odstavce...
Základní funkce hardwarových XR ovladačů
Ruční ovladač slouží k lokalizaci ruky uživatele v prostoru a možnosti ručního ovládání XR (VR a AR) aplikací. Počet ručních ovladačů je dán typem VR headsetu. Většina lepších VR headsetů je standardně se 2-ma ovladači, kdy ovladač pro každou ruku je přezrcadlený (stejně jako ruce), s jinak označenými tlačítky, případně stejný, bez označení tlačítek. Základní VR headsety, často se 3mi stupni volnosti, obsahují ovladač jediný. VR headsety tvořené mobilním telefonem vloženým do cardboardu jsou v základu bez ovladače, který je možno propojit s mobilním telefonem skrze bluetooth rozhraní.
U ručních ovladačů je brán důraz na ergonomii a jednoduchost používání. Prostor je zde pouze pro pár logický umístěných tlačítek různého typu, které jsou navíc po čas používání virtuální reality ve fyzickém prostoru neviditelné.
Základní typy tlačítek na XR ovladačích
Průměrný XR ruční ovladač má pouze 5 volných ovládacích prvků, které však mohou nabývat mnoha stavů. Například běžná tlačítka nemají definován pouze stav stisknuto / nestisknuto, ale i stav volně položeného prstu na tlačítku. U joysticků, nabývajících stav <0 - 1> v jakémkoli směru, existuje rovněž stav položeného prstu, dokonce, joysticky jsou obvykle stisknutelné (stav klik). Díky tomu lze i přes pouhých 5 prvků na ovladač dosahovat vysokého množství stavů, s nimiž může vývojář při návrhu ovládacích prvků XR aplikace pracovat.
Funkce a vlastnosti ovládacích prvků nalezitelných na XR ručních ovladačích
- Palcový ovladač (2D Axis) - pákový ovladač na kloubu (podobný joysticku) umožňující vychýlení o hodnotě 0 až 1 (síla stlačení) v jakémkoli volném směru. Vyjma vektorové hodnoty směru joystick detekuje i dotek (touch) a kliknutí (zatlačení kloubu)
- Trigger - zpravidla tlačítko v přední části ovladače, ovládané ukazováčkem. Výstupem je hodnota velikosti stisknutí <0 - 1>. Při stavu vyšším než určitá definovaná velikost dochází rovněž ke stavu stisknuto. Při pouze položeném prstu (stisknutí 0) může být dostupný stav "touched" (prst na tlačítku).
- Grip - Obdobně jako tlačítko "Trigger", s tím rozdílem, že "Grip" se nachází na boční straně ovladače, pod prostředníčkem ruky držící ovladač.
- Dvojice běžných tlačítek - Dvojice běžných tlačítek se stavy stisknuto / nestisknuto / prst na tlačítku. Na ovladači levé ruky často označeny písmeny X a Y, na ovladači pravé ruky poté písmeny A a B.
- Dotyková obrazovka - univerzální obrazovka schopna detekovat doteky, swipování i kliky.
- Vyhrazené tlačítko - ovladače často obsahují i jedno vyhrazené tlačítko pro mimo-aplikační účely - například návrat do menu VR headsetu.
3D modely nejpoužívanějších XR ručních ovladačů
Tato sekce sdružuje přehled nejpoužívanějších XR ručních ovladačů. Najdete zde 3D modely daných ovladačů (načtené ze Sketchfab) i se stručným popisem jejich vlastností a ovládacích prvků. Všimněte si, že ovládací prvky jednotlivých ovladačů se více či méně liší (viz účel XR input managera). Pokud by jste potřebovali dané modely pro načtení v Unity, můžete si je volně vyexportovat z XR Framework, který jsem volně zpřístupnil pod anglickou odnoží VRapps.cz (GameArter.com/vr).
Ovladače pro Oculus Quest / Rift S
Ovladače pro Valve Index
Ovladače pro HTC Vive
Ovladače DayDream
XR input manager
Ruční ovladače jednotlivých VR headsetů se liší, a to nejen počtem, ale i typem. To je vhodné si uvědomit při návrhu ovládacích prvků aplikací. V praxi mnohé ovládací prvky jsou společné, případně jeden prvek supluje jiný. Naštěstí, technický aspekt závislostí a podpisu jednotlivých tlačítek se většinou řešit nemusí - k vývoji XR aplikací se obvykle používá zavedený herní engine, jehož vývojáři tuto práci s mapováním již provedli za vývojáře. Následující tabulka je převzata z dokumentace XR input managera v Unity a zobrazuje propojení jednotlivých tlačítek napříč různými XR ručními ovladači. Na straně aplikace se poté pracuje jen s hodnotami "InputFeatureUsage" a tedy jediné, co se musí hlídat, je existence tlačítka poskytující daný typ inputu na ovladačích, pro něž se XR aplikace vyvíjí.
InputFeatureUsage | Feature type | Legacy input index (left/right controller) | WMR | Oculus | GearVR | Daydream | OpenVR (Full) | Vive | Oculus via OpenVR | WMR via OpenVR | Magic Leap |
---|---|---|---|---|---|---|---|---|---|---|---|
primary2DAxis | 2D axis | [(1,2)/(4,5)] | Touchpad | Joystick | Touchpad | Touchpad | Trackpad/Joystick | Trackpad | Joystick | Joystick | Touchpad |
trigger | Axis | [9/10] | Trigger | Trigger | Trigger | Trigger | Trigger | Trigger | Trigger | Trigger | Trigger |
grip | Axis | [11/12] | Grip | Grip | Bumper | Grip | Grip | Grip | Grip | Bumper | |
secondary2DAxis | 2D axis | [(17,18)/(19,20)] | Joystick | Touchpad | |||||||
secondary2DAxisClick | Button | [18/19] | Joystick - Click | ||||||||
primaryButton | Button | [2/0] | [X/A] - Press | App | Primary | Primary (sandwich button)(1) | Primary (Y/B) | Menu | Menu | ||
primaryTouch | Button | [12/10] | [X/A] - Touch | ||||||||
secondaryButton | Button | [3/1] | [Y/B] - Press | Alternate | Alternate (X/A) | ||||||
secondaryTouch | Button | [13/11] | [Y/B] - Touch | ||||||||
gripButton | Button | [4/5] | Grip - Press | Grip - Press | Grip - Press | Grip - Press | Grip - Press | Grip - Press | Bumper - Press | ||
triggerButton | Button | [14/15] | Trigger - Press | Trigger - Press | Trigger - Press | Trigger - Press | Trigger - Press | Trigger - Press | Trigger - Touch | Trigger - Press | Trigger - Press |
menuButton | Button | [6/7] | Menu | Start (left controller only) | |||||||
primary2DAxisClick | Button | [8/9] | Touchpad - Click | Thumbstick - Press | Touchpad - Press | Touchpad - Press | Trackpad/Joystick - Press | Trackpad - Press | Joystick - Press | Touchpad - Press | |
primary2DAxisTouch | Button | [16/17] | Touchpad - Touch | Thumbstick - Touch | Touchpad - Touch | Touchpad - Touch | Trackpad/Joystick - Touch | Trackpad - Touch | Joystick - Touch | Touchpad - Touch | Touchpad - Touch |
batteryLevel | Axis | Battery level | |||||||||
userPresence | Button | User presence | User presence |
Výstup stavu tlačítek ručních ovladačů Oculus Quest
Teorie je hezká, mnohé věci je však nutné si osahat. I pro to může posloužit XR Framework od GameArteru. Následující video je natočeno právě s jeho využitím - za použití scriptu zachycujícího stavy ovládacích tlačítek napříč XR ručními ovladači a jednoduchého UI rozhraní pro zobrazení jejich skutečného stavu.