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?
playstation4
force-feedback
frankish
źródło
źródło
Odpowiedzi:
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:
źródło
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
PlayVibration
dla 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ść.
źródło
Od André LaMothe w Tricks of the Windows Game Programming Gurus:
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 :
Jeśli chodzi o PS4, jedyną rzeczą, którą znalazłem, była dokumentacja Unreal Engine 4 , która stwierdza:
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.
źródło