Pourquoi les jonctions en T dans les mailles provoquent-elles des fissures?

19

J'ai entendu de nombreuses sources dire qu'avoir des jonctions en T dans des maillages 3D est une mauvaise idée car cela pourrait entraîner des fissures pendant le rendu. Quelqu'un peut-il expliquer pourquoi cela se produit et ce que l'on peut faire pour les éviter?

ap_
la source

Réponses:

20

La réponse de lhf est bonne du point de vue de la tessellation, mais cela peut se produire avec des cas d'utilisation de maillage triangulaire plus simples.

Prenez cet exemple trivial de trois, triangles d' espace écran , ABC, ADE et DBE ...

entrez la description de l'image ici

Bien que le point E était, mathématiquement, destiné à être exactement sur le segment de ligne AB, le pipeline n'utilisera pas de valeurs entièrement précises, telles que des nombres rationnels (par exemple https://gmplib.org/ ). Au lieu de cela, il utilisera probablement des flottants, et donc une approximation / erreur sera introduite. Le résultat sera probablement quelque chose comme:

entrez la description de l'image ici

Notez que tous les sommets peuvent avoir des inexactitudes. Bien que l'exemple ci-dessus montre une fissure, la jonction en T peut à la place entraîner un chevauchement le long du bord, provoquant un double dessin des pixels. Cela peut ne pas sembler aussi mauvais, mais cela peut entraîner des problèmes de transparence ou des opérations de gabarit.

Vous pourriez alors penser qu'avec une virgule flottante, l'erreur introduite sera insignifiante, mais dans un moteur de rendu, les valeurs des sommets de l'espace d'écran (X, Y) sont presque toujours représentées par des nombres à virgule fixe et donc le déplacement par rapport à l'emplacement idéal sera généralement beaucoup plus. De plus, comme le matériel de rendu «interpole» le segment de ligne pixel par pixel avec sa propre précision interne, il y a encore plus de chances qu'il diverge de l'emplacement arrondi de E.

Si la jonction en T est "supprimée" en divisant, par exemple, également le triangle ABC en deux, c'est-à-dire AEC et EBC, le problème disparaîtra car les décalages introduits par les erreurs seront tous cohérents.

Maintenant, vous pourriez vous demander pourquoi les moteurs de rendu (en particulier HW) utilisent des mathématiques à virgule fixe pour les coordonnées XY du sommet? Pourquoi n'utilisent-ils pas la virgule flottante pour réduire le problème? Bien que certains l'aient fait (par exemple, le Dreamcast de Sega), cela peut entraîner un autre problème où les calculs de configuration du triangle deviennent catastrophiquement inexacts, en particulier pour les triangles longs et minces, et ils changent de taille de manière désagréable.

Simon F
la source
2
Lorsque vous dites que "les valeurs des sommets (X, Y) sont presque toujours représentées par des nombres à virgule fixe", je suppose que vous voulez dire les coordonnées des sommets de l'espace d'écran dans le rasterizer, n'est-ce pas? Pas les sommets d'origine de l'espace objet.
Nathan Reed,
2
@NathanReed Oui. Juste l'espace d'écran X&Y (et, peut-être sur certains GPU le Z). Je vais le modifier pour que ce soit plus clair.
Simon F
9

Lors de la modélisation de surfaces paramétriques avec un maillage dans le domaine des paramètres, les jonctions en T apparaîtront très probablement comme des discontinuités dans la surface. Ceux-ci apparaîtront comme des lacunes dans le rendu. Voir ci-dessous.

Plus généralement, les jonctions en T dans les maillages triangulaires entraîneront probablement des discontinuités d'attributs interpolés, tels que la couleur et les normales.

entrez la description de l'image ici entrez la description de l'image ici

lhf
la source
4

Erreur d'arrondi à virgule flottante.

Après avoir transformé la jonction en T et le point dans le T peut être arrondi loin du bord.

Ensuite, il peut arriver qu'un fragment qui est échantillonné pour un pixel se trouve dans l'espace entre les 2 surfaces.

Cela peut être résolu en n'ayant pas de jonction en T en premier lieu.

monstre à cliquet
la source
3

La manière simple d'éviter cela est de s'assurer que tous vos sommets sont soudés

Votre problème est que vous avez des coupes le long des bords avec un sommet, mais vous n'avez pas de sommet correspondant sur le bord adjacent pour le souder / le connecter, si vous le pensez comme un bouton sur une chemise, vous avez semé sur un bouton sur le bord, mais ne lui a pas donné de trou pour que le tissu soit ouvert.

Dans l'image ci-dessous, les points rouges représentent des sommets correctement soudés, les points bleus ont tous besoin d'un sommet supplémentaire pour être découpés dans le bord adjacent.

entrez la description de l'image ici

De manière générale, il est recommandé de conserver votre modélisation en quad et tri, cela permet de résoudre ce problème car vous devez toujours avoir un sommet correspondant à souder également. Il est également utile de conserver les quads si vous prévoyez d'utiliser des méthodes de subdivision sur le maillage.

MephistonX
la source