Infographie 3D - Projet

ven. 01 septembre 2017

Projet Raycasting

exemple

Objectifs

A partir des éléments vus en cours et en TD, réaliser une application illustrant les notions fondamentales du raycasting. L'implantation devra se faire en Python, à l'aide des bibliothèques standards et d'une bibliothèque graphique au choix (cng, tkinter, pyopengl, pygame, ...).


Principes du raycasting

Le raycasting est une technique de calcul d'images de synthèse 3D. Elle a été utilisée avec succès au début des années 1990 dans les jeux vidéo comme Wolfenstein 3D ou Doom. L'implantation était alors entièrement logicielle et ne faisait pas appel à du matériel spécifique.

Il tire parti de certaines caractéristiques du monde virtuel : celui-ci est représenté par une carte 2D simplifiée, les murs sont des plans en général perpendiculaires par rapport au sol, les primitives graphiques sont représentées sous la forme d'approximations planaires.

Le raycasting produit des images anguleuses, avec un champ de vision limité, parallèle au sol. Ceci est dû au fait que le raycasting est essentiellement une technique basée sur une description 2D, et non pas 3D, du monde.

Tombée en désuétude lors de l'apparition des moteurs entièrement en 3D, cette technique a été remise au goût du jour par les technologies portables.


Modélisation

Une conception modulaire, voire objet, se prête naturellement à ce type de problème. En dehors de quelques abstractions (objets mathématiques, images numériques, ...), tous les modules associés au projet trouvent un écho dans le monde réel : caméra, couleurs, obstacles, lumières et caméra. Les descriptions des modules qui suivent ne sont que des suggestions.

Module image : permet de charger et de récupérer les informations associées à un fichier image (dimensions, code RVB d'un pixel, etc.).

Module joueur : gestion des paramètres caractéristiques d'un joueur dans le contexte du raycasting (position, orientation) ainsi que des contrôles associés.

Module carte : génération d'une map, gestion du lancer de rayons, détection de collisions.

Module camera : projection et rendu de tous les objets à l'écran (sol, plafond, murs i.e colonne par colonne, et sprites).

Module principal : boucle de scrutation, gestion des évènements, mise à jour et rendu.


Implantation

Ce projet est un prototype. Néanmoins, un certain nombre de fonctionnalités sont demandées :

  1. codage et chargement d'une carte du niveau courant, définie à partir d'une grille codant l'emplacement des murs (et autres),
  2. affichage en pseudo 3D de la map par la méthode du raycasting,
  3. déplacement d'un avatar avec tests de collisions et mise à jour de l'affichage,
  4. rotation de l'avatar et mise à jour de l'affichage,
  5. affichage informationnel (position et orientation du joueur, nombre d'images par seconde, pourcentage des rayons rencontrants des murs),
  6. application de textures sur les murs,
  7. affichage de sprites représentant des éléments de décors ou des personnages,
  8. prise en compte des sprites dans les calculs de collisions,
  9. prise en compte des calculs d'ombrage.

Evaluation

Les cinq premiers points du projet seront évalués sur la base de 16 points, les options seront évaluées sur la base de 4 points, une archive comportant tous les fichiers nécessaires à l'exécution du projet devra être remise à l'enseignant.