Porównywanie ustawień Counter-Strike 2 jest trudniejsze, niż może się wydawać. Dwa kolejne przebiegi tej samej mapy mogą różnić się przez pozycję kamery, moment rozpoczęcia pomiaru, procesy działające w tle albo zwykły błąd osoby wykonującej test.
Dlatego stworzyłem CS2 Consistent Benchmarking Tool — prosty skrypt w AutoHotkey, który automatyzuje uruchomienie CS2, wczytanie konkretnej mapy warsztatowej, rozpoczęcie pomiaru w CapFrameX i zamknięcie gry po zakończeniu testu.
Narzędzie nie próbuje symulować prawdziwego meczu Premier albo FACEIT. Jego zadaniem jest coś innego:
Każdy przebieg ma zaczynać się w możliwie podobny sposób, żeby dało się uczciwie porównać ustawienia grafiki, Windowsa, sterowników albo procesora.
To właśnie tego skryptu używałem przy tworzeniu mojego poradnika optymalizacji CS2.
Dlaczego zwykły benchmark CS2 bywa niewiarygodny?
W prawdziwym meczu wynik zależy od wielu zmiennych:
- liczby graczy widocznych na ekranie,
- granatów dymnych, molotovów i efektów cząsteczkowych,
- miejsca na mapie,
- obciążenia serwera,
- działania FACEIT Anti-Cheat,
- programów uruchomionych w tle,
- aktualnego zachowania botów albo innych graczy,
- momentu rozpoczęcia i zakończenia pomiaru.
Taki scenariusz dobrze pokazuje rzeczywiste doświadczenie z gry, ale słabo nadaje się do porównania dwóch drobnych zmian.
Gdy chcę sprawdzić, czy konkretna opcja daje 2%, 5% albo 10% różnicy, potrzebuję powtarzalnego testu. Nie musi idealnie odwzorowywać meczu. Musi za każdym razem wykonywać możliwie podobną sekwencję.
Czym jest CS2 Consistent Benchmarking Tool?
Projekt składa się przede wszystkim z jednego skryptu:
cs2_benchmark.ahk
Skrypt współpracuje z:
- AutoHotkey v2,
- CapFrameX,
- mapą warsztatową CS2 FPS Benchmark,
- klientem Steam,
- Counter-Strike 2.
Nie modyfikuje plików gry, nie wstrzykuje bibliotek i nie ingeruje w pamięć procesu. Automatyzuje standardowe czynności, które można wykonać ręcznie przy użyciu klawiatury i konsoli gry.
Repozytorium projektu:
CS2 Consistent Benchmarking Tool na GitHubie
Bezpośredni plik skryptu:
Skąd wziął się pomysł?
Projekt został zainspirowany narzędziem CS2 Benchmark Automation przygotowanym przez Ark0N.
W moim przypadku oryginalny zestaw plików i skryptów nie działał poprawnie. Zamiast dalej poprawiać gotową paczkę, przygotowałem prostszą wersję opartą na:
- oficjalnej instalacji AutoHotkey,
- oficjalnej instalacji CapFrameX,
- osobnym, czytelnym skrypcie
.ahk, - automatycznym wykrywaniu instalacji Steam,
- łatwych do zmiany opóźnieniach i ustawieniach.
Celem nie było stworzenie rozbudowanej aplikacji z interfejsem. Narzędzie miało robić jedną rzecz i wykonywać ją w możliwie przewidywalny sposób.
Czego potrzebujesz?
AutoHotkey v2
AutoHotkey uruchamia skrypt odpowiedzialny za sterowanie oknem gry i wysyłanie poleceń.
Pobierzesz go z oficjalnej strony:
Po instalacji pliki z rozszerzeniem .ahk powinny być automatycznie powiązane z programem.
CapFrameX
CapFrameX zapisuje dane o FPS i frametime. Sam skrypt nie mierzy wydajności — wysyła jedynie klawisz rozpoczynający pomiar.
Pobieranie:
Mapa warsztatowa
Skrypt korzysta z mapy:
Przed pierwszym testem zasubskrybuj ją w Warsztacie Steam i poczekaj, aż zostanie pobrana.
Konfiguracja CapFrameX
Otwórz CapFrameX i przejdź do zakładki odpowiedzialnej za przechwytywanie danych.
Ustaw:
Capture time: 102 seconds
Capture hotkey: F5
Skrypt wysyła klawisz F5, dlatego skrót w CapFrameX musi być taki sam.
Czas 102 sekund obejmuje około 100 sekund właściwego testu oraz niewielki zapas na zakończenie i zapis pliku.
Przed uruchomieniem skryptu pozostaw CapFrameX włączony w tle.
Jak używać narzędzia?
- Uruchom Steam.
- Uruchom CapFrameX.
- Sprawdź, czy czas przechwytywania wynosi 102 sekundy.
- Sprawdź, czy skrót przechwytywania to
F5. - Zamknij niepotrzebne programy działające w tle.
- Uruchom
cs2_benchmark.ahk. - Nie przełączaj okien i nie używaj klawiatury podczas automatyzacji.
- Po zakończeniu odczytaj wynik w CapFrameX.
Skrypt uruchomi grę, wczyta mapę, rozpocznie pomiar, odczeka ustawiony czas, a następnie zamknie CS2.
Co dokładnie robi skrypt?
1. Wykrywa instalację Steam
Skrypt najpierw sprawdza wpisy w rejestrze Windows:
HKCU\Software\Valve\Steam
HKLM\SOFTWARE\WOW6432Node\Valve\Steam
HKLM\SOFTWARE\Valve\Steam
Jeżeli nie znajdzie właściwej ścieżki, sprawdza również domyślne lokalizacje:
C:\Program Files (x86)\Steam\steam.exe
C:\Program Files\Steam\steam.exe
Dzięki temu w większości przypadków nie trzeba ręcznie wpisywać ścieżki do steam.exe.
2. Uruchamia Counter-Strike 2 z konsolą
Gra jest uruchamiana przez Steam z identyfikatorem aplikacji 730 oraz parametrami aktywującymi konsolę:
-applaunch 730 +con_enable 1 -console +toggleconsole
3. Czeka na okno gry
Domyślnie skrypt czeka maksymalnie:
120 sekund
na pojawienie się okna Counter-Strike 2.
Po jego wykryciu pozostawia dodatkowe 15 sekund na ustabilizowanie uruchamiania gry.
4. Wczytuje mapę warsztatową
Do konsoli zostaje wpisane:
map_workshop 3240880604
Liczba 3240880604 jest identyfikatorem mapy używanej przez narzędzie.
Po wysłaniu komendy skrypt zamyka konsolę i czeka na załadowanie mapy.
5. Rozpoczyna pomiar
Po domyślnym opóźnieniu wynoszącym 8 sekund skrypt odtwarza dwa krótkie sygnały dźwiękowe i wysyła:
F5
To rozpoczyna przechwytywanie w CapFrameX.
6. Kończy test
Skrypt czeka 102 sekundy, ponownie aktywuje konsolę i wpisuje:
quit
Gra zostaje zamknięta, a wynik pozostaje dostępny w CapFrameX.
Najważniejsze ustawienia skryptu
Na początku pliku znajdują się wartości, które można łatwo zmienić:
workshopId := "3240880604"
cs2WindowWaitSeconds := 120
postWindowSettleMs := 15000
startHotkeyToSend := "{F5}"
closeConsoleDelayMs := 3000
mapStartDelayMs := 8000
benchmarkDurationMs := 102000
Znaczenie:
| Zmienna | Działanie |
|---|---|
workshopId |
Identyfikator mapy warsztatowej |
cs2WindowWaitSeconds |
Maksymalny czas oczekiwania na okno CS2 |
postWindowSettleMs |
Dodatkowe oczekiwanie po wykryciu okna |
startHotkeyToSend |
Klawisz rozpoczynający pomiar CapFrameX |
closeConsoleDelayMs |
Czas przed zamknięciem konsoli |
mapStartDelayMs |
Oczekiwanie na mapę przed rozpoczęciem pomiaru |
benchmarkDurationMs |
Czas testu przed zamknięciem gry |
Co zrobić, gdy skrypt uruchamia pomiar za wcześnie?
Na szybszym komputerze domyślne 8 sekund może wystarczyć. Na wolniejszym dysku albo po większej aktualizacji CS2 mapa może ładować się dłużej.
Jeżeli CapFrameX zaczyna nagrywać podczas ekranu ładowania, zwiększ:
mapStartDelayMs := 8000
Przykładowo do 12 sekund:
mapStartDelayMs := 12000
Nie zmieniaj tej wartości między porównywanymi konfiguracjami. Wszystkie przebiegi powinny korzystać z identycznego opóźnienia.
Co zrobić, gdy CapFrameX nie rozpoczyna pomiaru?
Sprawdź kolejno:
- czy CapFrameX jest uruchomiony,
- czy aktywny skrót przechwytywania to
F5, - czy żaden inny program nie przechwytuje tego klawisza,
- czy okno CS2 jest aktywne,
- czy skrypt doszedł do dwóch sygnałów dźwiękowych.
Możesz również zmienić klawisz zarówno w CapFrameX, jak i w skrypcie:
startHotkeyToSend := "{F6}"
Obie wartości muszą się zgadzać.
Jak wykonywać uczciwe porównania?
Sama automatyzacja nie wystarczy. Metodologia musi być taka sama dla każdej konfiguracji.
Zmieniaj tylko jedną rzecz
Nie włączaj jednocześnie HAGS, nowego planu zasilania, innych ustawień grafiki i profilu CPU.
Gdy wynik się zmieni, nie będziesz wiedzieć, która modyfikacja za to odpowiada.
Wykonuj kilka przebiegów
Przy swoich testach wykonywałem po trzy przebiegi dla każdej konfiguracji i liczyłem średnią.
Przykład:
| Przebieg | Średni FPS |
|---|---|
| 1 | 899,4 |
| 2 | 902,1 |
| 3 | 900,7 |
| Średnia | 900,7 |
Pojedynczy wynik może być zaburzony przez usługę Windows, zadanie w tle albo chwilowy skok temperatury.
Po większej zmianie uruchom komputer ponownie
Restart jest szczególnie ważny po zmianie:
- sterownika karty graficznej,
- HAGS,
- Integralności pamięci,
- ustawień BIOS-u,
- profilu pamięci EXPO lub XMP,
- planu zasilania,
- konfiguracji procesora.
Utrzymuj podobne warunki
Kontroluj:
- temperaturę CPU i GPU,
- programy działające w tle,
- wersję sterownika,
- wersję gry,
- stan FACEIT Anti-Cheat,
- ustawienia systemu,
- parametry uruchamiania CS2.
Nie porównuj wyniku wykonanego bez FACEIT AC z wynikiem wykonanym przy uruchomionym anti-cheacie.
Jakie dane analizować?
Średni FPS
Pokazuje ogólną przepustowość komputera, ale nie mówi wszystkiego o płynności.
Dwie konfiguracje mogą osiągnąć podobną średnią, a zachowywać się inaczej podczas krótkich spadków.
1% low
W przybliżeniu pokazuje wydajność w najwolniejszym 1% klatek.
W grach competitive wartość ta często jest ważniejsza od dodatkowych kilkunastu średnich FPS, ponieważ lepiej opisuje powtarzające się spadki płynności.
0,1% low
Jest bardziej wrażliwe na pojedyncze przycięcia, zadania w tle i nietypowe zdarzenia.
Nie należy oceniać konfiguracji na podstawie jednego przebiegu 0,1% low. Trzeba porównywać kilka testów i sprawdzić, czy problem się powtarza.
Frametime
Frametime pokazuje czas renderowania pojedynczej klatki.
Przykładowo:
100 FPS = około 10 ms
240 FPS = około 4,17 ms
360 FPS = około 2,78 ms
500 FPS = około 2 ms
Wykres frametime pozwala znaleźć nagłe skoki, których nie widać w samej średniej FPS.
Czego wynik nie pokazuje?
Mapa warsztatowa nie odwzorowuje w pełni:
- prawdziwego serwera Premier,
- meczu FACEIT 5 na 5,
- dziesięciu graczy jednocześnie,
- wszystkich możliwych granatów,
- obciążenia sieciowego,
- każdej lokalizacji na każdej mapie,
- zachowania gry po wielu godzinach działania.
Wynik benchmarku jest najczęściej wyższy niż FPS podczas normalnego meczu.
Nie powinno się więc pisać:
Mój komputer zawsze osiąga 900 FPS w CS2.
Poprawniejszy wniosek brzmi:
W tej samej, powtarzalnej sekwencji ustawienie A było szybsze od ustawienia B o około 5%.
Narzędzie służy do porównań względnych, a nie do obiecywania dokładnej liczby klatek w każdym meczu.
Przykładowe zastosowania
Skrypt nadaje się do porównania:
- dwóch wersji sterownika GPU,
- ustawień HAGS,
- Trybu gry Windows,
- różnych planów zasilania,
- CPU Sets i CPU Affinity,
- włączonego i wyłączonego SMT,
- różnych rozdzielczości,
- ustawień cieni, MSAA i cząsteczek,
- działania FACEIT Anti-Cheat,
- pamięci RAM przed i po włączeniu EXPO,
- procesora przed i po zmianie limitów mocy,
- dwóch kart graficznych albo dwóch kompletnych komputerów.
Właśnie w taki sposób wykorzystałem narzędzie podczas przygotowywania pełnego poradnika do optymalizacji CS2.
Ograniczenia obecnej wersji
To prosty skrypt, a nie kompletne środowisko laboratoryjne.
Obecna wersja:
- wykonuje jeden przebieg po uruchomieniu,
- opiera się na czasowych opóźnieniach,
- zakłada nazwę okna
Counter-Strike 2, - wymaga poprawnie działającej konsoli,
- wymaga zgodnego skrótu w CapFrameX,
- nie analizuje automatycznie zapisanych wyników,
- nie wykrywa, czy mapa załadowała się przed wysłaniem
F5, - nie zapisuje samodzielnie opisu testowanej konfiguracji.
Trzy przebiegi trzeba więc uruchomić osobno, a później porównać w CapFrameX.
Prostota jest tutaj również zaletą. Kod jest krótki, czytelny i można łatwo sprawdzić, jakie czynności wykonuje.
Bezpieczeństwo
Skrypt automatyzuje klawiaturę i uruchamianie gry. Nie jest cheatem i nie zmienia mechaniki CS2.
Mimo to przed uruchomieniem dowolnego skryptu pobranego z Internetu warto przeczytać jego kod.
W tym przypadku cały plik można sprawdzić bezpośrednio na GitHubie:
Narzędzie powinno być używane poza normalnym meczem, na mapie warsztatowej i wyłącznie do testów wydajności.
Podsumowanie
CS2 Consistent Benchmarking Tool nie ma udawać prawdziwego meczu. Ma usunąć możliwie dużo błędów człowieka z procesu porównywania wydajności.
Automatyzuje:
- uruchomienie CS2,
- aktywację konsoli,
- wczytanie mapy warsztatowej,
- rozpoczęcie przechwytywania w CapFrameX,
- odczekanie ustalonego czasu,
- zamknięcie gry.
Dzięki temu znacznie łatwiej ocenić, czy zmiana ustawienia naprawdę poprawiła FPS albo frametime, czy różnica była tylko wynikiem innego przebiegu testu.
Powiązane materiały:
- Optymalizacja CS2 — ustawienia pod FPS, 1% low i input lag
- Najlepsze procesory do CS2 i gier competitive w 2026 roku
- Process Core Optimizer
- FrameHub