Anti-Aliasing Best Practices

Qt Quick 3D hat mehrere Möglichkeiten, Aliasing (die gezackten Kanten) beim Rendern von 3D-Modellen zu bekämpfen. Jede Technik bietet ihre eigenen Vorteile und Einschränkungen. Mehrere Techniken können kombiniert werden, allerdings mit zusätzlichen Kosten für die Leistung.

Aliasing im Allgemeinen

Aliasing tritt auf, wenn mehr Informationen im Original vorhanden sind, als wir in den Pixeln auf dem Bildschirm darstellen können. Anti-Aliasing-Techniken lassen sich in drei Kategorien einteilen:

  • Techniken, die zusätzliche Informationen für ein einzelnes Pixel finden und sie alle gleichzeitig darstellen.
  • Bildeffekte, die versuchen, schlechte Stellen zu finden und die Probleme unter den Teppich zu kehren.
  • Techniken, die von Künstlern eingesetzt werden, um die Einschränkungen zu umgehen.

Obwohl Anti-Aliasing ein nützliches Werkzeug beim Rendern von Grafiken ist, kann es die Leistung Ihrer Anwendung beeinträchtigen, wenn es nicht vernünftig eingesetzt wird. In den folgenden Abschnitten werden einige verschiedene Anti-Aliasing-Techniken beschrieben, die zur Auswahl stehen. Wenn Sie wissen, welche Technik für Ihre Probleme am besten geeignet ist, können Sie ein Gleichgewicht zwischen visueller Qualität und ausreichender Rendering-Geschwindigkeit herstellen.

Geometrie-Aliasing

Standardmäßig werden alle Geometrien Pixel für Pixel auf dem Bildschirm gerendert. Wie Sie links im Bild unten sehen können, führt dies zu harten Kanten, die in kontrastreichen Fällen leicht zu erkennen sind, vor allem bei Schwarz-Weiß.

Wirksame Techniken zur Reduzierung von Aliasing bei Geometrie

Die korrekteste Lösung für dieses Problem ist die Verwendung von Multisample Anti-Aliasing, da es nur bei Bedarf mehr geometrische Details erfasst. Die Verwendung von Temporal Anti-Aliasing oder Progressive Anti-Aliasing kann das Problem ebenfalls auf korrekte Weise abmildern.

Schließlich können Sie in bestimmten Fällen eine Silhouetten-Deckkraftkarte verwenden, um die Kanten der Geometrie zu glätten.

Textur-Aliasing

Wenn eine Textur unterabgetastet wird, werden weniger Pixel als im Original angezeigt, was zu unerwünschten Artefakten führt, je nachdem, welche Pixel ausgewählt werden. Dieser Effekt wird noch verstärkt, wenn sich das Modell bewegt, da unterschiedliche Pixel zu unterschiedlichen Zeitpunkten ausgewählt werden. Im folgenden Bild sehen Sie, wie die Linie zwischen E3 und F3 fehlt, zwischen G3 und H3 stark vorhanden ist, dann für die nächsten 5 Spalten verschwindet usw.

Wirksame Techniken zur Reduzierung von Aliasing bei Texturen

Die einfachste (und wohl auch beste) Lösung für dieses Problem ist die Verwendung von Mipmapping in der Bildtextur selbst. Alternativ dazu können Sie entweder Temporal AA oder Progressive AA verwenden, um mehr Informationen aus der Textur zu gewinnen.

Die Verwendung von Multisample Anti-Aliasing wird dieses Problem nicht beheben.

Reflexions-Aliasing

Ähnlich wie beim Textur-Aliasing führt ein Material, das die Umgebung reflektiert, zu einem Sub-Sample des Bildes. In einigen Fällen, wie links im Bild unten zu sehen, wird es offensichtlich, wenn feine Details übersprungen werden.

Wirksame Techniken zur Reduzierung von Aliasing bei Reflexionen

Die korrekteste Lösung ist in diesem Fall die Verwendung von Temporal AA oder Progressive AA, um die zusätzlichen Informationen zu finden.

Eine einfache alternative Lösung, die akzeptabel sein kann, besteht darin, das Material weniger glänzend und rauer zu machen. In diesem Fall werden automatisch Mipmaps der Umgebung mit geringerer Auflösung verwendet, die die scharfen Details zusammenmischen.

Anti-Aliasing-Techniken in Qt Quick 3D

Hinweis: Sehen Sie sich das Antialiasing-Beispiel und das Szeneneffekt-Beispiel an, um einige dieser Funktionen live zu testen. Beachten Sie jedoch, dass moderne Fenstersysteme oft so konfiguriert sind, dass sie eine hohe DPI-Skalierung durchführen, wenn ein Bildschirm mit hoher Auflösung angeschlossen ist. Das bedeutet, dass der Inhalt jedes Fensters, das auf dem Bildschirm angezeigt wird, mit einer höheren Auflösung gerendert wird und dann vom Systemcompositor oder einer anderen Komponente der Plattform herunter skaliert wird. Es handelt sich dabei um eine Form von Supersample Anti-Aliasing. Die Aktivierung von Anti-Aliasing-Techniken in Qt Quick 3D kann dann zu kleineren oder manchmal schwer erkennbaren Verbesserungen führen, da Aliasing bereits bis zu einem gewissen Grad durch die automatische Skalierung des Fenstersystems beseitigt wird. Wenn jedoch dieselbe Anwendung auf einem anderen System eingesetzt wird, kann es durchaus sein, dass dieses System eine Plattform oder einen Bildschirm verwendet, auf dem eine solche Skalierung nicht möglich ist, so dass Aliasing und gezackte Ränder von vornherein stärker sichtbar sind. Entwicklern wird empfohlen, das mögliche Vorhandensein oder Fehlen einer hohen DPI-Skalierung in ihren Zielumgebungen zu berücksichtigen und die Antialiasing-Einstellungen unter Berücksichtigung dieser Tatsache auszuprobieren und einzustellen.

Unten sehen Sie ein Beispiel-Rendering der Sponza-Szene mit einigen aktivierten Antialiasing-Methoden. Die Screenshots wurden ohne eine auf das Fenster angewendete Systemskalierung (keine hohe DPI-Skalierung) aufgenommen, so dass die Auswirkungen der verschiedenen Methoden deutlicher zu erkennen sind.

Verwendete AAErgebnis
Keine AA

Supersample AA, hoch (1,5x)

Multisample AA, hoch (4x)

FXAA

Temporale AA, Standardstärke (0,3)

Multisample Anti-Aliasing

Multisample AA (MSAA) wirkt entweder auf den Farbpuffer des Elements View3D (dies ist die Standardeinstellung) oder, wenn ein renderMode mit Ausnahme von Offscreen verwendet wird, auf das gesamte Fenster Qt Quick (QQuickWindow, QQuickView, Window, ApplicationWindow).

Die Kanten der Geometrie werden super-sampled, was zu glatteren Silhouetten führt. Diese Technik hat jedoch keine Auswirkungen auf die Materialien innerhalb der Geometrie.

  • Vorteile: Gute Ergebnisse bei Geometriesilhouetten, wo Aliasing oft am deutlichsten zu sehen ist. Funktioniert bei schnellen Animationen ohne Probleme. Viele aktuelle GPUs unterstützen 2x oder 4x MSAA ohne Leistungsprobleme.
  • Nachteile: Kann teuer sein, besonders auf älterer mobiler und eingebetteter Hardware. Hilft nicht bei Textur- oder Reflexionsproblemen.

Wenn View3D die Standardeinstellung renderMode von Offscreen verwendet, hat View3D selbst die volle Kontrolle über das Multisample-Antialiasing. Anwendungen können dies über die Eigenschaften antialiasingMode und antialiasingQuality der mit View3D verbundenen Umgebung (SceneEnvironment oder ExtendedSceneEnvironment) konfigurieren.

Im folgenden Beispiel wird das häufig verwendete 4x MSAA angefordert, da antialiasingQuality auf SceneEnvironment.High voreingestellt ist.

View3D {
    environment: SceneEnvironment {
        antialiasingMode: SceneEnvironment.MSAA
    }
}

MSAA ist nicht von Qt selbst implementiert, sondern wird von der zugrunde liegenden 3D-API ausgeführt. Daher können Leistung und Qualität zwischen verschiedener Hardware und ihren 3D-API-Implementierungen variieren.

Temporales Anti-Aliasing

Temporal Anti-Aliasing arbeitet mit dem Farbpuffer der View3D. Die Kamera wird zwischen den Frames leicht verwackelt, und das Ergebnis jedes neuen Frames wird mit dem vorherigen Frame gemischt.

  • Vorteile: Durch das Wackeln der Kamera werden echte Details gefunden, die sonst verloren gehen würden. Geringe Auswirkung auf die Leistung.
  • Nachteile: Sich schnell bewegende Objekte führen zu Geisterbildern in einem Bild.

Temporal AA hat keine Wirkung, wenn es mit Multisample AA kombiniert wird. Sie kann jedoch mit Progressive AA kombiniert werden.

Um das temporale Anti-Aliasing zu steuern, verwenden Sie die Eigenschaften der Umgebung temporalAAEnabled und temporalAAStrength.

View3D {
    environment: SceneEnvironment {
        temporalAAEnabled: true
    }
}

Progressives Anti-Aliasing

Progressives Anti-Aliasing arbeitet mit dem Farbpuffer von View3D. Wenn sich der gesamte Inhalt der von View3D gerenderten Szene nicht mehr bewegt, wird die Kamera zwischen den Frames leicht hin- und herbewegt, und das Ergebnis jedes neuen Frames wird mit den vorherigen Frames gemischt. Je mehr Bilder Sie sammeln, desto besser sieht das Ergebnis aus.

  • Vorteile: Liefert detaillierte statische Bilder ohne Leistungseinbußen.
  • Nachteile: Wirkt nicht, wenn visuelle Veränderungen auftreten. 8x PAA braucht eine Achtelsekunde, um das Rendering zu beenden (bei 60fps), was sich bemerkbar machen kann.
View3D {
    environment: SceneEnvironment {
        antialiasingMode: SceneEnvironment.ProgressiveAA
    }
}

Verwenden Sie antialiasingQuality, um festzulegen, wie viele Bilder zusammengemischt werden (2, 4 oder 8).

Supersample Anti-Aliasing

Supersample AA arbeitet mit dem Farbpuffer einer View3D. Dabei wird ein Farbpuffer (Textur) erstellt, der größer ist als die normale Größe, und dann heruntergerechnet. Dies bedeutet einen erhöhten Ressourcenverbrauch und bei großen Größen kann der Skalierungsvorgang kostspielig sein.

  • Vorteile: Bietet Anti-Aliasing für die gesamte Szene ohne Einschränkungen bei der Animation.
  • Nachteile: Kann die Leistung stark beeinträchtigen, wenn Ihre Szene bereits durch die Füllrate des Grafiksystems begrenzt ist, insbesondere bei älterer mobiler und eingebetteter Hardware.
View3D {
    environment: SceneEnvironment {
        antialiasingMode: SceneEnvironment.SSAA
    }
}

Verwenden Sie antialiasingQuality, um den Größenmultiplikator zu steuern (1,2, 1,5 oder 2,0).

Mipmaps

Mipmapping speichert die Textur zusammen mit ihren vorberechneten Versionen mit geringerer Auflösung. Immer wenn die Textur in einer kleineren Größe angezeigt wird, verwendet das Rendering-System automatisch diese Bilder mit niedrigerer Auflösung (die viele Details in weniger Pixeln zusammenfassen).

  • Vorteile: Geringe Auswirkung auf die Leistung. Verbessert die Bildqualität von Texturen erheblich.
  • Nachteile: Erfordert die potenziell kostspielige Erzeugung der Mipmap-Kette oder, bei einigen Bildcontainerformaten, die Vorgenerierung der Mipmap-Bilder im Bildbestand selbst. Benötigt 33% mehr Grafikspeicher als das gleiche Bild ohne Mipmaps.

Um Qt zu veranlassen, Mipmaps für Texture zu generieren und die Verwendung der Mipmap-Kette bei der Durchführung von Textursampling in den Grafik-Shadern zu aktivieren, setzen Sie die Eigenschaften mipFilter und generateMipmaps.

Texture {
    source: "image.png"
    mipFilter: Texture.Linear
    generateMipmaps: true
}

Spiegelglanz-Anti-Aliasing

Artefakte, die durch den Beitrag der spiegelnden Beleuchtung entstehen, können durch die Aktivierung von Specular Anti-Aliasing reduziert werden. Diese Artefakte zeigen sich in der Regel als helle Punkte, die möglicherweise flackern.

Spiegelglanz-AA deaktiviertSpiegelglanz-AA aktiviert

View3D {
    environment: SceneEnvironment {
        specularAAEnabled: true
    }
}

Hinweis: Materialien mit einem sehr glatten Erscheinungsbild können ihr Erscheinungsbild ändern, als ob sie eine more rough Oberfläche hätten, wenn Sie die Spiegelungs-AA aktivieren. Dies ist ein Ergebnis der zugrunde liegenden Beleuchtungsberechnungen.

Schnelles approximatives Anti-Aliasing

ExtendedSceneEnvironment bietet eine weitere Methode des Anti-Aliasing in Form eines Nachbearbeitungseffekts. Um FXAA zu aktivieren, setzen Sie fxaaEnabled auf true.

import QtQuick3D.Helpers

View3D {
    environment: ExtendedSceneEnvironment {
        fxaaEnabled: true
    }
}

Von Künstlern eingesetzte Cheats

Silhouetten-Deckkraft-Maps

Wenn Ihr Modell eine einheitliche Silhouette hat, können Sie eine Deckkraftkarte anwenden, die den äußeren Rand der Geometrie transparent macht. Wenn Sie einen Farbverlauf für die Deckkraft verwenden, verschwindet der Rand des Objekts fließend. Aber selbst wenn Ihre Deckkraftkarte innerhalb eines Pixels direkt von vollständig deckend zu vollständig transparent übergeht, wird das Ergebnis immer noch Anti-Aliasing-Kanten aufweisen, wie im obigen Beispiel zu sehen ist. Das liegt daran, dass Bildkarten, einschließlich Deckkraftkarten, bilineare Interpolation verwenden.

  • Vorteile: Kann weichere Übergänge zeigen als normale AA. Kann pro Modell und nicht pro Ebene angewendet werden.
  • Nachteile: Kann nicht verwendet werden, wenn sich die Silhouette des Objekts ständig ändert. Mehrere sich überlappende Modelle, die Transparenz verwenden, verbrauchen die Leistung der Füllrate, die oft sehr hoch ist.

Ändern von Materialien oder Geometrie

Wie im obigen Bild für Reflection Aliasing gezeigt, besteht die einfachste Lösung für Probleme manchmal darin, die Vorlage zu ändern. Wenn Sie störende spiegelnde Reflexionen in den Ecken Ihres Modells erhalten, fragen Sie sich: Kann ich das Material weicher machen? Kann ich die Geometrie ändern, um den Reflexionswinkel zu glätten oder zu verändern? Kann ich die Umgebungskarte bearbeiten, um scharfe Übergänge zu reduzieren?

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.