Perché le giunzioni a T nelle mesh provocano incrinature?


19

Ho sentito da molte fonti che avere giunzioni a T in mesh 3D è una cattiva idea perché potrebbe provocare crepe durante il rendering. Qualcuno può spiegare perché ciò accada e cosa si può fare per evitarli?


Risposte:


20

La risposta di lhf è buona dal punto di vista della tassellatura, ma ciò può avvenire con casi d'uso di mesh triangolari più semplici.

Prendi questo banale esempio di tre triangoli dello spazio dello schermo , ABC, ADE e DBE ...

inserisci qui la descrizione dell'immagine

Sebbene il punto E fosse, matematicamente, destinato ad essere esattamente sul segmento di linea AB, la pipeline non utilizzerà valori completamente precisi, come numeri razionali (ad esempio https://gmplib.org/ ). Invece, probabilmente utilizzerà float e quindi verranno introdotti alcuni approssimazioni / errori. Il risultato sarà probabilmente qualcosa del tipo:

inserisci qui la descrizione dell'immagine

Nota che tutti i vertici potrebbero avere imprecisioni. Anche se l'esempio sopra mostra una crepa, la giunzione a T può invece comportare una sovrapposizione lungo il bordo causando il disegno di pixel due volte. Questo potrebbe non sembrare così male, ma può causare problemi con le operazioni di trasparenza o stencil.

Si potrebbe quindi pensare che con il virgola mobile l'errore introdotto sarà insignificante, ma in un renderer i valori del vertice dello spazio dello schermo (X, Y) sono quasi sempre rappresentati da numeri in virgola fissa e quindi lo spostamento dalla posizione ideale sarà di solito è molto più grande. Inoltre, poiché l'hardware di rendering "interpola" il segmento di linea pixel per pixel con la propria precisione interna, vi sono ancora più possibilità che divergano dalla posizione arrotondata di E.

Se la giunzione a T viene "rimossa" per, diciamo, anche dividendo il triangolo ABC in due, cioè AEC ed EBC, il problema scompare poiché i cambiamenti introdotti dagli errori saranno tutti coerenti.

Ora, potresti chiederti perché i renderer (specialmente HW) usano la matematica a virgola fissa per le coordinate XY del vertice? Perché non usano il virgola mobile per ridurre il problema? Sebbene alcuni lo abbiano fatto (ad es. Sega's Dreamcast), ciò può portare a un altro problema in cui la matematica di impostazione del triangolo diventa catastroficamente inaccurata, in particolare per i triangoli sottili e lunghi, e cambiano dimensione in modi spiacevoli.


2
Quando dici "i valori dei vertici (X, Y) sono quasi sempre rappresentati da numeri a virgola fissa", immagino che intendi le coordinate dei vertici dello spazio dello schermo nel rasterizzatore, giusto? Non i vertici dello spazio modello originale.
Nathan Reed,

2
@NathanReed Sì. Solo lo spazio-schermo X&Y (e, forse su alcune GPU la Z). Lo modificherò per renderlo più chiaro.
Simon F,

9

Quando si modellano superfici parametriche con una mesh nel dominio dei parametri, le giunzioni a T appariranno probabilmente come discontinuità nella superficie. Questi verranno visualizzati come lacune nel rendering. Vedi sotto.

Più in generale, le giunzioni a T nelle maglie triangolari comporteranno probabilmente discontinuità di attributi interpolati, come colore e normali.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine



4

Errore di arrotondamento in virgola mobile.

Dopo aver trasformato la giunzione a T e il punto nella T può essere arrotondato dal bordo.

Quindi può succedere che un frammento che viene campionato per un pixel risieda nello spazio tra le 2 superfici.

Questo può essere risolto non avendo una giunzione a T in primo luogo.


3

Il modo semplice per evitare ciò è garantire che tutti i vertici siano saldati

Il problema è che hai tagli lungo i bordi con un vertice, ma non hai un vertice corrispondente sul bordo adiacente per saldarlo / collegarlo, se lo pensi come un bottone su una maglietta, hai seminato su un pulsante sul bordo, ma non gli è stato praticato un foro, quindi il tessuto è aperto.

Nell'immagine seguente, i punti rossi rappresentano i vertici saldati correttamente, i punti blu hanno tutti bisogno di un vertice aggiuntivo per tagliare il bordo adiacente.

inserisci qui la descrizione dell'immagine

In generale, è buona norma mantenere la modellazione in quad e tri, questo aiuta ad alleviare questo problema in quanto dovresti sempre avere un vertice corrispondente da saldare. Aiuta anche a mantenere i quad se si prevede di utilizzare qualsiasi metodo di suddivisione sulla mesh.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.