Lors du rendu de deux surfaces coplanaires superposées, un problème courant est le «combat z», où le rendu ne peut pas décider laquelle des deux surfaces est la plus proche de la caméra, ce qui donne des artefacts visuels dans la zone de chevauchement.
La solution standard est de donner aux surfaces un léger décalage lors de la conception du modèle. N 'y a-t-il pas une autre solution?
Réponses:
Si les surfaces sont exactement co-planantes, votre sort dépend des dieux du FPU; vous aurez plus que probablement des combats Z. Si les triangles sont identiques et vous faites le exacte même mathématiques à chacun, vous allez retrouver avec les mêmes valeurs Z pour les deux. Mais encore une fois, cela ne se produira que si vos opérations mathématiques sont identiques pour les deux. (Puisque, en général, les opérations FPU ne sont pas commutatives)
Une solution possible consiste à ne pas utiliser du tout le tampon Z. Vous pouvez plutôt utiliser l' algorithme du peintre . Certes, cela vient aussi avec tous les problèmes de l'algorithme des peintres. Mais cela résoudrait les combats en Z.
Dans votre cas d'exemple de Screen Space Decals (SSD), la solution courante consiste à utiliser un décalage, alias un simple cube mince. Voir la présentation de Warhammer 40k sur les SSD pour référence. Ou Bart Wronski poste qui traite d'autres questions avec des autocollants, mais aussi des liens vers quelques autres présentations sur disques SSD
la source
Voici comment j'ai résolu cela dans le passé:
Notez que les objets doivent être dessinés consécutivement pour que cela fonctionne.
la source
Selon votre moteur de rendu, vous pouvez rendre les surfaces plus "floues" en appliquant un décalage minuscule dans une profondeur de multi-échantillonnage en utilisant un algorithme de type bruit. Cela devrait se traduire par une sorte d'effet de fusion pour les surfaces à proximité de profondeur proche. Pour ce que je sais, la définition de la profondeur par échantillon dans le fragment shader est assez récente dans OpenGL, puis uniquement en tant qu'extension.
OpenGL a le PolygonOffset mais nécessite de savoir à l'avance que vous êtes sur le point de rendre quelque chose de coplanaire. Bien que cela ne soit pas possible pour les surfaces d'un modèle unique, cela pourrait bien fonctionner, par exemple lors du rendu d'une route superposée sur un terrain.
la source