Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Verwenden von Decals
Bemerkung
Decals are only supported in the Forward+ and Mobile renderers, not the Compatibility renderer.
If using the Compatibility renderer, consider using Sprite3D as an alternative for projecting decals onto (mostly) flat surfaces.
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 Performance-Einbuß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
The Godot demo projects repository contains a 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
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
Schnellstart-Anleitung
Erstellen von Decals im Editor
Erstellen Sie einen Decal-Node im 3D-Editor.
Erweitern Sie im Inspektor den Bereich Texturen und laden Sie unter Texturen > Albedo eine Textur.
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.
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.0nicht die Auswirkung der Normal/ORM-Textur auf die darunterliegende Oberfläche. Setzen Sie diesen Wert auf0.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.0projiziert das Decal unabhängig vom Winkel, während ein Wert von0.999das Decal auf Oberflächen begrenzt, die nahezu senkrecht sind. Die Einstellung Normalen-Fading auf einen Wert größer als0.0hat einen kleinen Performanceverlust 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.
Decal-Rendering-Reihenfolge
Standardmäßig werden Decals auf der Grundlage der Größe ihrer AABB und der Entfernung zur Kamera angeordnet. AABBs, die sich näher an der Kamera befinden, werden zuerst gerendert, was bedeutet, dass sich die Reihenfolge des Renderings von Decals je nach Kameraposition ändern kann, wenn einige Decals an der gleichen Stelle positioniert sind.
Um dies zu beheben, können Sie die Property Sortierversatz im VisualInstance3D-Abschnitt des Decal-Node-Inspektors anpassen. Dieser Versatz ist keine strenge Prioritätsreihenfolge, sondern eine Richtlinie, die der Renderer verwendet, da die AABB-Größe immer noch Einfluss darauf hat, wie das Decal sortiert wird. Höhere Werte führen daher immer dazu, dass das Decal über anderen Decals mit einem niedrigeren Sortierversatz gezeichnet wird.
Wenn Sie sicherstellen möchten, dass ein Decal immer über anderen Decals gerendert wird, müssen Sie seine Property Sortierversatz auf einen positiven Wert setzen, der größer ist als die AABB-Länge des größten Decals, das es überlappen könnte. Damit dieses Decal stattdessen hinter anderen Decals gezeichnet wird, setzen Sie den Sortierversatz auf denselben negativen Wert.
VisualInstance3D Sortierversatzvergleich bei Decals
Optimierung von Performance 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.
The way decals are rendered also has an impact on performance. The Rendering > Textures > Decals > Filter advanced project setting lets you control how decal textures should be filtered. Nearest/Linear does not use mipmaps. However, decals will look grainy at a distance. Nearest/Linear Mipmaps will look smoother at a distance, but decals will look blurry when viewed from oblique angles. This can be resolved by using Nearest/Linear Mipmaps Anisotropic, which provides the highest quality, but is also slower to render.
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 Performance-Grü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.
When using the Forward+ renderer, Godot uses a clustering approach for decal rendering. As many decals as desired can be added (as long as performance allows). However, there's still a default limit of 512 clustered elements that can be present in the current camera view. A clustered element is an omni light, a spot light, a decal or a reflection probe. This limit can be increased by adjusting Max Clustered Elements in Project Settings > Rendering > Limits > Cluster Builder.
When using the Mobile renderer, only 8 decals can be applied on each individual Mesh resource. If there are more decals affecting a single mesh, not all of them will be rendered on the mesh.