Un moteur de ray tracing (lancer de rayons) écrit en Python, permettant de générer des images 3D photoréalistes avec réflexions, réfractions et textures.
- Ray tracing récursif avec gestion des réflexions et réfractions
- Illumination de Phong pour un éclairage réaliste
- Ombres portées calculées dynamiquement
- Texture mapping pour les sphères
- Primitives géométriques : Sphères, Plans, Triangles
- Anti-aliasing (configurable)
- Multi-objets avec gestion des intersections
RayTracing/
├── src/
│ ├── __init__.py
│ ├── core/ # Composants principaux
│ │ ├── __init__.py
│ │ ├── camera.py # Gestion de la caméra virtuelle
│ │ ├── scene.py # Gestion de la scène et rendu
│ │ └── light.py # Sources lumineuses et illumination
│ ├── objects/ # Primitives géométriques
│ │ ├── __init__.py
│ │ ├── base.py # Classe de base Objet
│ │ ├── sphere.py # Sphères
│ │ ├── plan.py # Plans infinis
│ │ └── triangle.py # Triangles
│ └── utils/ # Utilitaires
│ ├── __init__.py
│ └── vector.py # Opérations vectorielles 3D
├── examples/ # Exemples de scènes
│ ├── scene_basique.py # Scène simple avec sphères
│ └── systeme_solaire.py # Système solaire avec textures
├── textures/ # Fichiers de textures
│ ├── earth.bmp
│ ├── sun.bmp
│ ├── mars.jpg
│ ├── jupiter.jpg
│ └── ...
├── output/ # Images générées
├── tests/ # Tests unitaires
├── requirements.txt
└── README.md
- Python 3.7+
- pip
pip install -r requirements.txtpython examples/scene_basique.pypython examples/systeme_solaire.pyfrom src.core.camera import Camera
from src.core.scene import Scene
from src.core.light import LumiereCe dépôt contient un petit moteur de ray tracing en Python. Le but : montrer les principes de base du rendu par lancer de rayons (ray tracing) avec des exemples prêts à l'emploi.
Le moteur lance un rayon par pixel depuis la caméra vers la scène. Pour chaque rayon il :
- calcule l'intersection la plus proche avec les objets (sphères, plans, triangles),
- calcule la normale au point d'intersection et la couleur locale (texture ou couleur de l'objet),
- calcule l'éclairage selon le modèle de Phong (ambiante, diffuse, spéculaire),
- gère récursivement la réflexion et la réfraction si l'objet le demande.
La couleur finale d'un pixel est la combinaison de ces contributions.
src/: code source (modulescore,objects,utils)examples/: scènes prêtes (ex.scene_basique.py,systeme_solaire.py,scene_demo.py),textures/: textures utilisées pour le mapping sphérique,output/: images générées. Les exemples suivants sont disponibles dansoutput/premade/et peuvent servir d'illustration.
Voici quelques rendus d'exemple présents dans output/premade/ :
Les exemples se lancent depuis la racine du projet. Par exemple :
python examples/scene_demo.py # scène de démonstration (résolution 800x600)
python examples/scene_basique.py # exemple simple
python examples/systeme_solaire.pyChaque script crée une instance de src.core.scene.Scene et appelle
construction_image_fin() pour effectuer le rendu et sauvegarder l'image dans
output/.
Camera(dimension, position, direction, orientation, distance_focale)dimension: (largeur, hauteur) en pixels
Sphere(pos, color, fact_reflechi, fact_refracte, transp, rayon, ind_ref, text)coloren RGB normalisé (0..1)fact_reflechi: coefficient de réflexion (0..1)fact_refracte: coefficient de réfraction (0..1)
- Pour des tests rapides, réduisez la résolution (ex. 800x600 ou 640x480).
- Augmentez la profondeur de récursion avec prudence : plus de réflexions augmentent fortement le temps de rendu.
- Si les textures manquent, le moteur crée des images de remplacement.




