Interfejs użytkownika panoramy CS2: przewaga nad interfejsem
Badamy silnik interfejsu Panorama CS2: warstwę interfejsu użytkownika opartą na XML/CSS, dostęp do danych HUD i szczegóły techniczne tworzenia niestandardowych nakładek.
Co to jest Panorama i jak działa?
Panorama to silnik interfejsu używany przez firmę Valve w jej grach, takich jak CS2, Dota 2 i Deadlock. Wszystkie elementy wizualne, takie jak HUD, menu główne, ekran zakupów i tabela wyników, są tworzone z plików układu opartych na XML, plików stylów przypominających CSS i języka skryptowego o nazwie Panorama Script. Ta struktura jest bardzo podobna do tworzenia stron internetowych; Każdy panel działa jak element DOM i jest połączony ze stanem gry po stronie C++ poprzez powiązanie danych. Widoczność lub zawartość panelu jest automatycznie aktualizowana, gdy zmienia się stan gry, co jest ważnym punktem wyjścia do zrozumienia komunikacji pomiędzy interfejsem użytkownika a silnikiem.
Uzyskaj dostęp do danych HUD: zdrowie, amunicja, licznik czasu bomby
Panele panoramiczne stale nasłuchują w tle wartości takich jak zdrowie, amunicja, licznik czasu bomby i odzwierciedlają je na ekranie. Ten strumień danych teoretycznie można odczytać z zewnątrz; W oparciu o tę zasadę tworzone są dodatkowe warstwy informacji, takie jak pokazywanie licznika czasu wybuchu bomby w większym i wyraźniejszym niż zwykle rozmiarze oraz podsumowanie stanu zdrowia członków drużyny na małym panelu. Celem nie jest ukrycie informacji dostarczanych przez samą grę, ale sprawienie, aby informacje, które są już na ekranie, ale są wyświetlane w małej lub rozproszonej formie, były bardziej czytelne. Takie opracowania wykonuje się z wydzieloną warstwą obserwacyjną, bez bezpośredniego dotykania natywnego drzewa panelowego.
Dodatkowe warstwy informacyjne z niezależną nakładką
System nakładek PX8.2 nakłada własną warstwę renderującą na pętlę rysowania w grze, bez konieczności wchodzenia do drzewa paneli Panoramy. W tej niezależnej warstwie rysowane są skrzynki ESP, punkty radarowe, informacje o FPS i pingach; Żadne pliki XML ani CSS nie są udostępniane panelom Panoramy. To rozróżnienie ma dwie ważne konsekwencje: po pierwsze, aktualizacje interfejsu gry nie psują nakładki, ponieważ są one od siebie niezależne; Po drugie, ponieważ nakładka nie ingeruje w natywne elementy interfejsu użytkownika, działa stabilniej i nie ma konfliktu wizualnego. Z poziomu menu można regulować położenie nakładki i przezroczystość piksel po pikselu, co zapewnia spójny wygląd każdej rozdzielczości monitora i skali HUD-u.
Zarządzanie wydajnością i ryzyko konfliktu
Panorama jest już systemem renderowania warstwowego, który zużywa procesor i kartę graficzną; Umieszczenie na nim dodatkowej nakładki może wydłużyć czas trwania klatki, jeśli nie zostanie wykonane ostrożnie. W PX8.2 renderowanie nakładek jest przetwarzane w oddzielnym wątku renderowania i jest zoptymalizowane pod kątem synchronizacji z główną pętlą renderowania gry, więc dodatkowa utrata liczby klatek na sekundę pozostaje praktycznie niezauważalna. Aktualizacja nakładki zgodnej z vsync na monitorach o wysokiej częstotliwości odświeżania zapobiega migotaniu (drganiom) linii. W systemach z niższej półki zmniejszenie liczby elementów nakładkowych dodatkowo poprawia wydajność; na przykład zwykłe włączenie ESP w pudełku i wyłączenie rysowania szkieletu może zauważalnie skrócić czas trwania klatki.
Unikanie metod wykrywania opartych na interfejsie
Niektóre metody wykrywania skanują drzewo paneli Panoramy w poszukiwaniu paneli, które są nieoczekiwane lub których nie ma w plikach gry; Tak może wyglądać wstrzyknięty fałszywy panel .xml. PX8.2 eliminuje to ryzyko od razu, gdyż w ogóle nie dodaje własnego interfejsu do drzewa paneli Panoramy, działając jako zupełnie osobna warstwa rysunkowa. Ta decyzja projektowa nie pozostawia śladów w żadnych skanach integralności opartych na interfejsach. Częścią wieloletniej historii CSCodep wolnej od wykrywania VAC jest skrupulatne utrzymywanie takich separacji na poziomie silnika, ponieważ ta izolacja jest ponownie sprawdzana i weryfikowana w każdej nowej wersji.