W jaki sposób projektanci gier tworzą wzory wibracji?


13

Jestem ciekawy tworzenia i wdrażania wzorów wibracji dla kontrolerów konsoli (dla kontrolera PS4, jeśli to robi różnicę).

Czy istnieje parametr opóźnienia i prędkości silnika, prawda? Ale możemy też przechodzić z lewego silnika na prawy lub sprawić, by działały razem ....

Czy istnieje ustandaryzowany sposób tworzenia tych wzorów?

Na przykład pomyślałem o stworzeniu ich z dźwiękiem stereo wav w edytorze audio i przeczytaniem pliku wav w moim kodzie, aby przekonwertować je na opóźnienia i prędkości.

Jak to się robi w branży gier?


Widziałem systemy dudnienia prowadzone przez potok audio gry, więc możesz być na dobrej drodze. Nie mogę jednak powiedzieć z własnego doświadczenia o szczegółach - niezależnie od tego, czy była konkretna ścieżka dudnienia, czy dudnienie zostało wyprowadzone z głośności efektu dźwiękowego, czy też połączenie miało na celu wyłącznie wyzwalanie dźwięków i brzęczy przez spójny interfejs, podczas gdy były one używane osobno formaty danych źródłowych.
DMGregory

Nie masz takiej precyzyjnej kontroli nad hukiem. Ponadto w trybie DualShock lewy rumbler jest ciężki, a prawy lekki, więc dostajesz niską częstotliwość od tego po lewej. (Mogę mieć lewy / prawy wstecz, ale masz pomysł).
Almo

@Almo Co z systemem wibracji HD Nintendo. Na pewno masz nad tym jakąś kontrolę
Bálint

Co ujawniłoby, że pytanie jest zbyt ogólne. Tak naprawdę nie wiem o ich systemie.
Almo

1
@DMGregory Silniki audio Jestem świadomy tego, że obsługa huku / haptyki wykorzystuje tylko te same wyzwalacze, obwiednie itp. - nie kształty fal audio. Jak mówi Almo, tak naprawdę nie masz takiego poziomu kontroli na poziomie API. Nie mogę sobie wyobrazić, że system Nintendo jest zupełnie inny - nie musiałbyś aktualizować żadnego systemu wibracji z tak wysoką częstotliwością, w której rzeczywiste dane audio byłyby dobrym wyborem.
Richard Byron,

Odpowiedzi:


8

Kontroler dualshock PS4 ma wartości 1-bajtowe dla lewego i prawego pakietu dudnienia, więc w zasadzie działa to jak 8-bitowa muzyka.

Większość z nich jest za NDA, więc bardzo trudno jest uzyskać jakiekolwiek informacje na ten temat (nawet powyższe informacje były trudne do uzyskania, odkryłem to tylko z zewnętrznego zestawu SDK dla node.js). Oto informacje, które poskładałem:

Proces ten jest dosłownie jak tworzenie 1-bajtowej muzyki stereo (i podobno jest to dzieło artysty muzycznego). Polega ona na podłączeniu kontrolera PS4 do komputera i użyciu programu do tworzenia wzorców dudnienia. Wykonują jeden na podstawie zgadywania, następnie uruchamiają go, a następnie dostosowują i powtarzają te kroki, aż wzór będzie przyjemny.

Niektóre bełkoty są generowane programowo (na przykład, gdy samochód zjeżdża z drogi), ale zwykle są to albo prosta funkcja (jak zatok), albo stała wartość podobna do tego, jak robią to telefony. Nawet najbardziej złożone efekty polegają na pomnożeniu znormalizowanego wzoru dudnienia przez pożądaną siłę.

Zestaw PS4 SDK jest również wyposażony w pewne predefiniowane wzorce. Oto kilka przykładów: wzór piłokształtny (stale rosnący, następnie z 255 do 0), fala zatokowa i trójkąty (wzrasta do 255 liniowo, a następnie z powrotem do 0 liniowo).

Nie mogłem znaleźć żadnych szczegółów na temat innych kontrolerów (szczególnie dudnienia Switcha w HD, nawet patent nie opisuje, jak to działa). Ale prawdopodobnie używają podobnego podejścia z bardziej precyzyjnymi paczkami.

Źródła:


Znalazłem ten artykuł jakiś czas temu, który określa strukturę raportu do komunikowania się tam iz powrotem do kontrolera , w tym przesunięcia bajtów kanałów dudnienia i kontrolującą je flagę. Może być najbardziej wszechstronny dostępny w publicznym Internecie, bez dostępu do własnej dokumentacji i interfejsów API Sony.
DMGregory

@DMGregory Czy miałbyś coś przeciwko, żebym dodał to do sekcji źródeł?
Bálint

Proszę zrób. :) Udostępniłem to, mając nadzieję, że się przyda.
DMGregory

4

Nie ma znormalizowanego sposobu.

Różne urządzenia mają różne możliwości i ograniczenia dudnienia.

Zdecydowana większość urządzeń nie obsługuje rzeczywistego „sprzężenia zwrotnego siły” (np. Kierownica, która po uderzeniu w krawężnik / dziurę pozwala programatorowi przesunąć się z powrotem pod określonym kątem), ale po prostu huknie w niekontrolowanym / arbitralnym kierunku.

Dlatego większość funkcji Force Feedback wspomnianych w MSDN / DirectX i innych interfejsach API nigdy tak naprawdę nie pojawiła się w praktyce na rynku użytkowników ani nie ma tak słabych i / lub nieprzenośnych implementacji „inteligentnych” elementów sterujących (obwiednia, powtórzenie itp.), Jak być tak bezużytecznym, że w praktyce programiści często zmuszeni są po prostu używać kontrolek ON / OFF bezpośrednio z własną implementacją efektu.

Bardziej zaawansowane urządzenia, które umożliwiają sprzężenie zwrotne siły kontrolowane serwomechanizmem, wymagają niestandardowych interfejsów API, ponieważ ogólne interfejsy API wejściowe nie obsługują niezbędnych parametrów (dokładne kąty, dokładne siły, ograniczenia itp.).

Dodanie do mieszanki nowych technologii, takich jak rękawiczki VR, sprawia, że ​​tych ogólnych interfejsów API brakuje jeszcze bardziej.


Najczęściej stosuje się dwa silniki prądu stałego o niesymetrycznym obciążeniu, każdy z nich jest cięższy niż drugi i nie ma precyzyjnej kontroli prędkości.

Przynajmniej masz nad nimi kontrolę nad włączaniem / wyłączaniem i możesz wykonywać ograniczoną kontrolę mocy PWM, ale nie dokładną kontrolę prędkości. Nie wiesz, jaka będzie prędkość i wynikająca z niej wibracja. Różne sterowniki mają różne silniki i ciężary, które będą pracować z różnymi prędkościami dla tego samego ustawienia.

Silniki muszą najpierw się zakręcić i wymagają pełnej mocy przez pewien czas, a następnie można ustawić PWM na niższe ustawienie. Opóźnienie rozruchu znacznie ogranicza czas reakcji.

Kontrolery są często aktualizowane raz na ramkę, co daje częstotliwość aktualizacji od około 20 Hz do 100 Hz. Ogranicza to rozdzielczość sterowania PWM, ponieważ nie chcesz, aby silniki zgasły przy najniższym ustawieniu. I nie wiesz, jak niskie mogą być silniki silników użytkownika końcowego przed przeciągnięciem (zatrzymaniem), więc potrzebujesz dobrego marginesu bezpieczeństwa.

Niektóre wymagania systemowe nakładają dalsze ograniczenia na to, co możesz z nimi zrobić.

Urządzenia mobilne zwykle mają tylko 1 silnik wibracyjny, a PWM może nie być możliwe z powodu niskiej bezwładności od wielkości ciężaru i powolnej aktualizacji. System może filtrować go dalej, aby zapobiec nadużyciom, a może nawet uszkodzeniom (limity tranzystorów sterownika mocy i skoki indukcyjne) lub po prostu bardzo powolny podsystem GPIO.

Na urządzeniach mobilnych możesz być ograniczony lub chcieć ograniczyć się do „wibracji przez około X * 50 milisekund” bez PWM.

Niektóre nowsze urządzenia i kontrolery mają elektromagnes napędzany jak głośnik przez falę audio o niskiej częstotliwości próbkowania. Dają ci większą kontrolę, ale są całkowicie różne od bardziej popularnych kontrolerów.


Z powodu wszystkich tych różnic może chcesz abstrakcyjnego systemu wibracji odgrywają ograniczoną liczbę wysokiej klasy efektów makro z nazwy w shoot-and-forget sposób: PlayVibration(player, "Got Loot");, PlayVibration(player, "Heavy Fall");, StopAllVibrationFor(player);, ...

Następnie będziesz musiał stworzyć efekty wibracji niskiego poziomu i kod kontroli wibracji dostosowany indywidualnie do każdej platformy .

Nawet w przypadku gry muzycznej wymagającej jednorazowego użycia PlayVibrationdla każdego uderzenia łatwiej jest zarządzać i kontrolować, biorąc pod uwagę wstrzymywanie gry i problemy z ponowną synchronizacją niedoszłego generatora efektów okresowych.

Chociaż urządzenia z rzeczywistym dudnieniem napędzanym elektrozaworem można traktować jak urządzenie audio i używać interfejsów API audio ze względu na problemy z baterią, może to być niezgodne z przepisami systemu, jeśli elektromagnes jest stale zasilany / aktywny . „Poziom mocy 0” może nie być taki sam jak „Elektrozawór wyłączony”, więc nawet wtedy wymagana jest specjalna ostrożność.


3

Od André LaMothe w Tricks of the Windows Game Programming Gurus:

Programowanie tych urządzeń jest bardzo skomplikowane. Niezbędne jest nie tylko dobre zrozumienie siły, sprężyny i ruchu, ale także zdarzenia i efekty urządzeń i sił, które mają bardzo bliski związek z nutami. Oznacza to, że mogą mieć obwiednię, która moduluje siły, gdy są one przykładane do różnych silników i elementów wykonawczych joysticka. Zatem wartości takie jak szybkość, częstotliwość, synchronizacja itd. Odgrywają rolę w stosowaniu i programowaniu sprzężenia zwrotnego siły.

Chociaż ten tekst jest dość stary, szybkie wyszukiwanie w MSDN w celu wymuszenia informacji zwrotnych pokazuje, że wspomniane pojęcia niewiele się zmieniły; oto podsumowanie tematów zawartych w ich podstawowych koncepcjach sprzężenia zwrotnego siły :

  • Siła stała: Siła stała w jednym kierunku
  • Siła rampy: Siła, która stale rośnie lub maleje.
  • Efekt okresowy: siła pulsująca zgodnie z określonym wzorem fali.
  • Warunek: Reakcja na ruch lub położenie wzdłuż osi.
  • Koperta: Koperta określa wartość ataku i wartość zanikania, które modyfikują początkową i końcową wielkość efektu.
  • Przesunięcie: określa wielkość przesunięcia fali w górę lub w dół od poziomu podstawowego.
  • Skala: Pojedyncza wartość wzmocnienia może być zastosowana do wszystkich efektów dla urządzenia.

Jeśli chodzi o PS4, jedyną rzeczą, którą znalazłem, była dokumentacja Unreal Engine 4 , która stwierdza:

Te (identyfikatory) zostaną zmapowane zgodnie z implementacją specyficzną dla platformy. Na przykład PS4 nasłuchuje tylko kanałów XXX_LARGE i ignoruje resztę, podczas gdy XBox One może odwzorować XXX_LARGE na silniki uchwytów, a XXX_SMALL na silniki wyzwalające. IOS może zmapować LEFT_SMALL na pojedynczy silnik.

Jak wskazuje odpowiedź Stephane Hockenhull, każda platforma jest inna. I jak sugerowano na czacie GDSE , możliwe jest, że szczegóły interfejsu API sprzężenia zwrotnego PS4 są ograniczone przez NDA.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.