Le raytracing peut-il supplanter la rastérisation ?

1 : Introduction 2 : Les concepts de base 3 : Les avantages du raytracing 4 : Les autres avantage 6 : Un algorithme simple ? 7 : Les limites 8 : Un moteur de rendu hybride ? 9 : Conclusion

Le raytracing : mythes…

Mais le raytracing n’est pas pour autant la solution ultime, il est donc temps de casser l’ensemble des mythes qui l’entourent. Tout d’abord pour beaucoup de joueurs le raytracing est intrinsèquement un meilleur algorithme que la rastérisation car c’est « ce qui est utilisé dans les films ». C’est faux.  La majorité des films en image de synthèse (et notamment tous ceux de Pixar) utilisent un algorithme appelé REYES qui repose sur… la rastérisation ! Pixar n’a ajouté le raytracing à Renderman, son moteur de rendu, que tardivement, lors de la production de Cars et même pour ce dernier le raytracing n’a été utilisé qu’avec parcimonie afin d’éviter de voir les temps de calcul exploser. Jusqu’ici Pixar reposait sur un module externe pour  les quelques usages qu’ils avaient du raytracing notamment l’occlusion ambiante.

Le deuxième mythe qui est largement entretenu par les défenseurs du raytracing concerne la complexité des scènes qu’il est possible de rendre avec le raytracing et la rastérisation. Pour mieux comprendre il faut se pencher de plus près sur chacun des algorithmes, la rastérisation fonctionne ainsi.

Pour chaque triangle de la scène :

  • déterminer l’ensemble des pixels couverts par ce triangle
  • pour chaque pixel couvert : comparer sa profondeur  à celle du pixel le plus proche jusqu’ici

Comme on le voit la boucle principale de la rastérisation repose sur le nombre de triangles, on dit que l’algorithme a une complexité en O(n) avec n nombre de triangles c’est-à-dire que l’algorithme évolue linéairement en fonction du nombre de triangles car pour chaque image il faut parcourir la liste de triangles, l’un après l’autre.

A l’inverse le raytracing fonctionne ainsi.

Pour chaque pixel de l’image :

  • lancer un rayon pour déterminer les triangles potentiellement les plus proches
  • pour chaque triangle : calculer la distance du triangle au plan de l’image

Comme on le voit la boucle est en quelque sorte inversée : dans un cas on prend chaque polygone et on cherche quels pixels ils couvrent, dans l’autre on prend chaque pixel et ensuite on regarde à quel polygone il correspond.  On peut donc penser que le raytracing est moins dépendant du nombre de triangles que la rastérisation vu que le nombre de triangles ne joue pas dans la boucle principale, mais en pratique ce n’est pas le cas : en effet pour déterminer le triangle qui va être intersecté par notre rayon il faut aussi parcourir l’ensemble des triangles de la scène. Là encore les partisans du raytracing mettent en avant le fait qu’en pratique il n’est pas nécessaire de parcourir TOUS les triangles de la scène à chaque rayon. Il est très facile en utilisant une structure de données adaptée d’organiser les triangles de telle façon que seule une petite partie d’entre eux ait besoin d’être testé pour chaque rayon, ils en déduisent donc que le raytracing a une complexité en O(log n) avec n nombre de polygones.

Et ce point de vue est tout à fait exact, seulement là où il est quelque peu malhonnête c’est qu’il est tout à fait applicable à la rastérisation : les moteurs de jeux ne se privent pas depuis des années pour utiliser des BSP-Tree et autres techniques pour limiter le nombre de polygones à traiter à chaque image calculée. Autre point discutable de ce raisonnement : cette structure de données est particulièrement efficace pour les données statiques. Dans ce cas il suffit de la calculer une fois et ensuite on se contente d’y accéder ce qui donne de très bons résultats, mais qu’en est-il des données dynamiques ? Pour celles-ci la structure de données doit être recalculée à chaque image, et pour la calculer il n’y a pas de miracle il faut examiner chaque polygone.

Sommaire :

  1. Introduction
  2. Les concepts de base
  3. Les avantages du raytracing
  4. Les autres avantage
  5. Le raytracing : mythes…
  6. Un algorithme simple ?
  7. Les limites
  8. Un moteur de rendu hybride ?
  9. Conclusion