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...
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.
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)
This is available in all renderers.
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.
To make specular aliasing less noticeable, use the Screen-space roughness limiter, which is enabled by default.
MSAA can be enabled in the Project Settings by changing the value of the Rendering > Anti Aliasing > Quality > MSAA 3D setting. It's important to change the value of the MSAA 3D setting and not MSAA 2D, as these are entirely separate settings.
Vergleich zwischen keinem Antialiasing (links) und verschiedenen MSAA-Stufen (rechts). Beachten Sie, dass Alpha-Antialiasing hier nicht verwendet wird:
Temporales Antialiasing (TAA)
This is only available in the Forward+ renderer, not the Mobile or Compatibility renderers.
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.
Temporal antialiasing can be enabled in the Project Settings by changing the value of the Rendering > Anti Aliasing > Quality > TAA setting.
Vergleich zwischen keinem Antialiasing (links) und TAA (rechts):
AMD FidelityFX Super Resolution 2.2 (FSR2)
This is only available in the Forward+ renderer, not the Mobile or Compatibility renderers.
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):
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)
This is only available in the Forward+ and Mobile renderers, not the Compatibility renderer.
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 can be enabled in the Project Settings by changing the value of the
Rendering > Anti Aliasing > Quality > Screen Space AA
setting to FXAA.
Vergleich zwischen keinem Antialiasing (links) und FXAA (rechts):
Sub-pixel Morphological Antialiasing (SMAA 1x)
This is only available in the Forward+ and Mobile renderers, not the Compatibility renderer.
Sub-pixel Morphological Antialiasing is a post-processing antialiasing solution. It runs slightly slower than FXAA, but produces less blurriness. This is very helpful when the screen resolution is 1080p or below. Just like FXAA, SMAA 1x lacks temporal information and will therefore not do much against specular aliasing.
Use SMAA 1x if you can't afford MSAA, but find FXAA too blurry.
Combine it with TAA, or even FSR2, to maximize antialiasing at a higher GPU cost and some added blurriness. This is most beneficial in fast-moving scenes or just after a camera cut, especially at lower FPS.
SMAA 1x can be enabled in the Project Settings by changing the value of the
Rendering > Anti Aliasing > Quality > Screen Space AA
setting to SMAA.
Comparison between no antialiasing (left) and SMAA 1x (right):
Supersample-Antialiasing (SSAA)
This is available in all renderers.
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 is performed by increasing the
Rendering > Scaling 3D > Scale
advanced project setting above 1.0 while ensuring
Rendering > Scaling 3D > Mode
is set to Bilinear (the default).
Since the scale factor is defined per-axis, a scale factor of 1.5 will result
in 2.25× SSAA while a scale factor of 2.0 will result in 4× SSAA. Since Godot
uses the hardware's own bilinear filtering to perform the downsampling, the result
will look crisper at integer scale factors (namely, 2.0).
Vergleich zwischen keinem Antialiasing (links) und verschiedenen SSAA-Stufen (rechts):
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
This is only available in the Forward+ and Mobile renderers, not the Compatibility renderer.
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.
The screen-space roughness limiter is enabled by default; it doesn't require any manual setup. It has a small performance impact, so consider disabling it if your project isn't affected by specular aliasing much. You can disable it with the Rendering > Quality > Screen Space Filters > Screen Space Roughness Limiter project setting.
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-Performance 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.
Antialiasing comparison
Feature |
MSAA |
TAA |
FSR2 |
FXAA |
SMAA 1x |
SSAA |
SSRL |
|---|---|---|---|---|---|---|---|
Edge antialiasing |
🟢 Yes |
🟢 Yes |
🟢 Yes |
🟢 Yes |
🟢 Yes |
🟢 Yes |
🔴 No |
Specular antialiasing |
🟡 Some |
🟢 Yes |
🟢 Yes |
🟡 Some |
🟡 Some |
🟢 Yes |
🟢 Yes |
Transparency antialiasing |
🟡 Some [1] |
🟢 Yes [2] |
🟢 Yes [2] |
🟢 Yes |
🟢 Yes |
🟢 Yes |
🔴 No |
Added blur |
🟢 None |
🟡 Some |
🟡 Some |
🟡 Some |
🟢 Low |
🟡 Some [3] |
🟢 None |
Ghosting artifacts |
🟢 None |
🔴 Yes |
🔴 Yes |
🟢 None |
🟢 None |
🟢 None |
🟢 None |
Performance cost |
🟡 Medium |
🟡 Medium |
🔴 High |
🟢 Very Low |
🟢 Low |
🔴 Very High |
🟢 Low |
Forward+ |
✔️ Yes |
✔️ Yes |
✔️ Yes |
✔️ Yes |
✔️ Yes |
✔️ Yes |
✔️ Yes |
Mobile |
✔️ Yes |
❌ No |
❌ No |
✔️ Yes |
✔️ Yes |
✔️ Yes |
✔️ Yes |
Kompatibilität |
✔️ Yes |
❌ No |
❌ No |
❌ No |
❌ No |
✔️ Yes |
❌ No |