Google+
3DVF Network :
ico_magazine
Magazine
ico_boutique
Boutique
ico_cgjobs
Portail Emploi
ico_upload
Hébergement d'image
ico_progiss
Progiss
Login
space
space

Accueil / Magazine / Actualité Quotidienne / Technologies / Cyril Crassin : nouvelle méthode d'illumination globale et d'AO temps réel

 

Cyril Crassin : nouvelle méthode d'illumination globale et d'AO temps réel

Publiée le 28 juin 2011 par shadows44 (13272 lectures)
space

GI

Cyril Crassin, actuellement en thèse à l'INRIA de Grenoble, présentera cet été au SIGGRAPH un projet de recherche sur l'illumination globale et l'ambient occlusion en temps réel.
Si l'ambient occlusion est actuellement fréquemment simulé dans les jeux via le SSAO (Screen-Space Ambient Occlusion), cette méthode n'est pas sans inconvénients : approximative, elle génère souvent des artefacts indésirables dès que la caméra bouge.
Par ailleurs, l'illumination globale en temps réel, avec support de l'illumination indirecte, est encore balbutiante pour le temps réel, et toute amélioration en termes de réalisme ou de performances est donc bienvenue.

GI

En collaboration avec Miguel Sainz et Simon Green de NVIDIA, Fabrice Neyret de CNRS et Elmar Eisemann de ParisTech, Cyril a donc travaillé sur une nouvelle méthode utilisant une subdivision de l'espace de la scène 3D (par des voxels). L'algorithme utilise ensuite un cone-tracing (qui, pour faire simple, est un dérivé du raytracing utilisant des cônes et non de simples rayons) approximatif pour déterminer une valeur approchée de l'illumination globale.

La vidéo qui suit donne une idée du résultat sur le célèbre modèle 3D du Sponza Atrium (que l'on trouvera chez Crytek), largement utilisé pour les tests d'illumination globale.


Comme on le voit, le système ne gère pas seulement la composante diffuse : les réflexions spéculaires de type glossy (douces) sont aussi supportées.
A partir de 3:39, la vidéo montre l'envers du décor, avec la subdivision en voxels. Pour apporter le support des objets mobiles (ici, la main), les voxels sont mis à jour en temps réel à proximité de ces derniers.
Voici les grandes lignes de l'algorithme :

1 Comme on le voit dans la vidéo, le système est de type sparse voxel octree : en clair, on divise la scène en cubes, que l'on va ensuite subdiviser de façon non uniforme : si un cube donné contient la surface d'un objet, on le subdivise. Sinon, on le laisse tel quel. Ainsi, on obtient une division 3D affinée uniquement autour de la surface des objets.
Comme la génération se fait selon le principe de la subdivision d'un cube existant en sous-cubes, on obtient un système de type arbre : l'octree.

2 Le système d'octree ainsi généré permet de stocker les informations sur la lumière arrivant dans chaque portion de la scène : on effectue un rendu de la scène depuis chacune des sources lumineuses, et l'intensité/direction en chaque subdivision de l'octree est stockée.
Les valeurs ainsi stockées sont ensuite filtrées, de façon à donner une valeur aux niveaux supérieurs de chaque subdivision (les cubes pères de chaque cube créé).

3 Enfin, on passe au rendu proprement dit, du point de vue de la caméra 3D. Pour celà, on emploie le fameux cone tracing. Les caractéristiques optiques du matériau (BRDF) sont prises en compte pour déterminer les caractéristiques de ces cônes.
On effectue alors une intégration volumique pour chaque cône, autrement dit, on va additionner les contributions des différents vocels rencontrés sur son chemin. Le fait d'avoir effectué l'étape 2 permet ici de gagner du temps : au fur et à mesure que l'on s'éloigne du point pour lequel on calcule l'illumination globale, le cône s'élargit. Plutôt que de prendre en compte les contributions des multiples voxels, on intègre celle du volume le plus grand possible, ceci permettant un gain de temps précieux.

algorithme

Explication visuelle du procédé ; ci-dessous, l'étape de cone tracing, et à gauche, le système de voxels.

cone tracing


Au final, les résultats obtenus ne provoquent pas d'artefacts. Les sources dynamiques sont prises en compte, de même que les objets mobiles. L'illumination globale est calculée jusqu'au niveau 2 (2 rebonds successifs de la lumière entre la source lumineuse et la caméra), ce qui est suffisant pour obtenir un bon réalisme, tout en conservant des performances temps réel (25 à 70 FPS sur une GTX 580).


Le calcul de l'Ambient Occlusion se dérive assez simplement du système mis en place :


Contrairement aux méthodes telles que le SSAO, on n'a pas d'artefacts lors des mouvements de caméra, sans compter que le rendu est plus proche de la réalité, et que l'occlusion lointaine est prise en compte.

Cyril Crassin présentera un talk dédié à ce travail de recherche lors du prochain SIGGRAPH, le 9 août. Pour ceux qui ne seront pas sur place, la présentation sera rapidement mise en ligne.
Plus de détails techniques sont également disponibles en ligne, avec une partie de sa présentation du SIGGRAPH, et un poster dont sont issus les schémas techniques de cet article.

Enfin, n'hésitez pas à faire un tour sur le blog de Cyril Crassin.

space
space

Les derniers commentaires (4)

#3
Ah !! Cool ... mets nous plein de bonne chose dedans! Une petite suggestion: un shader réaliste RMS pour shave and a haircut qui ne fait pas "peinture à l'huile" comme celui livré en standart avec le plug ! une autre suggestion: un bouton qui effectuerait toute ma prod lorsque j'appuierai dessus ... hein ? Quoi ? Comment ça n'importe quoi ? ....
 
#4
[quote]Une petite suggestion: un shader réaliste RMS pour shave and a haircut qui ne fait pas "peinture à l'huile" comme celui livré en standart avec le plug ![/quote] ben le seul genre de shader realiste pour les hair ce sont ceux basés sur le marschner, j'en ai fais un qui fonctionne vraiment bien et qui est tres rapide mais ce n'est pas vraiment le genre de shader simple a regler et pour le moment il n'est pas au programme car je ne compte pas exposer en open source les codes sur lesquels j'ai passé pas mal de temps, un shader de marschner y'en a dans les toutes grosses boites et c'est pas le genre de shader qu'on partage comme ça gratuitement. ( je tiens pas a filer mes codes qui sont bien plus optimisés que la plupart de ceux qui ont devellopé ce genre de shader notamment ilm ou encore sony et Rythm and hue. ). Par contre je pourrais fare un muhair pour renderman c'est un shader qui le simule mais c'est comme le muhair MR c'est un fake marschner ce n'est pas hyper photorealiste ( ben ca rend comme le muhair avec MR.;-)). Le seul soucis reste dans le fait de supporter les fonctions de shave avec car les parametres de shave sont prevu pour fonctionner avec le shader de joe alter. Je sais pas si on va integrer le shader de GmpHair pour le moment ce n'est pas au programme non plus. Ce qui est prevu actuellement, deja commencé voir presque fini, c'est un component diffuse ( avec plusieurs type de diffuse), un component de specular avec different type de spec brdf et des surprises, et un component sss amelioré (specialement pour pascalR !!). ce qui est prevu ensuite c'est un shader de component type delux mais amelioré, mais pour cela on attend de voir comment pixar va ammener rms 2 avec le nouveau pipeline de maya 2009 aussi et les modifs de prman 13.5 et 14 a venir. le probleme qui se pose actuellement c'est que les aovs sont mal gerés et les bake pass de meme de plus les envlight c'est un peu galere, je dois un peu me pencher la dessus car ya rien dans la doc donc faut fouiller, bidouiller ,tester, et ca prend du temps de chercher quand on sait pas comment chercher.;-) ( et en plus je suis actuellement en prod donc peu de temps a y consacrer réelement.) [quote]une autre suggestion: un bouton qui effectuerait toute ma prod lorsque j'appuierai dessus ... hein ? Quoi ? Comment ça n'importe quoi ? ....[/quote] Ca je l'ai deja integré a maya dans un boutton shelf ca s'appel maxwell, mais ca fait pas le café !;-) ( et ca na pas vraiment ce quon appel des "qualités filtre" ! vue le grain !)
 
space
space
space
space
space
space
space
space
A Propos | Contact | Publicité
Copyright © 2000-2018 3DVF. Tous droits réservés. | Infogérance serveur | tracker
space