Заархивировано - Использование камеры Intel® RealSense™ с TouchDesigner*: часть 1

Выпуск комплекта Intel® RealSense™ SDK прекращен. Его поддержка и обновления более недоступны.

Загрузить демонстрационные файлы ZIP 35KB

TouchDesigner* компании Derivative* — популярная платформа и программа, используемая во всем мире для создания интерактивных решений и анимации реального времени в ходе выступлений, а также для отображения трехмерной анимации, создания карт и схем, а также с недавнего времени в системах виртуальной реальности. Благодаря поддержке камеры Intel® RealSense™ TouchDesigner* становится еще более многоцелевым и мощным средством. Следует отметить и возможность импортировать в TouchDesigner* объекты и анимацию из других трехмерных пакетов с помощью файлов .fbx, а также возможность работать с уже рендеринговыми анимационными роликами и изображениями.

В этой статье, состоящей из двух частей, я расскажу об интеграции камеры Intel® RealSense™ в TouchDesigner* и о возможностях ее использования. В демонстрациях в первой части используется камера Intel® RealSense™ с узлами TOP. В демонстрациях во второй части используются узлы CHOP. Во второй части также поясняется создание последовательностей виртуальной реальности и полукруглых панорам с использованием камеры Intel® RealSense™. Я покажу, как использовать TouchDesigner* Oculus Rift вместе с камерой Intel® RealSense™. Обе части включают анимации и загружаемые файлы TouchDesigner* (.toe), которые можно использовать для просмотра. Для получения файлов TouchDesigner* (.toe) нажмите кнопку в верхней части этой статьи. Кроме того, доступна бесплатная копия TouchDesigner* для некоммерческого использования. Она полностью функциональна (за исключением того, что максимальное разрешение ограничено значением 1280 на 1280).

Примечание. В настоящее время существует два типа камер Intel® RealSense™: камера ближнего обзора F200 и камера дальнего обзора R200. Благодаря своему сверхкомпактному размеру камера R200 очень удобна для выступлений и других сценариев использования, когда камера должна быть скрытой. В отличие от более крупной модели F200 камера R200 не поддерживает отслеживание рук и пальцев, а также отслеживание маркеров. TouchDesigner* поддерживает обе модели камер Intel® RealSense™: и F200, и R200.

Цитирую веб-страницу TouchDesigner*: «TouchDesigner* — это революционная программная платформа, дающая возможность художникам и дизайнерам работать с материалами в открытой свободной среде. TouchDesigner* — идеальное решение для интерактивных мультимедиапроектов, использующих видео, звук, трехмерную графику, ввод с помощью контроллеров, Интернет и базы данных, источники света DMX, датчики окружающей среды и вообще все, что только можно вообразить. Это мощная среда для смешения всех названных элементов бесконечным числом способов».

Я попросил Малькольма Бечарда, старшего разработчика Derivative, высказаться по поводу использования камеры Intel® RealSense™ с TouchDesigner*:

«Благодаря процедурной архитектуре TouchDesigner* на основе узлов данные камеры Intel® RealSense™ можно немедленно получать, визуализировать, затем передавать на другие узлы, не тратя времени на написание кода. Можно быстро создавать прототипы идей и вести разработку с мгновенной обратной связью. Камера представлена узлом в TouchDesigner*, а это означает, что нет необходимости закрывать и перекомпилировать приложение на каждой итерации разработки. Камера Intel® RealSense™ дополняет возможности TouchDesigner*, предоставляя пользователям значительное количество готовых модулей, таких как жесты, отслеживание рук, отслеживание лица, данные глубины. Все это можно использовать для взаимодействия. Нет необходимости применять низкоуровневый анализ данных о положении рук для распознавания жестов: это уже сделано».

Использование камеры Intel® RealSense™ в TouchDesigner*

TouchDesigner* — программа и платформа на основе узлов, использующая Python* в качестве основного языка сценариев. Существует пять категорий узлов, выполняющих разные операции и обладающих разными функциями: узлы TOP (текстуры), SOP (геометрия), CHOP (анимация и звук), DAT (таблицы и текст), COMP (трехмерные геометрические узлы, а также узлы для создания двухмерных панелей управления) и MAT (материалы). Программисты компании TouchDesigner*, посоветовавшись с разработчиками Intel®, создали два особых узла, узел камеры Intel® RealSense™ TOP и узел камеры Intel® RealSense™ CHOP для интеграции камеры Intel® RealSense™ в программу.

Примечание. Эта статья предназначена для пользователей, уже знакомых с программой TouchDesigner* и с ее интерфейсом. Если у вас нет опыта работы с TouchDesigner* и вы собираетесь постепенно разбираться в этой статье, то рекомендую сначала просмотреть документацию, доступную здесь:

Изучение TouchDesigner*

Примечание. При использовании камеры Intel® RealSense™ для достижения оптимальных результатов следует учитывать дальность. На этой веб-странице Intel® указана дальность всех моделей камер и даны рекомендации по использованию камер.

Узел камеры Intel® RealSense™ TOP

Узлы TOP в TouchDesigner* выполняют множество операций, обычно содержащихся в программах для композиции изображений. Узел камеры Intel® RealSense™ TOP дополняет эти возможности за счет двухмерных и трехмерных данных, поступающих от камеры Intel® RealSense™. Узел камеры Intel® RealSense™ TOP содержит ряд настроек для получения разных видов данных.

  • Цвет. Видео с датчика цвета камеры Intel® RealSense™.
  • Глубина. Вычисленная глубина каждого пикселя. 0 означает, что пиксель находится на расстоянии 0 метров от камеры, 1 означает, что пиксель находится на максимально возможном расстоянии или дальше.
  • Необработанная глубина. Значения берутся непосредственно из Intel® RealSense™ SDK. И вновь 0 означает 1 метр от камеры, 1 означает, что пиксель находится на максимально возможном расстоянии или дальше.
  • Наглядная глубина. Изображение Intel® RealSense™ SDK в оттенках серого, позволяющее наглядно представить глубину. Его невозможно использовать для фактического вычисления точного расстояния каждого пикселя до камеры.
  • Отображение глубины на цветной UV-карте. Значения UV из 32-разрядной плавающей текстуры RG (обратите внимание, что в ней только два цвета (красный и зеленый), а синего цвета нет), необходимые для выравнивания изображения глубины в соответствии с цветным изображением. Для выравнивания изображений можно использовать узел TOP Remap.
  • Отображение цвета на UV-карте глубины. Значения UV из 32-разрядной плавающей текстуры RG (обратите внимание, что в ней только два цвета (красный и зеленый), а синего цвета нет), необходимые для выравнивания изображения цвета в соответствии с изображением глубины. Для выравнивания изображений можно использовать узел TOP Remap.
  • Инфракрасное изображение. Необработанное видео инфракрасного датчика камеры Intel® RealSense™.
  • Облако точек. Это в буквальном смысле облако точек в трехмерном пространстве (с координатами X, Y, Z) или точек данных, созданных сканером камеры Intel® RealSense™.
  • UV-карта цветов облака точек. Можно использовать для получения цвета каждой точки из потока цветного изображения.

Примечание. Можно загрузить этот файл RealSensePointCloudForArticle.toe для использования в качестве простого начального шаблона для создания трехмерной анимированной геометрии из данных камеры Intel® RealSense™. Этот файл можно изменять разными способами. Вместе три узла TOP камеры Intel® RealSense™ — Point Cloud, Color и Point Cloud Color UV — позволяют создать трехмерную геометрию из точек (частиц) с наложением цветного изображения. Это открывает множество интересных возможностей.

Геометрия облака точек. Это анимированная геометрия, создаваемая с помощью камеры Intel®RealSense™. Ее очень хорошо использовать при выступлениях на публике. Можно добавить и звук говорящего анимационного персонажа. TouchDesigner* также может использовать звуковые данные для создания анимации в реальном времени.


This short video shows the point cloud geometry animation pictured in the image above.

Узел CHOP камеры Intel RealSense

Примечание. Существует еще один узел CHOP камеры Intel® RealSense™, отвечающий за данные трехмерного отслеживания и положения. Мы обсудим его во второй части этой статьи.

Демонстрация 1. Использование узла камеры Intel® RealSense™ TOP

Для получения первой демонстрации TOP нажмите кнопку в верхней части статьи: settingUpRealNode2b_FINAL.toe.

Демонстрация 1, часть 1. Вы узнаете, как настраивать узел камеры Intel® RealSense™ TOP и соединять его с другими узлами TOP.

  1. Откройте диалоговое окно AddOperator/OPCreate.
  2. В разделе TOP щелкните RealSense.
  3. На странице параметров Setup узла камеры Intel® RealSense™ TOP для параметра Image выберите значение Color в раскрывающемся меню. В узле камеры Intel® RealSense™ TOP отображается изображение того, на что направлена камера, как при использовании обычной видеокамеры.
  1. Задайте для камеры Intel® RealSense™ разрешение 1920 на 1080.
     

    Настроить узел Intel®RealSenseTOP очень просто.

    Создайте узел Level TOP и соедините его с узлом камеры Intel® RealSense™ TOP. На странице параметров Pre узла Level TOP выберите Invert и передвиньте ползунок на значение 1. Соедините узел Level TOP с узлом HSV To RGB TOP, затем соедините последний с узлом Null TOP.

Узел камеры Intel®RealSenseTOP можно соединять с другими узлами TOP для получения нужного изображения и создания нужных эффектов.

Затем мы передадим созданное изображение в узел Phong MAT (материал), чтобы можно было налагать его на различные геометрические фигуры в качестве текстуры.

Использование данных с камеры Intel® RealSense™ для создания текстур для геометрии

Демонстрация 1, часть 2. В этом упражнении показано, как использовать узел камеры Intel® RealSense™ TOP для создания текстур и как добавлять их в узел MAT, чтобы можно было назначать их геометрии в проекте.

  1. Добавьте узел Geometry (геометрия) COMP в сцену.
  2. Добавьте узел Phong MAT.
  3. Возьмите узел Null TOP и перетащите его на параметр Color Map узла Phong MAT.

 


 

Узел PhongMAT использует данные с камеры Intel®RealSense™ для своего параметра ColorMap.

4. На странице параметров Render узла Geo COMP добавьте тип phong1 к параметру Material, чтобы использовать узел phong1 в качестве материала.

  

Узел PhongMAT использует данные с камеры Intel®RealSense™ для своего параметра ColorMap, добавленного в параметр Render/Material узла GeoCOMP.

Создание узла Box SOP и текстурирование с помощью только что созданного шейдера Phong

Демонстрация 1, часть 3. Вы узнаете, как назначить шейдер Phong MAT, только что созданный с помощью данных с камеры Intel® RealSense™, узлу Geometry SOP куба.

  1. Перейдите в узле geo1 на его дочерний уровень (/project1/geo1).
  2. Создайте узел Box SOP, узел Texture SOP и узел Material SOP.
  3. Удалите узел Torus SOP, который там был, затем соедините узел box1 с узлами texture1 и material1.
  4. В параметре Material узла material1 введите ../phong1. Это узел phong1 MAT, созданный на родительском уровне.
Чтобы поместить текстуру на каждую сторону куба, в параметрах Texture/Texture Type узла texture1 поместите face и задайте для параметра the Texture/Offset put значение .5 .5 .5.
 
  1.  
    На дочернем уровне узла geo1 COMP узлы BoxSOP, TextureSOP и theMaterialSOP будут соединены. Узел MaterialSOP теперь получает текстуру из узла phong1 MAT, находящегося на родительском уровне ( …/phong1).
  2.  

 

Анимация и создание экземпляров геометрии узла Box

Демонстрация 1, часть 4. Вы узнаете, как поворачивать узел Geometry SOP с помощью узла Transform SOP и простого выражения. Затем вы узнаете, как создавать экземпляры геометрии узла Box. В результате мы получим экран с множеством вращающихся кубов, на каждом из которых будут текстуры из узла камеры Intel® RealSense™ TOP.

  1. Для анимации вращения куба вокруг оси X вставьте узел Transform SOP после узла Texture SOP.
  1. Поместите выражение в компонент X (первое поле) параметра Rotate в узле transform1 SOP. Это выражение не зависит от кадров, оно будет продолжать работать и не начнет повторяться по окончании кадров на временной шкале. Я умножил значение на 10, чтобы увеличить скорость: absTime.seconds*10
     

    Здесь видно, что куб вращается.

    Для создания кубов перейдите на родительский уровень (/project1) и на странице параметров Instance узла geo1 COMP установите для параметра Instancing значение On. Добавьте узел Grid SOP и узел SOP–DAT. Задайте параметры сетки: 10 строк и 10 столбцов, размер — 20 и 20. В параметрах узла SOP–DAT для SOP задайте grid1 и убедитесь, что для параметра Extract задано значение Points. На странице параметров Instance узла geo1 COMP введите для параметра Instance CHOP/DAT: sopto1.
  2. Заполните параметры TX, TY и TZ, используя соответственно P(0), P(1) и P(2), чтобы указать, какие столбцы из узла sopto1 использовать для положений экземпляров.


     

    Нажмите кнопку в верхней части этой статьи, чтобы загрузить TOP_Demo1_forArticle.toe для просмотра уже выполненной работы в этой первой демонстрации узла камеры Intel®RealSenseTOP.

    Если нужно, чтобы изображение с камеры Intel® RealSense™ передавалось без фильтрации, отключите узлы Level TOP и HSV to RGB TOP либо обойдите эти узлы.
     

Рендеринг и анимация в реальном времени

Демонстрация 1, часть 5. Вы узнаете, как настраивать сцену для рендеринга и выводить изображение в режиме прямого показа или в виде видеофайла.

  1. Для рендеринга проекта добавьте узлы Camera COMP, Light COMP и Render TOP. По умолчанию камера выполняет рендеринг всех компонентов геометрии на сцене.
  2. Отведите камеру назад примерно на 20 единиц по оси Z. Для освещения оставьте значения по умолчанию.
  3. Задайте разрешение рендеринга 1920 на 1080. По умолчанию фон рендеринга является прозрачным (значение альфа равно 0).
  4. Чтобы сделать фон непрозрачным черным, добавьте узел Constant TOP и измените значение параметра Color на 0,0,0, чтобы задать черный цвет, указав для параметра Alpha значение 1. Можно выбрать любой другой цвет.
  5. Добавьте узел Over TOP и соедините узел Render TOP с первым подключением, а узел Constant TOP — со вторым. При этом пиксели фона получат значение (0, 0, 0, 1), то есть перестанут быть прозрачными.

Еще один способ изменить значение прозрачности TOP на 1 — использовать узел Reorder TOP и задать для его параметра Output Alpha значения Input 1 и One.

Отображение сцены с непрозрачным черным фоном.


Здесь виден полный экран с текстурированными вращающимися кубами.

Если вы предпочитаете выводить анимацию в файл вместо воспроизведения ее в реальном времени при демонстрации, нужно выбрать диалоговое окно Exportmovie в разделе file на верхней панели программы TouchDesigner. В параметре узла TOP Video введите null2 для этого конкретного примера. В противном случае введите любой узел TOP, которому требуется рендеринг.

 

Вот панель ExportMovie с узлом null2. Если бы был еще и звуковой узел CHOP, то я бы разместил CHOPAudio сразу под null2.

Демонстрация 1, часть 6. Одна из полезных особенностей платформы TouchDesigner* — возможность создания анимации в реальном времени. Эта возможность особенно удобна при использовании камеры Intel® RealSense™.

  1. Добавьте узел Window COMP, а в параметре оператора введите узел null2 TOP.
  2. Установите разрешение 1920 на 1080.
Выберите нужный монитор в параметре Location. Узел Window COMP позволяет выводить всю анимацию в реальном времени на выбранный монитор. С помощью узла Window COMP можно указать монитор или проектор, на который следует выводить изображение.
  1.  
    Можно создать сколько угодно узлов WindowCOMP для вывода изображения на другие мониторы.

Демонстрация 2. Использование данных глубины узла камеры Intel® RealSense™ TOP

Узел камеры Intel® RealSense™ TOP содержит ряд других настроек для создания текстур и анимации.

В демонстрации 2 мы используем данные глубины для применения размытия к изображению на основе полученных от камеры данных глубины. Для получения этого файла нажмите кнопку в верхней части статьи: RealSenseDepthBlur.toe.

Сначала создайте узел камеры Intel® RealSense™ TOP и задайте для параметра Image значение Depth. Изображение глубины содержит пиксели со значением 0 (черные), если они близко к камере, и со значением 1 (белые), если они далеко от камеры. Диапазон значений пикселей определяется параметром Max Depth, его значение указывается в метрах. По умолчанию этот параметр имеет значение 5. Это означает, что пиксели, находящиеся на расстоянии 5 метров от камеры (или дальше), будут белыми. Пиксели со значением 0,5 находятся на расстоянии 2,5 м от камеры. В зависимости от фактического расстояния между камерой и вами имеет смысл изменить это значение на меньшее. В этом примере мы изменили значение данного параметра на 1,5 м.

Затем нужно обработать глубину, чтобы удалить объекты, находящиеся за пределами интересующей нас дальности. Для этого мы используем узел Threshold TOP.

  1. Создайте узел Threshold TOP и соедините его с узлом realsense1. Нужно убрать все пиксели, находящиеся дальше определенного расстояния от камеры, поэтому задайте для параметра Comparator значение Greater, а для параметра Threshold — значение 0.8. При этом пиксели со значением больше 0,8 (что соответствует расстоянию 1,2 м или более, если для параметра Max Depth в узле камеры Intel® RealSense™ TOP задано значение 1,5) станут равными 0, а все остальные пиксели — равными 1.
     

  2. Создайте узел Multiply TOP, соедините узел realsense1 с первым входом, а узел thresh1 — со вторым входом. При умножении пикселей на 1 они останутся в неизменном виде, а при умножении других пикселей на 0 они будут обнулены. Теперь узел multiply1 содержит только пиксели больше 0 для той части изображения, на которой нужно сделать размытие, чем мы сейчас и займемся.
  3. Создайте узел Movie File в TOP и выберите новое изображение для параметра File. В этом примере мы выбираем Metter2.jpg из папки TouchDesigner* Samples/Map.
  4. Создайте узел Luma Blur TOP и соедините moviefilein1 с первым входом lumablur1, а multiply1 — со вторым входом lumablur1.
  5. В параметрах lumablur1 задайте для параметра White Value значение 0.4, для параметра Black Filter Width значение 20, а для параметра White Filter Width — значение 1. Благодаря этому у пикселей со значением первого входа 0 будет ширина фильтра размытия 20, а у пикселей со значением 0.4 или больше — ширина размытия 1.
     

    Все в целом.

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

 

Фон, выводимый отображением LumaBlurTOP, показывает, насколько размыто изображение.

Демонстрация 3. Использование данных глубины узла камеры Intel® RealSense™ TOP с узлом Remap TOP

Для получения этого файла нажмите кнопку в верхней части статьи: RealSenseRemap.toe.

Примечание. Камеры глубины и цвета узла камер Intel® RealSense™ TOP физически находятся в разных местах, поэтому выдаваемые ими изображения по умолчанию не совпадают друг с другом. Например, если ваша рука находится ровно посередине цветного изображения, то она будет не в середине изображения глубины, а несколько смещена влево или вправо. Сдвиг UV-карты устраняет эту проблему за счет выравнивания и точного наложения пикселей. Обратите внимание на разницу между выровненным и невыровненным узлами TOP.

RemapTOP совмещает данные глубины, полученные от узла камеры Intel®RealSenseTOP, с данными цвета, полученными от этого же узла, используя UV-данные совмещения глубины с цветом на одном и том же пространстве.

Демонстрация 4. Использование облака точек в узле камеры Intel® RealSense™ TOP

Для получения этого файла нажмите кнопку в верхней части статьи: PointCloudLimitEx.toe.

В этом упражнении вы научитесь создавать анимированную геометрию с помощью облака точек, узла камеры Intel® RealSense™ TOP и узла Limit SOP. Обратите внимание, что этот подход отличается от примера файла Point Cloud, приведенного в начале этой статьи. В предыдущем примере используются шейдеры GLSL, что дает возможность создать гораздо больше точек, но эта задача усложняется и выходит за рамки статьи.

  1. Создайте узел RealSense™ TOP и задайте для параметра Image значение PointCloud.
  2. Создайте узел TOP–CHOP и подключите его к узлу Select CHOP.
  3. Подключите узел Select CHOP к узлу Math CHOP.
  4. В параметре TOP узла CHOP topto1 введите: realsense1.
  5. В параметрах Channel Names узла Select CHOP введите rgb, разделив буквы пробелами.
  6. В узле CHOP math1 в поле значения параметра Multiply введите: 4.2.
  7. На странице параметров Range в поле значений параметра ToRange введите: 1 и 7.
  8. Создайте узел Limit SOP.

Цитирую вики-страницу на сайте www.derivative.ca: «Limit SOP создает геометрию из данных, передаваемых узлами CHOP. Он создает геометрию в каждой точке выборки. С помощью параметра Output Type на странице Channels можно создавать геометрию разного типа».

  1. На странице с параметром limit1 CHOP Channels введите r для параметра X Channel, «g» — для параметра Y Channel и «b» — для параметра Z Channel.
     

Примечание. Перемещение значений r, g и b в другие каналы X, Y и Z изменяет образуемую геометрию. Поэтому позднее можете попробовать следующее: На странице параметров Output для параметра Output Type выберите SphereatEachPoint в раскрывающемся списке. Создайте узел SOP–DAT. На странице параметров для SOP введите limit1 или перетащите узел limit1 CHOP в этот параметр. Оставьте значение по умолчанию для Points в параметре Extract. Создайте узлы Render TOP, Camera COMP и Light COMP. Создайте узел Reorder TOP, задайте для Output Alpha значения Input 1 и One, соедините его с узлом Render TOP.

  1. При изменении изображения с камеры Intel®RealSense™ изменяется и геометрия. Это итоговый проект.


    Итоговые изображения в узле OverTOPCHOP. Изменяя порядок каналов в параметрах LimitTOP, вы изменяете геометрию на основе облака точек.

    Во второй части этой статьи мы обсудим узел камеры Intel® RealSense™ CHOP и создание содержимого для записи и демонстрации в реальном времени, демонстрации полусферических панорам и систем виртуальной реальности. Кроме того, мы обсудим использование узла Oculus Rift CHOP. Мы поговорим про отслеживание рук, отслеживание лица и маркеров.

    Об авторе

    Одри Филипс (Audri Phillips) — специалист по визуализации и трехмерной анимации из Лос-Анджелеса. Она располагает обширным профессиональным опытом, включая 25 лет стажа работы в отрасли визуальных эффектов и развлечений в таких анимационных студиях, как Sony*, Rhythm and Hues*, Digital Domain*, Disney* и Dreamworks*. Сначала она занималась рисованием, но быстро перешла к созданию анимационных изображений. Она всегда интересовалась новыми инструментами и применяла компьютерные изображения и анимацию в экспериментальных фильмах, включая демонстрации для погружения в виртуальную среду. Сейчас она работает над системами виртуальной реальности. Корпорация Samsung* недавно использовала ее работы в новом канале виртуальной реальности Gear Indie Milk.

    Вот ее последние работы и анимации: мультимедиа анимации для фестиваля Implosion a Dance Festival в 2015 году в театральном центре Лос-Анджелеса, 3 полусферические демонстрации в куполе Vortex Immersion, над созданием одной из которых также работал известный композитор и музыкант Стив Роуч. 7 ноября 2015 г. вышла четвертая полнокупольная демонстрация под названием Relentless Universe. Помимо этого, она создала анимационные материалы для телесериала «Константин»; они были показаны на конференции Comic-Con 2014 года. Некоторые ее полнокупольные демонстрации, в том числе Migrations и Relentless Beauty, получили оценку жюри на международном фестивале Santa Fe International New Media Festival и на фестивале Jena FullDome Festival в Германии. Она выставляет свои работы в галерее Young Projects в Лос-Анджелесе.

    Она публикует материалы в Интернете и ведет блог на портале корпорации Intel®. Одри — адъюнкт-профессор в Университете Вудбери, член-основатель и лидер организации Los Angeles Abstract Film Group, основатель студии Hybrid Reality Studio (занимающейся созданием материалов для виртуальной реальности), член правления Iota Center, а также участник выставок LA Art Lab. В 2011 году Одри стала постоянным художником Vortex Immersion Media и c3: CreateLAB.

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