Cosa sono le trame 3D?


31

Google mi ha deluso, non sono riuscito a trovare nulla di informativo. Quindi forse GameDev può :).

  • Cosa sono le trame 3D?
  • Quando sono usati?
  • Costi di prestazione?
  • Come vengono memorizzati?

Ho molte idee vaghe, ma nessuna definizione "definitiva".

Qualsiasi riferimento ad esempi o tutorial è apprezzato, specialmente nel rendering di sistemi di particelle tramite trame 3D.


Non sono sicuro che cosa stai chiedendo sia una cosa. Intendi la mappatura normale e irregolare per simulare la variazione della superficie su aree "piane"?
coderanger

2
Penso che significhi più GL_TEXTURE_3D, ecc.
Luker

1
Inoltre, vedi questa domanda: come funziona la mappatura delle texture UVW? (e le sue risposte).
George Duckett,

Risposte:


34

La trama 3D funziona come una trama normale. Ma è veramente 3D. Le trame 2D hanno i raggi UV, il 3D ha i raggi UVW (dovevi usarli in modo appropriato). I cordoni di trama sono unità cubo (0 - 1, 0 - 1, 0 - 1).

Possibile utilizzo :

  • effetti volumetrici nei giochi (fuoco, fumo, raggi di luce, nebbia realistica)
  • luce cache per l'illuminazione globale in tempo reale ( CryEngine per esempio)
  • scientifico (le scansioni MRI, CT vengono salvate in volumi)

Prestazioni :
uguale alla trama normale - super veloce (accesso alla memoria più veloce in gpu). Memorizzato nella cache per i thread e ottimizzato per la situazione quando i thread vicini (pixel shader) cercano valori vicini.

Può essere letto come campionamento lineare o usato (interpolazione trilineare nativa. Interpolazione bi-lineare Eq in trama 2D).

Sono memorizzati come una serie di trame 2D.

Mipmapping su texture 3D:
inserisci qui la descrizione dell'immagine


14

Le trame 3D o 'Trame di volume' sono una serie di trame normali disposte come sezioni, come un mazzo di carte. Questi sono usati nel rendering volumetrico che spesso prende dati dal mondo reale come le scansioni CT e poi li manipola. Nei giochi e nella grafica a volte è per effetti volumetrici come il fumo in cui si scambia la flessibilità di un sistema di particelle con il costo fisso e il calcolo facile (e facilmente parallelizzabile) di una trama di volume. È davvero facile in una trama di volume trovare i vicini più vicini, ma questo può essere un problema è un sistema di particelle più tradizionale costituito da punti sciolti.

Inoltre, alcuni oggetti complessi traggono vantaggio dall'utilizzo di trame di volume, come l'erba:

Il fumo di Nvidia in una scatola è un ottimo esempio:

http://www.youtube.com/watch?v=9AS4xV-CK14

Inoltre, il rendering della dispersione della luce è più semplice quando si dispone di un volume da renderizzare


7

Oltre alle risposte esistenti, mi piace anche il modo in cui le trame 3D possono essere create proceduralmente (in realtà ha più senso di una trama procedurale 2D), come rumore e frattali che forniranno dettagli di trama buoni e non deformati a qualsiasi superficie angolare senza avere per selezionare un modello di proiezione (UV, planare, cilindrico, sferico e così via).

Invece di campionare un livello bitmap nello spazio 3D, ottieni un valore distinto per ogni punto nello spazio 3D con un algoritmo di base - che in pratica ti dà una risoluzione di trama infinita e nessun problema con trame allungate su poligoni angolati. Sono trame 3D o piuttosto ombreggiature di superficie per me ^^

In realtà sono abbastanza stanco di tutto lo snuff texture delle bitmap nello sviluppo del gioco, quando voglio sporcare una nave spaziale, voglio applicare alcuni strati di formule di rumore e non dover dipingere una bitmap a risoluzione limitata. Un vecchio appassionato di 3D può sognare, no;)

In questo momento, pre-infornare queste dolci soluzioni di superficie per film 3D di vecchia scuola in colori, bitmap UV normali e speculari sono l'unico divertimento che ottengo e mi sento fastidiosamente limitato. La scena demo (come sempre) tende a (pre) generare trame proceduralmente per il 3D in tempo reale, ma è difficile trovare buoni strumenti per supportare questo flusso di lavoro dalla progettazione al runtime. La maggior parte degli approcci procedurali degli sviluppatori di giochi sembra riguardare la generazione di mesh. Ti chiedi quanto la pipeline di shader con l'aiuto di una mappa di profondità / rendering differito potrebbe gestire alghe del rumore 3D di vecchia scuola?

... piuttosto che cercare di capire come mappare parametricamente un'immagine di trama sulla superficie della tua forma, la natura volumetrica delle trame basate sul rumore ti consente semplicemente di valutarle nelle posizioni (x, y, z) nel tuo pixel shader. In questo modo, stai effettivamente scolpendo la tua trama da un materiale solido, che è spesso molto più semplice rispetto al tentativo di elaborare una ragionevole mappatura parametrica non distorta.

Questo tipo di texture procedurali volumetriche basate sul rumore sono state a lungo i pilastri dei film, in cui gli shader non richiedono prestazioni in tempo reale ... tutti i film con effetti speciali oggi fanno un uso pesante di shader procedurali basati sul rumore ... è fortemente dipendente sull'ampio uso della funzione noise all'interno dei pixel shader scritti in lingue come Pixar's RenderMan. Con una buona implementazione della funzione noise disponibile per l'uso in tempo reale nelle GPU, non vedo l'ora di vedere alcune delle idee visive emozionanti dei film incorporati nella prossima generazione di intrattenimento interattivo sul desktop e sulla console. http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html


Lettura molto interessante! Ho problemi a visualizzare cosa intendi nel tuo secondo paragrafo.
deceleratedcaviar

Forse potrei fare un diagramma. Quello che voglio dire è che invece di campionare una bitmap, il colore (o qualunque cosa tu stia cercando) è semplicemente deciso da un algoritmo di rumore. In questo modo non è necessaria l'interpolazione tra i pixel bitmap (poiché si è tenuti a campionare non su una posizione di pixel 1x1 perfetta) e la risoluzione diventa in teoria infinita. È un po 'come calcolare effettivamente l'interesse per un tasso di interesse specifico invece di utilizzare una tabella di ricerca precalcolata in cui vi sono determinati passaggi / intervalli (= risoluzione bitmap).
Oskar Duveborn,

Dopo aver letto l'intero articolo di riferimento. Ho una comprensione molto migliore, ma penso che ref. le immagini andrebbero a beneficio di entrambe le parti: l'incerto e il tl; dr. :)
deceleratedcaviar

0

I motivi di trama 3D vengono applicati ai voxel di un corpo volumetrico in modo molto simile a come i motivi di trama 2D vengono applicati ai pixel di un poligono 2D. Ecco un esempio di trama volumetrica 3D in JavaScript (richiede WebGL):

http://kirox.de/test/Surface.html

premi [v], ruota il corpo e cambia il gradiente della trama generata con la rotellina del mouse

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.