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 двухмерной информации разобрались, в следующий раз достанем из шкафа скелет :) Получилось частично избавиться от его искажений, размеры костей теперь фиксированы и могут быть настроены под модель.