Skip to content

ghoulitopipo/RayTracing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RayTracing - Moteur de Rendu 3D

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.

🎨 Fonctionnalités

  • 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

📁 Structure du Projet

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

🚀 Installation

Prérequis

  • Python 3.7+
  • pip

Installation des dépendances

pip install -r requirements.txt

💻 Utilisation

Exemple basique

python examples/scene_basique.py

Système solaire

python examples/systeme_solaire.py

Créer votre propre scène

from src.core.camera import Camera
from src.core.scene import Scene
from src.core.light import Lumiere

RayTracing — Comment ça marche (guide rapide)

Ce 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.

1 — Principe de fonctionnement

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.


2 — Fichiers importants

  • src/ : code source (modules core, 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 dans output/premade/ et peuvent servir d'illustration.

3 — Exemples d'images (préfaites)

Voici quelques rendus d'exemple présents dans output/premade/ :

Système solaire

Tout

Image générée

Invisible

Solo


4 — Comment lancer une scène

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.py

Chaque 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/.


5 — Paramètres utiles

  • Camera(dimension, position, direction, orientation, distance_focale)
    • dimension : (largeur, hauteur) en pixels
  • Sphere(pos, color, fact_reflechi, fact_refracte, transp, rayon, ind_ref, text)
    • color en RGB normalisé (0..1)
    • fact_reflechi : coefficient de réflexion (0..1)
    • fact_refracte : coefficient de réfraction (0..1)

6 — Astuces pour le rendu

  • 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.

About

Raytracing made in Python for final project.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages