Computer Graphics – Homework 01

Pubblicato il 18/10/17.
Consegna entro il 1/11/17.

Questo homework ha lo scopo principale di abituarci all'utilizzo degli strumenti di programmazione richiesti per gli homework e i progetti. In particolare, in questo homework implementeremo quattro funzionalità:

Framework

Il codice è suddiviso nei seguenti files:

Il codice è compilabile attraveso cmake come mostrato in classe e riassunto, per OsX, nei due scripts build.sh e xcode.sh.

Questo repository contiene anche vari tests che sono eseguibili da riga di comando come mostrato in run.sh. Le immagini generate dal runner sono depositate nella directory out/. Questi risulati devono combaciare con le immagini nella directory check/.

Funzioni da completare

Completare le seguenti funzioni:

Per il caricamento delle immagini, il goal è di copiare i dati retornati da stb_image.h nella nostra struttura dati, richiedendo dalla libreria di generare 4 componenti sempre. Durante il salvataggio, possiamo invece usare una operazione di cast per passare da vec4X* a float*/unsigned char*. Si possono ottenere puntatori ai dati di uno std::vector prendendo l'indirizzo del primo elemento &v[0] o con il metodo std::vector::data(). Inoltre per passare dalla strighe C++ std::string alle stringhe in C char* si usa il metodo std::string::c_str().

Per il tonemapping, applicheremo l'operatore di exposure-gamma e un'operatore di tone mapping "filmico". Per l'exposure-gamma, usiamo un gamma fisso di 2.2, corrispondente a sRGB, come indicato sulle slides. Per il filmic tone mapping, l'immagine è corretta dopo l'exposure e prima del gamma con la funzione

                2.51 h^2 + 0.03 h
filmic(x) = ---------------------------
             2.43 h^2 + 0.59 h + 0.14

che è un fit del tonemapping cinematografico ACES.

Per il compositing, applichiamo le opezioni come indicato sulle slides ricordando che i colori possono essere in sRGB o no, e premoltiplicati o no. La funzione dovrebbe implementare entrambi i modi, ma in generale assumeremo di avere non-premultiplied in input che output. Il gamma correction è invece settato da riga di comando.

Istruzioni

Per partecipare all'homework è necessario completare la form indicata sul sito del corso dove si dichiara norm, cognome, email, numero di matricola e si uploadano i risultati. Per i risultati va incluso uno zip file che include il codice e le immagini generate, cioè una zip con le sole directory src/ e out/. Il file va chiamato <numero_di_matricola>.zip e vanno escluse tutte le altre directory.