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… 6 : Un algorithme simple ? 8 : Un moteur de rendu hybride ? 9 : Conclusion

Les limites

Maintenant que nous avons pris soin de remettre en place certains mythes associés au raytracing, intéressons nous aux problèmes de cette technique à proprement parler. Commençons par le problème principal de cet algorithme de rendu : il est lent. Alors bien sûr certains diront que ce n’est pas vraiment un problème,  après tout le raytracing est largement parallélisable et avec le nombre de cœurs qui augmente chaque année, on devrait avoir une augmentation quasi-linéaire des performances du raytracing.  De plus les recherches sur les optimisations à apporter au raytracing sont encore toutes jeunes, lorsqu’on regarde en arrière les premières cartes 3D et qu’on les compare à ce dont nous disposons aujourd’hui on peut donc être optimiste.

Pourtant cette vision des choses laisse de côté un point essentiel : tout l’intérêt du raytracing vient des rayons secondaires, le calcul de visibilité par l’intermédiaire des rayons primaires n’apporte en pratique aucun gain en termes de qualité d’image par rapport à un algorithme de type ZBuffer classique. Le problème est que ces rayons secondaires n’ont absolument aucune cohérence. D’un pixel à l’autre on peut accéder à des données complètement différentes, ce qui met à mal toutes les techniques de cache habituelles qui sont essentielles pour obtenir de bonnes performances. Le calcul des rayons secondaires devient donc extrêmement dépendant du sous-système mémoire et plus particulièrement de la latence, ce qui est la pire situation possible car de toutes les caractéristiques la latence est celle qui a le moins progressé ces dernières années et rien n’indique que les choses soient prêtes à changer. Il est en effet beaucoup plus facile d’augmenter la bande passante en mettant plusieurs puces en parallèle alors que la latence est inhérente à la façon dont fonctionnent les mémoires.

Si les GPU ont eu un tel succès c’est parce que construire un hardware dédié à la rastérisation offrait un résultat extrêmement efficace : la rastérisation a des accès mémoires cohérents qu’il s’agisse de l’accès aux pixels, aux texels ou aux sommets. Ainsi de petits caches couplés à une bande passante massive était la solution idéale pour offrir d’excellentes performances, la bande passante coûte chère mais c’est au moins du domaine du faisable si les enjeux économiques le justifient. A l’inverse il n’existe pas de moyens, même couteux, d’accélérer les accès mémoires des rayons secondaires c’est une des raisons pour lesquels le raytracing ne sera jamais aussi efficace que la rastérisation. 

Un autre problème intrinsèque du raytracing concerne l’antialiasing. En effet les rayons lancés ne sont qu’une simple abstraction mathématique, ils n’ont pas de taille à proprement parler. Par conséquent le test d’intersection avec un triangle renvoie un simple résultat booléen : vrai ou faux, mais ne donne pas de détails du style « 40% du rayon intersecte ce triangle ». La conséquence directe de ce comportement est  qu’on obtient de l’aliasing.

Alors qu’avec la rastérisation il a été possible de découpler la fréquence de rendu (shading) de la fréquence d’échantillonnage (sampling), ce n’est pas aussi simple avec le raytracing. Plusieurs techniques ont été étudiées pour apporter une solution à ce problème, notamment le Beam Tracing ou le Cone Tracing, qui consistent à donner un volume aux rayons, mais du fait de leur complexité elles n’ont pas vraiment rencontrées un grand succès. La seule technique à offrir de bons résultats consiste donc à lancer plus de rayons que de pixels, revenant donc à effectuer le rendu à une résolution supérieure (supersampling). Il va sans dire que cette technique est largement plus coûteuse que le multisampling utilisé par les GPU actuels.

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