1: Non riesco a capire in quale punto della pipeline LOD Chunked la mesh viene suddivisa in blocchi. È questo durante la generazione della mesh iniziale o esiste un algoritmo separato che lo fa?
Non importa. Ad esempio, è possibile integrare il chunking nell'algoritmo di generazione della mesh. Puoi persino farlo in modo dinamico, in modo tale da aggiungere dinamicamente livelli più bassi (ad es. Man mano che il giocatore si avvicina) usando un algoritmo di perfezionamento simile al plasma. È anche possibile generare una mesh ad alta risoluzione dai dati di input o di misurazione dell'altezza dell'artista e aggregarla in tutti i blocchi LOD al momento della finalizzazione dell'asset. Oppure puoi mescolare e abbinare. Dipende davvero dalla tua applicazione.
2: Capisco che una struttura di dati Quadtree viene utilizzata per memorizzare i dati LOD Chunked, penso che mi manca un po 'il punto, ma il quadtree memorizza i dati vertici e triangoli per ogni livello di suddivisione?
Non necessariamente. L'albero memorizza solo informazioni sulla geometria e su come renderla. Ciò potrebbe significare avere un elenco vertici / volti in ogni nodo dell'albero. Più realisticamente al giorno d'oggi, memorizzereste gli handle delle mesh / istanze nella memoria della GPU.
3a: come viene solitamente calcolata la distanza della telecamera. Quando si legge sui quadrifogli, i rettangoli allineati agli assi sono menzionati molto. In questo caso, ogni blocco avrebbe un riquadro di delimitazione delle collisioni per rilevare la telecamera o il giocatore nelle vicinanze? o c'è un modo migliore per farlo? (forse raycast?)
Un'opzione molto economica e semplice è quella di utilizzare la distanza dal punto centrale del blocco e quindi correggerlo. Sai che questa distanza è sempre una sottovalutazione: se il punto centrale è a distanza Z
, significa che metà del pezzo è più vicino di così. Ciò che non sappiamo è tuttavia l'orientamento. Se stiamo visualizzando un pezzo di larghezza w
edge-on, il pezzo più vicino del pezzo sarà a distanza Z-w
. Tuttavia, se stiamo visualizzando l'angolo del primo pezzo, il bit più vicino sarà a distanza Z-sqrt(2)*w
. Se riesci a vivere con questa incertezza (quasi sempre puoi), hai finito. Nota che puoi anche correggere l'angolo di visione usando la trigonometria di base.
Preferisco calcolare la distanza minima assoluta dalla fotocamera al blocco per ridurre al minimo gli artefatti. In pratica, questo significa fare un test della distanza punto-quadrato . È un po 'più di lavoro che calcolare le distanze dai punti centrali, ma non è che farai un milione di questi fotogrammi.
Se riesci a sfruttare il tuo motore fisico per farlo, allora fallo sicuramente, ma vuoi davvero pensarci più in termini di "query a distanza" che di "collisione".
3b: i blocchi calcolano autonomamente la distanza della telecamera?
Dipende molto dal design del tuo motore. Consiglierei comunque di mantenere le foglie relativamente leggere. A seconda della tua piattaforma, solo il sovraccarico di chiamata di avere alcune migliaia di blocchi di terreno eseguono il proprio aggiornamento ogni frame può influire seriamente sulle prestazioni.
4: Ogni blocco ha la stessa "risoluzione". ad esempio al livello più alto la mesh sarà 32x32, ogni nodo suddiviso sarà anche 32x32.
Non è necessario, ma è conveniente se tutti i blocchi occupano la stessa quantità di spazio. Quindi è possibile eseguire la gestione della memoria (GPU) in unità di "blocchi". È anche più facile rimuovere / nascondere le giunture tra due pezzi di dimensioni diverse se una risoluzione è un multiplo dell'altra perché condividono più vertici. (es. 32x32 e 64x64 è più facile da gestire rispetto a 32x32 e 57x57) (grazie Guiber!). Se hai una buona ragione per variare la dimensione della geometria del pezzo, provaci sicuramente.