Het ontwerp en de implementatie van hand-tracking in 'Myst' PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Het ontwerp en de implementatie van handtracking in 'Myst'

gebruik Presence Platform's verbeterde Hand Tracking API, hebben we Hand Tracking geïntroduceerd met onze meest recente update naar Myst op het Meta Quest Platform, getiteld 'Hands & More'. We zijn super enthousiast om eindelijk mensen te laten spelen Myst op Quest zonder fysieke controllers! In dit bericht bespreken we de evolutie en iteratie van het implementeren van handtracking in Myst-en in het bijzonder door er meer ondersteuning voor toe te voegen in Unreal Engine 4.27.2.

Het ontwerp en de implementatie van hand-tracking in 'Myst' PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Gastartikel door Hannah Gamiel

Hannah Gamiel is de Development Director bij Cyaan—de studio achter het origineel'Myst' games—en hielpen bij de ontwikkeling van de nieuwe 'Mijnheer (2020)' inclusief VR-ondersteuning. Oorspronkelijk afkomstig uit een puur technische achtergrond, helpt ze nu de productie van alle titels te leiden en beheert ze de zakelijke en technische inspanningen bij Cyan. Ze heeft meegewerkt aan titels als 'Myst' (2020), 'The Witness', 'Braid, Anniversary Edition', 'Obduction', 'Firmament' (binnenkort beschikbaar!), en meer.

Ontwerpfase en overwegingen

Navigatie ontwerpen voor handtracking

Foto die aangeeft waar je heen wilt. Je dacht waarschijnlijk aan wijzen, toch? Daarom hebben we ervoor gekozen om een ​​'wijzende' methode te gebruiken voor beweging in Myst.

Als je in de teleportmodus bent, kun je aanwijzen waar je heen wilt en de teleportring verschijnt op je bestemming. Wanneer je 'un-point' (door de rest van je vingers uit te strekken, of simpelweg je wijsvinger terug in je handpalm te trekken), wordt de teleport uitgevoerd.

Als je in de vloeiende bewegingsmodus bent, zal het wijzen met je vrije beweging-dominante hand (die kan worden geconfigureerd in onze bedieningsinstellingen, maar is standaard de linkerhand) je soepel beginnen te bewegen in de richting waarin je wijst.

Bij het testen van bewegingen met aanwijzen, ontdekten we dat handtracking soms onbetrouwbaar kan zijn met je wijsvinger en middelvinger wanneer deze wordt afgesloten door de rest van je hand. Het systeem weet niet zeker of die vingers volledig wijzend of volledig 'ingesloten' in je hand zijn. We hebben een beetje een 'fudge'-factor aan de code toegevoegd om rekening te houden met een stabielere initiatie/uitvoering van bewegingen op dit front - waar we later op in zullen gaan wanneer we de wijzigingen bespreken die zijn aangebracht in kant-en-klare Hand Tracking ondersteuning in Unreal Engine.

Draai

De 'point'-methode werkt niet voor alle navigatiegebruiken. Als het om draaien ging, combineerden we in eerste instantie wijzen met polsrotatie. Het vergelijken van de pols van de speler en de voorwaartse vector van de camera zou de richting van de bocht aangeven (en hoe groot de bocht zou moeten zijn). We hebben dit aanvankelijk geprobeerd omdat het intuïtief leek om het 'aanwijzende' thema voor navigatie tussen alle modi te behouden.

Bij comforttests deden zich echter complicaties voor. Bij playtesting zouden de meeste spelers naar voren wijzen met hun handpalm naar de grond gericht, zoals je waarschijnlijk ook zou doen wanneer je probeert naar iets buiten een spel te wijzen. Je pols naar links en rechts draaien (rond de opwaartse as van je pols) terwijl je handpalm naar de grond gericht is, is een uitdaging en heeft een zeer beperkt bewegingsbereik, vooral als je probeert weg te draaien van je borst.

Dit probleem is hetzelfde, zelfs als je een speler vraagt ​​om naar iets voor hem te wijzen met de handpalmen naar binnen gericht. Je kunt je pols naar binnen buigen in de richting van je lichaam behoorlijk wat, maar je krijgt niet hetzelfde bewegingsbereik als je je pols van je lichaam af buigt.

Dus hoe hebben we dit opgelost? Uiteindelijk hebben we draaien toegewezen aan een 'duim omhoog'-gebaar in plaats van een wijs-vinger-wijzend gebaar.

Stel je voor dat je een duim omhoog geeft. Draai nu je pols naar rechts en naar links. Merk op dat hoewel je geen enorm bewegingsbereik hebt, het nog steeds redelijk consistent is om met je duim naar 'links' en 'rechts' te wijzen in dit gebaar.

Dit is waar we voor hebben gekozen om in de handvolgmodus te draaien. Hoewel wijzen met je duim niet de meest intuïtieve manier lijkt om te draaien, is het deed uiteindelijk de meest comfortabele en consistente manier om dit te doen.

Bij snel draaien zorgt het draaien van uw pols naar links of rechts vanuit een duim omhoog positie ervoor dat een enkele klikbeweging wordt gestart. Je moet dan je hand terugbrengen naar de 'center' (recht omhoog) positie om de snap te resetten, en bovendien wachten op een zeer korte cooldown om weer een snap-turn te starten.

Met soepel draaien, zal het draaien van je pols terwijl je duim omhoog staat je naar links of rechts gaan draaien - zodra je een 'dode zone' verlaat die voorkomt dat er een bocht plaatsvindt totdat je de drempel passeert.

Omgaan met conflicten tussen bewegings- en objectinteractiehoudingen

Natuurlijk is het wijzen van een vinger een te breed gebaar om aan te nemen dat het alleen voor navigatie wordt gebruikt. Mensen zullen hetzelfde wijzende gebaar maken om op knoppen te drukken of om te communiceren met andere dingen in de wereld, gewoon uit gewoonte of hun eigen verwachting. Het zou behoorlijk schokkend zijn om naar toe te lopen (maar niet rechts tot aan) een knop, wijs met uw vinger om erop te drukken en kom er dan plotseling (en ongewenst) dichterbij in het spel (of start onbedoeld teleporteren)!

De manier waarop we voorkomen dat er beweging plaatsvindt terwijl de speler ergens mee bezig is, is door te voorkomen dat een bewegingscode afgaat wanneer de hand die het 'bewegen'-gebaar maakt zich binnen een bepaald bereik van een interactief object bevindt. Dit bereik is meerdere keren aangepast om op basis van playtesting tot een goede 'sweet spot' te komen.

We hebben ontdekt dat deze sweet spot ongeveer 25 cm verwijderd is van de locatie in de wereldruimte van het bot van de top van de wijsvinger. Myst staat vol met interactieve objecten van verschillende groottes (alles van kleine knoppen tot zeer grote hendels) opgesteld in zowel wijd open ruimtes als smalle gangen, dus het kostte ons nogal wat testen om tot dit aantal te komen. We probeerden in eerste instantie 60 cm (ongeveer twee voet), maar dat verhinderde beweging wanneer spelers nog dichter bij een object moesten komen. Evenzo veroorzaakte alles onder de 25 cm ongewenste bewegingen van de speler wanneer spelers een object probeerden te grijpen of aan te raken.

Een van onze beste testruimtes was de generatorruimte op Myst Island, waar je je een weg baant door een smalle ingang en dan meteen wordt begroet door een paneel vol knoppen. Toen het interactietestgebied te groot was, konden spelers niet door de ingang en in de richting van het paneel bewegen omdat het knoppen binnen het bereik van de wijsvinger detecteerde.

Dat gezegd hebbende, 25 cm is waar het speciaal voor werkte Myst. Andere games moeten dit aantal mogelijk aanpassen als ze iets soortgelijks willen implementeren, met hun eigen criteria in gedachten.

Objectinteracties ontwerpen voor handtracking

Op dit moment zijn alle haalbare interacties in Myst zijn gebouwd om met de hand te werken: kleppen draaien, deuren openen, knoppen indrukken, boekpagina's omslaan, enzovoort.

De interacties die meeliften op waar we al voor waren opgezet Myst met Touch-controllers. Daar, door op de greepknop te drukken, wordt de in-game mesh-weergave van je hand automatisch gemengd in een 'gegrepen' pose, waarbij je je hand in een vuist plaatst (indien leeg) of een object vastpakt. Met handtracking hebben we code toegevoegd die een gekwalificeerde schatting maakt van wanneer je je vingers voldoende hebt gekruld om iets te 'grijpen' en dezelfde logica te starten als eerder vermeld.

Als u bijvoorbeeld handtracking gebruikt en uw hand zweeft over iets dat grijpbaar is, wordt uw handkleur oranje (dit is precies wat er gebeurt als u handtracking niet gebruikt in Myst ook VR). Wanneer je een interactief object grijpt door je vingers in een vuist te krullen, vervangt een oranje bol je handgaas en geeft aan waar de hand aan het object is bevestigd.

De reden waarom we voor deze methode zijn gegaan in plaats van op maat gemaakte beweegbare mazen voor je handen te maken - of je handen / vingers fysiek te laten lijken op delen van deze objecten - is omdat we wilden dat de interacties in overeenstemming waren met wat we aanbieden op de Touch-controller kant voor nu.

Het indrukken van knoppen werkt echter anders. Er is geen noodzaak voor abstractie, omdat knoppen geen grijpbare objecten zijn, en in plaats daarvan laten we je gewoon op een knop drukken met behulp van gegenereerde capsule-colliders tussen elk van de vingergewrichten op het beweegbare handgaas. Je kunt hierdoor allerlei rare en leuke dingen doen, zoals alleen je pink of de knokkel van je ringvinger gebruiken om met elke knop in het spel te communiceren, als je dat echt wilt.

Deze implementatie verschilt enigszins van de manier waarop Touch-controllers omgaan met knoppen in het spel, omdat we meestal verwachten dat spelers de grip-knop op hun controller gebruiken om de hand in te stellen als een geposeerd 'vingerwijzend' mesh om een ​​nauwkeurige in-game-knop te krijgen druk op hun uiteinde. Met handtracking is er duidelijk aanzienlijk meer flexibiliteit in de pose die u met uw hand kunt creëren, en dus aanzienlijk meer manieren om met dezelfde nauwkeurigheid op knoppen te drukken.

Menu/UI-interacties

Voor interactie met menu's gingen we uiteindelijk met hetzelfde interactieparadigma dat Meta gebruikt voor het Quest Platform: een knijpbeweging met twee vingers tussen duim en wijsvinger, aan beide handen. Dit kan zowel worden gebruikt om ons in-game menu te openen als om te communiceren met elementen in het menu. Het heeft geen zin om hier het wiel opnieuw uit te vinden als spelers dit al hebben geleerd in de menu's op OS-niveau wanneer ze voor het eerst handtracking inschakelen op Quest!

Dit alles communiceren naar de speler

Omdat handtracking niet zo gebruikelijk is op Quest als Touch-controllers, en omdat er misschien wat mensen aan het spelen zijn Myst voor de allereerste keer (of zelfs het spelen van hun allereerste VR-game!), probeerden we attent te zijn met hoe we al deze informatie over handtracking aan de speler communiceren. We hebben ervoor gezorgd dat er een andere versie van ons 'controllerdiagram' is toegevoegd die specifiek is afgestemd op het beschrijven van handtracking-interacties (indien ingeschakeld in Myst), en we laten de speler gespecialiseerde meldingen zien die hen precies vertellen hoe ze zich met hun handen moeten verplaatsen.

Bovendien dachten we dat het van vitaal belang zou zijn om de speler eraan te herinneren hoe hij een soepele handtracking-ervaring kan hebben, zodra deze is ingeschakeld. De speler wordt op de hoogte gebracht in Myst's menu dat de stabiliteit van het volgen van de handen veel beter is als ze ervoor zorgen dat ze zich in een goed verlichte kamer bevinden en hun handen binnen hun gezichtsveld houden.

Meta informeert spelers ook dat deze de sleutel zijn tot een goed bijgehouden hand-tracking-omgeving, maar we erkennen dat sommige spelers in een spel kunnen springen zonder eerst Meta's mededelingen hierover te hebben geparseerd, dus we hebben ervoor gekozen om mensen eraan te herinneren voor het geval ze het vergeten.

Ga verder op pagina 2: Motoraanpassingen gemaakt in Unreal »

Tijdstempel:

Meer van Weg naar VR