TouchDesigner компании Derivative — популярная платформа и программа, используемая во всем мире для создания интерактивных решений и анимации реального времени в ходе выступлений, а также для отображения трехмерной анимации, создания карт и схем, а также с недавнего времени в системах виртуальной реальности. Благодаря поддержке камеры Intel RealSense TouchDesigner становится еще более многоцелевым и мощным средством. Следует отметить и возможность импортировать в TouchDesigner объекты и анимацию из других трехмерных пакетов с помощью файлов .fbx, а также возможность работать с уже рендеринговыми анимационными роликами и изображениями.
В этой статье, состоящей из двух частей, я расскажу об интеграции камеры Intel RealSense в TouchDesigner и о возможностях ее использования. В демонстрациях в первой части используется камера Intel RealSense с узлами TOP. В демонстрациях во второй части используются узлы CHOP. Во второй части также поясняется создание последовательностей виртуальной реальности и полукруглых панорам с использованием камеры 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* и вы собираетесь постепенно разбираться в этой статье, то рекомендую сначала просмотреть документацию, доступную здесь.
Примечание. При использовании камеры 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* также может использовать звуковые данные для создания анимации в реальном времени.
Узел CHOP камеры Intel RealSense
Примечание. Существует еще один узел CHOP камеры Intel RealSense, отвечающий за данные трехмерного отслеживания и положения. Мы обсудим его во второй части этой статьи.
Демонстрация 1. Использование узла камеры Intel RealSense TOP
Для получения первой демонстрации TOP нажмите кнопку в верхней части статьи: settingUpRealNode2b_FINAL.toe.
Демонстрация 1, часть 1. Вы узнаете, как настраивать узел камеры Intel RealSense TOP и соединять его с другими узлами TOP.
1. Откройте диалоговое окно Add Operator/OP Create.
2. В разделе TOP щелкните RealSense.
3. На странице параметров Setup узла камеры Intel RealSense TOP для параметра Image выберите значение Color в раскрывающемся меню. В узле камеры Intel RealSense TOP отображается изображение того, на что направлена камера, как при использовании обычной видеокамеры.
4. Задайте для камеры Intel RealSense разрешение 1920 на 1080.
Настроить узел Intel RealSense TOP очень просто.
5. Создайте узел Level TOP и соедините его с узлом камеры Intel RealSense TOP.
6. На странице параметров Pre узла Level TOP выберите Invert и передвиньте ползунок на значение 1.
7. Соедините узел Level TOP с узлом HSV To RGB TOP, затем соедините последний с узлом Null TOP.
Узел камеры Intel RealSense TOP можно соединять с другими узлами TOP для получения нужного изображения и создания нужных эффектов.
Затем мы передадим созданное изображение в узел Phong MAT (материал), чтобы можно было налагать его на различные геометрические фигуры в качестве текстуры.
Использование данных с камеры Intel RealSense для создания текстур для геометрии
Демонстрация 1, часть 2. В этом упражнении показано, как использовать узел камеры Intel RealSense TOP для создания текстур и как добавлять их в узел MAT, чтобы можно было назначать их геометрии в проекте.
1. Добавьте узел Geometry (геометрия) COMP в сцену.
2. Добавьте узел Phong MAT.
3. Возьмите узел Null TOP и перетащите его на параметр Color Map узла Phong MAT.
Узел Phong MAT использует данные с камеры Intel RealSense для своего параметра Color Map.
4. На странице параметров Render узла Geo COMP добавьте тип phong1 к параметру Material, чтобы использовать узел phong1 в качестве материала.
Узел Phong MAT использует данные с камеры Intel RealSense для своего параметра Color Map, добавленного в параметр Render/Material узла Geo COMP.
Создание узла 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, созданный на родительском уровне.
5. Чтобы поместить текстуру на каждую сторону куба, в параметрах Texture/Texture Type узла texture1 поместите face и задайте для параметра the Texture/Offset put значение .5 .5 .5.
На дочернем уровне узла geo1 COMP узлы Box SOP, Texture SOP и the Material SOP будут соединены. Узел Material SOP теперь получает текстуру из узла phong1 MAT, находящегося на родительском уровне ( …/phong1).
Анимация и создание экземпляров геометрии узла Box
Демонстрация 1, часть 4. Вы узнаете, как поворачивать узел Geometry SOP с помощью узла Transform SOP и простого выражения. Затем вы узнаете, как создавать экземпляры геометрии узла Box. В результате мы получим экран с множеством вращающихся кубов, на каждом из которых будут текстуры из узла камеры Intel RealSense TOP.
1. Для анимации вращения куба вокруг оси X вставьте узел Transform SOP после узла Texture SOP.
2. Поместите выражение в компонент X (первое поле) параметра Rotate в узле transform1 SOP. Это выражение не зависит от кадров, оно будет продолжать работать и не начнет повторяться по окончании кадров на временной шкале. Я умножил значение на 10, чтобы увеличить скорость: absTime.seconds*10
Здесь видно, что куб вращается.
3. Для создания кубов перейдите на родительский уровень (/project1) и на странице параметров Instance узла geo1 COMP установите для параметра Instancing значение On.
4. Добавьте узел Grid SOP и узел SOP–DAT.
5. Задайте параметры сетки: 10 строк и 10 столбцов, размер — 20 и 20.
6. В параметрах узла SOP–DAT для SOP задайте grid1 и убедитесь, что для параметра Extract задано значение Points.
7. На странице параметров Instance узла geo1 COMP введите для параметра Instance CHOP/DAT: sopto1.
8. Заполните параметры TX, TY и TZ, используя соответственно P(0), P(1) и P(2), чтобы указать, какие столбцы из узла sopto1 использовать для положений экземпляров.
9. Если нужно, чтобы изображение с камеры 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.
Отображение сцены с непрозрачным черным фоном.
Здесь виден полный экран с текстурированными вращающимися кубами.
Если вы предпочитаете выводить анимацию в файл вместо воспроизведения ее в реальном времени при демонстрации, нужно выбрать диалоговое окно Export movie в разделе file на верхней панели программы TouchDesigner. В параметре узла TOP Video введите null2 для этого конкретного примера. В противном случае введите любой узел TOP, которому требуется рендеринг.
Вот панель Export Movie с узлом null2. Если бы был еще и звуковой узел CHOP, то я бы разместил CHOP Audio сразу под null2.
Демонстрация 1, часть 6. Одна из полезных особенностей платформы TouchDesigner* — возможность создания анимации в реальном времени. Эта возможность особенно удобна при использовании камеры Intel RealSense.
1. Добавьте узел Window COMP, а в параметре оператора введите узел null2 TOP.
2. Установите разрешение 1920 на 1080.
3. Выберите нужный монитор в параметре Location. Узел Window COMP позволяет выводить всю анимацию в реальном времени на выбранный монитор. С помощью узла Window COMP можно указать монитор или проектор, на который следует выводить изображение.
Можно создать сколько угодно узлов Window COMP для вывода изображения на другие мониторы.
Демонстрация 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.
Все в целом.
В результате получаем изображение, где пиксели, на которых находится пользователь, не размыты, а все остальные пиксели размыты.
Фон, выводимый отображением Luma Blur TOP, показывает, насколько размыто изображение.
Демонстрация 3. Использование данных глубины узла камеры Intel RealSense TOP с узлом Remap TOP
В архиве мы будем использовать файл RealSenseRemap.toe.
Примечание. Камеры глубины и цвета узла камер Intel RealSense TOP физически находятся в разных местах, поэтому выдаваемые ими изображения по умолчанию не совпадают друг с другом. Например, если ваша рука находится ровно посередине цветного изображения, то она будет не в середине изображения глубины, а несколько смещена влево или вправо. Сдвиг UV-карты устраняет эту проблему за счет выравнивания и точного наложения пикселей. Обратите внимание на разницу между выровненным и невыровненным узлами TOP.
Remap TOP совмещает данные глубины, полученные от узла камеры Intel RealSense TOP, с данными цвета, полученными от этого же узла, используя UV-данные совмещения глубины с цветом на одном и том же пространстве.
Демонстрация 4. Использование облака точек в узле камеры Intel RealSense TOP
В архиве мы будем использовать файл PointCloudLimitEx.toe.
В этом упражнении вы научитесь создавать анимированную геометрию с помощью облака точек, узла камеры Intel RealSense TOP и узла Limit SOP. Обратите внимание, что этот подход отличается от примера файла Point Cloud, приведенного в начале этой статьи. В предыдущем примере используются шейдеры GLSL, что дает возможность создать гораздо больше точек, но эта задача усложняется и выходит за рамки статьи.
1. Создайте узел RealSense TOP и задайте для параметра Image значение Point Cloud.
2. Создайте узел TOP–CHOP и подключите его к узлу Select CHOP.
3. Подключите узел Select CHOP к узлу Math CHOP.
4. В параметре TOP узла CHOP topto1 введите: realsense1.
5. В параметрах Channel Names узла Select CHOP введите r g b, разделив буквы пробелами.
6. В узле CHOP math1 в поле значения параметра Multiply введите: 4.2.
7. На странице параметров Range в поле значений параметра To Range введите: 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 выберите Sphere at Each Point в раскрывающемся списке. Создайте узел SOP–DAT. На странице параметров для SOP введите limit1 или перетащите узел limit1 CHOP в этот параметр. Оставьте значение по умолчанию для Points в параметре Extract. Создайте узлы Render TOP, Camera COMP и Light COMP. Создайте узел Reorder TOP, задайте для Output Alpha значения Input 1 и One, соедините его с узлом Render TOP.
При изменении изображения с камеры Intel RealSense изменяется и геометрия. Это итоговый проект.
Итоговые изображения в узле Over TOP CHOP. Изменяя порядок каналов в параметрах Limit TOP, вы изменяете геометрию на основе облака точек.
Во второй части этой статьи мы обсудим узел камеры Intel RealSense CHOP и создание содержимого для записи и демонстрации в реальном времени, демонстрации полусферических панорам и систем виртуальной реальности. Кроме того, мы обсудим использование узла Oculus Rift CHOP. Мы поговорим про отслеживание рук, отслеживание лица и маркеров.