Friday, August 29, 2008

Distance

I've fixed the oustide camera, now i'ts a little up so you can see your starship well.
There was a bug with the up vector (the vector that tells where's the "up" direction), and the rotation around the ship was very odd, but now it works well.
Ok, the camera is near finished (i hope), now is the time to upgrade a little the HUD.
Until today HUD shows the position and the name of every object on the sector, with an hexagon if the object is inside the view area, or with some arrows if it's outside.
Now the HUD display also the distance, and use a confortable measure unit.
If you're near to an object, VERY near, the distance is displayed in meters.
Until 1.000.000 km it's displayed in kilometers.
Otherwise, the AU is adopted (1 AU, aka Astronomic Unit is the distance between the sun and earth).
Down you can see two screenshot that displays objects near and far.
I hope you like it.

----

Allora, ho finito di lavorare alla telecamera, spero quasi definitivamente.. ho sistemato la visuale esterna aggiustando l'altezza, in modo che ora sia possibile vedere la propria astronave da un piano un po' piu' in alto. Inoltre ho risolto un baco che mi sballava il vettore "UP", ovvero quello che, dato un sistema di riferimento, indica dove si trova il "sopra".
Fatto questo ho deciso di trascorrere il poco tempo rimasto prima del week end per aggiornare ulteriormente l'HUD. Da oggi infatti questi visualizza anche la distanza dell'oggetto da noi. E lo fa utilizzando un'unita' di misura conveniente. Per oggetti molto vicini la distanza viene espressa in metri. Per oggetti fino a 1 milione di km, la distanza viene ovviamente espressa in kilometri. Per oggetti ancora piu' lontani infine vengono usate le unita' astronomiche (AU). Ricordo che 1AU corrisponde alla distanza che c'e' tra la terra ed il sole.
Vi lascio con due screenshot che vi mostrano come funziona il tutto.

Buon week end.


Thursday, August 28, 2008

Welcome

Da oggi ho deciso di postare i miei messaggi in duplice lingua. In italiano ed in inglese.
Questo perche', con mia sorpresa, ho scoperto leggendo le statistiche che spesso ricevo visite anche da persone che stanno all'estero. Le quali ovviamente non sapendo l'italiano devono limitarsi a guardar le figure o più semplicemente (e probabilmente), chiudere la pagina per andar altrove.
Premetto che sono davvero scarso con l'inglese, riesco a farmi capire ma chi mi legge sicuramente ha di che ridere per la mia sintassi :)
Pertanto portate pazienza, e anzi se trovate errori madornali e volete segnalarmeli, ben lieto.

Grazie.

---

Hi.
My name is Claudio, i live in italy, and i'm trying to develop a game (my first game) using C++ and DirectX.
First of all: excuse me for my horrible english. Fortunately i code better than i write :) so i apologize for certains syntax-semantic-horror errors. I hope you understand the meaning of what i write, anyway if you want, fell free to write me, and help me to fix my errors.

The objective of this work is one: learn something about the game programming, the 3d graphics, how tool use and so on. I know that, on 2008, writing a game is not anymore a task for single and brave man. The videogame industry is now made of sofware house with hundreds of people, and a AAA game usually needs 100-150 men, and 4 years of develop.
So i know that it will be very very difficult for me to end this project. But i live day by day, i've no scheduled date, it's only an hobby, and (why not?) a dream..

Anyway the goal is to create a "clone" of the great "Frontier" of David Braben. Indeed, there are a lot of space-sim on the market, but no one was able to recreate the same feeling. Static universe, planets freezed on space, no seameless universe, sectors with ridicolous dimensions (i.e. a sector is 100km wide!), no inertial behaviour and so on.
So i want to try to recreate a space-sim that will be a SPACE game, but also a SIMulator.
I'm working on it since December 2007, so the same my blog.
Until now i'we used this blog like a "diary", here i write my progress, my difficult, my problem, and the solutions that i found, and i've used my language: italian.
But i've noticed that there's also a bit of visitors outside italy, and i'm pleased to try to narrate you my little adventure.

The game is obviously only at the beginning. I've not used any pre-builded engine, or existing source. All was done by scratch.
I use Microsoft Visual C++ 2008 Express to compile, Blender for the modeling, and Paint Shop Pro XI for the 2D graphics.
For the documentation i use the wonderful book of Frank Luna "Introduction to 3d game programming with directx 9.0c - A shader approach", and the excellent forum GameDev.net

Actually i've:
  • a prototype of galaxy map.
  • a prototype of engine that manage planet with real dimension and distance, stars with lens flare, camera inside and outside the cockpit, orbits, time acceleration and deceleration, and primitive inertial support.

in the previous post you can see some screenshot and video about it.
You have questions? Write me!

And welcome :)

Wednesday, August 27, 2008

Hud Reprise

In cantiere c'e' la gestione della telecamera. Come detto la volta precedente finalmente è possibile vedere la propria astronave da fuori, e ruotare la telecamera attorno ad essa. Ma il movimento e' ancora un po' impreciso e voglio sistemarlo una volta per tutte.
Nel frattempo, rileggendo il capitolo sugli sprites nel libro di Frank Luna ho scoperto che il mio approccio per la gestione dei medesimi era inutilmente complicato, cosi' ho approfittato per sfoltire e renderlo piu' semplice (ed ottimizzato).
Gli sprites attualmente li uso per le lens flare e per l'HUD e quest'ultimo devo essere sincero non mi e' mai piaciuto graficamente.
Cosi' oggi ho deciso di ridisegnarlo.
Vi mostro la versione vecchia e subito sotto quella nuova: secondo voi qual e' la migliore?
(ingrandite l'immagine clickandoci sopra per vederla a grandezza naturale)


Friday, August 22, 2008

telecamera esterna

Finalmente è stata implementata.
E' quindi possibile ora vedere la scena da un punto di vista detto di "prima persona", ovvero come se si fosse seduti realmente nell'abitacolo dell'astronave (quello che in fondo avete visto fino ad oggi), oppure da un altro punto di vista detto di "terza persona", ovvero da una telecamera montata fuori dall'astronave, la quale telecamera vi inquadra continuamente.
Nella visuale in terza persona, col mouse ruotiamo la telecamera attorno alla nostra astronave, per poterla vedere da dove piu' ci piace, mentre con la visuale in prima persona ruotiamo proprio l'astronave per scegliere la direzione verso la quale vogliamo andare.
Vi mostro un filmatino che ho appena realizzato.
La qualita' dell'astronave e' ancora pessima, non ci ho piu' lavorato, ed è messa li' solo come riferimento per ora. L'importante è che il programma funzioni, per disegnare poi c'e' sempre tempo.

Tuesday, August 19, 2008

Decisamente Blender!

In questi giorni ho voluto studiare per capire quale fosse il tool di modellazione più congegnale ai miei scopi, specie dopo i problemi relativi alle normali di cui vi ho parlato prima di Ferragosto.
Ho provato un pò di tutto, anche per capire cosa offre il mercato freeware.
Val la pena citare un progetto che ha scoperto mia moglie. Si chiama Art Of Illusion, è scritto completamente in java, ed è davvero meritevole. Ha persino un motore di ray tracing integrato con tanto di calcolo dell'illuminazione globale. Lo metto da parte, e non escludo che possa tornarmi utile in futuro.
In ogni caso sono arrivato a darmi una risposta: Blender fa assolutamente al caso mio, è un prodotto eccezionale, in grado di competere (e credo anche sconfiggere) molti software commerciali che costano migliaia di euro. Basta imparare ad usarlo.
Il problema delle normali l'ho risolto grazie ad un apposito modificatore che non conoscevo.
E ho scoperto le meraviglie dell'editor UV!

Val la pena che ne parli un pò, può tornar utile a chi magari ha deciso di modellare mesh per videogiochi (magari il mio, perche' no? :P )

Per rendere decentemente un oggetto 3D sono molto importanti le texture, ovvero le immagini che vengono proiettate sopra l'oggetto tridimensionale. Servono a darci profondità e credibilità, servono a rendere una sfera giove anziche' la terra, eccetera.

La sfida grossa sta nella scelta delle texture giuste e nel modo in cui applicarle all'oggetto 3D.
Per oggetti banali come cubo, sfera, cilindro, esistono delle formule matematiche che fanno il lavoro di "avvolgimento" dell'immagine rettangolare attorno alla mesh, ed è questo il sistema che ho usato per disegnare i pianeti.
Quando però il modello inizia ad avere un aspetto piuttosto complesso l'approccio matematico diventa improponibile. Fino a ieri usavo quindi l'approssimazione di considerare ad esempio la stazione spaaziale come un cubo. Ottenendo discreti risultati ma che non mi davano alcuna possibilità di poter aggiungere dettagli in una posizione da me scelta. Solo la trama ripetuta all'infinito, ad avvolgere l'oggetto.
Con Blender la soluzione diventa semplice, quasi divertente.
In sostanza si prende l'oggetto, e si finge che sia un pelouche (!)
Di questo pelouche si sceglono quali sono le cuciture che uniscono i vari pezzi di stoffa. La libertà è massima, quindi conviene sceglierle in zone dell'oggetto che sono poco visibili (esattamente come avviene nei pelouche).
Una volta definite le cuciture, con un semplice comando Blender provvederà a "tagliare" il nostro pelouche lungo le cuciture e ad appiattirlo sopra un piano.
Otteniamo quindi un'immagine bidimensionale che è possibile quindi dipingere con uno dei tantissimi programmi (PhotoShop, Paint Shop Pro, Gimp, ecc..). Una volta dipinta l'immagine piatta, Blender non farà altro che "ricucire" il nostro oggetto lungo le cuciture, riottenendo quindi la nostra mesh tridimensionale con le texture desiderate.

Utilizzando questa tecnica ad esempio son riuscito a scrivere con ottima precisione il nome "Tau Ceti" sotto il portellone di ingresso della stazione, e son riuscito inoltre ad aggiungere alla trama alcuni punti scuriti, altri schiariti, per renderla meno "artificiale" ma più realistica.
Purtroppo non sono un'artista e non so fare miracoli, però almeno per la stazione spaziale sto arrivando ad un risultato che considero quasi definitivo.

Ecco come su blender la stazione spaziale è stata ritagliata.
A destra potete vedere i vari "pezzi" risultati dalla procedura di appiattimento, con sotto le corrispondenti texture aggiunte con Paint Shop Pro (clickate sull'immagine se volete vederla più grande):


Ed ecco come appare il risultato finale all'interno del gioco (notate la scritta e i punti un po' scoloriti messi in maniera casuale):

Wednesday, August 13, 2008

Buon Ferragosto

Buon ferragosto a tutti i fortunati che hanno ancora ferie da spendere.
Ho letto più di uno di voi che si è dichiarato disposto a darmi una mano coi modelli 3D e mi fa davvero piacere.
Nell'attesa, come avete visto, sto cercando di metterci del mio.
Per poter creare mesh dimensionate in maniera corretta occorre avere un sistema di riferimento. Non posso fare una stazione spaziale con il portellone, per poi scoprire che attraverso quel portellone ci entra sì e no una formica :)
Così vanno fatte due cose:

  1. disegnata la mesh della nostra astronave
  2. va data la possibilità di poter vedere la scena anche da un punto di vista esterno.
Questo mi permetterà poi di creare il resto degli oggetti in scala.
Vi saluto quindi con il primi schizzi di astronave, e ovviamente altri non poteva essere che il Cobra MK III :)

Eccovi l'originale.



Ed eccovi i miei lavori in corso.


Tuesday, August 12, 2008

Blender o non Blender?

I lavori di modellazione 3D continuano, ancora siamo a livello di "pasticci", ma la qualità e' quantomeno migliorata rispetto agli screenshot di qualche mese fa.
Il problema con il quale però sto combattendo attualmente riguarda la qualità degli "smussi", ovvero la tecnica usata per far sembrare tondeggianti anche gli oggetti che invece sono spigolosi.


Una volta esportati con Blender gli effetti sono terribili.




Forse sbaglio qualcosa io ma...

Domanda: avete qualche buon editor di mesh da propormi? Cioe' non vorrei abbandonare blender, ma se non ne vengo a capo devo considerare anche qualche altro tool..

Wednesday, August 6, 2008

Paragone bis


...ovvero un'interpretazione artistica (rendering) della mesh che vi ho mostrato oggi.
(fatta con lo stesso blender)

Paragone

C'e' caldo, il lavoro scalpita, pertanto non c'è tempo per ora per dedicarsi al codice.
Nei buchi di tempo però, tra un import e l'altro, ho iniziato a pasticciare con blender, per cercare di creare delle mesh che non siano solo i 4 rettangoli di prova.
L'idea è quella di rifare la vecchia e famosa stazione spaziale di frontier. In fondo vorrei farne un rifacimento no?
Cosi' ecco i risultati di qualche pasticcio... sopra la vecchia stazione spaziale di frontier, sotto l'equivalente su Tau Ceti.
La gara e' contro David Braben, mi posso ritenere soddisfatto :)

Monday, August 4, 2008

Luci

Con l'implementazione del passare del tempo nel gioco, si può anche iniziare a pensare a gestire le animazioni.
Due ne avete già viste, ovvero la rotazione e la rivoluzione dei pianeti, un'altra semplice consiste nella gestione delle luci di posizione.
Avete presente le ali dell'aereo? Ciascuna ha una luce che lampeggia, per rendere l'aeromobile visibile anche al buio.
Sono sceniche, e portano via relativamente poche risorse, quindi perchè non implementarle?
E' sufficiente uno sprite,sul quale è stato sapientemente disegnato un flare, da far apparire in blend con lo sfondo.
Utilizzando il billboarding poi lo teniamo sempre orientato verso la telecamera, così da dare l'iillusione che sia sferico e non piatto.
Infine, utilizzando l'orologio lo accendiamo un secondo sì e uno no. Basta prendere i secondi e prendere il resto della divisione per due.
Col risultato che la frequenza con la quale pulserà dipenderà dalla velocità con la quale stiamo facendo scorrere il tempo.

Il filmato che segue illustra proprio il risultato. (ho messo una luce sola, siamo ancora a livello di tech demo)