Travaux pratiques de Rendu Temps Réel

Objectif

Le but de ces travaux pratiques est de se familiariser avec les techniques fondamentales pour le rendu temps réel en synthèse d'images. Ces TPs sont réalisé en C++ et OpenGL mais les concepts qui seront abordés sont reproductibles dans tout autre langage ou API graphique
Il est fortement recommandé de se munir de son cours pour effectuer les travaux demandés.
Il est vivement conseillé aux étudiants de travailler leurs TPs en dehors des séances encadrées afin d'avancer le plus possible et de profiter de l'encadrement pour se faire expliquer les difficultés qu'ils ont rencontrées.

Évaluation des travaux pratiques

L'évaluation des travaux pratiques se fera à partir d'un contrôle continu pendant les séances. De plus vous enverrez avant le début de la troisième sénace le tp correspondant au deux premières séances. Au plus tard une semaine après la dernière séance le code correspondant au trois dernières séances.

Installation des outils fournis

RTR-TP1.tar.gz. Pour le reste je vais expliquer en séance de TP, et je mettrai à jour cette page dès que possible. Et une scène bien pourri (mais j'en ferrai une mieux ...) scene1.dae et les textures normal diffus

Deuxième partie des TPs : HDR, Tonemap et bloom

Une mise-a-jour/correction des deux premiers TPs (qui est surement encore pleine de bugs) RTR-TP2.tar.gz. Une nouvelle scène de test sponza.tar.gz.
Normalement, après compilation de la correction, et ouverture de la nouvelle scène, vous devez avoir un joli affichage de la scène. Dans openglwidget est codé en dur les différentes passes de rendu. Idéalement ces passes devraient se trouver encapusler dans des classes SpecialFx, mais pas eu le temps de faire ça propre !
Voici une description rapide de ce que vous devez faire (construite à partir d'un grep TODO sur les fichiers fournis). Dans l'ordre, vous allez commencer par le blur.

Un peu de C++ pour commencer : faire un ping pong, sans changer le shader, vous devez avoir la scène d'entrée d'affichée
src/rtr-tp1/openglwidget.cpp:177: // TODO loop to perform several gaussian blur
shaders/blur.frag:15: // TODO compute outColor as a combination of neighbor pixel to obtain a gaussian blur.
Avant de chercher les valeurs gaussienne, essayer un box blur (poids de 1/tailleDuBlur
shaders/blur.vert:17: // TODO compute tex coordinates according to inTexCoord and pixelOffset


shaders/blur.frag:10:// TODO setup weights to correspond to a gaussian blur of nine values

Là vous devez avoir la scene d'entrée floutée avant de passer à la suite.

Le support de plusieurs lumière à été partiellement ajouté au moteur (les lumières sont des point light ...), comme vous n'avez pas encore tonemapper, il y a un facteur de reduction dans phong.frag (mis en dur à 1/4 car il y a 4 lumière dans sponza)
shaders/rtr-tp1/phong.frag:88:// TODO REMOVE THE .25 WHEN GOING IN HDR !!!
il est temps de l'enlever.
shaders/highpass.frag:11: // TODO : high luminance pass filter
A vous de completer pour garder dans le rendu à blurer seulement les pixel ayant une forte luminance ...
Les textures attachées au FBO n'ont pas été mis en mode flottant, allez-y et constater la différence (appeler moi pour me dire ce que vous voyez !)
src/rtr-tp1/openglwidget.cpp:206: // TODO SETUP TEXTURE TO HAVE HDR IMAGES : REPLACE GL_RBGA with GL_RBGA32F
Il ne reste plus qu'à faire le principale : tonemap et bloom (mais c'est pas forcement très compliquer ... je vous laisse expérimenter et chercher sur le net, mais je ne conseil pas Schlick) Si vous avez besoin du min et max lum de la scène, placer les en constantes dans votre shader (nous ne ferons pas, a priori, de shader calculant le min/max ...) shaders/texQuad.frag:23://TODO perform tonemap and bloom

Troisième partie : Shadowmap

D'abord une mise à jour du moteur (attention n'écrasez pas votre TP) : RTR-TP3.tar.gz. depth.tar.gz
Donc après avoir sauvegarder votre tp, vous pouvez remplacer /src/engine par celui de l'archive, et pareil pour le shaders/rtr-tp1/phong.*
Le plus dur c'est de fusionner votre tp (dans openglwidget.cpp), pour cela à coups de diff ou xxdiff ca devrait le faire (vous devez garder la partie ou il y les différentes passes de rendus et ajouter les nouvelles fonctionnalités.
Une fois ces formalités effectuées, le TP commence.
Si besoin je fais un rappel sur les shadow maps
Vous devez mettre en place les bonnes transformations dans updateShadowMaps(). Ce updateShadowMaps est appelé au chargement de la scène, et vu que l'on traite seulement des scènes statiques, pas besoin de mettre à jour à chaque frame.
Ceci permets le calculs des (maximum 5) shadows maps, une pour chaque lumière (que les spots, une petite limitation d'ingénieurie, si vous voulez faire mieux !) de la scène.
La dernière partie se passe dans les shaders phong pour moduler l'éclairement suivant si un pixel est dans l'ombre ou non ;)

TP Rendu Temps Réel/Modélisation Géométrique - 2010 :: VORTEX --- IRIT-UPS-CNRS Valid XHTML 1.0 Strict