28 ноября 2011 г.

Стереоскопическое

Неожиданно пришла идея — а что если сделать стерео отрисовку и посмотреть что получится на экране нового телевизора c пассивным 3D? Всегда относился к этой фиче скептически, но именно с поляризационной технологией смотреть киношки в 3D мне понравилось. Хотя, возможно на моё мнение повлиял удобный диван и вкусный кофе с молоком... Может быть :)

Итак, встроенный плеер умеет показывать стерео изображение из анаморфных вертикальной или горизонтальной стереопары. Значит кадрам придётся потесниться и влезть в максимальные для телевизора 1920 x 1080 с неизбежной потерей качества.

Используем:
  • два RenderTarget-а для отрисовки кадров для левого и правого глаза, по одной из сторон в два раза меньше экрана 
  • реализацию направленной камеры с двумя матрицами вида

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


Подключаемся к телевизору по HDMI, включаем 3D и надеваем очки. Для демонстрации эти же кадры в режиме вычитания:


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

26 ноября 2011 г.

Who Wants to Be a Dude?

Что-то давно я ничего не писал и не показывал, мне стыдно, надо исправляться :)

Довёл до ума преобразование точек (именно в таком виде можно получать информацию о скелете от Kinect) в кости с неплохим определением их положения в пространстве. С этим была связана некоторая проблема, которую побороть так и не удалось, зато удалось сделать её незаметной. Кстати, если кто-то знает лучшее решение — огромная просьба просветить. 

Мне кажется получилось весьма неплохо, к тому же есть куча возможностей для дополнительного сглаживания результата — это и настройки в самом SDK, и интерполяция точек и кватернионов. Первый скелет рисуется линиями,  можно сказать что это правильно соединённые начальные данные от Kinect, здесь заметно некоторое подёргивание. Если джоинт не удалось рассчитать и он достроен автоматически — линия становится красной. Третий скелет — демонстрация построенных костей с изменёнными пропорциями. И, наконец, центральным персонажем является небезызвестный Dude из примеров c App Hub, с настройкой работы с которым пришлось повозиться. Из-за фиксированных костей таза возникли проблемы с ногами, стопы спасти так и не удалось :) С правильным скелетом всё было бы отлично.




Думаю вполне имеет право на жизнь, а если ещё реализовать совмещение анимаций и корректировку движений в сохранённой анимации — совсем красота будет. Такой вот бюджетный Motion Capture ;)

10 ноября 2011 г.

XNA и Windows Forms

Как-то выкладывал на форуме xnadev.ru ссылку на наш пример реализации работы XNA на форме. Чтобы эта ссылка совсем не затерялась:

В Visual Studio 2010 в этом примере появился глюк, не дающий изменять иконки и изображения на контролах стандартными средствами. Побороть всё как-то недосуг :)

9 ноября 2011 г.

Обновление примера: второй заход

Оказалось что с примером всё не так радужно как того бы хотелось и у него со второй бетой потекла память из-за пересоздания текстур. Исправил и адаптировал:

8 ноября 2011 г.

Kinect for Windows SDK BETA 2

Вышла вторая бета-версия SDK. Все старые проекты переносятся совершенно безболезненно, достаточно заменить библиотеку в References.

Заметно что навели порядок в структуре SDK, упростили работу с несколькими устройствами, добавили отслеживание их состояний — в целом программный интерфейс стал гораздо правильнее. Самое главное — скелет распознаётся быстрее и точнее, теперь эта задача распараллеливается по ядрам. Количество кадров в секунду от сенсора глубины и движка обработки скелетов стало выше — соответственно, увеличилась скорость реакции и можно добиться отсутствия задержекИнициализация устройства также происходит быстрее.


P.S. Нет, светодиодом нам так и не дают поморгать :( Видимо эта важная фича будет только в коммерческой версии (ждём в начале 2012 года).


Update: обработку ошибок всё-таки придётся адаптировать под эту версию. И не только.

5 ноября 2011 г.

Обновление примера

Обновил пример к статье по основам взаимодействия Kinect и XNA, добавил получение кадров глубины с подсветкой людей и сделал небольшие изменения:

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

30 октября 2011 г.

The Xnatrix: премьерный трейлер

Наконец-то сделал давно обещанное видео :) Естественно не обошлось без проблем — съёмка экрана в большом разрешении очень сильно убивает производительность обработки скелета (и это на четырёхъядерном i7-860...) и его совершенно перестаёшь контролировать. Промучившись несколько десятков неудачных дублей я всё-таки снизил разрешение и добился терпимой производительности. Поэтому заранее извиняюсь за не самую лучшую чёткость и небольшие проблемы с управлением из-за глюков скелета. Зачем мне понадобилось обрабатывать скелет? Смотрите сами :)


Update: 
Не знаю даже чем это можно объяснить, но после последовательного изменения параметров (сглаживание движений скелета, вертикальная синхронизация и т.п.  с замером количества кадров и обновлений в секунду) и возвращения изначальных значений, количество кадров от расчитывалки скелета при записи видео перестало падать до 115 в секунду и стала возможна вполне нормальная запись в 1920 х 1080. Количество отрисовок при записи стабильно уменьшается в два раза до 30 кадров в секунду. Лишних процессов не было запущено ни тогда, ни сейчас.

21 октября 2011 г.

Kinect и XNA: первая кровь

Итак, наконец-то оторвавшись от Rage, продолжим :) Крови сегодня не будет (да, «все врут»), зато будет первый код: мы посмотрим как получать кадры от камеры и сенсора глубины, а также повертим «головой» Kinect вверх-вниз из кода на C# в нашем XNA-приложении. Соответственно, кроме описанных ранее требований, нам также понадобится XNA Game Studio (я использую 4.0, хотя она уже обновилась — разницы в коде для нас быть не должно).


Для самых нетерпеливых:

10 октября 2011 г.

Kinect и XNA: установка SDK BETA

Первое что нам понадобится для начала экспериментов — это сам Kinect. Его можно взять из набора Xbox 360 + Kinect или купив контроллер отдельно. Причём в первом случае понадобится докупить специальный адаптер, т.к. для подключения Kinect к новым версиям консоли используется модифицированный USB-разъём c дополнительными контактами для питания сервопривода, тогда как в комплект продаваемого отдельно контроллера этот адаптер включен изначально для совместимости со старыми консолями (и, с некоторых пор, с PC).

Также понадобится Kinect for Windows SDK BETA. Не подключайте контроллер до окончания установки SDK, если до этого были установлены другие драйверы — нужно их полностью удалить. И не забудьте закрыть Visual Studio.

8 октября 2011 г.

Kinect и XNA: дополнение к обзору

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

7 октября 2011 г.

Kinect и XNA: обзор

Прошёл почти год с момента начала продаж Kinect  «контроллера без контроллера» от фирмы Microsoft, созданного для увеличения интереса к консолям Xbox 360. В течение первых 60 дней было продано более 8 млн. устройств, таким образом, Kinect попал в Книгу рекордов Гиннеса как «самое быстропродаваемое потребительское электронное устройство в истории».
 
Не удивительно что контроллер стал объектом пристального внимания энтузиастов, решивших использовать сенсор не по инструкциям в руководстве пользователя. Это привело к появлению большого числа различных «хаков», использующих возможности устройства на других платформах при помощи одного из наборов open-source драйверов. Оценив работу энтузиастов и перспективность этого направления, Microsoft решает добавить официальную поддержку работы Kinect с Windows 7 и 16 июня 2011 года выпускает бета-версию SDK, позволяющего .NET разработчикам использовать устройство в своих некоммерческих приложениях на С++/CLI, C# или Visual Basic .NET.