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 ist im Kern eine 3D-Engine. Selbst wenn du ausschließlich mit 2D-Material arbeitest, erfolgt das gesamte Rendering in 3D, wird aber orthografisch auf den Bildschirm projiziert. Defold ermöglicht dir, vollständige 3D-Inhalte zu nutzen, indem du 3D-Assets oder Modelle (models) in deine Sammlungen (collections) einbindest. Du kannst reine 3D-Spiele ausschließlich mit 3D-Assets erstellen oder 3D- und 2D-Inhalte nach Belieben mischen.
Modellkomponenten werden genauso erstellt wie jede andere Komponente (component) eines Spielobjekts (game object). Dafür gibt es zwei Möglichkeiten:

Nachdem du das Modell erstellt hast, musst du einige Eigenschaften festlegen:
Neben den Eigenschaften Id, Position und Rotation gibt es die folgenden komponentenspezifischen Eigenschaften:
Zusätzlich zu den oben genannten Eigenschaften gibt es für jedes Mesh des Modells ein Feld, in dem du ein Material zuweisen kannst:
gltf-Material für physikalisch basiertes Rendering der glTF-Materialeigenschaften, ein integriertes model-Material für allgemeine Modellschattierung oder ein eigenes Material. Siehe die Materialvarianten unten und das PBR-Handbuch.Je nach Material gibt es eine oder mehrere Textureigenschaften:
Bei der Auswahl einer glTF- oder GLB-Scene oder beim Ändern ihrer Mesh-Auswahl kann das Ausfüllen von Material- und Texturbindungen angeboten werden. Auto Fill ersetzt vorhandene Bindungen durch die der Quelle; Keep Current behält deine Bindungen bei und übernimmt dabei die neue Szenen- oder Mesh-Auswahl. Siehe den Ablauf des Modellimports.
Sobald die Modellkomponente vorhanden ist, kannst du die Komponente und/oder das Spielobjekt, das sie enthält, mit den üblichen Werkzeugen des Scene Editor bearbeiten und verändern, um das Modell nach deinen Wünschen zu verschieben, zu drehen und zu skalieren.
Du kannst Modelle zur Laufzeit über verschiedene Funktionen und Eigenschaften verändern (Hinweise zur Verwendung findest du in der API-Dokumentation).

Defold bietet umfangreiche Unterstützung für die Steuerung von Animationen zur Laufzeit. Mehr dazu findest du im Handbuch zu Modellanimationen:
local play_properties = { blend_duration = 0.1 }
model.play_anim("#model", "jump", go.PLAYBACK_ONCE_FORWARD, play_properties)
Der Wiedergabecursor der Animation kann entweder von Hand oder über das System für Eigenschaftsanimationen animiert werden:
-- 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)
Modelle können auch glTF-Animationen mit Morph-Zielen verwenden. Die Gewichtungen der Morph-Ziele werden wie andere Modellanimationen mit model.play_anim() animiert und können zur Laufzeit mit model.get_blend_weights() und model.set_blend_weights() gelesen oder überschrieben werden. Einzelheiten findest du im Abschnitt zu Morph-Zielen im Handbuch zu Modellanimationen.
Ein Modell hat außerdem verschiedene Eigenschaften, die mit go.get() und go.set() verändert werden können:
animationhash) (NUR LESBAR). Du änderst die Animation mit model.play_anim() (siehe oben).cursornumber).materialhash). Du kannst es mit einer Materialressourceneigenschaft und go.set() ändern. Ein Beispiel findest du in der API-Referenz.playback_ratenumber).textureNhash). Du kannst diese Eigenschaften mit go.get() lesen und mit einer Texturressourceneigenschaft und go.set() ändern. Defold unterstützt höchstens 16 Texturen pro Zeichenaufruf (draw call). Die Anzahl der von einem Shader nutzbaren Texturen kann auf Grafikadaptern mit einer niedrigeren Grenze für Textur-Sampler jedoch geringer sein.In 3D-Software kannst du üblicherweise Eigenschaften an den Vertices deiner Objekte festlegen, etwa zur Farbgebung und Texturierung. Diese Informationen werden in der glTF-Datei mit der Erweiterung .gltf oder .glb gespeichert, die du aus deiner 3D-Software exportierst. Je nach den Anforderungen deines Spiels musst du geeignete und leistungsfähige Materialien für deine Objekte auswählen und/oder erstellen. Ein Material kombiniert Shader-Programme mit einem Satz von Parametern für das Rendering des Objekts.
Folgende integrierte Materialien sind unter /builtins/materials/ verfügbar:
| Modelltyp | Allgemeine Modellschattierung | glTF-PBR-Schattierung |
|---|---|---|
| Statisch, nicht instanziert | model.material |
gltf.material |
| Statisch, instanziert | model_instanced.material |
gltf_instanced.material |
| Mit Skinning (animiert), nicht instanziert | model_skinned.material |
gltf_skinned.material |
| Mit Skinning (animiert), instanziert | model_skinned_instanced.material |
gltf_skinned_instanced.material |
Die gltf-Materialien bieten integrierte Metallic-/Roughness-Beleuchtung mit den importierten glTF-Materialdaten. Texturbindungen, Lichtquellen und benutzerdefinierte Shader beschreibt das PBR-Handbuch.
Alle diese integrierten Materialien verwenden lokalen Vertex-Raum. Bei geskinnten Modellen kann der Vertex-Shader dadurch das Skinning auf der GPU mithilfe einer Knochenmatrixtextur durchführen; lokaler Vertex-Raum ist auch für Modellinstanzierung erforderlich. Ein benutzerdefiniertes Material für GPU-Skinning oder instanzierte Modelle sollte deshalb die Vertex-Raum-Einstellung Local verwenden.
Der Knochenmatrix-Cache verwendet eine RGBA32F-Textur. Wenn der aktive Grafikadapter dieses Texturformat nicht unterstützt, kann Defold keine animierte Modellkomponente erstellen, die ein Material mit lokalem Koordinatensystem verwendet. Bei OpenGL ES 2.0 und WebGL 1.0 hängt die Unterstützung daher von der Erweiterung des Adapters für Gleitkommatexturen ab. Für die Kompatibilität mit einem Adapter, dem diese Erweiterung fehlt, verwende ein benutzerdefiniertes Material mit Weltkoordinatensystem. Dieses verwendet CPU-Skinning und kann keine Modellinstanziierung nutzen. Die Abmessungen des Caches kannst du über die Projekteinstellungen für Model anpassen.
Wenn du benutzerdefinierte Materialien für deine Modelle erstellen musst, findest du Informationen dazu in der Materialdokumentation. Das Shader-Handbuch enthält Informationen zur Funktionsweise von Shader-Programmen.
Das Standardmaterial für model hat die folgenden Konstanten, die du mit go.set() oder go.animate() ändern kannst (weitere Details findest du im Handbuch zu Materialien). Beispiele:
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). Der vector4 stellt die Einfärbung dar, wobei x, y, z und w den Rot-, Grün-, Blau- und Alpha-Anteilen der Einfärbung entsprechen.Das Standard-Renderskript zeichnet Materialien mit dem Tag model, einschließlich der integrierten Modell- und glTF-Materialien. Um sie in einem eigenen Renderskript zu rendern, erstelle ein passendes Prädikat und zeichne es mit einer für die Szene geeigneten Ansicht und Projektion. Zum Beispiel:
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
Einzelheiten zur Funktionsweise von Render-Skripten findest du in der Render-Dokumentation.