Que vous soyez joueur de jeux vidéo ou fan de cinéma, vous vous êtes sans doute posé un jour quelques questions sur les effets spéciaux 3D.
On ne vous dira pas tout ici mais si vous lisez cet article jusqu’au bout vous pourrez briller en société la prochaine fois que quelqu’un posera une question sur un trucage 3D.
Les principes du Ray Tracing
Quand j’étais gosse je suis un jour tombé sur un article qui parlait de Ray Tracing.
Le magazine informatique était accompagné d’un CD (ou d’une disquette ?) sur lequel était distribué le logiciel libre POV (Persistence of Vision) et il y était expliqué comment réaliser un rendu 3D de plusieurs sphères.
Si je n’ai pas eu le courage de m’y mettre (les temps de calcul se comptaient en jours) le principe m’a en tous cas suffisamment marqué pour que je m’en rappelle encore aujourd’hui.
Le Ray Tracing (ou en français « Lancé de Rayon ») est une technique permettant d’obtenir des images de synthèse photo-réalistes en se basant sur les principes physiques fondamentaux de l’optique : la réfraction de la lumière, le retour inverse de la lumière de Fermat et les Lois de Snell-Descartes.
Les logiciels de ray tracing simulent tous les parcours de rayons lumineux traversant la scène à rendre en 3D :
- les parcours lumineux depuis les sources lumineuses
- les parcours lumineux retour (la lumière « rebondit » sur différentes surfaces)
- les phénomènes d’interférence lumineuse qui peuvent en découler
- les ombres
- etc
Retenez juste que le ray tacing simule au plus proche ce qui se passe « dans la vraie vie » et permet ainsi d’obtenir des rendus 3D saisissants de réalisme, en particulier si vous avez des éléments transparents ou opaques tels que du verre ou des liquides :
Les limites du calcul temps réel
Comme vous l’avez sans doute compris, cette méthode donne de très bons rendus… quand on a le temps et de gros processeurs.
Autrement dit pour du calcul 3D temps réel au sein de jeux vidéo autant faire un croix dessus.
Si je serais bien incapable de vous parler en détails des derniers moteurs 3D, je peux en revanche vous parler d’un des tous premiers moteurs de pseudo 3D : celui de Wolfenstein 3D.
Les cartes des niveaux n’étaient absolument pas en 3D mais en 2D, et même si on trouve aujourd’hui ça très très moche, croyez moi si je vous dit que le jeu a fait l’effet d’une bombe puisqu’il s’agit – excusez du peu – du tout premier FPS de l’histoire des jeux vidéo :
- A l’aide de projection assez basiques (sinus/cosinus) des plans 2D étaient « étendus » selon l’axe vertical pour simuler des murs
- Des textures étaient déformées toujours au moyen d’opérations simple de trigonométrie
- Et du clipping permettait d’économiser le calcul des surfaces masquées à l’écran par les murs
Le clipping
Le clipping consiste à ne pas calculer les objets ne se trouvant pas dans le champs de vision de la scène.
Particulièrement à l’époque – avec nos vieux PC à base de 8086 – nous ne pouvions pas gaspiller le moindre cycle de calcul.
Si par exemple vous débouchez sur un couloir avec un mur qui vous fait face, comme vous ne le voyez pas en intégralité, l’application de texture ne se fait que sur une zone réduite correspondant à un peu plus que votre champs de vision.
Ce mur du fond a également sur ses cotés gauche et droite 2 autres murs qui ne seront pas calculés du tout puisque vous ne pouvez pas les voir… en principe.
Oui en principe seulement car si vous vous déplacez plus vite que ce qui a été prévu par les programmeurs vous risquez de tomber sur un problème de clipping, autrement dit :
- des murs qui clignotent et/ou deviennent transparents
- des tests de collision qui foirent à l’affichage et vous font traverser en partie les murs
- ou pire encore comme dans la vidéo ci-dessous
Animations et Ray Tracing
Mais revenons donc au Ray Tracing.
Comme vous l’avez compris, la technique permet des rendus statiques du plus bel effet. Le passage à l’animation n’est par contre pas aussi simple qu’on pourrait l’imaginer…
En effet calculer le parcours de tous les rayons lumineux prend déjà un temps considérable pour une image et va en prendre encore plus pour une animation.
Pire le problème ne se limite pas uniquement à une question de temps mais aussi à une question de mémoire disponible pour effectuer tous ces calculs.
Par conséquent, même des logiciels professionnels reconnus comme 3ds Max, Maya, Cinema 4D, Lightwave, Mental Ray ou Blender risquent de ne pas pouvoir calculer tous les lancés de rayon de votre animation.
Si en règle générale ça n’a quasiment pas d’incidence, les problèmes de clipping étant réservés aux jeux vidéo, vous pouvez néanmoins avoir des rendus très moches avec ce que l’on appelle du flickering.
Le flickering
Le flickering (scintillement de sources lumineuses) vous en avez déjà rencontré sans le savoir : c’est ce qui apparaît sur votre caméscope ou votre mobile lorsque vous filmez un écran de TV, les fameuses bandes noire horizontales :
Pour le rendu de scènes 3D vous risquez de rencontrer un problème similaire pour les zones en basse exposition lumineuse si vous n’appliquez pas un filtre pre-pass.
Un filtre pre-passe permettra en particulier de prendre en compte ce que l’on appelle l’illumination indirecte… mais pompera aussi une quantité folle de ressources !
Et si je n’ai pas (encore) de super-calculateur à la maison ?
-
The Ray Tracer Challenge: A Test-Driven Guide to Your First 3D Renderer
-
Ray Tracing: A Tool for All
Pour pouvoir obtenir un rendu optimal la seule solution qui s’offre à vous (à part d’acheter une douzaine de calculateurs surboostés) est de recourir à un service de render farm comme render-online par exemple.
Une ferme de rendu est un pool d’ordinateurs dédiés au calcul de rendu et d’images de synthèse. Elle vous permettra d’obtenir vos scènes 3D bien plus rapidement que si vous en lancez le calcul depuis votre ordinateur tout en appliquant tout un tas de filtres qui prendraient des jours ou des semaines sur un ordinateur de bureau.
Selon la prestation les rendus peuvent aller jusqu’à 100x plus vite que sur un processeur Intel Core i7 et vous pourrez dire adieu aux soucis de flickering.