Up to date

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

Reichweitenbasierte Sichtbarkeit (HLOD)

Zusammen mit Mesh-Level of Detail (LOD) und Occlusion Culling ist reichweitenbasierte Sichtbarkeit ein weiteres Tool zur Verbesserung der Performance in großen, komplexen 3D-Szenen.

Auf dieser Seite erfahren Sie:

  • Was reichweitenbasierte Sichtbarkeit leisten kann und in welchen Szenarien sie nützlich ist.

  • Einrichten von reichweitenbasierter Sichtbarkeit (manuelles LOD) in Godot.

  • Wie man die reichweitenbasierter Sichtbarkeit für beste Performance und Qualität einstellt.

Siehe auch

Wenn Sie nur Meshes benötigen, die mit zunehmender Entfernung weniger detailliert werden, aber keine manuell erstellten LOD-Meshes haben, sollten Sie sich stattdessen auf das automatische Mesh-Level of Detail (LOD) verlassen.

Beachten Sie, dass automatische Mesh-LOD- und reichweitenbasierte Sichtbarkeits gleichzeitig verwendet werden können, sogar für dasselbe Mesh.

Wie es funktioniert

Reichweitenbasierte Sichtbarkeit kann mit jedem Node verwendet werden, der von GeometryInstance3D erbt. Das bedeutet, dass sie nicht nur mit MeshInstance3D und MultiMeshInstance3D für von Künstlern gesteuertes HLOD verwendet werden können, sondern auch mit GPUParticles3D, CPUParticles3D, Label3D, Sprite3D, AnimatedSprite3D und CSGShape3D.

Da reichweitenbasierte Sichtbarkeit pro Node konfiguriert wird, ist es möglich, verschiedene Node-Typen als Teil eines LOD-Systems zu verwenden. Zum Beispiel könnte man ein MeshInstance3D, das einen Baum darstellt, aus der Nähe anzeigen und es in der Ferne durch einen Sprite3D-Imitator ersetzen, um die Performance zu verbessern.

Der Vorteil von HLOD gegenüber einem traditionellen LOD-System ist sein hierarchischer Charakter. Ein einziges größeres Mesh kann mehrere kleinere Meshes ersetzen, so dass die Anzahl der Zeichenaufrufe in der Ferne reduziert werden kann, während in der Nähe die Möglichkeit des Culling erhalten bleibt. Beispielsweise kann eine Häusergruppe, die aus der Nähe betrachtet einzelne MeshInstance3D-Nodes (einen für jedes Haus) verwendet, in ein einziges MeshInstance3D umgewandelt werden, das eine weniger detaillierte Häusergruppe darstellt (oder ein MultiMeshInstance3D verwenden).

Schließlich kann die reichweitenbasierte Sichtbarkeit auch dazu verwendet werden, bestimmte Objekte ganz auszublenden, wenn die Kamera zu nah oder zu weit weg ist. Dies kann für Gameplay-Zwecke verwendet werden, aber auch, um visuelle Vermüllung zu reduzieren. Zum Beispiel können Label3D-Nodes mit Hilfe reichweitenbasierter Sichtbarkeit ausgeblendet werden, wenn sie zu weit entfernt sind, um für den Spieler lesbar oder relevant zu sein.

Einrichten des Sichtbarkeitsbereichs

Dies ist eine Schnellstart-Anleitung für die Konfiguration eines einfachen LOD-Systems. Wenn Sie dieser Anleitung folgen, wird dieses LOD-System ein SphereMesh anzeigen, wenn Sie nah dran sind, und ein BoxMesh, wenn die Kamera weit genug entfernt ist. Über die Propertys Abstand Beginn und Abstand Ende wird außerdem eine kleiner Hysterese-Abstand konfiguriert. Dadurch wird verhindert, dass die LODs zu schnell hin und her springen, wenn sich die Kamera an der "Kante" des LOD-Übergangs bewegt.

Die Propertys des Sichtbarkeitsbereichs sind im Abschnitt Sichtbarkeitsbereich des GeometryInstance3D-Inspektors nach Auswahl des MeshInstance3D-Node zu finden.

  • Fügen Sie einen Node3D-Node hinzu, der zur Gruppierung der beiden MeshInstance3D-Nodes verwendet wird.

  • Fügen Sie einen ersten MeshInstance3D-Node als untergeordnetes Element des Node3D hinzu. Weisen Sie seiner Mesh-Property ein neues SphereMesh zu.

  • Setzen Sie den Sichtbarkeitsbereich Ende der ersten MeshInstance3D auf 10.0 und Abstand Ende auf 1.0.

  • Fügen Sie einen zweiten MeshInstance3D-Node als untergeordnetes Element von Node3D hinzu. Weisen Sie der Mesh-Property ein neues BoxMesh zu.

  • Setzen Sie den Sichtbarkeitsbereich Beginn der zweiten MeshInstance3D auf 10.0 und Abstand Beginn auf 1.0.

  • Bewegen Sie die Kamera von dem Objekt weg und wieder zu ihm hin. Beachten Sie, wie das Objekt von einer Kugel zu einem Kasten wird, wenn sich die Kamera entfernt.

Propertys des Sichtbarkeitsbereichs

Im Inspektor eines jeden Nodes, der von GeometryInstance3D erbt, können Sie die folgenden Propertys im Abschnitt Sichtbarkeitsbereich von GeometryInstance3D anpassen:

  • Beginn: Die Instanz wird ausgeblendet, wenn die Kamera näher am Ursprung der Instanz ist als dieser Wert (in 3D-Einheiten).

  • Abstand Beginn: Die Hysterese- oder Alpha-Fade-Übergangsdistanz, die für den Close-up-Übergang verwendet werden soll (in 3D-Einheiten). Das Verhalten dieser Property hängt vom Fading-Modus ab.

  • Ende: Die Instanz wird ausgeblendet, wenn die Kamera weiter vom Ursprung der Instanz entfernt ist als dieser Wert (in 3D-Einheiten).

  • Abstand Ende: Der Hysterese- oder Alpha-Fade-Übergangsabstand, der für den Übergang in die Ferne verwendet werden soll (in 3D-Einheiten). Das Verhalten dieser Property hängt vom Fading-Modus ab.

  • Fading-Modus: Legt fest, wie der Übergang zwischen den LOD-Stufen erfolgen soll. Siehe unten für Details.

Fading-Modus

Bemerkung

Der gewählte Fading-Modus hat nur dann eine sichtbare Auswirkung, wenn entweder Sichtbarkeitsbereich > Abstand Beginn oder Sichtbarkeitsbereich > Abstand Ende größer als 0,0 ist.

Im Abschnitt Sichtbarkeitsbereich des Inspektors können Sie zwischen 3 Fading-Modi wählen:

  • Deaktiviert: Verwendet die Hysterese, um sofort zwischen den LOD-Ebenen zu wechseln. Dies verhindert Situationen, in denen die LOD-Ebenen schnell hin- und hergeschaltet werden, wenn sich der Spieler am LOD-Übergangspunkt vorwärts und dann rückwärts bewegt. Der Hystereseabstand wird durch Sichtbarkeitsbereich > Abstand Anfang und Sichtbarkeitsbereich > Abstand Ende bestimmt. Dieser Modus bietet die beste Performance, da er das Rendering nicht dazu zwingt, während des Fading-Übergangs transparent zu werden.

  • Selbst: Verwendet Alpha-Blending, um sanft zwischen LOD-Ebenen zu überblenden. Der Node blendet sich selbst aus, wenn er die Grenzen seines eigenen Sichtbarkeitsbereichs erreicht. Die Fading-Übergangsdistanz wird durch Sichtbarkeitsbereich > Abstand Beginn und Sichtbarkeitsbereich > Abstand Ende bestimmt. Dieser Modus erzwingt ein transparentes Rendering des Objekts während des Fading-Übergangs und hat daher Auswirkungen auf die Performance.

  • Abhängigkeiten: Verwendet Alpha-Blending, um sanft zwischen LOD-Ebenen zu überblenden. Der Node blendet seine Abhängigkeiten ein, wenn er die Grenzen seines eigenen Sichtbarkeitsbereichs erreicht. Der Abstand des Fading-Übergangs wird durch Sichtbarkeitsbereich > Abstand Beginn und Sichtbarkeitsbereich > Abstand Ende bestimmt. Dieser Modus erzwingt ein transparentes Rendering des Objekts während des Fading-Übergangs und hat daher Auswirkungen auf die Performance. Dieser Modus ist für hierarchische LOD-Systeme gedacht, die Sichtbarkeit Parent verwenden. Er verhält sich genauso wie Sebst, wenn reichweitenbasierte Sichtbarkeit verwendet wird, um nicht-hierarchische LOD durchzuführen.

Sichtbarkeit Parent

Die Sichtbarkeit Parent-Property erleichtert die Einrichtung von HLOD. Sie ermöglicht es, untergeordnete Nodes automatisch auszublenden, wenn ihre übergeordneten Nodes aufgrund ihrer aktuellen Sichtbarkeitsbereichs-Propertys sichtbar sind.

Bemerkung

Das Ziel von Sichtbarkeit Parent muss von GeometryInstance3D erben.

Trotz ihres Namens kann die Property Sichtbarkeit Parent auf einen Node verweisen, der kein Parent des Nodes im Szenenbaum ist. Es ist jedoch unmöglich, Sichtbarkeit Parent auf einen untergeordneten Node zu zeigen zu lassen, da dies einen Abhängigkeitszyklus erzeugt, der nicht unterstützt wird. Sie erhalten eine Fehlermeldung im Ausgabefenster, wenn ein Abhängigkeitszyklus auftritt.

Gegeben sei der folgende Szenenbaum (bei dem alle Nodes von GeometryInstance3D erben):

┖╴BatchOfHouses
    ┠╴House1
    ┠╴House2
    ┠╴House3
    ┖╴House4

In diesem Beispiel ist BatchOfHouses ein großes Mesh, das alle untergeordneten Nodes darstellen soll, wenn sie aus der Ferne betrachtet werden. House1 bis House4 sind kleinere MeshInstance3Ds, die einzelne Häuser darstellen. Um HLOD in diesem Beispiel zu konfigurieren, müssen wir nur zwei Dinge konfigurieren:

  • Setzen Sie Beginn Sichtbarkeitsbereich auf eine Zahl größer als 0.0, damit BatchOfHouses nur angezeigt wird, wenn es weit genug von der Kamera entfernt ist. Unterhalb dieser Entfernung sollen stattdessen House1 bis House4 angezeigt werden.

  • Weisen Sie bei House1 bis House4 die Property Sichtbarkeit Parent der Property BatchOfHouses zu.

Dies erleichtert die Durchführung weiterer Anpassungen, da Sie Beginn Sichtbarkeitsbereich von BatchOfHouses und den Ende Sichtbarkeitsbereich von House1 bis House4 nicht anpassen müssen.

Der Fading-Modus wird automatisch über die Property Sichtbarkeit Parent gesteuert, so dass die Child-Nodes erst ausgeblendet werden, wenn der Parent-Node vollständig ausgeblendet ist. Dies geschieht, um sichtbares Pop-In zu minimieren. Je nach HLOD können Sie sowohl die Self als auch die Dependencies Fading-Modi ausprobieren.

Bemerkung

Nodes, die über die Sichtbar-Property ausgeblendet werden, werden im Wesentlichen aus dem Sichtbarkeits-Abhängigkeitsbaum entfernt, so dass abhängige Instanzen den ausgeblendeten Node oder seine übergeordneten Elemente nicht berücksichtigen.

In der Praxis bedeutet dies, dass, wenn das Ziel des Nodes Sichtbarkeit Parent durch Setzen seiner Sichtbar Property auf false ausgeblendet wird, der Node nicht entsprechend dem Beginn Sichtbarkeitsbereich-Wert, der im Sichtbarkeit Parent angegeben ist, ausgeblendet wird.

Tipps zur Konfiguration

Verwenden Sie einfachere Materialien in der Ferne, um die Performance zu verbessern

Eine Möglichkeit, die Performance weiter zu verbessern, besteht darin, einfachere Materialien für entfernte LOD-Meshes zu verwenden. Durch die Verwendung von LOD-Meshes wird zwar die Anzahl der zu rendernden Vertices reduziert, die Pro-Pixel-Shading-Last für Materialien bleibt jedoch identisch. In komplexen 3D-Szenen stellt die Shading-Belastung durch die Schattierung pro Pixel jedoch regelmäßig einen Bottleneck für die GPU dar. Eine Möglichkeit, diese Shading-Belastung auf der GPU zu reduzieren, besteht darin, einfachere Materialien zu verwenden, wenn sie keinen großen visuellen Unterschied machen.

Performancegewinne sollten dabei sorgfältig abgewogen werden, da die Erhöhung der Anzahl eindeutiger Materialien in einer Szene allein schon Performance-Kosten mit sich bringt. Dennoch kann die Verwendung von einfacheren Materialien für Meshes mit geringer LOD zu einem Netto-Performance-Gewinn führen, da weniger Berechnungen pro Pixel erforderlich sind.

Bei den Materialien, die von Meshes mit entferntem LOD verwendet werden, können Sie zum Beispiel teure Materialfunktionen deaktivieren:

  • Normal Map (insbesondere auf mobilen Plattformen)

  • Umrandung

  • Klarlack

  • Anisotropie

  • Höhe

  • Subsurface Scattering

  • Hintergrundbeleuchtung

  • Brechung

  • Nah-Fading

Dithering für LOD-Übergänge verwenden

Godot unterstützt derzeit nur alphabasiertes Fading für reichweitenbasierte Sichtbarkeit. Sie können jedoch stattdessen Dithering verwenden, indem Sie mehrere verschiedene Materialien für verschiedene LOD-Stufen verwenden.

Die Verwendung von Dithering gegenüber Alpha-Blending für LOD-Übergänge hat zwei Vorteile:

  • Höhere Performance, da Dithering-Transparenz im Vergleich zu Alpha-Blending schneller gerendert werden kann.

  • Keine visuellen Störungen aufgrund von Transparenzsortierungsproblemen bei LOD-Übergängen.

Der Nachteil des Dithering ist, dass bei LOD-Fading-Übergängen ein "verrauschtes" Muster sichtbar wird. Dies ist bei höheren Auflösungen des Ansichtsfensters oder bei aktiviertem temporalem Antialiasing möglicherweise nicht so auffällig.

Da das Fern-Fading in BaseMaterial3D nur das Fading in der Nähe oder das Fading in der Ferne unterstützt, wird diese Einstellung am besten mit nur zwei LODs als Teil der Einstellung verwendet.

  • Vergewissern Sie sich, dass Abstand Beginn und Abstand Ende auf beiden MeshInstance3D-Nodes auf 0.0 gesetzt ist, da Hysterese oder Alpha Fade hier nicht erwünscht sind.

  • Verringern Sie auf beiden MeshInstance3D-Nodes Beginn um die gewünschte Distanz des Fading-Übergangs und erhöhen Sie Ende um dieselbe Distanz. Dies ist erforderlich, damit der Dithering-Übergang tatsächlich sichtbar ist.

  • Bearbeiten Sie bei der MeshInstance3D, die aus der Nähe angezeigt wird, das Material im Inspektor. Setzen Sie den Modus Fern-Fading auf Objekt-Dither. Setzen Sie Min Distanz auf denselben Wert wie den Sichtbarkeitsbereich End. Setzen Sie Max Distanz auf denselben Wert minus der Fading-Übergangsdistanz.

  • Bearbeiten Sie das Material der MeshInstance3D, die in der Ferne angezeigt wird, im Inspektor. Setzen Sie seinen Fern-Fading-Modus auf Objekt-Dither. Setzen Sie Min Distanz auf denselben Wert wie den Sichtbarkeitsbereich Beginn. Setzen Sie Max Distanz auf denselben Wert plus die Fading-Übergangsdistanz.