- mar nov 07, 2017 1:14 pm
#354406
Interessante discorso ma non del tutto veritiero.
Iniziamo con le draw call, quello che dici, ovvero usare le DX12 sicuramente aumenterebbe le prestazioni perchè DX12 possono gestire meglio le informazioni da processare ai vari core della tua CPU (se non sbaglio possono usare più di 2 core), tuttavia dire che le draw call son mal ottimizzate non è del tutto corretto, semplicemente in un gioco sandbox dove il giocatore può piazzare milioni di poligoni dove vuole non può valere la stessa regola di un gioco dove l’ambiente è già stato deciso e BLOCCATO dai programmatori (infatti in Fallout non si possono costruire accampamenti troppo grandi proprio perchè non essendo “ottimizzati” andrebbero ad impattare negativamente sulle prestazioni se troppo grandi).
Quando fai un gioco come Assassin Creed, sai già ogni modello dove verrà posizionato, cosa vedrà il giocatore e di conseguenza il tutto viene ottimizzato nel migliore dei modi (:)), in un sandbox dove dai la completa libertà all’utente di creare il propio “livello” questo non è possibile. Creare un parco in PC è come creare un livello con l’Unreal Engine… prova a buttare dentro milioni di poligoni come in un grande parco di PC e vedrai che anche l’UE4 non ce la fa.
Riguardo al culling esistono invece diverse tecniche per essere utilizzato, alcune funzionano meglio in una situazione, altre meno. Esistono dei culling “automatici” che servono a ben poco se non affiancati da altri sistemi che deve prevedere il level designer. Un’esempio è il “portals culling” che nasconde tutto quello che c’è oltre un “portale”. Capirete che la maggior parte di queste tecniche non possono essere usate in Planet Coaster sempre per la sua natura sandbox dove è possibile zoomare dalle scarpe di un guest fino a vedere l’intero parco.
Insomma non c’è ancora un culling che nasconde perfettamente quello che non vedi… serve sempre un’aiuto da parte del level designer per capire cosa far vedere cosa no (che di fatto è quello che succede in NL2 usando clipping, LOD ed occluder).
Se vi interessa trovate info quì:
http://docs.cryengine.com/display/SDKDO ... +ExplainedRiguardo al deferred shading render vs lineare (forward) non so Planet Coaster quale utilizza, ma in generale è vero quello che hai scritto, con le moderne schede grafiche il deferred render è più performante specialmente nel caso ci siano tante fonti di luci nel livello. Le draw calls sono ridotte e verranno visualizzate solo le fonti di luce visibili dal giocatore.
Esempio, No Limits 2 ha guadagnato parecchio da questo cambiamento (son passati da lineare a deferred mesi fa) aumentando le prestazioni in percentuale variabile a seconda del tipo di parco che si sta realizzando.
Non so però se questo metodo è applicabile a PC sempre per la sua natura sandbox (infatti NL2 ricalcola le luci ogni volta che riapriamo il parco… e non possiamo mettere luci/modelli in tempo reale, prima si posizionano, l’engine le compila e poi si può avviare il parco in “play”, un pò come creare un livello in UE4).
Riguardo il discorso che se guardo in cielo ho sempre gli stessi FPS a me non sembra così, prova a parco vuoto (ma con tanto theming) e a parco pieno, con o senza pausa… io ho risultati totalmente diversi.
Approvo invece al 100% l’ultimo consiglio che hai dato… usare il minor numero di pezzi possibili, evitare di inserire poligoni non visibili son la regola per aver un parco (ma anche un videogame) più ottimizzato e performante.