IncRay

scene001

E’ un bel po’ che non parlo di programmazione di computer, uno degli argomenti annunciati di questo blog. Il motivo è semplice: non mi ci dedico da un bel po’, se non per tempi brevissimi. Vi voglio tuttavia aggiornare sul progetto più ambizioso che ho intrapreso finora, un programma a sviluppo infinito a cui ho fatto procedere, fino ad oggi, una strada a zig-zag: il mio codice di computer-graphic scritto da zero, il mio motore di rendering, il mo orgoglio, IncRay!

Il nome sta per Incident Ray-tracer: tracciamento dei raggi di luce incidenti, la tecnica abituale di ray-tracing. L’idea era di un software lineare, che prediligesse la semplicità alla massima efficienza, e che fosse espandibile. L’obiettivo era di realizzare immagini fotorealistiche (parola grossa) di geometrie semplici, che avessero una chiara rappresentazione matematica. La prima cosa che mi venne in mente erano le sfere: il luogo dei punti equidistanti da un punto dato detto centro (reminiscenze di geometria), poi passare a piani, triangoli e da questi, in teoria, a qualsiasi geometria.

scena000

Aggiungere nel contempo caratteristiche varie: posizione e colore della luce, colore e proprietà delle superfici, posizione ed angolo d’inquadratura del punto di vista, dimensione dell’immagine.

La storia è stata variegata, incoerente e legata al mio bighellonare hobbistico nell’informatica. Sono partito con una versione in Free Pascal puramente procedurale, poi una in Java strutturata ad oggetti ed infine una in C++. Queste ultime due hanno proceduto per un certo tempo in parallelo per poi concentrare gli sforzi sull’ultima: il C++ è per alcuni versi più scomodo, ma più efficiente. Tuttavia ogni versione ha le sue peculiarità, la convergenza delle funzionalità sul C++ non è ancora completa. Ad esempio solo la vecchia versione Pascal può disegnare triangolo, mentre solo in Java ci possono essere superfici a specchio (che mi piacciono molto), mentre solo nell’ “edizione” in C++ è possibile spostare il punto di vista nelle tre dimensioni, funzionalità che rende molto più flessibile e pratico l’utilizzo.

triangoli04

Lo schema di funzionamento è lo stesso. Un file di testo contiene la descrizione della scena; il programma lo legge, calcola le traiettorie dei raggi di luce a ritroso, partendo dal punto di vista (la macchina da presa, per così dire), li interseca con gli oggetti e verifica le interazioni con la sorgente di luce e gli altri oggetti. In base a questo calcola il colore risultante di ogni punto. Alla fine, salva il file immagine complessivo. Nel post ne ho messo qualche esempio.

Ecco la mia struttura “ad oggetti”. Un sistema gerarchico ricollega tutte le “forme” ad una classe “Geom”, piena di funzioni virtuali (linguaggio C++…). “Sphere” è una sottoclasse di “Geom”, così come “Plane”. “Triangle”, a sua volta, è/sarà una sottoclasse di “Plane”. Ci sono poi classi per i tipi base “Vec3” per il vettore a tre componenti, che ha per sottoclassi “Point” e “Color”; “Surface” per le proprietà di superficie.

C’è molto da fare, ma sono relativamente orgoglione di me stesso. Che ve ne pare?

provaSpecchio

Annunci

7 thoughts on “IncRay

  1. A vedere così sembra ancora uno stato embrionale, ma di programmazione ci capisco poco… se però un giorno riuscirai a fare un motore grafico semplice leggero e photoreal, ti prego di usarlo per un simulatore aereo 🙂

    • Ciao Alex. Non sono così ambizioso: per me programmare è come per altri fare enigmistica: un passatempo, solo un po’ più costruttivo. Ma terrò a mente, magari da cosa nasce cosa.

      Un saluto.

  2. nutro una profonda, sincera, immensa invidia/ammirazione nei tuoi confronti, navigo da tantissimi anni e uso il pc da tantissimi anni ma sono tecnicamente negato, ho imparato il mese scorso a fare lo stamp 🙂

    complimenti sinceri

    TADS

  3. Tanti anni fa anch’io mi dilettavo con la programmazione e leggere il tuo post mi ha fatto ricordare i tempi della mia gioventù. Oggi che posso dirti? Posso solo complimentarmi per le belle immagini che hai ottenuto e che ci hai proposto.
    Nicola

Lascia pure un Commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...