3D Materialien (Spatial)

Einführung

SpatialMaterial ist ein Standard-3D-Material, das die von Künstlern meistgesuchten Funktionen bereitstellen soll, ohne dass Shader-Code geschrieben werden muss. Falls zusätzliche Funktionen benötigt werden, kann es jedoch in Shader-Code konvertiert werden.

In dieser Anleitung werden die meisten in SpatialMaterial vorhandenen Parameter erläutert.

There are 4 ways to add a SpatialMaterial to an object. It can be added in the Material property of the mesh. It can be added in the Material property of the node using the mesh (such as a MeshInstance node), the Material Override property of the node using the mesh, and the Material Overlay.

../../_images/add_material.png

Wenn Sie dem Mesh selbst ein Material hinzufügen, erhält das Meshes bei jeder Verwendung dieses Material. Wenn Sie dem Node mithilfe des Meshes ein Material hinzufügen, wird das Material nur von diesem Node verwendet und überschreibt auch die Materialeigenschaft des Meshes. Wenn ein Material in der Eigenschaft *Material überschreiben * des Nodes hinzugefügt wird, wird es nur von diesem Node verwendet. Außerdem werden die reguläre Materialeigenschaft des Nodes und die Materialeigenschaft des Meshes überschrieben.

The Material Overlay property will render a material over the current one being used by the mesh. As an example, this can be used to put a transparent shield effect on a mesh.

Kennzeichnungen

Räumliche Materialien haben viele Flags, die die allgemeine Verwendung eines Materials bestimmen.

../../_images/spatial_material1.png

Transparent

In Godot sind Materialien nur dann transparent, wenn sie speziell konfiguriert sind. Der Hauptgrund dafür ist, dass transparente Materialien mit einer anderen Technik gerendert werden (von hinten nach vorne sortiert und in der richtigen Reihenfolge gerendert).

Diese Technik ist weniger effizient (viele Zustandsänderungen treten auf) und macht die Materialien mit vielen Mittel- und Nachbearbeitungseffekten (wie SSAO, SSR usw.) unbrauchbar, die eine perfekt lichtundurchlässige Geometrie erfordern.

Aus diesem Grund werden Materialien in Godot als undurchsichtig angenommen, sofern nicht anders angegeben. Die wichtigsten Einstellungen, die Transparenz ermöglichen, sind:

  • Transparentes Flag (dieses hier)

  • Übergangsmodus auf etwas anderes als "Mix" eingestellt

  • Aktiviert das Verblassen bei Nähe oder Entfernung

Schatten zur Deckkraft verwenden

Durch die Beleuchtung wird das Alpha so geändert, dass schattierte Bereiche undurchsichtig und nicht schattierte Bereiche transparent sind. Nützlich zum Überlagern von Schatten auf einen Kamera-Feed in AR.

Unschattiert

In den meisten Fällen ist es üblich, dass Materialien durch Beleuchtung beeinträchtigt werden (schattiert).

In einigen Fällen möchten Sie jedoch möglicherweise nur die Albedo (Farbe) anzeigen und den Rest ignorieren. Wenn Sie dieses Flag aktivieren, werden alle Schattierungen entfernt und reine, unbeleuchtete Farben angezeigt.

../../_images/spatial_material26.png

Vertex-Beleuchtung

Godot hat dank des Tiefenvorlaufs mehr oder weniger einheitliche Kosten pro Pixel. Alle Beleuchtungsberechnungen werden durchgeführt, indem der Beleuchtungs-Shader für jedes Pixel ausgeführt wird.

Da diese Berechnungen kostspielig sind, kann die Leistung in einigen Fällen erheblich beeinträchtigt werden, z.B. beim Zeichnen mehrerer Transparenzschichten (was in Partikelsystemen üblich ist). In diesen Fällen kann die Umstellung auf Vertex-Beleuchtung hilfreich sein.

Darüber hinaus kann die Umstellung auf Vertex-Beleuchtung auf Low-End- oder Mobilgeräten die Renderleistung erheblich verbessern.

../../_images/spatial_material2.png

Beachten Sie, dass bei aktivierter Vertex-Beleuchtung nur gerichtete Beleuchtung Schatten erzeugen kann (aus Leistungsgründen).

Kein Tiefentest

Damit nahe Objekte über weit entfernten Objekten erscheinen, werden Tiefenprüfungen durchgeführt. Das Deaktivieren hat zur Folge, dass Objekte über (oder unter) allem anderen angezeigt werden.

Das Deaktivieren dieser Option ist am sinnvollsten, um Anzeigegeräte im Raum zu zeichnen und funktioniert sehr gut mit der Eigenschaft Renderpriorität von Material (siehe unten auf dieser Seite).

../../_images/spatial_material3.png

Punktgröße verwenden

Diese Option ist nur wirksam, wenn die gerenderte Geometrie aus Punkten besteht (im Allgemeinen besteht sie aus Dreiecken, wenn sie aus 3D-DCCs importiert wird). In diesem Fall kann die Größe dieser Punkte geändert werden (siehe unten).

Welt triplanar

Bei Verwendung der dreiflächigen (Triplanar) Zuordnung (siehe unten in den Einstellungen für UV1 und UV2) wird im lokalen Objektraum triplanar berechnet. Mit dieser Option funktioniert Triplanar im Raum.

Feste Größe

Dadurch wird das Objekt unabhängig von der Entfernung mit derselben Größe gerendert. Dies ist vor allem für Anzeigegeräte (kein Tiefentest und hohe Renderpriorität) und einige Arten von Werbetafeln nützlich.

Empfange keine Schatten

Lässt das Objekt keinen Schatten empfangen, der sonst darauf geworfen würde.

Umgebungslicht deaktivieren

Lässt das Objekt keine Umgebungsbeleuchtung erhalten, die es sonst beleuchten würde.

Korrekte Normalen sicherstellen

Gleicht Normals an, wenn eine ungleichmäßige Skalierung verwendet wird.

Vertex-Farbe

Mit dieser Einstellung können Sie auswählen, was standardmäßig für Vertex-Farben verwendet werden soll, die aus Ihrer 3D-Modellierungsanwendung stammen. Standardmäßig werden sie ignoriert.

../../_images/spatial_material4.png

Als Albedo verwenden

Wenn Sie diese Option auswählen, wird die Vertex-Farbe als Albedo-Farbe verwendet.

Ist sRGB

Die meisten 3D-DCCs exportieren Vertex-Farben wahrscheinlich als sRGB. Wenn Sie diese Option aktivieren, sehen sie korrekt aus.

Parameter

SpatialMaterial verfügt auch über mehrere konfigurierbare Parameter, um viele Aspekte des Renderns zu optimieren:

../../_images/spatial_material5.png

Diffusmodus

Specifies the algorithm used by diffuse scattering of light when hitting the object. The default is Burley. Other modes are also available:

  • Burley: Standardmodus, der ursprüngliche diffuse Algorithmus von Disney Principled PBS.

  • Lambert: Wird nicht von Rauheit beeinflusst.

  • Lambert-Wrap: Erweitert Lambert, um mehr als 90 Grad abzudecken, wenn die Rauheit zunimmt. Eignet sich hervorragend für Haare und die Simulation billiger unterirdischer Streuung. Diese Implementierung ist energiesparend.

  • Oren Nayar: This implementation aims to take microsurfacing into account (via roughness). Works well for clay-like materials and some types of cloth.

  • Toon: Provides a hard cut for lighting, with smoothing affected by roughness. It is recommended you disable sky contribution from your environment's ambient light settings or disable ambient light in the spatial material to achieve a better effect.

../../_images/spatial_material6.png

Spiegelndmodus

Specifies how the specular blob will be rendered. The specular blob represents the shape of a light source reflected in the object.

  • ShlickGGGX: Der heutzutage von PBR-3D-Engines am häufigsten verwendete Blob.

  • Blinn: In früheren Engines üblich. Heutzutage nicht mehr sinnvoll, aber aus Kompatibilitätsgründen belassen.

  • Phong: Wie oben.

  • Toon: Erstellt einen Toon-Blob, dessen Größe sich je nach Rauheit ändert.

  • Disabled: Manchmal ist der Blob im Weg. Weg da!

../../_images/spatial_material7.png

Mischmodus

Controls the blend mode for the material. Keep in mind that any mode other than Mix forces the object to go through the transparent pipeline.

  • Mix: Default blend mode, alpha controls how much the object is visible.

  • Hinzufügen: Objekt wird additiv überblendet, schön für Fackeln oder feuerähnliche Effekte.

  • Sub: Objekt wird subtrahiert.

  • Mul: Objekt wird multipliziert.

../../_images/spatial_material8.png

Aushöhlungsmodus

Bestimmt, welche Seite des Objekts nicht gezeichnet wird, wenn Rückseiten gerendert werden:

  • Rückseite: Die Rückseite des Objekts wird ausgesondert, wenn sie nicht sichtbar ist (Standard).

  • Vorderseite: Die Vorderseite des Objekts wird ausgesondert, wenn sie nicht sichtbar ist.

  • Disabled: Used for objects that are double-sided (no culling is performed).

Bemerkung

By default, Blender has backface culling disabled on materials and will export materials to match how they render in Blender. This means that materials in Godot will have their cull mode set to Disabled. This can decrease performance since backfaces will be rendered, even when they are being culled by other faces. To resolve this, enable Backface Culling in Blender's Materials tab, then export the scene to glTF again.

Tiefenzeichenmodus

Gibt an, wann das Tiefenrendern stattfinden muss.

  • Nur undurchsichtig (Standard): Die Tiefe wird nur für undurchsichtige Objekte gezeichnet.

  • Immer: Tiefenzeichnung wird sowohl für undurchsichtige als auch für transparente Objekte verwendet.

  • Never: No depth draw takes place (do not confuse this with the No Depth Test option above).

  • Depth Pre-Pass: For transparent objects, an opaque pass is made first with the opaque parts, then transparency is drawn above. Use this option with transparent grass or tree foliage.

../../_images/material_depth_draw.png

Linienbreite

When drawing lines, specify the width of the lines being drawn. This option is not available on most modern hardware.

Punktgröße

Geben Sie beim Zeichnen von Punkten die Punktgröße in Pixel an.

Plakatwandmodus

Aktiviert den Billboard-Modus für Zeichnungsmaterialien. Damit wird gesteuert, wie das Objekt der Kamera zugewandt ist:

  • Disabled: Der Billboard-Modus ist deaktiviert.

  • Aktiviert: Ist der Billboard-Modus aktiviert, zeigt die -Z-Achse des Objekts immer in Richtung der Kamera.

  • Y-Billboard: Die X-Achse des Objekts wird immer auf die Kamera ausgerichtet.

  • Partikel: Am besten geeignet für Partikelsysteme, da hier Animationsoptionen festgelegt werden können.

../../_images/spatial_material9.png

Die oben genannten Optionen sind nur für Partikel Billboards aktiviert.

Plakatwand Verhältnis beibehalten

Ermöglicht die Skalierung eines Mesh im Billboard-Modus.

Wachstum

Die Objektvertices wachsen in der Richtung, in die ihre Normalen zeigen:

../../_images/spatial_material10.png

This is commonly used to create cheap outlines. Add a second material pass, make it black and unshaded, reverse culling (Cull Front), and add some grow:

../../_images/spatial_material11.png

Alphaschere verwenden

When transparency other than 0 or 1 is not needed, it's possible to set a threshold to prevent the object from rendering semi-transparent pixels.

../../_images/spatial_material12.png

This renders the object via the opaque pipeline, which is faster and allows it to use mid- and post-process effects such as SSAO, SSR, etc.

Materialfarben, Karten und Kanäle

Neben den Parametern definieren die Materialien selbst die Farben, Texturen und Kanäle. Godot unterstützt eine umfangreiche Liste von ihnen. Sie werden nachstehend ausführlich beschrieben:

Albedo

Albedo ist die Grundfarbe für das Material, auf das alle anderen Einstellungen angewendet werden. Bei der Einstellung Unschattiert ist dies die einzige sichtbare Farbe. In früheren Versionen von Godot wurde dieser Kanal Diffuse genannt. Die Namensänderung erfolgte hauptsächlich, weil diese Farbe in PBR (Physically Based Rendering) viel mehr Berechnungen beeinflusst als nur den diffusen Beleuchtungspfad.

Albedofarbe und -textur können zusammen verwendet werden, da sie multipliziert werden.

Alpha-Kanal in Albedofarbe und -textur wird auch für die Objekttransparenz verwendet. Wenn Sie eine Farbe oder Textur mit Alpha-Kanal verwenden, stellen Sie sicher, dass entweder Transparenz oder Alpha-Schere aktiviert ist, damit dies funktioniert.

Metallisch

Godot verwendet aufgrund seiner Einfachheit ein Metallmodell gegenüber Konkurrenzmodellen. Dieser Parameter definiert, wie reflektierend das Material ist. Je reflektierender, desto weniger diffuses/Umgebungslicht beeinflusst das Material und desto mehr Licht wird reflektiert. Dieses Modell wird als "energiesparend" bezeichnet.

Der Parameter Spiegelnd ist ein allgemeiner Wert für das Reflexionsvermögen (im Gegensatz zu Metallisch ist dies nicht energiesparend. Belassen Sie ihn daher bei 0.5 und verändern Sie ihn nur, wenn Sie dies benötigen).

Das minimale interne Reflexionsvermögen beträgt 0.04, daher ist es unmöglich ein Material wie im wirklichen Leben vollkommen ohne Reflexion zu erstellen.

../../_images/spatial_material13.png

Rauheit

Unebenheit beeinflusst die Art und Weise, wie Reflexion stattfindet. Ein Wert von 0 macht es zu einem perfekten Spiegel, während ein Wert von 1 die Reflexion vollständig verwischt (Simulation einer natürlichen Mikrooberfläche). Die meisten gängigen Materialtypen können mit der richtigen Kombination von Metallisch und Unebenheit erzielt werden.

../../_images/spatial_material14.png

Emission

Ausstrahlung gibt an, wie viel Licht vom Material emittiert wird (beachten Sie, dass dies kein Licht um die Geometrie einschließt, es sei denn GIProbe verwenden wird verwendet). Dieser Wert wird zum resultierenden endgültigen Bild hinzugefügt und nicht durch andere Beleuchtung in der Szene beeinflusst.

../../_images/spatial_material15.png

Normale Zuordnung/Abbildung

Mit der normalen Zuordnung können Sie eine Textur festlegen, die feinere Formdetails darstellt. Dadurch wird die Geometrie nicht geändert, sondern nur der Einfallswinkel für Licht. In Godot werden nur die roten und grünen Kanäle normaler Karten verwendet, um eine bessere Komprimierung und eine bessere Kompatibilität zu erzielen.

../../_images/spatial_material16.png

Bemerkung

Godot requires the normal map to use the X+, Y+ and Z+ coordinates, this is known as OpenGL style. If you've imported a material made to be used with another engine it may be DirectX style, in which case the normal map needs to be converted so its Y axis is flipped.

Weitere Informationen über Normal Maps (einschließlich einer Koordinatenordnungstabelle für populäre Engines) finden Sie hier.

Umrandung

Einige Gewebe haben einen sehr feinen Flaum, durch den Licht gestreut wird. Godot emuliert dies mit dem Parameter Rim (Randbereich). Im Gegensatz zu anderen Randbeleuchtungsimplementierungen, die nur den Strahlungskanal verwenden, berücksichtigt diese tatsächlich Licht (kein Licht bedeutet kein Randbereich). Dies macht den Effekt wesentlich glaubwürdiger.

../../_images/spatial_material17.png

Der Außenrandbereich hängt von der Rauheit ab, und es gibt einen speziellen Parameter der angibt, wie er gefärbt werden muss. Wenn Tint 0 ist, wird die Farbe des Lichts für den Rand verwendet. Wenn Tint 1 ist, wird die Albedo des Materials verwendet. Die Verwendung von Zwischenwerten funktioniert im Allgemeinen am besten.

Klarlack

Diese Features ist nur bei Verwendung des GLES3-Backends verfügbar.

Der Parameter Klarlack wird verwendet, um dem Material einen zweiten Durchgang transparenter Beschichtung hinzuzufügen. Dies ist bei Autolacken und Spielzeugen üblich. In der Praxis ist es ein kleinerer Spiegelklecks, der über dem vorhandenen Material hinzugefügt wird.

The effect is extremely subtle in Godot 3 releases, and may require specific lighting or looking at a material a specific way to notice a difference. This can be seen in the image below where clearcoat is turned on in the right.

../../_images/clearcoat_comparison.png

Bemerkung

The effect will be more noticeable in Godot 4.

Anisotropie

Diese Features ist nur bei Verwendung des GLES3-Backends verfügbar.

This changes the shape of the specular blob and aligns it to tangent space. Anisotropy is commonly used with hair, or to make materials such as brushed aluminum more realistic. It works especially well when combined with flowmaps.

../../_images/spatial_material18.png

Umgebungsverdeckung

It is possible to specify a baked ambient occlusion map. This map affects how much ambient light reaches each surface of the object (it does not affect direct light by default). While it is possible to use Screen-Space Ambient Occlusion (SSAO) to generate ambient occlusion, nothing beats the quality of a well-baked AO map. It is recommended to bake ambient occlusion whenever possible.

../../_images/spatial_material19.png

Tiefe

Diese Features ist nur bei Verwendung des GLES3-Backends verfügbar.

Setting a depth map on a material produces a ray-marched search to emulate the proper displacement of cavities along the view direction. This is not real added geometry, but an illusion of depth. It may not work for complex objects, but it produces a realistic depth effect for textures. For best results, Depth should be used together with normal mapping.

../../_images/spatial_material20.png

Subsurface-Streuung

Diese Features ist nur bei Verwendung des GLES3-Backends verfügbar.

Dieser Effekt emuliert Licht das die Oberfläche eines Objekts durchdringt, gestreut wird und dann austritt. Es ist nützlich um realistische Haut, Marmor, farbige Flüssigkeiten usw. zu erstellen.

../../_images/spatial_material21.png

Übertragung

Hiermit wird gesteuert wie viel Licht von der beleuchteten Seite (sichtbar für Licht) auf die dunkle Seite (gegenüber dem Licht) übertragen wird. Dies funktioniert gut für dünne Objekte wie Pflanzenblätter, Gras, menschliche Ohren usw.

../../_images/spatial_material22.png

Brechung

Diese Features ist nur bei Verwendung des GLES3-Backends verfügbar.

Wenn die Brechung aktiviert ist, ersetzt sie die Alpha-Überblendung und Godot versucht stattdessen Informationen hinter dem gerenderten Objekt abzurufen. Dies ermöglicht eine Verzerrung der Transparenz auf ähnliche Weise wie die Brechung im wirklichen Leben.

Remember to use a transparent albedo texture (or reduce the albedo color's alpha channel) to make refraction visible, as refraction relies on transparency to have a visible effect.

A normal map can optionally be specified in the Refraction Texture property to allow distorting the refraction's direction on a per-pixel basis.

../../_images/spatial_material23.png

Bemerkung

Refraction is implemented as a screen-space effect and forces the material to be transparent. This makes the effect relatively fast, but this results in some limitations:

  • Transparency sorting issues may occur.

  • The refractive material cannot refract onto itself, or onto other transparent materials. A refractive material behind another transparent material will be invisible.

  • Off-screen objects cannot appear in the refraction. This is most noticeable with high refraction strength values.

  • Opaque materials in front of the refractive material will appear to have "refracted" edges, even though they shouldn't.

Details

Godot ermöglicht die Verwendung von sekundärer Albedo und normalen Karten, um eine Detailtextur zu erzeugen, die auf viele Arten gemischt werden kann. Durch die Kombination mit sekundären UV- oder triplanaren Modi können viele interessante Texturen erzielt werden.

../../_images/spatial_material24.png

Es gibt verschiedene Einstellungen die steuern, wie Details verwendet werden.

Maske: Die Detailmaske ist ein Schwarzweißbild mit dem gesteuert wird, wo das Mischen auf einer Textur stattfindet. Weiß steht für die Detailtexturen, Schwarz für die normalen Materialtexturen, verschiedene Graustufen für die teilweise Überblendung der Materialtexturen und Detailtexturen.

Übergangsmodus: Diese vier Modi steuern, wie die Texturen ineinander überblenden..

  • Mix: Combines pixel values of both textures. At black, only show the material texture, at white, only show the detail texture. Values of gray create a smooth blend between the two.

  • Add: Adds pixel values of one Texture with the other. Unlike mix mode both textures are completely mixed at white parts of a mask and not at gray parts. The original texture is mostly unchanged at black

  • Sub: Subtracts pixel values of one texture with the other. The second texture is completely subtracted at white parts of a mask with only a little subtraction in black parts, gray parts being different levels of subtraction based on the exact texture.

  • Mul: Multiplies the RGB channel numbers for each pixel from the top texture with the values for the corresponding pixel from the bottom texture.

Albedo: This is where you put an albedo texture you want to blend. If nothing is in this slot it will be interpreted as white by default.

Normal: This is where you put a normal texture you want to blend. If nothing is in this slot it will be interpreted as a flat normal map. This can still be used even if the material does not have normal map enabled.

UV1 und UV2

Godot supports two UV channels per material. Secondary UV is often useful for ambient occlusion or emission (baked light). UVs can be scaled and offset, which is useful when using repeating textures.

Triplanare Mapping

Triplanar mapping is supported for both UV1 and UV2. This is an alternative way to obtain texture coordinates, sometimes called "Autotexture". Textures are sampled in X, Y and Z and blended by the normal. Triplanar mapping can be performed in either world space or object space.

In the image below, you can see how all primitives share the same material with world triplanar, so the brick texture continues smoothly between them.

../../_images/spatial_material25.png

Nähe und Entfernung verblassen

Godot allows materials to fade by proximity to each other as well as depending on the distance from the viewer. Proximity fade is useful for effects such as soft particles or a mass of water with a smooth blending to the shores. Distance fade is useful for light shafts or indicators that are only present after a given distance.

Keep in mind enabling these enables alpha blending, so abusing them for an entire scene is usually not a good idea.

../../_images/spatial_material_proxfade.gif

Render Reihenfolge

The rendering order of objects can be changed, although this is mostly useful for transparent objects (or opaque objects that perform depth draw but no color draw, such as cracks on the floor).