Видео маппинг, видео перформансы

3D видео маппинг в VVVV

Эта статья посвящена 3D видео маппингу с использованием нода CalibrateProjector (он является обёрткой над функцией CalibrateCamera в OpenCV).

Для работы вам потребуется:

  • VVVV версии 27.2 или выше (http://vvvv.org/downloads)
  • Плагины OpenCV (http://vvvv.org/contribution/opencv-plugin-(alpha))
  • Файлы примеров

...

VVVV.Tutorials.Mapping.3D.zip

VVVV.Tutorials.Mapping2-3D.zip

Установите VVVV с необходимыми плагинами

Посмотрите краткий обзор возможностей программы

 

Теперь сканируем объект в Reconstructme.

Преобразовываем файл из .3ds в .x.

Добавляем/изменяем ключевые точки

Для перемещения контрольных точек на сетке (виртуальном объекте) используйте мышь. Также для работы с точками используйте клавиши:

  • Enter – добавление новой точки
  • Пробел – удаление точки
  • Tab – выбор следующей точки
  • Shift+Tab – выбор последней точки

Изменяем контрольные точки проекции

С помощью мыши перемещайте контрольные точки проекции, чтобы проекция как можно лучше соответствовала реальному объекту. Для работы с точками используйте клавиши:

  • Пробел – перевод точки в систему координат камеры
  • Tab – выбор следующей точки
  • Shift+Tab – выбор последней точки

Экспортируем матрицы

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

Ввведение в видео маппинг

3D видео маппинг – это проецирование виртуального трёхмерного объекта на его двойника в реальном мире с использованием видеопроектора. Это развитие 2D маппинга, который представляет собой наложение проецируемых изображений на плоскости, попадающие в поле зрения проектора.  Таким образом, в 3D видео  маппинге на все поверхности реального объекта, видимые из точки расположения проектора, накладываются изображения. Эти изображения извлекаются из виртуальной модели объекта.

Пример с плёночной камерой

Проектор имеет те же самые оптические свойства, что и камера. Получается, что трёхмерная сцена проецируется на плоскость (камера) или на изображение плоскости в трёхмерной сцене (проектор). Работа проектора основана на принципе обратимости хода световых лучей.

Пример съёмки

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

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

Световые лучи снова пройдут свозь объектив и попадут на участки сцены соответствующие изображению на плёнке. Получается, что изображение сцены с плёнки проецируется на саму сцену.

Виртуальная камера

В примере с плёночной камерой проектор и камера имеют одни и те же оптические характеристики:

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

 

Если мы хотим, чтобы виртуальная камера соответсвовала реальному проектору, то надо, чтобы эти свойства у них совпадали.

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

Остальные свойства можно разбить на две категории:

  • Внешние. Изменяют виртуальный объект (например, перемещение (по трём координатам) и поворот (тоже по трём координатам))
  • Внутренние. Изменяют проекцию (например, фокусное расстояние (по двум координатам – Х,Y), смещение объектива (тоже по двум координатам – Х,Y)).

Это даёт виртуальной камере 10 степеней свободы.

Выравнивание модели камеры

Эти 10 параметров можно задать вручную, чтобы выполнить точную проекцию на трёхмерный объект. А можно найти алгоритм, который позволит определить наиболее оптимальные параметры.

Ранее для автоматичсекого расчета этих параметров использовался нод Pade, работавший с вертексами. Нод CalibrateProjector для рассчёта использует функцию CalirateCamera, а на выходе предоставляет стандартные матрицы – View Matrix и Projection Matrix.

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

Иногда при работе с точками возникает проблема: вы хотите выбрать точки на передней поверхности объекта, а точки выбираются на задней. Это происходит из-за того, что ваша видеокарта имеет недостаточную глубину буфера.

Для решения этой проблемы надо сделать следующее:

  • откройте Mesh.SelectPoints (снизу от calibrate.v4p слева)
  • откройте Intersect (снизу от Mesh.SelectPoints.v4p слева)
  • Выберите Renderer (EX9) в патче (прямоугольник в середине)
  • Откройте Herr Inspektor (Ctrl+I)
  • Проверьте, что параметр 'Windowed Depthbuffer Format' не установлен в значение 'None', в противном случае установите его в 'D16'

Скачать

ProjectorN (DX11).zip - 02.07.14

EventCatalog.ru — всё для организации мероприятий!