Le novità di Godot 4

Godot Engine 4

Pubblicazione: 2/28/2022
Ultimo aggiornamento: 9/18/2022



Di recente sta crescendo l’interesse verso Godot Engine 4. Ho raccolto qui tutte le informazioni più utili per chi sta valutando l'utilizzo di questo engine open source.

L'ultima versione disponibile è Godot Engine 4 Beta (al tempo della scrittura di questa guida).

Potete trovare le build ufficiali a questo link: downloads.tuxfamily.org/godotengine/4.0/

Da qui in avanti per brevità:

  • con Godot 4 intenderò Godot 4 Beta
  • con Godot 3 mi riferirò invece all'ultima versione stabile di Godot 3, che al tempo della scrittura è Godot 3.5

Stabilità dell’engine

Godot 4 è ormai in feature freeze, quindi il focus dello sviluppo è nel migliorare le performance e rimuovere tutti i bug. Potrebbero esserci dei piccoli cambi di API e qualche piccola miglioria ritenuta importante per l'engine. Storicamente è capitato di vedere alcune feature anche nelle fasi di sviluppo più avanzate come la fase RC, quindi aspettiamoci ancora qualche piccola sorpresa!

Attualmente Godot 4 è utilizzabile senza grossi limiti, ma l'esperienza non è ancora rifinita come lo era per Godot 3. La cosa che ho trovato più fastidiosa attualmente è la presenza di un leggero lag nell'utilizzare l'editor. Non ho ancora capito se è un problema comune o se avviene solo su particolari configurazioni (magari il compositor di Gnome crea qualche problemino?).

Se volete massima solidità per sviluppare un vostro gioco allora vi consiglio di usare Godot 3 ancora per qualche tempo.

Se invece siete proprio curiosi di cominciare a sviluppare con Godot 4, potete dare un'occhiata al video tutorial completo fatto qualche tempo fa con la versione alpha.

Upgrade da Godot 3 a Godot 4

Se volete aggiornare un progetto dalla versione 3 alla 4, potete semplicemente aprire un vostro vecchio progetto e l'engine vi mostrerà l'opzione per fare l'upgrade.

Screenshot del tool per aggiornare il progetto da Godot 3 a Godot 4

È possibile utilizzare il convertitore ufficiale anche da riga di comando (PR) usando il parametro --convert-3to4.

Non vi aspettate che la conversione funzioni magicamente, il tool fa il suo meglio ma ci saranno diverse cose che andranno aggiustate manualmente per tornare ad avere un progetto pulito e senza errori.

Ho provato questa soluzione con Defending Todot ed i problemi sono stati diversi: preload rotto, Tween non più utilizzabili, export di variabili non funzionanti, shadowing di variabili già definite. Nonostante questo, correggere manualmente le prime due scene di gioco (il menù e la selezione del livello) mi ha impegnato per circa un'ora. Certamente un buon risultato, considerando che ancora non esiste una guida ufficiale per il porting, quindi bisogna capire da soli come risolvere i singoli errori.

Potrebbe essere rilasciata una guida ufficiale in futuro, ma non prima della fase Release Candidate (fonte: godot-docs/issues/4960). Qui trovate comunque delle note non ufficiali che potrebbero aiutarvi: Unofficial Godot 4.0 Migration/Upgrade guide

Nodi

Molti nodi sono stati aggiornati con un suffisso esplicito per rendere chiara l'appartenenza al 2D o 3D.

Ad esempio: ora i nodi per gestire le sprite si chiamano Sprite2D e Sprite3D.

Grazie alla funzionalità Scene Unique Nodes è ora possibile utilizzare get_node("%NodoUnico") per accedere ai nodi che sono stati marcati come unici all'interno della scena. Questa funzionalità è stata "backportata" anche in Godot 3!

Renderer Vulkan/OpenGL

Una delle principali novità di Godot 4 è la riscrittura del motore grafico. Le librerie utilizzate saranno Vulkan ed OpenGL ES 3.0.

Vulkan è uno standard (open) per computer grafica moderna. Rispetto ad OpenGL, offre più controllo sulla GPU e quindi migliori performance.

Il renderer viene offerto nelle modalità Clustered e Mobile. Il primo per una grafica più avanzata, il secondo per applicazioni più semplici.

Il team di Godot ha parlato anche di altre soluzioni che sono in valutazione per l'implementazione con la versione 4.1 (fonte).

Tra le altre novità troviamo la compilazione degli shader in multi-threading e la possibilità di importare shader GLSL4.50 (con estensioni Vulkan). Notizia che farà felice gli utilizzatori di Shadertoy!

Inoltre, a differenza di Godot 3, gli shader sono compilati (e memorizzati in cache) al caricamento. Questo meccanismo riduerrà lo stutter nelle prime fasi di avvio di una scena di gioco. Problema che in passato era comune sia nei giochi 2D che 3D.

Il nuovo renderer migliora:

  • Subsurface scattering
  • Screen space reflection
  • Screen space ambient occlusion (SSAO)
  • MSAA, FXAA e Specular anti-aliasing
  • Glow/bloom
  • Depth of field

Oltre le migliorie elencate in precedenza, ci sono moltissime nuove funzionalità come:

  • Global Illumination (grazie al contributo di Matias Goldberg di Ogre3D)
    • con supporto ad oggetti dinamici
    • i cambiamenti di luce, posizione e parametri avranno impatto immediato sulla scena
  • Soft shadows
  • Volumetric Fog
  • Sky shader
  • Decals
  • Light projectors
  • Sistemi particellari su GPU con attractor, trail, collisioni, sub-emitter
  • Generazione automatica delle mesh LOD
  • VisibilityRange
  • Occlusion culling
  • AMD FidelityFx Super Resolution
  • Supporto a finestre multiple per la stessa applicazione/gioco

Esiste una serie di blog post ufficiali per approfondire il lavoro fatto sul motore di rendering, lo trovate su godotengine.org/article/vulkan-progress-report-1.

Giochi 2D e Pixel Art

Se sviluppate giochi in pixel arte sapete bene che è necessario avere alcune accortezze per dare giustizia all'estetica del gioco. Tra queste solitamente bisogna disabilitare il filtro texture per evitare "smarmellamenti" delle proprie texture.

In Godot 4 questa impostazione è possibile specificarla per ciascun Nodo di tipo CanvasItem inserito nella scena, tenendo a mente che:

  • I nodi figli erediteranno l'impostazione del nodo padre.
  • se volete utilizzare un certo filtro per tutte le scene, potete selezionare direttamente l'opzione dai Project Settings come mostrato in questo tutorial.

Molto utile anche l'aggiunta di classi specifiche per numeri interi come Vector2i, Rect2i, Vector3i.

📝 GDScript

🔨 Questa sezione è ancora in lavorazione.

GDScript è il principale linguaggio di scripting di Godot Engine, la sua sintassi è simile a quella di Python e Lua.

In Godot 4 è stato migliorato notevolmente, senza stravolgere la sintassi per l'utente: chi ha confidenza con Godot 3, si sentirà a suo agio nell'utilizzare Godot 4.

Potete seguire tutte le novità leggendo questi progress report ufficiali.

In breve:

  • lo static typing, quando presente, migliorerà le performance di esecuzione (ne ho parlato in questo video)
  • la parola chiave await rimpiazza yield
  • aggiunta la parola chiave super al posto di .
  • i tipi enumerativi potranno essere usati come tipo di una variabile (in passato era già possibile farne l'export)
  • sono stati aggiunti gli array tipizzati var my_array: Array[int] = [1, 2, 3]
  • sono state aggiunte le funzioni lambda, e le funzioni sono diventate un "first class citizen" grazie alla classe Callable.
func _ready():
  var my_lambda = func(x):
      print(x)
  # my_lamba è di tipo Callable
  my_lambda.call("hello")
  • grazie ai Callable, Godot permette un approccio funzionale alla programmazione. Se volete approfondire vi consiglio questo talk di Geroge Marques (principale maintainer di GDScript): Functional programming and applications on GDScript
  • è possibile usare l'operatore match per eseguire rami di codice in base al tipo del parametro
  • è stato aggiunto un sistema di annotazioni, che si distinguono dal simbolo @. Ad esempio: @master, @puppet, @remote
  • anche gli export sono annotazioni: @export var my_number: int
  • setget è stato rimpiazzato dalle properties

    unlike setget properties always call their setter/getter even inside the same class. This gives users a consistent behavior which won't cause confusion or lead to potential mistakes during a refactor.

  • ora è possibile generare automaticamente documentazione navigabile per i propri nodi

C# / Mono

Godot 4 supporta .NET 6 (pr).

La versione finale di Godot 4 avrà supporto sia a GDScript che C#. Non sarà quindi necessario avere 2 versioni separate (una GDScript-only e l'altra con supporto a C#).

Funzionalità rimosse

Attualmente VisualScript è l'unica funzionalità ad essere stata rimossa dall'engine (link all'annuncio)

Fisica, Animazioni, IA

Godot 4 fa uso di un motore fisico 2D e 3D completamente custom, a differenza di quanto fatto con Godot 3.0 che ha fatto affidamento al Bullet engine (ma solo per la parte 3D).

C'è stata anche una riorganizzazione di tutti i nodi fisici e potete leggere qualche dettaglio in questa pull request

Per approfondire c'è un blog post ufficiale sui progressi del motore fisico (link).

Altra parte dell'engine a ricevere un grosso update è stata il sistema di pathfinding che ora può fare appoggio ad un Navigation Server dedicato multithread che permette di avere a runtime mesh baking e collision avoidance.

Anche il sistema di animazioni è stato migliorato con l'introduzione di:

  • Animation Library per semplificare il riuso delle animazioni
  • compressione dei dati per ridurre lo spazio necessario per le animazioni
  • nuovo sistema di retargeting

Per altre info sulle animazioni, potete leggere il post ufficiale.

Documentazione

La documentazione per Godot 4 la potete trovare selezionando la versione “latest” dal sito ufficiale. Il link esatto è docs.godotengine.org/en/latest/

Purtroppo la documentazione potrebbe contenere alcune pagine che ancora non sono state aggiornate alla versione 4. Per controllare se la documentazione è valida vi consiglio di sfruttare le community Crystal Bit e Godot Engine Italia (o anche quella internazionale) per chiedere aiuto.

Se invece volete controllare in autonomia, vi spiego quello che faccio di solito: guardate in alto a destra in qualsiasi pagina della documentazione: cliccate sul pulsante “Edit on GitHub” e vi si aprirà il codice sorgente della pagina di documentazione. Cliccate su “History” (sempre in alto a destra) e troverete la lista delle modifiche che sono state fatte su quella pagina.
Leggendo la descrizione del commit e la loro data, potrete intuire se la pagina è aggiornata o meno.

🆕 Altre Novità

Questa guida non è sufficiente? Se volete una lettura approfondita e completa, fate riferimento al CHANGELOG ufficiale.

Se vuoi sapere quando nuove versioni di questa guida saranno disponibili, segui il canale Telegram Crystal Bit!


SUPPORTAMI

Questo sito web è privo di pubblicità ed i contenuti vengono rilasciati con licenze libere come CC-BY-SA e GPL.

Se i contenuti ti piacciono e ti sono stati utili, considera di supportare il progetto.

Visita la pagina supporter.