Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Verwenden von Decals

Bemerkung

Decals werden nur in den Rendering-Backends Clustered Forward und Forward Mobile unterstützt, nicht im Kompatibilität-Backend.

Wenn Sie das Kompatibilität-Backend verwenden, sollten Sie Sprite3D als Alternative für die Projektion von Decals auf (meist) flache Oberflächen in Betracht ziehen.

Decals sind projizierte Texturen, die auf undurchsichtige oder transparente Oberflächen in 3D aufgebracht werden. Diese Projektion erfolgt in Echtzeit und ist nicht von der Mesh-Generierung abhängig. So können Sie Decals bei jedem Frame mit nur geringen Leistungseinbußen verschieben, selbst wenn sie auf komplexe Meshes angewendet werden.

Decals können zwar keine tatsächlichen Geometriedetails auf der projizierten Oberfläche hinzufügen, aber Decals können das physikalisch basierte Rendering nutzen, um ähnliche Eigenschaften wie vollwertige PBR-Materialien zu bieten.

Auf dieser Seite erfahren Sie:

  • Wie man Decals im 3D-Editor einrichtet.

  • Wie man Decals während des Spiels in einer 3D-Szene erstellt (z. B. Geschosseinschläge).

  • Wie man bei der Konfiguration von Decals ein Gleichgewicht zwischen Performance und Qualität findet.

Siehe auch

Das Godot-Demoprojekt-Repository enthält eine 3D-Decals-Demo.

Wenn Sie einen beliebigen 3D-Text auf eine Oberfläche schreiben wollen, verwenden Sie 3D-Text, der in der Nähe einer Oberfläche platziert wird, anstatt eines Decal Nodes.

Anwendungsfälle

Statische Dekoration

Manchmal ist der schnellste Weg, einer Szene Texturdetails hinzuzufügen, die Verwendung von Decals. Dies gilt insbesondere für organische Details, wie z. B. Schmutz- oder Sandflecken, die auf einer großen Fläche verstreut sind. Decals können dazu beitragen, die Wiederholung von Texturen in Szenen aufzubrechen und Muster natürlicher aussehen zu lassen. In kleinerem Maßstab können Decals auch verwendet werden, um Detailvariationen für Objekte zu erstellen. Mit Decals lassen sich zum Beispiel Schrauben und Muttern auf einer harten Oberflächen-Geometrie anbringen.

Da Decals ihre eigenen PBR-Eigenschaften auf die projizierten Oberflächen aufbringen können, lassen sich mit ihnen auch Fußabdrücke oder nasse Pfützen erzeugen.

Mit Decals auf die Level-Geometrie aufgetragene Verschmutzung

Mit Decals auf die Level-Geometrie aufgetragene Verschmutzung

Dynamische Gameplay-Elemente

Decals können temporäre oder dauerhafte Spieleffekte darstellen, wie z. B. Einschläge von Kugeln oder Brandflecken von Explosionen.

Mit einem AnimationPlayer-Node oder einem Skript können Decals mit der Zeit verblassen (und dann mit queue_free() entfernt werden), um die Performance zu verbessern.

Blob-Schatten

Blob-Schatten werden häufig in Projekten für mobile Geräte verwendet (oder um einen Retro-Art-Stil zu erreichen), da Echtzeit-Beleuchtung auf Low-End-Mobilgeräten tendenziell zu teuer ist. Wenn Sie sich jedoch auf gebackene Lightmaps mit vollständig gebackenen Lichtern verlassen, werfen dynamische Objekte keinen Schatten von diesen Lichtern. Dadurch sehen dynamische Objekte in Lightmapping-Szenen im Vergleich zur Echtzeit-Beleuchtung flach aus, und dynamische Objekte sehen fast so aus, als würden sie schweben.

Mithilfe von Blob-Schatten können dynamische Objekte dennoch einen annähernden Schatten werfen. Dies hilft nicht nur bei der Tiefenwahrnehmung in der Szene, sondern kann auch ein Gameplay-Element sein, insbesondere in 3D-Plattformern. Die Länge des Blob-Schatten kann verlängert werden, damit der Spieler weiß, wo er landen wird, wenn er gerade herunterfällt.

Selbst bei Echtzeit-Beleuchtung können Blob-Schatten als eine Form der Umgebungsschattierung in Situationen nützlich sein, in denen SSAO zu teuer oder zu instabil ist, da es sich um einen Bildschirmschatten handelt. Zum Beispiel werden die Schatten der Unterseite von Fahrzeugen durch Blob-Schatten gut dargestellt.

Blob-Schatten unter Objektvergleich

Blob-Schatten unter Objektvergleich

Schnellstart-Anleitung

Erstellen von Decals im Editor

  1. Erstellen Sie einen Decal-Node im 3D-Editor.

  2. Erweitern Sie im Inspektor den Bereich Texturen und laden Sie unter Texturen > Albedo eine Textur.

  3. Bewegen Sie den Decal-Node in Richtung eines Objekts und drehen Sie ihn dann so, dass das Decal sichtbar ist (und die richtige Ausrichtung hat). Wenn das Decals gespiegelt erscheint, versuchen Sie, es um 180 Grad zu drehen. Sie können überprüfen, ob das Decal richtig ausgerichtet ist, indem Sie Parameter > Normalen-Fading auf 0,5 erhöhen. Dadurch wird verhindert, dass das Decal auf Oberflächen projiziert wird, die nicht auf das Decal ausgerichtet sind.

  4. Wenn Ihr Decal nur statische Objekte beeinflussen soll, konfigurieren Sie es so, dass es dynamische Objekte nicht beeinflusst (oder umgekehrt). Ändern Sie dazu die Property Cull Maske des Decals, um bestimmte Ebenen auszuschließen. Ändern Sie anschließend die Nodes Ihrer dynamischen Objekte in MeshInstance3D, um ihre Sichtbarkeitsebenen zu ändern. Sie können sie zum Beispiel von Ebene 1 auf Ebene 2 verschieben und dann Ebene 2 in der Cull Maske-Property des Decals deaktivieren.

Decal-Node-Propertys

  • Ausmaße: Die Größe des Decals. Die Y-Achse bestimmt die Länge der Projektion des Decals. Halten Sie die Projektionslänge so kurz wie möglich, um die Auslesemöglichkeiten und damit die Performance zu verbessern.

Texturen

  • Albedo: Die Albedo-Map (Diffus/Farbe), die für das Decal verwendet werden soll. In den meisten Fällen ist dies die Textur, die Sie zuerst festlegen möchten. Wenn Sie eine Normal- oder ORM-Map verwenden, muss eine Albedo-Map eingestellt werden, um einen Alphakanal zu erhalten. Dieser Alphakanal wird als Maske verwendet, um zu bestimmen, wie stark die Normal-/ORM-Maps die darunter liegende Oberfläche beeinflussen.

  • Normal: Die für das Decal zu verwendende Normal Map. Sie kann verwendet werden, um die Detailgenauigkeit des Decals zu erhöhen, indem die Reaktion des Lichts auf das Decal verändert wird. Die Wirkung dieser Textur wird mit dem Alpha-Kanal der Albedo-Textur multipliziert (jedoch nicht mit Albedo Mix).

  • ORM: Die Occlusion/Rauheit/Metallisch Map, die für das Decal verwendet werden soll. Dies ist ein optimiertes Format für die Speicherung von PBR-Materialkarten. Die Ambient Occlusion-Map wird im roten Kanal gespeichert, die Rauhigkeitskarte im grünen Kanal, die Metallisch-Map im blauen Kanal. Die Wirkung dieser Textur wird mit dem Alpha-Kanal der Albedo-Textur multipliziert (jedoch nicht mit Albedo Mix).

  • Emission: Die für das Decal zu verwendende Emissionstextur. Im Gegensatz zu Albedo scheint diese Textur im Dunkeln zu leuchten.

Parameter

  • Emissionsenergie: Die Helligkeit der Emissionstextur.

  • Modulieren: Multipliziert die Farbe der Albedo- und Emissionstexturen. Verwenden Sie dies, um Decals zu färben (z.B. für Farbdecals, oder um die Variation zu erhöhen, indem Sie die Modulation jedes Decals zufällig wählen).

  • Albedo Mix: Die Deckkraft der Albedo-Textur. Im Gegensatz zur Verwendung einer Albedo-Textur mit einem transparenteren Alphakanal, reduziert eine Verringerung dieses Wertes unter 1.0 nicht die Auswirkung der Normal/ORM-Textur auf die darunterliegende Oberfläche. Setzen Sie diesen Wert auf 0.0, wenn Sie Decals erstellen, die nur normal/ORM-Texturen enthalten, wie z.B. Fußstapfen oder nasse Pfützen.

  • Normalen-Fading: Blendet das Decal aus, wenn der Winkel zwischen der AABB des Decals und der Zielfläche zu groß wird. Ein Wert von 0.0 projiziert das Decal unabhängig vom Winkel, während ein Wert von 0.999 das Decal auf Oberflächen begrenzt, die nahezu senkrecht sind. Die Einstellung Normalen-Fading auf einen Wert größer als 0.0 hat einen kleinen Leistungsverlust durch die zusätzlichen Berechnungen des Normalwinkels zur Folge.

Vertikales Fading

  • Oberes Fading: Die Kurve, über die das Decal verblasst, wenn sich die Oberfläche weiter von der Mitte der AABB entfernt (in Richtung des Projektionswinkels des Decals). Nur positive Werte sind gültig.

  • Unteres Fading: Die Kurve, über die das Decal verblasst, wenn sich die Oberfläche weiter vom Zentrum der AABB (weg vom Projektionswinkel des Decals) entfernt. Nur positive Werte sind gültig.

Fern-Fading

  • Aktiviert: Legt fest, ob die das Fern-Fading (eine Form von LOD) aktiviert ist. Das Decal wird über Beginn + Länge ausgeblendet, danach wird es aussortiert und nicht mehr an den Shader gesendet. Verwenden Sie dies, um die Anzahl der aktiven Decals in einer Szene zu reduzieren und so die Performance zu verbessern.

  • Beginn: Die Entfernung von der Kamera, bei der das Decal zu verblassen beginnt (in 3D-Einheiten).

  • Länge: Die Entfernung, über die das Decals verblasst (in 3D-Einheiten). Das Decal wird über diese Strecke langsam transparenter und ist am Ende komplett unsichtbar. Höhere Werte bewirken einen sanfteren Fade-Out-Übergang, der besser geeignet ist, wenn sich die Kamera schnell bewegt.

Cull-Maske

  • Cull-Maske: Gibt an, auf welche VisualInstance3D-Ebenen dieses Decal projiziert wird. Standardmäßig wirken sich Decals auf alle Ebenen aus. Damit können Sie festlegen, welche Arten von Objekten das Decal erhalten und welche nicht. Dies ist besonders nützlich, um sicherzustellen, dass dynamische Objekte nicht versehentlich ein Decal erhalten, das für das Terrain unter ihnen bestimmt ist.

Optimierung von Leistung und Qualität

Die Render-Performance von Decals hängt hauptsächlich von ihrer Bildschirmabdeckung ab, aber auch von ihrer Anzahl. Im Allgemeinen sind einige große Decals, die den größten Teil des Bildschirms abdecken, teurer zu rendern als viele kleine Decals, die über den Bildschirm verstreut sind.

Um die Render-Performance zu verbessern, können Sie, wie oben beschrieben, die Property Fern-Fading aktivieren. Dadurch werden weit entfernte Decals ausgeblendet, wenn sie sich weit von der Kamera entfernt befinden (und haben möglicherweise nur geringe oder gar keine Auswirkungen auf das endgültige Rendern der Szene). Mit Hilfe von Node-Gruppen können Sie auch verhindern, dass nicht benötigte dekorative Decals basierend auf einer Benutzerkonfiguration erscheinen.

Die Art und Weise, wie Decals gerendert werden, wirkt sich ebenfalls auf die Performance aus. Mit der erweiterten Projekteinstellung Rendern > Texturen > Decals > Filter können Sie steuern, wie Decal-Texturen gefiltert werden sollen. Bei Nearest/Linear werden keine Mipmaps verwendet. Allerdings sehen Decals aus der Entfernung körnig aus. Nearest/Linear Mipmaps sieht aus der Entfernung glatter aus, aber die Decals sehen aus schrägen Winkeln unscharf aus. Dies kann durch die Verwendung von Nearest/Linear Mipmaps Anisotropic gelöst werden, welches die höchste Qualität bietet, aber auch langsamer gerendert wird.

Wenn Ihr Projekt einen Pixel-Art-Stil hat, sollten Sie den Filter auf einen der Werte Nearest einstellen, damit die Decals Nearest-Neighbor-Filtering verwenden. Bleiben Sie ansonsten bei Linear.

Einschränkungen

Decals können keine anderen als die oben aufgeführten Materialeigenschaften beeinflussen, wie z. B. die Höhe (für Parallax-Mapping).

Aus Leistungsgründen verwenden Decals eine feste Rendering-Logik. Das bedeutet, dass Decals keine benutzerdefinierten Shader verwenden können. Benutzerdefinierte Shader auf den projizierten Oberflächen sind jedoch in der Lage, die Informationen zu lesen, die von den darüber liegenden Decals überschrieben werden, z. B. Rauheit und Metallisch.

Bei Verwendung des Forward+-Renderers verwendet Godot einen Cluster-Ansatz für die Darstellung von Decals. Es können so viele Decals wie gewünscht hinzugefügt werden (solange es die Leistung zulässt). Es gibt jedoch immer noch eine Standardgrenze von 512 Cluster-Elementen, die im aktuellen Kamera-View vorhanden sein können. Ein Clusterelement ist ein Omni-Licht, ein Spotlicht, ein Decal oder eine Reflexions-Probe. Diese Grenze kann durch Anpassen der erweiterten Projekteinstellung Rendern > Limits > Cluster Builder > Max. geclusterte Elements erhöht werden.

Wenn Sie das Forward Mobile-Backend verwenden, können nur 8 Decals auf jede einzelne Mesh Ressource angewendet werden. Wenn ein einzelnes Mesh von mehr Decals betroffen ist, werden nicht alle auf dem Mesh gerendert.