Собираем за один вечер Virtual Reality шлем своими руками, с HD изображением и трекингом головы

Практически не осталось уже людей, которые бы не слышали о виртуальной реальности, и, наверное все уже слышали о VR-шлеме Oculus Rift, который можно сказать стал стандартом для подобного рода устройств. Так же на рынке есть решения, позволяющие использовать экран смартфона диагональю 4-5" в качестве экрана VR-очков, такие как Durovis Dive или нашумевший Google Cardboard, которые снизили планку демократичности вхождения в виртуальную реальность можно сказать уже для всех, но, тем не менее, пока что эта технология не стала повсеместной: не у всех есть смартфон с нужной диагональю, чтобы воспользоваться тем же картонным проектом гугла, покупать пусть не дорогое, но стоящее денег устройство типа Durovis Dive без какого либо понимания, что с ним конкретно делать дальше, а тем более заказывать и ждать сам шлем Oculus Rift простому обывателю довольно проблематично по многим причинам — начиная от цены за устройство, что делать с которым пока не совсем понятно и заканчивая довольно длительным ожиданием доставки заказа. Естественно, самым главным тормозом, помимо цены, является обычная лень и потухшая любознательность.

В этой статье я расскажу вам о своем пути к виртуальной реальности, опишу детальное и практически исчерпывающее руководство по изготовлению VR-шлема с использованием любого относительно современного андроид-смартфона или планшета любой диагонали, этот проект обойдется примерно в 5-8 часов работы и в 500-2000 рублей затрат, в зависимости от ваших пожеланий и возможностей, а на выходе вы получите очень интересное устройство, которое позволит вам смотреть fullHD 3D фильмы и фотографии, играть в андроид-игры а также использовать шлем для игр в ваши любимые PC-игры любой степени современности. Да, с трекингом головы и погружением в VR.

Поэтому, если вами не овладевает лень и вы любознательны, прошу под кат, но предупреждаю, статья наполнена тремя десятками «potato quality» изображений, общим весом на 4 мегабайта.

В недавней статье про Google Cardboard читатели восхищались такой простой и интересной концепцией — шлем из картона с парой линз, вставь свой смартфон и полетели, но у многих возникли вопросы «как сделать под другую диагональ», «как установить туда планшет», и, самое главное — «почему мне плохо видно этот ваш 3D». Меня, как владельца 6,4" смартфона Sony Xperia Z Ultra эти вопросы также заинтересовали, особенно после того, как моему знакомому приехала посылка со свежевыпущенным Durovis Dive, куда, как и в картонный шлем гугла, можно установить устройства только в районе пяти дюймов по диагонали, и он подарил мне пару линз, которые купил для изготовления собственного шлема.

Попытка прислонить мой смартфон к дуровис-дайву успехом не увенчалась — что-то, конечно, было видно, но до 3D или хотя бы даже приемлемой картинки было далеко, а виртуальной реальностью и не пахло. При этом четвертый нексус, установленный в это устройство показал неплохие результаты, но разрешение в 1280х720 пикселей также не позволило в полной мере ощутить погружение.

Так, имея на руках смартфон, пару линз и некоторый оптимизм, я решил потратить немного времени на изготовление шлема VR. Если у вас подобный шлем уже есть, собственной разработки, гугл-кардборд или дуровис-дайв, и вам неинтересно читать мой опыт изготовления — можно проследовать сразу к описанию возможностей по применению, уверен, это будет вам интересно.

Инструменты и материалы, необходимое оборудование для изготовления шлема


Итак, первое, что нам понадобится, это fullHD смартфон или планшет с операционной системой Android, чем современнее, тем лучше, при этом, диагональ, по большей части, не важна. Самое большое значение имеет длинная сторона экрана — она не должна быть сильно меньше, чем удвоенное расстояние между вашими зрачками, но и не должна быть сильно больше — центр каждой половины кадра должен попадать в центр зрачка, этот параметр регулируется сближением и удалением линз друг от друга, и тут есть свои подводные камни. Для справки, диагональ используемого в описываемом шлеме смартфона составляет 162 мм, а длинная сторона — 142 мм.

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





На теме выбора и поиска линз, и вообще оптической системы я не буду останавливаться подробно, потому как описать полностью эту обширную тему в данной статье проблематично, существует масса вариантов, и какой из них будет у вас — мне неизвестно. В моем случае, пара увеличительных стекол были куплены в хозяйственном магазине по 160 рублей, вот такие:



При пробах и первоначальных настройках было решено разобрать их корпуса, и каково же удивление — в каждой такой лупе оказалось по паре одинаковых (во всяком случае неотличимых невооруженным взглядом) линз диаметром 50 мм и толщиной около 8-9 мм, с ними и будем работать.

Собственно, для изготовления шлема вам потребуются следующие материалы и инструменты из ближайшего хозяйственного магазина, в моем случае это был Leroy Merlin:

1. Пенопласт строительный, средней плотности, 20 мм толщиной — 0,5 м2, 60р за лист



2. Вспененный полиэтилен, 20 мм толщиной — 0,8 м2, 80р за лист



3. Рулон двустороннего скотча и лист микрогофрированного картона 2мм — 60р за всё



4. Широкая резинка или ремень, можно с «липучкой» велкро — 50р за всё



5. Набор инструментов для черчения и нарезки материалов — 100р за всё



6. Скотч, или в моем случае виниловая пленка в ассортименте — 100р за всё



Скажу сразу, покупая материалы я не знал нужного расхода, но по оценкам на глазок, купленных по одному листу пенопласта и полиэтилена должно было хватить на 3-4 таких шлема, и меньшими объемами всё это не продавалось. Это не беда, перед началом работ просто помните следующий полезный навык — кроите и режьте смело ровно половину материала, не бойтесь выкидывать и пробовать снова — материалы стоят копейки, а ваше удобство внутри шлема — бесценно, поэтому лучше переделать деталь более удобно, чем терпеть потом натирающую поверхность или сдавливающий, или наоборот, слишком свободный размер полученного поделия.

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

Программы и файлы для проверки работоспособности


1. MX Player 1.7.28 — этот бесплатный плеер позволяет проигрывать требуемые файлы с нужным соотношением сторон, и кодек к нему, в зависимости от типа процессора

2. Любые 3D видеофайлы, записанные в режиме side-by-side, это могут быть фильмы, передачи и что угодно еще, ищите SBS HD в сети

3. Если найти фильм в формате SBS вам оказалось затруднительно, есть два замечательных плеера Go Show и SBS-Player — первый в бесплатном режиме показывает опенсурсный мультфильм Elephant Dream, а второй — может воспроизводить любые обычные видеофайлы так, что они будут отображаться в режиме SBS — то есть вы не увидите 3D, но зато сможете настроить фокусировку и смещения линз, а внутри шлема вы будете видеть так, будто смотрите обычный фильм с очень большого экрана

4. Конечно, еще можно будет установить любые приложения вот из этих списков и воспользоваться ими, но лично мне этот вариант удобным для настройки не показался, но вам, тем не менее, стоит их попробовать, чтобы знать о чем идет речь:
www.divegames.com/games.html
www.refugio3d.net/downloads/

Итак, вы скачали и опробовали описанные выше методы, и выбрали наиболее подходящий лично вам для быстрой работы. Давайте условимся, что у вас смартфон или планшет с 6-7" диагональю, две пары линз (можно пробовать и с одной парой, но моя схема всё же из двух, возможны расхождения, используйте на свое усмотрение), установлены программы и приобретены материалы с инструментами. Первым этапом будет изготовление первой оправы для первой пары линз. Я сделал ее из пенопласта, и по идее, неплохо было бы иметь под рукой центробур, хоть даже по бетону, которым врезают розетки, а вообще подойдет любой, типа раздвижной фрезы по дереву или даже циркуль. У меня под рукой ничего этого не оказалось, поэтому вырезать круглые отверстия пришлось канцелярским ножом Уолтера Уайта, что при диаметре линз меньшим чем у меня — будет уже совсем неопрятно. Итак, первая заготовка — это оправа для двух линз, как на картинке ниже.



Для того, чтобы ее изготовить, вам потребуется положить смартфон на стол экраном вверх, наклониться над ним, и взяв в руки линзы, поднести их к глазам, пытаясь найти фокусное расстояние. Стремиться нужно к минимальному расстоянию между лицом и экраном, так, чтобы он помещался в «объектив» и наблюдался эффект 3D. Если этот эффект не наблюдается, сдвинут или искажен, не отчаивайтесь, для начала будет достаточно понять фокусное расстояние, а точнее — величину, на которую нужно удалить линзы от смартфона. А что насчет расстояния между линзами в этой паре? Все просто — найдите величину, которая находится посередине между расстоянием между зрачками, и расстоянием между центрами половинок кадра (половина длинной стороны экрана). Скажем, между глаз у нас 65 мм, а экран 135 мм, его половина — 67,5 мм значит вам нужно расставить центры линз примерно на 66 мм, для первого приближения этого достаточно.



Теперь, после того как разметили нужные расстояния, вырезаем отверстия для линз. Примерно оценив плотность пенопласта, я посчитал, что её хватает для крепкой установки линзы, если делать отверстие под неё диаметром слегка меньшим, чем сама линза, я уменьшил вырезаемый круг на 2мм по диаметру, что прекрасно совпало с предположением. У вас параметры могут быть другими, но суть та же — делайте отверстия чуть меньше. Утопить линзу нужно неглубоко, я утопил на 2 мм, ниже будет понятно зачем, ну и наверное нет необходимости упоминать, что линзы было бы неплохо разместить в одной плоскости, то есть следует их обе утопить равномерно.

Первый этап закончен, теперь у нас есть макет расстояния «экран-линзы», и можно двигаться дальше. Помните, что я говорил о двух парах линз? Они, возможно, не так сильно важны в оптическом смысле (на самом деле важны), но бесценны для дальнейшей настройки. Допустим, вы установили первую пару линз как описано выше, включили на смартфоне 3D изображение (игру, фильм, на ваш выбор), и пытаетесь найти трехмерность. Одна пара линз мне этого сделать вот так с наскоку не дала. Но когда я поднес к глазам вторую пару, и поиграв в расстояниями нашел нужное положение — на экране сразу получилось трехмерное изображение. Чтобы этого добиться, вам нужно одновременно двигать линзы относительно экрана, в плоскости параллельной этому экрану и первой паре линз, вверх-вниз и в стороны. Найдите в изображении деталь, по которой можно отследить параллакс-эффект, сфокусируйтесь на ней и попытайтесь соединить изображения в каждом глазе, чтобы они совпали. При некоторой сноровке это делается очень быстро, но способа ускорить этот процесс я вам, к сожалению, подсказать не смогу. Мне — помог вот такой стенд для испытаний, здесь нижняя пара линз уже в пенопласте и настроена на экран, а верхнюю пару, обрамленную в полиэтилен, притом каждую линзу — раздельно, я двигал перед глазами, в поисках «стерео», а подо всей конструкцией — экран на нужной высоте:



Рано или поздно у вас получится свежее, сочное, модное молодежное 3D, но, из-за ввода в схему второй оптической пары — первая настройка фокуса немного собьется. Пугаться не надо, все что требуется — перенастроить фокус еще раз. Для этого сначала нужно сделать оправу для второй пары линз, которые вы только что настраивали. Мой совет такой — сначала скопируйте вашу первую оправу с поправкой на изменившееся расстояние между линзами, а потом — визуально оцените расстояние между первой и второй парой линз, после того, как вы настроили трехмерность. Достаточно будет на глаз, а сравнивать это расстояние следует с толщиной материала — ну буквально, больше ли расстояние между парами, или меньше, чем толщина пенопласта. Если меньше — всё просто, вам нужно будет установить линзы во вторую оправу чуть глубже, на требуемую величину, в случае же, если это расстояние больше толщины пенопласта — вы можете просто перевернуть первую оправу более утопленной стороной к себе, таким образом вам не придется городить огород из прокладок между двумя оправами. В моем случае так и произошло, я перевернул первую оправу наоборот, сложил эти оправы более утопленными сторонами друг к другу, и немного утопил линзы внутрь с каждой стороны.



Итак, у нас получилось оптическое устройство, позволяющее рассмотреть 3D на экране смартфона. Но, конечно, мы помним про фокус, который изменился сначала вводом второй пары линз, а потом еще и переворотом первой пары другой стороной, поэтому фокусировку нужно настроить еще раз. Когда путем нехитрых передвижений вы поймаете фокус, вам нужно будет заметить это расстояние, и изготовить пенопластовые подпорки такой высоты, чтобы установив вашу первую оправу над экраном — изображение в линзах было сфокусированным.

Тут нужно сказать следующее, на мой взгляд важное свойство, я точно не уверен в его природе, но наблюдал неоднократно у подопытных. Многие действия в жизни требуют неоднократного подхода, использования метода приближения и итераций. Это, видимо, не всем понятно, но почти всегда этот метод работает, и дает более качественный результат, если следовать простому алгоритму — пробуй и улучшай. Вот и в случае с этим шлемом — та же история, возможно, с первого раза у вас не получится сделать две правильные пары оправ, я, например, переделывал одну пару трижды, а вторую — дважды, и уже знаю, что буду переделывать ещё, потому что есть идеи улучшений. Но с каждым переделыванием качество возрастало и картинка становилась лучше, поэтому, если вы сделали пару подходов, но у вас «ничего не получилось» — не отчаивайтесь, передохните и начните снова, продолжайте. Результат того стоит.

Небольшой хинт — если полученный окуляр (так я буду называть блок из двух пар линз и их оправ, собранный вместе) имеет хорошее стерео-изображение, но фокусное расстояние сильно выросло относительно первых приближений, разберите окуляр пополам на две оправы и поиграйте с расстояниями, возможно найдется более оптимальное — может быть нужно будет перевернуть один из окуляров наоборот, а может, разнести их подальше друг от друга. Помним, что нужно добиться максимального количества полезных пикселей (а то будет малоинформативно) и минимального расстояния от экрана (а то будет громоздко). Если же у вас прекрасное, чудесное фокусное расстояние, а стереобаза почему-то не удалась — аккуратно разрежьте ножом пенопласт посередине между линзами и посмотрите — вам нужно раздвигать их, или сближать, и там уже действуйте по обстановке. Грубо говоря, у вас будет два окуляра, под каждый глаз — свой, их и подстраивайте, а когда получится — склейте их между собой двусторонним скотчем.

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

Макетная сборка шлема


Найдя общее фокусное расстояние от окуляра к экрану, нам предстоит сделать на его базе коробку, и тут вариантов — еще больше, чем на этапе линз. Но, сейчас у вас на руках «сердце», а точнее «глаза» устройства, и самая сложная его деталь, значит далее будет проще. Допустим, у вас получилось сделать всё вышеописанное верно, и вы можете, приложив окуляры к глазам и наклонившись над смартфоном уверенно наблюдать 3D изображение. Вдоволь поигравшись этим демо-макетом, вы наверняка заметите кое-какие особенности расположения линз и удобства окуляров, которые лично вам покажутся наиболее требующими оптимизации. Не стоит себя сильно ограничивать, оптимизируйте и улучшайте что-то под себя, под ваше зрение, форму носа и черепа и так далее.

Например я, после изготовления окуляра, приложил его к лицу и понял, что приложился я к пенопластовому кирпичу. Удобства ровно ноль, а этот шлем еще носить на голове сколько-то времени! Поэтому, при изготовлении коробки я постарался увеличить удобство ношения одновременно с надежным и удобным расположением смартфона внутри. Пришлось избавится от внутренней стороны пенопласта, и заменить его вспененным полиэтиленом, он на картинке желтого цвета. Он более гибкий и позволяет закручивать форму в широких пределах, поэтому внутренняя поверхность шлема сделана из него. Она должна плотно прилегать к лицу в районе глаз и вокруг носа, иначе вы постоянно будете наблюдать запотевания линз от дыхания, сразу учтите этот момент. Была мысль сделать эту часть из строительной или плавательной маски, но под рукой их не нашлось, поэтому делал сам, впрочем вам вариант с готовой маской может показаться более предпочтительным, его с радостью и советую. Сам же я, решил также делать боковые стороны для шлема, прилегающие к голове.



Еще один момент, о котором стоит помнить — это вес смартфона и рычаг, на котором он будет работать, осуществляя давление на опору. Моя ксперия ультра весит 212 грамм, а необходимое расстояние, на которое она удалена от лица — 85 мм, плюс еще собственный вес коробки — все это вместе, я бы сказал, делает шлем удобным с оговорками. Сзади у него одна лямка, это будет видно на картинке в конце раздела, лямка эта из резиновой ленты, шириной 40мм, которая достаточно плотно притягивает его к затылку, но будь экран тяжелее, или рычаг больше (читай фокусное расстояние длиннее) — носить шлем было бы гораздо сложнее. Так что владельцам устройств большей диагонали или веса — советую сразу продумывать схему крепления на голове со второй, поперечной лямкой от переносицы к затылку, так и удобнее и безопаснее.

Также, на этом этапе вам потребуется продумать еще такой нюанс — вывод звука. У меня есть несколько пар наушников как закрытого, так и открытого типов, есть наушники-затычки и так далее, но подумав, я не стал строить шлем вокруг крупных и удобных Sony MDR с большими амбушюрами, а выбрал простые наушники-затычки. Возможно вам будет критично сделать шлем с крутым звуком, в таком случае — нужно сразу представлять то, как именно вы будете сочленять наушники, их дугу и шлем с его креплением. У меня был такой соблазн, который быстро испарился на этапе макетирования, но я обязательно к нему вернусь в следующей, улучшенной версии шлема, если задумаю его делать. В любом случае, потребуется отверстие в корпусе шлема, соответствующее положению аудиовыхода вашего смартфона.



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



Ранее, мы за несколько подходов выяснили фокусное расстояние окуляра. Теперь на нужном расстоянии требуется расположить экран смартфона. Помните, что экран нужно располагать так, чтобы его горизонтальная ось симметрии совпадала по высоте с воображаемой линией между зрачками, ну а то, что его нужно расположить симметрично относительно лица — вам и так понятно. В моем случае расстояние между экраном и ближней к нему стороной окуляра составило 43 мм, поэтому я сделал верхнюю и нижнюю поверхности из пенопласта, а также две боковые вставки. Получилась пенопластовая коробка, которую, поставив на экран — можно было уже использовать по назначению, именно тут и понадобился показанный выше шаблон.



На этом этапе было несколько мелких подгонок фокусировки и расположения смартфона, после этого — точный замер полученных результатов и раскройка внешнего, картонного корпуса. Он обслуживает две цели — защищает довольно нежный пенопласт от механических повреждений, я довольно легко продавливал его пальцами на этапе начальных экспериментов, пришлось следить за этим, а вторая, и основная цель — именно картон будет держать экран в нужном положении, прижимая его к пенопласту.



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



Примерив шлем к голове, и вдоволь насмотревшись на всевозможное 3D, я подправил мелкие неудобства внутри шлема, и сделал крепление — резинку к голове. Она просто сшита кольцом, и приклеена двусторонним скотчем к картону, плюс сверху прихвачена серебристым оракалом, который был использован на замену скотчу. В результате получилось как-то так:



Кстати, на этом изображении видно еще одно техническое отверстие, которое используется для подключения USB-кабеля, который потребуется нам чуть позже. А вот так выглядит шлем на голове подопытного, подарившего линзы для этого шлема:



Итак, что получилось в итоге.
Габариты: 184х190х124 мм
Снаряженная масса: 380 грамм
USB вход/выход
Разъем 3,5 мм для наушников
Полезная площадь экрана 142х75 мм
Разрешение 1920х1020 пикселей

Настало время перейти к программной части нашего путешествия.

Доступные возможности VR-шлема


Просмотр 3D видео

Самое первое, что приходит на ум — это просмотр фильмов в 3D. Это — очень простая и понятная точка входа в виртуальную реальность, хотя, если говорить более строго, это скорее порог недалеко от неё, предыдущая ступенька. Но, чтобы не умалять заслуг этого вида развлечений, сообщаю — просмотр 3D кинофильмов в получившимся шлеме — очень интересное и забавное занятие. Я посмотрел всего два фильма, поэтому пока не пресытился, но ощущения очень хорошие: представьте, что вы в полутора метрах от стены, на которую смотрите прямо. Не поворачивая головы, попробуйте обвести глазами область вокруг — вот это и будет доступный вам экран. Да, там небольшое разрешение — каждому глазу достается всего по 960х540 пикселей от fullHD фильма, но тем не менее впечатление это оставляет вполне ощутимое.

Для просмотра фильмов в таком виде, вам потребуется бесплатный плеер MX Player с установленным кодеком под ваш процессор, у меня это ARMv7 Neon, ну и собственно, видеофайл. Найти их легко на всевозможных торрент-трекерах, технология называется Side-By-Side или коротко SBS, вот по этим ключевым словам смело ищите. Плеер имеет возможность настроить соотношение сторон воспроизводимого видео, что крайне полезно для SBS файлов, которые в противном случае растягиваются по вертикали на весь экран. В моем случае мне потребовалось зайти в настройки — «экран» — «аспект» и выбрав «вручную» задать соотношение сторон 18 к 4, в противном случае вы получите вытянутые по вертикали изображения. Я попробовал поискать другие плееры с подобным функционалом, не нашел, если вы знаете — добавляйте в копилку знаний.



В общем-то, к этому пункту мне больше и добавить нечего — обычный 3D кинотеатр у вас перед глазами, всё очень похоже на поход в кино, или просмотр на 3D телевизоре с поляризационными очками, например, но в то же время есть и отличия, в общем, если вы любите 3D — вам стоит попробовать VR-шлем.

Андроид-приложения для Durovis Dive и подобных систем

Вся эта история вообще началась именно с этого пункта. В принципе, следующие три ссылки показывают практически все возможные программы под андроид на текущий момент:
www.divegames.com/games.html
www.refugio3d.net/downloads/
play.google.com/store/apps/details?id=com.google.samples.apps.cardboarddemo

Что нам потребуется для комфортного вкушения виртуальной реальности? Очевидно — джойстик, либо любой другой контроллер, например — беспроводная клавиатура. В моем случае со смартфоном фирмы Sony естественным и логичным выбором является родной и нативно поддерживаемый контроллер от PS3, но так как у меня такого не оказалось под рукой, а оказался старый добрый Genius MaxFire G-12U, я присовокупил к нему переходник с microUSB на USB, подцепил к смартфону, и даже не удивился, что он без вопросов сразу стал работать как в интерфейсе устройства, так и отдельных программ.



Потребуются и наушники, потому как погружение в виртуальные реальности без звука будет неполным. У меня это обычные затычки, а вы сообразите сами, как удобнее.

Что следует ждать, и чего не следует от приложений, представленных в этом разделе? Дело в том, что все приложения вообще, которые написаны под андроид на тему виртуальной реальности — очень скудны, если выражаться мягко. Если запустить их без шлема, и попытаться, ну, посмотреть, что же это за виртуальность такая, то есть вероятность, что шлем не захочется ни покупать, ни делать. Они откровенно очень сырые и убогие, и ничего супер-интересного не представляют.

Но. Когда вы засунете голову в шлем, всё становится совсем иначе, и лично я, скептически настроенный ко всему, ни за что бы не поверил, тем не менее это так.

Главное, что нужно учесть, это трекинг движения головы. Даже при плохой его реализации, или притормаживаниях — это совсем новое и неизведанное поле для ощущений, поверьте, до появления шлема вы ничего подобного не ощущали очень давно, со времен приключений со скалолазами в горах, прогулок по дну океанов, ночевок в лесу и прочих массовых убийств, которые все мы так любим. Шлем предоставляет совершенно нереальное ощущение реальности, прошу прощения за каламбур, и любая, даже самая убогая графика покажется конфетой внутри него, в общем, я должен сказать — если вы любите играть в игры, или ощущать новое — шлем устройство для вас.

Из собственного опыта: представьте, что вы в 1998 году, и, скажем, польская студия производства компьютерных игр сделала демо, в котором вы высадились на луне, вышли из модуля, увидели каноничный американский флаг, выглядящий как картонка, прибитая к палке, воткнутая в грунт, а над флагом в небе надпись крайне убогим шрифтом «соберите инструменты, осталось 3шт». При этом графика из очень, крайне простых элементов, где однообразно-накопированное звездное небо и квадратно-повторяющийся грунт под ногами занимают 98% полезной площади экрана, и где-то видны пара пикселей тех «инструментов», которые вам предстоит найти. На самом нет. Вы их уже видите, просто идти к ним нужно будет по 10 минут. Просто идти. По луне. Без звука. По повторяющимся спрайтам. Без экшена ну вообще.

Вот скажите, через сколько секунд вы удалили бы эту игру с компьютера или даже смартфона? Вот именно. А в шлеме это чудо позволяет переживать (!) опустошение и одиночество единственного человека на планете. Без шуток. Я обнаружил себя через 15 минут игры отчаянно боящимся, что я на Луне один, под колпаком звезд, и что делать — совсем неизвестно.

Более-менее такая же история и со всеми остальными играми и приложениями. Они убогие, они стрёмные до жути, но при этом внутри шлема — они отсылают тебя на 15-20 лет назад, а кого и раньше, к тем самым играм, в которые играли, а не за которыми проводили время. У меня пока единственный вопрос к разработчикам — почему нет ни одной игры с полноценным сюжетом под этот расклад? Единственная игра спасла бы положение дел просто неимоверно, потому как сейчас, показывая людям виртуальную реальность на андроиде, особо то показать и нечего, всё с оговорками «это демо, здесь нельзя стрелять», да «всё, вся игра пройдена, да, за 4 минуты». К слову, почти все эти приложения написаны на Unity, тем более удивляет их низкий уровень, либо я не умею искать.

Но вы меня все равно не слушайте, попробуйте сами, и расскажите свою версию, я с интересом. И ссылочками приправьте, буду безмерно. Я, например, установил даже демо с неистовым названием Симулятор Туалета. Потому что.

Небольшая пасхалкаНа самом деле на сайте дуровис-дайва есть ссылка на квейк-2, демо-версию игры, устанавливаемая на андроид и имеющую возможность SBS режима отображения, внизу этой страницы — подробная инструкция как это делать. Единственно, что не сработало в автоматическом режиме — не распаковался отдельный архив, так вот там будут в настройках запущенной игры ссылочки на зеркала, вам нужно перепечатать одну из них в браузер на десктопе, скачать самораспаковывающийся архив, выдернуть оттуда файл pak0.pak и подложить его в директорию установленной в телефон игры, у меня она под названием baseq2.

После этого тот самый Q2 запустился у меня без проблем — очень быстро работает, и все прекрасно видно. Страшно стало секунд буквально через 30, прямо холодок по позвоночнику, но дальше описывать не буду, пробуйте сами. Скриншот сделать не получилось, к сожалению, а джойстик работает пока только в режиме «побродить», стрелять не умеет, придется ковырять настройки.


Таким образом, вся эта нерасторопность андроид-разработчиков (внимание андроид-разработчики!) привела меня к мысли — ну что ж, нет игр под андроид — попробуем настольный компьютер, помня о главных плюсах виртуального шлема — огромный экран с погружением в изображение и трекинг положения головы, и попытаемся их не потерять.

Подключение к компьютеру в качестве VR-устройства

Если честно, мысль о таком подключении появилась сразу, но не было ни одной идеи, как, что и в каком порядке делать. Поэтому, пока я чертил, резал и склеивал детали, попутно думал, где получить сведения о том, как вывести изображение с видеокарты компьютера, одновременно передав трекинг головы, то есть данные гироскопа и акселерометра в компьютер. И все это, желательно, с минимальной задержкой.

И вы знаете, решение нашлось. Оно состоит из трех этапов, каждый из которых мы рассмотрим отдельно, притом сначала я опишу работающие варианты, а потом пробегусь по тем, которые оказались неработоспособны в моем случае, но, возможно, будут полезны вам.

Создаем 3D-вывод на компьютере.


Это оказалось относительно просто, но не зная сразу, можно поплутать. Итак, идеальный компьютер, позволяющий играть в полноценные 3D игры в формате стереовывода имеет видеокарту на базе обычных чипов NVidia или ATI, чем современнее тем лучше, и, что очень важно — в драйверах возможность настройки произвольного разрешения. В случае, если у вас ноутбук (мой случай) или такая видеокарта, драйвера которой не поддерживают произвольных разрешений — изображение в шлеме будет вытянутое по вертикали, и возможное решение, небезопасное и довольно муторное — копаться в реестре и прописывать разрешения там. Ваши варианты, опять же, горячо приветствуются!

В общем, вам потребуется установить такую версию драйверов для видеокарты, которая поддерживает произвольные разрешения. Если ваш смартфон и ваш монитор имеют по 1920х1080 пикселей на экране, то всё очень просто — в настройках видеокарты вам нужно создать произвольное разрешение 1920х540, а затем применить его к монитору. Вы увидите, как рабочая область экрана стала меньшей высоты и расположилась по середине экрана. Если картинка на вашем экране примерно такая, то вы все сделали верно:



Так, все было протестировано на обычном, но мощном стационарном компьютере с видеокартой NVidia и последней версией драйверов. Важно, чтобы выполнялись условия — при запуске игры в стерео-режиме изображение на каждой половине кадра не было вытянутым.

Второе, что вам потребуется, это скачать 3D драйвер — который имеет полноценную триальную версию сроком на две недели, и позволяет осуществлять вывод трехмерных изображений на переферийные устройства в произвольных конфигурациях, и сайд-бай-сайд, и топ-боттом, и анаглиф, в общем, все что пожелаете.

Устанавливаете обычным образом, запускаете утилиту TriDef 3D Display Setup и выбираете опцию Side-by-side, теперь при запуске игр из под этого драйвера — они будут в стерео-режиме «каждому глазу — половина кадра». Если у вас установлены игры, то вы можете открыть утилиту TriDef 3D Ignition и выполнить поиск установленных игр, в окошке появится ярлык вашей игры — вуаля, можно пользоваться.

У меня игр установлено не было, поэтому я поставил Steam и на распродаже приобрел Portal 2 за 99 рублей, да это реклама. И тут наступает момент, о котором нужно знать — драйвер, обслуживающий стерео вывод, может выводить стерео у любой игры, которая имеет возможность запускаться в фулскрине, но не может создать вывод для окна, область которого меньше, чем размер рабочего стола. Запомните этот момент, ниже он станет критичным, как красная тряпка у быка.

В общем, если драйвера установлены и настроены, игра приобретена и запущена, и выглядит всё это на экране как-то так:



Можно переходить к следующему этапу.

Передаем изображение с компьютера на экран смартфона

Тут есть несколько путей, и судя по многочисленным иконкам в маркете — программ, позволяющих передать требуемое — не так уж и мало. Мне «повезло», прежде чем я нашел удобное и работоспособное приложение, я испробовал несколько других, удручающих и фрустрирующих поделок из гугл-плэя, и мне жаль, что туда пускают любой шлак. На поиск и настройку приложений я потратил времени больше, чем на изготовление устройства. Более того, одно из приложений пришлось купить, и было бы с ним всё хорошо, если бы не было всё нехорошо. Но обо всем по порядку: вам обязательно потребуется локальное wi-fi соединение между компьютером и смартфоном.

Также вам потребуется хороший и быстрый «удаленный рабочий стол», который не разлогинивается из вашей учетной записи на десктопе при входе через удаленку. Такой программой оказалась бесплатная Splashtop, и также была найдена наполовину-платная iDisplay.

Та, которая платная — с ней всё прекрасно, только она не позволила расположить обрезанный сверху и снизу экран ровно по середине дисплея, поэтому пришлось от нее отказаться, но в целом работает она хорошо, был даже обзор на хабре, откуда я её и почерпнул. А вот Splashtop отработал как надо, поэтому — ставьте его.

Все программы этого типа работают по примерно одинаковой схеме — вам нужно скачать и установить хост-версию для вашего десктопа, и ресивер-версию для смартфона. Думаю, с этим проблем не возникнет, поэтому описывать эти процессы не буду, там дел то на пять минут бубна — скачал, установил, зарегистрировал, настройка, коннект. Единственно, о чем упомяну, вам нужно будет зайти в настройки и указать, что ваше беспроводное подключение нужно использовать локально, для чего вам потребуется в андроид-версии указать IP вашего компьютера явным образом, этот адрес вы можете узнать утилитой ipconfig в командной строке. Собственно, это все настройки, всё уже должно работать, вот, к примеру, скриншот со смартфона текущего момента:



Если вы запустите игру из под утилиты 3D Ignition, то она покажется на экране вашего смартфона одновременно с тем, как это произойдет и на мониторе. Или нет. Потому что здесь скрывается самый горячий подводный камень нашей истории, и да, вы будете смеяться так же, как смеялся я. Следите за ловкостью рук: драйвер, который отдает стерео-картинку из игры требует фулскрина (если выбрать режим «в окне» — стерео работать не будет, будет обычный запуск игры), а программа доступа к рабочему столу с вашего смартфона кричит «я не могу запускать фулскрин, прости, да, совсем», и может лишь показать рабочий стол и окна на нем.

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

Так что мне повезло, портал-2, скачанный мной из стима оказался именно той игрой, которая поддерживает все три режима запуска. Так что вам остается проверять на свое усмотрение, какие игры запустятся так, а какие нет.

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

Подключаем трекинг движения головы

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

Первой мыслью была «разобрать» Oculus Rift SDK или SDK Durovis Dive, благо исходники в открытом доступе. Возможно так и следовало поступить, но я не программист, и в этом ничего не понимаю. Поэтому мой взор был обращен к готовым решениям, которые передают положение смартфона в пространстве на десктоп. Как оказалось, существует просто гигантское количество программ, которые, якобы, могут это делать. Судя по описаниям — так вообще почти все. И опять, я перебирал десятки программ со сладкими обещаниями, а на деле это было еще более страшно, отвратительно и убого, чем перебирать программы для вывода изображения на экран смартфона, да что там, даже более убого чем те демо-игры для дуровис дайва, которые я описывал выше. Если на этом этапе поймать волну фрустрации, то всё, «досвиданья шлем». Тем не менее, нужная (с оговорками) программа, нашлась. Но сначала ложка дегтя — Monect, UControl, Ultimate Mouse, Ultimate Gamepad, Sensor Mouse — всё это не подошло. Особенно первая в этом списке — в описании сказано, что Monect Portable предоставляет режим

FPS mode — Using gyroscope to aim the target just like a real gun in your hand, perfect support COD serial!
В итоге, я ее купил за баснословные 60 рублей, а это оказалось неправдой. Такого режима в приложении просто не существует! Я был зол.

Но, перейдем к успешным вариантам. Вам снова потребуется скачать хост и клиент версии программы под названием DroidPad. Именно она, при настройке одного из режимов, позволила совершить необходимое, и передать параметры датчиков в реальном времени по беспроводному доступу. Алгоритм такой — устанавливаете программу на декстоп и в смартфон, запускаете ее на смартфоне, выбираете режим «Mouse — Mouse using device tilting», и после этого запускаете её десктопную версию.

Если все сделали в такой последовательности, должно заработать соединение, и вуаля — вы управляете курсором мыши на экране компьютера! Пока что беспорядочно и сумбурно, но погодите, сейчас настроим. В моем случае, в андроид-версии приложения скриншот окна настроек выглядит вот так:



Можно задать название устройства, а вот порт лучше не трогать — работает и по умолчанию, а работающее лучше пока не трогать. В десктопной версии всё чуть сложнее, настройки у меня вот такие, но их еще предстоит оптимизировать, так что ипользуйте только как ориентир, не более:



Здесь настройки осей X и Y на экране компьютера, и сила сенсора из телефона. Как именно это всё работает для меня пока что черный ящик, потому как никакой документации разработчики приложения не предоставляют, поэтому — информацию предоставляю «as is». Совсем забыл добавить, что в смартфоне у меня установлена программа, контролирующая запуск приложений в альбомной или портретной ориентации, и все приложения, которые испытывались для этой затеи = испытывались в режиме альбома. Приложение называется Rotation Manager, а в смартфоне глобально отключена автоориентация экрана.

Настроив ваши приложения соответствующим образом, вы должны будете подключить смартфон к компьютеру по описанному ранее алгоритму (у меня любое расхождение с указанным порядком ведет к завершению работы приложения), и, держа смартфон в руке так, как он будет расположен внутри шлема, попытаться настроить параметры — поочередно подправляя десктопные ползунки и нажимая на кнопку «Calibrate» в окне андроид-версии. Скажу сразу — мне после довольно недолгих попыток, удалось настроить углы и повороты относительно прилично, но затем, настраивая точнее, я сбил те настройки, не подумав их сфотографировать, и те, что сейчас на скриншоте — это уже только приближение к предыдущим, которые были всё же лучше по ощущениям. Еще один момент — все эти ползунки очень чувствительные, и держать в руке смартфон в одном положении так чтобы он не убирал курсор произвольным образом — неудобно, поэтому постоянно приходится разрывать подключение и настраивать, затем подсоединять и проверять. Через некоторое время информация в статье на этот счет будет обновлена, но и при текущих настройках — внутри игрового мира это выглядит весьма впечатляюще.

Итак, какие ощущения? На данный момент у меня за неимением времени установлены игры Portal 2 и бесплатный робото-шутер HAWKEN, предложенный стимом. Что касается портала — там довольно быстро тебя порабощает окружающая атмосфера и звук, и погружение это настолько сильное, что сравнить не с чем, разве что посиделки перед компьютером 10 лет назад в четыре утра, примерно так же остро всё воспринимается. Но если там это была усталость и темнота вокруг, то в шлеме — это несколько другой, более яркий эффект такого же присутствия. А вот вторая игра, где ты сидишь в каноничном «огромном человекоподобном роботе» — удивила. При наличии шлема на голове, реальность, проецируемая как бы на поверхность шлема в игре — становится ближе, теплее и ламповее, при том — очень быстро. Удивительно быстро.

Не стоит полагать, что ощущения, вызываемые VR-шлемом будут одинаковые у всех, но по всем «подопытным кроликам» могу уверенно сказать — оценили этот девайс абсолютно все, отзывы исключительно положительные и заинтересованные. Поэтому смело и рекомендую и вам, потратьте один день на изготовление этого шлема, и оцените сами. Моя личная цель была именно такой — быстро удовлетворить любопытство, без специальной траты денег и времени на ожидание, на все про все я потратил около трех дней поисков и настроек, а теперь передаю эстафету вам, уже в сжатом виде.

Лично для себя я решил, что скорее всего, сделаю вторую версию этого шлема, с небольшими доработками и усовершенствованиями, а впоследствии приобрету свежую потребительскую версию Oculus Rift. Это оказалось очень интересно и познавательно.

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

TL;DR: в статье рассказывается о быстром и качественном способе изготовления шлема виртуальной реальности на базе HD смартфона или планшета с андроидом на борту, полная пошаговая инструкция и общие принципы этого процесса, а также описываются основные доступные способы применения полученного шлема: просмотр кинофильмов в 3D формате, игры и приложения под андроид, и подключение шлема к компьютеру для погружения в реальность десктопных 3D-игр.

Источник: habrahabr.ru/post/228501/