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