Мне любопытно создать и реализовать шаблоны вибрации для консольных контроллеров (для контроллера PS4, если это имеет значение).
Есть задержка и параметр скорости двигателя, верно? Но также мы можем исчезнуть с левого мотора на право, или заставить их работать вместе ....
Есть ли стандартизированный способ создания этих шаблонов?
Например, я подумал о создании их со стереозвуком в формате wav в аудиоредакторе и чтении файла wav в моем коде, чтобы преобразовать их в задержки и скорости.
Как это делается в игровой индустрии?
playstation4
force-feedback
Франкское
источник
источник
Ответы:
Контроллер PS4 dualshock имеет значения в 1 байт для левого и правого грохочущих пакетов, так что это в основном работает как 8-битная музыка.
Большинство из них находятся за NDA, поэтому очень трудно получить какую-либо информацию об этом (даже информацию выше было трудно получить, я понял это только из стороннего SDK для node.js). Это информация, которую я собрал воедино:
Процесс буквально похож на создание 1-байтовой стереофонической музыки (и предположительно ее исполняет музыкальный исполнитель). Он включает в себя подключение контроллера PS4 к компьютеру и использование программы для создания шаблонов грохота. Они делают один на основе догадок, затем запускают его, затем настраивают и повторяют эти шаги, пока шаблон не будет чувствовать себя хорошо.
Некоторые грохоты генерируются программно (например, когда машина уходит с дороги), но обычно это либо простая функция (например, синус), либо постоянное значение, аналогичное тому, как это делают телефоны. Даже самые сложные эффекты состоят из умножения нормализованного грохота на желаемую силу.
PS4 SDK также поставляется с некоторыми предопределенными шаблонами. Вот некоторые примеры: пилообразный паттерн (постоянно увеличивается, затем идет от 255 до 0), синусоида и треугольники (линейно увеличивается до 255, затем обратно до 0 линейно).
Я не смог найти никаких подробностей о других контроллерах (особенно о грохоте Switch, даже в патенте не описано, как это работает). Но они, вероятно, используют аналогичный подход с более точными грохочущими пакетами.
Источники:
источник
Там нет стандартизированного способа.
Разные устройства имеют разные возможности грохочения и ограничения.
Подавляющее большинство устройств не поддерживают фактическую «обратную связь по усилию» (например, рулевое колесо, которое при попадании в бордюр / выбоину позволит программисту отодвинуться назад на определенный угол), но просто грохочет в неконтролируемом / произвольном направлении.
Таким образом, большинство функций Force Feedback, упомянутых в MSDN / DirectX и других API, на практике никогда не реализовывались на пользовательском рынке и не имеют таких плохих и / или непереносимых реализаций «умных» элементов управления (конверт, повтор и т. Д.), Как быть настолько непригодным, что на практике разработчики часто вынуждены просто использовать элементы управления ВКЛ / ВЫКЛ непосредственно со своей собственной реализацией эффекта.
Более продвинутые устройства, которые позволяют сервоуправляемую обратную связь по силе, нуждаются в пользовательских API, поскольку универсальные API ввода не поддерживают необходимые параметры (точные углы, точные силы, пределы и т. Д.).
Добавление новых технологий, таких как VR-перчатки, делает эти универсальные API еще более недостающими.
Наиболее распространенная реализация - это два двигателя постоянного тока с несбалансированной нагрузкой каждый, один из которых тяжелее другого и не имеет точного управления скоростью.
Как минимум, у вас есть контроль над ними, и вы можете выполнять ограниченное управление мощностью ШИМ, но не точное управление скоростью. Вы не знаете, какова будет скорость и возникающая вибрация. Разные контроллеры имеют разные двигатели и веса, которые будут работать на разных скоростях для одной и той же настройки.
Двигатели должны сначала раскрутиться и в течение некоторого времени потреблять полную мощность, а затем могут быть настроены на более низкую настройку. Задержка ускорения сильно ограничивает отзывчивость.
Контроллеры часто обновляются один раз за кадр, обеспечивая частоту обновления примерно от 20 Гц до 100 Гц. Это ограничивает разрешение вашего ШИМ-управления, поскольку вы не хотите, чтобы двигатели глохли при самых низких настройках. И вы не знаете, насколько низкими могут быть двигатели контроллера конечного пользователя перед остановкой (остановкой), поэтому вам нужен хороший запас прочности.
Некоторые системные требования накладывают дополнительные ограничения на то, что вы можете с ними делать.
Мобильные устройства обычно имеют только 1 вибрационный двигатель, и ШИМ может быть невозможен из-за низкой инерции из-за размера веса и медленной скорости обновления. Система может фильтровать его дальше, чтобы предотвратить неправильное использование или даже повреждение (ограничения транзистора силового привода и пики индукции) или просто очень медленную подсистему GPIO.
На мобильном телефоне вы можете быть ограничены или хотите ограничить себя «вибрацией примерно X * 50 миллисекунд» без ШИМ.
Некоторые новые устройства и контроллеры имеют соленоид, управляемый как динамик звуковой волной с низкой частотой дискретизации. Они дают вам больше контроля, но полностью отличаются от более распространенных контроллеров.
Из - за все эти различия , которые вы можете захотеть абстрагировать вибрационную систему , чтобы играть ограниченное количество высокоуровневых макро-эффекты по имени в перестрелке и забыть моды:
PlayVibration(player, "Got Loot");
,PlayVibration(player, "Heavy Fall");
,StopAllVibrationFor(player);
, ...Затем вам придется создавать низкоуровневые эффекты вибрации и код контроля вибрации, адаптированные для каждой платформы в отдельности .
Даже для музыкальной игры, требующей одного удара
PlayVibration
для каждого удара, легче управлять и контролировать, если учитывать приостановку игры и проблемы повторной синхронизации потенциального генератора периодических эффектов.Хотя устройства с реальным грохотом, управляемым соленоидом, могут рассматриваться как аудиоустройства и использовать аудио API из-за проблем с аккумулятором, это может противоречить правилам системы, если соленоид постоянно включен / активен . «Уровень мощности 0» может не совпадать с «Отключение соленоида», поэтому даже в этом случае требуется особая осторожность.
источник
От Андре Ламота в «Уловках гуру программирования игр для Windows»:
Хотя этот текст довольно старый, быстрый поиск в MSDN для обратной связи показывает, что упомянутые концепции не сильно изменились; Вот краткое изложение тем, описанных в их Основных концепциях обратной связи по силе :
Что касается PS4, то единственное, что я обнаружил, - это документация по Unreal Engine 4 , в которой говорится:
Как показывает ответ Стефана Хоккенхалла, каждая платформа отличается. И, как предлагается в чате GDSE , возможно, что подробности API обратной связи по PS4 ограничены NDA.
источник