Grupa: Administrator
Posty: 59 #1141684 Od: 2013-1-4
| Dla tych co nie lubią czytać, dobre ustawienia do CS to:
1. Szybkość kursora w Windows na środek suwaka czyli 6/11. 2. "Zwiększ precyzję wskaźnika" odznaczone. 3. Parametry startowe: -noforcemaccel -noforcemspd. 4. Rozdzielczość 400-800 DPI na myszy. 5. Raportowanie USB 500 Hz. 6. 100 FPS w grze (fps_max 101). 7. Renderowanie OpenGL (szybsze od D3D). 8. V-sync wyłączone (synchronizacja pionowa). 9. Rozdzielczość ekranu jaką wolisz, im wyższa tym mniej problemów z akceleracją negatywną, ale może okazać się że braknie DPI żeby wycelować w każdy piksel.
----------------------------------------------------------------------------------------------------------------------------------------------------------
Chcesz wiedzieć dlaczego? Czytaj dalej.
W grze ruch celownika powinien być w 100% przewidywalny, bez przeskoków i zacięć, proporcjonalny do ruchu myszy na podkładce niezależnie od prędkości. Jeżeli kursor (celownik) przy szybkim ruchu myszy, przesuwa się na dalszą odległość niż przy wolnym ruchu, występuje akceleracja pozytywna (dodatnia). W odwrotnym przypadku występuje akceleracja negatywna (ujemna). Prędkość kursora w Windowsie na 6/11 gwarantuje ruch 1 piksel na 1 DPI myszy. Inne ustawienia spowodują, przeskakiwanie kursorem niektórych pikseli (suwak w prawo), lub programowe zmniejszenie DPI (suwak w lewo). Żeby nie mieć problemów z celowaniem trzeba spełnić dwa warunki: 1. mieć dobrą mysz, 2. nie zepsuć ustawień.
Nie każdy zdaje sobie sprawę, że CS ma źle napisaną obsługę myszy, sama gra powoduje akcelerację negatywną. CS faworyzuje myszki z niskim DPI, żeby nie mieć problemów trzeba też mieć stałe, wysokie FPS. Co ciekawe efekt w mniejszym stopniu występuje na wysokich rozdzielczościach ale jak na ironię wymagają one wyższego DPI i koło się zamyka. Z tych powodów CS 1.6 niespecjalnie nadaje się do testowania akceleracji w myszkach.
Sporo na temat obsługi myszy w grach przez Windows można dowiedzieć się tu: Taking Advantage of High-Definition Mouse Movement . Gry korzystające z WM_INPUT lub DirectInput nie potrzebują mousefixów. Z pozostałych część nie ma problemów po zwykłym odznaczeniu "Zwiększ precyzję wskaźnika". W CS wystarczy ustawić parametry startowe: -noforcemaccel -noforcemspd, żeby windowsowa akceleracja nie włączała się sama. A jeżeli już komuś potrzebny jest mousefix polecam ten: Windows Mouse Things: The MarkC Windows 7 Mouse Acceleration Fix
Z tego co wiem, mysz w CS działa tak: Ukryty kursor znajduje się na środku ekranu (w środku celownika). Przy ruchu wychyla się w którąś stronę na zasadach zwykłego kursora z pulpitu Windowsa (metoda WM_MOUSEMOVE). Powoduje to 2 problemy: akcelerację z poziomu Windowsa ("Zwiększ precyzję wskaźnika") oraz ograniczenie pola działania do rozdzielczości ekranu, a właściwie jej połowy w każdą ze stron. Co 1 FPS kursor jest zawracany znów do środka ekranu, inaczej po dojściu do krawędzi postać przestałaby się obracać . Problem występuje wtedy, gdy w przeciągu 10 ms (dla 100 FPS) przesuniesz kursor "poza" granicę ekranu.
Jak widać na ruch celownika mają w takim przypadku wpływ: - ustawienia sterownika myszy Windowsa, - DPI myszki, - rozdzielczość ekranu w grze, - FPS w grze, - ustawienia sensitivity, m_pitch i m_yaw (prędkość obracania się w grze).
Dla przykładu weźmy: - w sterowniku 6/11 i precyzja off, - 800 DPI, - 800x600 pikseli, - 100 FPS, - te ustawienia nie wpływają na akcelerację negatywną ale przy niskich trzeba bardziej namachać się myszą, więc jest większe prawdopodobieństwo szybkich ruchów i wystąpienia problemu akceleracji negatywnej, można założyć sensitivity 1.0, m_pitch 0.022, m_yaw 0.022.
Kod: odl_do_krawędzi_poz = (rozdzielczość_poz * 2,54) / (2 * DPI) = (800 * 2,54) / (2 * 800) = 1,27 cm
Powyższa wartość to odległość w cm, jaką trzeba pokonać na podkładce, żeby dojechać do krawędzi ekranu kursorem. Jeżeli zrobisz w przeciągu 1/100 s więcej, to gra zignoruje różnicę, bo kursor osiągnął maksymalne położenie na ekranie (krawędź) i nie da się go przesunąć dalej.
Kod: prędkość_max_poz = odl_do_krawędzi_poz * FPS * 0,01 = 1,27 * 100 * 0,01 = 1,27 m/s
1,27 m/s to dość wolno, bez problemu da się osiągnąć takie prędkości na niskim i średnim sensitivity.
Rzecz jasna maksymalna prędkość pionowa jest mniejsza, bo kursor ma tam tylko 0,5 * 600 = 300 pikseli do pokonania. Nie ma to dużego znaczenia, bo w grze nie wykonuje się długich i szybkich ruchów góra-dół.
Próbowałem różnych ustawień i efekty zdają się potwierdzać teorię. Wystarczy ustawić 640x480, fps_max 50 i DPI 1600 lub więcej, a od razu widać ogromną akcelerację negatywną już przy niezbyt szybkich ruchach (ze wzoru wychodzi prędkość_max_poz = 0,25 m/s). Stosowanie w CS myszy z wysokim DPI, do tego przy niskich rozdzielczościach, jest chybionym pomysłem. Muszę przyznać, że sam tak kiedyś grałem na starej myszce (X-718F) z tą różnicą, że wtedy miałem większe sensitivity, 100 FPS i wysoką rozdzielczość 1680x1050, w takich warunkach akceleracja negatywna nie dawała się aż tak we znaki.
Jeżeli chodzi o Hz USB, lepiej mieć ustawioną wielokrotność ilości klatek: 500 lub 1000Hz dla 100FPS, bo przy 125 lub 250Hz i 100FPS nie ma synchronizacji. Skoro USB raportuje co 8ms, a gra generuje klatkę co 10ms, to w co piątym raporcie czyli co czwartej klatce będzie dokładne położenie kursora. W pozostałych przypadkach położenie będzie trochę przeterminowane:
Kod: 125Hz 100FPS Hz 0 8 16 24 32 40 FPS 0 10 20 30 40 -----------------------------------------------------------> czas [ms]
500Hz 100FPS Hz 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 FPS 0 10 20 30 40 -----------------------------------------------------------> czas [ms]
Jak widać w drugim przypadku jest dokładne położenie, w pierwszym często zdarza się już trochę nieaktualne (najbardziej w przypadku czwartej klatki: 30ms ale raport z 24ms czyli dodatkowe 6ms opóźnienia. Z powyższego przykładu można wyciągnąć wniosek, że pomiędzy 500 i 1000 Hz nie ma różnicy. _________________
|