OpenCL dynamite le Path Tracing
Commençons par un petit récapitulatif des différents algorithmes de calcul pour les images de synthèse :
Le lancer de rayon, ou raytracing, simule le parcours de rayons lumineux jusqu'à chaque pixel d'une caméra virtuelle, permettant de reproduire des effets tels que la réflexion ou la réfraction de la lumière, ainsi que la profondeur de champ d'une optique ou encore les ombres "douces". Longtemps réputé pour la longueur des calculs qu'il nécessite, le raytracing en temps réel n'en est pas moins une réalité de plus en plus fréquente aujourd'hui.
La radiosité a poussé la fidélité un peu plus loin, en offrant un modèle global d'illumination : elle permet notamment de calculer la radiance de la lumière d'une surface à l'autre, un effet qui provoque la teinte rouge sur le plafond, renvoyé par le sol, sur l'image ci-dessous à droite. Notez également que si l'image de gauche a nécessité trois types de lumières (ambiante, omnidirectionnelle et spot), l'image de droite quant à elle n'utilise qu'une seule source de lumière, figurant le soleil et la manière dont il illumine physiquement une scène.
Ce type de rendu prend un temps considérable à calculer, car chaque rayon de lumière est calculé de bout en bout, sur un nombre plus ou moins important de rebonds sur la matière. Pour vous donner un ordre de grandeur, l'image ci-dessous a nécessité pas moins de sept heures de calcul sur un quad core à 2,4 GHz.
Le Path Tracing est la dernière technologie en date, et propose rien de moins qu'une simulation du comportement physique de la lumière aussi précisément que possible, permettant de reproduire naturellement des effets visuels qui auraient nécessité une intervention humaine avec d'autres algorithmes. Le procédé est si fidèle qu'il fait figure de mètre étalon pour la qualité de rendu d'autres algorithmes, permettant de voir ce à quoi une scène donnée ressemblerait dans la réalité.
Cette méthode de calcul ne finit que lorsqu'on interrompt le processus : l'image est sans cesse affinée, et le calcul commence par produire une image particulièrement "bruitée". A mesure que les rayons de lumière sont lancés aléatoirement, plus on laisse le calcul s'éterniser, plus la qualité du résultat sera grande. Cette méthode de calcul est évidemment particulièrement gourmande. C'est là où OpenCL intervient pour accélérer le processus, puisque ce calcul est hautement parallèle de par nature : le parcours de chaque rayon peut être calculé indépendamment. Il ne suffit que de quelques secondes pour obtenir un résultat acceptable.
Vous pourrez trouver sur ce site une application pour Mac OS X 10.6 qui permet de faire du rendu en Path Tracing à l'aide de GLSL, le langage d'OpenGL pour la création de shaders, le tout accéléré par OpenCL. Le résultat est particulièrement impressionnant, même sur des machines équipées de carte graphiques modestes.
Plus étonnant encore, le logiciel a été porté sur WebGL, et peut donc fonctionner dans une simple page web dans les navigateurs qui supportent cette technologie (Chrome, FireFox 4, et les "nightly builds" de Webkit/Safari).
Le lancer de rayon, ou raytracing, simule le parcours de rayons lumineux jusqu'à chaque pixel d'une caméra virtuelle, permettant de reproduire des effets tels que la réflexion ou la réfraction de la lumière, ainsi que la profondeur de champ d'une optique ou encore les ombres "douces". Longtemps réputé pour la longueur des calculs qu'il nécessite, le raytracing en temps réel n'en est pas moins une réalité de plus en plus fréquente aujourd'hui.
La radiosité a poussé la fidélité un peu plus loin, en offrant un modèle global d'illumination : elle permet notamment de calculer la radiance de la lumière d'une surface à l'autre, un effet qui provoque la teinte rouge sur le plafond, renvoyé par le sol, sur l'image ci-dessous à droite. Notez également que si l'image de gauche a nécessité trois types de lumières (ambiante, omnidirectionnelle et spot), l'image de droite quant à elle n'utilise qu'une seule source de lumière, figurant le soleil et la manière dont il illumine physiquement une scène.
Ce type de rendu prend un temps considérable à calculer, car chaque rayon de lumière est calculé de bout en bout, sur un nombre plus ou moins important de rebonds sur la matière. Pour vous donner un ordre de grandeur, l'image ci-dessous a nécessité pas moins de sept heures de calcul sur un quad core à 2,4 GHz.
Le Path Tracing est la dernière technologie en date, et propose rien de moins qu'une simulation du comportement physique de la lumière aussi précisément que possible, permettant de reproduire naturellement des effets visuels qui auraient nécessité une intervention humaine avec d'autres algorithmes. Le procédé est si fidèle qu'il fait figure de mètre étalon pour la qualité de rendu d'autres algorithmes, permettant de voir ce à quoi une scène donnée ressemblerait dans la réalité.
Cette méthode de calcul ne finit que lorsqu'on interrompt le processus : l'image est sans cesse affinée, et le calcul commence par produire une image particulièrement "bruitée". A mesure que les rayons de lumière sont lancés aléatoirement, plus on laisse le calcul s'éterniser, plus la qualité du résultat sera grande. Cette méthode de calcul est évidemment particulièrement gourmande. C'est là où OpenCL intervient pour accélérer le processus, puisque ce calcul est hautement parallèle de par nature : le parcours de chaque rayon peut être calculé indépendamment. Il ne suffit que de quelques secondes pour obtenir un résultat acceptable.
Vous pourrez trouver sur ce site une application pour Mac OS X 10.6 qui permet de faire du rendu en Path Tracing à l'aide de GLSL, le langage d'OpenGL pour la création de shaders, le tout accéléré par OpenCL. Le résultat est particulièrement impressionnant, même sur des machines équipées de carte graphiques modestes.
Plus étonnant encore, le logiciel a été porté sur WebGL, et peut donc fonctionner dans une simple page web dans les navigateurs qui supportent cette technologie (Chrome, FireFox 4, et les "nightly builds" de Webkit/Safari).
Assez impressionnant.
J'espère voir OpenCL géré dans Maxwell Render bientôt :)
Oui, c'est même très acceptable. Je me demande qui va intégrer cette techno par défaut dans ses moteurs de rendu... Blender 3D, peut-être?
La page web en lien dans l'article fait planter complètement Firefox 4.0 à mon taf sous Win XP SP3 : Fermeture instantanée de la fenêtre de FF et de tous ses onglets !
C'est systématique.
@marc_os
Avec Safari ça joue (tu peux toujours essayer Safari pour PC. Pour tester les sites, c'est pas mal.)
Concernant GLSL Path Tracing.app, c'est vraiment rapide (effectivement, même avec ma vieille 7300!). Mais, à part tester les formes et reflets existants, pas moyen de tester avec une importation 3D... Dommage!
Malheureusement, l'usage d'OpenCl pour l'accélération des moteurs de rendu reste encore marginal et expérimental. Nvidia avec CUDA à une longueur d'avance dans ce domaine. C'est simple, quasiment tous les moteurs de rendu utilisant l'accélération graphique passe par CUDA.
Petite parenthèse, il vous a fallu 7h de calcul pour cette pauvre petite scène d'intérieure. C'est pas normal.En plus sur un QuadCore!!!
OpenCL, ce n'était pas mettre à disposition la puissance de la carte graphique pour faire autre chose que du rendu graphique ?
[quote]Zouba [28/04/2011 16:55]
OpenCL, ce n'était pas mettre à disposition la puissance de la carte graphique pour faire autre chose que du rendu graphique ?[/quote]
Le lancer de rayons ne se calcule pas de la même façon que le rendu 3D classique, je crois qu'on est obligés de passer par l'OpenCL ou une librairie comme CUDA pour cela.
@ Zouba : OpenCL c'est pour faire du calcul "générique" sur la carte graphique (y compris des calculs graphiques, sachant que tout calcul graphique n'est pas nécessairement de nature à être accéléré par la carte graphique). En l'occurrence, le calcul du Path Tracing ne fait pas partie des choses qui sont accélérées "nativement" par les cartes graphiques, d'où l'utilité d'OpenCL pour le faire.
@ ashurao : pour de la radiosité, si, c'est normal ;¬)
@ ErGo_404 & Nonoche : Merci :)
J'ai lancé l'appli sur mon MacBook Pro 2,33 / 3 Go RAM / ATI X1600, il s'est bloqué. J'ai été obligé de forcer l'extinction avec le bouton.
@ashurao [28/04/2011 16:47]
les chiffres sont normaux oui.
@oomu et Nonoche:
Nous parlons bien de la scène d'intérieure façon rendu clay?
Vous pourriez me donnez quelques précisions comme la résolution de l'image lors du calcul, le niveau de AA.
@ ashurao
C'est à cause de la télé dans le fond, c'est une 1080P ^^
@ ashurao : les textures n'ont que peu d'incidence en l'espèce, l'image a nécessité le calcul de 5,1 milliards de rayons, d'où la longueur du calcul. Tous les détails : http://fr.wikipedia.org/wiki/Radiosité
@oomu et Nonoche:
Non, ce n'est pas normal :)
Une scène aussi simple rendue en illumination globale prend probablement au maximum 1 minute de calcul sur mon iMac Core i7 à cette résolution, et je suis généreux.
Edit:
Merci pour le lien sur WikiPedia. Tout ce que je peux dire, c'est que une scène visuellement similaire rendue dans Cinema4D en illumination globale prends infiniment moins de temps de calcul, alors je ne sais pas exactement pourquoi cette scène particulière est si gourmande en temps de calcul.
Article intéressant.
Pour ce qui est de l'application GLSL Path Tracing et sans doute de l'OpenCL en général, ça n'utilise pas le CPU pour calculer, mais par contre ça fait ramer OS X bien plus que si les cores étaient utilisés à 100% (avec la 9400 intégrée).
En l'état, j'espère surtout que les développeurs ne vont pas en abuser; le CPU n'est pas utilisé, le moniteur d'activité ne "voit" rien. Il n'y a donc pas de moyen "par défaut" (càd sans installer un soft supplémentaire) dans OS X pour déterminer quelle application est la source d'un problème de réactivité si ce dernier est lié à OpenCL...
Embêtant.
[quote]ashurao [28/04/2011 16:47]
Malheureusement, l'usage d'OpenCl pour l'accélération des moteurs de rendu reste encore marginal et expérimental. Nvidia avec CUDA à une longueur d'avance dans ce domaine. C'est simple, quasiment tous les moteurs de rendu utilisant l'accélération graphique passe par CUDA.
Petite parenthèse, il vous a fallu 7h de calcul pour cette pauvre petite scène d'intérieure. C'est pas normal.En plus sur un QuadCore!!! [/quote]
Exact, CUDA est à la pointe. InVidia démarche d'ailleurs les entreprises IT, les banques, etc. pour vendre leur techno.
D'accord avec [b]majipoor[/b]. 7h c'est assez long pour une scène de ce type et j'en ai passé du temps à attendre ou à pas dormir à cause des ventilos... A moins de pousser les réglages outre mesure je ne vois pas comment atteindre 7h de rendu...
OpenCL, encore une technologie open source largement reprise par tous et créé par Apple.
Etonant pour une entreprise fermé et qui ne participe jamais à l'open source ... dixit les fandroids