Mitigazione dell'effetto Z-fighting
Quando due superfici triangolari si sovrappongono, non è chiaro quale deve essere eseguito il rendering sopra l'altro. Il risultato varia anche per pixel, causando artefatti dipendenti dalla visualizzazione della fotocamera. Quando la fotocamera o la mesh si muove, questi modelli sfarfallio notevolmente. Questo artefatto è detto z-fighting. Per le applicazioni di realtà aumentata e realtà virtuale, il problema è accentuato perché i dispositivi montati a testa si spostano naturalmente sempre. Per prevenire il disagio del visualizzatore, Azure Rendering remoto offre funzionalità di mitigazione z-fighting.
Nota
Le impostazioni di mitigazione z-fighting non hanno alcun effetto sul rendering del cloud dei punti.
Modalità di mitigazione dell'effetto Z-fighting
Situazione | Risultato |
---|---|
Effetto z-fighting normale | |
Mitigazione dell'effetto Z-fighting abilitata | |
Evidenziazione dell'effetto scacchiera abilitata |
Il codice seguente abilita la funzionalità di mitigazione dell'effetto z-fighting:
void EnableZFightingMitigation(RenderingSession session, bool highlight)
{
ZFightingMitigationSettings settings = session.Connection.ZFightingMitigationSettings;
// enabling z-fighting mitigation
settings.Enabled = true;
// enabling checkerboard highlighting of z-fighting potential
settings.Highlighting = highlight;
}
void EnableZFightingMitigation(ApiHandle<RenderingSession> session, bool highlight)
{
ApiHandle<ZFightingMitigationSettings> settings = session->Connection()->GetZFightingMitigationSettings();
// enabling z-fighting mitigation
settings->SetEnabled(true);
// enabling checkerboard highlighting of z-fighting potential
settings->SetHighlighting(highlight);
}
Nota
La funzionalità di mitigazione dell'effetto z-fighting è un'impostazione globale che influisce su tutte le mesh sottoposte a rendering.
Motivi dell'effetto z-fighting
L'effetto z-fighting si verifica principalmente in due casi:
- Quando le superfici sono lontane dalla fotocamera, la precisione dei valori di profondità degrada e i valori diventano indistinguibili
- Quando le superfici in una mesh si sovrappongono fisicamente
Il primo problema può sempre verificarsi ed è difficile da eliminare. Se questa situazione si verifica nell'applicazione, assicurarsi che il rapporto tra la distanza del piano vicino e la distanza del piano lontano sia inferiore a quello pratico. Ad esempio, un piano vicino alla distanza 0,01 e un piano lontano a distanza 1000 crea questo problema molto prima di avere il piano vicino a 0,1 e il piano lontano a distanza 20.
Il secondo problema è un'indicazione del contenuto creato in modo non valido. Nel mondo reale, due oggetti non possono trovarsi nello stesso luogo nello stesso momento. A seconda dell'applicazione, è possibile che gli utenti vogliano sapere se esistono superfici sovrapposte e dove si trovano. Una scena CAD di un edificio che costituisce la base per una costruzione reale, ad esempio, non deve contenere intersezioni di superfici fisicamente impossibili. Per consentire l'ispezione visiva, è disponibile la modalità di evidenziazione, che visualizza i casi di effetto z-fighting potenziali sotto forma di motivo a scacchi animato.
Limiti
La funzionalità di mitigazione dell'effetto z-fighting è il risultato del principio del massimo sforzo. Non c'è garanzia che rimuove tutti i combattimenti z. Inoltre, la mitigazione preferisce una superficie rispetto all'altra. Quando si hanno superfici troppo vicine l'una all'altra, la superficie "sbagliata" finisce sopra. Un caso comune in cui il problema si verifica è quando su una superficie sono applicati testo e altre decalcomanie. Con la mitigazione z-fighting abilitata, questi dettagli potrebbero facilmente sparire.
Considerazioni sulle prestazioni
- L'abilitazione della funzionalità di mitigazione dell'effetto z-fighting comporta un sovraccarico delle prestazioni minimo o nullo.
- L'abilitazione aggiuntiva della sovraimpressione z-fighting comporta un sovraccarico delle prestazioni non indifferente, anche se variabile a seconda della scena.
Documentazione sull'API
- Rendering C#Connessione ion. ZFightingMitigation Impostazioni proprietà
- Rendering C++Connessione ion::ZFightingMitigation Impostazioni()