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
Defold est fondamentalement un moteur 3D. Même lorsque vous travaillez uniquement avec du contenu 2D, tout le rendu est effectué en 3D, mais projeté à l’écran de manière orthographique. Defold vous permet d’exploiter pleinement le contenu 3D en incluant des ressources 3D, ou modèles, dans vos collections. Vous pouvez créer des jeux entièrement en 3D avec uniquement des ressources 3D, ou mélanger du contenu 3D et 2D comme vous le souhaitez.
Les composants modèle se créent comme n’importe quel autre composant (component) d’objet de jeu (game object). Vous avez deux possibilités :

Une fois le modèle créé, vous devez définir plusieurs propriétés :
Outre les propriétés Id, Position et Rotation, les propriétés suivantes sont propres à ce composant :
En plus des propriétés ci-dessus, un champ permet d’affecter un matériau à chaque maillage du modèle :
Selon le matériau, une ou plusieurs propriétés de texture sont disponibles :
Une fois le composant modèle en place, vous pouvez modifier et manipuler le composant et/ou l’objet de jeu qui le contient à l’aide des outils habituels du Scene Editor pour déplacer, faire pivoter et redimensionner le modèle à votre guise.
Vous pouvez manipuler les modèles à l’exécution à l’aide de diverses fonctions et propriétés (consultez la documentation de l’API pour leur utilisation).

Defold offre des fonctions puissantes pour contrôler l’animation à l’exécution. Vous trouverez plus d’informations dans le manuel sur l’animation des modèles :
local play_properties = { blend_duration = 0.1 }
model.play_anim("#model", "jump", go.PLAYBACK_ONCE_FORWARD, play_properties)
Le curseur de lecture de l’animation peut être animé manuellement ou par le système d’animation des propriétés :
-- 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)
Les modèles peuvent également utiliser les animations de cibles de morphing glTF. Les poids des cibles de morphing sont animés avec model.play_anim() comme les autres animations de modèle, et peuvent être lus ou remplacés à l’exécution à l’aide de model.get_blend_weights() et de model.set_blend_weights(). Consultez la section sur les cibles de morphing du manuel sur l’animation des modèles pour plus de détails.
Un modèle possède également diverses propriétés que vous pouvez manipuler à l’aide de go.get() et de go.set() :
animationhash) (LECTURE SEULE). Vous changez d’animation à l’aide de model.play_anim() (voir ci-dessus).cursornumber).materialhash). Vous pouvez le changer à l’aide d’une propriété de ressource de matériau et de go.set(). Consultez la référence de l’API pour un exemple.playback_ratenumber).textureNhash). Vous pouvez lire ces propriétés avec go.get() et les modifier à l’aide d’une propriété de ressource de texture et de go.set(). Defold prend en charge au plus 16 textures par opération de dessin, mais le nombre utilisable par un shader peut être inférieur sur les adaptateurs graphiques dont la limite d’échantillonneurs de textures est plus basse.Les logiciels 3D vous permettent généralement de définir des propriétés sur les sommets de vos objets, comme la couleur et les textures. Ces informations sont enregistrées dans le fichier glTF .gltf ou .glb que vous exportez depuis votre logiciel 3D. Selon les besoins de votre jeu, vous devrez sélectionner et/ou créer des matériaux adaptés et performants pour vos objets. Un matériau combine des programmes de shader avec un ensemble de paramètres pour le rendu de l’objet.
Plusieurs matériaux intégrés peuvent vous servir de point de départ :
Les matériaux de modèle intégrés utilisent l’espace local des sommets. Pour les modèles déformés par squelette, l’espace local des sommets permet au shader de sommets d’effectuer la déformation sur le GPU à l’aide d’une texture de matrices d’os ; l’espace local des sommets est également requis pour l’instanciation des modèles. Un matériau personnalisé destiné aux modèles déformés par squelette sur le GPU ou utilisant l’instanciation devrait donc utiliser le paramètre Local pour l’espace des sommets.
Le cache des matrices d’os utilise une texture RGBA32F. Si l’adaptateur graphique actif ne prend pas en charge ce format de texture, Defold ne peut pas créer de composant modèle animé utilisant un matériau en espace local. Sur OpenGL ES 2.0 et WebGL 1.0, la prise en charge dépend donc de l’extension de l’adaptateur pour les textures à virgule flottante. Pour assurer la compatibilité avec un adaptateur qui n’en dispose pas, utilisez un matériau personnalisé en espace monde, qui effectue la déformation par squelette sur le CPU et ne permet pas l’instanciation des modèles. Vous pouvez ajuster les dimensions du cache à l’aide des paramètres Model du projet.
Si vous devez créer des matériaux personnalisés pour vos modèles, consultez la documentation sur les matériaux. Le manuel sur les shaders explique le fonctionnement des programmes de shader.
Le matériau model par défaut possède les constantes suivantes, que vous pouvez modifier avec go.set() ou go.animate() (consultez le manuel des matériaux pour plus de détails). Exemples :
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)
tintvector4). Le vector4 représente la teinte, x, y, z et w correspondant respectivement aux composantes rouge, verte, bleue et alpha de la teinte.Le script de rendu par défaut est conçu pour les jeux 2D et ne fonctionne pas avec les modèles 3D. Toutefois, en copiant le script de rendu par défaut et en y ajoutant quelques lignes de code, vous pouvez activer le rendu de vos modèles. Par exemple :
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
Consultez la documentation sur le rendu pour plus de détails sur le fonctionnement des scripts de rendu.