Szukaj:
PL EN ES
Polecamy



Kalendarz treningów






Alfaholicy_SimRacingPL Server
Wróć   SimRacing wyścigi online > Wortal SimRacingPL > Off Topic

Informacje o kodzie sieciowym w race simach?

Zarejestruj się Projects Kalendarz Szukaj Dzisiejsze posty Zaznacz Wszystkie Fora jako Przeczytane

Off Topic Na każdy temat

Odpowiedz
LinkBack Narzędzia wątku Wygląd
stare 13-02-2009, 20:36   Post #1 (permalink)
Awatar _Big_Mac_
 
Zarejestrowany: May 2008
Skąd: Wrocław
Postów: 214
Informacje o kodzie sieciowym w race simach?

Szukam opisu kodu sieciowego dowolnej gry wyścigowej (najlepiej rF, ale będę wdzięczny za wszystko). Nie musi być na poziomie implementacji, wystarczy jakiś ogólny model. Znalazłem takie rzeczy np. o kodzie Unreala, Q3 czy HL, ale chcę wiedzieć, jak to jest realizowane "u nas". Jakoś nie chce mi się wierzyć, żeby model autorytatywnego serwera, który liczy wszystko, sprawdzał się w takich zastosowaniach - zwłaszcza, że dedyka do rF można ponoć postawić na PIII 500. A może jednak?

Na razie znalazłem jedynie wywiady z developerami, w których dużo nie ujawniają:
Cytat: Napisał http://www.rfactor.net/index.php?page=qa_petek
It is the vanilla client and server model that has been around for years, but I think it is the best way to run racing games and allows for server-side processing protections. rFactor does a lot of verifications to ensure that the racing is fair that would not be as trustable with a different model.
Tak naprawdę nie ma czegoś takiego, jak "zwyczajny" model klient-serwer

Cytat: Napisał http://www.rfactor.net/index.php?page=qa_gjon
Another key technology has been the development of our multiplayer system which includes a dedicated server. Not only have we improved the more important aspects such as prediction, but we've also managed to eliminate some of the most common complaints about our previous games.
Tutaj ujawniają tylko, że jest predykcja. Ale predykcję ma chyba każda szybka gra multiplayerowa od czasów QuakeWorld, także nic nowego...

Cytat:
The new throttling code provides good scalability. You receive the most information about the cars that are close to you so door rubbing is possible, while you can still have 40+ cars on the track.
To jest jedyny przydatny kawałek info w tym wszystkim

Interesuje mnie m.in., czy symulatory wyścigowe korzystają z tego samego modelu co gry FPP i jak rozwiązuje się interakcje między pojazdami.

Jeśli takich informacji nie uda się znaleźć, może coś wskóramy robiąc reverse engineering Na przykład, czy w rF lub innych grach wyścigowych zdarza się Wam, że przy kiepskim połączeniu (duży ping, gubione pakiety) prowadzone auto jest przesuwane/przeskakuje, czy choćby się niebo waliło, swoje auto się zawsze prowadzi płynnie jak w singlu, najwyżej inni skaczą? Czy zdarzają się sytuacje, że w przypadku kolizji jeden zdecydowanie poczuje uderzenie a drugi wcale?
_Big_Mac_ jest offline  
Odpowiedź z Cytatem
stare 13-02-2009, 20:55   Post #2 (permalink)
Member
Awatar MaXyM
 
Zarejestrowany: Aug 2004
Skąd: Praha, Czech Rep.
Postów: 30.536
Wyślij wiadomośc poprzez ICQ do MaXyM
Ale to juz przerabialismy kiedys przy jakiejs okazji.

Serwer tylko przyjmuje i rozsyla dane od kierowcow. Sprawdza tez "legalnosc" plikow zwiazanych z fizyka i geometria.
Liczenie fizyki auka przylaczonego kierowcy oraz kolizji jego z innymi nastepuje na komputerze klienckim. Przy czym na pewno kolizje musza byc jakos nadzorowane, zeby nie bylo ze u jednego gracza auto spinuje w lewo, a u drugiego to samo kreci sie w prawo.
MaXyM jest offline  
SLS developer :: sls.simracing.pl ::

Rating: 94355 | Skill: 7.59 | OpenRating: 0
Thrustmaster TX Racing Wheel | Logitech G25 | Hamowanie: Lewą nogą | Zmiana biegów: Sekwencja
Odpowiedź z Cytatem
stare 13-02-2009, 20:56   Post #3 (permalink)
Awatar Race_Master
 
Zarejestrowany: Jul 2005
Skąd: Zielona Góra/Londyn
Postów: 8.034
Cytat: Napisał _Big_Mac_ Zobacz post
Na przykład, czy w rF lub innych grach wyścigowych zdarza się Wam, że przy kiepskim połączeniu (duży ping, gubione pakiety) prowadzone auto jest przesuwane/przeskakuje, czy choćby się niebo waliło, swoje auto się zawsze prowadzi płynnie jak w singlu, najwyżej inni skaczą? Czy zdarzają się sytuacje, że w przypadku kolizji jeden zdecydowanie poczuje uderzenie a drugi wcale?
Obie odpowiedzi brzmia tak. Zdarzaja sie sytuacje ze auto nagle pojawia sie pare(nascie/dziesiat) metrow dalej ale wtedy pojawia sie komunikat o synchronizacji.
Co do kolizji to tez jest tak jak piszesz- zdarzaja sie sutyacje ze u jednego dochodzi do kontaktu a u drugiego nie - jest to wtedy zwalane na lag.
Race_Master jest offline  


Rating: 130938 | Skill: 7.96 | OpenRating: 0
Thrustmaster T300 RS | Act Labs | Hamowanie: Lewą nogą | Zmiana biegów: Łopatki
Odpowiedź z Cytatem
stare 13-02-2009, 21:36   Post #4 (permalink)
Awatar ylid
 
Zarejestrowany: Dec 2005
Postów: 1.675
No i warto chyba pamiętać, że reverse engineering w świetle większości licencji jest niedozwolony i uznawany za działania nielegalne.
ylid jest offline  
Odpowiedź z Cytatem
stare 13-02-2009, 22:14   Post #5 (permalink)
Member
Awatar MaXyM
 
Zarejestrowany: Aug 2004
Skąd: Praha, Czech Rep.
Postów: 30.536
Wyślij wiadomośc poprzez ICQ do MaXyM
biorac pod uwage ze rF ma obecnie najlepszy kod sieciowy wsrod simow - to nie wiem czy mozna cos udoskonalic revem.
Ale poczekamy na rf2 i sie przekonamy.
MaXyM jest offline  
SLS developer :: sls.simracing.pl ::

Rating: 94355 | Skill: 7.59 | OpenRating: 0
Thrustmaster TX Racing Wheel | Logitech G25 | Hamowanie: Lewą nogą | Zmiana biegów: Sekwencja
Odpowiedź z Cytatem
stare 13-02-2009, 23:24   Post #6 (permalink)
Awatar _Big_Mac_
 
Zarejestrowany: May 2008
Skąd: Wrocław
Postów: 214
Cytat: Napisał MaXyM Zobacz post
Ale to juz przerabialismy kiedys przy jakiejs okazji.
Pamiętam, że była o tym rozmowa i że padło kilka propozycji jak to może być robione, natomiast nie pamiętam, czy dowiedziałem się, jak jest Może faktycznie zapomniałem.

Oczywiście może być tak, że serwer jest tylko pośrednikiem i gracze liczą sobie wszystko. Problem pojawia się właśnie w sytuacjach zderzeń (jak to nadzorować?) oraz, o czym też kiedyś pisaliśmy, kiedy komuś odpadnie zderzak i lata po torze, mogąc trafić inne auta (kto wtedy liczy zderzak). Pomijam już autentykację.

Z odpowiedzi na pytania wnioskuje, że faktycznie jest taki system. Teraz, z tym modelem, i innymi w sumie też, jest jeszcze taki mały problem. Załóżmy, że w chwili t0 wysyłam do serwera stan mojego auta (który wyliczyłem sobie sam): czyli moją pozycję, orientację, skręt kół, przechylenie, czy idzie mi dym z opon itd. itp. Wiadomość dociera do serwera po 100ms. Serwer teraz ten mój stan propaguje do pozostałych klientów - to też trwa 100ms. Okazuje się, że każdy klient otrzymuje w chwili t0+200ms informację o tym, gdzie ja byłem 200ms temu a nie, gdzie się znajduję w tej chwili. A musi wyświetlać "mnie" w synchronizacji ze sobą. Innymi słowy, musi zgadnąć, gdzie ja jestem "teraz" na podstawie informacji gdzie byłem 200ms temu i zrobić to na tyle szybko, żeby wynik tego zgadywania nie był przestarzały już w momencie wyliczenia 200ms symulacji to dobre kilkadziesiąt iteracji engine'u fizycznego (zwłaszcza simowego, z małym krokiem czasowym). Naturalnie, takie zgadywanie musi być korygowane przez kolejne informacje ode mnie, które zawsze będą opisywać jakiś mój stan z przeszłości. To jest właśnie ta predykcja.

Jak można się domyślić, jaja zaczynają się gdy klient zderzy się ze swoją "prognozą mojego auta". W tej samej chwili ja prognozuję, gdzie on powinien być (też na podstawie przestarzałych danych) i trzeba się zastanowić, co zrobić w sytuacji, gdy jemu wychodzi, że we mnie wjeżdża, a ja prognozuje, że gość jest dobre pół metra za mną. W takim modelu sieci nikt nie zna obiektywnego stanu świata gry, w przeciwieństwie do tego, co mamy w UT czy innym Q3 (tam co prawda każdy z graczy robi predykcję, ale serwer wie wszystko i takie kwestie sporne jak te zderzenia on rozstrzyga obiektywnie).

Podobnym problemem są inne interakcje, jak te latające zderzaki. Tu kolejne pytanie - czy obiekty gry inne niż wozy wpływają na prowadzone auto, czy tylko auto wpływa na nie? Na przykład, czy jeśli szturchniemy piramidkę z opon i w wyniku tego toczymy jedną z nich przednim zderzakiem, to czy ona nas spowalnia, czy możemy na niej podskoczyć, czy to po prostu fajny bajer, ale jedzie się normalnie?
Co prawda w rF (zwłaszcza ligowym) takie przypadki są dosyć rzadkie, ale gdy chcemy sobie zrobić multiplayerowe demolition derby, gdzie po arenie wala się kilkadziesiąt mniejszych lub większych części, które mają wpływ na rozgrywkę, to trzeba się porządnie zająć obsługą rzeczy "niczyich".

Skoro już przy tym jesteśmy, ten nasz model sprawdza się przy założeniu, że gracze mają dobrze zdefiniowane, nazwijmy to, "własności", tj. obiekty należące do nich, i że te ich własności rzadko wchodzą w interakcje z własnościami innych graczy. Własnością może być np. postać (w FPP) albo auto. Można definitywnie powiedzieć, że to auto należy do tego gracza i że te problematyczne interakcje z innymi autami zachodzą stosunkowo rzadko (w skali całego wyścigu). Są jednak sytuacje, kiedy nie ma dobrze zdefiniowanych własności - przykładowo kiedy mamy piramidkę złożoną z pudełek i wielu graczy, z których każdy może wyciągać i przesuwać dowolne pudełka, wpływając na stan wszystkich pozostałych. Nie można wtedy powiedzieć, że gracz może sobie symulować tylko swoje pudełko lub kawałek piramidy, bo każdy ruch wpływa na całość, także na ruchy innych. Mamy też większe jaja z predykcją.

Więc w sytuacji gdy są elementy "niczyje", trzeba wymyślić coś lepszego.

Po co o tym wszystkim piszę? Ano, mam taki kurs jak Systemy Rozproszone, który zalicza się projektem. Stwierdziłem, że chcę napisać grę dla wielu graczy i że będą to wyścigi. Niestety, nie do końca simowe i realistyczne, bo na Marsie, 6-kołowymi sondami, które marsjańska młodzież podpieprzyła NASA, ale zasady są te same - wielu kierowców, każdy w swoim pojeździe. Na początek odpuszczę sobie model uszkodzeń, w którym coś się może urwać i podejście z rF będzie zupełnie wystarczające, ale jak dobrze pójdzie, to mam kilka pomysłów do zrealizowania na tym, które mogą przechylić styl rozgrywki z wyścigów właśnie w stronę demolition derby i dobrze by było wiedzieć, jak to zaimplementować od strony sieciowej.

PS Reverse engineering to raczej w sensie żeby dojść jak działa kod sieciowy na podstawie eksperymentów i obserwacji, nie jakieś dekompilacje czy tym bardziej modyfikacje.
_Big_Mac_ jest offline  
Odpowiedź z Cytatem
stare 13-02-2009, 23:38   Post #7 (permalink)
Member
Awatar MaXyM
 
Zarejestrowany: Aug 2004
Skąd: Praha, Czech Rep.
Postów: 30.536
Wyślij wiadomośc poprzez ICQ do MaXyM
ad predykcja
tak - komputer klienta dostaje dane z jakas czestotliwoscia i dokladnoscia (wg ustawionych wlasnych parametrow polaczenia i mozliwosci serwera). Nalezy zaznaczyc ze wysylane sa wektory predkosci - nie pozycje aut. Dlatego w momencie chwilowej utraty polaczenia, przez jakas chwilke auta poruszaja sie starym wektorem co szczegolnie jest widoczne na zakretach.
Nastepuje predykcja, przy czym bardzo waznym zalozeniem jest ze statyystycznie auta poruszaja sie w tym samym kierunku i z ta sama predkoscia. Dlatego opoznione dane sie niewiele roznia od tych co zostalo "przewidziane" przez lokalny komputer.

Natomiast w razie duzych roznic predkosci lub roznic w kierunkach wektorow czasami widac nachodzenie sie pojazdow. To oczywiscie czesciowo tez mozna "przewidziec" dlatego tak czesto nie jest to widoczne - ale sie zdarza.

ad kolizje
jesli lokalny komputer wykrywa kolizje, to wykonuje obliczenia tylko dla samego siebie. Na przyklad: odbil sie od auta, sprawdza w ktorym punkcie z jaka sila (czesto "przewidziana"). Dalej decyduje czy to bedzie spin czy tylko zmniejszenie predkosci etc. Nowe dane (swoj nowy wektor) wysyla do serwera a ten wysyla do innych. W tym samym czasie klient ktory mial brac udzial w kolizji, tej kolizji nie rozpoznal. U niego kierowca nic nie poczul, nie ma zadnych konsekwencji. Widzi tylko spinujacego sasiada.

Powyzsza sytuacja tez nie zdarza sie czesto, bo jest konsekwencja zbiegu kilku przypadkow, np. uderzenie pod koniec predykowanego okresu, brak nowych danych o pozycjach, duze roznice w wektorach "przewidywanych" i prawdziwych etc etc.
MaXyM jest offline  
SLS developer :: sls.simracing.pl ::

Rating: 94355 | Skill: 7.59 | OpenRating: 0
Thrustmaster TX Racing Wheel | Logitech G25 | Hamowanie: Lewą nogą | Zmiana biegów: Sekwencja
Odpowiedź z Cytatem
stare 14-02-2009, 00:46   Post #8 (permalink)
Awatar _Big_Mac_
 
Zarejestrowany: May 2008
Skąd: Wrocław
Postów: 214
Cytat: Napisał MaXyM Zobacz post
Nalezy zaznaczyc ze wysylane sa wektory predkosci - nie pozycje aut. Dlatego w momencie chwilowej utraty polaczenia, przez jakas chwilke auta poruszaja sie starym wektorem co szczegolnie jest widoczne na zakretach.
Wydaje mi się, że pozycje też są przesyłane

Predykcja może być robiona na dwa sposoby, prosty i trudny. Prosty - przekazujemy (oprócz oczywiście pozycji) prędkość, predykcja polega na prostej ekstrapolacji, przy założeniu, że prędkość jest stała i przyspieszeń brak. Trudny - przekazujemy też np. przyspieszenie (czyli mamy już poniekąd ekstrapolację drugiego rzędu i możemy przewidywać zakręcanie) albo wręcz ciąg wejść danego gracza (kierownica w lewo o 10 stopni przez 2 sekundy, potem o 30 stopni przez sekundę...) i robimy pełne obliczenia dla danej sekwencji akcji. W przypadku, gdy mamy to założenie, że samochody są dosyć bezwładne i jadą mniej lub bardziej do przodu, wystarczy chyba sama prędkość (a jak nierealistycznie wygląda, to jeszcze przyspieszenie). W grach FPP gdzie gracz może diametralnie zmienić kierunek cztery razy w ciągu sekundy, przekazuje się czasem sekwencje wejść.


Dzięki za info
_Big_Mac_ jest offline  
Odpowiedź z Cytatem
stare 14-02-2009, 00:51   Post #9 (permalink)
Member
Awatar MaXyM
 
Zarejestrowany: Aug 2004
Skąd: Praha, Czech Rep.
Postów: 30.536
Wyślij wiadomośc poprzez ICQ do MaXyM
ja Ci pisze jak jest w symulacjach - mowiac wektor mam na mysli punkt jego zaczepienia oraz kierunek i dlugosc. Pochodne wektora predkosci (zmiana kierunku zmiana predkosci) nie sa przekazywane i nie sa wyznaczane w przypadku braku danych.
Nie bardzo rozumiem co masz na mysli piszac o "sekwencji wejsc". Tu tez sie przekazuje sekwencyjnie wiele danych. Ale sa to dane z "bliskiej przeszlosci". Nie widze mozliwosci ich wykorzystania do predykcji przyszlosci.

Jazda w kolko takimi samymi pojazdami, daje mozliwosc zrobienia pewnych zalozen. Wiec nie wiem po co tlumaczysz jak to jest w FPP.
MaXyM jest offline  
SLS developer :: sls.simracing.pl ::

Rating: 94355 | Skill: 7.59 | OpenRating: 0
Thrustmaster TX Racing Wheel | Logitech G25 | Hamowanie: Lewą nogą | Zmiana biegów: Sekwencja
Odpowiedź z Cytatem
stare 14-02-2009, 01:00   Post #10 (permalink)
Awatar _Big_Mac_
 
Zarejestrowany: May 2008
Skąd: Wrocław
Postów: 214
Ok, a "pierdoły" w stylu kąta skrętu kół, przechyły związane z przyspieszeniami, praca zawieszenia itd. są przekazywane czy wyliczane u klientów?

Przy okazji sprawdziłem, że przynajmniej beczki w Rouen nie wpływają w żaden sposób na prowadzone auto. Są tylko efektem graficznym. Podejrzewam, że tak samo dzieje się z innymi "śmieciami", co pozwala symulować je w całości u klientów (każdy sobie), bez zawracania głowy synchronizacją.
_Big_Mac_ jest offline  
Odpowiedź z Cytatem
Odpowiedz

Bookmarks

Tagi
informacje, kodzie, race, sieciowym, simach

Narzędzia wątku
Wygląd

Zasady Postowania
Nie możesz zakładać nowych tematów
Nie możesz pisać wiadomości
Nie możesz dodawać załączników
Nie możesz edytować swoich postów

BB Code jest Włączony
EmotikonyWłączony
[IMG] kod jest Włączony
HTML kod jest Wyłączony
Trackbacks are Włączony
Pingbacks are Włączony
Refbacks are Włączony



Czasy w strefie GMT +2. Teraz jest 15:42.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0
SimRacingPL

no new posts

Logowanie
Login:
Hasło:
 Zarejestruj się!

233 osób online
231 Gości
2 Zalogowanych
Facebook
Administratorzy
Administracja portalu
Owner
McLaren
Senior Admin
lelu0
Summer RC Cup 2018
lelu0
Admins
SirDuncan - Historic (GiW) Admin
Moderators
Dmnick - Super Moderator
sobol - Moderator