Wie erstellen Spieledesigner Vibrationsmuster?

13

Ich bin neugierig darauf, Vibrationsmuster für Konsolen-Controller zu erstellen und zu implementieren (für den PS4-Controller, wenn es einen Unterschied macht).

Es gibt einen Parameter für Verzögerung und Motordrehzahl, oder? Aber wir können auch von links nach rechts überblenden oder sie zusammenarbeiten lassen ....

Gibt es eine standardisierte Möglichkeit, diese Muster zu erstellen?

Ich habe zum Beispiel darüber nachgedacht, sie mit Stereo-WAV-Audio in einem Audio-Editor zu erstellen und die WAV-Datei in meinem Code zu lesen, um sie in Verzögerungen und Geschwindigkeiten umzuwandeln.

Wie geht das in der Gaming-Branche?

fränkisch
quelle
Ich habe Rumpelsysteme gesehen, die durch die Audio-Pipeline des Spiels getrieben wurden, sodass Sie möglicherweise auf dem richtigen Weg sind. Ich kann jedoch aus persönlicher Erfahrung nicht über die Details sprechen - ob es eine bestimmte Rumpelspur gab oder ob das Rumpeln von der Lautstärke des Soundeffekts abgeleitet wurde oder ob die Verbindung nur dazu diente, Geräusche und Rumpel über eine konsistente Schnittstelle auszulösen, während sie vollständig getrennt verwendet wurden Quelldatenformate.
DMGregory
Sie haben nicht die genaue Kontrolle über das Rumpeln. Außerdem ist bei einem DualShock der linke Rumpel schwer und der rechte leicht, sodass Sie von dem linken eine niedrige Frequenz erhalten. (Ich könnte das links / rechts rückwärts haben, aber Sie bekommen die Idee).
Almo
@Almo Was ist mit Nintendos HD-Rumpelsystem? Sie haben sicherlich eine gewisse Kontrolle darüber
Bálint
Das würde die Frage offenbaren, um zu breit zu sein. Ich weiß nicht wirklich über ihr System.
Almo
1
@DMGregory Die Audio-Engines, von denen ich weiß, dass sie mit Rumpeln / Haptik umgehen, verwenden nur dieselben Trigger, Hüllkurven usw. - keine Audio-Wellenformen. Wie Almo sagt, haben Sie auf API-Ebene nicht wirklich diese Kontrolle. Ich kann mir nicht vorstellen, dass das System von Nintendo anders ist - Sie möchten kein Rumpelsystem mit einer so hohen Frequenz aktualisieren, bei der die tatsächlichen Audiodaten eine gute Wahl waren.
Richard Byron

Antworten:

8

Der PS4-Dualshock-Controller verfügt über 1-Byte-Werte für das linke und das rechte Rumble-Pack. Dies funktioniert also im Wesentlichen wie 8-Bit-Musik.

Die meisten davon stehen hinter einem NDA, so dass es sehr schwierig ist, Informationen darüber zu erhalten (selbst die obigen Informationen waren schwer zu bekommen, ich habe sie nur aus einem SDK eines Drittanbieters für node.js herausgefunden). Dies sind die Informationen, die ich zusammengestellt habe:

Der Vorgang ist buchstäblich so, als würde man 1-Byte-Stereomusik machen (und angeblich von einem Musikkünstler). Dazu muss ein PS4-Controller an den Computer angeschlossen und mit einem Programm das Rumpelmuster erstellt werden. Sie erstellen eine basierend auf Vermutungen, führen sie dann aus, optimieren sie und wiederholen diese Schritte, bis sich das Muster gut anfühlt.

Einige der Rumpelgeräusche werden programmgesteuert erzeugt (z. B. wenn ein Auto von der Straße abfährt), aber es handelt sich normalerweise entweder um eine einfache Funktion (z. B. Sinus) oder um einen konstanten Wert, der dem der Telefone ähnelt. Selbst die komplexesten Effekte bestehen darin, ein normalisiertes Rumpelmuster mit der gewünschten Stärke zu multiplizieren.

Das PS4 SDK enthält auch einige vordefinierte Muster. Einige Beispiele sind: ein Sägezahnmuster (stetig ansteigend, dann von 255 auf 0), eine Sinuswelle und Dreiecke (linear auf 255, dann linear zurück auf 0).

Ich konnte keine Details zu anderen Controllern finden (insbesondere Switchs HD-Rumpeln, nicht einmal das Patent beschreibt, wie das funktioniert). Aber sie verwenden wahrscheinlich einen ähnlichen Ansatz mit genaueren Rumble-Packs.

Quellen:

Bálint
quelle
Vor einiger Zeit habe ich diesen Artikel gefunden , in dem die Berichtsstruktur für die Kommunikation zum Controller beschrieben ist , einschließlich der Byte-Offsets der Rumpelkanäle und des Flags, mit dem sie gesteuert werden. Es ist möglicherweise das umfassendste, das im öffentlichen Internet verfügbar ist, ohne Zugriff auf Sonys eigene Dokumentation und APIs.
DMGregory
@DMGregory Würde es Ihnen etwas ausmachen, wenn ich das zu einem Quellenabschnitt hinzufügen würde?
Bálint
Bitte. :) Ich teilte es in der Hoffnung, von Nutzen zu sein.
DMGregory
4

Es gibt keinen standardisierten Weg.

Unterschiedliche Geräte haben unterschiedliche Rumpelfunktionen und -beschränkungen.

Die überwiegende Mehrheit der Geräte unterstützt kein "Force Feedback" (z. B. ein Lenkrad, das es dem Programmierer ermöglicht, auf einen bestimmten Winkel zurückzudrücken, wenn er auf einen Bordstein oder ein Schlagloch trifft), sondern rumpelt nur in eine unkontrollierte / willkürliche Richtung.

Die meisten der Force Feedback-Funktionen, die in MSDN / DirectX und anderen APIs erwähnt werden, haben sich in der Praxis noch nie auf dem Benutzermarkt bewährt oder sind nur schlecht und / oder nicht portabel in der Lage, die "intelligenten" Steuerelemente (Envelope, Repeat usw.) zu implementieren Um so unbrauchbar zu sein, dass Entwickler in der Praxis häufig gezwungen sind, die ON / OFF-Regler direkt mit ihrer eigenen Effektimplementierung zu verwenden.

Fortgeschrittenere Geräte, die servogesteuertes Force-Feedback ermöglichen, benötigen benutzerdefinierte APIs, da generische Eingabe-APIs die erforderlichen Parameter (exakte Winkel, exakte Kräfte, Grenzen usw.) nicht unterstützen.

Durch das Hinzufügen neuer Technologien wie VR-Feeling-Handschuhen zum Mix fehlen diese generischen APIs noch mehr.


Die gebräuchlichste Implementierung sind zwei Gleichstrommotoren mit jeweils einer unsymmetrischen Last, wobei einer schwerer als der andere gewichtet ist und keine präzise Drehzahlregelung erfolgt.

Zumindest haben Sie die Kontrolle über das Ein- und Ausschalten und können eine begrenzte PWM ausführen Leistungskontrolle, aber keine exakte Geschwindigkeitskontrolle durchführen. Sie wissen nicht, wie hoch die Geschwindigkeit und die resultierende Vibration tatsächlich sein werden. Verschiedene Steuerungen haben unterschiedliche Motoren und Gewichte, die bei gleicher Einstellung mit unterschiedlichen Drehzahlen laufen.

Die Motoren müssen zuerst hochlaufen und benötigen für einige Zeit die volle Leistung, dann kann die PWM auf eine niedrigere Einstellung eingestellt werden. Die Anlaufverzögerung schränkt die Reaktionsfähigkeit stark ein.

Die Controller werden häufig einmal pro Frame aktualisiert, sodass Sie eine Aktualisierungsfrequenz von etwa 20 Hz bis 100 Hz erhalten. Dies begrenzt die Auflösung Ihrer PWM-Steuerung, da Sie nicht möchten, dass die Motoren bei der niedrigsten Einstellung blockieren. Und Sie wissen nicht, wie niedrig die Motoren der Endbenutzersteuerung sein können, bevor sie anhalten, sodass Sie eine gute Sicherheitsmarge benötigen.

Einige Systemanforderungen schränken Ihre Möglichkeiten weiter ein.

Mobile Geräte haben normalerweise nur 1 Vibrationsmotor und PWM ist möglicherweise aufgrund der geringen Trägheit aufgrund des Gewichts und der langsamen Aktualisierungsrate nicht möglich. Das System filtert es möglicherweise weiter, um Missbrauch oder sogar Beschädigung (Grenzwerte für Leistungstransistoren und Induktionsspitzen) oder nur ein wirklich langsames GPIO-Subsystem zu verhindern.

Auf Mobilgeräten sind Sie möglicherweise eingeschränkt oder möchten sich darauf beschränken, ohne PWM für ungefähr X * 50 Millisekunden zu vibrieren.

Einige neuere Geräte und Controller verfügen über ein Solenoid, das wie ein Lautsprecher von einer Audiowelle mit niedriger Abtastrate angetrieben wird. Diese bieten Ihnen mehr Kontrolle, unterscheiden sich jedoch grundlegend von den gängigen Controllern.


Wegen all dieser Unterschiede sollten Sie abstrakte das Schwingungssystem eine begrenzte Anzahl von High-Level - Makro-Effekte namentlich in einem Shoot-and-Forget - Mode spielen: PlayVibration(player, "Got Loot");, PlayVibration(player, "Heavy Fall");, StopAllVibrationFor(player); , ...

Dann müssen Sie schwache Vibrationseffekte und Vibrationskontrollcodes erstellen, die für jede Plattform individuell angepasst sind .

Selbst bei einem Musikspiel PlayVibrationist es einfacher , One-Shot für jeden Schlag zu verwenden und zu steuern, wenn das Spiel pausiert wird und Probleme bei der Neusynchronisierung eines regelmässigen Effektgenerators auftreten.

Während Geräte mit einem tatsächlichen elektromagnetischen Rumpeln wie ein Audiogerät behandelt werden können und Audio-APIs aufgrund von Batterieproblemen verwenden, kann dies den Vorschriften des Systems zuwiderlaufen, wenn das Magnetventil ständig mit Strom versorgt / aktiv ist . "Leistungsstufe 0" stimmt möglicherweise nicht mit "Magnet aus" überein, daher ist auch dann besondere Vorsicht geboten.

Stephane Hockenhull
quelle
3

Von André LaMothe in Tricks der Windows Game Programming Gurus:

Die Programmierung dieser Geräte ist sehr komplex. Es ist nicht nur ein gutes Verständnis von Kraft, Feder und Bewegung erforderlich, sondern die Geräte und die Kraftereignisse oder -effekte stehen in enger Beziehung zu den Musiknoten. Das heißt, sie können eine Hüllkurve haben, die die Kräfte moduliert, wenn sie auf die verschiedenen Motoren und Aktuatoren des Joysticks einwirken. Daher spielen Werte wie Rate, Frequenz, Timing usw. eine Rolle bei der Verwendung und Programmierung von Force Feedback.

Obwohl dieser Text ziemlich alt ist, zeigt eine schnelle Suche im MSDN nach Force-Feedback, dass sich an den genannten Konzepten nicht viel geändert hat. Hier ist eine Zusammenfassung der Themen, die in den Grundkonzepten für Force Feedback behandelt werden :

  • Konstante Kraft: Eine konstante Kraft in einer Richtung
  • Rampenkraft: Eine Kraft, deren Größe stetig zunimmt oder abnimmt.
  • Periodischer Effekt: Eine Kraft, die nach einem definierten Wellenmuster pulsiert.
  • Bedingung: Eine Reaktion auf Bewegung oder Position entlang einer Achse.
  • Hüllkurve: Eine Hüllkurve definiert einen Attack-Wert und einen Fade-Wert, die den Anfangs- und Endbetrag des Effekts ändern.
  • Offset: Definiert den Betrag, um den die Wellenform vom Basispegel nach oben oder unten verschoben wird.
  • Skalieren: Ein einzelner Verstärkungswert kann auf alle Effekte eines Geräts angewendet werden.

In Bezug auf die PS4 war das einzige, was ich auftauchte, eine Unreal Engine 4-Dokumentation , in der es heißt:

Diese (Identifikatoren) werden gemäß der plattformspezifischen Implementierung zugeordnet. Zum Beispiel hört die PS4 nur auf die XXX_LARGE-Kanäle und ignoriert den Rest, während die XBox One die XXX_LARGE den Griffmotoren und XXX_SMALL den Triggermotoren zuordnen könnte. Und iOS kann LEFT_SMALL seinem einzelnen Motor zuordnen.

Wie die Antwort von Stephane Hockenhull zeigt, ist jede Plattform anders. Und wie im GDSE-Chat vorgeschlagen , sind die Details für die PS4-Force-Feedback-API möglicherweise NDA-beschränkt.

Pikalek
quelle