3GYPT

3GYPT

Codice : Ninja Killer
Musica : Kenet
3GYPT e' un breve demo che occupa 18Kb. Il puro codice solo 7Kb (senza musica e player). Non male, se si pensa che un normale HelloWorld occupa 28Kb (!).
Questo e' il mio primo intro in OpenGL, e' molto semplice, ha una sola scena, nessun effetto ne arte, ma sono soddisfatto del risultato: ho ottenuto esattamente cio' che volevo.

Ora che ho l'esperienza ed un mio demosystem, sono pronto a produrre qualcosa di complesso.

Lo sviluppo di 3GYPT ha richiesto 37 ore di Visual C++, sparse nell'arco di 15 giorni (dal 15 al 30 Ottobre 2001), nei lassi di tempo in cui non stavo leggendo tutorial e manuali di OpenGL.

Download (24 Kb)


Texture generator

Generare texture proceduralmente e' una vera figata: con pochi byte di istruzioni si possono fornire dati sufficienti ad un generatore pseudocasuale per la renderizzazione di svariati tipi di materiali.

Le texture (sabbia, nuvole, marmo...) hanno risoluzione 256 x 256 x 24bpp. Ogni texture occuperebbe 192Kb.
Anche il terreno e' generato (non e' altro che una texture usata come height map).

Il mio generatore di Texture (NKTexGen) si basa su un'implementazione velocissima, non ricorsiva, e completamente soggettiva dell'algoritmo Perlin Noise. NKTexGen non usa neppure i gradienti ai nodi, direi che assomiglia di piu' ad una sintesi di Fourier.

Non ci sono limiti a cio' che si puo' creare: basta aggiungere, se necessario, nuovi filtri per-pixel, progettare i vari layer, scegliere i colori, et voila.
A volte, giocando a caso con i parametri, si ottengono risultati particolari, e subito nasce l'idea per una nuova texture.


NK MipMap Filter

In molti giochi/demo, abilitando il mipmapping, si notano i fastidiosi mipmapping artifacts (fig. a destra) lungo le linee di cambio mipmap. In genere si ricorre al filtraggio trilineare per risolvere il problema, ma esiste una soluzione piu' pulita:

man mano che si scende nella piramide delle mipmap, la risoluzione viene dimezzata ad ogni livello. Di conseguenza, risulta naturale scegliere una composizione spettrale centrata sulle ottave, di modo che, cambiando mipmap, non cambi la conformazione della texture, ma solo il livello di dettaglio.


Altre caratteristiche

  • Camera path: la telecamera segue un percorso definito da pochi punti (key) e da una formula di interpolazione. Quest'ultima e' uno degli aspetti piu' interessanti, che mi ha spinto a realizzare un intro in stile flyby. Infatti la funzione di interpolazione deve permettere di ottenere un movimento fluido, uniforme, e facilmente controllabile con il minor numero possibile di punti (occupano spazio).
    Per evitare eccessive oscillazioni e ridurre i calcoli, si deve limitare il grado del polinomio (spline), con l'ulteriore vantaggio che il controllo diventa locale (spostando un punto si modifica solo una sezione della curva).
    Dopo diversi tentativi ho scelto una B-spline cubica (non interpolante) con blending functions personalizzate (perfetta, Oh yeah!).
  • Custom CRT: ho riscritto un paio di funzioni della libreria CRT per ridurre ulteriormente le dimensioni, rimuovendo funzionalita' non necessarie (in particolare lo scanning degli argomenti nella linea di comando).
  • Un semplicissimo e velocissimo sistema per il calcolo delle normali ai vertici, che non richiede nessuna moltiplicazione, ma solo un paio di sottrazioni per ogni vertice (normalizzazione esclusa).
  • Sky sphere: il cielo e' una sfera che trasla (ma non ruota) con la telecamera. Le nuvole si muovono.
  • Un munu di configurazione della risoluzione e della profondita' di colore.
  • Fullscreen/Window mode. La finestra e' ridimensionabile a piacere (per gli amanti del 16:9).
  • Un'Icona, che da sola si prende 512 byte per via dell'allineamento (ma mi faceva comodo per arrotondare a 18Kb).
  • Uso delle display list ai massimi livelli, per ridurre i calcoli (delle normali) e le chiamate alle funzioni.
  • Temporizzazione tramite performance timer. Il frame rate non e' limitato.
  • Creazione e rendering di caratteri basati su font di sistema.
  • Radial blur tramite rendering su texture (Sul titolo).
  • Environmental mapping (Sulle 2 colonne).
  • Riproduzione di file XM.
  • Exe compression.

Kenet

La musica di 3GYPT é intitolata "Funky bubbles". Kenet, l'autore, é un personaggio attivissimo della scena, alla quale contribuisce in particolare con musiche e grafica.


Links

ClothSim - Il mio simulatore di tessuti
Pouet.net - Una completa racolta di intro e demo
FAQ - Cos'é un intro?

HomePage | WinBode | ClothSim | 3GYPT | JavaSimplex | Unreal Museum | Unreal Comic | WebMaster
  N i n j aK i l l e r