| Now3D 的个人资料Now3D Live照片日志列表 | 帮助 |
|
10月21日 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
|
|
|