Ray-Tracing et Rasterizer Ray-Tracing et Rasterizer

Ray-Tracing et Rasterizer

J’ai saisi l’occasion du Grand Oral pour me pousser à coder ces deux programmes Python. Les deux programmes n’utilisent que Numpy pour les arrays et les calculs vectoriels et Matplotlib pour transformer les arrays en png.

Raytracing

Ce ray tracing simple en python que j’ai fait en m’inspirant de l’article Medium : “Ray tracing from scratch in python”.

Résultat ray tracing animation

Voici les fonctionnalités du ray-tracer :

  • Rendre des images avec perspective ou isométrique
  • Rendre des depth -map
  • Matériaux différents (diffuse, indice de réflexion…)
  • Supporte autant de lumière que voulu
  • Reflets récursifs avec profondeur choisie
  • FOV dynamique
  • Pour le moment, ne peut que faire le ray tracing avec des sphères.
  • Version parallèle du renderer pour gagner en vitesse (image 4 k de profondeur 6 avec 2 lumières en généré 2 min sur ma machine)

Résultat ray tracing 4 k

J’ai aussi mis à disposition le code original de l’article dans le dépot.

Futur

Je prévois d’étendre le ray tracing cet été :

  • Support de plus d’objets (plan, triangle)
  • Caméra non fixe
  • Peut-être support de texture

Rasterizer

J’ai fait le rasterizer en m’inspirant du livre “Computer Graphics from Scratch” de Gabriel Gambetta, accessible gratuitement en ligne.

Voici les fonctionnalités du rasterizer :

  • Dessiner des triangles ou des lignes sur un plan.
  • Projeter des points de l’espace sur un plan.
  • Culling basique pour les triangles hors de vue ou pas face à la caméra.
  • Rendre une image wireframe ou avec les triangles pleins d’un espace 3D.

Cubes