Как мы создали iOS-приложение для съемки 3D-видео (пример из практики)

Опубликовано: 2022-03-10
Краткий обзор ↬ Вскоре после того, как Голливуд выпустил свои первые 3D-фильмы, этот формат быстро приобрел огромную популярность во всем мире. Благодаря развитию технологий видеозаписи любой пользователь теперь может снимать видео самостоятельно. Вы можете сделать стереозапись памятных событий вашей жизни или создать прекрасный материал для своего бизнеса.

Нашу команду также привлекала 3D-съемка. Мы досконально изучили особенности зрительного аппарата человека и технические детали стереоскопической фотографии. Затем мы решили разработать приложение для iOS для съемки 3D-видео и загрузки видео на YouTube. Идея приложения заключалась в том, чтобы облегчить съемку 3D-видео, закрепив два iPhone на специальной раме — и мы это сделали! Так появилось приложение Stereo Video Recorder.

Мы решили поделиться с читателями Smashing Magazine нашим исследованием создания 3D-видео. Мы также хотели бы рассказать о технических особенностях создания приложения и предоставить подробные чертежи каркаса, используемого для крепления айфонов.

Как это все началось

В нашем исследовании возможностей 3D-видео мы начали с экспериментов с виртуальной реальностью. Мы сконструировали картонную рамку и смотрели сквозь нее на мир через два айфона в формате 3D. Подробности нашего исследования можно найти в нашем блоге. Мы пойдем дальше здесь.

Как снимать 3D-видео на два iPhone.
Изготовленный нами картон для изучения дополненной реальности (Просмотреть увеличенную версию)

Продолжая это исследование, мы решили создать еще один прототип приложения, позволяющего записывать стереоскопическое 3D-видео и загружать его на YouTube.

Стереоскопия — это способ создания иллюзии глубины плоского изображения. Стереозапись известна с 19 века. При создании стереоскопического 3D-видео мы моделируем бинокулярное зрение. Благодаря расстоянию между зрачками человеческому мозгу гораздо проще анализировать объем окружающего пространства — расстояние до предметов. Бинокулярная стереоскопия широко используется в киноиндустрии. Вряд ли вы встретите голливудский шедевр, в котором не используется стереофонический формат.

Цель нашего прототипа приложения заключалась в том, чтобы снимать видео одновременно двумя разными камерами iPhone, а затем объединять полученные видеофайлы в один для просмотра в любых 3D-очках — например, Google Cardboard, шлеме виртуальной реальности или 3D-телевизоре.

Еще после прыжка! Продолжить чтение ниже ↓

Стереоизображение и наше восприятие трехмерного изображения

Позвольте мне подробнее остановиться на стереоизображениях и нашем восприятии трехмерных изображений. На самом деле стереография работает так же, как и наши глаза, которые эволюционировали с течением времени. Поскольку между двумя нашими глазами существует расстояние, изображения, проецируемые на сетчатку левого и правого глаза, немного отличаются. Эта разница называется параллаксом (эффект, при котором положение объекта кажется разным, если смотреть с двух разных позиций). Однако наблюдатель не видит двух отдельных изображений. Зрительный аппарат формирует восприятие единого пространственного образа и может ощущать объем, расстояние и т. д. Важно понимать, что зрительный аппарат улавливает, обрабатывает и проецирует пространственные образы и объекты, находящиеся в пространстве в определенных точках.

Как снимать 3D-видео на два iPhone.
Зрительный аппарат создает восприятие объема на основе параллакса. (Посмотреть большую версию)

Понимание того, как работает зрительный аппарат человека, позволяет тщательно изучить, как необходимо подготовить и воспроизвести визуальный материал, чтобы зритель мог получить представление о полном трехмерном изображении.

Давайте рассмотрим все по порядку.

Как и любое устройство, работающее по законам физики, зрительный аппарат человека имеет свои особенности и ограничения.

Прежде всего, нам нужно понять, что с точки зрения нашего зрительного процесса мы фокусируем свой взгляд только на одной точке, называемой точкой зрения (POV). По сути, точка зрения — это точка, в которой сфокусированы глаза и через которую проходят левая и правая линии взгляда. В зависимости от расстояния до точки зрения угол между линиями визирования левого и правого глаза будет разным. Глаза направлены так, чтобы линии сходились в точке зрения. Эти линии параллельны, когда человек смотрит вдаль, или, другими словами, в бесконечность.

Как снимать 3D-видео на два iPhone.
Глаза не всегда смотрят параллельно — в зависимости от расстояния до объекта (точка схождения линий). (Посмотреть большую версию)

Изображения, проецируемые на сетчатку, незначительно различаются из-за небольшого смещения глаз. Обычно это проявляется в виде смещения изображения, на которое смотрит человек, — влево для левого глаза и вправо для правого глаза. Это уже упомянутое явление называется параллаксом.

Однако зрительный аппарат может воспринимать объем только при определенных значениях параллакса. В зависимости от расстояния до объекта параллакс будет разным для ближних и дальних объектов. Может случиться так, что параллакс превысит предельное значение и человек увидит не 3D-объект, а раздвоенное изображение. Лучше понять эту специфику мог бы эксперимент с переключением взгляда с ближних объектов на дальние.

Как снимать 3D-видео на два iPhone.
Восприятие объема — это всего лишь иллюзия нашего мозга. На самом деле, есть определенные побочные эффекты. (Посмотреть большую версию)

Как видно из рисунка, если зафиксировать свой взгляд на переднем плане, то фоновые объекты начнут раздваиваться. Если вы зафиксируете свой взгляд на фоне, то изображение переднего плана раздвоится. Эта характеристика зрительного аппарата играет существенную роль в особенностях 3D-съемки и воспроизведения стереоизображений.

В обычной жизни мы не замечаем этого эффекта, потому что привыкли следить только за одним объектом, а при смещении взгляда взгляд быстро адаптируется к новым условиям. Однако когда мы пытаемся искусственно спроецировать объемное изображение с помощью двух картинок с заданным параллаксом, зрительный аппарат уже не может адаптироваться так быстро, как обычно. Для работы зрительного аппарата в штатном режиме аппаратура 3D-видео должна подстраиваться под глаза зрителя, анализируя, где находится точка наблюдения. Это оборудование также должно создавать стереоизображения с требуемым параллаксом.

Однако реализовать это технически очень сложно. Обычно используется простая схема с фиксированными геометрическими и техническими параметрами съемки. Эти параметры будут разными для ближнего и дальнего плана. Под геометрическими и техническими параметрами мы подразумеваем поле зрения камер, горизонтальное смещение камер от центра, угол поворота камер и точку схождения камер.

Следовательно, вы не сможете снимать одинаково близкие и удаленные объекты, имея только один комплект съемочного оборудования (две камеры и рамку). Точнее, можно было бы снимать, но человеку было бы крайне неудобно смотреть видео, в котором, например, аппаратура настроена на дальний вид, но снимает крупный план, или наоборот, со стереоэффектом слабо выражен на фоне.

Как снимать 3D-видео на два iPhone.
Система съемки должна быть настроена на соответствие параметрам зрительной системы человека при определенных условиях наблюдения. (Посмотреть большую версию)

От идеи к практике: как установить iPhone

Вернемся к нашей идее. Мы решили разработать прототип мобильного приложения, которое может записывать стерео 3D-видео. Учитывая все вышеизложенное, нам необходимо было оценить следующее:

  • базовая возможность съемки стереоизображения с помощью двух айфонов;
  • эффективный диапазон расстояний, обеспечивающий качественное и комфортное стереовосприятие с учетом обычных условий использования камеры.

Когда мы подошли вплотную к созданию прототипа, первым делом оценили возможности камеры iPhone для нашей задачи. Мы были приятно удивлены, обнаружив, что iPhone обеспечивает приемлемый угол обзора для съемки крупным планом. Как уже упоминалось, простого размещения двух камер рядом недостаточно для получения хорошего стереоэффекта. Обычно алгоритм расчета съемки начинается с задания параметров плана — то есть расстояний до ближайших и дальних объектов, а также расстояний между объектами в плоскости кадра. Затем на основе этих данных выбираются параметры установки.

Упрощенный расчет расстояния между камерами можно выполнить по этой формуле:

Как снимать 3D-видео на два iPhone.
(Посмотреть большую версию)
  • Parallax<sub>fore</sub> устанавливает максимальное смещение изображения переднего плана, когда кадры стереопары накладываются друг на друга.
  • L<sub>fore</sub> = расстояние до объекта переднего плана
  • f = фокусное расстояние объектива
  • L = расстояние до фокуса линзы
  • M = масштабирование кадра

В нашем случае пришлось немного изменить алгоритм, т.к. мы использовали стандартную камеру, и, соответственно, фокусное расстояние объектива жестко задано. Нашей задачей было получить комфортный стереоэффект и приемлемый диапазон расстояний до объекта съемки. Итак, нам потребовалось провести несколько экспериментов — расположив обе камеры друг относительно друга — чтобы найти необходимое расстояние между их центрами (расстояние между центрами камер) и углы схождения.

Для упрощения задачи в процессе прототипирования мы решили не вращать камеры для достижения схождения в определенной точке, а использовать схождение на бесконечность. Оказалось, что для получения наилучшего результата необходимо точно настроить угол схождения камер. А если учесть, что для крепления айфонов мы планировали сделать картонную рамку, то регулировка угла схождения камер становится практически невозможной. Итак, после ряда экспериментов мы пришли к компромиссу, получив оптимальный баланс между расстоянием между камерами для возможности съемки в ближней зоне и получения хорошего стереоэффекта.

Как снимать 3D-видео на два iPhone.
Для достижения хорошего стереоэффекта и минимизации неблагоприятных физиологических эффектов расстояние между телефонами должно быть строго фиксированным. (Посмотреть большую версию)

Нашей целью было разработать максимально простую рамку для айфонов, простую в изготовлении, удобную в эксплуатации, обеспечивающую необходимые параметры съемки и обладающую необходимой жесткостью. Итак, мы выбрали 3D-модель, которую можно изготовить из пластика или пенопласта (в данном случае полистирола) методом фрезеровки или 3D-печати. В будущем мы, конечно, захотим разработать более простое в изготовлении устройство — например, картонное.

Единственное аппаратное ограничение на данный момент — нужно использовать одни и те же устройства, с абсолютно одинаковыми камерами.

Как снимать 3D-видео на два iPhone.Как снимать 3D-видео на два iPhone.
Простейший вариант кадра 3D-видеосъемки (Просмотреть увеличенную версию)

Ниже представлены подробные чертежи рамы для разных версий устройств с диагональю экрана 4,0, 4,7 и 5,5 дюйма — подходят для iPhone 6+ и 6S+, для 6, 6S и 7, а также для 5 и 5S.

Как снимать 3D-видео на два iPhone.
Как снимать 3D-видео на два iPhone.
Как снимать 3D-видео на два iPhone.
Чертежи для самодельной рамки

Приложение для стереоскопической 3D-видеосъемки

Приложение работает одновременно на двух устройствах, но управление съемкой осуществляется только с одного из устройств, поэтому нет необходимости каким-то особым образом контролировать процесс съемки.

В упрощенном виде стандартный сценарий использования приложения состоит из следующей последовательности действий:

  1. Установите два iPhone на раму.
  2. Запустите приложение на двух устройствах.
  3. Определите, какое из устройств будет ведущим, а какое ведомым. Начните запись с ведущего устройства. (Не предпринимайте никаких дополнительных действий на втором устройстве.)
  4. После записи дождитесь синхронизации записанных фрагментов и рендеринга видео, готового к загрузке на YouTube.
  5. Загрузите видео на YouTube в любой момент после синхронизации, а затем просмотрите его на своем 3D-телевизоре или в очках виртуальной реальности.

Стоит отметить, что основная работа происходит только на одном из айфонов, головном устройстве. Именно на этом айфоне мы начинаем съемку. Видео обрабатывается и загружается на YouTube также на мастер-устройстве. Подготовка видео к загрузке на YouTube занимает некоторое время. Это будет зависеть от производительности используемых устройств и от качества соединения между ведущим и ведомым устройствами.

Второй iPhone, выступающий в роли ведомого, используется только как вторая камера. По окончании съемки отправляет видеофрагмент на ведущее устройство.

Как снимать 3D-видео на два iPhone.
Процесс съемки 3D-видео выглядит примерно так. (Посмотреть большую версию)

Скриншоты главного экрана приложения, отображающего галерею отснятых видеороликов, показаны ниже. Видео можно смотреть как через встроенный плеер, так и на YouTube. Здесь вы также можете посмотреть, как устройствам назначаются дальнейшие роли съемки (ведущий и подчиненный).

Как снимать 3D-видео на два iPhone.
Как снимать 3D-видео на два iPhone.
Пользовательский интерфейс приложения

Технические препятствия

Десинхронизация

Все манипуляции с видеофрагментами выполняются с помощью мощного фреймворка AVFoundation, по возможности с использованием аппаратного ускорения.

Для загрузки на YouTube фрагменты видео склеиваются покадрово, рядом. Очевидно, что каждый левый кадр должен совпадать с правым кадром по времени. При малейшей задержке кадров одного из источников стереоэффект будет теряться или искажаться (особенно в динамичных сценах), а картинка будет двоиться.

Чтобы решить эту проблему, мы начали одновременно записывать видео на устройства. На самом деле запись начинается не сразу после нажатия кнопки запуска, а после небольшой задержки, в течение которой срабатывает определенный алгоритм — очень похоже на то, как протокол точного времени (PTP) измеряет рассогласование часов. Таким образом, нам удалось инициировать видеозапись с расхождением от 30 до 50 миллисекунд, что в худшем случае соответствует примерно 1 кадру десинхронизации.

Ошибки в многопользовательском подключении iOS

Мы использовали нативную библиотеку iOS Multipeer Connectivity для установления связи между двумя устройствами. Эта библиотека устанавливает прямое соединение между устройствами в одной сети Wi-Fi, а также через Bluetooth или с помощью чего-то похожего на Wi-Fi Direct на iPhone. Таким образом, вы можете снимать и синхронизировать видеофрагменты даже в чистом поле, без беспроводной или мобильной интернет-сети. Но для отправки видео на YouTube с основного устройства требуется подключение к Интернету.

Основная причина, по которой мы решили использовать эту библиотеку, заключается в том, что она устанавливает связь между двумя устройствами, когда они не подключены к одной и той же сети. Очевидно, что при плохой стереофонической 3D-съемке максимум, на что можно рассчитывать, — это 3G-соединение. Для съемки 3D-видео жизненно важно иметь возможность — с минимальной задержкой — передавать пакеты данных для синхронизации. К тому же, если бы не было интернета, мы бы не смогли снимать. Поэтому библиотека Multipeer Connectivity стала спасательным кругом. Кроме того, это нативное решение для платформы Apple.

Однако стоит отметить, что не все получилось именно так, как хотелось. При интеграции с Multipeer Connectivity было обнаружено множество багов, и вся библиотека работала крайне нестабильно. Большинство заявленных функций были только в теории. Когда устройства работают в одном сегменте сети, многоранговое подключение работает более эффективно; соединение устанавливается на приемлемый период времени; достигается допустимый разброс времени доставки сообщений.

Однако если у нас, условно говоря, плохие условия стерео 3D съемки, или, скажем, много мобильных устройств в одном месте, то установление соединения становится сродни лотерее. Складывается ощущение, что библиотека Apple еще не до конца проработана и еще достаточно сырая.

Связывание устройств

Мы реализовали протокол автоматического связывания в ранней версии нашего прототипа. Сам протокол состоит из набора правил, по которым координатор выбирается среди одноранговых устройств на основе большинства в начальный момент времени.

Далее координатор периодически собирает статистику телеметрии с каждого устройства, передавая специальный маркер по кругу между ведомыми устройствами. На основе этих данных телеметрии сравниваются пары устройств, закрепленных на раме. После идентификации пары в паре назначаются ведущий и ведомый, и между ними устанавливается прямое соединение. На этом этапе связывание завершено.

Автоматический и независимый поиск

При необходимости выполнялся автоматический и независимый поиск (по уникальным идентификаторам) устройств, участвовавших в предыдущих сеансах, для синхронизации (получения записанных видеодорожек в случае, если данные не удалось загрузить на ведущее устройство в момент записи). Показания акселерометра в основном использовались для определения того, какие устройства соответствуют паре. Координатор вычислил корреляцию между потенциальными парами. Если корреляция превышала определенный порог, устройства считались потенциальными парами, и впоследствии проверялись вторичные признаки.

Поскольку мы не смогли полностью преодолеть вышеупомянутые проблемы с многоранговым подключением, мы решили временно отказаться от автоматического связывания, потому что это очень негативно повлияло бы на обычного пользователя и испортило бы пользовательский опыт.

Чем мы закончили

В итоге у нас получилось очень интересное и качественное приложение. Просмотр видео, записанного с помощью этого приложения, дает вам те же ощущения, что и при просмотре 3D-фильмов в кинотеатре.

Конечно, человеческий глаз работает немного иначе: его линии сходятся в определенной точке пространства и зависят от точки фокусировки. В нашем случае глаза всегда смотрят параллельно. Однако даже при этом стереоэффект очень ярко выражен: объем пространства ощущается на переднем, среднем и заднем планах примерно так же, как и на экране.

Для корректного просмотра этого видео вам потребуются очки виртуальной реальности или 3D-телевизор.

Итак, мы сделали возможным использование приложения Stereo Video Recorder для самостоятельной съемки 3D-стереовидео для нужд вашего бизнеса или просто для развлечения!

Работа над ошибками и планы на будущее

Наша цель была достигнута: мы изучили критерии создания 3D-видео и создали приложение, позволяющее любому пользователю создавать стереовидео. Но не все так просто, как кажется. Нам нужно поработать над некоторыми вещами. У нас было много проблем с библиотекой Multipeer Connectivity. Мы хотим либо заменить его, либо найти обходной путь, чтобы приложение хорошо работало при ограниченном доступе в Интернет.

Нам также необходимо:

  • реализовать синхронную фокусировку и замер экспозиции на двух устройствах, а также реализовать запись стереофонических аудиодорожек;
  • разработать более прагматичную структуру для устройств;
  • интегрировать механизм автоматического сопряжения устройств;
  • обеспечить поддержку разных вариантов устройств и иметь возможность работать с разными разрешениями видео (на данный момент мы можем снимать видео только с одинаковыми версиями iPhone — например, iPhone 5S может работать в паре только с другим iPhone 5S);
  • создать версию приложения для Android.

Наше приложение Stereo Video Recorder уже есть в App Store. Вы можете использовать его для создания 3D-видео. Мы уверены, что технология будет развиваться и дальше, и со временем будет еще много решений для создания стереоскопического видео. Мы постараемся идти в ногу со временем.

Пожалуйста, оставьте свои комментарии и идеи по использованию этого приложения. Будем признательны за ваше мнение и обратную связь.

Дальнейшее чтение на SmashingMag:

  • Четыре способа создания мобильного приложения, часть 1: нативная iOS
  • Прототип приложений для iOS и Android с помощью Sketch (бесплатно)
  • Будущее видео в веб-дизайне
  • Основы автоматизации тестирования приложений, игр и мобильной сети