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?
playstation4
force-feedback
franque
la source
la source
Réponses:
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:
la source
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
PlayVibration
est 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.
la source
De André LaMothe dans Tricks of the Windows Game Programming Gourous:
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 :
En ce qui concerne la PS4, la seule chose que j'ai trouvée était de la documentation d'Unreal Engine 4 , qui stipule:
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.
la source