Seleziona le tue preferenze relative ai cookie
Utilizziamo cookie e altre tecnologie simili (congiuntamente i “cookie”) per fornire i nostri servizi, per capire come i clienti li utilizzano, in modo da poterli migliorare, e per offrire pubblicità.
Si è verificato un problema durante il salvataggio delle tue preferenze sui cookie.
Torna alle Notizie

Dietro gli schermi: Prestazioni

J Brian Smith

Salve gente! Sono Brian, e gestisco la tecnologie di base del teamCrucible . Una delle cose di cui si occupa il nostro team sono le prestazioni  del gioco.

 

In generale, le prestazioni si riferiscono a quanto il gioco sia reattivo e fluido.   Tuttavia, i problemi con le prestazioni, possono assumere molte forme e avere cause diverse.   Prima vediamo quali sono alcuni dei componenti chiave delle prestazioni di un gioco e a cosa abbiamo lavorato da maggio. Dopodiché, parleremo di alcune delle tappe successive man mano che avanziamo verso un futuro migliore e più performante!  

 


Framerate

Quasi tutti i giocatori sanno che più fotogrammi al secondo (fps) è meglio.   Si possono incorrere in problemi con il framerate quando si ha un framerate basso, oppure quando il contenuto viene riprodotto a “singhiozzo” (un singolo fotogramma che impiega molto più tempo rispetto ai fotogrammi precedenti, risultando in una visualizzazione distorta).   Il nostro obiettivo è che sulle macchine che soddisfano le nostre specifiche di sistema consigliate, utilizzando le impostazioni grafiche "alte" predefinite, Crucible giri ad una velocità costante di 60 fps.Su hardware di fascia alta dovremmo girare molto più velocemente, e su hardware con “specifiche minime" con impostazioni predefinite "basse" dovremmo girare ad un costante minima di 30 fps.   Attualmente, per la maggior parte dei frame, siamo a 60 fps nelle specifiche consigliate, ma troppo spesso scendiamo sotto i 60 fps per brevi periodi di tempo o singoli fotogrammi corrotti.

 

Durante lo sviluppo, di solito guardiamo al "frametime" piuttosto che al framerate.  Per raggiungere i 60 fps, ogni fotogramma deve impiegare circa 16,5 millisecondi o meno. Il nostro lavoro ruota attorno alla riduzione del tempo necessario per completare la simulazione e il rendering di un singolo fotogramma.  Dal lancio abbiamo eseguito oltre una dozzina di micro-ottimizzazioni per il framerate e nel complesso abbiamo ridotto il frametime di oltre il 15% sulle macchine con specifiche consigliate, superando la soglia critica in cui la maggior parte dei nostri fotogrammi impiega meno dell’obiettivo di 16,5 millisecondi. La maggior parte di questi miglioramenti sono dovuti al fatto di aver reso più efficienti i sistemi di base e il codice motore, che esegue la nostra logica di gioco; oppure grazie ad un uso migliore dei core inattivi dell'unità di elaborazione centrale (CPU) in parti del nostro codice che erano inutilmente vincolate all'uso di una sola CPU core alla volta.  

 

Desincronizzazioni

 

Quando il tuo client (la copia del gioco in esecuzione sulla tua macchina) e il server condividono accuratamente lo stesso stato del mondo di gioco, li definiamo sincronizzati: "concordano" sullo stato del mondo.   Una desincronizzazione si verifica quando il client e il server non sono d'accordo su quale sia lo stato del mondo per un dato momento.  Quando ciò accade, il server invia una correzione al client, costringendolo a adottare la verità del server sullo stato del mondo (il server è sempre l '"autorità" sullo stato del mondo).  Questa correzione fa sì che il mondo si deformi in modo innaturale rispetto alla tua prospettiva.   Tu o un altro giocatore potreste “saltare" in un posto diverso, un'abilità che pensavate fosse stata abilitata o meno potrebbe avere avuto effetto o annullarsi, o qualche altro valore di gioco potrebbe cambiare in un modo che sembra innaturale. Se si desincronizza per più fotogrammi consecutivi, si possono presentare dei disagi e può causare problemi di framerate e larghezza di banda.  

 

Data la realtà del traffico Internet e dei modelli di sincronizzazione di rete a bassa latenza vuol dire che non li ridurremo mai a zero, ma possiamo migliorarli.  Abbiamo rilevato una serie di situazioni in cui una singola desincronizzazione, a causa di un pacchetto Internet interrotto o di un errore logico, potrebbe provocare una catena di dozzine di desincronizzazioni consecutive. La risoluzione di molti di questi problemi ha ridotto il nostro tasso di desincronizzazione complessivo di oltre la metà di quello che era al momento del lancio.

 

Memoria

Quando il gioco utilizza vicino ai limiti della memoria ad accesso casuale del sistema (RAM) o della RAM video del tuo computer, le prestazioni ne risentono gravemente, soprattutto se anche altri programmi e sistemi utilizzano alcune risorse.   L'uso ridotto della memoria garantisce che ci siano meno probabilità di avvicinarci a questi limiti, mantiene le prestazioni fluide e infine potrebbe permetterci di funzionare su una gamma più ampia di hardware.  

 

Abbiamo fissato l'obiettivo di ridurre il nostro utilizzo della memoria dal lancio di 3 GB (che è molto, considerando che giriamo su macchine con 8 GB di RAM!), e dal nostro rilascio del 12 agosto, abbiamo già ridotto l'utilizzo della memoria di 2,6 GB.   L'aspetto più difficile di questo lavoro è stata l'implementazione di un codice di misurazione e reporting migliore nel nostro motore per fornire agli sviluppatori dati dettagliati su cosa stesse utilizzando esattamente tutta la memoria.   Armati di dati accurati su quali sistemi e contenuti utilizzavano quale memoria, più di una mezza dozzina di aree chiave del gioco sono state ottimizzate sia nel codice che nel contenuto per ridurre drasticamente l'utilizzo della memoria, senza sacrificare la qualità dell'esperienza di gioco.   Questo lavoro migliora considerevolmente l'esperienza di gioco al fondo della nostra gamma di hardware supportato. 

 

Larghezza di banda 

La maggior parte delle connessioni Internet delle persone fluttua nel corso di una partita.   Quando il gioco deve inviare o ricevere più informazioni di quelle che la tua connessione può supportare in un dato momento, le informazioni vengono perse e il tuo gioco soffre di problemi di desincronizzazione ed alta latenza.   La riduzione della larghezza di banda utilizzata dal gioco diminuisce la frequenza di questi problemi.  

 

Una delle principali ottimizzazioni che abbiamo apportato finora su questo fronte riguardava alcuni sistemi chiave che utilizzavano molta più larghezza di banda del necessario per sincronizzare i propri dati. 

 


Monitoraggio dei progressi

Ora che abbiamo esaminato i quattro fattori - framerate, desincronizzazione, memoria e larghezza di banda - che costituiscono la maggior parte dell'esperienza di performance del giocatore, come facciamo a sapere se le nostre modifiche stanno funzionando?   

 

Senza una misurazione coerente delle nostre caratteristiche di prestazione, è molto difficile sapere se stiamo facendo progressi!  Durante lo sviluppo abbiamo misurato attentamente le prestazioni e continuiamo a perfezionare la nostra capacità di comprendere tutti gli scenari di prestazioni nel gioco.   Esistono tre modi principali per monitorare i cambiamenti di prestazione nel tempo:

 

  • Abbiamo migliorato la nostra automazione dei test, che testa automaticamente e raccoglie dati dettagliati sulle prestazioni del gioco dozzine di volte al giorno, per descrivere le prestazioni in modo più coerente e corretto.   Questi dati ci consentono di rilevare rapidamente quando vengono introdotti nuovi problemi e di verificare l'efficacia delle nuove ottimizzazioni.   

 

  • Integriamo i dati automatizzati con esecuzioni manuali giornaliere delle prestazioni, in cui il nostro team di controllo qualità (QA) gioca con strumenti speciali e codice di registrazione delle prestazioni per assicurarci di avere dati da scenari di gioco reali che potrebbero essere persi dal nostro test automatizzato (che ogni volta verifica esattamente le stesse condizioni in base alla progettazione).  

 

  • Infine, monitoriamo i dati sulle prestazioni di alto livello dei giochi del mondo reale su una pagina web interna per confrontare ciò che i giocatori stanno effettivamente sperimentando con le nostre aspettative dai test interni. 

 


Uno sguardo al futuro

Ora che ci siamo occupati di ciò che contribuisce alla qualità delle prestazioni, dello stato di ciascuno di essi per gli attributi in Crucible e il modo in cui li misuriamo, c'è solo un ultimo argomento per oggi: cosa succede dopo!   Ecco alcuni degli aspetti su cui stiamo lavorando in questo momento, suddivisi per categoria: 

 

Framerate

Nei nostri test interni sulla macchina con specifiche consigliate, abbiamo ancora rilevato che circa il 10% dei nostri fotogrammi impiega 19 ms (ricorda che miriamo a 16,5 ms o meno) e l'1% dei nostri fotogrammi impiega circa 23 ms.  Per il futuro, prevediamo di fare ulteriore uso di core CPU aggiuntivi, il che ridurrà il nostro frametime di base, specialmente su PC di fascia alta con più core CPU.   Condurremo anche un'analisi più approfondita delle situazioni che si traducono in "frame corrotti" per meglio far fronte alle loro cause specifiche.   E infine, lavoreremo per bilanciare meglio il carico di lavoro che deve essere fatto su ogni singolo frame.  

 

Il nostro intento   è quello di supportare 144 fps costanti su hardware di fascia alta. Nel breve e medio termine, ci concentriamo principalmente sul supporto di una velocità costante di 60 fps su macchine che corrispondono alle nostre specifiche consigliate e i miglioramenti contribuiranno immediatamente a fps più elevati anche su hardware di fascia alta.

 

Desincronizzazioni

Nei prossimi due mesi, lavoreremo per ridurre l'attuale tasso di desincronizzazione di oltre la metà, il che li renderà rari e dovrebbe avere un notevole impatto sull'ulteriore miglioramento del gioco in generale, specialmente in situazioni di combattimento pesante.  Queste ottimizzazioni saranno dovute al miglioramento della logica di previsione, nei casi in cui la previsione esistente è necessaria ma fragile, oltre a rimuovere del tutto una logica di previsione non necessaria.  

 

Memoria

Come accennato in precedenza, l'obiettivo che ci siamo prefissati è di ridurre l'utilizzo della memoria diCrucibledi 3 GB e siamo già scesi di circa 2,6 GB. Attraverso altre ottimizzazioni pianificate di codice e contenuto (in particolare si riferiscono al modo in cui carichiamo la geometria in memoria), riteniamo di poter raggiungere questo obiettivo entro il prossimo mese.  

 

Larghezza di banda   

Nella nostra prossima versione, utilizzeremo una tecnologia di compressione rapida per ridurre ulteriormente il nostro utilizzo della larghezza di banda del ben 30%.   Grazie a questo, raggiungeremo sistematicamente il nostro obiettivo di utilizzare meno di 300 kbit / secondo di larghezza di banda di download (e quasi sempre utilizzandone molto meno).  

 

A quel punto, avremo per lo più finito di ottimizzare la larghezza di banda, ma daremo un'occhiata a quanto possiamo migliorare la larghezza di banda di upload usata dal gioco. In generale, usiamo meno upload rispetto al download, ma alcune persone hanno connessioni che sono più vincolate al caricamento rispetto al download, quindi può valere la pena ottimizzare ulteriormente questo aspetto se trovassimo delle buone opportunità.  

 


Grazie mille per aver letto e per aver giocato a Crucible! Sappiamo che le prestazioni sono fondamentali per l'esperienza di uno sparatutto multiplayer competitivo.   Non saremo mai completamente soddisfatti e cercheremo sempre nuovi modi per migliorare le prestazioni del gioco.   Se sei appassionato di prestazioni e hai degli appunti riguardo specifiche situazioni di gioco dettagliate che sembrano avere problemi, non esitare a contattarci: il canale "#bugg reports" su Discord è il posto perfetto per condividerlo.  


V2