| Now3D's profileNow3D LivePhotosBlogLists | Help |
Now3D Live21 May Ci stiamo trasferendo...Continuerò a darvi gli ultimi aggiornamenti sullo sviluppo del nuovo Now3D versione Dot.Net dal seguente Blog: now3d.blogspot.com 11 July NURBS e DemoNuove potenzialitàDopo mesi di silenzio, eccomi di nuovo a presentarvi gli ultimi sviluppi di Now3D versione Dot.Net.
Dall'ultima volta ho voluto aggiungere nuove funzionalità che, spero, daranno un qualcosa in più a Now3D.
Ed ora veniamo alle news.
Le NURBSUna delle strutture tridimensionali che mi hanno sempre incuriosito sono le superfici parametriche.
Fanno parte di questa tipologia: le NURBS, le B-spline e le Bezier.
Tempo fa studiai le curve Bezier con dei buoni risultati, adesso ho messo in pratica quello che appresi di queste curve e l'ho ampliato in termini tridimensionali.
Esistono vari algoritmi di visualizzazione delle superfici parametriche, da quelli che suddividono la patch in poligoni a quelli basati sull'intersezione di un raggio con la superficie (Raytracing), per adesso, ho scelto quella più semplice da implementare, anche se non la più veloce, la tessellazione (tesselation), dove suddivido ogni singola patch in una griglia N*M dove N e M definiscono il dettaglio con il quale sarà resa la patch, maggiore è il dettaglio e più morbida sarà la silhouette della patch. Massive DemoCome promesso la volta scorsa, ho implementato la prima Demo di Now3D.Net.
Contiene molte delle funzionalità di Now3D.Net, e per l'occasione ho voluto inserito il rendering RayTracing di un oggetto molto particolare.
Lo shape MeshInstancePer questo motivo ho voluto implementare uno shape speciale di tipologia mesh ai quali vertici è possibile applicare ulteriori shape di qualsiasi tipologia. L'implementazione è stata più complessa di quello che pensavo, ma i risultati valgono la fatica. Ho dovuto inserire un limite all'utilizzo di questo particolare Shape, non si potrà istanziare più di una volta lo stesso Shape. Comunque, prossimamente, renderò questa struttura ancora più flessibile, e spero che in futuro di poterla utilizzare per simulare i peli (Fur) o per estendere una pianta più volte fino a formarne delle distese. La DemoPotete scaricare la demo da questo indirizzo: http://www.now3d.it/files/N3DNetMassiveDemo.msi
Questa demo è incentrata su una nuova potenzialità di Now3D.Net, e cioè la possibilità di renderizzare miliardi di poligoni, un qualcosa di impensabile per il vecchio Now3D versione VB6.
In questa modalità vedrete la renderizzazione di uno shape MeshInstance dove lo shape principale è una teiera a 8 suddivisioni e gli shape "figli" sono anch'essi delle teiere ma a a 128 suddivisioni. Il numero di poligoni presenti in questa scena sono ben 1.618.577.408! Dopo aver premuto il pulsante "Render", si avvierà una fase durante la quale verranno effettuati dei precalcoli atti a velocizzare il rendering finale. Una volta conclusa la fase di precalcolo, potrete testare con mano le potenzialità del nuovo Now3D. I tempi di rendering (teiera in posizione di default e finestra nelle dimensioni iniziali) sono 34 sec su un PC equipaggiato di una CPU E8400 3GHz e 3GB di Ram. Altre NewsI Riflessi RayTracingIl risultato potrebbe sembrare poco fotorealistico, e il motivo principale sta nella mancanza di vari algoritmi di fall-off (caduta). Ottimizzazione della memoriaCon l'occasione di rivedere da zero il motore grafico di N3D ho deciso di ottimizzare l'occupazione di memoria in caso del RayTracing di shape di tipo Mesh, ottenendo ottimi risultati.
Ho rivisto completamente le strutture dati che utilizzavo per appoggiare dei dati di precalcolo, queste le usavo per velocizzare il rendering, ma adesso, grazie all'algoritmo octree, non sono più necessarie.
Una scena formata da 1792 oggetti-istanza da 903.224 poligoni ciascuno per un totale di 1.618.577.408 poligoni occupa appena 250MB di ram (vedi la Demo Massive)!
Alla prossima!
Giuliano Cornacchiola
Stato Attuale lavori
21 October Shader e RayTracingIl RayTracing mette la quinta!!!Devo ammettere che stare al passo con i programmi professionali non è facile! Superano Now3D su moltissimi aspetti: velocità, numero di poligoni gestiti e qualità del Rendering.
Vorrei rendere il nuovo Now3D un prodotto il più possibile simile ai vari programmi professionali, e devo dire che con questi ultimi passi inizio finalmente a intravedere una luce.
Infatti, in questi ultimi mesi di programmazione ho voluto affrontare uno dei problemi maggiori della versione VB6 di Now3D, e cioè la lentezza.
Così ho velocizzato il RayTracing!
Ma prima parliamo nuovamente dei materiali... I MaterialiLa volta scorsa vi ho anticipato di come stavo strutturando i Materiali, questa volta vi presenterò il lavoro fatto per rendere il motore di Now3D più flessibile e più potente.
Ho implementato una struttura ad oggetti per poter gestire nella maniera più flessibile nuovi Materiali, Mappe, Shader e BRDF.
Il Materiale potrà disporre di mappe standard o volendo potrà contenerne di nuove; avrà due proprietà fondamentali per identificare il modo con cui la luce si diffonde (BRDF Diffusivo) e si riflette (BRDF Speculare).
Le MappeHo creato una classe ereditabile per poter gestire nuove Mappe con poco codice. Il loro utilizzo principale è quello di fornire tramite gli Shader i valori delle variabili principali utilizzate nei Materiali e nei vari BRDF.
I BRDFGli algoritmi di BRDF servono a simulare in maniera realistica il modo in cui la luce "rimbalza" sui materiali.
La classe Materiale ne implementa due tipi principali: Diffusivo e Speculare. Il primo serve per definire il modo con il quale la luce viene diffusa una volta giunta su una superfice e il secondo il modo con il quale la luce riflette sul materiale.
Per ora ho implementato l'Anisotropic, il Phong, il Blinn e l'Oren-Nayar. Il codice è strutturato in modo da poter gestire in futuro anche altri BRDF più complessi.
Gli ShaderGli Shader sono le strutture a oggetti che mi hanno impegnato di più, ma che più mi hanno dato soddisfazioni.
Sono formati da classi nodi (N3DNode) connessi ad altri nodi tramite punti di aggancio compatibili (N3DConnection), in automatico i Nodi possono connettersi solo con altri Nodi compatibili (vedi frecce nell'immagine seguente).
Tramite queste classi Nodi e Connessioni è possibile creare Shader formati da un numero di Nodi illimitati.
Su Now3D versione VB6 avete già avuto a che fare con i nodi e lì si chiamavano Filtri, erano molto meno flessibili e potenti degli Shader.
Comunque, gli stessi Filtri saranno implementati un pò alla volta anche su Now3D versione Dot.Net.
Ray TracingInizialmente ho voluto implementare il RayTracing solo per poterne testare la velocità rispetto alla precedente versione di N3D.
Per prima cosa ho implementato un'interfaccia alla classe N3DShape per dare la possibilità di associare un algoritmo di intersezione "raggio-superficie" a qualsiasi shape.
Gli algoritmi di intersezione che ho implementato finora riguardano gli shape: Mesh e Sfera Perfetta.
La velocità di elaborazione che ho misurato era molto più bassa rispetto alla versione in VB6, anche se non avevo ancora implementato lo stesso algoritmo di spatial subdivision già presente sul vecchio Now3D. Questo algoritmo avrebbe sicuramente ribaltato il risultato, ma non mi sarebbe bastato. Volevo da questo Now3D uno strumento snello così da poter essere utilizzato per il rendering di scenari più complessi di semplici sfere, cilindri o tori; così ho raccolto la sfida e ho implementato l'algoritmo dell'Octree.
OctreeCome stavo dicendo, il risultato ottenuto con il RayTracing non mi aveva soddisfatto, così dopo anni di esperienza nella programmazione tramite tracciamento di raggi (RayTracing), mi sono deciso ad implementare un vero algoritmo di velocizzazione del RayTracing.
Devo dire che i risultati sono fantastici!
Come potete notare dall'immagine seguente, l'attivazione dell'Octree ha sbaragliato completamente il vecchio N3D!
Lo scotto da pagare sta nel tempo di precalcolo dell'Octree e nel quantitativo di memoria utile per il suo salvataggio.
Ma più sono i controlli di intersezione da elaborare e più il tempo di precalcolo iniziale incide di meno fino a diventare tutto tempo guadagnato.
Quindi, dato che i benefici migliori si traggono dall'aumento del numero dei raggi utilizzati per il calcolo del rendering, allora qualsiasi algoritmo che fa uso intensivo dei raggi di RayTracing ne trarrà beneficio (esempio: AntiAliasing, RT Distribuito, Final Gathering, Ombre Sfumate, ecc...).
AAHo voluto implementare anche gli algoritmi di AntiAliasing, così da testare meglio i benefici della velocizzazione tramite Octree.
Di conseguenza, anche con l'AntiAliasing abilitato, il RayTracing risulta essere veloce "quasi" quanto quello di programmi grafici professionali.
Come si può notare dal grafico seguente:
Le DirectX su PocketPCLa volta scorsa vi ho parlato della prima implementazione delle DirectX su Now3D, adesso vi spiego la sua applicazione anche nella versione per PocketPC.
Da quanto ho capito, non esiste la possibilità di implementare le DX sui PocketPC con Windows Mobile 2003, ma solamente su quelli che montano sistemi operativi WM5 o WM6.
Il risultato è sicuramente migliore della versione che non usa le DX, il quale utilizzo era impossibile per via della lentezza, ma non esaltante. Infatti, ruotare un semplice Toro a 16 suddivisione in modalità Gouraud risulta, comunque, poco fluido. Spero di trovare il modo di offrirvi una buona, e usabile, libreria grafica 3D anche per il palmare...chi vivrà vedrà!
Altre NewsTipi di LuciImplementate due tipologie fondamentali di Luci: Puntiformi e Direzionale a Cono; per adesso sono state strutturate in maniera analoga a quella della versione VB6, però ho in mente di strutturarle meglio e a oggetti.
Oggetti EditorMigliorati gli oggetti editor di tipo Move e Quaternion.
Coming SoonPer la prossima volta spero di riuscire a preparare una demo, così da potervi far apprezzare al meglio tutte le features implementate finora su Now3D versione Dot.Net.
Alla prossima!
Giuliano Cornacchiola
Stato Attuale lavori
09 March N3D e le DirectXFinalmente l'accelerazione Hardware!!!Agognata da chiunque utilizzi un programma di grafica 3D, l'accelerazione Hardware ci da la possibilità di sfruttare le potenzialità della nostra Scheda Video.
Dopo tante richieste, l'appurata limitazione della grafica tramite GDI+ e la complessa implementazione del Framework 3.0, ho finalmente implementato una prima versione di accelerazione tramite le DirectX.
Ed ora passiamo alle tante novità di questa volta.
ScanLineL'ultima volta vi descrissi la modalità Flat in ScanLine, adesso parliamo delle ultime modalità ScanLine implementate: Gouraud e Phong.
Per tutte e due le modalità ci sono enormi miglioramenti dei tempi d'elaborazione rispetto alla versione VB6 di Now3D. Per la modalità Gouraud miglioramenti del 600%, mentre per la Phong miglioramenti "solo" del 300%!
Le DirectXA dire la verità iniziai provando ad implementare le OpenGL. Avevo capito come farlo, ed avevo trovato anche delle DLL x Dot.Net abbastanza semplici nell'uso. Ma, dopo settimane di test e poligoni che non si visualizzavano bene (la causa mi è ancora oscura), ho rinunciato.
Così, ho voluto dare retta a chi mi ha sempre consigliato di implementare le DirectX (vero MaxD?
Ho cercato su internet degli esempi di codice, ed ho iniziato a lavorarci.
Da subito ho notato una migliore risposta ai comandi dati via codice, ed anche una maggiore velocità rispetto alle OpenGL.
L'implementazione riguarda la classica modalità Gouraud, mentre per quanto riguarda la Phong (Pixel Shader) la vedo più difficile essendo questa modalità implementabile tramite dei shader scritti in un linguaggio poco pratico (simil assembly).
Ora veniamo al punto cruciale: i Tempi.
Ho notato subito che la scrittura dei poligoni a video tramite le DirectX è immediata, quello che continua a pesare di più è il motore di Now3D.
Con tutte le ottimizzazioni possibili, sono arrivato ai seguenti tempi:
(i test sono stati fatti utilizzando una NVidia 7600GT in modalità AA 4x)
Per quanto riguarda l'applicazione delle DirectX in Now3DPocket (Now3D per Palmare), ho già studiato il codice e lo implementerò sicuramente in un futuro non molto lontano.
I MaterialiSto iniziando anche ad implementare le strutture principali sulle quali si baserà la gestione dei materiali. E' basata su classi ereditabili e con interfacce d'immediato utilizzo, così da renderla facilmente espandibile.
Tra i materiali di default che ho implementato ci sono: Phong, Anisotropico (Ashikhmin), Blinn-Oren Nayar, Glass.
Manca ancora tanto per arrivare alla stessa flessibilità della struttura a materiali e mappe di Now3D VB6, però con molta pazienza sarà implementato tutto e pure meglio.
Prima Demo!!!Per concludere, vi invito a scaricare la prima demo riguardante Now3D.Net e le DirectX al seguente indirizzo: http://www.now3d.it/files/N3DInterface.exe.
Non aspettatevi però meraviglie, è solo una semplice demo per mostrare l'interazione tra il mouse e gli oggetti (passando sopra i cubi cambiano colore e cliccandoci sopra ruotano casualmente) e l'uso delle DirectX (provate a selezionare la casella di spunta: "DirectX").
Se avete qualche idea per abbellire la demo (senza esagerare con le pretese però
Alla prossima!
Giuliano Cornacchiola
Stato Attuale lavori
16 November Shape & ScanLineBuone nuove o Cattive nuove?Ciao a tutti,
proprio adesso che stavo ottenendo i primi frutti della programmazione DotNet Framework 2.0 applicata a Now3D, è uscito il Framework 3.0. La differenza tra questo nuovo Framework e quello precedente è sostanziale! L'implementazione di una qualunque compatibilità tra la versione attuale di Now3D Dot.Net e questo nuovo Framework sembra decisamente complicata.
Quindi, ho deciso di continuare (per adesso) a programmare con il Framework 2.0, comunque quando deciderò di convertire Now3D nel Framework 3.0 avrò almeno il beneficio di una struttura di classi già bella e fatta (a meno che la Microsoft non decida di cambiare anche il linguaggio VB.Net
Ed ora parliamo delle novità.
La MemoriaUna rivisitazione nel modo con cui memorizzo i vertici e di come li trasformo nelle coordinate World e poi Camera, ha portato ad un risparmio nell'uso della memoria anche del 300%.
Gli ShapeDurante il primo intervento vi avevo parlato delle istanze, cioè una astrazione di tutti gli oggetti che devono essere manipolati o visualizzati sullo schermo (oggetti, telecamere, luci, ecc...), a queste istanze si può associare una Mesh (cioè un insieme di triangoli) e la stessa mesh si può associare a una o più istanze, così da ottimizzare l'uso della memoria.
Ora ho deciso di astrarre anche la classe mesh che di fatto è diventata lo Shape.
Lo shape potrà essere di tipologie diverse ed ogni tipologia potrà avere un modo differente di ottenere l'HitTest (metodo per sapere se il mouse sta dentro o fuori l'oggetto visualizzato sullo schermo), di essere visualizzata in Wireframe in ScanLine ed in RayTracing.
Per ora ho sviluppato due tipologie principali di Shape: le Mesh e i Path.
Tramite le mesh si possono costruire gli oggetti contenenti poligoni, per esempio le primitive della sezione "Poligoni" creabili con la vecchia versione di Now3D.
Invece grazie ai Path è possibile implementare le visualizzazioni delle Telecamere, delle Luci, e delle primitive come quelle della sezione "Funzioni Matematiche" sempre della prima versione di Now3D.
In definitiva tramite questa classe sarà facilmente possibile aggiungere nuovi modi di visualizzare un qualcosa nello schermo, penso ad esempio ad una possibile e futura implementazione delle superfici NURBS.
Lo ScanLineRicordate le modalità di Anteprima della prima versione di Now3D? Flat Shading, Gouraud Shading, Quick Phong Shading e Z Phong vi ricordano qualcosa? Si? Perfetto perchè sto iniziando a lavorare proprio su queste modalità di visualizzazione.
Ho cominciato (naturalmente) dalla più semplice il Flat Shading, e come potete vedere dalle immagini allegate anche con discreti risultati.
I primi risultati sono sorprendenti! In alcuni casi (dipende dalla grandezza dello schermo e dal numero di poligoni dell'oggetto) si possono ottenere miglioramenti nelle prestazioni del 500% su sfere con circa 4000 poligoni e perfino del 1600% con 65000 poligoni, rispetto alla vecchia versione di Now3D. E sopratutto riesco facilmente a muovere 500.000 poligoni!!!
Una novità delle modalità ScanLine è la possibilità di visualizzarle in AntiAliasing, l'immagine in allegato della versione di Now3D.Net per PC ne è un valido esempio.
Siamo arrivati alla conclusione di questo intervento e vi chiedo gentilmente di essere più interattivi.
Se avete richieste o dubbi non aspettate. Chiedetemi!
Alla prossima!
Giuliano Cornacchiola
P.S.: Mi dispiace per tutti coloro che mi spediscono e-mail e che non hanno ancora ricevuto una risposta, ma tra il lavoro, il programmare Now3D, lo scrivere in questo Blog, e lo stare in famiglia, il tempo rimanente è diventato veramente poco.
Abbiate pazienza, prima o poi rispondo a tutti.
Stato Attuale lavori
|
Elenco File
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|