sabato 31 ottobre 2009

Altre News

Shader Falloff
Continuando il lavoro di traduzione del vecchio codice di N3D (versione VB6) nel nuovo N3D (versione dot.net 2.0) ho implementato il filtro FallOff che nella nuova reincarnazione diventa un Nodo perfettamente integrabile in uno Shader.


Applicazione dello Shader Falloff


Interfaccia
Migliorato lo standard di alcune interfacce che faranno parte dell'editor definitivo del nuovo N3D: treescene, lista dei materiali.


Interfaccia di gestione delle proprietà delle istanze della ScenaInterfaccia di gestione delle proprietà dei materiali della Scena


Finestra di scelta generica
Continuando l'implementazione delle finestre di scelta anche per le ultime tipologie di istanze finora implementate (luci, camere, oggetti, constraint), ho voluto standardizzarne il codice in modo da poterlo applicare facilmente a future nuove tipologie di istanze e un giorno per poter applicare delle immagini di anteprima.


Finestra di scelta di una CameraFinestra di scelta di una Luce


Caricamento File PLY
Implementata una nuova primitiva utile al caricamento dei file PLY. Grazie a questo oggetto potrò caricare degli oggetti particolarmente pesanti (>1M Poligoni) così da poter testare al meglio e ottimizzare molti aspetti del motore 3D.


Rendering di un oggetto in formato PLY contenente più di 7 milioni di poligoni

venerdì 30 ottobre 2009

Miglioramenti del Codice

Shader
Per un miglioramento sostanziale dello standard di costruzione degli Shader ho deciso di eliminare l'oggetto N3DShader e di utilizzare la sola N3DNode per la gestione completamente di uno shader.

Le Primitive
Nella versione VB6 di N3D lo standard di costruzioni degli oggetti primitivi era basato semplicemente sull'utilizzo di alcune funzioni di una classe (N3DPrimitive), una per ogni primitiva, le quali poi tornavano la rispettiva istanza.
Adesso invece grazie alle potenzialità della programmazione OOP ho potuto associare una classe ad ogni primitiva, incorporando le proprietà fondamentali di costruzione (es: il raggio interno del Torus), facilmente modificabili da interfaccia come una qualsiasi proprietà.


Interfaccia di inserimento di una Primitiva nella Scena e rispettive proprietà

Finalmente l'Undo!

Anche in questi mesi con piccoli ma importanti passi lo sviluppo del nuovo N3D è andato avanti, e tra le ultime novità la più sostansaziale è il completamento dell'implementazione dello standard di gestione dell'Undo/Redo.
Questo standard è esclusivamente il frutto di un mio lavoro, dato che sul web non ho trovato del materiale utile a questo scopo.

Lo Standard
Tramite due semplici classi (N3DUndo e N3DUndoManager) si può gestire l'undo/redo di qualsiasi metodo o proprietà o gruppi di essi. Le classi che vogliono utilizzare questo standard devono ereditare dalla N3DUndo e implementare alcuni metodi utili a raccogliere le informazioni principali per poter annullare o ripristinare una azione.
Tramite poi l'istanza globale della N3DUndoManager (g_UndoManager) è possibile ottenere la lista delle azioni salvate, e anche annullare o ripristinare una o più azioni.


Standard Undo/Redo


Prime applicazioni
Applicato lo standard Undo/Redo ad alcune proprietà dell'istanza (selezione, rotazione, posizione, scala e colore) e alla gestione dei materiali (aggiunta, caricamento, eliminazione).


Interfaccia di Undo/Redo

sabato 11 luglio 2009

Finestre di Scelta

Un altro passo nella costruzione dell'interfaccia del nuovo Now3D è l'implementazione delle finestre di scelta, utili all'aggiunta di varie tipologie di entità (es: oggetti, materiali, luci, ecc...).

Shader e Materiali
Le prime finestre di scelta implementate sono quelle per gli Shader e per i Materiali.
La logica di utilizzo di queste due finestre è molto simile. L'area superiore serve a scegliere tra le librerie di materiali (o shader) caricati in memoria, l'area inferiore serve invece a selezionare e caricare un file di tipo materiale (o shader) precedentemente salvato.
Mentre la finestra di scelta dei Materiali mostra tutti i materiali disponibili, la finestra di scelta degli shader mostra solamente gli shader compatibili con la tipologia di connessione richiesta. Quindi se provassimo ad aggiungere uno shader ad una connessione di input di tipo "colore", avremmo la scelta esclusiva tra shader che hanno tra le connessioni di output una connessione di tipo "colore".


Scelta MaterialiScelta Shader

giovedì 9 luglio 2009

File Materiali

Nuovo formato File
Eccomi di nuovo a parlare di XML. Sono passati quasi tre mesi dal mio ultimo post, ma non sono stato certamente rimasto con le mani in mano...anzi!
Volevo portare il formato xml anche nel salvataggio dei materiali, ma la difficoltà nell'applicare lo standard xml (ho sinceramente odiato l'xmlreader!), ha fatto allungare i tempi.
Però, come dico di solito in questi casi: "Ho vinto io!".
Ho dovuto rivedere leggermente il formato dei file introducendo nuovi namespace, una struttura "classes" per dichiarare i namespace utilizzati all'interno del file e una struttura standard "element" al cui interno incapsulare il vero e proprio xml da salvare.


Struttura Standard N3DXML


File Materiali
Così, una volta sciolti gli ultimi "nodi", ho potuto implementare il formato per il salvataggio dei materiali, compreso delle strutture utili a definire i BRDF e le Mappe.
E come per gli shader, grazie agli schemi associati ad ognuna di queste strutture ho potuto definire in automatico tutte le regole di caricamento del file.

martedì 26 maggio 2009

Altre News

Le Rifrazioni RayTracing
Un altro passo del porting di Now3D vb6 alla piattaforma dot.net, è il calcolo delle rifrazioni tramite l'algoritmo di RayTracing.
Esempio di rifrazioneAltro esempio di rifrazione

AA SuperHigh
Ora grazie alla maggiore velocità di rendering ho voluto inserire un nuovo livello di AntiAliasing: il SuperHigh. Grazie all'utilizzo di un numero maggiore di campioni rispetto alla modalità High, si possono ottenere dei risultati ancora più precisi, sempre però a scapito del tempo di rendering.
Interfaccia utile allo studio dell'Antialiasing
Esempio di rendering in modalità AA SuperHigh

Migliorie varie
Migliorato il calcolo del raytracing tramite l'algoritmo Octree per poligoni piccoli, che nella precedente versione rallentava sensibilmente. Nell'esempio qui a fianco un rendering di prova di una mesh contenente 1.6 milioni di poligoni generato in modalità AA High in soli 166 secondi!

Migliorata la resa del rendering scanline di un oggetto trasparente.

  • Implementata una struttura standard per la gestione di uno shader da applicare come mappa ambientale (per ora funzionante solo in modalità RayTracing).
  • Migliorato lo standard delle istanze riguardo le gerarchie.
  • Migliorato lo standard Shape di tipo Path.
  • domenica 24 maggio 2009

    Le Constraint

    Ho deciso di iniziare a implementare il codice utile a definire lo standard per le Constraint.
    Nella mia realizzazione, ho creato un struttura standard di classi che possono aggaccianciarsi a delle connessioni (per esempio quelle delle istanze: posizione, rotazione, dimensione, ecc..), con la possibilità di modificarne o bloccarne i valori seguendo le regole scritte nelle Constraint stesse.

    Prima applicazione: Il Blocker
    La prima Constraint che ho implementato è una funzionalità già presente nel vecchio Now3D versione VB6, e cioè la possibilità di bloccare i seguenti attributi: Posizione, Rotazione, Scala, e Dimensione.
    Proprietà di una Constraint di tipo Blocker


    Prossima applicazione: IK (Inverse Kinematics)
    Ho provato a cimentarmi nell'affascinante mondo delle animazioni implementando una Constraint speciale che funzionasse da catenza di nodi IK. IK o Inverse Kinematics è un metodo tramite il quale poter ad esempio spostare una catena di articolazioni come quella tra la spalla e il braccio e tra il braccio e l'avanbraccio, spostando semplicemente il polso dove si preferisce, sarà l'algoritmo stesso a generare le giuste rotazioni delle due articolazioni in modo da far raggiungere al polso la posizione scelta.
    La mia implementazione funziona solamente su uno dei tre assi di rotazione (lo Z) , ma spero prossimamente di farla funzionare su tutti e tre gli assi.
    Prima versione di una catena IK

    venerdì 22 maggio 2009

    L'Interfaccia

    I nuovi controlli
    Ho iniziato a lavorare sull'interfaccia del nuovo Now3D cominciando con le interfacce per gestire gli elementi della Scena e del Materiale.
    La nuova interfaccia.


    L'Albero della Scena
    Ho voluto ricalcare lo standard di visualizzazione di Now3D implementando una prima versione dell'albero della Scena. Il quale contiene le varie tipologia di istanze (oggetto, camera, luce, ecc...) e la lista dei materiali.


    Le Proprietà della Scena
    Alla selezione di un elemento dell'albero della Scena verrà aggiornata la zona sottostante, che conterrà le rispettive proprietà dell'elemento selezionato.
    Questa volta per implementare un gestore delle proprietà, più che costruirne uno mio, ho preferito (per una questione di tempi di realizzazione) utilizzare il controllo PropertyGrid contenuto nel framework di Dot.Net 2.0. Anche questo controllo come quello che avevo implementato sul vecchio Now3D vb6 è abbastanza facile da utilizzare, si può navigare tra le sotto-proprietà (pulsantino "+") oppure, selezionando una riga, sarà possibile modificarne il valore.


    Albero dello Shader
    Questa sezione contiene una visualizzazione ad albero dello Shader applicato a una mappa del materiale selezionato. Potrete facilmente aggiungere (o rimuovere) nodi allo shader selezionato, oppure caricare Shader precedentemente salvati (vedi file in formato xml).


    Le Proprietà dello Shader
    Analogalmente al funzionamento dell'albero della Scena, anche qui, selezionando un nodo dell'albero dello Shader, si potrà accedere alle rispettive proprietà, con la possibilità di modificarne i valori.


    L’Editor Zoom
    In concomitanza al miglioramento del codice dello standard di gestione degli oggetti editor, ho provato l'implementazione di un oggetto speciale associato alla selezione di istanze di tipo Camera: lo Zoom. Tramite questo editor potrete modificare lo zoom della Camera selezionata spostando semplicemente un cubo posto di fronte ad essa.
    Editor Zoom

    mercoledì 20 maggio 2009

    File in formato XML

    L'XML
    Da quando è “nato” l’XML sono rimasto subito affascinato dalla sua semplicità e versatilità, infatti, grazie all’XML è possibile sia gestire flussi di dati che strutturare veri e propri linguaggi di programmazione. Nella sua prima incarnazione in Now3D, ho voluto cominciare con lo standard di salvataggio dei file.

    File in formato XML
    Ho sempre voluto implementare lo standard XML per il salvataggio e il caricamento delle scene di Now3D, infatti il vecchio formato di salvataggio ci assomigliava molto, ma peccava nell'essere un formato poco standard. Accoppiando file XML a dei file XML Schema (linguaggio descrittivo di file XML) ho potuto gestire in maniera automatica il controllo di validità del file XML stesso. Questo, senza dover scrivere una riga di codice, infatti all'interno del file di schema (anch'esso scritto in XML) sono descritte in maniera dettagliata tutte le strutture del rispettivo file XML.
    L'implementazione è fatta tramite una classe standard (N3DXML), ereditando la quale è possibile facilmente applicare le operazioni base di salvataggio (write) e di caricamento (read) di frammenti XML.
    Lo standard di gestione di questi file XML è strutturato in modo tale da rendere facile la gestione della compatibilità nella costruzione delle varie versioni di uno stesso schema, e nell'associazione di una classe ad un file XML e ai suoi rispettivi schemi.

    File Shader
    Come prima implementazione dello standard di gestione dei file XML ho scelto lo Shader. Ho pensato ad una struttura dinamica che faccia fronte a tutti i tipi di shader/nodi futuri che potrei implementare, quindi ho implementato un elemento base (nodebase) che abbia le caratteristiche basi di un nodo e che possa essere facilmente esteso tramite nuove connessioni (di input o di output) o nuovi attributi.
    Esempio di file Shader in formato XMLEsempio di Schema per uno Shader

    Prossima applicazione: L’Undo
    Una delle tante altre funzionalità con utilizzo intenso dello standard XML è la gestione dell'Annullamento dell'ultima operazione o anche chiamata Undo. L'uso dell'XML riguarderebbe il salvataggio strutturato delle operazioni annullabili. La classe standard che sto finendo di implementare potrà gestire qualsiasi tipologia di operazione annullabile, ad esempio il valore di una proprietà oppure la chiamata ad una routine di elaborazione.
    Un esempio delle operazioni annullabili sono:
  • spostamento di un Oggetto
  • modifica di uno Shader
  • eliminazione di una Telecamera
  • e altro ancora...

  • E' ancora in fase di studio poichè vorrei prima inserire anche il Redo e cioè il ripristino di un operazione annullata, spero di completarlo prossimamente.
    Esempio di funzionalità Undo/Redo

    Ultime dagli Shader

    Gli Shader come contenitore
    Gli Shader sono simili ai nodi, dato che possono gestire una elaborazione dei valori delle connessioni di input ricavando in uscita i valori delle connessioni di output, ma in più possono essere usati per contenere e nascondere una struttura di nodi collegati tra di loro, così da facilitare la gestione per l'utente finale dello Shader stesso.
    Basket Shader

    Nuovi Nodi e Shaders
    BlendTwoColorsMiscela 2 nodi Color in base al valore di un nodo Single
    ColorToSingleConverte un nodo Color in Single
    EnvironmentBitmapShaderCrea una proiezione panoramica in base ad una immagine
    Bump3DShaderModifica la normale della superfice di un oggetto in base ad un filtro Noise
    Bump2DShaderModifica la normale della superfice di un oggetto in base ai valori di una immagine

    mercoledì 13 maggio 2009

    Ci stiamo trasferendo...

    Benvenuti nel nuovo Blog di Now3D!

    Continuerò da questo Blog a darvi gli ultimi aggiornamenti sullo sviluppo del nuovo Now3D versione Dot.Net, cercando di darvi riscontro il più possibile in tempo reale sui lavori in corso.
    Buona lettura.

    Per consultare il vecchio Blog: now3d.spaces.live.com