Up to date

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

3D-Antialiasing

Siehe auch

Godot unterstützt auch Antialiasing beim 2D-Rendering. Dies wird auf der Seite 2D-Antialiasing behandelt.

Einführung

Aufgrund ihrer begrenzten Auflösung können in 3D gerenderte Szenen Aliasing-Artefakte aufweisen. Diese Artefakte äußern sich in der Regel als "Treppeneffekt" an Oberflächenkanten (Kanten-Aliasing) und als Flimmern und/oder Glitzern auf reflektierenden Oberflächen (Spiegel-Aliasing).

Im folgenden Beispiel können Sie sehen, wie die Kanten blockartig aussehen. Auch die Vegetation flackert auf und ab, und die dünnen Linien oben auf der Box sind fast verschwunden:

Das Bild wurde um das zweifache skaliert und mit einem Nearest-Neighbor-Filter versehen, um Aliasing deutlicher zu machen.

Das Bild wurde um das zweifache skaliert und mit einem Nearest-Neighbor-Filter versehen, um Aliasing deutlicher zu machen.

Um dem entgegenzuwirken, können in Godot verschiedene Antialiasing-Techniken eingesetzt werden. Diese werden im Folgenden beschrieben.

Siehe auch

Sie können Antialiasing-Algorithmen in Aktion vergleichen, indem Sie das 3D Antialiasing-Demoprojekt verwenden.

Multi-Sample Antialiasing (MSAA)

Diese Methode ist die "historische" Art, mit Aliasing umzugehen. MSAA ist sehr effektiv bei Geometriekanten (insbesondere bei höheren Stufen). MSAA führt zu keinerlei Unschärfe.

MSAA ist in 3 Stufen verfügbar: 2×, 4×, 8×. Höhere Stufen sind effektiver bei der Kantenglättung, sind aber auch deutlich anspruchsvoller. Bei Spielen mit moderner Grafik ist es sehr empfehlenswert, bei 2× oder 4× MSAA zu bleiben, da 8× MSAA in der Regel zu anspruchsvoll ist.

Der Nachteil von MSAA ist, dass es nur auf Kanten wirkt. Das liegt daran, dass MSAA die Anzahl der Deckungs-Samples erhöht, aber nicht die Anzahl der Farb-Samples. Da sich jedoch die Anzahl der Farb-Samples nicht erhöht hat, werden Fragment-Shader weiterhin für jedes Pixel nur einmal ausgeführt. Daher reduziert MSAA das Transparenz-Aliasing bei Materialien, die den Transparenzmodus Alpha-Schere (1-Bit-Transparenz) verwenden, nicht. MSAA ist auch unwirksam bei spiegelndem Aliasing.

Um Aliasing bei Alpha-Schere-Materialien abzuschwächen, kann alpha antialiasing (auch Alpha-to-Coverage genannt) für bestimmte Materialien in den StandardMaterial3D- oder ORMMaterial3D-Propertys aktiviert werden. Alpha-to-Coverage hat einen moderaten Performance-Aufwand, aber es ist effektiv bei der Reduzierung von Aliasing auf transparenten Materialien, ohne Unschärfe einzuführen.

MSAA kann in den Projekteinstellungen aktiviert werden, indem der Wert der Einstellung Rendern > Antialiasing > Qualität > MSAA 3D geändert wird. Es ist wichtig, den Wert der Einstellung MSAA 3D und nicht MSAA 2D zu ändern, da es sich um völlig separate Einstellungen handelt.

Vergleich zwischen keinem Antialiasing (links) und verschiedenen MSAA-Stufen (rechts). Beachten Sie, dass Alpha-Antialiasing hier nicht verwendet wird:

../../_images/antialiasing_msaa_2x1.webp ../../_images/antialiasing_msaa_4x1.webp ../../_images/antialiasing_msaa_8x1.webp

Temporales Antialiasing (TAA)

Dies ist nur im Clustered Forward Backend verfügbar, nicht im Forward Mobile oder Kompatibilität-Backend.

Temporales Antialiasing funktioniert durch Konvertierung des Ergebnisses zuvor gerenderter Frames zu einem einzigen, hochwertigen Frame. Dabei handelt es sich um einen kontinuierlichen Prozess, bei dem die Position aller Eckpunkte in der Szene in jedem Frame gejittert wird. Dieses Jittering wird durchgeführt, um Subpixel-Details zu erfassen, und sollte außer in extremen Situationen nicht zu bemerken sein.

Diese Methode wird häufig in modernen Spielen verwendet, da sie die effektivste Form des Antialiasing gegen Specular Aliasing und andere Shader-induzierte Artefakte bietet. TAA bietet auch volle Unterstützung für Transparenz-Antialiasing.

TAA führt zu einer leichten Unschärfe, wenn es in unbewegten Szenen aktiviert ist, aber dieser Unschärfeeffekt wird deutlicher, wenn sich die Kamera bewegt. Ein weiterer Nachteil von TAA ist, dass es zu Ghosting-Artefakten hinter sich bewegenden Objekten kommen kann. Wenn Sie mit einer höheren Framerate rendern, kann TAA schneller konvergieren, so dass diese Ghosting-Artefakte weniger sichtbar sind.

Temporales Antialiasing kann in den Projekteinstellungen aktiviert werden, indem der Wert der Einstellung Rendern > Antialiasing > Qualität > TAA verwenden geändert wird.

Vergleich zwischen keinem Antialiasing (links) und TAA (rechts):

../../_images/antialiasing_taa.webp

AMD FidelityFX Super Resolution 2.2 (FSR2)

Seit Godot 4.2 gibt es Built-in-Unterstützung für AMD FidelityFX Super Resolution 2.2. Dabei handelt es sich um eine Upscaling-Methode, die mit allen aktuellen GPUs aller Hersteller kompatibel ist. FSR2 ist normalerweise darauf ausgelegt, die Performance zu verbessern, indem die interne 3D-Rendering-Auflösung herabgesetzt und dann auf die Ausgabeauflösung hochskaliert wird.

Im Gegensatz zu FSR1 bietet FSR2 jedoch auch temporales Antialiasing. Das bedeutet, dass FSR2 bei nativer Auflösung für hochwertiges Antialiasing verwendet werden kann, wobei die Eingabeauflösung gleich der Ausgabeauflösung ist. In diesem Fall führt die Aktivierung von FSR2 zwar zu einer verringerten Performance, aber zu einer deutlichen Verbesserung der Rendering-Qualität.

Die Verwendung von FSR2 bei nativer Auflösung ist anspruchsvoller als die Verwendung von TAA bei nativer Auflösung, so dass seine Verwendung nur dann empfohlen wird, wenn Sie über erheblichen Spielraum bei der GPU verfügen. Positiv zu vermerken ist, dass FSR2 im Vergleich zu TAA eine bessere Antialiasing-Abdeckung mit weniger Unschärfe bietet, insbesondere bei Bewegungen.

Vergleich zwischen keinem Antialiasing (links) und FSR2 bei nativer Auflösung (rechts):

../../_images/antialiasing_fsr2_native.webp

Bemerkung

Standardmäßig ist die FSR-Schärfe des Projekts auf 0,2 eingestellt (höhere Werte bewirken eine geringere Schärfung). Zu Vergleichszwecken wurde die FSR-Schärfe auf dem obigen Screenshot auf 2.0 gesetzt und damit deaktiviert.

Fast Approximate Antialiasing (FXAA)

Dies ist nur in den Backends Clustered Forward und Forward Mobile verfügbar, nicht im Kompatibilität-Backend.

Fast Approximate Antialiasing (Schnelles Angenährtes Antialiasing) ist eine Post-Processing-Antialiasing-Lösung. Sie ist schneller als jede andere Antialiasing-Technik und unterstützt auch Antialiasing-Transparenz. Da es jedoch keine zeitlichen Informationen enthält, kann es nicht viel gegen spiegelndes Aliasing ausrichten.

Diese Methode wird manchmal noch in mobilen Spielen verwendet. Auf Desktop-Plattformen ist FXAA jedoch im Allgemeinen zugunsten von temporalem Antialiasing aus der Mode gekommen, das viel effektiver gegen spiegelndes Aliasing ist. Nichtsdestotrotz kann es sich für Spieler mit leistungsschwachen GPUs lohnen, FXAA als Option im Spiel zu nutzen.

FXAA führt zu einer moderaten Unschärfe, wenn es aktiviert ist (mehr als TAA, wenn die Kamera still steht, aber weniger als TAA, wenn die Kamera sich bewegt).

FXAA kann in den Projekteinstellungen aktiviert werden, indem der Wert der Einstellung Rendern > Antialiasing > Qualität > Screen-Space AA auf FXAA geändert wird.

Vergleich zwischen keinem Antialiasing (links) und FXAA (rechts):

../../_images/antialiasing_fxaa.webp

Supersample-Antialiasing (SSAA)

Dies ist nur in den Backends Clustered Forward und Forward Mobile verfügbar, nicht im Kompatibilität-Backend.

Supersampling bietet die höchstmögliche Qualität des Antialiasing, ist aber auch die teuerste. Es funktioniert, indem jedes Pixel in der Szene mehrfach ein Shading erhält. Dadurch kann SSAA Kanten, Transparenz und spiegelndes Aliasing gleichzeitig glätten, ohne potenzielle Ghosting-Artefakte einzuführen.

Der Nachteil von SSAA sind seine extrem hohen Kosten. Diese Kosten machen es im Allgemeinen schwierig, SSAA für Spiele zu verwenden, aber Sie können Supersampling immer noch nützlich finden für Offline-Rendering.

Supersample-Antialiasing wird durchgeführt, indem die erweiterte Projekteinstellung Rendern > Skalierung 3D > Skalierung über 1.0 erhöht wird, während sichergestellt wird, dass Rendern > Skalierung 3D > Modus auf Bilinear (der Default) gesetzt ist. Da der Skalierungsfaktor pro Achse definiert ist, wird ein Skalierungsfaktor von 1.5 zu 2.25× SSAA führen, während ein Skalierungsfaktor von 2.0 zu 4× SSAA führen wird. Da Godot die hardwareeigene bilineare Filterung verwendet, um das Downsampling durchzuführen, sieht das Ergebnis bei ganzzahligen Skalierungsfaktoren (nämlich 2,0) schärfer aus.

Vergleich zwischen keinem Antialiasing (links) und verschiedenen SSAA-Stufen (rechts):

../../_images/antialiasing_ssaa_2.25x.webp ../../_images/antialiasing_ssaa_4x.webp

Warnung

Supersampling hat auch hohe Video-RAM-Anforderungen, da es in der Zielauflösung gerendert und dann auf die Fenstergröße herunterskaliert werden muss. Wenn beispielsweise ein Projekt in 3840×2160 (4K-Auflösung) mit 4× SSAA angezeigt wird, muss die Szene in 7680×4320 (8K-Auflösung) gerendert werden, also mit viermal mehr Pixeln.

Wenn Sie eine hohe Fenstergröße wie etwa 4K verwenden, werden Sie feststellen, dass die Erhöhung der Auflösungsskala über einen bestimmten Wert hinaus zu einer starken Verlangsamung (oder sogar zu einem Absturz) führt, weil der VRAM nicht mehr ausreicht.

Screen-Space-Rauheitsbegrenzer

Dies ist nur in den Backends Clustered Forward und Forward Mobile verfügbar, nicht im Kompatibilität-Backend.

Dabei handelt es sich nicht um eine Kanten-Antialiasing-Methode, sondern um eine Methode zur Verringerung von spiegelnden Aliasing-Effekten in 3D.

Der Screen-Space-Rauheitsbegrenzer funktioniert am besten bei detaillierter Geometrie. Er wirkt sich zwar auf das Rendering der Rauheitskarte selbst aus, ist dort aber nur begrenzt wirksam.

Der Screen-Space-Rauheitsbegrenzer für den ist standardmäßig aktiviert; er erfordert keine manuelle Einstellung. Er hat eine geringe Auswirkung auf die Performance, daher sollten Sie ihn deaktivieren, wenn Ihr Projekt nicht stark von spiegelnden Aliasing betroffen ist.

Texturrauheitsbegrenzer beim Import

Wie der Screen-Space-Rauheitsbegrenzer für den ist dies keine Kanten-Antialiasing-Methode, aber es ist eine Möglichkeit, spiegelnde Aliasing-Effekte in 3D zu reduzieren.

Die Rauheitsbegrenzung beim Import funktioniert durch die Angabe einer Normalen-Karte, die als Richtlinie für die Rauheitsbegrenzung verwendet wird. Dazu wählen Sie die Rauheitskarte im Dateisystem-Dock aus, gehen dann zum Import-Dock und stellen Rauheit > Modus auf den Farbkanal ein, in dem die Rauheitskarte gespeichert ist (in der Regel Grün), und legen dann den Pfad zur Normal Map des Materials fest. Vergessen Sie nicht, auf Neuimport am unteren Ende des Import-Docks zu klicken, nachdem Sie den Pfad auf die Normal Map gesetzt haben.

Da diese Verarbeitung ausschließlich beim Import erfolgt, hat sie keinerlei Performance-Kosten. Die visuellen Auswirkungen sind jedoch begrenzt. Die Begrenzung der Rauheit beim Import hilft nur bei der Reduzierung von spiegelndem Aliasing innerhalb von Texturen, nicht aber bei Aliasing, das an Geometriekanten auf detaillierten Meshes auftritt.

Welche Antialiasing-Methode sollte ich verwenden?

Es gibt keine Standard-Methode für das Antialiasing Da Antialiasing die GPU oft stark beansprucht oder zu unerwünschten Unschärfen führen kann, sollten Sie eine Einstellung hinzufügen, mit der die Spieler das Antialiasing deaktivieren können.

Für Projekte mit fotorealistischer Ausrichtung ist TAA in der Regel die am besten geeignete Option. Während TAA Ghosting-Artefakte erzeugen kann, gibt es keine andere Methode, die spiegelndes Aliasing so gut bekämpft wie TAA. Der Screen-Space-Rauheitsbegrenzer hilft ein wenig, ist aber insgesamt weit weniger wirksam gegen spiegelnde Aliasing-Effekte. Wenn Sie über zusätzliche GPU-Leistung verfügen, können Sie FSR2 bei nativer Auflösung verwenden, um eine besser aussehende Form von temporalem Antialiasing im Vergleich zu Standard-TAA zu erzielen.

Bei Projekten mit wenig reflektierenden Oberflächen (z. B. bei einem Cartoon-Stil) kann MSAA gut funktionieren. MSAA ist auch eine gute Option, wenn es wichtig ist, Unschärfe und zeitliche Artefakte zu vermeiden, wie z. B. bei kompetitiven Spielen.

Wenn es um Low-End-Plattformen wie mobile oder integrierte Grafikchips geht, ist FXAA in der Regel die einzige brauchbare Option. 2× MSAA kann unter Umständen brauchbar sein, aber es ist unwahrscheinlich, dass höhere MSAA-Stufen auf mobilen GPUs reibungslos funktionieren.

Godot erlaubt die gleichzeitige Verwendung mehrerer Antialiasing-Methoden. Dies ist in der Regel nicht notwendig, kann aber auf High-End-GPUs oder beim Nicht-Echtzeit-Rendering für eine bessere Darstellung sorgen. Um zum Beispiel bewegte Kanten besser aussehen zu lassen, wenn TAA aktiviert ist, können Sie gleichzeitig MSAA aktivieren.