Tekstinvoer voor games met slechts een Intel RealSense-camera

Intel RealSense 3D-camera's bieden hand- en vingerregistratie naar thuiscomputers en een gebruiksvriendelijke SDK voor ontwikkelaars, waardoor ze een geweldige nieuwe invoermethode zijn voor zowel VR-games als op scherm gebaseerde games. 

Idealiter willen we spellen kunnen maken waarbij de speler op geen enkel moment een randapparaat hoeft aan te raken. Maar net als bij de Kinect en de EyeToy stuiten we op problemen wanneer we voor één gemeenschappelijke taak staan: het invoeren van tekst. Zelfs het invoeren van de naam van een personage zonder een toetsenbord te gebruiken, kan vervelend zijn.

In dit bericht zal ik vertellen wat ik heb geleerd over de beste (en slechtste!) Manieren om spelers tekst via alleen gebaar te laten invoeren en je te laten zien hoe je de Intel RealSense SDK in Unity instelt, zodat je het kunt proberen in je eigen spellen.

(Merk op dat ik me richt op ASCII-invoer hier, en specifiek het Engelse alfabet.) Alternatieve alfabetten en invoermethoden, zoals stenografie, stenografie en kanji, kunnen op andere manieren beter worden bediend.)

Invoermethoden die we kunnen verbeteren

Er zijn ook andere benaderingen voor tekstinvoer zonder rand, maar ze hebben gebreken. We willen graag een aanpak bedenken die op elk van hen verbetert.

Virtueel toetsenbord

Toetsenborden zijn de gouden standaard voor tekstinvoer, dus hoe zit het met het nabootsen van typen op een toetsenbord in de lucht of op een plat oppervlak??

Helaas is het gebrek aan voelbare feedback belangrijker dan het op het eerste gezicht lijkt. Aanrakingstype is in deze situatie onmogelijk, omdat kinesthesie te onnauwkeurig is om alleen op inertie te reageren. De fysieke en responsieve aanraking van een toetsenbord geeft de typist een tweede gevoel van vingerpositie en fungeert als een voortdurend foutcorrectiemechanisme. Zonder dat hebben iemands vingers de neiging van het doel af te drijven, en kleine positioneringsfouten samenvloeien snel, hetgeen een "reset" naar huissleutels vereist. 

Gestural alfabet

Ons eerste experiment met RealSense voor tekstinvoer was een poging om de vinger-spelling van de Amerikaanse gebarentaal te herkennen. We ontdekten dat er verschillende problemen zijn die dit een onpraktische keuze maken.

Een probleem is snelheid. Vaardige toverspreiders kunnen ongeveer twee letters per seconde of 120 letters per minuut laten knipperen. Met een gemiddelde van vijf letters per woord, dat is 24 WPM, wat aanzienlijk lager is dan de gemiddelde snelheid van de typist van 40 WPM - een goede vinger-speller is ongeveer half zo snel als een zo-zo-keyboarder.

Een ander probleem is de noodzaak voor de gebruiker om een ​​nieuwe tekenset te leren. Een van de minder voor de hand liggende waarden van een standaardtoetsenbord is dat het comporteerd naar alle andere tools die we gebruiken om te schrijven. Het afgedrukte T we leren in de kleuterklas is hetzelfde T te zien op het toetsenbord. Gebruikers vragen om een ​​nieuwe tekenset te leren om tekst in een game in te voeren, is een 'no-go'.

Joystick en ruimtelijke invoer

Spelconsoles vereisen al regelmatig tekstinvoer voor creditcardnummers, wachtwoorden, karakternamen en andere aanpasbare waarden. De typische invoermethode is om een ​​virtueel toetsenbord op het scherm weer te geven en een ruimtelijk gevoelige invoer toe te staan ​​om een ​​bepaalde toets te 'tikken'.

Er zijn veel verschillende iteraties van dit concept. Velen gebruiken een joystick om een ​​cursor te verplaatsen. Anderen kunnen een handmatige trackingtechnologie zoals Intel RealSense of Kinect gebruiken om in essentie hetzelfde te doen (met een handgebaar als een tik op de toets). Stephen Hawking gebruikt een conceptueel vergelijkbare invoer die oogbewegingen bijhoudt om een ​​cursor te verplaatsen. Maar al deze systemen creëren een scenario met de slechtste van beide werelden, waarbij een ruimtelijke invoer met één punt, in wezen een muisaanwijzer, wordt gebruikt om een ​​multi-touch-apparaat te gebruiken; het is als het gebruik van een potloodgom om één letter per keer te typen.

Er is enig interessant werk gedaan om de invoer van joysticktekst sneller en flexibeler te maken door mensen zoals Doug Naimo op Triggerfinger, maar de invoersnelheid valt nog steeds ver onder het normale typen met een grote marge, en is echt alleen waardevol wanneer betere of snellere invoermethoden worden gebruikt niet beschikbaar.

Mijn gekozen invoermethode

Al dit gepraat over de zwakheden van alternatieve tekstinvoermethoden houdt in dat het bescheiden toetsenbord verschillende sterke punten heeft die niet gemakkelijk kunnen worden vervangen of verbeterd. Hoe kunnen deze aangetoonde sterke punten worden behouden in een tekstinvoersysteem dat geen hands-on randapparatuur vereist? Ik geloof dat het antwoord ligt in twee kritische observaties:

  • De mogelijkheid om maar liefst 10 vingers te gebruiken, is onmogelijk om te voldoen aan of te verslaan met een enkel puntensysteem.
  • De strakke, gelaagde en aanpasbare indeling van het toetsenbord is opmerkelijk efficiënt, maar het is een 2D-ontwerp en kan worden uitgebreid door een derde dimensie op te nemen.

Met dit alles in gedachten, kwam ik met een eenvoudig, tweehandig gebarensysteem dat ik "facekeys" noem. Dit is hoe het werkt.

Eenvoudig starten: een rekenmachine

Voordat we naar een volledig toetsenbord gaan, laten we beginnen met een numpad-well, een eenvoudige rekenmachine. We hebben tien cijfers nodig (0 tot 9) en vijf operators (plus, min, delen, vermenigvuldigen en gelijken). Met het doel alle tien vingers te gebruiken, kunnen we deze in twee groepen van vijf cijfers splitsen en deze op het scherm weergeven als twee vierkante piramides, met de operators als een andere piramide:

Elke vinger komt overeen met één zijde van elke piramide. Elk gezicht kan worden beschouwd als een "sleutel" op een toetsenbord, dus ik bel ze facekeys. De linkerhand voert cijfers in 1 naar 5 door vingers individueel te buigen, terwijl de rechter cijfers invoert 6 naar 0. Het gelijktijdig buigen van dezelfde vinger op beide handen - beide ringvingers, bijvoorbeeld, activeert een facekey op de piramide van de operator. 

Niet-cijferige (maar essentiële) functies omvatten een linkervuist om de weergegeven waarde in het geheugen te schrijven, een rechtervuist om het geheugen te lezen (en wissen) en twee gesloten vuisten om de stapels leeg te maken en een nieuwe berekening te starten.

Toen ik dit voor het eerst testte, ging ik ervan uit dat gebruikers hun handen met de palm naar beneden (alsof ze op een toetsenbord typen) het prettigst vinden. Het blijkt echter dat een positie met de handpalmen naar binnen toe comfortabeler is, en zorgt voor zowel langer gebruik als meer snelheid:

Het blijkt ook dat visuele feedback van het scherm erg belangrijk is, vooral bij het leren. We kunnen dit via een vertrouwde rekenmachinestijlcijferuitlezing leveren, maar het is ook goed om de piramides zelf te laten roteren en animeren met elke streek, om de verbinding tussen een vinger en de bijbehorende facekey tot stand te brengen en te versterken..

Dit systeem is comfortabel en gemakkelijk te leren, en is ook gemakkelijk uitbreidbaar. Het ontbreken van een decimale punt en een backspace-toets wordt bijvoorbeeld snel frustrerend, maar deze ingangen kunnen gemakkelijk worden ondergebracht met kleine wijzigingen. Ten eerste kan een rechtshandige golf fungeren als een backspace. Ten tweede kan de gelijk aan facekey worden vervangen door een decimale punt voor invoer en een "klap" -gebaar werd de gelijkwaardige operator, wat het heerlijke resultaat is dat berekeningen ritmisch en bescheiden leuk zijn.

Dit uitbreiden naar een volledig toetsenbord

Een calculator zonder randapparatuur is één ding, maar een typische 80+ toetsenbordvervanging is iets heel anders. Er zijn echter enkele zeer eenvoudige en praktische manieren om door te gaan met de ontwikkeling van dit concept met sleutelposities.

Het standaardtoetsenbord is gerangschikt in vier rijen met toetsen plus een spatiebalk: cijfers en interpunctie bovenaan met drie rijen letters eronder. Elke rij wordt gedefinieerd door zijn positie in de ruimte, en we kunnen dat concept hier gebruiken. 

In plaats van je handen naar een vast punt zoals de camera te bewegen, is een flexibelere methode het systeem self-referentiële. We kunnen de speler een comfortabele afstand tussen zijn handpalmen laten bepalen; het spel zal dan deze afstand intern instellen als 1-Delta. Het equivalent van reiken naar verschillende rijen op het toetsenbord is dan gewoon handen dichter of verder uit elkaar bewegen: a 2-delta afstand geeft toegang tot de "tweede rij" -toetsen en 3-Delta bereikt de derde rij toetsen.

Je handen vasthouden 1-Delta uit elkaar, en ze kunnen typen EEN naar J; hou ze vast 2-delta uit elkaar, en ze kunnen typen K naar T.

De "home-toetsen" zijn hierop ingesteld 1-Delta afstand, en keyfacing gaat verder door letters en andere karakters toe te wijzen aan een reeks piramides die achtereenvolgens het hele alfabet beslaan. Experimentatie suggereert dat er 3-4 comfortabele en gemakkelijk reproduceerbare Delta's bestaan ​​tussen de handen die elkaar raken en de schouderbreedte. Ervaren gebruikers kunnen er nog veel meer vinden, maar de inherente onnauwkeurigheid van normale kinesthesie is waarschijnlijk een plafond voor deze factor.

Eenvoudige gebaren bieden een andere uitbreidingsas. Het toetsenbord Verschuiving sleutel, bijvoorbeeld, transformeert elke sleutel in twee, en de Ctrl en alt toetsen breiden dat nog meer uit. Eenvoudige bewegingen met één hand zouden exact dezelfde toegang tot belangrijke lagen creëren, terwijl snelheid en flexibiliteit behouden blijven. Een vuist kan bijvoorbeeld de Verschuiving sleutel. Een "pistool" -hand kan toegang krijgen tot bewerkingscommando's of een willekeurig aantal combinaties. Door gebruik te maken van losse bewegingen om de keyfaces te wijzigen, heeft de gebruiker toegang tot verschillende tekens.

Klaar om het zelf te proberen? Eerst moet u de Intel RealSense SDK installeren en de plug-in voor Unity instellen.

Crashcursus in Unity en RealSense

Hier volgt een korte uitleg over het installeren en instellen van de RealSense SDK en Unity. We maken een eenvoudige testdemo die de grootte van een object wijzigt op basis van de handbewegingen van de gebruiker.

1. Wat je nodig hebt

Je zal nodig hebben:

  • Een Intel RealSense 3D-camera (ingebouwd in een apparaat of een externe camera)
  • Unity Professional 4.0 of hoger
  • De gratis Intel RealSense SDK

U kunt ook deze gratis plug-in gebruiken waarmee u Unity-code in Visual Studio kunt schrijven; het is aan jou.

Ik ga het ruimteschip gebruiken vanuit het gratis Space Shooter-project van Unity, maar je kunt gewoon een eenvoudige kubus of een ander object gebruiken als je dat liever hebt.

2. De RealSense Unity Toolkit importeren

Het pakket met de Unity Toolkit voor Intel RealSense-technologie bevat alles wat u nodig hebt voor het manipuleren van game-objecten. Het Unity-pakket bevindt zich in de \ RSSDK \ Framework \ Unity \ map. Als u de RealSense SDK op de standaardlocatie hebt geïnstalleerd, is de RSSDK map zal zijn in C: \ Program Files (x86) \ (op Windows).

U kunt de Unity Toolkit net als elk ander pakket importeren. Wanneer u dit doet, hebt u de opties om te kiezen en te kiezen wat u wilt. Voor het doel van deze tutorial gebruiken we de standaardinstellingen en importeren we alles.

Zoals u in de volgende afbeelding kunt zien, zijn er nu verschillende nieuwe mappen onder de map Activa.

  • plugins en Plugins.Managed bevatten DLL's die vereist zijn voor het gebruik van de Intel RealSense SDK.
  • RSUnityToolkit is de map die alle scripts en items bevat voor het uitvoeren van de toolkit.

We gaan niet in op wat alle mappen hier zijn; Ik laat dat voor je achter om te onderzoeken!

3. De scène opzetten

Voeg het schip toe aan de scène.

Voeg vervolgens een gericht licht toe om het schip wat licht te geven, zodat u het beter kunt zien.

Het zou er zo uit moeten zien:

4. De schaalactie toevoegen

Om schaalmogelijkheden aan het spelobject toe te voegen, moeten we het ScaleAction script. De ScaleActionScript is onder de RSUnityToolkit map en in de acties submap. 

Pak eenvoudig het script en sleep het direct naar het schip in de Tafereel uitzicht. U kunt nu het ScaleAction scriptparameters in de Inspecteur

Hier heb ik alle parameters samengevouwen om de drie basisgebieden van het schaalscript te tonen: de Start evenement, de Schaaltrigger, en de Stop evenement.

5. Parameters instellen

Beginnend met de Start evenement, vouw de pijl uit om de standaardtrigger weer te geven. In dit geval willen we niet gebruiken Gebaar gedetecteerd, we willen gebruiken Hand gedetecteerd

Klik met de rechtermuisknop op Gebaar gedetecteerd en selecteer Verwijderen. Dan, op de Start evenement's Toevoegen knop, klik en selecteer Hand gedetecteerd. Onder Welke hand, selecteer en kies ACCESS_ORDER_RIGHT_HANDS.

Nu zullen we de Stop evenement. Vouw het Stop evenement en verwijder de Gebaar verloren rij. Klik vervolgens op de Stop evenement's Toevoegen knop en kies Hand verloren. Naast Welke hand, kiezen ACCESS_ORDER_RIGHT_HANDS.

We hoeven het niet te veranderen Schaaltrigger omdat er sowieso maar één optie is. We zullen alleen de standaard gebruiken.

6. Probeer het uit

Dat is het! Sla je scène op, sla je project op en voer het uit; je kunt het formaat van het schip op het scherm veranderen met een gebaar.

Nu is het jouw beurt!

We hebben de ideeën besproken achter het invoeren van tekst zonder een randapparaat aan te raken en u hebt gezien hoe u aan de slag kunt gaan met de RealSense SDK in Unity. Vervolgens is het aan jou. Neem wat je hebt geleerd en experimenteer! 

Vraag eerst je demo om verschillende personages te interpreteren op basis van de vingers die je verplaatst. Reflecteer dit vervolgens op het juiste moment op het scherm (je hoeft mijn piramidemethode niet te gebruiken!). Ga vervolgens verder - wat te denken van een andere handpositie, zoals met de handpalmen naar de camera gericht, of een andere invoerbeweging, zoals het draaien van een Rubiks kubus?

Het Intel® Software Innovator-programma ondersteunt innovatieve onafhankelijke ontwikkelaars die in staat zijn om toekomstgerichte projecten te creëren en te demonstreren. Vernieuwers profiteren van sprekerschap en demomogelijkheden tijdens evenementen en bijeenkomsten voor ontwikkelaars.

Intel® Developer Zone biedt tools en how-to-informatie voor platformonafhankelijke app-ontwikkeling, platform- en technologie-informatie, codevoorbeelden en peer-expertise om ontwikkelaars te helpen innoveren en slagen. Word lid van onze community voor de internet van dingenAndroidIntel® RealSense ™ -technologie, Moderne codeGame ontwikkelaar en ramen om gereedschappen te downloaden, toegang te krijgen tot ontwikkelkits, ideeën uit te wisselen met gelijkgestemde ontwikkelaars en deel te nemen aan hackathons, wedstrijden, roadshows en lokale evenementen.