Le raytracing peut-il supplanter la rastérisation ?

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

Un algorithme simple ?

Le dernier mythe concerne la simplicité et l’élégance naturelle de l’algorithme de raytracing. En effet s’il est facile d’écrire un raytracer en quelques lignes de code (certains raytracers fonctionnels ont pu être écrits au dos d’une carte de visite !) écrire un raytracer performant est une autre histoire. David Luebke,  un ingénieur de NVIDIA a eu cette remarque totalement adaptée à la réalité : « La rastérisation est rapide mais nécessite de l’ingéniosité pour supporter des effets visuels complexes. Le raytracing supporte des effets visuels complexes mais nécessite de l’ingéniosité pour être rapide ».

Il suffit de lire quelques articles sur les optimisations apportées aux raytracers pour obtenir de meilleures performances afin d’être convaincu de l’exactitude de cette phrase. Par exemple les raytracers les plus performants ne traitent pas les rayons de façon indépendante, ils utilisent ce qu’on appelle des paquets de rayons, ce qui permet d’optimiser les performances lorsque les rayons ont la même origine et une direction proche. Cette optimisation qui s’adapte très bien aux unités SIMD que l’on trouve sur les CPU ou les GPU, s’avère donc efficace pour les rayons primaires qui bénéficient d’une certaine cohérence, ou pour les rayons d’ombre mais en revanche elle n’est pas adaptée du tout aux rayons de réfraction ou de réflexion.

De plus comme le remarque Daniel Pohl dans son article sur Quake Wars RT, utiliser des paquets de rayons peut s’avérer problématique dans le cas de textures transparentes (les fameuses textures alpha utilisées pour les arbres) vu que si tous les rayons d’un même paquet n’ont pas le même comportement (certains touchent la surface et d’autres passent au travers) cela engendre un surcout qui peut vite s’avérer supérieur au gain obtenu en utilisant les paquets de rayon.

Enfin comme nous l’avons noté le raytracing requiert une structure de données performante pour stocker les différents éléments de la scène, c’est elle qui aura un rôle primordial sur les performances obtenues. Mais choisir puis gérer cette structure de données n’est pas évident, certaines ont de meilleures caractéristiques pour les données statiques, d’autres sont au contraire plus rapides pour être mises à jour dans le cas de données dynamiques, d’autres ont un encombrement mémoire moins important. Comme toujours il s’agit de faire trouver un compromis acceptable, il n’y a pas de solution miracle.

Comme nous venons de le voir le raytracing est bien loin du modèle de simplicité et d’élégance que certains laissent supposer. Obtenir de bonnes performances avec un raytracer nécessite d’employer des astuces qui n’ont rien à en envier à celles utilisées par la rastérisation pour reproduire les effets les plus évolués.

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