Le projet ayant été mené à bien, nous mettons à disposition les sources et notre rapport dans cette archive.
Fin du projet
22 Monday Feb 2016
Posted in Uncategorized
22 Monday Feb 2016
Posted in Uncategorized
Le projet ayant été mené à bien, nous mettons à disposition les sources et notre rapport dans cette archive.
15 Monday Feb 2016
Posted in Uncategorized
Avancement :
Actuellement 2 bounces de lumiere en 128×128 prend 500 ms sur une nvidia 650M.
Toujours autant de problèmes d’uv mapping, avec des effets sur les bords de pire en pire lorsque l’on diminue la taille de la texture.. C’est dommage parce qu’une texture 64×64 suffirait et dans ce cas la je calcule les 2 bounces en 13 ms…
Une texture 256×256 permet d’enlever presque tous les effets de bords mais il faut 2 secondes pour calculer la GI.


Rendu temps réel avec lumière et objet dynamique. Taille de la texture 128×128
Il semblerait que faire un uv unwrap parfait n’est pas un problème solvable. Il y a énormément de cas très compliqués (par exemple un quad plus petitequ’un pixel de la texture sur un axe et extremement grand sur un autre axe). La création de notre uv unwrapper nous a prit environs 50% du temps sur le projet, et je ne pense pas pouvoir l’améliorer en une semaine.
Du coup je pense que l’on va commencer le rapport et faire une petite GUI pour pouvoir modifier les paramètres de la scene pour la démo.
12 Friday Feb 2016
Posted in Uncategorized
Avancement :
A Faire :

Rendu Actuel
11 Thursday Feb 2016
Posted in Uncategorized
Avancement :
A faire :


10 Wednesday Feb 2016
Posted in Uncategorized

05 Friday Feb 2016
Posted in Uncategorized
Les problèmes de lightmapping sont presque tous corrigés. Il ne manque que le sampling linear.
Calcul de l’ambient occlusion :

Et voici un premier test de color bleeding :

04 Thursday Feb 2016
Posted in Uncategorized
Correction de certains problèmes et amélioration de l’existant :

Rendu sans conservative rasterization

Rendu avec conservative rasterization
01 Monday Feb 2016
Posted in Uncategorized
Notre ligne directrice est désormais limpide.
Correction de certains problèmes de création d’uv lightmap pack :
Génération de nos buffers de surfels :
Notre première texture contient la position des surfels dans l’espace monde ainsi qu’un masque alpha précisant si l’on se trouve bien sur un surfel ou si l’on se trouve sur une bordure ou dans le fond de la texture.

Notre deuxième texture contient la direction de nos surfels (a.k.a les normales aux faces), ainsi que l’aire de nos surfels (sachant que dans notre cas, nos surfels ont tous la même aire, on pourrait sûrement se passer de cette donnée)

Un gros avantage de pouvoir dessiner nos objets directement dans nos textures est, pour un objet est dynamique, de ne mettre à jour seulement la partie des textures le concernant. Sans recalculer les surfels correspondant à nos objets statiques.
Le support d’objet dynamique est donc totalement envisageable et très peu coûteux.
Problème : Nos textures sont de très petites tailles (128×128). OpenGL admet qu’un pixel appartient à un triangle que l’on dessine, si et seulement si le triangle remplit plus de X% de l’espace de ce pixel. En dessinant dans nos petites textures ce n’est souvent pas le cas, et les pixels sont donc zappés.

Dans la figure ci-dessus, (a) montre ce que fait OpenGL, (b) montre ce que nous voulons faire.
Cela s’appelle la conservative rasterization. C’est un problème très récent, qui n’a pas encore de solution clef en main. Il existe des extensions Intel et Nvidia mais elles sont encore très peu supportées. Cela sera sûrement ajouté à la prochaine version d’OpenGL (ou de Vulkan). En attendant, il y a cet article présentant deux méthodes à l’aide de geometry shader pour corriger ce problème.
Une fois que l’on a nos deux textures d’informations, on peut appliquer une formule d’occlusion d’un surfel sur un autre :

Il n’y a pas de formule magique ici, il suffit de trouver un facteur d’occlusion d’un surfel Emetteur sur un surfel Receveur en prenant en compte leur aire, leur distance, et leur orientation l’un par rapport à l’autre.
Exemple d’une formule d’occlusion :

On peut ainsi générer notre texture d’occlusion ambiante :

De là, obtenir l’illumination globale devient facile. En effet, il nous suffit de générer une troisième texture contenant l’illumination directe de nos faces (modèle d’illumination de Phong ainsi que la couleur de nos objets sera un bon début). Une fois cette troisième texture obtenue, il suffit d’appliquer une formule similaire à celle de l’occlusion ambiante permettant de définir la quantité de lumière qu’un surfel reçoit des autres.
Cet article contient sûrement des explications obscures mais notre rapport sera plus clair.
26 Tuesday Jan 2016
Posted in Uncategorized
Nous avons décidés d’implémenter l’algorithme avec la lightmap puisque nous voulons pouvoir profiter de la possibilité de faire du bounces feedback. De plus, nous pensons que cette technique nous permettra de gagner du temps par rapport à l’autre technique puisque l’on fait moins de calculs d’illumination indirecte.

Test du lightmapping : chaque rectangle de la texture de droite correspond a une face sur Suzanne
Beaucoup de difficultés sur le packing de texture. On sample parfois 1 pixel à côté lorsque la texture est petite.. Problèmes de précisions.
19 Tuesday Jan 2016
Posted in Uncategorized
Le calcul de l’illumination directe pour toute la géométrie est un problème crucial car très coûteux. Enlighten de Geomerics se simplifie grandement la vie à ce niveau en ne prenant comme illumination directe que les points en screenspace; mais c’est vraiment de la triche !