In che modo i progettisti di giochi creano schemi di vibrazione?


13

Sono curioso di creare e implementare modelli di vibrazione per i controller di console (per il controller PS4, se fa la differenza).

C'è un parametro di ritardo e velocità del motore giusto? Ma possiamo anche svanire dal motore sinistro a destra o farli lavorare insieme ...

Esiste un modo standardizzato per creare questi schemi?

Ad esempio, ho pensato di crearli con audio wav stereo in un editor audio e di leggere il file wav nel mio codice per convertirli in ritardi e velocità.

Come viene fatto nel settore dei giochi?


Ho visto sistemi di rumble guidati attraverso la pipeline audio del gioco, quindi potresti essere sulla buona strada. Non posso parlare per esperienza personale dei dettagli, se ci fosse una traccia rombo specifica o se il rombo fosse dedotto dal volume degli effetti sonori o se la connessione fosse puramente per attivare suoni e rumori attraverso un'interfaccia coerente mentre usavano completamente separati formati di dati di origine.
DMGregory

Non hai quel controllo preciso sul rombo. Inoltre, in un DualShock, il rumbler sinistro è pesante e quello destro è leggero, quindi ottieni una bassa frequenza da quella a sinistra. (Potrei avere la sinistra / la destra all'indietro, ma hai l'idea).
Almo,

@Almo Che dire del rombo HD di Nintendo. Sicuramente hai una qualche forma di controllo su questo
Bálint,

Il che rivelerebbe che la domanda è troppo ampia. In realtà non conosco il loro sistema.
Almo,

1
@DMGregory I motori audio di cui sono a conoscenza che gestiscono rumble / aptici usano solo gli stessi trigger, inviluppi, ecc., Non forme d'onda audio. Come dice Almo, non hai davvero quel livello di controllo a livello di API. Non riesco a immaginare che il sistema Nintendo sia molto diverso: non dovresti aggiornare alcun sistema di rumble ad una frequenza così elevata in cui i dati audio effettivi fossero una buona scelta.
Richard Byron,

Risposte:


8

Il controller PS4 dualshock ha valori di 1 byte per i rumble pack sinistro e destro, quindi sostanzialmente funziona come musica a 8 bit.

La maggior parte di questi sono dietro un accordo di non divulgazione, quindi è molto difficile ottenere qualsiasi informazione al riguardo (anche le informazioni sopra erano difficili da ottenere, l'ho capito solo da un SDK di terze parti per node.js). Queste sono le informazioni che ho messo insieme:

Il processo è letteralmente come fare musica stereo a 1 byte (ed è presumibilmente realizzato da un artista musicale). Implica il collegamento di un controller PS4 al computer e l'utilizzo di un programma per creare schemi di rumble. Ne fanno uno basato sull'ipotesi, quindi lo eseguono, quindi lo modificano e ripetono questi passaggi fino a quando il modello non si sente bene.

Alcuni rumori sono generati in modo programmatico (come quando un'auto va fuori strada), ma di solito sono o una funzione semplice (come il seno) o un valore costante simile a quello che fanno i telefoni. Anche gli effetti più complessi consistono nel moltiplicare un modello di rombo normalizzato per la forza che desideri.

L'SDK PS4 include anche alcuni schemi predefiniti. Alcuni esempi sono: uno schema a dente di sega (in costante aumento, quindi da 255 a 0), un'onda sinusale e triangoli (aumenta a 255 in modo lineare, quindi torna indietro a 0 in modo lineare).

Non sono riuscito a trovare dettagli su altri controller (in particolare il rombo HD di Switch, nemmeno il brevetto descrive come funziona). Ma probabilmente stanno usando un approccio simile con pacchetti di rumble più precisi.

fonti:


Ho trovato questo articolo qualche tempo fa che delinea la struttura del report per comunicare avanti e indietro con il controller , compresi gli offset di byte dei canali di rombo e la bandiera che li controlla. Potrebbe essere il più completo disponibile su Internet pubblico, senza accesso alla documentazione e alle API di Sony.
DMGregory

@DMGregory Ti dispiacerebbe se lo aggiungessi a una sezione delle fonti?
Bálint,

Per favore fallo. :) L'ho condiviso sperando di essere utile.
DMGregory

4

Non esiste un modo standardizzato.

Dispositivi diversi presentano diverse funzionalità e limitazioni.

La stragrande maggioranza dei dispositivi non supporta l'effettivo "feedback di forza" (ad esempio: un volante che quando colpisce un marciapiede / buca consentirebbe al programmatore di spingere indietro di un angolo specifico), ma rombo solo in una direzione incontrollata / arbitraria.

Quindi la maggior parte delle funzionalità di Force Feedback menzionate su MSDN / DirectX e altre API non si sono mai concretizzate concretamente sul mercato degli utenti o hanno implementazioni così scarse e / o non portatili dei controlli "intelligenti" (inviluppo, ripetizione, ecc.) Come essere così inutilizzabili che in pratica gli sviluppatori sono spesso costretti a usare i controlli ON / OFF direttamente con la propria implementazione degli effetti.

I dispositivi più avanzati che consentono il feedback della forza servocontrollata richiedono API personalizzate poiché le API di input generiche non supportano i parametri necessari (angoli esatti, forze esatte, limiti, ecc.).

L'aggiunta di tecnologie emergenti come i guanti antirumore VR nel mix rende ancora più carenti quelle API generiche.


L'implementazione più comune è con due motori DC con un carico sbilanciato ciascuno, uno pesato più pesante dell'altro e senza controllo preciso della velocità.

Come minimo hai il controllo on / off su di essi e puoi fare un controllo limitato della potenza PWM ma non un controllo esatto della velocità. Non sai quale sarà la velocità e la vibrazione risultante. Controller diversi hanno motori e pesi diversi che funzionano a velocità diverse per la stessa impostazione.

I motori devono prima girare e richiedono piena potenza per un po 'di tempo, quindi possono essere PWM a un'impostazione più bassa. Il ritardo di rotazione limita notevolmente la reattività.

I controller vengono spesso aggiornati una volta per frame, offrendo una frequenza di aggiornamento da 20Hz a 100Hz. Ciò limita la risoluzione del controllo PWM poiché non si desidera che i motori si arrestino all'impostazione più bassa. E non sai quanto in basso possono andare i motori del controller dell'utente finale prima di arrestarsi (arrestarsi), quindi hai bisogno di un buon margine di sicurezza.

Alcuni requisiti di sistema pongono ulteriori limiti su ciò che è possibile fare con essi.

I dispositivi mobili di solito hanno solo 1 motore a vibrazione e la PWM potrebbe non essere possibile a causa della bassa inerzia delle dimensioni del peso e della velocità di aggiornamento lenta. Il sistema può filtrarlo ulteriormente per prevenire abusi o addirittura danni (limiti dei transistor del driver di alimentazione e picchi di induzione) o solo un sottosistema GPIO molto lento.

Sui dispositivi mobili potresti essere limitato o voler limitarti a "vibrare per circa X * 50 millisecondi" senza PWM.

Alcuni dispositivi e controller più recenti hanno un solenoide pilotato come un altoparlante da un'onda audio a bassa frequenza di campionamento. Questi ti offrono un maggiore controllo ma sono completamente diversi dai controller più comuni.


A causa di tutte queste differenze si può prendere in astratto il sistema di vibrazione di giocare un numero limitato di alto livello macro-effetti per nome in un tiro-e-dimentica moda: PlayVibration(player, "Got Loot");, PlayVibration(player, "Heavy Fall");, StopAllVibrationFor(player);, ...

Quindi dovrai creare effetti di vibrazione di basso livello e codice di controllo delle vibrazioni adattato a ciascuna piattaforma individualmente .

Anche per un gioco musicale che richiede un colpo solo PlayVibrationper ogni battito è più facile da gestire e controllare quando si considera il fatto di mettere in pausa il gioco e le questioni di risincronizzazione di un generatore di effetti periodici potenzialmente intelligente.

Mentre i dispositivi con un vero rombo guidato dal solenoide possono essere trattati come un dispositivo audio e utilizzano API audio a causa di problemi di batteria, ciò potrebbe compromettere le normative del sistema se il solenoide è costantemente alimentato / attivo . "Livello di potenza 0" potrebbe non essere uguale a "Solenoide spento", quindi anche in questo caso è necessario prestare particolare attenzione.


3

Da André LaMothe in Tricks of the Windows Game Programming Gurus:

La programmazione di questi dispositivi è molto complessa. Non solo è necessaria una buona comprensione della forza, della molla e del movimento, ma i dispositivi e gli eventi delle forze o gli effetti hanno una relazione molto stretta con le note musicali. Cioè, possono avere un inviluppo che modula le forze mentre vengono applicate ai vari motori e attuatori sul joystick. Pertanto, valori come frequenza, frequenza, tempistica e così via svolgono un ruolo nell'uso e nella programmazione del feedback della forza.

Mentre quel testo è piuttosto vecchio, una rapida ricerca attraverso MSDN per il feedback forzato mostra che i concetti menzionati non sono cambiati molto; ecco un riepilogo degli argomenti trattati nei Concetti di base del Force Feedback :

  • Forza costante: una forza costante in una sola direzione
  • Forza di rampa: una forza che aumenta o diminuisce costantemente in grandezza.
  • Effetto periodico: una forza che pulsa secondo uno schema d'onda definito.
  • Condizione: una reazione al movimento o alla posizione lungo un asse.
  • Inviluppo: un inviluppo definisce un valore di attacco e un valore di dissolvenza, che modificano la grandezza iniziale e finale dell'effetto.
  • Offset: definisce la quantità di spostamento della forma d'onda verso l'alto o verso il basso dal livello di base.
  • Scala: un singolo valore di guadagno può essere applicato a tutti gli effetti per un dispositivo.

In termini di PS4, l'unica cosa che ho scoperto è stata la documentazione di Unreal Engine 4 , che afferma:

Questi (identificatori) saranno mappati in base all'implementazione specifica della piattaforma. Ad esempio, la PS4 ascolta solo i canali XXX_LARGE e ignora il resto, mentre l'XBox One potrebbe mappare XXX_LARGE ai motori della maniglia e XXX_SMALL ai motori del trigger. E iOS può mappare LEFT_SMALL sul suo singolo motore.

Come indica la risposta di Stephane Hockenhull, ogni piattaforma è diversa. E come suggerito nella chat GDSE è possibile che i dettagli per l'API di feedback forzato PS4 siano soggetti a restrizioni NDA.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.