Il game engine open-source Godot 3D è adatto a giochi di qualità AAA? Parliamone

Lo scorso gennaio abbiamo scritto di come la nuova release di Godot 3D introdurrà caratteristiche che lo renderanno più moderno e, sempre lo scorso gennaio, la community ha pubblicato un articolo che possiamo considerare di autocritica, Godot for AA/AAA Games. What’s missing?

In breve, Juan Linietsky, uno degli sviluppatori (cercate il suo nome nella pagina dei teams di Godot per vedere in quante cose è coinvolto), elenca quali sono le cose che mancano a Godot 3D per essere considerato adatto a giochi doppia e tripla A, ossia di qualità superiore.

Tra questi, credo sia interessante soffermarsi su alcuni elementi:

Streaming

la tecnologia che permette di creare gli open world. Si tratta di giochi dove l’ambiente è ampio decine (o più) di chilometri. Con lo streaming il motore carica in memoria solo texture a bassissima risoluzione e modelli con pochi vertici, caricando materiale più dettagliato dal disco solo se esso è presente nella porzione di mondo attualmente visitata, rimuovendo dati non più necessari perché divenuti lontani e inutili. Godot non possiede questo strumento e, come dice Linietsky:

Streaming is the most important feature missing for managing large scenes or open worlds. Without it, Godot users are subject to long loading times (as every texture, model and animation has to load before anything is shown). There is also a risk of running out of memory if too many assets are loaded in parallel instead of streaming them.

Lo streaming è la caratteristica mancante più importante per gestire grandi scenari o mondi aperti. Senza di essa, gli utenti di Godot sono soggetti a lungi tempi di caricamento (in quanto ogni texture, modello o animazione deve essere caricata molto prima che qualsiasi altra cosa sia visualizzata). Esiste anche il rischio di esaurire la memoria se troppi contenuti sono caricati in parallalo, anziché riversarli in streaming1.

Swarms

Negli effetti particellari gli elementi di un gruppo sono indipendenti gli uni dagli altri e servono per creare effetti come fumo, fuoco o esplosioni. Ma gli swarms o flocks sono cose più complicate, utilizzate per simulare stormi. Un esempio banale può essere uno stormo di uccelli che si muove come un unico corpo, pur avendo ogni elemento che agisce indipendentemente e con piccole variazioni; un altro è un gruppo di formiche se si muove in formazione verso un pezzo di pane. Se ogni formica è un’unità capace di muoversi avanti, indietro a destra e a sinistra, di collidere e di mantenere una distanza costante dalle tre formiche vicine, abbiamo qualcosa che richiede molti più calcoli di una semplice esplosione di scintille.

L’articolo si conclude dicendo che, a discapito delle lacune, Godot ha come asso nella manica il fatto di essere open-source e di permettere a team esperti e che ne hanno bisogno, di “mettere le mani sotto il cofano”, per modificare il motore a seconda delle proprie esigenze.

Sul subreddit /r/gamdev ci sono stati commenti “importanti”: in molti hanno confermato che tutti i punti sono corretti e che Godot 3D non è adatto a giochi tripla A. Interrogati, alcuni utenti hanno chiamato in causa le basse performance di rendering al confronto di Unreal o di Unity, la mancanza di un asset store e l’impossibilità di salvare shader compilati in precedenza.

È vero: a oggi, Godot 3D non è adatto per scrivere il nuovo Assassin’s Creed. Purtroppo, l’impossibilità di gestire ampissimi spazi preclude la creazione di intere città senza interruzioni: una limitazione che Godot non può aggirare.

Ma è altresì vero che conoscere questi limiti è anche capire in quale direzione muoversi per il futuro.

Godot 3D, diversamente da altri engine è libero e i contributi che aziende o singoli possono portare ci danno la speranza di poter vedere presto implementate queste funzionalità.

Mi permetto un ultimo appunto: l’essere inadatto ai giochi tripla-A è una mancanza, ma non così grave se si è piccoli team che sviluppano senza budget milionari. Queste realtà, che sono la maggior parte degli studi indipendenti, non avrebbero comunque la possibilità di costruire i modelli di 3D di città intere, né di usare attori per la motion capture che verrà applicata a modelli da centinaia di migliaia di poligoni.

Il suggerimento è comunque di dare a Godot 3D una possibilità e, più in generale, di capire se le prestazioni di cui avete bisogno giustificano l’uso di un altro software. E, nel peggiore dei casi, essendo GDScript molto semplice, Godot 3D può tornare utile per creare prototipi da reimplementare con l’engine di produzione.


[1] Ammetto che riversare dati in streaming non è la miglior traduzione possibile dell'espressione "to stream". Se ne avete di migliori, scrivetelo nei commenti.

Appassionato di GNU/Linux dal 2000, tento disperatamente di tenermi distante dalla programmazione web e di sviluppare in C/C++ e Python i software che mi vengono commissionati.

5 risposte a “Il game engine open-source Godot 3D è adatto a giochi di qualità AAA? Parliamone”

  1. Avatar amedeo lanza
    amedeo lanza

    anziché riversarli in streaming

    che ne dici di: anziché riceverli come flusso ?

    una domanda: per quello che ne so (non sono un gran giocatore) i giochi in streaming dovrebbero effettuare il rendering su un server che invia il flusso video, in modo da scaricare il lavoro delle risorse locali; per caso è utile anche per giochi destinati a girare in locale (o al massimo in lan) ? o non ho capito proprio cosa significhi lo streaming per i giochi ?

  2. Avatar JaK
    JaK

    Lo streaming, in questo caso specifico, è una tecnica per gestire grandi spazi tridimensionali.

    Immagina di riprodurre tutta la città di Venezia come in Assassins Creed 2: si tratta di una quantità di dati enorme, tra modelli 3D, texture e posizioni delle luci. Idealmente avremmo tutte queste informazioni caricate nella RAM della scheda grafica; in pratica non possiamo caricare tantissimi dati (la PS3 aveva una GPU a 256Mb).

    Però è anche vero che se stiamo inquadrando la zona di Piazza San Marco, non siamo al momento interessati a ciò che esiste nel resto della città. Di conseguenza possiamo caricare ad alta definizione solo le parti di Venezia che sono vicine a noi e a media risoluzione quelle che sono a media distanza. Di edifici o texture distanti o distantissime, possiamo visualizzare solo un quadrato colorato di azzurrino, perché a tale distanza sarebbe superfluo avere tutti quei dati.

    PS: riversarli in flusso potrebbe anche funzionare. Ma mi suona ancora più familiare “riversarli in streaming”. Qua bisogna sentire un linguista 🙂

    Però il nostro personaggio si muove in questa città e diverse parti vanno quindi ricollocate in RAM a seconda della loro distanza da noi: man mano che ci allontaniamo da Piazza San Marco, il modello e le texture di quella location sono via via meno interessanti.

    Lo streaming si occupa di caricare e scaricare tra disco, RAM di sistema e RAM della GPU queste informazioni con diversi livelli di dettaglio in maniera continuativa: senza di esse, appena usciti da Piazza San Marco, il gioco si fermerebbe fino a quando la nuova parte di città fosse caricata dal disco. Un po’ quello che succedeva col primo Half-Life.

    Spero di aver spiegato la cosa 🙂

  3. Avatar JaK
    JaK

    Lo streaming, in questo caso specifico, è una tecnica per gestire grandi spazi tridimensionali.

    Immagina di riprodurre tutta la città di Venezia come in Assassins Creed 2: si tratta di una quantità di dati enorme, tra modelli 3D, texture e posizioni delle luci. Idealmente avremmo tutte queste informazioni caricate nella RAM della scheda grafica; in pratica non possiamo caricare tantissimi dati (la PS3 aveva una GPU a 256Mb).

    Però è anche vero che se stiamo inquadrando la zona di Piazza San Marco, non siamo al momento interessati a ciò che esiste nel resto della città. Di conseguenza possiamo caricare ad alta definizione solo le parti di Venezia che sono vicine a noi e a media risoluzione quelle che sono a media distanza. Di edifici distanti o distantissimi, possiamo visualizzare solo un quadrato colorato di azzurrino: a occhio nudo non vedremmo molto altro e sarebbe inutile caricare megabytes di data per nulla.

    Fin qui tutto chiaro, credo: tuttavia il nostro personaggio si muove in questa città: alcune parti ad alta definizione non servono più e vanno sostituite con le medie e altre a più alta definizione diventano necessarie: ad esempio, man mano che ci allontaniamo da Piazza San Marco, il modello e le texture di quella location sono via via meno interessanti.

    Lo streaming si occupa di caricare e scaricare tra disco, RAM di sistema e RAM della GPU queste informazioni con diversi livelli di dettaglio in maniera continuativa: senza di esse, appena usciti da Piazza San Marco, il gioco si fermerebbe fino a quando la nuova parte di città fosse caricata dal disco. Un po’ quello che succedeva col primo Half-Life.

    Spero di aver spiegato la cosa 🙂

    PS: riversarli in flusso potrebbe anche funzionare. Ma mi suona ancora più familiare “riversarli in streaming”. Qua bisogna sentire un linguista 🙂

  4. Avatar davide
    davide

    No questa è un altra cosa, si intende lo streaming di assets e di textures in tempo reale dal disco o dalla ram in modo da poter creare mondi aperti dove non ci sono caricamenti tra un pezzo di scenario e un altro, riguarda l’esecuzione del gioco in locale con le risorse della macchina su cui gira.

  5. Avatar amedeo lanza
    amedeo lanza

    Grazie per la spiegazione. Per il termine, è tecnico per cui tendenzialmente streaming va bene; personalmente trovo che in generale l’utilizzo di termini stranieri o erroneamente italianizzati renda meno comprensibili le cose.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *