Livello di dettaglio
# Livello di dettaglio

Nella computer grafica, la contabilità del livello di dettaglio prevede la diminuzione della complessità nella rappresentazione di un modello 3D che si allontana dallo spettatore o secondo altri parametri come importanza, punto di vista e velocità e posizione relative. Le tecniche del livello di dettaglio incrementano l'efficienza del rendering diminuendo il carico di lavoro in condutture grafiche (graphics pipeline), di solito con il vertex transformations. La riduzione della qualità visiva del modello spesso è inosservata perché avviene quando questo si muove velocemente o è distante.

Sebbene la maggior parte del tempo il LOD è applicato solo ai dettagli geometrici (geometry detail), il concetto base può essere generalizzato. Recentemente, le tecniche LOD includono anche la gestione dello shader (gestione delle ombre), per tenere sotto controllo la complessità dei pixel. Una forma di livelli per la gestione è stata applicata alle texture maps per anni, con il nome di mipmapping, dando anche una maggiore qualità.

È un luogo comune quello di dire che "un oggetto è stato caricato" quando l'oggetto è semplificato sottolineando l'argoritmo di caricamento (LOD-ing algorithm).

## Riferimenti storici

L'origine di tutti gli algoritmi di carimento per la computer grafica 3D può essere rintracciato in un articolo di James H. Clark nel numero dell'ottobre 1976 di Communications of the ACM. Al tempo, i computer erano monolitici e rari, le grafiche venivano guidate dai ricercatori. Gli hardware erano completamente differenti, sia architettonicamente sia nelle prestazioni. Come tale, molte differenze possono essere osservate rispetto agli algoritmi di oggi ma anche molti punti in comune.

L'algoritmo originale presenta un approccio molto più generico a ciò che sarà discusso qui. Dopo aver introdotto alcuni algoritmi disponibili per la gestione delle geometrie, è dichiarato che i guadagni più fruttuosi provenivano da "... strutturare gli ambienti quando viene eseguito il rendering", che permette di sfruttare le trasformazioni più veloci e le operazioni di ritaglio.

La stessa strutturazione dell'ambiente adesso è proposta come un modo per controllare la variazione dei dettagli evitando così calcoli obsoleti, ma fornendo un'adeguata qualità visiva:

L'algoritmo proposto immagina una struttura dati ad albero che codifica nei suoi rami entrambe le trasformazioni e transizioni agli oggetti più dettagliati. In questo modo, ogni nodo codifica un oggetto e secondo un dato euristico veloce, l'albero scende lungo le foglie che portano ognuna ad un oggetto più dettagliato. Quando viene raggiunta una foglia, altri metodi possono essere utilizzati quando è richiesto un dettaglio superiore, come la suddivisione ricursiva di Catmull.

Viene poi introdotto il clipping (da non confondere con il culling (del computer, anche se spesso sono simili), varie considerazioni nel settaggio del lavoro grafico ed il suo impatto nella performance, interazioni tra l'algoritmo proposto e gli altri per migliorare la velocità di rendering.I lettori interessati sono incoraggiati a controllare i riferimenti per maggiori dettagli.

## Approcci ben noti

Anche se l'algoritmo introdotto sopra copre tutta una serie di livello di tecniche di gestione dettaglio, le applicazioni del mondo reale di solito impiegano metodi diversi su misura per le informazioni che vengono rese. A causa della comparsa degli oggetti considerati, vengono utilizzati due principali famiglie di algoritmi.

Il primo è basato sulla suddivisione dello spazio in un numero infinito di regioni, ognuna con un certo livello di dettaglio. Il risultato è un discreto numero di livelli di dettaglio, dal il nome di Discrete LOD (DLOD). A questo livello non c'è modo di supportare una transizione tra livelli LOD, sebbene alpha blending o morphing possono essere usate per evitare popping visiva.

Il secondo algoritmo considera le mesh di poligoni che vengono renderizzate come una funzione che deve essere valutata richiedendo per evitare errori eccessivi che sono un errore di qualche euristica (di solito la distanza) stessa. La funzione di "mesh" viene continuamente valutata e una versione ottimizzata viene prodotta secondo uno scambio tra la qualità visiva e la performance. Questi tipi di algoritmi sono solitamente denominati come Continuous LOD (CLOD).

### Dettagli non LOD Discreto

Il concetto base del DLOC è quello di fornire vari modelli per rappresentare il medesimo oggetto. Ottenere questi modelli richiede un algoritmo in più che è spesso non banale e soggetto di molte tecniche di riduzione dei poligoni (polygon reduction techniques). I successivi algoritmi LOD-ing semplicemente assumeranno questi modelli come variabili.

Gli algoritmi DLOD spesso sono usati in applicazioni con performance-intensive con piccoli set di dati che possono essere facilmente memorizzati. Sebbene gli algoritmi out-of-core possono essere utilizzati, la granulosità delle informazioni non è utile in questo genere di applicazioni. Questo tipo di algoritmo solitamente è semplice da mettere in funzione, offrendo sia una performance migliore che un minore utilizzo della CPU a causa del minor numero di calcoli da svolgere.

I metodi DLOD spesso sono usati per gli oggetti solitari, includendo complessi metodi di animazione. Un approccio diverso è usato il geomipmapping, un algoritmo di terrain rendering popolare perché applica al terreno delle mesh che sono graficamente e topologicamente diverse dall'"oggetto" mesh. Invece che calcolare un errore e semplificare le mesh in base a questo, il geomipmapping utilizza un metodo di riduzione per risolvere l'errore: questo viene rilevato e viene calcolata la distanza alla quale l'errore è accettabile. Sebbene lineare, l'algoritmo offre una performance decente.

### Un esempio discreto di LOD

Come esempio, consideriamo una sfera. Un approccio LOD discreto può generare un certo numero di modelli da utilizzare a distanze differenti. Siccome il modello può banalmente essere generato proceduralmente con la sua formulazione matematica, usare un numero differente di punti semplici distribuiti sulla superficie è sufficiente per generare i numerosi modelli richiesti. Questo non è un algoritmo LOD-ing.

Impatto visivo e misurazioni :

| Immagine | | | | | |
| - | - | - | - | - | - |
| Vertici | ~5500 | ~2880 | ~1580 | ~670 | 140 |
| Note | Livello massimo di dettaglio, per la vicinanza. | Minimum detail, very far objects. |

Per simulare uno scenario limite realistico, può essere utilizzata un'applicazione creata ad-hoc. L'uso di semplici algoritmi ed una frammentazione minima delle operazioni assicura che il limite della CPU non avvenga. Per ogni frame, il programma calcola la distanza di ogni sfera e sceglie un modello da un gruppo in base alle sue informazioni. Per mostrare più facilmente il concetto, la distanza alla quale viene utilizzato ogni oggetto è codificata nella sorgente. Un metodo più coinvolgente può essere calcolare modelli adeguati in base all'utilizzo della distanza scelta.

OpenGL è utilizzato per il rendering grazie alla sua elevata efficienza nel maneggiare piccoli lotti, conservando ogni modello in una display list che evita l'eccessiva comunicazione. Un vertice in più viene caricato applicando due fonti di luce in due direzioni idealmente localizzate lontano all'infinito.

La tabella seguente mette a confronto le prestazioni di LOD reso consapevole e un metodo completo dettaglio (forza bruta).

Misurazione e impatto visivo :

| Bruta | DLOD | Comparison |
| - | - | - |
| Immagine renderizzata | | | |
| Tempo di rendering | 27.27 ms | 1.29 ms | 21 × reduction |
| Vertici nella scena | 2,328,480 | 109,440 | 21 × reduction |

### LOD gerarchico

Visto che l'hardware è orientato verso un largo ammontare di dettagli, renderizzare oggetti con pochi poligoni (low poly) può rendere la performance quasi ottimale. Questo consente una maggiore efficienza e di sfruttare considerazioni di prossimità.

## Applicazioni pratiche

### Videogiochi

LOD è molto usato nel videogiochi 3D. Gli sviluppatori vogliono offrire ai giocatori un mondo più vasto ma sono sempre contrastati da hardware, frame rate e la natura real-time della grafica video. Con l'avvento dei videogiochi 3D nel 1990, molti videogiochi semplicemente non renderizzavano le strutture e gli oggetti distanti. Solamente gli oggetti vicini potevano essere renderizzati e le parti più distanti venivano gradualmente eliminate, implementando una nebbia a distanza (distance fog). I videogiochi che utilizzano il rendering LOD evitano questo effetto nebbia a possono renderizzare aree più vaste. Qualche esempio evidente di rendering LOD in giochi 3D include Spyro the Dragon, Crash Bandicoot: Warped, Unreal Tournament e il motore di gioco Serious Sam.

### Livello di dettaglio in GIS e modellazione delle città 3D

Il LOD è utilizzato nei GIS e nei modelli di città 3D (3D city models) come un concetto simile. Indica come le funzioni del mondo reale sono state mappate e quanto il modello aderisce alla controparte del mondo reale. Oltre alla complessità geometrica, oltre alla complessità geometrica, altre metriche quali la coerenza spazio-semantica, la risoluzione delle texture e attributi possono essere considerati nel LOD di un modello. Il CityGML standard contiene una delle categorizzazioni LOD più promettenti.

L'analogia di "LOD-ing" nel GIS è riferita come generalizzazione.

### Software di modellazione e rendering

* MeshLab è un tool di lavorazione delle mesh in grado di semplificare accuratamente le mesh 3D poligonali.
* Polygon Cruncher è un software commerciale creato da Mootools che riduce il numero di poligoni di un oggetto senza cambiarne le apperenze.
* Simplygon è un pacchetto di lavorazione delle mesh per il remeshing degli input generali delle mesh in tempo reale delle mesh renderizzabili.
* Vizup è un software per ottimizzare un modello 3D e per la riduzione di poligoni mediante SDK per ridurre la dimensione del modello ed incrementare la velocità di rendering preservando la qualità di visualizzazione.
* Rational Reducer
* Pro Optimizer
* GPure è un software commerciale sviluppato da DeltaCAD che adatta il DMU per i display di tablet e smartphone.
