Di RobyDx (del 16/04/2007 @ 21:41:01, in Direct3D10, linkato 1986 volte)
Il Geometry Shader è la novità più conosciuta e forse più importante di DirectX10. Questo nuovo tipo di Shader si posiziona tra il Vertex Shader ed il Pixel Shader.
La pipeline di DirectX10 esegue questi step:
ogni vertice viene passato al Vertex Shader che restituisce il vertice trasformato
i vertici vengono raggruppati in primitive e passati al Geometry Shader che restituisce la primitiva trasformata
DirectX10 prende la primitiva e per ogni Pixel contenuta in essa calcola il valore interpolato da passare al Pixel Shader (operazione di Rastering)
Il Pixel Shader prende il valore dal rastering e restituisce il colore finale
Il colore viene confrontato con quello già presente ed il risultato viene stampato sul target...
In DirectX10 è possibile utilizzare la texture sia direttamente, cosa non possibile prima, che tramite i sample. La sintassi è molto cambiata quindi conviene leggere di seguito. ...
Di RobyDx (del 10/04/2007 @ 10:24:33, in DirectX9, linkato 1857 volte)
L’animazione dei modelli in 3D è sempre stata una delle caratteristiche più difficili da gestire. Infatti una delle tecniche più usate nei giochi 3D della precedente generazione (esempio Quake 3) per deformare un oggetto era il tweening. Un vero spreco di risorse visto che la quasi totalità del processo veniva fatto a livello software ossia utilizzando quasi esclusivamente il processore. Nel tweening infatti noi estraiamo i vertici dal modello per modificarli nel codice del programma. Inoltre il processo veniva utilizzato anche per la deformazione di semplici oggetti come ad esempio la superficie dell’acqua che segue regole di deformazione ben più semplici di quello di un modello complesso. Il geometry blending è un sistema di deformazione hardware abbastanza semplice da usare che non solo permette di piegare un modello in modo molto leggero per la macchina ma addirittura conferisce un grande morbidezza alle curve. La deformazione di un oggetto viene eseguita attraverso l’uso di più world matrix (le matrici usate per muovere un oggetto) e di valori chiamati weight (pesi)....
Di RobyDx (del 10/04/2007 @ 10:16:15, in DirectX9, linkato 2123 volte)
Il motion blur è una tecnica atta a riprodurre il normale effetto di sfocamento di un oggetto che si muove a forte velocità. Questo permette di dare un maggiore senso di velocità agli oggetti e per questo moltissimi videogiochi usano questo effetto. Se ad esempio un personaggio muove una spada questa sarà più realistica se lascerà una scia dietro di essa (spesso nei videogiochi si esagera volutamente l'effetto per dare l'idea che il colpo sia ancora più potente e veloce). Per una cosa così astratta esistono numerosi approcci ma quelli che tratterò ora saranno il motion blur per ripetizione (tra i più usati), quello per deformazione e quello per accumulo di buffer (il più pesante ma il più spettacolare)....
Di RobyDx (del 10/04/2007 @ 10:09:03, in DirectX9, linkato 2463 volte)
Il billboarding è una tecnica molto vecchia per ingannare l'occhio dello spettatore facendogli sembrare delle semplici immagini 2D delle immagini 3D inserite nella scena. Ad esempio se abbiamo necessità di aggiungere molti alberi alla nostra scena: se l'albero è molto complicato sarà formato da un certo numero di poligoni che moltiplicati per tutti gli alberi renderebbe difficile il lavoro del PC. In questo caso noi possiamo utilizzare semplicemente una foto di un albero ed attaccarla ad un rettangolo. Se non abbiamo necessità di avvicinarci troppo (ad esempio degli alberi in una zona distante) il risultato sarà molto elevato e le richieste hardware minime. Creare un rettangolo con coordinate texture non dovrebbe essere difficile, i problemi sono essenzialmente 2: fare in modo che si veda solo l'albero e non lo sfondo della texture (alphablending) e soprattutto fare in modo che da qualsiasi posizione noi guardiamo il rettangolo questo sia rivolto sempre verso di noi....
Di RobyDx (del 10/04/2007 @ 10:00:51, in DirectX9, linkato 1419 volte)
Come abbiamo visto DirectX usa degli array di vertici per rappresentare gli oggetti tridimensionali. Si suppone quindi che all'interno delle mesh ci siano array di vertici che vengano passati in qualche modo al device. Questo è corretto ma abbastanza approssimativo. La mesh tra i tanti campi che contiene (a noi nascosti) comprende 2 parti in cui sono contenuti i vertici e gli indici. I vertici sapete già cosa sono mentre forse non sapete cosa sono gli indici. Una figura tridimensionale deve essere divisa in triangoli e come abbiamo visto dobbiamo riempire l'array di vertici in modo consecutivo per formare tutti i triangoli. Può capitare quindi che alcuni vertici debbano essere ripetuti. Ad esempio un cubo che ha solo otto vertici deve essere rappresentato con 12 triangoli ossia 36 vertici. Dato che i vertici occupano molta memoria (se contengono anche normali, coordinate texture e così via) si è preferito inserire un array di vertici senza ripetizioni (quindi solo gli 8 ipotetici) ed un array di short che determinano l'ordine con cui prenderli. Questi sono gli indici. Gli indici sono in numero uguali al numero di triangoli moltiplicati per 3 (che vanno da 0 a n-1). Inserendo i valori nell'array di vertici sarà quindi possibile ricostruire i triangoli e quindi l'intera figura. In realtà non si usano quasi mai gli array degli indici se non in qualche raro caso in cui occorra ricostruire la figura. Inoltre i vertici del nostro cubo potrebbero essere un pò più di 8 dato che esistono anche le normali e le coordinate texture ed è quindi necessario ripetere vertici uguali ma con altri componenti diversi. Rimane comunque il principio che non esistono 2 vertici identici nell'array dei vertici. I vertici e gli indici sono memorizzati all'interno di due zone di memoria chiamate vertexbuffer e indexbuffer gestiti dagli oggetti omonimi che possono venir creati dalla mesh. Tramite opportuni metodi potete accedere e modificare i valori in essi contenuti. Questo si rivela importante per milioni di cose come modificare la posizione o le coordinate texture o modificare la struttura dei vertici....
Di RobyDx (del 07/04/2007 @ 10:18:12, in Software, linkato 1106 volte)
A questo indirizzo potete trovare la nuova SDK di aprile di DirectX. Ci sono i soliti miglioramenti e risoluzione bug ed un nuovo esempio nella sezione DirectX10. Importante però, c'è un cambiamento in un paio di funzioni che ora prendono dei parametri in più, come un HRESULT finale a cui potete semplicemente passare NULL ed un fx profile nelle funzioni di compilazione del codice a cui dovete passare "FX_4_0" per digli di utilizzare lo shader model 4.0. Io aggiornerò i tutorial per correggere questi dettagli. Quindi la versione di Aprile sarà la versione "ufficiale" da utilizzare.
Approfitto per fare a tutti voi auguri per una buona pasqua
Di robydx (del 01/04/2007 @ 12:03:14, in Direct3D10, linkato 2165 volte)
DirectX memorizza tutte le sue risorse in buffer di memoria. Abbiamo già visto alcuni tipi di risorsa, come i vertex buffer.
Un tipo ormai fondamentale di risorsa è la texture. Una texture è una risorsa adibita alla gestione di immagini che sono utilizzate come rivestimento per il modello 3D. L’utilità è abbastanza ovvia. Per simulare la forma di un oggetto servono triangoli e se di dovesse rappresentare come triangoli ogni singolo dettaglio di un oggetto ne servirebbero troppi anche per una scheda DirectX10. Per questo si tende a rappresentare molti dei dettagli che non necessitano di uno spessore su di una immagine bitmap che viene avvolta attorno all’oggetto. Così un nostro ipotetico serpente non avrà le squame poligonali ma sarà un tubo con la foto della pelle applicata al modello. ...
Di RobyDx (del 27/03/2007 @ 21:10:20, in English, linkato 2333 volte)
Previous DirectX version worked with fixed pipeline. On the contrary, DirectX 10 it’s based on shaders. A shader it’s a code that describes trasformation rules that from vertex generates the scene. The 2 main shaders are vertex and pixel shader. The first moves vertex from its position in object space and from its position in projection space. The second, starting from output information given by vertex shader, creates all pixels and executes for each one the shader giving them the middle weight, using the output position given by pixel shader....
Di RobyDx (del 27/03/2007 @ 10:34:09, in Direct3D10, linkato 3239 volte)
HLSL
Gli shader come mostrato finora sono scritti in HLSL, un linguaggio simil C molto semplice che permette di poter gestire con estrema libertà i nostri effetti. Far pratica con questo linguaggio è la cosa più importante in DirectX10 visto che ciò che vedremo dipenderà per la maggior parte dalla nostra abilità nello sfruttarlo. In effetti DirectX10 non fa altro che creare e passare risorse per il codice HLSL. Il compilatore come abbiamo visto è incluso nella classe ID3D10Effect ...