2

Rendering tests

Posted by amicoperry on Sep 4, 2012 in Senza categoria

I collect here some screenshot of my little experiment with deferred rendering:


First rendering with radiosity (Light Propagation Volume by Crytek)

 
0

La perry-camera

Posted by amicoperry on Jan 24, 2010 in Blog

Quest’oggi parliamo della distorsione prospettica nelle camere reali :). Come sicuramente quelle 2/3 persone che leggeranno questo post sapranno, diverso tempo fà ho lavorato in un videogioco di pallavolo, quando questo sport viene trasmesso in tv accade, come in tutti gli altri sport, che venga ri-trasmessa l’ultima azione, come riempitivo di un momento morto o perché particolarmente spettacolare (nella pallavolo il primo caso è il più comune). Nella pallavolo alcune volte il replay fa uso di una telecamera grandangolare piazzata altezza rete… ed ovviamente la trasposizione videoludica non si poteva esimere dall’avere lo stesso effetto distorto e incomprensibile. Dopo un po’ di esperimenti cercando di riprodurre questo effetto, notai che mentre solitamente si proietta la scena 3D su un piano davanti alla telecamera, dove ogni punto è su un piano come se fosse parallelo allo schermo, per ottenere un’effetto distorto dovevo trattare la proiezione come fosse su una sfera, quindi se solitamente abbiamo sx=\frac{x}{z} e sy=\frac{y}{z}  , dove x,y e z sono le coordinate 3d da proiettare e sx e sy i punti proiettati, per la visione a “occhio di pesce” avevo d=\sqrt{x^2+y^2+z^2}  e quindi sx=\frac{x}{d}  e sy=\frac{y}{d}  .

Read more…

 
0

MFC & CUDA

Posted by amicoperry on Aug 2, 2009 in Blog

Io e le MFC abbiamo una lunga storia alle spalle, le ho sempre viste come una cosa che non mi serve, una complicazione in un sistema semplice e bello come quello a messaggi di windows. Alla fine invece bisogna vedere mfc come quello che è: un semplice strato tra i messaggi e un sistema a classi, arcaico, progettato così così, basato su define più che su classi, ma di una potenza senza eguali nella programmazione windows. Basta vedere le librerie codejock o quelle BCGSoft (integrate in visual studio 2008) per vedere cosa si puo’ e cosa fanno con MFC. Read more…

 
4

Trovare un medico di famiglia

Posted by amicoperry on Feb 15, 2009 in Blog

Ciao a tutti, oggi mi sono alzato con uno scopo nobile in mente, prepararmi per andare a fare la richiesta per un medico di famiglia. Ricordo che quando stavo a Padova ci ho messo circa 4 anni per decidermi, el l’ho fatto solo perché avevo un problema serio ad un ginocchio per farlo. Dopo una velocissima ricerca sono arrivato a questa pagina dell’ASL… 13 indirizzi e nessuna idea di dove siano… Google maps risolverà! con pazienza ho trovato l’indirizzo più vicino. Ora dovrei decidere quale dottore, così vado a questa pagina PDF…  28 pagine di girca 15 indirizzi ognuna, per un totale di circa 400 indirizzi, controllo di quale distretto, vado a controllare rimangono più di 200 dottori!! Ma caspieterina! Vuoi vedere che sono capitato nel distretto più popolato di dottori dei 5?!?! Siccome sono nerd e di controllare 200 indirizzi a mano per trovare il più vicino non ci penso proprio, ho cominciato a guardare l’help delle API di google maps… Read more…

 
5

manikin!

Posted by amicoperry on Dec 13, 2008 in Uncategorized

manichin 1.1

AGGIORNAMENTO!! migliorato anti-aliasing e aggiunta ombra. ora sì che è figo :)

AGGIORNAMENTO!! seguendo il consiglio del grande Paolo Calloni ho evidenziato il punto del manichino che si posiziona dov’è il mouse così da essere più chiaro l’utilizzo del programma. L’idea iniziale era di colorarlo in verde o giallo ma poi il mio daltonismo ha preso il sopravvento e l’ho fatto magenta :o

Ecco qua il mio ultimo lavoretto! cominciamo con un pò di note sul programma e di seguito il mio solito sproloquio/Post-morten :)

Come anticipato nel post precedente, questo programma serve a posizionare un manichino 3D, i comandi sono:

Premendo e rilasciando il tasto sinistro del mouse senza muoverlo, selezioni un pezzo. Se invece premi e muovi il mouse senza rilasciarlo , il programma ruota il pezzo selezionato verso il mouse, in modo da fare combaciare l’estremità opposta al centro di rotazione col mouse, ad esempio: se selezioni la coscia il ginocchio tenderà ad andare verso il mouse. Se ti avvicini al centro di rotazione il pezzo si girerà verso di te (o lontano da te se premi control). Se invece quando clicchi col mouse premi il tasto control (non dopo che hai premuto perché abbiamo appena visto cosa fa’) orienti il pezzo selezionato, questo mi è venuto un po’ male, il concetto sarebbe che ruoti su un piano perpendicolare al pezzo e la parte che era orientata verso il mouse continua ad esserlo mentro lo muovi.

Col tasto centrale e la rotellina del mouse cambi la vista, il tasto centrale ruoti intorno al manichino, con la rotella ti avvicini/allontani da lui, se invece premi control, il tasto centrale serve a spostare il manichino nella vista, la rotella cambia la focale della camera (con un simpatico effetto ottico dovuto al fatto di cambiare la distanza in base al cambio di focale).

Direi che questo è tutto, con F1 cambi la visione dell’help a schermo, con F2 attivi/disattivi le collisioni, anche se sono un po’ sperimentali quelle. In teoria dovrebbe essere possibile definire un altro modello da usare al posto del manichino creato da me, usando un’altro file XML di configurazione, ma è talmente complicato che prefirisco non descriverlo qui, forse scrivero’ qualcosa durante le feste, in caso aggiornerò post e zip.

Read more…

 
1

Outline

Posted by amicoperry on Nov 30, 2008 in Blog

Ieri mattina mi sono alzato con tanta voglia di fare… fortunatamente poi è andata scremando…

Quello che volevo fare era un prototipo di posizionamento manichino, un pezzo del programma di paint che ho in mente, in cui renderizzato un manichino (tipo quelli di legno per artisti) e poi col mouse selezioni gli arti e li orienti come più ti piace. L’idea sarebbe questa: click semplice cambi selezione, ruotando tra tutte le possibili in quel punto, click e trascina decidi la direzione dell’attuale arto, e rotellina ruoti più o menol’arto verso la camera. A parole sembra bello, ed è per questo che volevo fare un prototipo.

Come al solito mi sono perso in altre cose, ad esempio ho cominciato col cercare disegni del manichino, una volta trovate vista frontale e laterale, ho cominciato a modellare, dopo un po’ che modellavo mi sono reso conto per l’ennesima volta che modellare non mi piace, mi diverto di più a scriptare i modelli :) . Quindi ho cercato un manichino già fatto, una volta trovato, ho visto che avrei dovuto perdere un sacco di tempo a sistemarlo, quindi mi sono messo a fare altro :D .

Read more…

 
2

Colors!

Posted by amicoperry on Oct 4, 2008 in Blog

Qualche giorno fà un’ex collega oltre che caro amico mi ha passato il link ad un programma per DS, colors! Questo programma mi ha fatto ricordare a quando stavo creando il mio programmino di paint, sempre ispirato da questo amico, inutile dire che come quasi tutti i miei progetti non professionali è stato abbandonato quando l’interfaccia ha smesso di piacermi…

Allora era un pò così: c’era l’area principale di disegno, e questo è stato il primo errore: in un programma figo, come a me piacerebbe creare, l’area di disegno deve essere infinita, poi ai lati c’erano delle schede con linguetta espandibili, ed anche questa si è rilevata una pessima idea, troppo distanti, troppo difficili da raggiungere. Alla fine c’era la selezione colore che mi piaceva, un sistema HLS con cerchio molto standard dove ho speso non poco tempo, e quella del pannello anche se quella è venuta poco dopo in un paint 3D stile MudBox che ovviamente ho avvandonato subito. comunque la selezione era tramite 2 cerchi, uno interno dove il colore era sempre steso uniformemente ed uno esterno a delimitare la fine della sfumatura, più uno slide laterale a scegliere l’opacità del tutto. considerando che poi questa interfaccia appariva nel cursore dove esso era veniva abbastanza bene.

Infatti la cosa dovrebbe essere del tipo, un foglio bianco grande tutto lo schermo dove potere disegnare liberamente, un’interfaccia richiamabile col tasto destro del mouse intorno al cursore, avevo pensato ad un cerchio col menù che si apre verso l’esterno, dal quale poi fare apparire altre finestrelle tipo la lista dei layer che poi possono restare visibili o scoparire o ancora diventare semi trasparenti quando il mouse si allontana da loro. Poi queste finestre dovrebbero potere essere scalabili, così da essere viste più o meno grandi, per potere diventare meno invasive o più chiare. Una novità nel mio paint ideale che deriva direttamente da colors! è il play del disegno, questo permette di creare speed-paint video, di avere un’undo infinito (fino al foglio bianco) e magari di inserire delle modifiche in passato o ancora cominciare un disegno allo stesso modo e poi continuarlo in modo diverso… E questa mi sembra la possibilità più figa di tutte: immaginate di disegnare un’omino, facendo prima le forme basi come riferimento e poi disegnado sopra, beh ecco in futuro potreste creare un disegno con le stesse forme basi e se vorreste fare lo speed-paint avreste comunque la creazione del manichino.

Un’altra cosa che mi sarebbe piaciuta aggiungere nel programma di paint ideale è il manichino di legno, un modello 3D magari un xml con vari obj da posizionare e girare nel disegno e da usare come riferimento per poi disegnarci sopra, è una cosa molto complicata e che non ho visto da nessun altra parte :)

Come tutte le miei idee penso si perderà nel vento causa mancanza di voglia…

Alla prossima idea!

 
0

Una mia skylight

Posted by amicoperry on Sep 14, 2008 in Blog

Tempo fà stavo guardando i vari esempi dell’SDK nVidia, senza cercare niente in particolare, così tanto per passare il tempo. E sono rimasto colpito da un’esempio riguardante l’ambient occlusion. A prima vista non sembra un grande esempio, intanto per avere risultati decenti ci mette molto più del tempo richiesto dal rendering real-time (diciamo 2 sec) e poi il risultato mi sembrea sempre un pò sbagliato…

Questo esempio propone di utilizzare le Shadowmap per calcolare l’ambient occlusion, renderizzando tante volte la scena con le ombre proiettate in diverse direzioni, e poi fa la media dei vari rendering.

Questa tecnica mi ha fatto pensare: e se ci mettessimo pure il calcolo dell’illuminazione dot o qualcosa di ancora più avanzato? e se invece di usare il loro algoritmo buggato per posizionare le luci ne usassi uno migliore che le posiziona tutte equidistanti? e se metessi la possibilità di importare un modello? la risposta a tutte queste domande è “verrebbe fuori qualcosa di figo!” :D

E se conquistassi il mondo!! vabbé… Comunque oggi non avevo molto da fare ed ho cominciato a fare questo programmino, ho creato in fretta un obj con wings3d, ed ho cominciato il progetto, prima ho fatto il programma che caricava il file obj, poi ho messo le ombre e infine l’accumulazione. Il risultato è nell’immagine a finco dove ci sono 281 luci diverse (tutte bianche) per un totale di circa mezzo secondo di rendering.

Un piccolo aneddoto: quando ho cominciato a guardare l’esempio dell’nvidia non avevo mai sentito parlare di accumulation buffer, il quale si è rilevato invece una cosa molto potente di OpenGL. L’accumulation buffer è una porzione di memoria video contenente un buffer a virgola mobile grande quanto l’area di rendering che puo essere usato per fare semplici operazioni su vari rendering. Ad esempio nel mio programma si renderizza la scena illuminata da una luce e poi si accumula divisa per il numero di rendering da fare così come risultato si ottiene una media dei vari rendering. La cosa sorprendente è che questo accumulation buffer c’è sempre stato! o comunque c’è da molto tempo, da molto prima che si parlasse di texture a virgola mobile o comunque di qualcosa che non sia a 8 bit riguardante il rendering!

Questo mi ha fatto pensare a quando diverso tempo fa sviluppai una tecnica per il dof, che consisteva nel renderizzare 4 volte la stessa scena spostando leggermente la camera per poi combinare i 4 rendering (vedi screen a fianco), bhe ricordo di avere un pò penato con renderware per farlo, e invece con l’accumulation buffer sarebbe stato semplice! Oppure il motion blur, sommando il frame precendete e l’attuale si ottiene un motion blur molto bello a peso quasi nullo! Alla fine credo che l’accumulation buffer sia una cosa snobbata che invece poteva permettere di fare tante cose belle… sarà che sotto DirectX non c’è, ho sempre pensato che l’opengl sia un pò borgottato dai grandi della grafica realtime, ma di questo parlerò un’altra volta.

In ogni caso restare sintonizzati per il rendering con skylight velocissimo!

 
1

Sul radiosity real-time

Posted by amicoperry on Sep 1, 2008 in Blog

Sono un pò di giorni che penso a questo problema della computer grafica moderna, ho guardato un pò in giro e oltre ENLIGHTEN non sono presenti sul mercato soluzioni simpatiche, molte alternative sono illustrate in questa pagine qua, che però essendo mantenuta da  Stepan Hrbekè un pò di parte, infatti non nomina ENLIGHTEN probabilmente perché è nettamente superiore al suo. Da notare poi come la sua tecnica sia “Realtime radiosity” mentre le  altre sono chiamate col loro vero nome :). Vediamole un pò:

C’è “Instant Radiosity” una tecnica molto simpatica la quale crea una serie di sorgenti luminose secondarie per simulare la luce riflessa, se poi si crea un sistema stabile che crea ombre per tutte le luci si riescono ad avere risultati davvero notevoli, certo che fare l’ombra di… mettiamo 300 punti luci è un pò fuori dal realtime, il problema è che anche essere illuminati da 300 luci quasi tutte direzionate (le luci in di riflesso non illuminano in modo uniforme in tutte le direzioni) e di cui una possibilmente con ombra si vede che il metodo non è proprio istantaneo…

Poi c’è la griglia di Sphere armoniche, tecnica usata realmente nella grafica real-time, ad esempio da Half-life 2. Essa si basa sulla possibilità di interpolare 2 Sphere Armoniche, così quando si ha la mappa si piazzano un pò di punti in giro per la mappa, si fanno i 6 rendering di cube map, si calcolano i coefficenti armonici e si conservono, poi in fase di rendering, si trovano i hot-spot più vicini e si interpola, et voilà fatto! tecnica molto bella, semplice che dà ottimi risultati e che tiene conto solo delle geometrie e dell’illuminazione statica. Il che non è affatto un limite in FPS.

Delle tecniche che ho visto quella che mi è sembrata più interessante è che probabilmente svilupperò è prorpio quella di Hrbek, il quale si guarda bene dal spiegarla ma che credo di avere capito. La sua prima pubblicazione è stata un paper dove spiegava come creare delle soft-shadow real time, è giusto supporre quindi che essa sia il 50% del suo algoritmo, poi nell’ultima versione della sua demo enfatizza il fatto che ora ha le ombre della luce indiretta e questo è stato il secondo indizio. Quello che penso è che la sua tecnica consista nel illuminare direttamente la scena renderizzando anche le ombre sfuocate e che illumini tutto il resto con un semplice algoritmo di radiosity per vertice, che appunto non fa ombre.

Quello che relizzerei io è un sistema di ombre tramite Percentage-Closer Soft Shadows, una simpatica tecnica nvida che invece di ingrandire la sorgente luminosa ingrandisce la zona da campionare in base alla distanza dell’oscuratore e della sorgente luminosa. Dalla illuminazione diretta e tramite le techine spiegate nel paper “Dynamic Ambient occlusion” calcolare la luce indiretta sulle superfici ed alla fine applicare lo “Screen space ambient-occlusion” per attenuare la luce indiretta e dargli un pò di volume. Dovrebbe venire qualcosa di fico, chissa un giorno se avrò voglia…

 
0

Il mio nuovo sito!

Posted by amicoperry on Aug 30, 2008 in Blog

ecco fatto! Finalmente ho deciso di aggiornare il mio sito… dopo vari e ripetuti inviti da parte da chi mi conosce. :)

Ho visto un collega usare WordPress e mi è sembrato molto bello e facile da usare, visto che non sono un programmatore web ho deciso di usare questo sistema facile per creare un sito bello, moderno e di facile aggiornamento.

Inserirò subito 3 pagine sui miei programmi preferiti: Polycubes, Luce e Aeroplanino e scriverò di tanto in tanto idee ed esperienze sulla grafica 3D e la programmazione.

Buona lettura!!

Copyright © 2008-2014 Amico Perry's Site All rights reserved.
Desk Mess Mirrored v1.6.1 theme from BuyNowShop.com.