Come abbiamo creato un'app iOS per girare un video 3D (caso di studio)
Pubblicato: 2022-03-10Il nostro team è stato anche attratto dalle riprese in 3D. Abbiamo studiato a fondo le caratteristiche dell'apparato visivo umano ei dettagli tecnici della fotografia stereoscopica. Quindi, abbiamo deciso di sviluppare un'app iOS per girare video 3D e caricare i video su YouTube. L'idea alla base dell'app era quella di facilitare le riprese di video 3D montando due iPhone su una cornice speciale e ce l'abbiamo fatta! È così che è apparsa l'app Stereo Video Recorder.
Abbiamo deciso di condividere con i lettori di Smashing Magazine la nostra indagine sulla creazione di video 3D. Vorremmo anche parlare delle caratteristiche tecniche di creazione dell'applicazione e fornire disegni dettagliati del framework utilizzato per montare gli iPhone.
Come tutto cominciò
Nel nostro studio delle funzionalità video 3D, abbiamo iniziato con esperimenti sulla realtà virtuale. Abbiamo costruito una cornice di cartone e attraverso di essa abbiamo guardato al mondo tramite due iPhone in formato 3D. I dettagli della nostra ricerca possono essere trovati sul nostro blog. Andremo oltre qui.

Continuando questa ricerca, abbiamo deciso di creare un altro prototipo dell'applicazione, quello che permette di registrare video 3D stereoscopici e caricarlo su YouTube.
La stereoscopia è un modo per creare l'illusione della profondità in un'immagine piatta. La registrazione stereo è nota dal 19° secolo. Nella creazione di video 3D stereoscopici, simuliamo la visione binoculare. A causa della distanza tra le pupille, è molto più facile per il cervello umano analizzare il volume dello spazio circostante, la distanza dagli oggetti. La stereoscopia binoculare è ampiamente utilizzata nell'industria cinematografica. Difficilmente puoi imbatterti in un capolavoro di Hollywood che non fa uso del formato stereo.
Lo scopo del nostro prototipo di app era girare video contemporaneamente con due diverse fotocamere iPhone e quindi unire i file video risultanti in uno per la visualizzazione utilizzando qualsiasi occhiali 3D, ad esempio Google Cardboard, un casco per realtà virtuale o una TV 3D.
Immagine stereo e la nostra percezione di un'immagine 3D
Consentitemi di approfondire le immagini stereo e la nostra percezione delle immagini 3D. In effetti, la stereografia funziona come i nostri occhi, che si sono evoluti nel tempo. Poiché c'è una distanza tra i nostri due occhi, le immagini proiettate sulla retina degli occhi sinistro e destro sono leggermente diverse. Questa differenza è chiamata parallasse (un effetto in cui la posizione di un oggetto sembra essere diversa se vista da due posizioni diverse). Tuttavia, l'osservatore non vede due immagini separate. L'apparato visivo forma una percezione di una singola immagine spaziale e può percepire volume, distanza, ecc. È importante capire che l'apparato visivo rileva, elabora e proietta immagini spaziali e oggetti situati nello spazio in determinati punti.

La comprensione di come funziona l'apparato visivo umano consente un'indagine approfondita su come il materiale visivo deve essere preparato e riprodotto in modo che lo spettatore possa avere il senso di un'immagine 3D completa.
Diamo un'occhiata a tutto in ordine.
Come ogni dispositivo che opera secondo le leggi della fisica, l'apparato visivo umano ha le sue caratteristiche e i suoi limiti.
Prima di tutto, dobbiamo capire che, in termini di processo visivo, focalizziamo il nostro sguardo su un solo punto, chiamato punto di vista (POV). In effetti, POV è il punto in cui gli occhi sono focalizzati e attraverso il quale passano le linee di vista sinistra e destra. A seconda della distanza dal POV, l'angolo tra le linee di vista dell'occhio sinistro e destro sarà diverso. Gli occhi sono diretti in modo tale che le linee convergano al punto di vista. Queste linee sono parallele quando la persona guarda in lontananza, o, in altre parole, nell'infinito.

Le immagini proiettate sulla retina differiscono leggermente a causa del piccolo spostamento degli occhi. Questo di solito si manifesta sotto forma di spostamento dell'immagine che la persona sta guardando: a sinistra per l'occhio sinistro ea destra per l'occhio destro. Questo fenomeno, già menzionato, è chiamato parallasse.
Tuttavia, l'apparato visivo può percepire il volume solo a determinati valori di parallasse. A seconda della distanza dall'oggetto, la parallasse sarà diversa per gli oggetti vicini e lontani. Può essere che la parallasse ecceda il valore del limite e la persona vedrà non un oggetto 3D, ma un'immagine biforcata. Un esperimento che prevede il passaggio della visuale da oggetti vicini a oggetti lontani potrebbe offrire una migliore comprensione dei dettagli di questo.

Come si può vedere dalla figura, se si fissa la vista in primo piano, gli oggetti sullo sfondo inizieranno a biforcarsi. Se correggi la vista sullo sfondo, l'immagine in primo piano si biforcherà. Questa caratteristica dell'apparato visivo gioca un ruolo essenziale nelle caratteristiche delle riprese 3D e nella riproduzione di immagini stereo.
Nella vita ordinaria, non notiamo questo effetto perché siamo abituati a seguire un solo oggetto, e quando si sposta la visuale, la vista si adatta rapidamente alle nuove condizioni. Tuttavia, quando proviamo a proiettare artificialmente un'immagine volumetrica utilizzando due immagini con una parallasse predeterminata, l'apparato visivo non può più adattarsi così rapidamente come fa di solito. Affinché l'apparato visivo funzioni in modalità normale, l'apparecchiatura video 3D deve essere adattata agli occhi dello spettatore, analizzando dove si trova il punto di osservazione. Questa apparecchiatura dovrebbe anche creare immagini stereo con il parallasse richiesto.
Tuttavia, implementarlo è tecnicamente molto difficile. Di solito viene utilizzato uno schema semplice con parametri di ripresa geometrici e tecnici fissi. Questi parametri saranno diversi per le viste ravvicinate e distanti. Per parametri geometrici e tecnici si intende il campo visivo delle telecamere, lo spostamento orizzontale delle telecamere dal centro, l'angolo di rotazione delle telecamere e il punto di convergenza delle telecamere.
Pertanto, non saresti in grado di riprendere oggetti ugualmente vicini e distanti se disponi di un solo set di attrezzature di ripresa (due fotocamere e una cornice). Più precisamente si potrebbe girare, ma sarebbe estremamente scomodo per una persona guardare un video in cui, ad esempio, l'attrezzatura è regolata per una vista distante ma riprende una vista ravvicinata, o viceversa, con l'effetto stereo debolmente espresso sullo sfondo.

Dall'idea alla pratica: come montare gli iPhone
Torniamo alla nostra idea. Abbiamo deciso di sviluppare un prototipo di app mobile in grado di registrare video 3D stereo. Considerando tutto quanto sopra, abbiamo dovuto valutare quanto segue:
- la possibilità di base di scattare un'immagine stereo utilizzando due iPhone;
- la gamma effettiva di distanze che garantirebbe una percezione stereo confortevole e di alta qualità, tenendo conto delle normali condizioni di utilizzo di una telecamera.
Quando ci siamo avvicinati molto alla creazione di un prototipo, la prima cosa che abbiamo fatto è stata valutare il potenziale della fotocamera dell'iPhone per il nostro compito. Siamo rimasti piacevolmente sorpresi di scoprire che l'iPhone offre un angolo di campo accettabile per uno scatto ravvicinato. Come già accennato, non basta affiancare due fotocamere per ottenere un buon effetto stereo. Di solito, l'algoritmo per calcolare le riprese inizia con l'impostazione dei parametri del piano, ovvero le distanze dagli oggetti più vicini e più lontani e le distanze tra gli oggetti nel piano dell'inquadratura. I parametri di installazione vengono quindi selezionati in base a questi dati.
Un calcolo semplificato della distanza tra le telecamere può essere eseguito in base a questa formula:

-
Parallax<sub>fore</sub>
imposta lo spostamento massimo dell'immagine in primo piano quando i fotogrammi della coppia stereo si sovrappongono. -
L<sub>fore</sub>
= distanza dall'oggetto in primo piano -
f
= lunghezza focale dell'obiettivo -
L
= distanza dal punto focale dell'obiettivo -
M
= zoom fotogramma
Nel nostro caso, abbiamo dovuto modificare leggermente l'algoritmo, perché stavamo utilizzando una fotocamera standard e, di conseguenza, la lunghezza focale dell'obiettivo è impostata in modo rigido. Il nostro compito era quello di ottenere un effetto stereo confortevole e una gamma accettabile di distanze dall'oggetto da riprendere. Quindi, abbiamo dovuto eseguire diversi esperimenti, disponendo entrambe le telecamere l'una rispetto all'altra, per trovare la distanza richiesta tra i loro centri (la distanza tra i centri delle telecamere) e gli angoli di convergenza.
Per semplificare il compito nel processo di prototipazione, abbiamo deciso di non ruotare le telecamere per ottenere la convergenza a un certo punto, ma di utilizzare la convergenza all'infinito. Si è scoperto che, per ottenere il miglior risultato, è necessario regolare con precisione l'angolo di convergenza delle telecamere. E se teniamo conto del fatto che avevamo in programma di realizzare una cornice di cartone da utilizzare per montare gli iPhone, allora la regolazione dell'angolo di convergenza delle fotocamere diventa praticamente impossibile. Quindi, dopo una serie di esperimenti, siamo arrivati a un compromesso, ottenendo l'equilibrio ottimale tra la distanza tra le telecamere per consentire le riprese nella zona vicina e ottenere un buon effetto stereo.


Il nostro obiettivo era sviluppare il telaio più semplice per iPhone, uno che fosse facile da produrre, comodo da usare, fornisse i parametri di scatto necessari e avesse la rigidità richiesta. Abbiamo quindi scelto un modello 3D che può essere realizzato in materiale plastico o espanso (polistirene, in questo caso) mediante fresatura o stampa 3D. In futuro, ovviamente, vorremo sviluppare un dispositivo più semplice da realizzare, ad esempio un dispositivo di cartone.
L'unica limitazione hardware al momento è che è necessario utilizzare gli stessi dispositivi, con fotocamere assolutamente identiche.


Di seguito sono riportati i disegni dettagliati del telaio per diverse versioni di dispositivi con dimensioni dello schermo di 4,0, 4,7 e 5,5 pollici, adatti per iPhone 6+ e 6S+, per 6, 6S e 7 e per 5 e 5S.



App per riprese video 3D stereoscopiche
L'app funziona contemporaneamente su due dispositivi, ma lo scatto è controllato solo da uno dei dispositivi, quindi non è necessario controllare il processo di scatto in modo speciale.
In forma semplificata, lo scenario di utilizzo standard per l'applicazione è costituito dalla seguente sequenza di azioni:
- Monta i due iPhone sul telaio.
- Esegui l'app sui due dispositivi.
- Determina quale dei dispositivi fungerà da master e quale da slave. Avvia la registrazione dal dispositivo principale. (Non eseguire ulteriori azioni sul secondo dispositivo.)
- Dopo la registrazione, attendi la sincronizzazione dei frammenti registrati e il rendering di un video pronto per il caricamento su YouTube.
- Carica il video su YouTube in qualsiasi momento dopo la sincronizzazione, quindi guardalo sulla tua TV 3D o tramite occhiali per realtà virtuale.
Vale la pena notare che il lavoro principale si svolge su uno solo degli iPhone, il dispositivo master. È su questo iPhone che iniziamo le riprese. Il video viene elaborato e caricato su YouTube anche sul dispositivo master. Ci vuole del tempo per preparare il video per il caricamento su YouTube. Ciò dipenderà dalle prestazioni dei dispositivi utilizzati e dalla qualità della connessione tra i dispositivi master e slave.
Il secondo iPhone, che funge da slave, viene utilizzato solo come seconda fotocamera. Al termine delle riprese, invia il frammento video al dispositivo master.

Di seguito sono riportati gli screenshot della schermata principale dell'app, che mostra la galleria dei video girati. I video possono essere visualizzati sia tramite un player incorporato che su YouTube. Qui puoi anche vedere come vengono assegnati ulteriori ruoli di ripresa (master e slave) ai dispositivi.


Ostacoli tecnici
Desincronizzazione
Tutte le manipolazioni con i frammenti video vengono eseguite con l'aiuto del potente framework AVFoundation, utilizzando, se possibile, l'accelerazione hardware.
Per caricare su YouTube, i frammenti del video vengono incollati fotogramma per fotogramma, fianco a fianco. Ovviamente, ogni fotogramma sinistro dovrebbe corrispondere al fotogramma destro in base al tempo. Con il minimo ritardo nei fotogrammi di una delle sorgenti, l'effetto stereo andrà perso o distorto (soprattutto nelle scene dinamiche) e l'immagine apparirà raddoppiata.
Per risolvere questo problema, abbiamo iniziato a registrare video sui dispositivi contemporaneamente. In effetti, la registrazione non inizia subito dopo aver premuto il pulsante di avvio, ma dopo un breve ritardo entro il quale si attiva un determinato algoritmo, molto simile a come il protocollo PTP (Precision Time Protocol) misura lo skew dell'orologio. Quindi, siamo stati in grado di avviare la registrazione video con una divergenza da 30 a 50 millisecondi, che, nella peggiore delle ipotesi, corrisponde a circa 1 frame di desincronizzazione.
Bug nella connettività multipeer iOS
Abbiamo utilizzato la libreria iOS nativa Multipeer Connectivity per stabilire la comunicazione tra i due dispositivi. Questa libreria stabilisce una connessione diretta tra dispositivi sulla stessa rete Wi-Fi, nonché tramite Bluetooth o utilizzando qualcosa di simile a Wi-Fi Direct su iPhone. In questo modo è possibile riprendere e sincronizzare frammenti video anche in un campo aperto, senza una rete Internet wireless o mobile. Ma è necessaria una connessione Internet per inviare il video a YouTube dal dispositivo principale.
Il motivo principale per cui abbiamo deciso di utilizzare questa libreria è che stabilisce la comunicazione tra i due dispositivi quando non sono collegati alla stessa rete. Ovviamente, in condizioni di ripresa 3D stereo scadenti, il massimo che ci si può aspettare è una connessione 3G. Per girare un video 3D, è fondamentale essere in grado, con un ritardo minimo, di trasmettere pacchetti di dati per la sincronizzazione. Inoltre, se non ci fosse la connessione a Internet, non saremmo in grado di girare. Pertanto, la libreria Multipeer Connectivity è diventata un'ancora di salvezza. Inoltre, è una soluzione nativa per la piattaforma Apple.
Tuttavia, vale la pena notare che non tutto è andato esattamente come volevamo. Durante l'integrazione con Multipeer Connectivity, sono stati rilevati molti bug e l'intera libreria era estremamente instabile nel suo funzionamento. La maggior parte delle caratteristiche dichiarate erano presenti solo in teoria. Quando i dispositivi operano all'interno dello stesso segmento di rete, Multipeer Connectivity funziona in modo più efficace; la connessione è stabilita per un periodo di tempo accettabile; viene raggiunta la dispersione ammissibile del tempo di consegna del messaggio.
Tuttavia, se abbiamo, relativamente parlando, scarse condizioni di ripresa 3D stereo, o, diciamo, ci sono molti dispositivi mobili in un unico posto, stabilire una connessione diventa come una lotteria. Si ha la sensazione che la libreria Apple non sia ancora completamente sviluppata e sia ancora piuttosto grezza.
Collegamento dei dispositivi
Abbiamo implementato il protocollo di collegamento automatico nella prima versione del nostro prototipo. Il protocollo stesso consiste in un insieme di regole in base alle quali un coordinatore viene scelto tra i dispositivi peer - in base a una maggioranza - al momento iniziale.
Successivamente, il coordinatore raccoglie periodicamente le statistiche di telemetria da ciascun dispositivo passando un indicatore speciale in un cerchio tra i dispositivi slave. Sulla base di questi dati di telemetria, vengono confrontate coppie di dispositivi montati sul telaio. Dopo che una coppia è stata identificata, un master e uno slave vengono assegnati alla coppia e viene stabilita una connessione diretta tra di loro. A questo punto, il collegamento è completo.
Ricerche automatiche e indipendenti
Quando necessario, sono state eseguite ricerche automatiche e indipendenti (basate su identificatori univoci) per i dispositivi che avevano partecipato alle sessioni precedenti per la sincronizzazione (ottenimento di tracce video registrate nel caso in cui i dati non fossero caricati sul dispositivo master al momento della registrazione). Le letture dell'accelerometro sono state utilizzate principalmente per identificare quali dispositivi corrispondevano alla coppia. Il coordinatore ha calcolato la correlazione tra potenziali coppie. Se la correlazione superava una certa soglia, i dispositivi venivano considerati potenziali coppie e successivamente venivano testate le caratteristiche secondarie.
Poiché non siamo riusciti a superare completamente i problemi sopra menzionati con la connettività multipeer, abbiamo deciso di abbandonare temporaneamente il collegamento automatico, perché ciò avrebbe influito negativamente sull'utente medio e rovinato l'esperienza dell'utente.
Con cosa siamo finiti
Alla fine, abbiamo ottenuto un'app molto interessante e di alta qualità. Guardare un video registrato tramite questa app ti dà la stessa sensazione che provi guardando film in 3D a teatro.
Naturalmente, l'occhio umano funziona in modo leggermente diverso: le sue linee convergono in un certo punto dello spazio e dipendono dal punto di messa a fuoco. Nel nostro caso, gli occhi guardano sempre in parallelo. Tuttavia, anche con questo fatto, l'effetto stereo è molto pronunciato: il volume dello spazio si percepisce in primo piano, al centro e sullo sfondo più o meno come sullo schermo.
Hai bisogno di occhiali VR o TV 3D per visualizzare correttamente questo video.
Quindi, abbiamo reso possibile utilizzare l'app Stereo Video Recorder per girare video stereo 3D da soli per le tue esigenze aziendali o semplicemente per divertimento!
Lavorando su bug e piani futuri
Il nostro obiettivo è stato raggiunto: abbiamo studiato i criteri per la creazione di video 3D e abbiamo creato un'app che consente a qualsiasi utente di creare un video stereo. Ma non è tutto così facile come sembra. Dobbiamo lavorare su alcune cose. Abbiamo avuto molti problemi con la libreria Multipeer Connectivity. Vogliamo sostituirlo o trovare una soluzione alternativa in modo che l'app funzioni bene con un accesso a Internet limitato.
Abbiamo anche bisogno di:
- implementare la messa a fuoco sincrona e la misurazione dell'esposizione sui due dispositivi, nonché implementare la registrazione di tracce audio stereo;
- sviluppare una cornice più pragmatica per i dispositivi;
- integrare il meccanismo di abbinamento automatico dei dispositivi;
- fornire supporto per diverse opzioni del dispositivo ed essere in grado di gestire diverse risoluzioni video (al momento, possiamo girare video solo con le stesse versioni di iPhone, ad esempio, un iPhone 5S può essere accoppiato solo con un altro iPhone 5S);
- creare una versione Android dell'app.
La nostra app Stereo Video Recorder è già nell'App Store. Puoi usarlo per creare video 3D. Siamo sicuri che la tecnologia continuerà a svilupparsi e che alla fine ci saranno molte più soluzioni per la creazione di video stereoscopici. Cercheremo di stare al passo con i tempi.
Si prega di lasciare i vostri commenti e idee sull'utilizzo di questa app. Saremmo grati per la tua opinione e feedback.
Ulteriori letture su SmashingMag:
- Quattro modi per creare un'applicazione mobile, parte 1: iOS nativo
- Prototipazione di app iOS e Android con Sketch (con un omaggio)
- Il futuro del video nel web design
- Le basi dell'automazione dei test per app, giochi e Web mobile