Jak zbudowaliśmy aplikację na iOS do nagrywania wideo 3D (studium przypadku)

Opublikowany: 2022-03-10
Szybkie podsumowanie ↬ Niedługo po tym, jak Hollywood wypuściło swoje pierwsze filmy 3D, format filmowy szybko zyskał ogromną popularność na całym świecie. Dzięki rozwojowi technologii nagrywania wideo każdy użytkownik może teraz samodzielnie nagrać wideo. Możesz nagrać stereofonicznie niezapomniane wydarzenia ze swojego życia lub stworzyć wspaniały materiał dla swojej firmy.

Nasz zespół również zainteresował się filmowaniem 3D. Dokładnie przestudiowaliśmy cechy aparatu wzrokowego człowieka oraz szczegóły techniczne fotografii stereoskopowej. Następnie postanowiliśmy stworzyć aplikację na iOS do nagrywania filmów 3D i przesyłania ich do YouTube. Ideą aplikacji było ułatwienie kręcenia filmów 3D poprzez zamontowanie dwóch iPhone'ów na specjalnej ramie — i udało się! Tak pojawiła się aplikacja Stereo Video Recorder.

Postanowiliśmy podzielić się z czytelnikami Smashing Magazine naszym dochodzeniem w sprawie stworzenia wideo 3D. Chcielibyśmy również porozmawiać o technicznych cechach tworzenia aplikacji oraz przedstawić szczegółowe rysunki szkieletu używanego do montażu iPhone'ów.

Jak to się wszystko zaczeło

W naszym badaniu funkcji wideo 3D rozpoczęliśmy od eksperymentów z wirtualną rzeczywistością. Skonstruowaliśmy tekturową ramkę i spojrzeliśmy przez nią na świat za pomocą dwóch iPhone'ów w formacie 3D. Szczegóły naszych badań można znaleźć na naszym blogu. Pójdziemy dalej tutaj.

Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.
Karton wykonany przez nas do badania rzeczywistości rozszerzonej (Zobacz w powiększeniu)

Kontynuując te badania, postanowiliśmy stworzyć kolejny prototyp aplikacji, pozwalający na nagrywanie stereoskopowego wideo 3D i zamieszczenie go na YouTube.

Stereoskopia to sposób na stworzenie iluzji głębi w płaskim obrazie. Nagrywanie stereo znane jest od XIX wieku. Tworząc stereoskopowe wideo 3D, symulujemy widzenie obuoczne. Ze względu na odległość między źrenicami mózgowi znacznie łatwiej jest analizować objętość otaczającej przestrzeni — odległość do obiektów. Stereoskopia lornetkowa jest szeroko stosowana w przemyśle filmowym. Trudno znaleźć arcydzieło Hollywood, które nie wykorzystuje formatu stereo.

Celem naszego prototypu aplikacji było jednoczesne nagrywanie wideo dwoma różnymi aparatami iPhone'a, a następnie połączenie powstałych plików wideo w jeden, który można oglądać za pomocą dowolnych okularów 3D — na przykład Google Cardboard, kasku do wirtualnej rzeczywistości lub telewizora 3D.

Więcej po skoku! Kontynuuj czytanie poniżej ↓

Obraz stereo i nasze postrzeganie obrazu 3D

Pozwólcie, że omówię obrazy stereo i nasze postrzeganie obrazów 3D. W rzeczywistości stereografia działa jak nasze oczy, które ewoluowały z biegiem czasu. Ponieważ między naszymi oczami jest odległość, obrazy wyświetlane na siatkówce lewego i prawego oka są nieco inne. Ta różnica nazywana jest paralaksą (efekt, w którym pozycja obiektu wydaje się być inna, patrząc z dwóch różnych pozycji). Jednak obserwator nie widzi dwóch oddzielnych obrazów. Aparat wzrokowy tworzy percepcję pojedynczego obrazu przestrzennego i może wyczuwać objętość, odległość itp. Ważne jest, aby zrozumieć, że aparat wzrokowy wykrywa, przetwarza i wyświetla obrazy przestrzenne i obiekty znajdujące się w przestrzeni w określonych punktach.

Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.
Aparat wzrokowy tworzy percepcję objętości w oparciu o paralaksę. (Wyświetl dużą wersję)

Zrozumienie działania aparatu wzrokowego człowieka pozwala na dokładne zbadanie, w jaki sposób należy przygotować i odtworzyć materiał wizualny, aby widz mógł mieć wrażenie pełnego obrazu 3D.

Spójrzmy na wszystko w porządku.

Jak każde urządzenie działające zgodnie z prawami fizyki, ludzki aparat wzrokowy ma swoje własne cechy i ograniczenia.

Przede wszystkim musimy zrozumieć, że w ramach naszego procesu wizualnego skupiamy wzrok tylko na jednym punkcie, zwanym punktem widzenia (POV). W rzeczywistości POV to punkt, w którym skupiają się oczy i przez który przechodzą lewa i prawa linia wzroku. W zależności od odległości od POV kąt między liniami wzroku lewego i prawego oka będzie różny. Oczy skierowane są tak, że linie zbiegają się w punkcie widzenia. Linie te są równoległe, gdy osoba patrzy w dal, czyli w nieskończoność.

Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.
Oczy nie zawsze patrzą równolegle – w zależności od odległości od obiektu (punkt zbieżności linii). (Wyświetl dużą wersję)

Obrazy rzutowane na siatkówkę różnią się nieznacznie ze względu na niewielkie przemieszczenie oczu. Zwykle objawia się to w postaci przesunięcia obrazu, na który patrzy osoba — w lewo dla lewego oka i w prawo dla prawego oka. To zjawisko, o którym już wspomniano, nazywa się paralaksą.

Jednak aparat wzrokowy może odbierać objętość tylko przy pewnych wartościach paralaksy. W zależności od odległości od obiektu paralaksa będzie różna dla bliskich i odległych obiektów. Może się zdarzyć, że paralaksa przekroczy wartość graniczną i osoba zobaczy nie obiekt 3D, ale rozwidlony obraz. Eksperyment polegający na zmianie widoku z bliskich na dalekie obiekty mógłby zaoferować lepsze zrozumienie specyfiki tego zjawiska.

Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.
Postrzeganie głośności jest tylko iluzją naszego mózgu. W rzeczywistości istnieją pewne skutki uboczne. (Wyświetl dużą wersję)

Jak widać na rysunku, jeśli poprawisz swój widok na pierwszym planie, obiekty tła zaczną się rozgałęziać. Jeśli poprawisz widok na tle, obraz pierwszego planu zostanie rozwidlony. Ta cecha aparatu wzrokowego odgrywa zasadniczą rolę w cechach fotografowania 3D i reprodukcji obrazów stereo.

W zwykłym życiu nie zauważamy tego efektu, ponieważ jesteśmy przyzwyczajeni do podążania tylko za jednym obiektem, a kiedy zmieniasz widok, wzrok szybko dostosowuje się do nowych warunków. Kiedy jednak próbujemy sztucznie rzutować obraz wolumetryczny za pomocą dwóch obrazów o określonej z góry paralaksie, aparat wzrokowy nie może się już tak szybko przystosować, jak to zwykle robi. Aby aparat wizyjny działał w trybie normalnym, sprzęt wideo 3D musi być dostosowany do oczu widza, analizując, gdzie znajduje się punkt obserwacyjny. Sprzęt ten powinien również tworzyć obrazy stereo z wymaganą paralaksą.

Jednak wdrożenie tego jest bardzo trudne technicznie. Zwykle stosuje się prosty schemat ze stałymi geometrycznymi i technicznymi parametrami strzelania. Te parametry będą różne dla widoków z bliska i odległych. Przez parametry geometryczne i techniczne rozumiemy pole widzenia kamer, poziome przesunięcie kamer od środka, kąt obrotu kamer oraz punkt zbieżności kamer.

Dlatego nie mógłbyś fotografować równie bliskich i odległych obiektów, gdybyś miał tylko jeden zestaw sprzętu strzeleckiego (dwa aparaty i ramkę). Dokładniej, można by kręcić, ale bardzo niewygodne byłoby oglądanie przez osobę filmu, w którym np. sprzęt jest przystosowany do widoku z daleka, ale kręci widok z bliska lub odwrotnie, z efektem stereo słabo wyrażone w tle.

Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.
System strzelania musi być skonfigurowany tak, aby odpowiadał parametrom ludzkiego układu wzrokowego w określonych warunkach obserwacji. (Wyświetl dużą wersję)

Od pomysłu do praktyki: jak zamontować iPhone'y

Wróćmy do naszego pomysłu. Postanowiliśmy opracować prototyp aplikacji mobilnej, która może nagrywać wideo w stereo 3D. Biorąc pod uwagę wszystkie powyższe, musieliśmy ocenić, co następuje:

  • podstawowa możliwość wykonania zdjęcia stereofonicznego za pomocą dwóch iPhone'ów;
  • efektywny zakres odległości, który zapewni wysokiej jakości i komfortową percepcję stereo, przy uwzględnieniu zwykłych warunków użytkowania aparatu.

Kiedy byliśmy bardzo blisko stworzenia prototypu, pierwszą rzeczą, którą zrobiliśmy, była ocena potencjału aparatu iPhone'a do naszego zadania. Byliśmy mile zaskoczeni, gdy odkryliśmy, że iPhone zapewnia akceptowalny kąt widzenia do zbliżenia. Jak już wspomniano, samo ustawienie dwóch kamer obok siebie nie wystarczy, aby uzyskać dobry efekt stereo. Zazwyczaj algorytm obliczania strzelania rozpoczyna się od ustawienia parametrów planu — czyli odległości do najbliższych i najdalszych obiektów oraz odległości między obiektami w płaszczyźnie kadru. Na podstawie tych danych dobierane są następnie parametry instalacji.

Uproszczone obliczenie odległości między kamerami można wykonać na podstawie tego wzoru:

Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.
(Wyświetl dużą wersję)
  • Parallax<sub>fore</sub> ustawia maksymalne przesunięcie obrazu pierwszego planu, gdy klatki stereopary nakładają się na siebie.
  • L<sub>fore</sub> = odległość od obiektu na pierwszym planie
  • f = ogniskowa obiektywu
  • L = odległość do ogniska soczewki
  • M = powiększenie ramki

W naszym przypadku musieliśmy nieco zmienić algorytm, ponieważ korzystaliśmy ze standardowego aparatu i odpowiednio ogniskowa obiektywu jest ustawiona na sztywno. Naszym zadaniem było uzyskanie komfortowego efektu stereo i akceptowalnego zakresu odległości do strzelonego obiektu. Musieliśmy więc przeprowadzić kilka eksperymentów — ustawiając obie kamery względem siebie — w celu znalezienia wymaganej odległości między ich środkami (odległość między środkami kamer) i kątów zbieżności.

Aby uprościć zadanie w procesie prototypowania, postanowiliśmy nie obracać kamer, aby osiągnąć zbieżność w określonym punkcie, ale użyć zbieżności w nieskończoności. Okazało się, że do uzyskania najlepszego wyniku konieczne jest dokładne wyregulowanie kąta zbieżności kamer. A jeśli weźmiemy pod uwagę, że planowaliśmy zrobić tekturową ramkę do montażu iPhone’ów, to regulacja kąta zbieżności aparatów staje się praktycznie niemożliwa. Tak więc po wielu eksperymentach doszliśmy do kompromisu, uzyskując optymalną równowagę między odległością między kamerami, aby umożliwić fotografowanie w bliskiej strefie, a uzyskaniem dobrego efektu stereo.

Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.
Aby uzyskać dobry efekt stereo i zminimalizować niekorzystne efekty fizjologiczne, odległość między telefonami musi być ściśle ustalona. (Wyświetl dużą wersję)

Naszym celem było opracowanie najprostszej ramki do iPhone'ów, łatwej w produkcji, wygodnej w obsłudze, zapewniającej niezbędne parametry strzelania i posiadającej wymaganą sztywność. Wybraliśmy więc model 3D, który może być wykonany z tworzywa sztucznego lub tworzywa piankowego (w tym przypadku styropianu) poprzez frezowanie lub druk 3D. W przyszłości będziemy oczywiście chcieli opracować urządzenie, które będzie prostsze w wykonaniu — na przykład urządzenie kartonowe.

Jedynym ograniczeniem sprzętowym w tej chwili jest to, że musisz używać tych samych urządzeń, z absolutnie identycznymi kamerami.

Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.
Najprostsza wersja ramki do nagrywania wideo 3D (Zobacz w dużej wersji)

Poniżej znajdują się szczegółowe rysunki ramki dla różnych wersji urządzeń z ekranami o przekątnej 4,0, 4,7 i 5,5 cala — odpowiednich dla iPhone'a 6+ i 6S+, dla 6, 6S i 7 oraz dla 5 i 5S.

Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.
Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.
Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.
Rysunki do własnej domowej ramki

Aplikacja do stereoskopowego nagrywania wideo 3D

Aplikacja działa jednocześnie na dwóch urządzeniach, ale strzelanie jest sterowane tylko z jednego z nich, więc nie ma potrzeby kontrolowania procesu strzelania w jakiś specjalny sposób.

W uproszczonej formie standardowy scenariusz użycia aplikacji składa się z następującej sekwencji działań:

  1. Zamontuj dwa iPhone'y do ramy.
  2. Uruchom aplikację na dwóch urządzeniach.
  3. Określ, które z urządzeń będzie pełnić rolę urządzenia nadrzędnego, a które podrzędnego. Rozpocznij nagrywanie z urządzenia głównego. (Nie podejmuj żadnych dodatkowych działań na drugim urządzeniu.)
  4. Po nagraniu poczekaj na synchronizację nagranych fragmentów i renderowanie wideo gotowego do wgrania na YouTube.
  5. Prześlij film do YouTube w dowolnym momencie po synchronizacji, a następnie obejrzyj go na telewizorze 3D lub za pomocą okularów wirtualnej rzeczywistości.

Warto zauważyć, że główna praca odbywa się tylko na jednym z iPhone'ów, urządzeniu nadrzędnym. To na tym iPhonie rozpoczynamy strzelanie. Film jest przetwarzany i przesyłany do YouTube również na urządzeniu głównym. Przygotowanie filmu do przesłania do YouTube zajmuje trochę czasu. Będzie to zależeć od wydajności używanych urządzeń i jakości połączenia między urządzeniami nadrzędnymi i podrzędnymi.

Drugi iPhone, działając jako slave, służy jedynie jako drugi aparat. Pod koniec kręcenia wysyła fragment wideo do urządzenia głównego.

Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.
Proces nagrywania wideo 3D wygląda mniej więcej tak. (Wyświetl dużą wersję)

Poniżej znajdują się zrzuty ekranu głównego ekranu aplikacji, przedstawiające galerię nakręconych filmów. Filmy można oglądać zarówno za pomocą wbudowanego odtwarzacza, jak i na YouTube. Tutaj możesz również zobaczyć, jak kolejne role strzeleckie (master i slave) są przypisywane do urządzeń.

Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.
Jak nagrać wideo 3D za pomocą dwóch iPhone'ów.
Interfejs użytkownika aplikacji

Przeszkody techniczne

Desynchronizacja

Wszystkie manipulacje fragmentami wideo są wykonywane za pomocą potężnego frameworka AVFoundation, przy użyciu, jeśli to możliwe, akceleracji sprzętowej.

Aby przesłać na YouTube, fragmenty wideo są sklejane klatka po klatce, obok siebie. Oczywiście każda lewa klatka powinna pasować do prawej klatki w czasie. Przy najmniejszym opóźnieniu klatek jednego ze źródeł efekt stereo zostanie utracony lub zniekształcony (szczególnie w scenach dynamicznych), a obraz będzie wydawał się podwojony.

Aby rozwiązać ten problem, w tym samym czasie rozpoczęliśmy nagrywanie wideo na urządzeniach. W rzeczywistości nagranie rozpoczyna się nie natychmiast po naciśnięciu przycisku Start, ale po krótkim opóźnieniu, w którym aktywuje się pewien algorytm — bardzo podobny do tego, jak precyzyjny protokół czasu (PTP) mierzy przesunięcie zegara. Tak więc byliśmy w stanie zainicjować nagrywanie wideo z rozbieżnością od 30 do 50 milisekund, co w najgorszym przypadku odpowiada około 1 klatce desynchronizacji.

Błędy w łączności wieloosobowej iOS

Wykorzystaliśmy natywną bibliotekę iOS Multipeer Connectivity do nawiązania komunikacji między dwoma urządzeniami. Ta biblioteka nawiązuje bezpośrednie połączenie między urządzeniami w tej samej sieci Wi-Fi, a także przez Bluetooth lub używając czegoś podobnego do Wi-Fi Direct na iPhonie. W ten sposób możesz nagrywać i synchronizować fragmenty wideo nawet w otwartym terenie, bez bezprzewodowej lub mobilnej sieci internetowej. Ale do wysłania wideo do YouTube z urządzenia głównego potrzebne jest połączenie z Internetem.

Głównym powodem, dla którego zdecydowaliśmy się użyć tej biblioteki, jest to, że nawiązuje ona komunikację między dwoma urządzeniami, gdy nie są podłączone do tej samej sieci. Oczywiście w kiepskich warunkach filmowania w stereo 3D najbardziej można się spodziewać połączenia 3G. Aby nagrać wideo 3D, niezbędna jest możliwość – z minimalnym opóźnieniem – przesyłania pakietów danych w celu synchronizacji. Ponadto, gdyby nie było połączenia z Internetem, nie bylibyśmy w stanie strzelać. Dlatego biblioteka Multipeer Connectivity stała się kołem ratunkowym. Poza tym jest to rozwiązanie natywne dla platformy Apple.

Warto jednak zauważyć, że nie wszystko poszło dokładnie tak, jak chcieliśmy. Podczas integracji z Multipeer Connectivity wykryto wiele błędów, a cała biblioteka była wyjątkowo niestabilna w działaniu. Większość deklarowanych cech istniała tylko teoretycznie. Gdy urządzenia działają w tym samym segmencie sieci, łączność Multipeer działa bardziej efektywnie; połączenie jest nawiązywane na akceptowalny czas; osiągnięto dopuszczalne rozproszenie czasu dostarczenia wiadomości.

Jeśli jednak mamy relatywnie słabe warunki filmowania w stereo 3D lub powiedzmy, że w jednym miejscu jest wiele urządzeń mobilnych, to nawiązanie połączenia staje się jak loteria. Można odnieść wrażenie, że biblioteka Apple nie jest jeszcze w pełni rozwinięta i wciąż jest dość surowa.

Łączenie urządzeń

Wdrożyliśmy protokół automatycznego łączenia we wczesnej wersji naszego prototypu. Sam protokół składa się z zestawu reguł, według których koordynator jest wybierany spośród urządzeń równorzędnych – w oparciu o większość – w początkowym punkcie czasowym.

Następnie koordynator okresowo zbiera statystyki telemetryczne z każdego urządzenia, przepuszczając specjalny znacznik w okręgu między urządzeniami podrzędnymi. Na podstawie tych danych telemetrycznych porównywane są pary urządzeń zamontowanych na ramie. Po zidentyfikowaniu pary, master i slave są przypisywani do pary i nawiązywane jest bezpośrednie połączenie między nimi. Na tym etapie łączenie jest zakończone.

Wyszukiwanie automatyczne i niezależne

W razie potrzeby przeprowadzano automatyczne i niezależne wyszukiwania (na podstawie unikalnych identyfikatorów) urządzeń, które uczestniczyły w poprzednich sesjach w celu synchronizacji (uzyskania nagranych ścieżek wideo w przypadku, gdy dane nie zostały załadowane do urządzenia nadrzędnego w momencie rejestracji). Odczyty akcelerometru były używane głównie do identyfikacji urządzeń odpowiadających parze. Koordynator obliczył korelację między potencjalnymi parami. Jeśli korelacja przekroczyła pewien próg, urządzenia uznawano za potencjalne pary, a następnie testowano cechy drugorzędne.

Ponieważ nie mogliśmy w pełni przezwyciężyć wyżej wymienionych problemów z Multipeer Connectivity, postanowiliśmy tymczasowo zrezygnować z automatycznego łączenia, ponieważ wpłynęłoby to bardzo negatywnie na przeciętnego użytkownika i zepsułoby wrażenia użytkownika.

Na czym skończyliśmy

W końcu uzyskaliśmy bardzo ciekawą i wysokiej jakości aplikację. Oglądanie wideo nagranego za pomocą tej aplikacji daje takie samo wrażenie, jakie daje oglądanie filmów 3D w kinie.

Oczywiście ludzkie oko działa trochę inaczej: jego linie zbiegają się w pewnym punkcie przestrzeni i zależą od punktu skupienia. W naszym przypadku oczy zawsze patrzą równolegle. Jednak nawet przy tym fakcie efekt stereo jest bardzo wyraźny: objętość przestrzeni na pierwszym planie, w środku i w tle jest mniej więcej taka sama jak na ekranie.

Do prawidłowego oglądania tego filmu potrzebne są okulary VR lub telewizor 3D.

Umożliwiliśmy więc korzystanie z aplikacji Stereo Video Recorder do samodzielnego nagrywania stereofonicznego wideo 3D na potrzeby biznesowe lub po prostu dla zabawy!

Praca nad błędami i planami na przyszłość

Nasz cel został osiągnięty: przestudiowaliśmy kryteria tworzenia wideo 3D i stworzyliśmy aplikację, która umożliwia każdemu użytkownikowi tworzenie wideo stereo. Ale to nie jest takie proste, jak się wydaje. Musimy popracować nad niektórymi rzeczami. Mieliśmy wiele problemów z biblioteką Multipeer Connectivity. Chcemy go zastąpić lub znaleźć obejście, aby aplikacja działała dobrze przy ograniczonym dostępie do Internetu.

Musimy również:

  • wdrożyć synchroniczne ustawianie ostrości i pomiar ekspozycji na dwóch urządzeniach, a także wdrożyć nagrywanie stereofonicznych ścieżek audio;
  • opracować bardziej pragmatyczną ramę dla urządzeń;
  • zintegrować mechanizm automatycznego parowania urządzeń;
  • zapewnić obsługę różnych opcji urządzenia i obsługiwać różne rozdzielczości wideo (obecnie możemy nagrywać wideo tylko z tymi samymi wersjami iPhone'a — na przykład iPhone 5S można sparować tylko z innym iPhonem 5S);
  • utwórz wersję aplikacji na Androida.

Nasza aplikacja Stereo Video Recorder jest już dostępna w App Store. Możesz go użyć do tworzenia wideo 3D. Jesteśmy pewni, że technologia będzie się dalej rozwijać i że docelowo będzie dużo więcej rozwiązań do tworzenia wideo stereoskopowego. Postaramy się nadążyć z duchem czasu.

Proszę zostawić swoje komentarze i pomysły dotyczące korzystania z tej aplikacji. Będziemy wdzięczni za Twoją opinię i informację zwrotną.

Dalsze czytanie na SmashingMag:

  • Cztery sposoby na zbudowanie aplikacji mobilnej, część 1: Natywny system iOS
  • Prototypowanie aplikacji na iOS i Androida za pomocą Sketch (z gratisem)
  • Przyszłość wideo w projektowaniu stron internetowych
  • Podstawy automatyzacji testów aplikacji, gier i sieci mobilnej