Sur cette page

Meilleures pratiques en matière d'anti-crénelage

Qt Quick La 3D dispose de plusieurs moyens pour lutter contre l'aliasing (les bords irréguliers) lors du rendu des modèles 3D. Chaque technique offre ses propres avantages et limites. Plusieurs techniques peuvent être combinées, mais avec un coût supplémentaire en termes de performances.

L'aliasing en général

L'anticrénelage se produit lorsqu'il y a plus d'informations présentes dans l'original que nous ne pouvons en représenter dans les pixels à l'écran. Les techniques anti-crénelage se répartissent en trois catégories :

  • Les techniques qui trouvent des informations supplémentaires pour un seul pixel et les représentent toutes en même temps.
  • Les effets d'image qui tentent de trouver les endroits où les choses semblent mauvaises et de balayer les problèmes sous le tapis.
  • Les techniques employées par les artistes qui tentent de contourner les limitations.

Bien que l'anticrénelage soit un outil utile pour le rendu des graphiques, il peut affecter les performances de votre application s'il n'est pas utilisé à bon escient. Les sections suivantes décrivent quelques techniques d'anticrénelage parmi lesquelles vous pouvez choisir. Le fait de savoir quelle technique est la mieux adaptée à vos problèmes vous aidera à trouver un équilibre entre la qualité visuelle et une vitesse de rendu suffisante.

Anticrénelage de la géométrie

Par défaut, toutes les géométries sont rendues un pixel à la fois. Comme vous pouvez le voir à gauche dans l'image ci-dessous, cela laisse des bords durs qui peuvent être facilement perceptibles dans les cas de contraste élevé, comme c'est le cas ici avec le noir et blanc.

Comparaison de cinq techniques d'anticrénelage sur des carrés, des cercles et du texte ayant subi une rotation

Techniques efficaces pour réduire le repliement de la géométrie

La meilleure solution consiste à utiliser l'anticrénelage multi-échantillon, qui permet d'obtenir plus de détails géométriques uniquement lorsque cela est nécessaire. L'utilisation de l'anticrénelage temporel ou de l'anticrénelage progressif peut également atténuer le problème de manière correcte.

Enfin, dans certains cas, vous pouvez utiliser une carte d'opacité de silhouette pour lisser les bords de la géométrie.

Aliasing de texture

Lorsqu'une texture est sous-échantillonnée, le nombre de pixels affichés est inférieur à celui de l'original, ce qui entraîne des artefacts indésirables en fonction des pixels choisis. Cet effet est aggravé lorsque le modèle est en mouvement, car différents pixels sont choisis à différents moments. Dans l'image ci-dessous, remarquez l'absence de la ligne entre E3 et F3, sa forte présence entre G3 et H3, puis sa disparition pour les 5 colonnes suivantes, et ainsi de suite.

Comparaison de quatre techniques d'anticrénelage sur une texture de grille en retrait

Techniques efficaces pour réduire le repliement des textures

La solution la plus simple (et sans doute la meilleure) à ce problème consiste à utiliser le mipmapping dans la texture de l'image elle-même. D'autres solutions consistent à utiliser l'AA temporel ou l'AA progressif pour recueillir plus d'informations sur la texture.

L'utilisation de l'anti-crénelage multi-échantillon ne résoudra pas ce problème.

Aliasing par réflexion

Comme pour l'anticrénelage de texture, un matériau reflétant l'environnement sous-échantillonnera l'image. Dans certains cas, comme on le voit à gauche dans l'image ci-dessous, il devient évident que de fins détails sont ignorés.

Comparaison de quatre techniques de réduction du repliement de la réflexion

Techniques efficaces pour réduire le crénelage des reflets

La solution la plus correcte dans ce cas est d'utiliser l'AA temporel ou l'AA progressif pour trouver les informations supplémentaires.

Une solution alternative simple qui peut être acceptable consiste à rendre le matériau moins brillant, plus rugueux. Dans ce cas, des mipmaps à plus faible résolution de l'environnement sont automatiquement utilisés, mélangeant les détails nets.

Techniques d'anti-crénelage dans Qt Quick 3D

Remarque : l'exemple d'anticrénelage et l'exemple d'effets de scène permettent d'utiliser certaines de ces fonctions en direct. N'oubliez pas cependant que les systèmes de fenêtrage modernes sont souvent configurés pour effectuer une mise à l'échelle en DPI élevé lorsqu'un écran à haute résolution est connecté. Cela signifie que le contenu de toute fenêtre affichée à l'écran est rendu à une résolution plus élevée et est ensuite réduit par le compositeur du système ou un autre composant de la plateforme. Il s'agit en fait d'une forme d'anticrénelage par suréchantillonnage. L'activation des techniques d'anticrénelage dans Qt Quick 3D peut alors montrer des améliorations plus petites, ou parfois difficiles à voir, parce que l'anticrénelage est déjà éliminé dans une certaine mesure par la mise à l'échelle automatique du système de fenêtrage. Toutefois, lorsque la même application est déployée sur un autre système, il se peut que ce dernier utilise une plate-forme ou un écran où cette mise à l'échelle n'existe pas, de sorte que le crénelage et les bords irréguliers sont plus visibles dès la sortie de la boîte. Il est conseillé aux développeurs de tenir compte de la présence ou de l'absence potentielle d'une mise à l'échelle DPI élevée dans leurs environnements cibles, et d'expérimenter et d'ajuster les paramètres d'anticrénelage en gardant cela à l'esprit.

Voici un exemple de rendu de la scène Sponza avec certaines méthodes d'anticrénelage activées. Les captures d'écran ont été réalisées sans aucune mise à l'échelle du système appliquée à la fenêtre (pas de mise à l'échelle DPI élevée), de sorte que les effets des différentes méthodes sont plus prononcés.

AA utiliséRésultat
Pas d'AA

Scène architecturale sans anticrénelage présentant des bords irréguliers

Supersample AA, élevé (1,5x)

Scène architecturale avec anticrénelage supersample à 1,5x

AA multi-échantillon, élevé (4x)

Scène architecturale avec anti-crénelage multi-échantillon à 4x

FXAA

Scène architecturale avec anticrénelage approximatif rapide

AA temporel, force par défaut (0.3)

Scène architecturale avec anticrénelage temporel

Anti-crénelage multi-échantillon

L'anti-crénelage multi-échantillon (MSAA) opère soit sur le tampon de couleur de l'élément View3D (par défaut), soit, si un renderMode autre que Offscreen est utilisé, sur l'ensemble de la fenêtre Qt Quick (QQuickWindow, QQuickView, Window, ApplicationWindow).

Les bords de la géométrie sont super-échantillonnés, ce qui permet d'obtenir des silhouettes plus lisses. Cette technique n'a cependant aucun effet sur les matériaux à l'intérieur de la géométrie.

  • Avantages: Bons résultats sur les silhouettes géométriques, où l'aliasing est souvent le plus visible. Fonctionne sans problème avec les animations rapides. De nombreux GPU récents supportent 2x ou 4x MSAA sans problème de performance.
  • Inconvénients: peut être coûteux à utiliser, en particulier sur les anciens matériels mobiles et embarqués. N'aide pas à résoudre les problèmes de texture ou de réflexion.

Lorsque View3D utilise la version par défaut de renderMode ou Offscreen, View3D contrôle entièrement l'anticrénelage multi-échantillon. Les applications peuvent le configurer via les propriétés antialiasingMode et antialiasingQuality de l'environnement (SceneEnvironment ou ExtendedSceneEnvironment) associé à View3D.

L'exemple suivant demande le MSAA 4x couramment utilisé, car la valeur par défaut de antialiasingQuality est SceneEnvironment.High.

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

Le MSAA n'est pas implémenté par Qt 3D lui-même, mais est plutôt réalisé par l'API 3D sous-jacente. Par conséquent, les performances et la qualité peuvent varier en fonction du matériel et des implémentations de l'API 3D.

Anti-crénelage temporel

L'anti-crénelage temporel opère sur la mémoire tampon des couleurs de View3D. La caméra est déplacée très légèrement entre les images, et le résultat de chaque nouvelle image est fusionné avec l'image précédente.

  • Avantages: Grâce à l'agitation de la caméra, les détails réels sont retrouvés alors qu'ils auraient été perdus. Faible impact sur les performances.
  • Inconvénients: les objets se déplaçant rapidement provoquent des images fantômes.

L'AA temporel n'a aucun effet lorsqu'il est combiné avec l'AA multi-échantillon. Il peut cependant être combiné avec Progressive AA.

Pour contrôler l'anticrénelage temporel, utilisez les propriétés temporalAAEnabled et temporalAAStrength de l'environnement.

View3D {
    environment: SceneEnvironment {
        temporalAAEnabled: true
    }
}

Anti-crénelage progressif

L'anticrénelage progressif fonctionne sur la mémoire tampon des couleurs de View3D. Lorsque tout le contenu de la scène rendu par View3D a cessé de bouger, la caméra est légèrement secouée entre les images et le résultat de chaque nouvelle image est fusionné avec les images précédentes. Plus vous accumulez d'images, plus le résultat est beau.

  • Avantages: Fournit des images statiques détaillées sans coût de performance.
  • Inconvénients: ne prend pas effet en cas de changement visuel. L'AAP 8x prend un huitième de seconde pour terminer le rendu (à 60 images par seconde), ce qui peut être perceptible.
View3D {
    environment: SceneEnvironment {
        antialiasingMode: SceneEnvironment.ProgressiveAA
    }
}

Utilisez antialiasingQuality pour contrôler le nombre d'images mélangées (2, 4 ou 8).

Anti-crénelage Supersample

L'anti-crénelage par suréchantillonnage fonctionne sur le tampon de couleur d'un site View3D. Cela implique la création d'un tampon de couleur (texture) plus grand que sa taille normale, puis son sous-échantillonnage. Cela implique une utilisation accrue des ressources et, à grande échelle, l'opération de mise à l'échelle peut s'avérer coûteuse.

  • Avantages: Fournit un anticrénelage de la scène entière sans limitations sur l'animation.
  • Inconvénients: peut fortement dégrader les performances lorsque votre scène est déjà limitée par le taux de remplissage du système graphique, en particulier dans le cas d'un ancien matériel mobile ou embarqué.
View3D {
    environment: SceneEnvironment {
        antialiasingMode: SceneEnvironment.SSAA
    }
}

Utilisez antialiasingQuality pour contrôler le multiplicateur de taille (1,2, 1,5 ou 2,0).

Mipmaps

Le Mipmapping stocke la texture avec ses versions précalculées en basse résolution. Lorsque la texture est affichée à une taille plus petite, le système de rendu utilise automatiquement ces images à faible résolution (qui combinent de nombreux détails en moins de pixels).

  • Avantages: Faible impact sur les performances. Améliore considérablement la qualité de l'image des textures.
  • Inconvénients: nécessite la génération potentiellement coûteuse de la chaîne mipmap ou, avec certains formats de conteneurs d'images, la pré-génération des images mipmap dans l'image elle-même. Utilise 33 % de mémoire graphique en plus que la même image sans mipmap.

Pour que Qt XML génère des mipmaps pour un Texture et permette l'utilisation de la chaîne mipmap lors de l'échantillonnage de texture dans les shaders graphiques, définissez les propriétés mipFilter et generateMipmaps.

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

Anti-crénelage spéculaire

Les artefacts dus à la contribution de l'éclairage spéculaire peuvent être réduits en activant l'anticrénelage spéculaire. Ces artefacts se présentent généralement sous la forme de points brillants, parfois avec une apparence vacillante.

AA spéculaire désactivéAnti-crénelage spéculaire activé

Scène architecturale montrant des reflets spéculaires sans anticrénelage

Scène architecturale montrant des reflets spéculaires lissés avec anticrénelage

View3D {
    environment: SceneEnvironment {
        specularAAEnabled: true
    }
}

Note : Les matériaux ayant un aspect très lisse peuvent changer d'aspect comme s'ils avaient une surface more rough lorsque l'AA spéculaire est activé. C'est le résultat des calculs d'éclairage sous-jacents.

Anti-crénelage approximatif rapide

ExtendedSceneEnvironment offre une autre méthode d'anticrénelage sous la forme d'un effet de post-traitement. Pour activer FXAA, réglez fxaaEnabled sur true (vrai).

import QtQuick3D.Helpers

View3D {
    environment: ExtendedSceneEnvironment {
        fxaaEnabled: true
    }
}

Triche de l'artiste employé

Cartes d'opacité des silhouettes

Lorsque votre modèle a une silhouette cohérente, vous pouvez appliquer une carte d'opacité qui rend le bord extérieur de la géométrie transparent. L'utilisation d'un dégradé pour l'opacité permet de faire disparaître en douceur le bord de l'objet. Toutefois, même si votre carte d'opacité passe directement d'une opacité totale à une transparence totale en l'espace d'un pixel, le résultat fournira toujours des bords anticrénelés, comme le montre l'exemple ci-dessus. Cela s'explique par le fait que les cartes d'image, y compris les cartes d'opacité, utilisent l'interpolation bilinéaire.

  • Avantages: Peut montrer des transitions plus douces que l'AA normal. Peut être appliqué par modèle plutôt que par couche.
  • Inconvénients: ne peut être utilisé si la silhouette de l'objet est appelée à changer. Les modèles multiples qui se chevauchent et qui utilisent la transparence consomment les performances du taux de remplissage, qui est souvent très élevé.

Modification des matériaux ou de la géométrie

Comme le montre l'image de l'aliasing par réflexion ci-dessus, la solution la plus simple consiste parfois à modifier l'œuvre d'art. Si vous obtenez des reflets spéculaires gênants dans le coin de votre modèle, posez-vous la question : Puis-je rendre le matériau plus doux ? Puis-je modifier la géométrie pour lisser ou changer l'angle de réflexion ? Puis-je modifier la carte de l'environnement pour réduire les transitions nettes ?

© 2026 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.