Half-Life: Alyx на GearVR и без VR
Half Life : Alyx это игра, которая стоила ожидания двенадцати лет. Мы все ждали не совсем её, но какое-нибудь продолжение серии Half Life, в которой каждая игра задавала такой уровень качественных инноваций, который становился определяющим в жанре на многие годы вперёд. Half-Life : Alyx не исключение — безобразно очаровательная, как и предшествующие игры серии, она становится новым эталоном для жанра виар шутеров. Открывая для игроков возможность потрогать и рассмотреть омерзительные красоты этого мира, она создает игровой опыт, который не забудется еще долго.
4389 просмотров
Но без VR гарнитуры игру, очевидно, не запустить. Даже ради такого ожидаемого проекта приобретение дефицитной нынче VR аппаратуры оправдано не для всех. Авторы сознательно ограничили возможность запуска, чтобы только игроки с виар гарнитурой по достоинству оценили их разработку. Без этого эффекта игра сильно теряет свой шарм. Однако многим все равно хочется попробовать, хотя бы для оценки того, насколько эффект погружения в виртуальную реальность значителен.
TrackIR + FreePIE + vJoy + Opentrack = AOM2. Второе дыхание Трекира. (The TrackIR second wind.)
Поэтому я подумал — почему бы не имитировать наличие виар гарнитуры программно? Valve OpenVR API описывает как соорудить драйвер, совместимый со SteamVR, так что должны уже быть похожие решения. И вот — я обнаружил проект с открытым кодом — ALVR, превращающий Samsung GearVR (недорогой коробок с линзами для смартфона) в беспроводную VR гарнитуру к ПК путем эмуляции подключения HTC Vive и стриминга данных о повороте с очков на ПК, а видеопотока — обратно. Отлично!
Прежде чем приступать к написанию собственного решения, я решил опробовать виртуальную реальность через ALVR на Samsung GearVR. Эта гарнитура обладает только 3 степенями свободы для поворота головы, и столь же ограниченным джойстиком, который можно лишь поворачивать, но не сдвигать в пространстве. Для сидячего виара в приложениях, рассчитанных на указатель, это работает очень неплохо.
Но там, где нужно протягивать руку чтобы взаимодействовать с окружением или уклоняться, ты становишься «инвалидом», неспособным к движению. Однако, автор ALVR большой молодец, и добавил даже поддержку библиотеки позиционирования из Google ARCore в специальной версии клиентского приложения! Если установить эту версию, появляется полноценный inside-out трекинг положения головы за счёт оптической оценки смещения как в более дорогих очках Rift и Quest. Качество позиционирования, конечно, остается посредственным, и срабатывает только в хороших условиях видимости неподвижных контрастных объектов окружения, но этого вполне достаточно для нужд большинства игр — приседание и небольшое уклонение в сторону регистрируется как надо, хоть и добавляет нашему инвалиду эффект опьянения и периодического улетания в сторону. Забавный, почти жизненный компромисс.
В таком режиме удалось не без удовольствия прогуляться по начальной локации HL:A. Эффект глубины пространства вкупе с объемным звуком создали отличные ощущения, почти не уступающие полноценной VR гарнитуре. Слегка более выразительная москитная сетка перед глазами быстро перестала отвлекать, а сниженное до 60гц обновление экрана и вовсе не было проблемой, как и незначительная задержка (около 80мс). Однако отчаянно хотелось потрогать окружение и хотя бы дотянуться до кнопки, необходимой для продвижения в игре.
Здесь на помощь пришла другая опенсорс программа — FreePIE, к которой есть плагин ALVR. Благодаря ей можно быстро написать скрипт на Python который превратит управление с клавиатуры, мыши или с джойстика в данные положения и поворота виар контроллера для ALVR. Я быстро придумал решение и сделал телескопическую выдвижную руку, длина которой регулируется касанием трекпада на джойстике, и легко смог нажимать кнопки, хватать и разбрасывать рукой мусор, и даже открывать двери и рисовать каракули фломастером на стекле. Телепортация и повороты удобно легли на нажатия трекпада также как в настоящем Vive, и пройти первый эпизод игры не составило труда. Но лишь до момента, где в распоряжение игрока попадают гравитационные перчатки.
Здесь меня ждал неприятный сюрприз. Гравитационные перчатки — блестящее решение геймдизайнеров Valve, позволившее органично вписать удобную игровую механику притяжения предметов в мир игры. Однако никакие попытки повторить жест притяжения не приводили к нужному эффекту. Я пробовал выполнить его джойстиком.
Я даже написал скрипт в котором закрепил руку на «носу» и кнопкой задавал фиксированное смещение и поворот руки вокруг различных осей, думая что причина в исполнении самого жеста. Но нет.
Я также некоторое время провел в The Lab пытаясь метнуть палку для робо-пса вдаль, подобно тому как это можно было сделать на Vive, но объекты выпадали из инвалидной телескопической руки практически без сохранения скорости. Я предположил, что настоящий контроллер может передавать игре не только положение и поворот, но и другие данные — о скорости и ускорении. Так как хорошие датчики могут определять их с высокой точностью и частотой, это могло бы дать преимущество при отслеживании контроллера и экстраполяции положения. Моя гипотеза быстро нашла подтверждение, как только я изучил OpenVR API и обнаружил функцию GetPose, возвращающую структуру с данными о скорости и ускорении контроллера.
И тут я погрузился в пучину С++ кода, где и провёл всю неделю, терзая саргасовы путы логики программы и ища ответы в мутных водах документации, не соответствующей местами реальности. Удалось пересобрать программу ALVR с вычислением линейной скорости по измененному положению контроллера и передачей этих данных в структуру OpenVR. И, о чудо!
Именно данные о линейной скорости и были необходимы. Жест заработал легко и интуитивно. Удалось даже схватывать объект на лету с первой попытки. Более того, это вернуло в игру возможность бросать объекты с сохранением импульса. Я добавил заодно вычисление угловой скорости используя навыки работы с кватернионами, и это открыло возможность бросать объекты с кручением.
Дальнейшую сложность для полноценного погружения представляла только перезарядка оружия, которая вызывает затруднения и при использовании настоящих контроллеров. Однако благодаря включению режима управления одной рукой в настройках игры можно перезаряжаться заводя руку за плечо и нажимая кнопку сжатия (которую в виду отсутствия дополнительных кнопок пришлось также изобретать, и сделать переключение кнопкой «назад» между функцией гашетки и сжатия). Дальнейшая фантазия подсказывает создание множества разных вариантов управления: через два джойстика, через две мыши, через заскриптованные действия, через leap motion, или любые другие имеющиеся под рукой средства.
Но можно ли вовсе отказаться от очков, если заставить драйвер отправлять фейковые показания игре? Для удобства тестирования управления хотя бы. Конечно! Тут меня ждало несколько подводных камней в коде ALVR которые больно ударили загадочными проблемами, похожими на race-condition при инициализации классов для виртуальных устройств, но методом пристального всматривания в код удалось изобрести необходимые изменения в порядке вызовов.
Теперь при запуске ALVR сразу инициализирует HMD и контроллер, и начинает получать данные через FreePIE, давая возможность управлять персонажем. А при подключении реального GearVR передача данных пополняется поступившими сетевыми пакетами.
Но играть в Alyx с клавиатуры и мыши без VR не очень интересно, что ожидаемо. Мешает и специфическое управление, и крайне узкий угол обзора в режиме наблюдателя, что вынуждает вращать камеру будто осматриваешь мир через трубу. Пока никакой консольной команды для изменения угла обзора не нашлось. Можно только поискать и изменить в памяти игры матрицу проекции камеры, но на этом этапе я удовлетворен экспериментом и оставлю столь изощренные поиски возможных припарок для улучшения качества жизни виар-инвалидов на будущее.
Подобную эмуляцию можно задействовать и в любых других виар приложениях, если это будет иметь смысл.
Но уже сейчас благодаря этому подходу можно попробовать вжиться в тело потрёпанного жизнью героя — лишенного руки и нескольких пальцев, контуженного или даже одноглазого, но все же способного на подвиги и приключения! 🙂
3) Загрузить FreePIE и перенести в его папку Plugins файл ALVRFreePIE.dll из папки моего архива с ALVR — это позволит модифицировать управление через скрипты
4) Запустить FreePIE и открыть им скрипт управления из архива ALVR/freepie-samples/GearVR_HL-Alyx_MouseKeyboard.py Нажать Script/Run или (F5)
5) Запустить ALVR, перейти на вкладку about и нажать install driver — это зарегистрирует драйвер виртуального устройства в SteamVR
6) Нажать Start Server и дождаться автоматического запуска SteamVR. Если обнаружен HMD и контроллер, то все готово, можно запускать игры и пробовать управление.
*) Можно также подключить GearVR, для этого надо загрузить приложение ALVR Client, следуя инструкциям автора ALVR и подключиться к общей сети, а затем в ALVR нажать Connect напротив обнаруженного устройства. Для GearVR также есть скрипт управления в папке freepie-samples.
Управление для мыши и клавиатуры:
Мышь вращает обзор;
Левая кнопка — стрельба или хватание предметов;
Правая кнопка поднимает руку и уводит ее за плечо чтобы можно было достать или положить патроны;
Колесико мыши меняет длину руки чтобы схватить или бросить предмет;
Кнопка R это кнопка сжатия контроллера, отвечающая за перезарядку или выброс магазина;
Боковые кнопки мыши это нажатия на тачпад контроллера вверх и вниз. Вниз позволяет телепортироваться, вверх — выбирать оружие;
Средняя кнопка мыши это кнопка «меню» которая используется игрой для взведения затвора оружия после перезарядки;
Кнопка Q это вызов меню игры;
WSAD — трекпад левого контроллера.
Так как игра рендерит на каждый глаз квадратный кадр, рекомендую запускать ее в оконном режиме с параметрами -width 1024 -height 1024 чтобы угол обзора по вертикали не оказался обрезан из-за растягивания квадратного кадра на прямоугольный экран
Можно повысить Resolution Scale в настройках SteamVR для улучшения картинки
В скрипте управления реализованы еще не все необходимые для полноценной игры действия. Возможно вам будет затруднительно проходить пространственные паззлы с вращением точек на сфере. Также не известно, как будет работать перезарядка других видов оружия. Все эти действия можно будет заскриптовать через FreePIE, не бойтесь попробовать.
Источник: dtf.ru
Freepie что это за программа
Особенности:
programmable-input-emulator joystick mouse-emulation mouse-utility wiimote keyboard-emulation input-emulator directinput геймпад key-mapping
FreePIE (Programmable Input Emulator) — это утилита C # для соединения и
эмуляции устройств ввода. Он имеет приложения, главным образом, в видеоиграх,
но также может использоваться для взаимодействия с VR, дистанционного
управления и других приложений. Типичным приложением может быть управление
мышью в компьютерной игре с помощью Wiimote. Схемы управления устройствами
настраиваются для конкретных приложений путем выполнения сценариев из
графического интерфейса FreePIE. Язык сценариев основан на синтаксисе Python и
предлагает непрограммистам простой способ взаимодействия с устройствами.
FreePIE очень похож на популярную утилиту GlovePIE, но поощряет открытую
разработку и интеграцию с любым устройством. Программное обеспечение
предназначено для того, чтобы сторонние разработчики могли добавлять свои
собственные плагины ввода / вывода либо путем прямой интеграции в базовую
библиотеку, либо с помощью отдельно скомпилированного механизма плагинов.
Аналоги (12):
AntiMicro
Инструмент для отображения событий клавиатуры и мыши на геймпады и джойстики.
104
Бесплатное ПО Открытый код
Linux Windows
определить автоматический профиль на основе запущенного приложения настраиваемость joystick mouse-emulation keyboard-emulation joystick-to-keyboard joypad gamepad-keyboard-emulator полная поддержка контроллера games Не поддерживается графический компонент game-mapping key-mapping
Pinnacle Game Profiler
Pinnacle Game Profiler позволяет вам эмулировать клавиатуру и мышь с вашей видеоигрой .
64
Платное ПО
joystick mouse-emulation wiimote gaming-utility joystick-to-keyboard gamepad-keyboard-emulator games Warning game-mapping key-mapping
Xpadder
Xpadder имитирует клавиатуру и мышь с помощью геймпада. Что позволяет Xpadder?
53
Платное ПО
mouse-emulation поддержка множества контроллеров joystick-mapper gampad-mapper gamepad-utilities gamepad-keyboard-emulator joystick-utilities gamepad-utility gamepad-tool keyboard-emulationkey-remap переопределение клавиш gaming-utility joystick-to-keyboard полная поддержка контроллера gamepad-mapping mapping joystick-utility joystick-mapping games joystick-tool gamepad-tools joystick-tools key-mapping
InputMapper
InputMapper is a DS4 (DualShock 4) input mapper that allows you to connect your PS4 gamepad to.
10
Бесплатное ПО
ds4 геймпад dualshock controller xinput bluetooth поддержка bluetooth
Enjoy2
Enjoy2 — это простая программа для OSX, которая позволяет преобразовывать входы джойстика в клавиатуру или .
6
Бесплатное ПО Открытый код
gamepad-keyboard-emulator joystick-to-keyboard key-mapping
GlovePIE
GlovePIE означает Glove Программируемый Эмулятор Входа.
6
Бесплатное ПО
programmable-input-emulator input-method input-emulator wiimote Не поддерживается
reWASD
Первый и единственный инструмент для создания геймпада, позволяющий разделять Xbox Elite на отдельные кнопки.
Источник: xn—-7sbabnb7cmacncmoc3p.xn--p1ai
FreePie забыл, как сделать разделение
Я давно пользуюсь этой программой без проблем. Но вчера он внезапно забыл, как делать деление. Почти каждое уравнение начало возвращать 0, а некоторые возвращали 1 или -1. Я понятия не имею, что это за модель.
Я даже попытался набрать код «Diagnics.Watch (1/2)», который, конечно, должен возвращать 0,5, но он возвращает 0.
Я попытался удалить FreePie и установить его снова, но это не помогло.
задан CaptainConfused 3
1 ответ 1
Похоже, что программа делает пару вещей, не давая вам знать, что она делает их.
В традиционном целочисленном делении 1/2 — ноль, потому что эта операция пытается сохранить значение обратно в целое число. 0.5 не является допустимым целочисленным значением, поэтому оно хранится как 0.
Другие операции (с единицами -1 и 1), кажется, выполняют арифметику с плавающей точкой, но они выполняют целочисленную операцию «потолка» для положительных значений меньше 1 (любое значение с плавающей запятой округляется до следующего целого значения, поэтому 0.5 округляется до 1) и целочисленная операция «floor» для отрицательных значений меньше единицы, в которой число округляется до следующего отрицательного целого (-0,5 округляется до -1). См. Функции пола и потолка для более подробной информации.
Я не знаю, почему программа «внезапно» начала относиться к разделению таким образом, но это могло быть обновление библиотек, которые они используют. Вы можете найти некоторые детали в их документации.
Источник: poweruser.guru
Half-Life: Alyx на GearVR и без VR
Half Life : Alyx это игра, которая стоила ожидания двенадцати лет. Мы все ждали не совсем её, но какое-нибудь продолжение серии Half Life, в которой каждая игра задавала такой уровень качественных инноваций, который становился определяющим в жанре на многие годы вперёд. Half-Life : Alyx не исключение — безобразно очаровательная, как и предшествующие игры серии, она становится новым эталоном для жанра виар шутеров. Открывая для игроков возможность потрогать и рассмотреть омерзительные красоты этого мира, она создает игровой опыт, который не забудется еще долго.
Но без VR гарнитуры игру, очевидно, не запустить. Даже ради такого ожидаемого проекта приобретение дефицитной нынче VR аппаратуры оправдано не для всех. Авторы сознательно ограничили возможность запуска, чтобы только игроки с виар гарнитурой по достоинству оценили их разработку. Без этого эффекта игра сильно теряет свой шарм. Однако многим все равно хочется попробовать, хотя бы для оценки того, насколько эффект погружения в виртуальную реальность значителен.
Поэтому я подумал — почему бы не имитировать наличие виар гарнитуры программно? Valve OpenVR API описывает как соорудить драйвер, совместимый со SteamVR, так что должны уже быть похожие решения. И вот — я обнаружил проект с открытым кодом — ALVR, превращающий Samsung GearVR (недорогой коробок с линзами для смартфона) в беспроводную VR гарнитуру к ПК путем эмуляции подключения HTC Vive и стриминга данных о повороте с очков на ПК, а видеопотока — обратно. Отлично!
Прежде чем приступать к написанию собственного решения, я решил опробовать виртуальную реальность через ALVR на Samsung GearVR. Эта гарнитура обладает только 3 степенями свободы для поворота головы, и столь же ограниченным джойстиком, который можно лишь поворачивать, но не сдвигать в пространстве. Для сидячего виара в приложениях, рассчитанных на указатель, это работает очень неплохо.
Но там, где нужно протягивать руку чтобы взаимодействовать с окружением или уклоняться, ты становишься «инвалидом», неспособным к движению… Однако, автор ALVR большой молодец, и добавил даже поддержку библиотеки позиционирования из Google ARCore в специальной версии клиентского приложения! Если установить эту версию, появляется полноценный inside-out трекинг положения головы за счёт оптической оценки смещения как в более дорогих очках Rift и Quest. Качество позиционирования, конечно, остается посредственным, и срабатывает только в хороших условиях видимости неподвижных контрастных объектов окружения, но этого вполне достаточно для нужд большинства игр — приседание и небольшое уклонение в сторону регистрируется как надо, хоть и добавляет нашему инвалиду эффект опьянения и периодического улетания в сторону. Забавный, почти жизненный компромисс.
В таком режиме удалось не без удовольствия прогуляться по начальной локации HL:A. Эффект глубины пространства вкупе с объемным звуком создали отличные ощущения, почти не уступающие полноценной VR гарнитуре. Слегка более выразительная москитная сетка перед глазами быстро перестала отвлекать, а сниженное до 60гц обновление экрана и вовсе не было проблемой, как и незначительная задержка (около 80мс). Однако отчаянно хотелось потрогать окружение и хотя бы дотянуться до кнопки, необходимой для продвижения в игре…
Здесь на помощь пришла другая опенсорс программа — FreePIE, к которой есть плагин ALVR. Благодаря ей можно быстро написать скрипт на Python который превратит управление с клавиатуры, мыши или с джойстика в данные положения и поворота виар контроллера для ALVR. Я быстро придумал решение и сделал телескопическую выдвижную руку, длина которой регулируется касанием трекпада на джойстике, и легко смог нажимать кнопки, хватать и разбрасывать рукой мусор, и даже открывать двери и рисовать каракули фломастером на стекле. Телепортация и повороты удобно легли на нажатия трекпада также как в настоящем Vive, и пройти первый эпизод игры не составило труда. Но лишь до момента, где в распоряжение игрока попадают гравитационные перчатки.
Здесь меня ждал неприятный сюрприз. Гравитационные перчатки — блестящее решение геймдизайнеров Valve, позволившее органично вписать удобную игровую механику притяжения предметов в мир игры. Однако никакие попытки повторить жест притяжения не приводили к нужному эффекту… Я пробовал выполнить его джойстиком.
Я даже написал скрипт в котором закрепил руку на «носу» и кнопкой задавал фиксированное смещение и поворот руки вокруг различных осей, думая что причина в исполнении самого жеста. Но нет… Я также некоторое время провел в The Lab пытаясь метнуть палку для робо-пса вдаль, подобно тому как это можно было сделать на Vive, но объекты выпадали из инвалидной телескопической руки практически без сохранения скорости. Я предположил, что настоящий контроллер может передавать игре не только положение и поворот, но и другие данные — о скорости и ускорении. Так как хорошие датчики могут определять их с высокой точностью и частотой, это могло бы дать преимущество при отслеживании контроллера и экстраполяции положения. Моя гипотеза быстро нашла подтверждение, как только я изучил OpenVR API и обнаружил функцию GetPose, возвращающую структуру с данными о скорости и ускорении контроллера.
И тут я погрузился в пучину С++ кода, где и провёл всю неделю, терзая саргасовы путы логики программы и ища ответы в мутных водах документации, не соответствующей местами реальности. Удалось пересобрать программу ALVR с вычислением линейной скорости по измененному положению контроллера и передачей этих данных в структуру OpenVR. И, о чудо!
Именно данные о линейной скорости и были необходимы. Жест заработал легко и интуитивно. Удалось даже схватывать объект на лету с первой попытки. Более того, это вернуло в игру возможность бросать объекты с сохранением импульса. Я добавил заодно вычисление угловой скорости используя навыки работы с кватернионами, и это открыло возможность бросать объекты с кручением.
Дальнейшую сложность для полноценного погружения представляла только перезарядка оружия, которая вызывает затруднения и при использовании настоящих контроллеров. Однако благодаря включению режима управления одной рукой в настройках игры можно перезаряжаться заводя руку за плечо и нажимая кнопку сжатия (которую в виду отсутствия дополнительных кнопок пришлось также изобретать, и сделать переключение кнопкой «назад» между функцией гашетки и сжатия). Дальнейшая фантазия подсказывает создание множества разных вариантов управления: через два джойстика, через две мыши, через заскриптованные действия, через leap motion, или любые другие имеющиеся под рукой средства.
Но можно ли вовсе отказаться от очков, если заставить драйвер отправлять фейковые показания игре? Для удобства тестирования управления хотя бы. Конечно! Тут меня ждало несколько подводных камней в коде ALVR которые больно ударили загадочными проблемами, похожими на race-condition при инициализации классов для виртуальных устройств, но методом пристального всматривания в код удалось изобрести необходимые изменения в порядке вызовов.
Теперь при запуске ALVR сразу инициализирует HMD и контроллер, и начинает получать данные через FreePIE, давая возможность управлять персонажем. А при подключении реального GearVR передача данных пополняется поступившими сетевыми пакетами.
Но играть в Alyx с клавиатуры и мыши без VR не очень интересно, что ожидаемо. Мешает и специфическое управление, и крайне узкий угол обзора в режиме наблюдателя, что вынуждает вращать камеру будто осматриваешь мир через трубу. Пока никакой консольной команды для изменения угла обзора не нашлось. Можно только поискать и изменить в памяти игры матрицу проекции камеры, но на этом этапе я удовлетворен экспериментом и оставлю столь изощренные поиски возможных припарок для улучшения качества жизни виар-инвалидов на будущее.
Подобную эмуляцию можно задействовать и в любых других виар приложениях, если это будет иметь смысл.
Но уже сейчас благодаря этому подходу можно попробовать вжиться в тело потрёпанного жизнью героя — лишенного руки и нескольких пальцев, контуженного или даже одноглазого, но все же способного на подвиги и приключения!
Источник: se7en.ws