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?
playstation4
force-feedback
fränkisch
quelle
quelle
Antworten:
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:
quelle
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
PlayVibration
ist 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.
quelle
Von André LaMothe in Tricks der Windows Game Programming Gurus:
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 :
In Bezug auf die PS4 war das einzige, was ich auftauchte, eine Unreal Engine 4-Dokumentation , in der es heißt:
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.
quelle