Comment les concepteurs de jeux créent-ils des modèles de vibration?

13

Je suis curieux de créer et d'implémenter des modèles de vibration pour les contrôleurs de console (pour le contrôleur PS4, si cela fait une différence).

Il y a un paramètre de retard et de vitesse du moteur non? Mais nous pouvons également nous faner du moteur gauche vers la droite, ou les faire fonctionner ensemble ....

Existe-t-il un moyen standardisé de créer ces modèles?

Par exemple, j'ai pensé à les créer avec de l'audio wav stéréo dans un éditeur audio et à lire le fichier wav dans mon code pour les convertir en délais et en vitesses.

Comment cela se fait-il dans l'industrie du jeu?

franque
la source
J'ai vu des systèmes de grondement pilotés par le pipeline audio du jeu, vous pouvez donc être sur la bonne voie. Je ne peux pas parler d'expérience personnelle sur les détails - s'il y avait une piste de grondement spécifique ou si le grondement était déduit du volume de l'effet sonore, ou si la connexion était purement pour déclencher des sons et des grondements via une interface cohérente alors qu'ils étaient entièrement séparés formats de données source.
DMGregory
Vous n'avez pas ce contrôle précis sur le grondement. De plus, dans un DualShock, le grondement gauche est lourd et celui de droite est léger, vous obtenez donc une basse fréquence de celle de gauche. (Je pourrais avoir la gauche / droite en arrière, mais vous avez l'idée).
Almo
@Almo Qu'en est-il du système de grondement HD de Nintendo. Vous avez sûrement une forme de contrôle sur cela
Bálint
Ce qui révélerait que la question était trop large. Je ne connais pas vraiment leur système.
Almo
1
@DMGregory Les moteurs audio que je connais qui gèrent les grondements / haptiques utilisent simplement les mêmes déclencheurs, enveloppes, etc. - pas les formes d'onde audio. Comme le dit Almo, vous n'avez pas vraiment ce niveau de contrôle au niveau de l'API. Je ne peux pas imaginer que le système de Nintendo soit très différent - vous ne voudriez pas avoir à mettre à jour un système de grondement à une fréquence aussi élevée où les données audio réelles étaient un bon choix.
Richard Byron

Réponses:

8

Le contrôleur PS4 dualshock a des valeurs de 1 octet pour les packs de rumble gauche et droit, donc cela fonctionne essentiellement comme de la musique 8 bits.

La plupart d'entre eux sont derrière un NDA, il est donc très difficile d'obtenir des informations à ce sujet (même les informations ci-dessus étaient difficiles à obtenir, je ne l'ai compris qu'à partir d'un SDK tiers pour node.js). Voici les informations que j'ai rassemblées:

Le processus est littéralement comme faire de la musique stéréo à 1 octet (et il est censé être fait par un artiste musical). Cela implique de connecter un contrôleur PS4 à l'ordinateur et d'utiliser un programme pour créer les modèles de grondement. Ils en font un basé sur des suppositions, puis l'exécutent, puis le peaufinent et répètent ces étapes jusqu'à ce que le motif se sente bien.

Certains des grondements sont générés par programme (comme lorsqu'une voiture quitte la route), mais ce sont généralement soit une fonction simple (comme les sinus) ou une valeur constante similaire à la façon dont les téléphones le font. Même les effets les plus complexes consistent à multiplier un motif de grondement normalisé par la force que vous souhaitez.

Le SDK PS4 est également livré avec des modèles prédéfinis. En voici quelques exemples: un motif en dents de scie (en constante augmentation, puis passant de 255 à 0), une onde sinusale et des triangles (il augmente à 255 linéairement, puis redescend à 0 linéairement).

Je n'ai trouvé aucun détail sur les autres contrôleurs (en particulier le grondement HD de Switch, même le brevet ne décrit pas comment cela fonctionne). Mais ils utilisent probablement une approche similaire avec des packs de rumble plus précis.

Sources:

Bálint
la source
J'ai trouvé cet article il y a un certain temps qui présente la structure du rapport pour communiquer d'avant en arrière avec le contrôleur , y compris les décalages d'octets des canaux de grondement et le drapeau les contrôlant. Il pourrait être le plus complet disponible sur Internet public, sans accès à la documentation et aux API de Sony.
DMGregory
@DMGregory Cela vous dérangerait si j'ajoutais cela à une section sources?
Bálint
Je vous en prie. :) Je l'ai partagé en espérant être utile.
DMGregory
4

Il n'y a aucun moyen standardisé.

Différents appareils ont différentes capacités et limitations de grondement.

La grande majorité des appareils ne prennent pas en charge le "retour de force" réel (par exemple: un volant qui, en frappant un trottoir / nid de poule, permettrait au programmeur de reculer sous un angle spécifique), mais grondent dans une direction non contrôlée / arbitraire.

Ainsi, la plupart des fonctionnalités Force Feedback mentionnées sur MSDN / DirectX et d'autres API ne se sont jamais vraiment matérialisées dans la pratique sur le marché des utilisateurs ou ont des implémentations aussi pauvres et / ou non portables des contrôles "intelligents" (enveloppe, répétition, etc.) que être si inutilisable que dans la pratique, les développeurs sont souvent obligés d'utiliser simplement les commandes ON / OFF directement avec leur propre implémentation d'effet.

Les appareils plus avancés qui permettent un retour de force asservi nécessitent des API personnalisées car les API d'entrée génériques ne prennent pas en charge les paramètres nécessaires (angles exacts, forces exactes, limites, etc.).

L'ajout de technologies émergentes telles que les gants de sensation VR dans le mélange rend ces API génériques encore plus manquantes.


La mise en œuvre la plus courante consiste en deux moteurs CC avec une charge déséquilibrée chacun, l'un étant plus lourd que l'autre et sans contrôle de vitesse précis.

Au minimum, vous avez un contrôle on / off sur eux et pouvez faire un contrôle de puissance PWM limité mais pas un contrôle de vitesse exact. Vous ne savez pas quelle sera la vitesse et les vibrations qui en résulteront. Différents contrôleurs ont des moteurs et des poids différents qui fonctionneront à différentes vitesses pour le même réglage.

Les moteurs doivent d'abord tourner et nécessitent une pleine puissance pendant un peu de temps, puis peuvent être PWM à un réglage inférieur. Le délai de rotation limite considérablement la réactivité.

Les contrôleurs sont souvent mis à jour une fois par trame, ce qui vous donne une fréquence de mise à jour d'environ 20 Hz à 100 Hz. Cela limite la résolution de votre contrôle PWM car vous ne voulez pas que les moteurs calent au réglage le plus bas. Et vous ne savez pas à quel point les moteurs du contrôleur de l'utilisateur final peuvent descendre avant le calage (arrêt), vous avez donc besoin d'une bonne marge de sécurité.

Certaines exigences du système limitent davantage ce que vous pouvez en faire.

Les appareils mobiles n'ont généralement qu'un seul moteur à vibration et le PWM peut ne pas être possible en raison de la faible inertie due à la taille du poids et de la lenteur de la mise à jour. Le système peut le filtrer davantage pour éviter les abus ou peut-être même des dommages (limites du transistor du pilote d'alimentation et pointes d'induction) ou tout simplement un sous-système GPIO très lent.

Sur mobile, vous pouvez être limité ou vouloir vous limiter à "vibrer pendant environ X * 50 millisecondes" sans PWM.

Certains appareils et contrôleurs plus récents ont un solénoïde piloté comme un haut-parleur par une onde audio à faible fréquence d'échantillonnage. Ceux-ci vous donnent plus de contrôle mais sont complètement différents des contrôleurs les plus courants.


En raison de toutes ces différences , vous voudrez peut - être abstraite du système de vibration à jouer un nombre limité de haut niveau macro-effets par nom dans une fusillade et oublier la mode: PlayVibration(player, "Got Loot");, PlayVibration(player, "Heavy Fall");, StopAllVibrationFor(player);, ...

Ensuite, vous devrez créer des effets de vibration de bas niveau et un code de contrôle des vibrations adapté à chaque plate-forme individuellement .

Même pour un jeu de musique, il PlayVibrationest plus facile de gérer et de contrôler un seul coup pour chaque battement lors de la mise en pause du jeu et des problèmes de resynchronisation d'un générateur d'effets périodiques intelligent.

Bien que les appareils avec un véritable grondement entraîné par un solénoïde puissent être traités comme un appareil audio et utiliser des API audio en raison de problèmes de batterie, cela peut aller à l'encontre des réglementations du système si le solénoïde est constamment alimenté / actif . "Power Level 0" peut ne pas être identique à "Solenoid Off" donc même alors une attention particulière est nécessaire.

Stéphane Hockenhull
la source
3

De André LaMothe dans Tricks of the Windows Game Programming Gourous:

La programmation de ces appareils est très complexe. Non seulement une bonne compréhension de la force, du ressort et du mouvement est nécessaire, mais les dispositifs et les événements de forces, ou effets, ont une relation très étroite avec les notes de musique. Autrement dit, ils peuvent avoir une enveloppe qui module les forces lorsqu'elles sont appliquées aux différents moteurs et actionneurs du joystick. Ainsi, des valeurs telles que le taux, la fréquence, la synchronisation, etc. jouent toutes un rôle dans l'utilisation et la programmation du retour de force.

Bien que ce texte soit assez ancien, une recherche rapide dans MSDN pour le retour de force montre que les concepts mentionnés n'ont pas beaucoup changé; voici un résumé des sujets traités dans leurs concepts de base du retour de force :

  • Force constante: une force constante dans une seule direction
  • Force de rampe: force qui augmente ou diminue régulièrement en amplitude.
  • Effet périodique: une force qui palpite selon un modèle d'onde défini.
  • Condition: Une réaction au mouvement ou à la position le long d'un axe.
  • Enveloppe: une enveloppe définit une valeur d'attaque et une valeur de fondu, qui modifient l'amplitude de début et de fin de l'effet.
  • Décalage: définit la quantité de décalage de la forme d'onde vers le haut ou vers le bas par rapport au niveau de base.
  • Échelle: une seule valeur de gain peut être appliquée à tous les effets d'un appareil.

En ce qui concerne la PS4, la seule chose que j'ai trouvée était de la documentation d'Unreal Engine 4 , qui stipule:

Ces (identifiants) seront mappés en fonction de l'implémentation spécifique à la plateforme. Par exemple, la PS4 écoute uniquement les canaux XXX_LARGE et ignore le reste, tandis que la XBox One peut mapper XXX_LARGE aux moteurs de poignée et XXX_SMALL aux moteurs de déclenchement. Et iOS peut mapper LEFT_SMALL à son moteur unique.

Comme l'indique la réponse de Stéphane Hockenhull, chaque plateforme est différente. Et comme suggéré dans le chat GDSE, il est possible que les détails de l'API de retour de force PS4 soient limités par la NDA.

Pikalek
la source