Tuesday, March 11, 2008

Tools di sviluppo

Oggi ho scoperto che sono uscite due importanti novità per lo sviluppo di progetti 3D che usano directx.

- Visual Studio 2008 Express (C++ nel mio caso). Assieme al compilatore è possibile installare anche una libreria che si chiama Dark Games, che a quanto pare permette la realizzazione di giochi in maniera semplice. Dubito mi servirà in quanto non mi è mai piaciuto appoggiarmi a librerie di terze parti per lo sviluppo, ma è comunque interessante darci un'occhiata anche perchè ha un sacco di esempi, textures, modelli ecc.. Non appena ci riesco visto che fin'ora l'installazione ha sempre dato esito negativo nonostante abbia tutto cio' che necessita per farla girare.

- DirectX SDK di marzo 2008. A quanto pare, oltre a contenere le dx10.1 che non mi interessano, han migliorato PIX, utility per eseguire il debugging, specie degli shaders (anche questa, non appena capiro' come funziona...), e immagino sistemato un po' di bachi.

Entrambi i prodotti, ricordo, sono gratuiti, quantomeno per uso personale.

Monday, March 10, 2008

Tributo a Elite

Prima di chiudere però permettetemi un piccolo tributo al grande Elite di David Braben.
Fatto tutto con l'engine di Tau Ceti.
Non farà urlare al miracolo ma è tutta roba genuina

Mesh 2


Questi ultimi giorni son trascorsi nel tentativo di fare un pò di pulizia nel codice, ma soprattutto nella battaglia contro un paio di bachi parecchio infidi che mi mandavano in crash il gioco.
Ho combattuto parecchio, perchè i malefici erano visibili solo quando attivavo le directx di debug, mentre nel normale funzionamento pareva andare tutto bene. Alla fine trattavasi di classico "puntatore" che andava dichiarato invece come "puntatore di puntatore", ma la caccia è stata piuttosto faticosa.
Inoltre ho ridisegnato per l'ennesima volta lo sfondo spaziale, utilizzando una bella nebulosa blu, eliminando spero una volta per tutte tutti quelle brutture derivanti dalle unioni dei vari lati del cubo. Ringrazio a tal proposito chi mi ha consigliato dei plug-in davvero validi per paint shop pro.
Ho fatto un pò di pulizie perchè ora si apre un capitolo che sarà lungo e doloroso, ovvero la gestione delle mesh. Lungo perchè le mesh compongono il 90% del motore grafico, doloroso perchè è sicuramente una fase molto complessa (basti pensare la gestione delle animazioni, delle luci, degli effetti bump-map), che richiede anche tutta una serie di tools per la modellazione, l'esportazione in formato directx, e temo dovro' costuirmi qualcosa di ad hoc per gestire quelle informazioni che i programmi normali ovviamente non considerano (ad esempio: un'astronave ha una luce rossa alla posizione 0,0,3 .. come la gestisco con un normale tool di modellazione 3d?)
Andrà anche iniziato a lavorare sull'interfaccia utente, ovviamente prima o poi bisognerà inserire icone, bottoni e quant'altro, ma la priorità è più bassa; ho nel frattempo preso un libro che tratta l'argomento, tutt'altro che banale, e me lo studierò con calma.
Vi lascio nel frattempo con uno screenshot, con la stazione spaziale (ancora molto grezza) in orbita attorno alla terra. A differenza dell'immagine che vi ho fatto vedere nel post precedente, questo è uno screenshot reale e non "ritoccato", ovvero proviene da una schermata in-game.

Thursday, March 6, 2008

Mesh


Prima o poi bisognerà pur iniziare a disegnare gli oggetti che comporranno il gioco, i pianeti son belli senza dubbio ma non sono attori fondamentali.
Non ho certo la superbia di pensar di poter tutto da solo disegnare spettacolari astronavi spaziali, scrivere innovativi motori 3D e comporre musiche degne da MTV Award, specie lavorando saltuariamente.
Pertanto devo scendere a dei compromessi, per forza.. uno di questi è l'ispirarsi alla produzione di Braben, come già detto a Dicembre, l'altro è ovviamente la qualità, non aspettatevi capolavori, faccio quel che posso.
In ogni caso ho iniziato a disegnare una mesh, che sicuramente non sarà affatto nuova per chi, come me, ha ormai una certa età :)
Vi dice niente?

Wednesday, March 5, 2008

Anelli e texture



Stanco di vedere sempre i soliti 2 pianeti, ho iniziato con oggi ad inserire tutti i pianeti del sistema solare.
Ovviamente quello che mi ha fatto penare di più è stato Saturno coi suoi anelli, in quanto non e' una semplice sfera, ma qualcosa di piuttosto complesso.
Alla fine ho realizzato gli anelli con un toro estremamente piatto, al quale ho aggiunto una texture fatta a mano, e resi semitrasparenti.
Ancora non ci siamo, ma quantomeno ci assomiglia un poco. Devo capire se per migliorare il risultato e' sufficiente rendere la texture più credibile, se devo giocare un po' con i vari effetti blend, o se devo invece far diventare più sofisticati gli shaders. Vedremo..
Per ora vi lascio con tre immagini: Marte, Saturno, ed un Giove appena illuminato dal sole.



Tuesday, March 4, 2008

Lens Flares reprise



Avevo bisogno di riflettere, e la soluzione è arrivata da sola.
Eccovi la lens che sparisce gradualmente dallo schermo, senza piu' effetto on-off.
Ovviamente posso regolarne la velocita' di decadimento, questo e' solo il classico esempio cinque-minuti-prima-di-tornare-a-casa-manco-ho-il-tempo-di-leggere-che-ho-scritto-che-è-tardi ma l'importante e' che si possa fare (ed è pure semplice!)

Atmosfera (ho bisogno di qualche dritta)


Mentre attendo di capire se si riesce a risolvere il problema della sfumatura delle lens flare, un altro problema si affaccia alla porta: l'atmosfera dei pianeti.
Pensavo di utilizzare uno sprite semitrasparente, come ho fatto in fondo per le lens flares, un cerchio azzurrino da sovrapporre al pianeta ma...

1) lo sprite non sembra minimamente essere influenzato dalla luce, pertanto l'atmosfera risulta tutta dello stesso colore, anche nel lato non illuminato del pianeta.

2) a differenza dei triangoli, lo sprite non viene "deformato" come avviene invece per i pianeti a causa dell'apertura focale un po' a grandangolo (in sostanza, al centro gli oggetti son perfettamente sferici, man mano che si avvicinano al bordo tendono a diventare un po' ellissoidali), e quindi la sovrapposizione non e' perfetta.

Pertanto non credo che la strada dello sprite sia percorribile. Percio'... cos'altro potrei usare per simulare l'atmosfera di un pianeta?

Vi lascio con uno screenshot dell'effetto ottenuto, sottolineando il fatto che non mi piace manco un po'.

Tormento blend

Forse finalmente riesco a trovare un po'di tempo per il gioco, come detto purtroppo nei giorni scorsi, complice anche influenza, non ho avuto modo di starci dietro.
Con oggi ho sistemato un paio di cose relative alle lens flares, ovvero lo spiacevole effetto degli artefatti che apparivano dietro ai pianeti, e la duplicazione della medesima flares quando si trovava esattamente dietro all'osservatore.
Rimane pendente lo sfumar della lens quando si avvicina al bordo dello schermo (e ovviamente quando la fonte luminosa viene oscurata ad esempio da un'astronave). Come fare non mi è ancora chiaro, nel senso che mi sembra del tutto inverosimile dovermi creare un sacco di immagini degli artefatti via via sempre piu' evanescenti, come mi sembra del tutto assurdo dover modificare via cpu la luminosita' della texture. L'equazione per definire il blending, nelle directx e'

colore = colore sorgente*blend sorgente + colore destinazione * blend destinazione

quindi via via che ci si avvicina al bordo, dovrebbe diminuire il fattore blend sorgente, mentre rimane a 1 il valore di blend destinazione, fino ad arrivare a 0 per blend sorgente non appena varca il margine del bordo.
Di fatto perciò basterebbe passare alle directx un fattore di blend compreso tra 0 e 1, ed il gioco sarebbe anche fatto.. se non fosse che non ho trovato nessuna funzione in grado di venirmi in aiuto.
Per settare il blend si interviene nel render state, e quello accetta solo valori predefiniti.
Se qualcuno ha una buona idea...