Friday, June 20, 2008

Il punto della situazione

Ho probabilmente fatto l'errore di mettere troppa carne al fuoco, aprendo diversi fronti senza aver la pazienza di consolidarne nemmeno uno come si deve, e mi ritrovo adesso con la necessità di capire dove sono arrivato e dove voglio andare.

La schermata di questo post riassume un pò tutto quello che c'è e che in qualche maniera vorrei chiudere prima di passare ad altro, ovvero:

  1. Enviroment mapping: il cielo stellato e le nebulole di sfondo. Funzionano direi bene e qui l'unica cosa sulla quale val la pena lavoare e' forse la risoluzione del cube mapping, che ora appare un po' sfuocata. Non vorrei però esagerare, il rischio è quello di far diventare il fondale troppo pesante in termine di consumo di memoria della scheda video.
  2. Corpi celesti: Stelle, pianeti, funziona tutto bene. Per i pianeti devo raffinare la generazione dell'anello (vedi saturno) che ho lasciato in sospeso. In futuro ci sara' ancora da lavorare su multitexturing, atmosfera e rotazione-rivoluzione.
  3. Hud: A volte mi sballa un pò la posizione dello sprite, e devo verificare perchè. Per il resto funziona bene, finalmente non si limita a visualizzare solo i pianeti ma tutti gli oggetti che compongono l'universo. Con l'aumentare dei medesimi ovviamente occorrerà fare in modo che solo i più vicini siano visualizzati, altrimenti il caos regnerà sovrano.
  4. Lens Flares: Il meccanismo di base va bene, ma ancora non ci siamo. Il "glow" che racchiude la fonte luminosa deve essere ridimensionato in base alla distanza. Dev'essere quantomeno grande quanto la dimensione apparente della stella, quindi sarà da affrontare il problema del calcolo della dimensione in 2D di un oggetto 3D rappresentato a video. I vari artefatti poi non mi piacciono molto, e vorrei ridisegnarli. Senza contare il grosso problema della lens che appare anche quando la fonte luminosa è eclissata da un oggetto. Tenendo conto che lo z-buffer lo disabilito per buona parte del rendering, saran dolori..
  5. Mesh: Son diventate qualcosina di più di un semplice esperimento. Come si può vedere dalla schermata, anche loro vengono riconsociute da HUD e Radar. Ho messo due stazioni in modo da essere sicuro che non interferissero tra di loro. Ogni mesh puo' avere diversi materiali e texture, ma è ancora tutta da fare la parte relativa alle animazioni. Inoltre rimane irrisolto il problema dell'illuminazione degli oggetti concavi.
  6. Radar: Funziona, rappresenta i medesimi oggetti che sono disegnati dal HUD, certamente è ancora piuttosto grezzo nell'aspetto.
  7. Navigazione: Implementati i fondamentali, il moto è puramente inerziale, assolutamente inusabile nei combattimenti, e che richiede TROPPO tempo per la navigazione da un punto all'altro del settore. Va bene amor di realismo ma non posso ovviamente permettere che per raggiungere marte dalla terra siano necessari 4 anni.
  8. Codice: un po' meglio rispetto al caos che regnava qualche tempo fa. Ho fatto uso di ereditarietà, ho cercato di commentare quanto meglio potevo. Sicuramente si può far di più.

Qualche nota statistica.

  • L'archivio completo del progetto (compensivo di texture, sorgenti, eseguibili, informazioni di debug, e probabilmente anche tanta fuffa che potrei anche togliere) e' di 18 mega. Formato RAR
  • I sorgenti fin'ora sono divisi in 68 files tra headers, classi e shaders. Per un totale di circa 160 kb di puro codice.
  • L'eseguibile ha raggiunto la dimensione di 60 kb (!)


Thursday, June 5, 2008

Radar 2


Non senza qualche difficoltà ho finalmente sistemato il problema del radar che mostrava gli oggetti in posizioni non corrette quando si ruotava la visuale lungo la verticale, rendendolo così di fatto inutilizzabile.
Per la cronaca, la matrice di trasformazione tra coordinate assolute e relative alla posizione ed orientamento dell'astronave non era corretta, o meglio al suo posto andava utilizzata la sua inversa.
Il calcolo matriciale, specie in ambito tridimensionale, spesso è tutto tranne che intuitivo, e non nascondo una mia certa difficolta nell'evitare di far confusione, però devo ammettere che è uno strumento estremamente potente, in poche righe di codice si riesce a fare ciò che con la normale trigonometria diventa invece un pericoloso vortice di lunghe e caotiche forumle, nel quale è davvero facile naufragare.
Sistemato quindi il problema ho deciso di aggiungere l'indicatore di direzione (la freccia rossa che vedete in foto), che rappresenta costantemente la direzione verso la quale la vostra astronave si muove per inerzia, rispetto al vostro stesso punto di vista.
Indubbiamente è comodo, specialmente quando ci si vuole fermare: si orienta l'astronave in modo che la freccia rossa punti verso il "nord" del radar, e si accendono i retrorazzi, fino a quando la velocità non raggiunge lo zero.
Ma ovviamente non basta, la guida è ancora tutt'altro che comoda, e vanno studiati altri accorgimenti affinchè l'esperienza non diventi frustrante.
Un'altra cosa che ho deciso di implementare è la possibilità di cambiare la scala del radar.. quando si combatte ovviamente le distanze tra un'astronave e l'altra sono relativamente piccole, (direi sotto i 100 km), mentre quando si naviga tra un pianeta e l'altro ovviamente le distanze sono milioni di volte piu' grandi. E' chiaro quindi che, a seconda di quel che stiamo facendo, occorre utilizzare la scala appropriata.