Di RobyDx (del 05/03/2007 @ 16:20:47, in DirectX9, linkato 3275 volte)
La più grande innovazione che directX8 aveva portato è stata senza dubbio l'introduzione della tecnologia shader. Il poter intervenire direttamente sulla renderizzazione grafica dei vertici e dei pixel direttamente tramite accellerazione hardware ha portato a nuovi ed impensabili effetti grafici. DirectX9 ha poi aggiunto nuovi versioni di linguaggio assembler ma subito si è notata una cosa: il linguaggio assembler usato nei vertex e pixel shader doveva essere sostituito con un linguaggio più vicino ai programmatori. Nasce HLSL, un linguaggio simile al C per la programmazione di vertex e pixel shader. Non esiste paragone tra la semplicità di codice C rispetto al codice assembler. Il codice HLSL viene caricato in maniera simile a quello assembler ed utilizzato in maniera perfettamente identica. Descrivere in un solo tutorial la ricchezza di un linguaggio così avanzato rispetto al codice assembler è cosa abbastanza difficile. Introdurrò quindi la base della sintassi e le istruzioni. Solo la pratica aiuterà ad impadronirsi della tecnica. ...
Di RobyDx (del 06/03/2007 @ 11:40:12, in DirectX9, linkato 1736 volte)
L'evoluzione della computer grafica in real time ha un solo nome: Shaders. DirectX9 infatti si è rinnovato maggiormente sulla gestione shaders introdotta in DirectX introducendo nuove versioni del linguaggio ASM (le versioni 2.0 e 3.0) e l' HLSL, il linguaggio simil C che semplifica notevolemente la vita del programmatore eliminando il complesso codice assembler. L'ultima novità fondamentale sono gli Effects. L'effect è una tecnologia che permette di integrare in pochi passaggi complicatissimi effetti shaders all'interno delle applicazioni....
Di RobyDx (del 25/03/2007 @ 14:57:55, in DirectX9, linkato 3074 volte)
Come abbiamo visto il backbuffer è una grossa superficie (diciamo una matrice grande quanto lo schermo) che contiene l'immagine che stiamo creando man mano che disegniamo cose; ogni volta che disegniamo qualcosa Direct3D non fa altro che cambiare il valore numerico dei pixel interessati dal disegno con quelli della nuova immagine. Il tutto quindi si riduce a numeri. Abbiamo anche visto che la seconda superficie è il depth buffer (detto anche Z buffer) responsabile delle profondità: quando viene disegnato un modello Direct3D controlla sullo Z buffer la profondità di ogni pixel e solo se la profondità è minore (il pixel del modello 3D si trova avanti a quelli precedentemente disegnati) fa modificare sia il backbuffer che il depth buffer. Lo stencil buffer è la terza superficie speciale di DirectX ed in qualche modo opzionale visto che si potrebbe benissimo vivere senza. Per spiegare il funzionamento farò un esempio. Immaginate di renderizzare un cubo. Nelle zone interessate dal rendering vengono modificati i pixel del backbuffer ma possiamo tenere in memoria il fatto che in quei punti è stato disegnato un oggetto. In questo caso diciamo allo stencil buffer di memorizzare questo fatto. Ora abbiamo sulla superficie stencil dei valori che ci indicano dove è stato disegnato qualcosa oppure no. Abbiamo creato una maschera. Finchè non puliamo lo stencil possiamo dire a DirectX di non disegnare i quei punti o di disegnare solo lì....
Di RobyDx (del 25/03/2007 @ 15:12:22, in DirectX9, linkato 2967 volte)
La stencil buffer permette, come ho detto, la possibilita di creare maschere per delimitare con precisione delle zone dello schermo in cui renderizzare. Uno degli infiniti usi è la gestione delle ombre volumetriche. Un ombra si dice volumetrica se un oggetto la proietta non solo a terra ma su tutti gli oggetti che si trovano in ombra. Una cosa normale in natura ma molto difficile in computer grafica specie se in real time. Giocate a qualche gioco in terza persona e osservate l'ombra a terra: questa nella maggior parte dei casi si proietterà perfettamente al suolo e su un muro ma non su nemici che potrebbero trovarsi nel cono d'ombra. In questo caso l'ombra non è reale ma solo approssimata. Una vera ombra invece dovrebbe coprire tutti gli oggetti. Lo stencil permette proprio questo.
Di RobyDx (del 10/04/2007 @ 10:00:51, in DirectX9, linkato 1420 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 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: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: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 25/07/2007 @ 11:02:15, in DirectX9, linkato 3262 volte)
Lo skinning mesh è attualmente il migliore sistema di animazione esistente. Lo skinning unisce la possibilità di deformare gli oggetti come il tweening ma migliorando la qualità tramite curve più morbide e soprattutto lasciando il lavoro alla velocissima GPU della scheda video. DirectX offre pieno supporto allo skinning anche nel formato X in cui è possibile creare delle mesh in modo che siano animate tramite questo sistema e diversi software offrono la possibilità di creare modelli animati in skinning (esempio il 3D Studio Max). Utilizzare lo skinning non è semplicissimo per due motivi: 1. Non esistono classi che fanno interamente il lavoro di caricamento e gestione; 2. I modi con cui vengono salvati le animazioni in skinning sono spesso diversi a secondo del programma e del file; Entrambi devono venire risolti da noi....
Di RobyDx (del 25/07/2007 @ 11:54:55, in DirectX9, linkato 3025 volte)
Ora che sappiamo come caricare un modello in skinning mesh non ci resta che crearlo. Impostare una animazione in skinning è molto semplice, il difficile semmai è creare un bel modello 3D da inserire nei vostri giochi ma l’abilità artistica non rientra negli obiettivi di questo tutorial. Create un modello 3D. Ora dovete aggiungere le bones ossia le ossature del modello....