Tuesday, November 6, 2012

Too much work in this time, but....

...i'm here because THE MAN wants to recreate THE GAME.
Not my crap, but the real one!

Elite Dangerous

Please support Braben, he needs our help!

Thursday, July 26, 2012

More precision

Here the last version of the autopilot.. is more precise, it's error is under 1 meter but for now it doesn't work if the object to reach change position while you're approaching to it.




Eccovi un filmato che dimostra come funziona ora l'autopilota dopo tutte le elucubrazioni matematiche che ho dovuto compiere.
 Non riuscendo (per ora) ad eseguire una accelerazione ed una frenata precisa in modo che l'astronave si fermi esattamente nel punto di arrivo, ho dovuto operare per approssimazioni successive. La funzione e' piu' o meno cosi'




  1. Ferma l'astronave se si muove 
  2. Allinea l'astronave verso la destinazione 
  3. Accelera fino a quando hai compiuto meta' della distanza 
  4. Rimani a velocita' costante fino a distanza pari a velocita*(1-exp(-5*t))/3; 
  5. Rallenta fino a raggiungere una velocita' di 2 m/s: se a sto punto la distanza e' maggiore di 50 metri allora riparti da capo, altrimenti:
  6. Rvanza lentamente fino alla destinazione
  7. Rallenta fino a fermarti 




Nel video una dimostrazione: l'astronave e' molto lontana dalla stazione spaziale, voglio portarla fino all'ingresso del "tunnel". Per complicare le cose punto il muso dell'astronave in una direzione casuale ed accelero in modo da muovermi da tutt'altra parte. Puo' essere interessante qualche numerino che vedete: in alto a destra, in bianco, con la label S: viene indicata la velocita' attuale.
A destra pos x, y e z indicano la posizione attuale, state indica in quale degli stati (elencati sopra) di autopilota attualmente sta operando l'astronave, ed infine dist e' la distanza dalla destinazione.


Questo algoritmo purtroppo non funziona se l'oggetto destinazione si muove nel frattempo che l'astronave cerca di raggiungerlo. A questo devo ancora lavorare


 

Wednesday, July 25, 2012

Still Alive

I'm not dead, i'm just working hard on autopilot :)

Non sono morto, e' che sto lavorando intensamente per rendere l'autopilota preciso. Sembra una banalita' ma la semplice sequenza Allineati, Accelera, aspetta, decelera fino a fermarti e' estremamente complessa, o meglio lo e' riuscire far si' che sia sufficientemente precisa, specie quando a priori non sono noti i frames al secondo.


Se devo andare da A a B in un sistema 3D, fatta ipotesi pure che inizialmente io sia fermo, devo:


- Ruotare fino a puntare B- Accelerare diciamo fino a meta' strada- Frenare.Il primo punto l'ho realizzato e funziona bene.Anche il secondo, che e' piuttosto banale.Il difficile e' proprio il frenare. Cioe': nel caso dell'accelerazione costante, detto t il tempo che e' intercorso tra un frame all'altro la velocita' nuova e' banalmente v2=v1+a*t dove v1 era la velocita' precedente.Ma per la decelerazione? non va bene semplicemente considerare a "negativo" perche' non trattasi di frenata ma bensi' di accelerazione nel verso opposto. Una formula migliore e' v2=v1*e^(-f*t). I guai iniziano pero' non appena inizio a calcolare lo spazio di frenata con una simile equazione. integrando ottengo una formula che va bene sul continuo, il gioco pero' funziona per intervalli discreti, ovvero gli intervalli di tempo tra un frame e l'altro, e pertanto la formula matematica che ottengo mi da un risultato approssimato, tanto piu' approssimato tanto piu' gli fps sono bassi. Col rischio che su un pc buono l'algoritmo funzioni bene, su un pc obsoleto l'algoritmo addirittura non faccia a tempo a frenare.


Stay Tuned..

Wednesday, May 30, 2012

Ladies and Gentlemen....

...the radar is finished!
And is time to summarize the situation about the work in progress.. on following video you'll see the radar behaviour and the latest update i've done to the engine.

Ho finito di implementare il radar e... funziona!
Graficamente non e' un granche', ma come ben sapete ho deciso di lasciare la fase di abbellimento grafico solo al termine (se mai ci sara') dello sviluppo software.. e' inutile perderci ore a fare una bella mesh o per trovare una texture come si deve se comunque la probabilita' di finire il lavoro e' prossima allo zero. Tanto vale concentrarsi sull'engine vero e proprio, e poi, se il destino vorra', pensero' a fare fiorellini e decori.
Ad ogni modo, come anticipato la volta precedente, la realizzazione del radar e' stata fatta utilizzando un secondo "universo", dove ho riscalato di un migliaio di volte la posizione degli oggetti presenti nello spazio, dopo averne convertito la posizione da quella assoluta a quella "rispetto all'astronave".
In sostanza ogni oggetti (pianeti, stazioni, navi ecc..) e' rappresentata da un pallino giallo: il centro della bussola circolare rappresenta la vostra posizione, pertanto in base a dove vedete il pallino giallo siete in grado di capire se l'oggetto vi sta davanti, dietro, sinistra o destra.
Ma siamo in tre dimensioni, ed esiste quindi anche un "alto" e "basso". Percio' al pallino e' attaccata una gambetta, se il pallino e' sopra la gambetta vuol dire che l'oggetto vi sta sopra, viceversa se la gambetta e' sotto, l'oggetto ovviamente si trova in basso. Inoltre piu' lunga e' la gambetta e piu' e' la distanza dell'oggetto dal piano che contiene la vostra astronave.

Eccovi una breve dimostrazione che vi consiglio di vedere a tutto schermo in quanto il radar e' un po' piccolino. Ne ho approfittato anche per fare il punto della situazione, e nel filmato ho cercato di mettere un po' tutte le novita' alle quali ho lavorato ultimamente.


 

Thursday, May 17, 2012

Compass

The little mesh i've used inside the radar as "compass" now works (well: it seems :) )

L'ultima volta vi ho fatto vedere come poter usare una seconda viewport per aggiungere il radar alla strumentazione di bordo.
Con oggi vi faccio vedere il radar che finalmente inizia a funzionare.
Per ora si limita ad indicare la direzione come fosse una bussola (il nord e' indicato dalla punta), il prossimo passo consisterà nel aggiungere i marker per gli altri oggetti nei pressi della nostra posizione.

Consiglio di vedere il video non dico a tutto schermo ma comunque con una buona definizione in quanto la mesh della bussola e' piuttosto piccolina e su youtube tende a notarsi poco.


Wednesday, May 9, 2012

Working on radar

It's time to working on radar.. new approach now: multiple viewport to render it.

Post un po' lungo e tecnico, ma penso sia interessante specie per chi come me si sta avventurando nel mondo del rendering 3D in tempo reale.

Terminata la mappa del settore (per ora va bene cosi'), ho deciso di reintrodurre il vecchio radar che mesi e mesi fa avevo iniziato a sviluppare.
E mi son reso conto che, complice probabilmente l'inesperienza, stavo seguendo una strada del tutto sbagliata e certamente inutilmente complicata.
Ricapitoliamo: correva l'anno 2008 quando tentavo di mettere in piedi un prototipo di radar. Allora la strada che avevo deciso di seguire era: prendo uno sprite ovoidale per dare l'illusione di una circonferenza in prospettiva, che mi rappresenta il piano ove poggia la mia astronave, ed, esattamente come avveniva con Elite/Frontier, tiro delle linee perpendicolari alla circonferenza per rappresentare la posizione degli altri oggetti rispetto alla mia astronave che sta al centro del radar.
Bene. L'idea e' anche giusta (L'ha avuta Braben, mica io ;) ), la realizzazione assolutamente no, per i seguenti motivi:

  1. un ellisse NON E' uguale ad un cerchio messo in prospettiva.
  2. dover calcolarsi per ogni oggetto la posizione relativa all'astronave e la corrispondente proiezione sul cerchio in coordinate bidimensionali e', per omaggiare quei pochissimi (se ce ne sono ancora) stranieri che leggono, "a pain in the ass".
La soluzione alla fine e' sorprendentemente più semplice di quanto pensassi: ho un motore 3D che si occupa di tutti questi impicci? Beh, perché non usarlo anche per il radar?
Quindi:

  • Con Blender mi disegno una specie di "rosa dei venti" che mi rappresenta il mio cerchio visto in precedenza. E' semplice: basta un rettangolino ed un modifier "array" col quale replico e ruoto ciascun segnaposto. Ne ho fatti 24, ma posso metterne quanti ne voglio:


  • Esporto la mesh e la importo su  Ogre3D 
  • Su Ogre3D mi creo un secondo universo, dove anziché mettere astronavi, pianeti e quant'altro, metto solo la "rosa dei venti", ed una serie di segnaposti che occupano la stessa posizione degli oggetti rispetto alla mia astronave, ovviamente scalati. Per avere la posizione relativa esistono già dei metodi "worldToLocal" e "localToWorld" che mi permettono agevolmente di ottenere la posizione 3D di un qualsiasi oggetto quando l'origine e' impostata solidale alla astronave anziché al sole.
  • Da queste posizioni tiro una riga perpendicolare al piano che contiene la rosa dei venti. E' un universo in 3d, l'operazione e' banale, non devo effettuare nessuna proiezione, basta disegnare una linea da (x,y,z) a (x,0,z)
  • Posiziono una telecamera poco dietro la rosa dei venti, un po' in alto, e la faccio puntare ovviamente verso la mesh
  • Dico a Ogre di fare il rendering di tutto cio' in un secondo viewport che con un po' di accortezza vado a posizionare proprio dentro lo spazio dedicato al radar.


Il risultato? Eccolo. Per ora c'e' solo la mesh, ma basta per darvi l'idea di quello che sara' l'effetto finale.


Alla prossima!


Tuesday, April 24, 2012

The GUI is growing...



Added tab and system map to the nav computer. Continua il lavoro sul computer di bordo. Ho incorporato (non senza faticare) la mappa del settore all'interno del computer, l'idea e' quella di usare il computer di bordo per tutte le funzioni quali mappa, inventario, comunicazioni, commercio, statistiche ecc.. Per far si' che apparisse la mappa dentro il riquadro del monitor ho dovuto utilizzare una tecnica chiamata Render to Texture, la quale permette di far si' che il risultato del rendering tridimensionale, anziche' apparire come nella finestra, finisca in una texture, che poi uso al centro della cornice del monitor che vedete, per dar vita alla scena. La mappa funziona in tempo reale, lo potete notare dal fatto che l'indicatore di posizione si sposta quando la vostra astronave si sta muovendo. Oltre alla mia posizione, a quella dei pianeti e delle stazioni, devo aggiungere anche quella delle navi comandate dalla AI, lo vedrete probabilmente nel prossimo video che pubblichero'.

Aggiornamento: il monitor mi piaceva poco, cosi' ho sistemato un po' di luce e ho messo anche il led di accensione.


Friday, March 23, 2012

Ship Computer

There are a lot of things that cannot be done only using keys. For examples when you are (oh well.. will be..) docked into a station, probably you want to do some "shopping": buy some stuffs to sells into other planets.
To organize this i need a GUI (Graphical User Interface). I don't need all the buttons/widget of windows but some of them should be useful for my purpose.
I've found a very good open source library that seems to be perfect for my need. It's name is CEGUI, is totally free and, best of all, it integrates well with Ogre3D.
The documentation is not so user friendly, but for now i was able to create listboxes, checkboxes, buttons, frames, tabbed windows, icons and it should be enough for my purpose.

A brief video that shows you a ship computer prototype: i've also rendered a monitor (with some reflection inside :) ) and.. oh well, good watch and please send me all feedbacks you want.


Monday, March 5, 2012

Occlusion

The lens flare now is obscured when some object occuldes the light source.

Ho sistemato un po' le lens flare. Rispetto a prima (finalmente), l'effetto sparisce non appena un oggetto si posiziona davanti alla fonte luminosa, com'è giusto che sia.
L'effetto e' molto preciso, come potete vedere dal filmato ad esempio quando il sole si intravede attraverso i piloni della stazione spaziale. Quel che ancora manca e' l'effetto di dissolvenza tra "acceso" e spento, ma la cosa e' tutt'altro che banale. Anche se qualche idea ce l'ho.

Tuesday, February 28, 2012

The return of the Lens Flare

After a while i've recreated the lens flare effect using Ogre3D. It was not so easy but.. it works!

Nel mentre che studio la modellazione 3D con Blender, consapevole del fatto che ha poco senso dedicarsi agli "effetti speciali" se ancora manca buona parte della struttura del motore, ho comunque voluto togliermi un piccolo vezzo.
Uno degli effetti che piu' mi inorgogliva aver implementato usando direttamente le directx era quello delle lens flare, e quando son passato al motore di Ogre3D mi ha sempre dato un po' fastidio l'aver perso (momentaneamente) quella caratteristica.
Purtroppo Ogre3D e' un motore che da ottimi strumenti per la realizzazione di effetti tridimensionali (come suggerisce il suo nome), ma e' molto piu' grezzo quando si tratta di utilizzare, paradossalmente, effetti bidimensionali, come lo sono ad esempio gli sprites.
Le lens flares fanno per l'appunto ampio uso di sprite e di blending.
E cosi', ora che conosco un po' meglio l'infrastruttura, mi son messo e son riuscito a riportare la stella al suo antico splendore. Manca ancora l'effetto a sfumare quando la luce si avvicina a bordo schermo, e la cosa sembra tutt'altro che banale, ma per ora son gia' soddisfatto cosi'.

Ah si, il video:

Thursday, February 16, 2012

Il mio Cockpit.

A message from non italian people.
Since i think there's no (or very very few) people reading this blog (and it's not a critic: i know that i write not soo much, so i cannot pretend to be followed) from today i'll write only a short description in english, the most part will be written in italian: my english is very poor and it's more confortable for me to use my language....
...until i'll receive lots of compliants from english people ;)

In this post, you can see my attempts to create a my own cockpit using blender.

L'abitacolo inserito qualche giorno fa in effetti ha in qualche modo cambiato drammaticamente l'impressione del gioco. Che ancora non c'e', ma almeno lo schermo inizia ad essere piu' pieno, e non si ha piu' l'idea di "insieme di sferette che ruotano con un fondo stellato e nulla piu'".
Quello messo pero' era un cockpit di prova, pescato con google images, senza nemmeno troppa convinzione. Inizialmente non volevo nemmeno inserire un cockpit, ma piuttosto seguire le orme di X3 con l'intero schermo dedicato allo spazio.
Visti pero' i risultati che mi son davvero piaciuti ho cambiato idea. Chiaramente pero' non posso usare quello che avete visto, che non e' nemmeno mio, e pertanto ho deciso di provare a disegnarmene uno da zero.
C'e' una ragione per la quale devo farlo ora: il prossimo passo che voglio compiere consiste nell'implementare il fuoco nemico, quindi la resistenza del mio scafo e quindi il "game over" non appena lo scafo viene fatto a pezzi. Serve chiaramente un indicatore (gauge) che dia l'informazione sulla salute dello scafo, e per posizionarlo nel contesto di un abitacolo mi serve ovviamente che l'abitacolo sia pronto.
Di disegnarlo a mano non se ne parla: son negato e comunque non avrebbe mai un aspetto sufficientemente credibile.
Pertanto ho deciso di modellarlo in 3D con blender, farne un rendering e utilizzarlo come sprite.
E' anche una buona occasione per iniziare a domare per una buona volta blender, che e' un programma assolutamente fantastico, a mio avviso alla pari di molte altre soluzioni a pagamento e usate nel cinema, ma tutt'altro che user friendly.

Ad ogni modo ne approfitto per farvi vedere due schermate del lavoro (appena agli inizi):


In questa potete vedere l'interfaccia di blender ed il modello che sto editando


In questa invece potete vedere il cockpit renderizzato ed inserito dentro il gioco.
Non ci sono texture, ne' dettagli, giusto un po' di riflesso per dargli un aspetto metallico, ma e' la base dalla quale voglio partire per aggiungere poi il resto.
Per i curiosi: mi sono liberamente ispirato al X-Wing di guerre stellari.

(Clickate sulle foto per ingrandire)

Monday, February 13, 2012

Cockpit, Bloom (again), and better ship movements



I have to decrease the bloom's strenght, and obviously the cockpit should be more refined but.. now the screen appears more rich :)

Monday, January 30, 2012

Laser, explosions and fleet

100 starships trying to reach me.. But i've an AWESOME laser and i kill them! :)

(no sure that there's anyone reading this blog, so sorry for the short message...)