« Тяжелое детство, деревянные игрушки. | Радость! Радость! :) » |
Отслеживание движений пользователя в играх
Ну, не всего пользователя, а только его головы. Не Kinect конечно, но для верчения головой в разных авто/авиа-симуляторах (и, местами, в шутерах) вполне хватает.
В оригинале девайс зовется TrackIR. На монитор вешается типа специально обученный сенсор, на голову (кепку, наушники, etc.) крепится датчик. Позволяет отслеживать повороты головы в стороны, наклон вперед-назад и в стороны, и смещения в стороны/вверх-вниз/вперед-назад, т.е. 6 степеней свободы. Поддерживается неплохим списком игр. Стоит от $120 и нужно еще найти где купить.
А еще есть замечательный проект FreeTrack, который делает все то же самое с помощью обычной вэб-камеры, светодиодов и свободной софтовой части. "Все то же самое" включает в себя поддержку программного интерфейса TrackIR, т.е. софт (игры), работающий с первым, разницы не заметит. Ну и на всякий случай позволяет эмулировать и джойстик с мышью. Поскольку я последнее время развлекаюсь с рулем и 3D Инструктор'ом (который с TrackIR работает), решил заценить.
Итак, нужна камера и несколько светодиодов. Камера практически любая, но лучше все таки не самую дешевую. На офсайте рекомендуют что-нибудь поддерживающее захват в 352x288 30fps в формате I420, с широким углом обзора, возможностью отключения автоэкспозиции и легко удаляемым ИК-фильтром. Засада в том, что на упаковках подобные возможности не указывают, так что или шерстить нэт в поисках варианта, или угадывать. У меня же в наличии оказалась Logitech C100 - не идеално подходит, но вполне себе вариант, только драйвера нужно логитеховские ставить, а не то, что винда поставит сама. Камеру нужно будет слегка "доработать напильником". Светодиоды... Лучше всего инфракрасные, 3 штуки. Но можно красные, можно белые (но тут как повезет), можно один, можно 4. И, разумеется, светики нужно чем-то запитать. Еще будет нужен фильтр видимого света, который ИК пропустит, а остальное заглушит. Офсайт говорит, что в этом качестве неплохо работают дискеты или несколько слоев засвеченной и проявленной фотопленки.
Итак. Если будем использовать ИК-светодиоды (а это лучше всего), камера потребует некоторой модернизации. Если кто не в курсе, сенсоры видеокамер (и web-камер в том числе) восприимчивы к ИК-диапазону едва ли не сильнее, чем к видимому. Но в повседневном использовании это только мешает, поэтому во всех камерах (ну, за редким исключеним) стоят фильтры ИК-свет не пропускающие. Если камера попалась ночная, то фильтра у нее скорее всего нету, за то есть ИК подсветка и светодиоды возможно вообще не понадобятся. Но ее мы пока рассматривать не будем.
Значит, модернизируем Logitech C100. Берем камеру и откручиваем сзади два шурупа.
Снимаем крышку (и кнопку, дабы не потерять) и видим плату камеры. Откручиваем линзу и еще два шурупа, снимаем плату и с обратной стороны видим еще пару шурупов, которые держат крепеж линзы. Их тоже откручиваем и крепеж снимаем. Помимо шурупов, он держится на плате еще и за счет липучки, так что для придется приложить некоторое усилие, достаточное для отрыва крепежа, но недостаточное для повреждения остальных элементов. Осторожно, прямо под ним находится светочувствительная матрица, т.е. смысл существования всей камеры.
Сняли крепеж линзы и перевернули его. Собственно, розовенькое стеклышко посредине и есть тот самый ИК-фильтр. В том или ином виде он есть у любой камеры (опять же, кроме ночных), и если в другой камере найти его не получается, значит нужно искать лучше. Пожалуй худший вариант, если фильтр сделан покрытием на линзе - это будет хитрая процедура удаления покрытия без повреждения самой линзы. Но здесь все по простому - убираем это стекло.
Устанавливаем крепеж на место, прикручиваем его, прикручиваем на место плату, подключаем камеру. Затем вкручиваем на место линзу и подкручиваем ее до получения четкой картинки. Это нужно сделать сейчас, т.к. потом камера уже практически ничего не покажет.
А не покажет она потому, что теперь мы поставим ей фильтр видимого света. Без него на изображении будет слишком много деталей, более или менее ярких, а для уверенного отслеживания нужны четкие маркерные точки. Так что или фильтр, или играть в темноте. Для установки фильтра нужно раскурочить дискету и вырезать из нее кружок, который встанет в переднюю часть корпуса перед линзой. После этого ставим на место кнопку, закрываем корпус и закручиваем.
Ну и собственно, результат сего действа. Как камера видела пульт ДУ (т.е. его ИК-светодиод) до всех модификаций, после снятия ИК-фильтра и после установки фильтра видимого света.
Про то, что делать дальше, в следующий раз