CS2 Panorama-Benutzeroberfläche: Vorteile gegenüber der Benutzeroberfläche
Wir untersuchen die Panorama-Schnittstellen-Engine von CS2: die XML/CSS-basierte UI-Ebene, den Zugriff auf HUD-Daten und die technischen Details der Entwicklung benutzerdefinierter Overlays.
Was ist Panorama und wie funktioniert es?
Panorama ist die Schnittstellen-Engine, die Valve in seinen Spielen wie CS2, Dota 2 und Deadlock verwendet. Alle visuellen Elemente wie HUD, Hauptmenü, Einkaufsbildschirm und Bestenliste werden mit XML-basierten Layoutdateien, CSS-ähnlichen Stildateien und einer Skriptsprache namens Panorama Script erstellt. Diese Struktur ist der Webentwicklung sehr ähnlich; Jedes Panel fungiert als DOM-Element und ist über Datenbindung mit dem Status des Spiels auf der C++-Seite verbunden. Die Sichtbarkeit oder der Inhalt eines Panels wird automatisch aktualisiert, wenn sich der Spielstatus ändert. Dies ist ein wichtiger Einstiegspunkt für das Verständnis der Kommunikation zwischen der Benutzeroberfläche und der Engine.
Greifen Sie auf HUD-Daten zu: Gesundheit, Munition, Bombentimer
Panoramatafeln hören im Hintergrund ständig Werte wie Gesundheit, Munition, Bombentimer und spiegeln diese auf dem Bildschirm wider. Dieser Datenstrom kann theoretisch von außen gelesen werden; Mit diesem Prinzip werden zusätzliche Informationsebenen erstellt, z. B. die Anzeige des Bombenexplosions-Timers größer und klarer als normal und die Zusammenfassung des Gesundheitszustands von Teamkollegen in einem kleinen Panel. Das Ziel besteht hier nicht darin, die vom Spiel selbst bereitgestellten Informationen zu verbergen, sondern die Informationen, die bereits auf dem Bildschirm vorhanden sind, aber in kleiner oder verstreuter Form angezeigt werden, besser lesbar zu machen. Solche Entwicklungen werden mit einer separaten Beobachtungsebene durchgeführt, ohne den nativen Panelbaum direkt zu berühren.
Zusätzliche Informationsebenen mit unabhängiger Überlagerung
Das Overlay-System von PX8.2 legt seine eigene Renderebene über die Zeichenschleife des Spiels, ohne jemals den Panel-Baum von Panorama aufzurufen. In dieser unabhängigen Ebene werden ESP-Boxen, Radarpunkte, FPS- und Ping-Informationen gezeichnet; Es werden keine XML- oder CSS-Dateien mit den eigenen Panels von Panorama geteilt. Diese Unterscheidung hat zwei wichtige Konsequenzen: Erstens unterbrechen die Aktualisierungen der Benutzeroberfläche des Spiels das Overlay nicht, da beide unabhängig voneinander sind. Zweitens funktioniert das Overlay stabiler und es gibt keine visuellen Konflikte, da es die nativen UI-Elemente nicht beeinträchtigt. Über das Menü können Overlay-Position und Transparenz Pixel für Pixel angepasst werden, was zu einem einheitlichen Erscheinungsbild bei jeder Monitorauflösung und HUD-Skala führt.
Leistungsmanagement und Konfliktrisiken
Panorama ist bereits ein mehrschichtiges Rendering-System, das CPU und GPU verbraucht; Das Anbringen eines zusätzlichen Overlays darüber kann die Frame-Zeit verlängern, wenn es nicht sorgfältig durchgeführt wird. In PX8.2 wird das Overlay-Rendering in einem separaten Render-Thread verarbeitet und ist so optimiert, dass es synchron mit der Haupt-Rendering-Schleife des Spiels läuft, sodass der zusätzliche FPS-Verlust praktisch unbemerkt bleibt. Durch die Aktualisierung des mit vsync kompatiblen Overlays auf Monitoren mit hoher Bildwiederholfrequenz wird das Flackern (Jitter) der Leitungen verhindert. Auf Low-End-Systemen verbessert die Reduzierung der Anzahl der Overlay-Elemente die Leistung weiter; Wenn Sie beispielsweise einfach das Box-ESP einschalten und die Skelettzeichnung ausschalten, kann die Frame-Zeit deutlich verkürzt werden.
Vermeidung schnittstellenbasierter Erkennungsmethoden
Einige Erkennungsmethoden scannen den Panel-Baum von Panorama und suchen nach Panels, die unerwartet sind oder nicht in den eigenen Dateien des Spiels enthalten sind. So kann ein injiziertes gefälschtes .xml-Panel erscheinen. PX8.2 eliminiert dieses Risiko von Anfang an, da es überhaupt keine eigene Schnittstelle zum Panel-Baum von Panorama hinzufügt und als völlig separate Zeichenebene fungiert. Diese Designentscheidung hinterlässt bei schnittstellenbasierten Integritätsscans keine Spuren. Ein Teil der jahrelangen Geschichte von CSCodep ohne VAC-Erkennung ist die sorgfältige Wartung solcher Trennungen auf Engine-Ebene, da diese Isolierung mit jeder neuen Version überprüft und überprüft wird.