Få ditt hode i spillet med Intel RealSense

Siden 1999 har jeg jobbet gjennom firmaet, TheGameCreators, for å gjøre det lettere for alle å lage spill. I fjor begynte jeg å utvikle med Intel RealSense SDK og kamera, som lar deg fange 3D-bilder i sanntid. (Jeg har faktisk vunnet Intels RealSense App Challenge med min virtuelle 3D Video Maker!) Det skal ikke komme som en overraskelse at jeg har sett på hvordan RealSense kan brukes til spillutvikling, og i denne opplæringen deler jeg et eksempel: hvordan å skanne din (eller spillerens) hodet inn i spillet ditt. 

Hvorfor bruke RealSense?

Mange 3D-spilltegn vil inkludere et 2D teksturbilde som brukes som en "hud" for 3D-modellen, som med Kila, under:

Venstre: Kila tekstur. Høyre: 2D-tekstur på 3D-modellen. Fra Game Character Creation Serie: Kila.

Du kan se et tydelig ansikt i tekstur. Hvis du vil endre tegnets ansikt for å matche din egen, er det fristende å prøve å legge inn et flatt 2D-bilde på tekstur. Dette har imidlertid en tendens til ikke å gi gode resultater, som vist nedenfor:

Resultatet av å lime et flatt bilde av et ansikt på en eksisterende 3D-modellens tekstur.

Det er ganske forferdelig. Problemet er at ansikts tekstur ikke kartlegger den underliggende "beinstrukturen" av modellen.

RealSense-enheter inkluderer en infrarød projektor og kamera, slik at de kan fange et 3D-projeksjonskart samt et 2D-bilde av hva de er pekt på. Dette betyr at du kan justere 2D tekstur og 3D-modellen av et tegn som passer til det nye ansiktet.

In-Game Character Creator Workflow

La oss anta at vi vil gi våre spillere mulighet til å ta noen selfies med et RealSense-kamera, og bruk dem til å lage en 3D-avatar for dem.

I stedet for å forsøke å skanne i hele kroppen, og deretter lage en 3D-modell, tekstur og sett med animasjoner fra det, ville vi være bedre å kjøpe en 3D-fullmodellmodell fra et nettsted som 3DOcean ...

... så kutt av hodet:

Dette gjør det mye enklere å utvikle og teste spillet; Det eneste som vil variere mellom spillernes avatarer er hodet.

Fange spillerens likhet

For å fange spillerenes likhet, må spillkarakteroppretteren gjøre flere skanninger av hodet, alt nøyaktig styrt slik at programvaren kan sy sammen igjen. (Intel RealSense SDK har gitt en prøve som bare gjør det, det kan kjøres umiddelbart fra den forhåndsutviklede binærmappen.)

Selvfølgelig vil du lage din egen 3D-skanner som passer ditt prosjekt, så det følger bare en sammenfatning av hvordan teknikken kan fungere for deg.

Metode 1

Du kan ta nettskuddene separat, og deretter forsøke å koble dem manuelt i et kunstskifteverktøy eller et lite program. Problemet med live 3D-skanning er imidlertid at det er et menneske i den andre enden av det, noe som betyr at de fidget, skifter seg i sine seter, lene seg tilbake og bevege seg frem på subtile måter - og det regner ikke med den subtile banen, gni og rulle av hodet selv. Gitt denne tendensen for hodet til å skifte posisjon og avstand fra kameraet under skanningssesjonen, vil dette bare føre til frustrasjon når man prøver å sette sammen skuddene igjen.

Metode 2

Hvis dine skanninger er nøyaktige, kan du blande maskene mot det første nettverket du skannet og foreta justeringer hvis det finnes et toppunkt i verdensrommodelldataene, eller opprett et nytt verdensverdispunktpunktpunkt hvis ingen tidligere eksisterte. Dette vil tillate at hodet nettverket blir mer raffinert med flere prøver som spilleren gir. Ulempen med denne teknikken er at du får spillerens hode til å forbli sentralt under skanning, og konvertere 3D-data til verdens koordinater, skaper noen utfordringer.

Metode 3

Den perfekte teknikken er å oppdage signaturmarkører i det skannede nettverket, for å få en "vertex fix". Tenk på dette som kartlegger din posisjon på havet ved å se på stjernene; ved å bruke konstellasjoner, kan du trene både din relative orientering og posisjon. Dette er spesielt nyttig når du produserer et andre nett: Du kan bruke den samme markeringsdetekteringsalgoritmen, finne det samme mønsteret og returnere den relative retningen, posisjonen og skalskiftet fra det første nettverket. Når du har denne forskyvningen, legger du til det andre nettverket til det første, er en enkel verdenstransformasjonsberegning, og deretter legger du ekstraverdensdataene til det opprinnelige nettverket. Denne prosessen gjentas til det ikke er flere masker du ønsker å sende inn, og deretter går du videre til siste trinn.

Viktige punkter

  • Jeg vil ikke anbefale å implementere teknikkene her før du har en god praktisk forståelse av 3D geometri-koding, da manipulering av variabel orienterte vertexdata kan være vanskelig.
  • Hvis teknikken du valgte involverte lagring av vertexdata på et enkelt objekt, vil du sannsynligvis ha mye overskudd og overlappende toppunkter. Disse må fjernes og en ny triangeliste produseres for å forsegle objektet.
  • Lagring av fargedataene i ansiktssøk i den diffuse delen av vertexdataene er en praktisk måte å unngå behov for en tekstur og gir andre fordeler når det gjelder å optimalisere det endelige nettverket
  • Ikke glem å behandle rådiodedataene for å fjerne forstyrrelser som for eksempel dybdeverdier som ikke stemmer overens med de omkringliggende dybdepikseldataene. Unnlatelse av å gjøre dette og alt arbeidet ditt for å skape et godt 3D-hodemaske vil være forgjeves.

Dette er definitivt den harde delen, men det er ikke umulig; Husk, det er en fungerende demo i SDK-filene du kan bruke som grunnlag for å få dette til å løpe i spillets motor.

Bruke Likheten i spillet

La oss anta at du har en anstendig 3D-modell (og tilsvarende tekstur) av spillerens ansikt:

En futuristisk mughot.

Vi kan nå holde fast på karossens modell:

Gitt, resultatet er fortsatt ganske forferdelig, men vi er ikke ferdige ennå. Vi kan ta en løsning fra en av de mange sidene i spillutviklerens bibel, en vi kan overbevise oss selv er en ganske fin funksjon i motsetning til en ganske uhyggelig hack.

Alt vi gjør er å dekke opp hullene med en parykk og en lue:

OK, gitt, vi kunne bare holde 3D-ansiktet på forsiden av et allerede modellert 3D-hode, men dette er mer moro. Hvis Team Fortress 2 er noe å gå forbi, vil spillerne ha muligheten til å tilpasse avatarens hode og ansikt med ulike tilbehør; Vi dreper to fugler med en stein!

Hvis du virkelig ønsker å unngå å legge hatter og parykker til spillkarakteren, må du få spilleren til å knytte eller gel tilbake håret før du gjør skanningen. Jo flattere håret er, jo bedre blir skanningen. Løst hår forstyrrer dybdekameraet, og produserer scatterrefleksjoner som ikke skanner godt.

Det er enklere å gjøre dette på Dev Time

Selv om det er mulig å få en spillers likhet i spillet i løpet av spillet, er det et vanskelig sted å starte. Hvis du ikke har forsøkt dette før, anbefaler jeg først å prøve noe teknisk enklere: å få din egen likhet (eller en skuespiller) til spillet.

Dette er enklere av tre grunner:

  1. Det er mye mer margin for feil og rom for korreksjon; Hvis du selv styrer hele prosessen, justerer du manuelt alle farger eller masker som ikke kommer ut, og justerer sluttresultatet til det er helt riktig. Du er ikke avhengig av at koden din fungerer perfekt, første gang, for hvert ansikt.
  2. Du kan bruke eksisterende programvare (som Blender), i stedet for å innlemme hele prosessen i spillets brukergrensesnitt og kode.
  3. Siden det er spillet ditt, vil du sannsynligvis ha mer tålmodighet enn spillerne dine, slik at du kan ta (og gjenoppta) flere bilder og vente lenger på resultater enn det er rimelig å spørre en spiller om.

Og basert på dette siste punktet, kan du ta deg tid til å skanne hele hodet, ikke bare ansiktet ditt. Faktisk har vi allerede gjort dette i en tidligere opplæring. La oss plukke opp hvor det gikk av og gå gjennom hvordan du får denne modellen til Unity 5.

Få ditt hode i enhet

Etter å ha fulgt den forrige opplæringen, bør du ha en FBX-modell av hodet og et tilsvarende UV tekstur kart.

Åpne enhet, og opprett et nytt prosjekt og scene.

Klikk Eiendeler> Importer ny eiendel. Velg FBX-modellen du eksporterte fra Blender.

Når Unity importerer objektet, er det mulig (og til og med sannsynlig) at det ikke vil importere tekstur, i så fall vil du se en gråhvit versjon av nettverket ditt:

Det er ok, vi vil legge til teksturkartet neste.

Velg materialer mappe, høyreklikk og velg deretter Import Asset. Velg PNG-filen du lagret i Blender, og importer den deretter.

Du vil nå se teksturkartet sammen med et gråhvitt materiale med samme navn som nettverket ditt. Høyreklikk på det grå-hvite materialet (formet som en ball) og slett det.

Gå tilbake til din Eiendeler mappe og høyreklikk på nettverket du importerte. Å velge importere

Etter at det er importert, vil det skape materialet riktig og tekstur på nettverket ditt:

Hvis modellen ser rosa ut i objektforhåndsvisningen, velger du ganske enkelt et annet objekt (som kameraet), og deretter velger du nettverket for å gjøre det oppdatert..

Nå er du klar til å få hodet i spillet. Dra objektet ditt til scenen. (Du kan gjøre det større og rote rundt med kameraets perspektiv for å få det til syne.)

Når du treffer Spille, Du bør se objektet ditt gjengitt riktig:

Hvis du vil justere tekstur for å gjøre det mer eller mindre skinnende eller metallisk, må du først gå til materialer mappe og velg den rundformede versjonen av tekstur. I Inspektør panel, kan du justere metallic og glatthet skyvekontrollene for å få det rette utseendet:

Konklusjon

Det kan virke som en uvanlig mengde arbeid bare for å få forsiden av et hode til en virtuell scene, men teknikkene du har lært i denne artikkelen kan brukes til å skanne og syke alt du vil ha. 

Muligheten til å skanne essensen til datamaskinen og fortsette reisen i et virtuelt landskap begynner her med skanning av et enkelt ansikt. Hvordan vil spill og holdninger endres ettersom spillerne i spillet begynner å ligne ekte mennesker du kanskje møter i ditt eget liv? Når du setter et ansikt til noen, blir de virkelige, og det vil være interessant å se hvordan spill og spillere endres som et resultat.

Intel® Software Innovator-programmet støtter innovative, uavhengige utviklere som viser evne til å lage og demonstrere fremadrettede prosjekter. Innovatører utnytter høyttalerskap og demo muligheter ved industri hendelser og utvikler sammenkomster.

Intel® Developer Zone tilbyr verktøy og veiledningsinformasjon for plattformsapputvikling, plattform og teknologiinformasjon, kodeprøver og faglig kompetanse for å hjelpe utviklere til å innovere og lykkes. Bli med i våre fellesskap for Internett av ting, Android *, Intel® RealSense ™ -teknologi, Moderne kode, Spill Dev og Windows * å laste ned verktøy, få tilgang til dev kits, dele ideer med likesinnede utviklere, og delta i hackoner, konkurranser, roadshows og lokale arrangementer.