Як дизайнери ігор створюють вібраційні схеми?


13

Мені цікаво створити та впровадити схеми вібрації для контролерів консолі (для контролера PS4, якщо це має значення).

Є параметр затримки та швидкості двигуна, правда? Але також ми можемо згасати з лівого двигуна вправо або змусити їх працювати разом.

Чи є стандартизований спосіб створення цих моделей?

Наприклад, я думав про те, щоб створити їх зі стереосистемою WAV-аудіо в аудіоредакторі та прочитати файл wav у своєму коді, щоб перетворити їх на затримки та швидкості.

Як це робиться в ігровій індустрії?


Я бачив гумові системи, що проходять через аудіопрограму гри, тому ви, можливо, будете там на шляху. Я не можу говорити з особистого досвіду про деталі, хоча - чи була певна доріжка гулу, чи гуркіт виводився з гучності ефекту звуку, або якщо з'єднання було виключно для того, щоб викликати звуки та гуркіт через послідовний інтерфейс, тоді як вони використовувались повністю окремо формати вихідних даних
DMGregory

У вас немає такого точного контролю над гулом. Також у DualShock лівий гуркіт важкий, а правий - легкий, тому ви отримуєте низьку частоту від лівої. (У мене може бути лівий / правий відсталий, але ви розумієте).
Алмо

@Almo Що з системою гучності HD від Nintendo. У вас, безумовно, є якась форма контролю над цим
Балінт,

Що виявило б питання занадто широким. Я насправді не знаю про їхню систему.
Алмо

1
@DMGregory Аудіо-двигуни, які я знаю, що обробляють гул / хаптики, просто використовують ті самі тригери, конверти тощо - не аудіосигнали. Як каже Альмо, у вас насправді немає такого рівня контролю на рівні API. Я не можу уявити, що система Nintendo сильно відрізняється - вам не хотілося б оновлювати будь-яку гуркітну систему на такій високій частоті, коли фактичні аудіодані були хорошим вибором.
Річард Байрон

Відповіді:


8

Контролер PS4 dualshock має 1 байт значення для лівого та правого пакетів гулу, тому це в основному працює як 8-бітова музика.

Більшість із них знаходяться за NDA, тому дуже важко отримати будь-яку інформацію про це (навіть інформацію вище було важко отримати, я лише зрозумів це у сторонній SDK для node.js). Це інформація, яку я зібрав разом:

Процес буквально схожий на створення 1-байтної стерео-музики (і це нібито зроблено музичним виконавцем). Він передбачає підключення контролера PS4 до комп'ютера та використання програми для створення шаблонів гулу. Вони роблять один на основі здогадів, потім запускають його, потім налаштовують його і повторюють ці кроки, поки шаблон не відчує себе добре.

Деякі звуки генеруються програмно (наприклад, коли машина їде з дороги), але це зазвичай або проста функція (наприклад, синус), або постійне значення, подібне тому, як це роблять телефони. Навіть найскладніші ефекти полягають у множенні нормалізованої картини гудіння на потрібну силу.

PS4 SDK також постачається з деякими заздалегідь визначеними моделями. Деякі приклади: малюнок пиляного зуба (постійно збільшується, потім йде від 255 до 0), синусова хвиля та трикутники (вона збільшується до 255 лінійно, потім назад до 0 лінійно).

Я не міг знайти жодних деталей щодо інших контролерів (особливо HD-гул Switch, навіть патент не описує, як це працює). Але вони, ймовірно, використовують аналогічний підхід з більш точними пакетами гул.

Джерела:


Нещодавно я знайшов цю статтю, у якій викладається структура звіту для передачі контролеру вперед і назад , включаючи зміщення байтів каналів гулу та прапор, який контролює їх. Це може бути найповнішим доступним у загальнодоступному Інтернеті без доступу до власної документації та API Sony.
DMGregory

@DMGregory Ви б заперечували, якби додати це до розділу джерел?
Bálint

Будь ласка. :) Я поділився цим сподіваючись бути корисним.
DMGregory

4

Не існує стандартизованого способу.

Різні пристрої мають різні можливості та обмеження гучності.

Переважна більшість пристроїв не підтримують фактичну «зворотну силу» (наприклад: рульове колесо, яке при натисканні на бордюр / вибоїну дозволить програмісту відсунутись під певний кут), а просто гуркотить у деякому неконтрольованому / довільному напрямку.

Тож більшість функцій форсивного зворотного зв’язку, згаданих у 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" може бути не такий, як "Соленоїд вимкнено", тому навіть тоді потрібен особливий догляд.


3

Від Андре Ламоте в фокусах Гуру програмування ігор Windows:

Програмування цих пристроїв дуже складне. Необхідно не тільки добре розуміння сили, пружини та руху, але пристрої та сили, події чи ефекти мають дуже тісний зв’язок із музичними нотами. Тобто вони можуть мати конверт, який модулює сили, коли вони застосовуються до різних двигунів та приводів на джойстику. Таким чином, такі величини, як швидкість, частота, час та інше, відіграють роль у використанні та програмуванні зворотного зв'язку.

Хоча цей текст досить старий, швидкий пошук MSDN для зворотного зв'язку показує, що згадані концепції не сильно змінилися; ось короткий опис тем, що висвітлюються в їх основних концепціях насильницького зворотного зв’язку :

  • Постійна сила: Постійна сила в одному напрямку
  • Сила пандуса: сила, яка постійно збільшується або зменшується на величину.
  • Періодичний ефект: сила, що пульсує відповідно до визначеної хвильової картини.
  • Умова: реакція на рух або положення вздовж осі.
  • Конверт: конверт визначає значення атаки та значення зникання, які змінюють початкову та кінцеву величину ефекту.
  • Зсув: визначає величину, на яку форма хвилі зміщується вгору або вниз від базового рівня.
  • Масштаб: Одиничне значення посилення може бути застосоване до всіх ефектів для пристрою.

Щодо PS4, єдине, що я з'явив, - це документація Unreal Engine 4 , в якій сказано:

Ці (ідентифікатори) будуть відображені відповідно до конкретної реалізації платформи. Наприклад, PS4 прослуховує лише канали XXX_LARGE і ігнорує решту, тоді як XBox One може зіставити XXX_LARGE на рушійні двигуни, а XXX_SMALL на тригерні двигуни. І iOS може зіставити LEFT_SMALL на свій єдиний двигун.

Як свідчить відповідь Стефана Хокенхолла, кожна платформа різна. І як було запропоновано в чаті GDSE , можливо, деталі для API зворотного зв’язку PS4 обмежені NDA.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.