Entra in gioco con Intel RealSense

Dal 1999, ho lavorato attraverso la mia compagnia, TheGameCreators, per rendere più facile per tutti i giocatori fare giochi. L'anno scorso, ho iniziato a sviluppare con l'SDK Intel RealSense e la fotocamera, che consente di acquisire immagini 3D in tempo reale. (In realtà ho vinto il RealSense App Challenge di Intel con il mio Virtual 3D Video Maker!) Non dovrebbe sorprendere il fatto che stavo guardando a come utilizzare RealSense per lo sviluppo del gioco, e in questo tutorial condividerò un esempio: come per scansionare la tua testa (o quella del tuo giocatore) nel tuo gioco. 

Perché utilizzare RealSense?

Molti personaggi dei giochi 3D includeranno un'immagine di texture 2D che viene utilizzata come "skin" per il modello 3D, come con Kila, di seguito:

A sinistra: la trama di Kila. Destra: la texture 2D applicata al modello 3D. Da Game Character Creation Series: Kila.

Puoi vedere una faccia distinta nella texture. Se si desidera modificare il volto del personaggio in modo che corrisponda al proprio, si è tentati di incollare una foto 2D piana sulla texture. Tuttavia, questo tende a non dare grandi risultati, come dimostrato di seguito:

Il risultato di incollare una foto piatta di una faccia sulla trama di un modello 3D esistente.

È abbastanza orribile. Il problema è che la texture del viso non è mappata sulla sottostante "struttura ossea" del modello.

I dispositivi RealSense includono un proiettore a infrarossi e una fotocamera, in modo che possano acquisire una mappa di proiezione 3D e una foto 2D di qualunque cosa puntino. Ciò significa che è possibile regolare la trama 2D e il modello 3D di un personaggio per adattarsi al nuovo volto.

Flusso di lavoro del creatore dei personaggi in-game

Supponiamo di voler consentire ai nostri giocatori di fare alcuni selfie con una fotocamera RealSense, e quindi usarli per creare un avatar 3D per loro.

Piuttosto che tentare di scansionare tutto il corpo - e quindi creare un modello 3D, una trama e un set di animazioni da quello - faremmo meglio ad acquistare un modello 3D di tutto il corpo da un sito come 3DOcean ...

... poi tagliando la testa:

Questo rende molto più facile sviluppare e testare il gioco; l'unica cosa che varierà tra gli avatar dei giocatori è la testa.

Catturare la somiglianza del giocatore

Per catturare la somiglianza del giocatore, il creatore del personaggio nel gioco deve eseguire diverse scansioni della testa, tutte controllate in modo preciso in modo che il software possa ricucire tutto di nuovo insieme. (L'SDK Intel RealSense ha fornito un esempio che fa proprio questo, che può essere eseguito immediatamente dalla cartella dei binari precompilati.)

Ovviamente vorrete creare il vostro scanner 3D per adattarlo al vostro progetto, quindi quello che segue è solo una descrizione di come la tecnica potrebbe funzionare per voi.

Metodo 1

Puoi prendere separatamente i colpi di maglia e poi provare a collegarli manualmente a uno strumento artico o a un piccolo programma di make-shift. Tuttavia, il problema con la scansione 3D in tempo reale è che c'è un essere umano all'altra estremità, il che significa che si agitano, si spostano sui loro sedili, si appoggiano all'indietro e avanzano in modo sottile - e questo non sta tenendo conto del tono sottile, imbardata e rotolare della testa stessa. Data questa tendenza alla testa di spostare la posizione e la distanza dalla fotocamera durante la sessione di scansione, questo porterà solo alla frustrazione quando si tenta di rimontare i colpi.

Metodo 2

Se le tue scansioni sono accurate, puoi unire le maglie alla prima mesh scansionata e apportare modifiche se esiste un vertice nei dati del modello di spazio mondiale o creare un nuovo vertice dello spazio del mondo se non ne esisteva nessuno in precedenza. Ciò consentirà alla mesh della tua testa di diventare più raffinata con più campioni forniti dal giocatore. Il rovescio della medaglia di questa tecnica è che ottenere la testa del giocatore in una posizione centrale durante la scansione e convertire i dati 3D in coordinate globali crea alcune sfide.

Metodo 3

La tecnica perfetta consiste nel rilevare i marcatori di segni all'interno della mesh scansionata, al fine di ottenere una "correzione dei vertici". Pensa a questo come a tracciare la tua posizione sull'oceano guardando le stelle; usando le costellazioni, puoi calcolare sia il tuo orientamento che la posizione relativa. Ciò è particolarmente utile quando si produce una seconda mesh: è possibile applicare lo stesso algoritmo di rilevamento marker, trovare lo stesso pattern e restituire l'orientamento relativo, la posizione e lo spostamento della scala dalla prima mesh. Una volta ottenuto questo offset, aggiungere la seconda mesh al primo è un semplice calcolo di trasformazione del mondo e quindi aggiungere i dati del vertice in più alla mesh originale. Questo processo viene ripetuto fino a quando non ci sono più mesh da inviare e quindi si procede al passaggio finale.

Punti chiave

  • Non consiglierei di implementare le tecniche qui finché non avrete una buona conoscenza pratica della codifica della geometria 3D, poiché manipolare i dati dei vertici orientati alle variabili può essere complicato.
  • Se la tecnica scelta implicasse la stratificazione dei dati dei vertici su un singolo oggetto, è probabile che ci siano molti vertici in eccesso e sovrapposti. Questi devono essere rimossi e una nuova lista triangolare prodotta per sigillare l'oggetto.
  • Memorizzare i dati di colore della tua scansione facciale nel componente diffuso dei dati dei vertici è un modo pratico per evitare la necessità di una trama e offre altri vantaggi quando si tratta di ottimizzare la mesh finale
  • Non dimenticare di elaborare i dati di profondità grezza per rimuovere interferenze come valori di profondità vaganti che non sono coerenti con i dati dei pixel di profondità circostanti. Non riuscire a fare questo e tutto il tuo lavoro per creare una buona mesh di testa 3D sarà inutile.

Questo è sicuramente The Hard Part, ma non è impossibile; Ricorda, c'è una demo funzionante nei file SDK che puoi usare come base per farla funzionare nel motore del tuo gioco.

Usando la somiglianza nel gioco

Supponiamo che tu abbia un modello 3D decente (e una texture corrispondente) del volto del giocatore:

Una foto segnaletica futuristica.

Ora possiamo attaccare questo sul modello del corpo del personaggio:

Certo, il risultato è ancora abbastanza orribile, ma non abbiamo ancora finito. Possiamo prendere una soluzione da una delle tante pagine della bibbia degli sviluppatori di giochi, quella che possiamo convincere noi stessi è una caratteristica piuttosto carina in contrasto con un hack piuttosto sinistro.

Tutto ciò che facciamo è coprire le lacune con una parrucca e un cappello:

OK, garantito, potremmo semplicemente incollare la faccia 3D sulla parte anteriore di una testa 3D già modellata, ma è più divertente. Se Team Fortress 2 è qualcosa da fare, ai giocatori piacerà avere la possibilità di personalizzare la testa e il viso dell'avatar con vari accessori; stiamo uccidendo due piccioni con una fava!

Se vuoi davvero evitare di aggiungere cappelli e parrucche al personaggio del gioco, devi far sì che il giocatore leghi o faccia ricrescere i capelli prima di eseguire le scansioni. Più sono lisci i loro capelli, migliore sarà la scansione. I capelli sciolti interferiscono con la fotocamera di profondità e producono riflessi di dispersione che non scansionano bene.

È più facile farlo al Dev Time

Sebbene sia possibile ottenere la somiglianza di un giocatore nel gioco in fase di runtime, è un punto difficile da avviare. Se non l'hai mai provato prima, ti consiglio innanzitutto di provare qualcosa di tecnicamente più semplice: ottenere la tua immagine (o quella di un attore) nel gioco.

Questo è più facile per tre motivi:

  1. C'è molto più margine di errore e spazio per la correzione; se controlli tu stesso l'intero processo, regola manualmente tutti i colori o le mesh che non escono correttamente, e modifica il risultato finale finché non è giusto. Non sei dipendente dal tuo codice che funziona perfettamente, prima volta, per ogni volto.
  2. Puoi utilizzare software esistente (come Blender), piuttosto che dover integrare l'intero processo nell'interfaccia utente e nel codice del tuo gioco.
  3. Dato che è il tuo gioco, è probabile che tu abbia più pazienza dei tuoi giocatori, quindi puoi prendere (e riprendere) più immagini e aspettare più a lungo per i risultati di quanto sia ragionevole chiedere a un giocatore di.

E sulla base di quest'ultimo punto, puoi prendere il tempo per fare una scansione della tua intera testa, non solo della tua faccia. In effetti, lo abbiamo già fatto in un precedente tutorial. Riprendiamo da dove è stato interrotto e spieghiamo come ottenere questo modello in Unity 5.

Mettendo la testa in unità

Dopo aver seguito il tutorial precedente, dovresti avere un modello FBX della tua testa e una mappa di texture UV corrispondente.

Apri Unity, quindi crea un nuovo progetto e scena.

Clic Attività> Importa nuova risorsa. Seleziona il modello FBX che hai esportato da Blender.

Quando Unity importa l'oggetto, è possibile (e anche probabile) che non importerà la sua trama, nel qual caso vedrai una versione grigio-bianca della tua mesh:

Va bene, aggiungeremo la mappa delle texture dopo.

Seleziona il materiale cartella, quindi fare clic con il tasto destro e selezionare Importa cespite. Seleziona il file PNG che hai salvato in Blender, quindi importalo.

Ora vedrai la mappa delle texture accanto a un materiale grigio-bianco con lo stesso nome della tua mesh. Fai clic con il pulsante destro del mouse sul materiale grigio-bianco (a forma di palla) ed eliminalo.

Torna al tuo Risorse cartella e fare clic con il tasto destro del mouse sulla mesh importata. Selezionare Reimportare

Dopo la reimportazione, creerà il materiale correttamente e strutturerà la mesh:

Se il modello appare rosa nell'anteprima dell'oggetto, basta selezionare un altro oggetto (come la fotocamera), quindi selezionare nuovamente la mesh per farlo aggiornare.

Ora sei pronto per entrare in gioco. Trascina il tuo oggetto sulla scena. (Puoi renderlo più grande e gironzolare con la prospettiva della videocamera per vederlo in vista).

Quando colpisci Giocare, dovresti vedere il tuo oggetto reso correttamente:

Se vuoi regolare la texture per renderla più o meno lucida o metallica, prima vai su materiale cartella e selezionare la versione a forma circolare della vostra texture. Nel Ispettore pannello, è possibile regolare il Metallico e levigatezza cursori per ottenere il look giusto:

Conclusione

Potrebbe sembrare una quantità eccessiva di lavoro solo per portare le parti anteriori di una testa in una scena virtuale, ma le tecniche che hai imparato in questo articolo possono essere applicate alla scansione e alla cucitura di qualsiasi cosa tu voglia. 

La possibilità di scansionare la tua essenza nel computer e continuare il tuo viaggio in un paesaggio virtuale inizia proprio qui con la scansione di una singola faccia. Come cambieranno i giochi e le attitudini man mano che i protagonisti del gioco inizieranno ad assomigliare a persone reali che potresti incontrare nella tua vita? Quando metti una faccia a qualcuno, diventano reali e sarà interessante vedere come cambiano i giochi e i giocatori.

Il programma Intel® Software Innovator supporta sviluppatori indipendenti innovativi che mostrano la capacità di creare e dimostrare progetti lungimiranti. Gli innovatori sfruttano le opportunità di speakerhip e demo negli eventi del settore e nelle riunioni degli sviluppatori.

Intel® Developer Zone offre strumenti e istruzioni per lo sviluppo di app cross-platform, informazioni su piattaforma e tecnologia, esempi di codice e competenze peer per aiutare gli sviluppatori a innovare e avere successo. Unisciti alle nostre comunità per il Internet delle cose, Android *, Tecnologia Intel® RealSense ™, Codice moderno, Game Dev e Finestre* per scaricare strumenti, accedere a kit di sviluppo, condividere idee con sviluppatori affini e partecipare a hackathon, concorsi, roadshow ed eventi locali.