Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

Componente modello

Defold è, alla base, un motore 3D. Anche quando lavori soltanto con contenuti 2D, tutto il rendering avviene in 3D, ma viene proiettato ortograficamente sullo schermo. Defold ti permette di utilizzare contenuti interamente 3D includendo asset 3D, o modelli (Model), nelle tue collezioni. Puoi creare giochi esclusivamente in 3D con soli asset 3D, oppure combinare contenuti 3D e 2D come preferisci.

Creazione di un componente modello

I componenti modello si creano come qualsiasi altro componente di un oggetto di gioco. Puoi farlo in due modi:

  • Crea un file Model facendo clic con il pulsante destro su una posizione nel browser Assets e selezionando New... ▸ Model.
  • Crea il componente incorporato direttamente in un oggetto di gioco facendo clic con il pulsante destro su un oggetto di gioco nella vista Outline e selezionando Add Component ▸ Model.

Modello in un oggetto di gioco

Una volta creato il modello, devi specificare alcune proprietà:

Proprietà del modello

Oltre alle proprietà Id, Position e Rotation, sono disponibili le seguenti proprietà specifiche del componente:

Mesh
Questa proprietà deve fare riferimento al file glTF .gltf o .glb che contiene la mesh da utilizzare. Se il file contiene forme di destinazione (morph target), queste vengono importate insieme alla mesh. Se il file contiene più mesh, viene letta soltanto la prima.
Create GO Bones
Seleziona questa opzione per creare un oggetto di gioco per ogni osso del modello. Puoi utilizzare questi oggetti di gioco per collegare altri oggetti di gioco, per esempio armi alle ossa delle mani e così via.
Skeleton
Questa proprietà deve fare riferimento al file glTF .gltf o .glb che contiene lo scheletro da utilizzare per l’animazione. Tieni presente che Defold richiede un unico osso radice nella gerarchia.
Animations
Imposta questa proprietà sul file Animation Set File che contiene le animazioni da utilizzare sul modello.
Default Animation
Questa è l’animazione, scelta dall’insieme di animazioni, che verrà riprodotta automaticamente sul modello.

Oltre alle proprietà precedenti, è presente anche un campo per assegnare un materiale a ciascuna mesh del modello:

Material
Imposta questa proprietà su un materiale che hai creato e che sia adatto a un oggetto 3D con texture. Sono disponibili diversi materiali integrati che puoi utilizzare come punto di partenza:
  • Usa model.material per modelli statici senza istanziazione
  • Usa model_instanced.material per modelli statici con istanziazione
  • Usa model_skinned.material per modelli con deformazione scheletrica (animati) senza istanziazione
  • Usa model_skinned_instanced.material per modelli con deformazione scheletrica (animati) con istanziazione

In base al materiale, saranno presenti una o più proprietà per le texture:

Texture
Questa proprietà deve puntare al file immagine della texture da applicare all’oggetto.

Modifiche nell’editor

Una volta aggiunto il componente modello, puoi modificare e manipolare il componente e/o l’oggetto di gioco che lo contiene con i normali strumenti dello Scene Editor, per spostare, ruotare e ridimensionare il modello come preferisci.

Modifiche a runtime

Puoi manipolare i modelli durante l’esecuzione tramite diverse funzioni e proprietà (consulta la documentazione API per le istruzioni d’uso).

Wiggler nel gioco

Animazione a runtime

Defold offre un potente supporto per il controllo delle animazioni durante l’esecuzione. Trovi maggiori informazioni nel manuale delle animazioni dei modelli:

local play_properties = { blend_duration = 0.1 }
model.play_anim("#model", "jump", go.PLAYBACK_ONCE_FORWARD, play_properties)

Il cursore di riproduzione dell’animazione può essere animato manualmente oppure tramite il sistema di animazione delle proprietà:

-- set the run animation
model.play_anim("#model", "run", go.PLAYBACK_NONE)
-- animate the cursor
go.animate("#model", "cursor", go.PLAYBACK_LOOP_PINGPONG, 1, go.EASING_LINEAR, 10)

I modelli possono utilizzare anche animazioni glTF con forme di destinazione. I pesi delle forme di destinazione vengono animati con model.play_anim() come le altre animazioni dei modelli e possono essere letti o sovrascritti durante l’esecuzione tramite model.get_blend_weights() e model.set_blend_weights(). Per i dettagli, consulta la sezione sulle forme di destinazione nel manuale delle animazioni dei modelli.

Modifica delle proprietà

Un modello dispone inoltre di diverse proprietà che puoi modificare utilizzando go.get() e go.set():

animation
L’animazione corrente del modello (hash) (SOLA LETTURA). Puoi cambiare l’animazione utilizzando model.play_anim() (vedi sopra).
cursor
Il cursore normalizzato dell’animazione (number).
material
Il materiale del modello (hash). Puoi modificarlo utilizzando una proprietà di risorsa materiale e go.set(). Consulta il riferimento API per un esempio.
playback_rate
La velocità di riproduzione dell’animazione (number).
textureN
Le texture del modello, dove N è compreso tra 0 e 15 (hash). Puoi leggere queste proprietà con go.get() e modificarle utilizzando una proprietà di risorsa texture e go.set(). Defold supporta al massimo 16 texture per chiamata di disegno, ma il numero utilizzabile da uno shader può essere inferiore con adattatori grafici che hanno un limite più basso di campionatori di texture.

Materiale

I software 3D consentono generalmente di impostare proprietà sui vertici degli oggetti, come il colore e le texture. Queste informazioni vengono inserite nel file glTF .gltf o .glb che esporti dal software 3D. In base ai requisiti del tuo gioco, dovrai selezionare e/o creare materiali appropriati e efficienti per i tuoi oggetti. Un materiale combina programmi shader con un insieme di parametri per il rendering dell’oggetto.

Sono disponibili diversi materiali integrati che puoi utilizzare come punto di partenza:

  • Usa model.material per modelli statici senza istanziazione
  • Usa model_instanced.material per modelli statici con istanziazione
  • Usa model_skinned.material per modelli con deformazione scheletrica (animati) senza istanziazione
  • Usa model_skinned_instanced.material per modelli con deformazione scheletrica (animati) con istanziazione

I materiali integrati per i modelli usano lo spazio locale dei vertici. Per i modelli con deformazione scheletrica, lo spazio locale dei vertici consente al vertex shader di eseguire la deformazione sulla GPU tramite una texture delle matrici delle ossa; lo spazio locale dei vertici è necessario anche per l’istanziazione dei modelli. Un materiale personalizzato destinato a modelli con deformazione scheletrica sulla GPU o con istanziazione deve quindi utilizzare l’impostazione Local per lo spazio dei vertici.

La cache delle matrici delle ossa utilizza una texture RGBA32F. Se l’adattatore grafico attivo non supporta questo formato di texture, Defold non può creare un componente modello animato che utilizza un materiale nello spazio locale. Su OpenGL ES 2.0 e WebGL 1.0, il supporto dipende quindi dall’estensione dell’adattatore per le texture in virgola mobile. Per la compatibilità con un adattatore che ne è privo, utilizza un materiale personalizzato nello spazio del mondo, che esegue la deformazione scheletrica sulla CPU e non può utilizzare l’istanziazione dei modelli. Puoi regolare le dimensioni della cache nelle impostazioni del progetto per i modelli.

Se devi creare materiali personalizzati per i tuoi modelli, consulta la documentazione sui materiali. Il manuale degli shader contiene informazioni sul funzionamento dei programmi shader.

Costanti del materiale

Il materiale predefinito del componente model ha le seguenti costanti, che puoi modificare con go.set() o go.animate() (consulta il manuale sui materiali per maggiori dettagli). Esempi:

go.set("#model", "tint", vmath.vector4(1,0,0,1))
go.animate("#model", "tint", go.PLAYBACK_LOOP_PINGPONG, vmath.vector4(1,0,0,1), go.EASING_LINEAR, 2)
tint
La tinta del modello (vector4). Il vector4 rappresenta la tinta, con x, y, z e w corrispondenti alle componenti rosso, verde, blu e alfa.

Rendering

Lo script di rendering predefinito è progettato specificamente per i giochi 2D e non funziona con i modelli 3D. Tuttavia, copiando lo script di rendering predefinito e aggiungendovi poche righe di codice, puoi abilitare il rendering dei tuoi modelli. Per esempio:


  function init(self)
    self.model_pred = render.predicate({"model"})
    ...
  end

  function update()
    ...
    render.set_depth_mask(true)
    render.enable_state(graphics.STATE_DEPTH_TEST)
    render.set_projection(stretch_projection(-1000, 1000))  -- orthographic
    render.draw(self.model_pred)
    render.set_depth_mask(false)
    ...
  end

Consulta la documentazione sul rendering per i dettagli sul funzionamento degli script di rendering.