# Applications > Dveloppement 2D, 3D et Jeux > Moteurs 3D >  Illumination globale vs temps reel

## Shirakana

Bonjour !

Mon projet actuel est d'tudier les techniques et algorithmes permettant de faire de l'illumination globale en temps rel. Le but tant d'adapter les thories de la recherche actuel pour un moteur de jeux vidos next-gen.

J'ai donc commenc a lire un paquet de publications, thses, articles de recherches mais aucun ne s'applique vraiment au temps rel ou aux contraintes du jeu vido. Pour l'instant le candidat le plus probable serait le couple "PRT / SH" et galement l'utilisation d' "irradiance volume".

Mais avant de ma lancer, j'aurais aim savoir si certains d'entre vous ont dj essaye d'appliquer ce genre de technique auparavant. D'autre part je sais que certains jeux next-gen implmente dj ces techniques d'clairage avanc: Halo, Crysis, Unreal 3, ou mme certains middleware comme Lightsprint, Fantasylab ou Geometrics... mais pas moyen de savoir quelle technique ils ont employ...

Merci a ceux qui ont deja tudi / appliqu ces techniques pour leurs conseils et tuyaux.

----------


## Laurent Gomila

Effectivement, les PRT / SH  permettent pas mal de trucs. Y a pas mal de variations et techniques  tudier, mais bon il faut garder en tte que a reste limit  des clairages d'ambiance, reprsentables en faibles frquences. Bon courage si tu t'aventures de ce ct, y a de la doc  potasser  :;): 

Tu peux galement jeter un oeil du ct de l'ambient occlusion, il y a des versions dynamiques qui marchent plutt bien pour pas cher (Crysis utilise une technique calcule en espace cran). Regarde aussi du ct de GPU Gems (le 2 je crois), nVidia propose une autre implmentation temps rel, qui doit aussi tre dispo sur leur site en PDF.

On parle aussi de plus en plus de raytracing en temps rel, mais je pense que cela reste loin d'tre exploitable dans des jeux commerciaux.

----------


## Shirakana

Oui j'ai deja un peu tudi l'AO dcrit dans GPU Gems 2 et un ou deux papiers traitant du SSAO mais je pense que ca ne couvre pas les fonctionnalits attendues dans mon cas: je veux seulement traiter l'illumination indirect i.e tout la lumire qui fluctue dans la scne aprs X rebonds, avec camera dynamique, objets dynamiques  (voire dformables) et lumires dynamiques si possible. Il faut que j'approfondisse les techniques d'AO pour voir ce qui serait utilisable.

Il commence a y avoir des mthodes de raytracing sur GPU mais ca ne dpasse pas le 5Hz donc inutilisable.

----------


## Laurent Gomila

Les techniques d'AO simulent bien de l'clairage indirect (en l'occurence, les zones de pnombre crs par la gometrie) ; certes en interne c'est principalement de la grosse feinte, mais le but est tout de mme de simuler de l'illumination globale.

Sinon, je ne sais pas si cela rentre dans tes recherches, mais tu peux galement tudier les techniques existantes concernant le sub-surface scattering, la rfraction, etc. L encore il y a des choses temps-rel sympas qui ont t dveloppes (fais un tour du ct des IOTD sur gamedev.net).

----------


## Shirakana

Si j'ai bien compris l'AO va seulement crer des ombres (ou plus prcisment de la pnombre) entre deux objets proches ou au sein d'un mme objet, mais ce ne sera que des ombres douces. Moi je cherche plutt quelque chose qui pourrait grer les phnomnes de radiosit et de rflexion (basse frquence a devrait suffir). Mais rien n'empche de rajouter de l'AO par la suite.

Ce n'est pas encore dcid mais je pense que le sub-surface scattering est un peu hors contexte dans le cadre du jeu vido.

----------


## LeGreg

La mthode de Gpu Gems ne gre pas que les ombres meme si c'est ce qui est mis en avant dans le papier.
Michael Bunnell a fond sa propre boite et rafin sa technique :
http://www.fantasylab.com/newPages/rtgi.html

sinon c'est un truc comme a que tu veux ?
http://www.geomerics.com/enlighten-media.htm

LeGreg

----------


## Bakura

J'avais trouv quelques papiers sur le sujet, par exemple l : http://nis-lab.is.s.u-tokyo.ac.jp/~n...r07Iwasaki.pdf

----------


## Shirakana

> J'avais trouv quelques papiers sur le sujet, par exemple l : http://nis-lab.is.s.u-tokyo.ac.jp/~n...r07Iwasaki.pdf


Merci pour le lien, c'est peut-tre un des rares papiers que je n'avais pas encore lu. Je n'ai pas encore tout lu en dtail mais il semble qu'il ne dpasse pas les 20 fps alors que la scne ne comporte trois fois rien... Mais bon je vais regarder a de  plus prs a pourrait m'inspirer.




> sinon c'est un truc comme a que tu veux ? http://www.geomerics.com/enlighten-media.htm


A ben si je peux russir a faire aussi bien ce serait le top, mais oui l'ide est la... Par contre il ne dvoile rien de leur technique (mme pas la thorie de base qu'ils ont utilis).

Sinon j'avais deja regarde le truc de Fantasy Lab mais c'est pareil, il ne donne aucune infos sur leurs mthodes d'illumination indirecte.

----------


## bafman

le problme, c'est que l'illumination global en temps rel, c'est un peut le nerf de la guerre actuellement, du coup, des que quelqu'un a une ide qui marche, il monte sa boite et essaye de vendre son produit... du coup, impossible d'avoir des relles infos sur le sujet

sinon, tu a aussi http://lightsprint.com/ qui fait dans la solution middleware et qui est issue des recherches de http://dee.cz/lightsmark/ ou tu peut trouver quelques liens (mais je ne sais pas ce qu'ils valent...)

d'ailleurs, un conseils pour ceux qui cherchent des papiers la dessus : gardez toujours une copie de ces papier, car ils on une fcheuse tendance  disparaitre du net des que les auteurs montent leurs boites  ::aie::

----------


## Shirakana

Oui j'ai deja regarde un peu ce que fait lightsprint, c'est trs joli (au niveau radiosit) mme si les ombres ne sont pas toujours exactes, mais comme d'habitude impossible de savoir quelle mthodes ils utilisent... Par contre j'ai lu que Fantasy lab n'utilise ni lightmap, ni prt, ni sh, ni ambient occlusion ???  :8O:  Ils doivent avoir trouv une technique rvolutionnaire.

Et effectivement certains papiers disparaissent, je suis tombe sur des liens morts ou des papiers a acheter  ::(: 

Bon ben je retourne a mes lectures  :;):

----------


## Bakura

Bon, j'avoue je m'tais pas mal renseign sur le sujet  ::): . J'avais trouv NORMMENT de papiers sur le sujet (par contre comme vous dites rien sur les techniques de Lightsprint - d'ailleurs leur dmo est assez impressionnante, mme sur ma vieillissante 9800 Pro le rendu sur des scnes assez complexes est suprieur  25 fps !), mais la plupart donnent des techniques assez lentes ou parfois extrmement compliques que je n'ai jamais russi  comprendre. Tu as de la lecture ! J'upload tout sur mon FTP developpez.com. Bonne lecture  ::yaisse2::  Ya un peu de tout (il y a en tout... 44 PAPIERS :d) et je pense qu'il y a un peu prs tout ce qui est disponible sur le net  ::D: . Si tu en as d'autres qui sont pas dans cette liste merci de me les faire parvenir, a pourrai faire une collection de papiers sur le sujet !

http://bakura.developpez.com/illumination.7z

----------


## Shirakana

De mon cot j'ai runis un paquet de papiers, publications, thses... mais sur des sujets varies de l'illumination (photon mapping, ray tracing,...) et en tout je dois bien me retrouver avec une centaine de trucs.

Merci beaucoup pour ton archive, a m'aurait peut-tre permis de vrifier si je ne suis pas pass a cot de certaines publications (qui auraient peut-tre disparus de la circulation) mais le probleme est que je suis sous Linux Ubuntu et que je ne peux pas lire les archives .7z Donc si tu pouvais me le transformer en un truc plus "standard" genre zip ou targz ca m'arrangerait bien (ou au pire je trouverais bien qqn avec une machine windows qui pourra me l'extraire). Quand j'aurais fini mon travail de documentation je pourrais t'envoyer les papiers pertinents que tu n'aurais pas lu.

Merci encore

----------


## Bakura

Ouep, voil l'archive en .zip : http://bakura.developpez.com/illumination.zip

----------


## Shirakana

Merci bien ! Je vais regarder ce que tu aurais pu trouver d'original, et je t'enverrai les miens (mais avant il faudrait que je fasse un peu de tri)

----------


## Bakura

Un petit up, parce qu'il y a eu pas mal de nouveauts ces derniers mois sur ce sujet  ::): . J'ai recens sur mon blog quelques unes des dernires techniques. Il y en a notamment une de trs intressante en image-space et qui peut peut-tre s'avrer viable, mais j'avoue avoir du mal  visualiser les rsultats sur des scnes d'intrieurs avec cet algorithme en image-space...

----------


## LeGreg

> Un petit up, parce qu'il y a eu pas mal de nouveauts ces derniers mois sur ce sujet . J'ai recens sur mon blog quelques unes des dernires techniques. Il y en a notamment une de trs intressante en image-space et qui peut peut-tre s'avrer viable, mais j'avoue avoir du mal  visualiser les rsultats sur des scnes d'intrieurs avec cet algorithme en image-space...


Image space means you get what you paid for..

Mais la plupart du temps on parle de jeux, pas de simulations prcises, hein. Donc tant que a fait illusion..

----------


## Bakura

> Image space means you get what you paid for..
> 
> Mais la plupart du temps on parle de jeux, pas de simulations prcises, hein. Donc tant que a fait illusion..


Hein ?  ::aie:: 

Je disais que j'ai un peu de mal avec cette technique, car d'aprs ce que j'ai compris du papier (je l'ai lu trs vite...) l'clairage indirect est calcul en image space, et comment veux-tu que a donne un rsultat correct si tu es dans un long couloir qui tourne ? T'auras aucun clariage direct sur cette partie, et vu qu'il fera tout noir, ben ton algo image-space il fera pas grand chose ^^.

Alors ok, ils proposent une technique pour "contourner" ce problme en dessinant la scne de 4 points de vue diffrents, mais d'une tu perds un peu du bnfice d'un algorithme en image-space, et de deux reste  voir comment a scale sur des scnes intrieurs assez complexes...

Alors ouais, c'est cool les techniques image-space, mais pour ce genre d'algorithmes je suis pas sur des rsultats... On m'a toujusr dit que les graphics researchers faisaient toujours gaffe de tester sur des scnes faites pour l'algorithme. En l'occurence, ils testent a soit sur une scne en extrieur donc avec un fort clairage direct, ou soit sur une Cornell Box :/.

----------


## LeGreg

Ce qu'il faut retenir c'est que ce n'est pas un remplaant de la global illumination mais un outil qui donne des touches d'interreflexion (color bleeding) sans le cot gnralement associ (photon mapping, radiosit, etc).

----------


## Bakura

Oui oui, je n'ai jamais dit le contraire ^^. C'est la premire technique je vois qui est vraiment exploitable dans un contexte temps-rel (enfin, qui soit explique ^^).

PS : Mais... qu'est-ce que tu fais l en cette soire de rveillon ?  ::aie::

----------


## Mikmacer

a fait quelque temps que j'tudie la question, j'ai regar au moins une trentaine de "papers" sur le sujet, et la plupart ne montraient que des techniques ne donnant pas un trs bon FPS, dans des scnes pas trs complexes. En plus, certain semblaient tres assez complexes  implmenter, et c'est l qu'on voit que si on veut implmenter le Global Illumination, il faut compltement qu'il soit insr profond dans le moteur 3D.

J'ai regard les techniques en Screen Space, ce sont probablement parmi les plus optimiss et faciles  implmenter, mais au final le rsultat n'est pas convaincant. Lorsqu'on tourne la vu, et c'est l que a se complique, le rsultat peu changer tellement que la scne peut paratre compltement "glitch". Une des technique que j'ai vu est de prendre plusieurs vues, mais cela devient extrmement couteux. Par contre, le SSGI( Screen space global illumination ) peut trs bien faire pour les jeux de style RTS, o la vue est loigne.

Finalement, j'en suis venu  la conclusion qu'il faut absolument radicalement "APPROXIMER" le global illumination pour qu'il soit implmentable en temps rel.

Il y a une technique qui m'est venu en tte aprs toutes ces lectures: Une faon d'approximer qui est optimis et qui donne un rsultat convaincant, est de faire un rendu de profondeur  partir de la light, il peut tre le mme que celui utilis pour faire l'ombrage en gardant les couleurs et les normales. Ensuite on choisi quelques pixels( au moins 5 je dirais) prdfinis et on enregistre le vecteur des ray qui part de la light et qui reflte sur la normale des pixels et on fait la moyenne de tout les vecteurs, en mme temps on prend la moyenne de couleur tout les pixels et on forme une light ambiante avec ce vecteur. Sinon, on peut faire plusieurs light avec ces vecteurs, mais c'est sr que c'est plus optimis de crer une light avec la moyenne.

En fait, j'avais lu une ligne o il tait marqu de crer une vecteur qui fait la moyenne dans Real Time Rendering third edition, c'est de l que me vient l'ide en partie, et une technique similaire est utilis pour ce sdk commercial : (http://www.youtube.com/watch?v=ewQuQ...eature=related) En fait, ce serait la technique utilise dans la premire scne, selon le livre.

Sinon, il y a certaines choses qu'on peut prcalculer pour aider  faire le GI en temps rel. Pour ma technique, on pourrait prcalculer la couleurs de rebond directement dans la gomtrie, et lancer des ray sans calculer un rendu de la scne. Bien sr, un clairage de type deffered lighting serait appropri pour du GI en temps rel.

Edit :
Je viens de regarder une vido HD de enlighten, et on voit clairement dans les options du GUI que la couleur de rebond, des seconds bond de la lumire, est une couleur prdtermine appele missive. Donc, juste le fait d'avoir une couleur prdfinie pour la couleur de rebond sauve beaucoup de temps de calcul.

----------


## Bakura

Salut,

Effectivement la plupart des techniques ont un FPS trs bas, impraticable en dehors de petites scnes. Toutefois les recherches font beaucoup de progrs sur ce domaine, ne serait-ce qu'en 2008 j'ai du recenser au moins une quinzaine de nouvelles techniques ou d'amliorations d'anciennes techniques, donc a avance, doucement  ::): .

Aprs c'est un compromis  faire. Il existe pas mal de techniques TRES efficaces et qui pour le coup sont exploitables en temps rel, mais soit avec la gomtrie fixe, ou les lampes fixes, ou les deux...

Par contre, on emploie (moi aussi...) souvent le mot global illumination, mais en fait l on parle surtout de l'clairage indirect. Le mot global illumination englobe d'autres effets (comme les caustics).




> Il y a une technique qui m'est venu en tte aprs toutes ces lectures: Une faon d'approximer qui est optimis et qui donne un rsultat convaincant, est de faire un rendu de profondeur  partir de la light, il peut tre le mme que celui utilis pour faire l'ombrage en gardant les couleurs et les normales. Ensuite on choisi quelques pixels( au moins 5 je dirais) prdfinis et on enregistre le vecteur des ray qui part de la light et qui reflte sur la normale des pixels et on fait la moyenne de tout les vecteurs, en mme temps on prend la moyenne de couleur tout les pixels et on forme une light ambiante avec ce vecteur. Sinon, on peut faire plusieurs light avec ces vecteurs, mais c'est sr que c'est plus optimis de crer une light avec la moyenne.


a ressemble aux Reflective Shadow Maps ce que tu me dcris l non ?




> En fait, j'avais lu une ligne o il tait marqu de crer une vecteur qui fait la moyenne dans Real Time Rendering third edition, c'est de l que me vient l'ide en partie, et une technique similaire est utilis pour ce sdk commercial : (http://www.youtube.com/watch?v=ewQuQ...eature=related) En fait, ce serait la technique utilise dans la premire scne, selon le livre.


Fait attention aussi... J'avais lu sur un forum (aprs c'est peut-tre de la jalousie de la part de certaines personnes  ::aie::  ) qui ont analyss en dtail les vidos d'Enlighten et visiblement il y aurait pas mal de trucs prcalculs ce qui entraneraient quelques concessions sur certains niveaux...

En tout cas, je ne sais pas si tu as lu cette publication, mais personnellement parmi toutes ces publications qui reposent plus ou moins sur la mme technique de base, je trouve celle-ci particulirement lgante et puissante.

Environ 75 fps pour 12 000 vertices et 12 fps pour 125 000 vertices. Mme si a reste relativement peu, la technique en elle-mme est vachement lgante puisqu'elle repose sur un systme "hybride" raytracing-rasterization, o tout l'clairage indirect (ainsi que les ombres indirectes, automatiquement gres par l'algorithme et qui te permet donc de te passer d'un truc pour imiter comme l'ambiant occlusion) est calcul par le raytracing et l'clairage direct, primary rays, shadow maps et tous les autres effets par la rasterization !

Contrairement aux autres techniques comme tu dis o tu dessines la scne  partir du point de vue de la lampe (qui, d'une, empche d'avoir un moyen simple pour les point light, et de deux t'empche trs vite d'ajouter d'autres lampes !), l tu peux facilement avoir plusieurs lampes. Idem pour le nombre de "bounce" de la lumire, dans cette technique un bounce quivaut, en gros,  traverser une liste de lien gnre par ton raytracing...

D'autre part je pense que cette technique est srement une technique de choix, tu n'as qu' voir Lightsmark, un autre moteur comme a (encore plus impressionnant que Enlighten, surtout que l tu peux tester  :;): ) repose lui aussi sur un schma hybride rasterization-raytracing. Je pense aussi qu'elle peut tre amliore. Ils utilisent un kd-tree qu'ils recrent  chaque fois "from scratch" (pour pouvoir avoir des scnes dynamiques). J'avais cod un BVH et, sans trop d'optimisation, j'obtenais des temps de cration pour les mmes scnes de presque moiti moins de temps. D'autant plus qu'il existe des techniques plus volues pour les BVH qui te permettent de mettre un jour un BVH de manire trs rapide.

Si tu veux voir une vido de la technique, clique  ::): .

Si tu souhaites parler de cette technique n'hsite pas, je l'ai pas mal tudi et,  part quelques petits points qui me rsistent encore je l'ai lu tellement de fois que je commence  le connatre presque par cur  ::aie::  (par contre je pars dans 1 heure en vacance donc t'tonne pas is je rponds pas ^^)

----------


## LeGreg

> Fait attention aussi... J'avais lu sur un forum (aprs c'est peut-tre de la jalousie de la part de certaines personnes  ) qui ont analyss en dtail les vidos d'Enlighten et visiblement il y aurait pas mal de trucs prcalculs ce qui entraneraient quelques concessions sur certains niveaux...


facteurs de forme..

----------


## Mikmacer

> a ressemble aux Reflective Shadow Maps ce que tu me dcris l non ?


Dans cette technique ils utilisent chaque pixels comme une lumire, il me semble. Ce que j'avais comme ide, c'tait de faire la moyenne de quelques pixels, et de crer une sorte de lumire ambiante dirige par un vecteur, applicable pour une pice, par exemple.




> En tout cas, je ne sais pas si tu as lu cette publication, mais personnellement parmi toutes ces publications qui reposent plus ou moins sur la mme technique de base, je trouve celle-ci particulirement lgante et puissante.


Cette technique est intressante, mais ils utilisent CUDA. Je me demande si c'est compatible avec beaucoup de hardware.... Par contre, la technique peut tre bonne pour tre port sur d'autres environnements semblables.




> D'autre part je pense que cette technique est srement une technique de choix, tu n'as qu' voir Lightsmark, un autre moteur comme a (encore plus impressionnant que Enlighten, surtout que l tu peux tester ) repose lui aussi sur un schma hybride rasterization-raytracing. Je pense aussi qu'elle peut tre amliore. Ils utilisent un kd-tree qu'ils recrent  chaque fois "from scratch" (pour pouvoir avoir des scnes dynamiques).


Lightmark est probablement un des plus impressionants. Comment as-tu eu l'info sur la technique utilise?

J'ai le projet d'implmenter une approximation du GI dans mon moteur temps rel fait avec OpenGL, pour l'instant, je n'ai pas encore dcid de la technique  utiliser... Reste qu'il faut que je finalise la base de mon moteur avant.

----------


## Bakura

> Cette technique est intressante, mais ils utilisent CUDA. Je me demande si c'est compatible avec beaucoup de hardware.... Par contre, la technique peut tre bonne pour tre port sur d'autres environnements semblables.


Rien ne t'empche d'effectuer le lancer de rayons avec le CPU.





> Lightmark est probablement un des plus impressionants. Comment as-tu eu l'info sur la technique utilise?


Sur Beyond3D, l'auteur de Lightsmark avait parl rapidement de la technique, et il disait qu'il utilisait le raytracing.

----------


## lelutin

> Cette technique est intressante, mais ils utilisent CUDA. Je me demande si c'est compatible avec beaucoup de hardware....


http://www.nvidia.com/object/cuda_learn_products.htmlvoila...




> Rien ne t'empche d'effectuer le lancer de rayons avec le CPU.


 Quoi? :8O:  lanc de rayon calcul par le CPU?  ::aie::  a me rappelle mes dbuts en 98... 10mn par image  ::lol::  (fin du troll)
Perso, je pense que faire de l'illumination globale ok c'est beau mais a sert  rien si on a pas penser paralllisation avant dans l'implmentation du moteur.
J'ai donc une tite question: un moteur de rendu open source (oui oui moi vouloir voir le code derrire ^^) faisant illumination globale, photon map; a existe???

----------


## Bakura

> Quoi? lanc de rayon calcul par le CPU?P


Tu serais tonn de voir tout ce qu'on peut faire avec un CPU  ::aie::  (regarde du ct des travaux d'Ingo Wald ^^).

----------


## LeGreg

> Cette technique est intressante, mais ils utilisent CUDA. Je me demande si c'est compatible avec beaucoup de hardware....


~50% du march des gamers (sur Steam ce qui n'est certes pas reprsentatif de la totalit du march PC mais une bonne indication du march des gamers) est capable de faire tourner du code Cuda (c'est mme plus si l'on ne compte pas les vieilles cartes qui ne font plus tourner les jeux rcents) :
http://store.steampowered.com/hwsurvey/videocard/

C'est pas mal en terme de nombre de processeurs installs rien que pour les jeux (c'est beaucoup plus que le nombre de machines qui peuvent faire tourner d3d10 par exemple). 

Pour les applications spcialises (rendu film, mto, finance, ptrole, recherche scientifique), les compagnies achtent directement les serveurs donc le problme de la base installe n'est pas aussi primordial.

----------


## Mikmacer

Depuis la dernire fois que j'ai post ici, j'ai eu le temps d'essayer plusieurs choses :

J'ai implment un shader SSAO sous Horde3D, et en mme temps j'ai chang mon implmentation pour du SSGI, mais les premiers tests que j'ai fait taient horrible!! Je ne crois pas que ce soit une bonne direction  prendre...

En ce moment je travail sur un futur moteur Open Source sous XNA. Pour la dtection de collision j'ai implment un "BSP Tree", ce qui offre la possibilit de lancer plusieurs rayons assez efficacement.

Rcemment, j'ai dcid de crer une vague approximation de la rflexion avec un algorithme assez simple  implmenter :

1-pour chacun des triangles on enregistre une valeur de couleur provenant de la texture
2-Lancer une nombre arbitraire de rayon par lumire de type "Spot Light".
3- On calcul la moyenne des couleurs des triangles atteints.
4 Avec cette moyenne on cre une lumire ambiante dirige par la moyenne des directions de la rflexion du rayon par la normale du triangle

On peut faire  peu prs la mme chose pour chacune des rflexions, mais je n'irais  pas plus que deux bonds. Les trois bond d'une lumire peuvent tres calcul par une pass de shader ce qui est assez optimis. Bien sr, a reste une trs vague approximation.

----------


## Kalith

Je n'ai pas lu l'intgralit du sujet, mais je me souviens avoir lu cet article. J'avais gard en mmoire l'aspect "ambient occlusion pas chre avec radiosity",  vous de voir les contre parties que a implique...
J'espre que a vous aidera  :;):

----------


## Bakura

J'avais vu cet article sur Gamedev, c'est trs beau ^^.

----------


## Bakura

Un nouveau papier aux rsultats impressionnants.

----------

