3D 비디오를 촬영하기 위해 iOS 앱을 구축한 방법(사례 연구)

게시 됨: 2022-03-10
요약 ↬ 할리우드가 첫 3D 영화를 출시한 지 얼마 되지 않아 영화 형식이 전 세계적으로 빠르게 큰 인기를 얻었습니다. 비디오 녹화 기술의 발전 덕분에 이제 모든 사용자가 스스로 비디오를 촬영할 수 있습니다. 인생에서 기억에 남는 사건의 스테레오 레코드를 만들거나 비즈니스를 위한 멋진 자료를 만들 수 있습니다.

저희 팀도 3D 촬영에 매력을 느꼈습니다. 우리는 인간의 시각 장치의 특징과 입체 사진의 기술적 세부 사항을 철저히 연구했습니다. 그러다가 3D 동영상을 찍어서 유튜브에 올릴 수 있는 iOS 앱을 개발하기로 했습니다. 이 앱의 기본 아이디어는 두 개의 iPhone을 특수 프레임에 장착하여 3D 비디오 촬영을 용이하게 하는 것이었고 우리가 해냈습니다! 그렇게 스테레오 비디오 레코더 앱이 나타났습니다.

우리는 3D 비디오 제작에 대한 조사를 Smashing Magazine 독자들과 공유하기로 결정했습니다. 우리는 또한 응용 프로그램을 만드는 기술적인 특징에 대해 이야기하고 iPhone을 장착하는 데 사용되는 프레임워크에 대한 자세한 도면을 제공하고자 합니다.

모든 것이 시작된 방법

3D 비디오 기능에 대한 연구에서 우리는 가상 현실에 대한 실험을 시작했습니다. 우리는 판지 프레임을 만들고 3D 형식의 두 대의 iPhone을 통해 세상을 들여다보았습니다. 연구에 대한 자세한 내용은 블로그에서 확인할 수 있습니다. 여기서 더 나아가겠습니다.

두 대의 iPhone으로 3D 비디오를 촬영하는 방법.
증강 현실 연구를 위해 만든 판지 (큰 버전 보기)

이 연구를 계속하면서 우리는 입체 3D 비디오를 녹화하고 YouTube에 업로드할 수 있는 애플리케이션의 또 다른 프로토타입을 만들기로 결정했습니다.

스테레오스코피는 평면 이미지에서 깊이의 환상을 만드는 방법입니다. 스테레오 녹음은 19세기부터 알려져 왔습니다. 입체 3D 비디오를 만들 때 우리는 양안시를 시뮬레이션합니다. 동공 사이의 거리로 인해 인간의 두뇌는 주변 공간의 부피(물체까지의 거리)를 분석하기가 훨씬 쉽습니다. 쌍안 스테레오스코피는 영화 산업에서 널리 사용됩니다. 스테레오 형식을 사용하지 않는 할리우드 걸작은 거의 볼 수 없습니다.

앱 프로토타입의 목적은 두 대의 다른 iPhone 카메라로 동시에 비디오를 촬영한 다음 결과 비디오 파일을 하나로 병합하여 Google Cardboard, 가상 현실 헬멧 또는 3D TV와 같은 3D 안경을 사용하여 볼 수 있도록 하는 것입니다.

점프 후 더! 아래에서 계속 읽기 ↓

스테레오 이미지와 3D 이미지에 대한 우리의 인식

스테레오 이미지와 3D 이미지에 대한 우리의 인식에 대해 자세히 설명하겠습니다. 사실 스테레오그래피는 시간이 지남에 따라 진화한 우리의 눈처럼 작동합니다. 우리의 두 눈 사이에는 거리가 있기 때문에 왼쪽 눈과 오른쪽 눈의 망막에 투영되는 이미지가 약간 다릅니다. 이 차이를 시차(두 개의 다른 위치에서 볼 때 물체의 위치가 다르게 보이는 효과)라고 합니다. 그러나 관찰자는 두 개의 개별 이미지를 보지 못합니다. 시각 장치는 하나의 공간 이미지에 대한 지각을 형성하며 볼륨, 거리 등을 감지할 수 있습니다. 시각 장치는 공간 이미지와 특정 지점에 있는 물체를 감지, 처리 및 투영한다는 것을 이해하는 것이 중요합니다.

두 대의 iPhone으로 3D 비디오를 촬영하는 방법.
시각 장치는 시차를 기반으로 볼륨의 인식을 생성합니다. (큰 버전 보기)

인간의 시각 장치가 어떻게 작동하는지 이해하면 보는 사람이 전체 3D 이미지를 느낄 수 있도록 시각 자료를 준비하고 재생하는 방법을 철저히 조사할 수 있습니다.

모든 것을 순서대로 살펴 보겠습니다.

물리학 법칙에 따라 작동하는 모든 장치와 마찬가지로 인간의 시각 장치에는 고유한 기능과 한계가 있습니다.

우선, 시각적 과정의 관점에서 우리는 관점(POV)이라고 하는 단일 지점에만 시선을 집중한다는 것을 이해해야 합니다. 사실 POV는 시선이 집중되는 지점이자 좌우 시선이 통과하는 지점이다. POV까지의 거리에 따라 왼쪽 눈과 오른쪽 눈의 시선이 이루는 각도가 달라집니다. 시선은 POV에서 라인이 수렴되도록 지향됩니다. 이 선들은 사람이 먼 곳, 즉 무한대를 바라볼 때 평행합니다.

두 대의 iPhone으로 3D 비디오를 촬영하는 방법.
눈은 물체까지의 거리(선의 수렴점)에 따라 항상 평행하게 보이지 않습니다. (큰 버전 보기)

망막에 투영된 이미지는 눈의 작은 변위 때문에 약간 다릅니다. 이것은 일반적으로 사람이 보고 있는 이미지의 변위 형태로 나타납니다. 왼쪽 눈은 왼쪽으로, 오른쪽 눈은 오른쪽으로 표시됩니다. 이미 언급한 이 현상을 시차라고 합니다.

그러나 시각 장치는 특정 시차 값에서만 볼륨을 감지할 수 있습니다. 물체까지의 거리에 따라 가까운 물체와 먼 물체의 시차가 다릅니다. 시차가 한계 값을 초과하여 사람이 3D 개체가 아니라 분기된 이미지를 볼 수 있습니다. 가까운 물체에서 먼 물체로 시야를 전환하는 것과 관련된 실험은 이것의 세부 사항에 대한 더 나은 이해를 제공할 수 있습니다.

두 대의 iPhone으로 3D 비디오를 촬영하는 방법.
부피에 대한 지각은 우리 뇌의 환상일 뿐입니다. 사실, 특정 부작용이 있습니다. (큰 버전 보기)

그림에서 볼 수 있듯이 전경에 뷰를 고정하면 배경 개체가 분기되기 시작합니다. 배경에서 보기를 고정하면 전경 이미지가 분기됩니다. 이러한 시각장치의 특성은 3D 촬영의 특징과 스테레오 영상의 재생에 있어 필수적인 역할을 한다.

일상 생활에서는 하나의 대상만 따라가는 데 익숙하기 때문에 이 효과를 알아차리지 못하고 시야를 바꾸면 시야가 새로운 조건에 빠르게 적응합니다. 그러나 미리 정해진 시차를 가진 두 장의 그림을 사용하여 체적 이미지를 인위적으로 투영하려고 할 때 시각 장치는 더 이상 평소처럼 빠르게 적응할 수 없습니다. 시각 장치가 일반 모드에서 작동하려면 3D 비디오 장비가 관찰 지점의 위치를 ​​분석하여 시청자의 눈에 맞게 조정되어야 합니다. 이 장비는 또한 필요한 시차로 스테레오 이미지를 생성해야 합니다.

그러나 이를 구현하는 것은 기술적으로 매우 어렵습니다. 일반적으로 고정된 기하학적 및 기술적 촬영 매개변수가 있는 간단한 구성표가 사용됩니다. 이 매개변수는 클로즈업 및 원거리 보기에 대해 다릅니다. 기하학적 및 기술적 매개변수는 카메라의 시야, 중심에서 카메라의 수평 변위, 카메라의 회전 각도 및 카메라의 수렴점을 의미합니다.

따라서 촬영 장비가 한 세트(카메라 2대와 프레임)만 있으면 가까운 물체와 멀리 있는 물체를 똑같이 촬영할 수 없습니다. 좀 더 정확히 말하면 촬영은 가능하지만, 예를 들어 원거리 뷰에 맞게 장비를 조정했지만 클로즈업 뷰를 촬영하거나 그 반대의 경우 스테레오 효과로 촬영하는 비디오를 사람이 보는 것은 매우 불편할 것입니다. 배경에서 약하게 표현됩니다.

두 대의 iPhone으로 3D 비디오를 촬영하는 방법.
촬영 시스템은 특정 관찰 조건에서 인간 시각 시스템의 매개변수와 일치하도록 구성되어야 합니다. (큰 버전 보기)

아이디어에서 실천으로: iPhone을 장착하는 방법

우리의 생각으로 돌아가자. 스테레오 3D 동영상을 녹화할 수 있는 모바일 앱 프로토타입을 개발하기로 결정했습니다. 위의 모든 사항을 고려하여 다음을 평가해야 했습니다.

  • 두 대의 iPhone을 사용하여 스테레오 이미지를 촬영할 수 있는 기본 가능성;
  • 카메라 사용의 일반적인 조건을 고려하여 고품질의 편안한 스테레오 인식을 보장하는 효과적인 거리 범위.

프로토타입 제작이 거의 임박했을 때 가장 먼저 한 일은 우리 작업에 대한 iPhone 카메라의 잠재력을 평가하는 것이었습니다. 우리는 iPhone이 클로즈업 촬영에 적합한 화각을 제공한다는 사실에 매우 놀랐습니다. 이미 언급했듯이 두 대의 카메라를 나란히 배치하는 것만으로는 좋은 스테레오 효과를 얻을 수 없습니다. 일반적으로 촬영을 계산하는 알고리즘은 계획의 매개변수를 설정하는 것으로 시작합니다. 그런 다음 이러한 데이터를 기반으로 설치 매개변수가 선택됩니다.

다음 공식을 기반으로 카메라 간의 거리를 간단하게 계산할 수 있습니다.

두 대의 iPhone으로 3D 비디오를 촬영하는 방법.
(큰 버전 보기)
  • Parallax<sub>fore</sub> 는 스테레오 쌍 프레임이 서로 겹칠 때 전경 이미지의 최대 변위를 설정합니다.
  • L<sub>fore</sub> = 전경 물체까지의 거리
  • f = 렌즈의 초점 거리
  • L = 렌즈의 초점까지의 거리
  • M = 프레임 줌

우리의 경우 표준 카메라를 사용했기 때문에 알고리즘을 약간 변경해야 했고 따라서 렌즈의 초점 거리가 엄격하게 설정되었습니다. 우리의 임무는 편안한 스테레오 효과와 촬영 대상까지의 허용 가능한 거리 범위를 얻는 것이었습니다. 따라서 중심 사이의 거리(카메라 중심 사이의 거리)와 수렴 각도를 찾기 위해 두 카메라를 서로 상대적으로 배치하는 여러 실험을 수행해야 했습니다.

프로토타이핑 과정에서 작업을 단순화하기 위해 특정 지점에서 수렴을 달성하기 위해 카메라를 회전하지 않고 무한대에서 수렴을 사용하기로 결정했습니다. 최상의 결과를 얻으려면 카메라의 수렴 각도를 정확하게 조정해야 한다는 것이 밝혀졌습니다. 그리고 아이폰을 장착할 골판지 프레임을 만들 계획이었다는 점을 감안하면 카메라의 수렴각을 조정하는 것은 사실상 불가능하다. 그래서 여러 번의 실험 끝에 근거리 촬영이 가능한 카메라 간의 거리와 좋은 스테레오 효과 사이의 최적의 균형을 찾는 타협점에 도달했습니다.

두 대의 iPhone으로 3D 비디오를 촬영하는 방법.
좋은 스테레오 효과를 얻고 불리한 생리적 효과를 최소화하려면 전화기 사이의 거리를 엄격하게 고정해야 합니다. (큰 버전 보기)

우리의 목표는 제조하기 쉽고 조작이 편리하고 필요한 촬영 매개변수를 제공하고 필요한 강성을 갖춘 가장 단순한 iPhone용 프레임을 개발하는 것이었습니다. 그래서 우리는 밀링이나 3D 프린팅을 통해 플라스틱이나 폼 소재(이 경우 폴리스티렌)로 만들 수 있는 3D 모델을 선택했습니다. 물론 미래에는 더 간단하게 만들 수 있는 장치(예: 판지 장치)를 개발하려고 합니다.

현재 유일한 하드웨어 제한은 완전히 동일한 카메라로 동일한 장치를 사용해야 한다는 것입니다.

두 대의 iPhone으로 3D 비디오를 촬영하는 방법.두 대의 iPhone으로 3D 비디오를 촬영하는 방법.
3D 비디오 촬영 프레임의 가장 간단한 버전 (큰 버전 보기)

아래는 iPhone 6+ 및 6S+, 6, 6S 및 7, 5 및 5S에 적합한 화면 크기가 4.0, 4.7 및 5.5인치인 다양한 버전의 장치에 대한 프레임의 자세한 도면입니다.

두 대의 iPhone으로 3D 비디오를 촬영하는 방법.
두 대의 iPhone으로 3D 비디오를 촬영하는 방법.
두 대의 iPhone으로 3D 비디오를 촬영하는 방법.
나만의 수제 프레임 그림

입체 3D 비디오 촬영을 위한 앱

앱은 두 대의 장치에서 동시에 실행되지만 촬영은 한 장치에서만 제어되므로 특별한 방법으로 촬영 프로세스를 제어할 필요가 없습니다.

단순화된 형태로 애플리케이션의 표준 사용 시나리오는 다음과 같은 일련의 작업으로 구성됩니다.

  1. 두 개의 iPhone을 프레임에 장착합니다.
  2. 두 기기에서 앱을 실행합니다.
  3. 어떤 장치가 마스터 역할을 하고 어떤 장치가 슬레이브 역할을 하는지 결정합니다. 마스터 장치에서 녹음을 시작합니다. (두 번째 장치에서 추가 조치를 취하지 마십시오.)
  4. 녹화가 끝나면 녹화된 조각이 동기화되고 YouTube에 업로드할 준비가 된 비디오가 렌더링될 때까지 기다립니다.
  5. 동기화 후 언제든지 동영상을 YouTube에 업로드한 다음 3D TV 또는 가상 현실 안경을 통해 시청하세요.

주요 작업은 마스터 장치인 iPhone 중 하나만에서 발생한다는 점은 주목할 가치가 있습니다. 이 iPhone에서 촬영을 시작합니다. 비디오는 마스터 장치에서도 처리되고 YouTube에 업로드됩니다. YouTube에 업로드할 동영상을 준비하는 데 시간이 걸립니다. 이것은 사용된 장치의 성능과 마스터와 슬레이브 장치 간의 연결 품질에 따라 달라집니다.

슬레이브 역할을 하는 두 번째 iPhone은 두 번째 카메라로만 사용됩니다. 촬영이 끝나면 비디오 조각을 마스터 장치로 보냅니다.

두 대의 iPhone으로 3D 비디오를 촬영하는 방법.
3D 영상 촬영 과정은 대략 이렇습니다. (큰 버전 보기)

촬영된 비디오 갤러리를 표시하는 앱의 기본 화면 스크린샷은 아래와 같습니다. 비디오는 내장 플레이어와 YouTube 모두를 통해 볼 수 있습니다. 여기에서 추가 촬영 역할(마스터 및 슬레이브)이 장치에 할당되는 방식을 볼 수도 있습니다.

두 대의 iPhone으로 3D 비디오를 촬영하는 방법.
두 대의 iPhone으로 3D 비디오를 촬영하는 방법.
앱의 사용자 인터페이스

기술적 장애물

비동기화

비디오 조각에 대한 모든 조작은 가능한 경우 하드웨어 가속을 사용하여 강력한 프레임워크인 AVFoundation의 도움으로 수행됩니다.

YouTube에 업로드하려면 비디오 조각이 프레임별로 나란히 붙어 있습니다. 분명히 모든 왼쪽 프레임은 시간에 따라 오른쪽 프레임과 일치해야 합니다. 소스 중 하나의 프레임이 약간 지연되면 스테레오 효과가 손실되거나 왜곡되며(특히 동적 장면에서) 그림이 두 배로 나타납니다.

이 문제를 해결하기 위해 동시에 장치에서 비디오 녹화를 시작했습니다. 실제로 기록은 시작 버튼을 누른 직후가 아니라 특정 알고리즘이 활성화되는 짧은 지연 후에 시작됩니다. 이는 정밀 시간 프로토콜(PTP)이 클럭 스큐를 측정하는 방법과 매우 유사합니다. 따라서 최악의 경우 약 1개의 비동기화 프레임에 해당하는 30~50밀리초의 발산으로 비디오 녹화를 시작할 수 있었습니다.

iOS 멀티피어 연결의 버그

기본 iOS 라이브러리인 Multipeer Connectivity를 사용하여 두 장치 간의 통신을 설정했습니다. 이 라이브러리는 동일한 Wi-Fi 네트워크에 있는 장치 간 직접 연결은 물론 Bluetooth를 통해 또는 iPhone에서 Wi-Fi Direct와 유사한 것을 사용하여 직접 연결합니다. 따라서 무선 또는 모바일 인터넷 네트워크 없이 개방된 필드에서도 비디오 조각을 촬영하고 동기화할 수 있습니다. 그러나 마스터 장치에서 YouTube로 비디오를 전송하려면 인터넷 연결이 필요합니다.

우리가 이 라이브러리를 사용하기로 결정한 주된 이유는 동일한 네트워크에 연결되어 있지 않을 때 두 장치 간의 통신을 설정하기 때문입니다. 분명히 열악한 스테레오 3D 촬영 조건에서 가장 기대할 수 있는 것은 3G 연결입니다. 3D 비디오를 촬영하려면 최소한의 지연으로 동기화를 위해 데이터 패킷을 전송할 수 있어야 합니다. 또한 인터넷 연결이 되지 않으면 촬영할 수 없었습니다. 따라서 Multipeer Connectivity 라이브러리는 생명선이 되었습니다. 게다가, 그것은 Apple 플랫폼을 위한 기본 솔루션입니다.

그러나 모든 것이 우리가 원하는 대로 정확하게 진행되지는 않았습니다. Multipeer Connectivity와 통합하는 동안 많은 버그가 감지되었으며 전체 라이브러리가 작동이 매우 불안정했습니다. 선언된 기능의 대부분은 이론상으로만 존재했습니다. 장치가 동일한 네트워크 세그먼트 내에서 작동할 때 Multipeer Connectivity는 더 효과적으로 작동합니다. 허용 가능한 시간 동안 연결이 설정됩니다. 메시지 전달 시간의 허용 가능한 분산이 달성됩니다.

그러나 상대적으로 스테레오 3D 촬영 조건이 열악하거나 한 곳에 많은 모바일 장치가 있는 경우 연결을 설정하는 것은 복권과 비슷합니다. Apple 라이브러리가 아직 완전히 개발되지 않았으며 여전히 원시 상태라는 느낌을 받습니다.

장치 연결

프로토타입의 초기 버전에서 자동 연결 프로토콜을 구현했습니다. 프로토콜 자체는 초기 시점에서 과반수를 기반으로 피어 장치 중에서 코디네이터를 선택하는 규칙 집합으로 구성됩니다.

다음으로, 코디네이터는 슬레이브 장치 사이에 원형으로 특수 마커를 전달하여 각 장치에서 원격 측정 통계를 주기적으로 수집합니다. 이러한 원격 측정 데이터를 기반으로 프레임에 장착된 장치 쌍을 비교합니다. 페어가 식별되면 마스터와 슬레이브가 페어에 할당되고 그들 사이에 직접 연결이 설정됩니다. 이 단계에서 연결이 완료됩니다.

자동 및 독립적 검색

필요한 경우 동기화를 위해 이전 세션에 참여했던 장치에 대한 자동 및 독립 검색(고유 식별자 기반)을 수행했습니다(녹화 시 마스터 장치에 데이터 로드에 실패한 경우 녹화된 비디오 트랙 가져오기). 가속도계 판독값은 주로 쌍에 해당하는 장치를 식별하는 데 사용되었습니다. 코디네이터는 잠재적인 쌍 간의 상관 관계를 계산했습니다. 상관 관계가 특정 임계값을 초과하면 장치가 잠재적인 쌍으로 간주되고 보조 기능이 후속적으로 테스트되었습니다.

위에서 언급한 Multipeer Connectivity의 문제를 완전히 극복할 수 없었기 때문에 자동 연결을 일시적으로 중단하기로 결정했습니다. 이는 일반 사용자에게 매우 부정적인 영향을 미치고 사용자 경험을 망칠 것이기 때문입니다.

우리가 끝낸 것

결국 우리는 매우 흥미롭고 고품질의 앱을 얻었습니다. 이 앱을 통해 녹화된 동영상을 보면 극장에서 3D 영화를 보는 것과 같은 느낌을 받을 수 있습니다.

물론 사람의 눈은 약간 다르게 작동합니다. 즉, 선은 공간의 특정 지점에서 수렴하고 초점 지점에 따라 달라집니다. 우리의 경우 눈은 항상 평행하게 보입니다. 그러나 이러한 사실에도 불구하고 스테레오 효과는 매우 두드러집니다. 공간의 볼륨은 화면에서와 거의 같은 전경, 중간 및 배경에서 느껴집니다.

이 영상을 제대로 보려면 VR 안경이나 3D TV가 필요합니다.

그래서 우리는 스테레오 비디오 레코더 앱을 사용하여 비즈니스 요구 사항이나 재미를 위해 스스로 3D 스테레오 비디오를 촬영할 수 있도록 만들었습니다!

버그 및 향후 계획 작업

우리의 목표는 달성되었습니다. 3D 비디오 제작 기준을 연구하고 모든 사용자가 스테레오 비디오를 만들 수 있는 앱을 만들었습니다. 하지만 말처럼 쉽지만은 않습니다. 몇 가지 작업을 해야 합니다. Multipeer Connectivity 라이브러리에 많은 문제가 있었습니다. 앱이 제한된 인터넷 액세스에서 잘 작동하도록 교체하거나 해결 방법을 찾고 싶습니다.

또한 다음을 수행해야 합니다.

  • 두 장치에 동기식 초점 및 노출 측정을 구현하고 스테레오 오디오 트랙 녹음을 구현합니다.
  • 장치에 대한보다 실용적인 프레임을 개발하십시오.
  • 자동 장치 페어링 메커니즘을 통합합니다.
  • 다양한 장치 옵션에 대한 지원을 제공하고 다양한 비디오 해상도를 처리할 수 있습니다(현재로서는 동일한 iPhone 버전으로만 비디오를 촬영할 수 있습니다. 예를 들어 iPhone 5S는 다른 iPhone 5S와만 페어링할 수 있음).
  • 앱의 Android 버전을 만듭니다.

스테레오 비디오 레코더 앱은 이미 App Store에 있습니다. 이를 사용하여 3D 비디오를 만들 수 있습니다. 우리는 이 기술이 계속 발전할 것이며 결국에는 입체 비디오를 만들기 위한 더 많은 솔루션이 있을 것이라고 확신합니다. 시대에 발맞추도록 노력하겠습니다.

이 앱의 사용에 대한 의견과 아이디어를 남겨주세요. 귀하의 의견과 피드백에 감사드립니다.

SmashingMag에 대한 추가 정보:

  • 모바일 애플리케이션을 구축하는 4가지 방법, 1부: 기본 iOS
  • 스케치를 사용하여 iOS 및 Android 앱 프로토타이핑(무료)
  • 웹 디자인에서 비디오의 미래
  • 앱, 게임 및 모바일 웹용 테스트 자동화의 기초