Description du projet. Principe d'un Raytracer



Documents pareils
Angles orientés et fonctions circulaires ( En première S )

1 radian. De même, la longueur d un arc de cercle de rayon R et dont l angle au centre a pour mesure α radians est α R. R AB =R.

Structures algébriques

pcon.planner 6 Préparer et présenter une implantation en toute simplicité

Angles orientés et trigonométrie

VOS PREMIERS PAS AVEC TRACENPOCHE

Sujet. calculatrice: autorisée durée: 4 heures

Chapitre 2 : Caractéristiques du mouvement d un solide

Géométrie dans l espace Produit scalaire et équations

G.P. DNS02 Septembre Réfraction...1 I.Préliminaires...1 II.Première partie...1 III.Deuxième partie...3. Réfraction

Détection des points d intérêt et Segmentation des images RGB-D. Présentée par : Bilal Tawbe. Semaine de la recherche de l UQO

Catégories de format d'optimisation

INTRODUCTION À L ANALYSE FACTORIELLE DES CORRESPONDANCES

INFO 2 : Traitement des images

Initiation à la librairie graphique VTK

5 ème Chapitre 4 Triangles

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

Utilisation du visualiseur Avermedia

Projet de traitement d'image - SI 381 reconstitution 3D d'intérieur à partir de photographies

Algorithmique avec Algobox

Représentation géométrique d un nombre complexe

Traitement numérique de l'image. Raphaël Isdant

Paris et New-York sont-ils les sommets d'un carré?

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

DURÉE DU JOUR EN FONCTION DE LA DATE ET DE LA LATITUDE

Fonctions de deux variables. Mai 2011

A.-M. Cubat PMB - Import de notices à partir d un tableur Page 1 Source :

Découverte et prise en main de SWEET HOME 3D

Cercle trigonométrique et mesures d angles

Cours de Mécanique du point matériel

TP, première séquence d exercices.

IFT3355: Infographie Sujet 6: shading 7 (illumination globale 4)

Projet Matlab/Octave : segmentation d'un ballon de couleur dans une image couleur et insertion d'un logo

GESTION DU LOGO. 1. Comment gérer votre logo? Format de l image Dimensions de l image Taille de l image 9

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

Programmation des Applications Réparties. Parsers XML DOM et SAX

Exercices - Nombres complexes : corrigé. Formes algébriques et trigonométriques, module et argument

XML et Bases de données. Les bases de données XML natives.

TOUT CE QU IL FAUT SAVOIR POUR LE BREVET

Java3D. Généralités sur la synthèse d'images temps réel. Généralités sur Java3D. d 'après P.Reignier, UJF

Fonctions de plusieurs variables

Chapitre 0 Introduction à la cinématique

MODE OPÉRATOIRE : CIEL COMPTA

Livre Blanc WebSphere Transcoding Publisher

Comment créer un diagramme de Gantt avec OpenOffice.org

Dossier table tactile - 11/04/2010

FctsAffines.nb 1. Mathématiques, 1-ère année Edition Fonctions affines

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Dessiner dans Galaad FRANÇOIS PALLUT

Découverte du logiciel ordinateur TI-n spire / TI-n spire CAS

Vous écrivez un rapport de 100 pages, et vous souhaitez faire apparaître le logo de l'université en haut de chaque page. Comment procédez-vous?

Travaux pratiques avec RapidMiner

1S Modèles de rédaction Enoncés

Table des matières. 1 À propos de ce manuel Icônes utilisées dans ce manuel Public visé Commentaires...

modélisation solide et dessin technique

Rapport du projet CFD 2010

CAP BOX Note utilisateurs

Traitement par lot redimensionner des images

Serveur Acronis Backup & Recovery 10 pour Linux. Update 5. Guide d'installation

2 Grad Info Soir Langage C++ Juin Projet BANQUE

Sauvegarde et restauration d'un système d'exploitation Clonezilla

Courriel Archiver Version 2: Sommaire. Archiver : Sommaire. Comment ça marche Support Technique Préférences. Recherche

"La collimation est la première cause de mauvaises images dans les instruments amateurs" Walter Scott Houston

TP SIN Traitement d image

Introduction : Cadkey

Introduction à Eclipse

Sommaire. Aide Page 1

Malgré son aspect spartiate, Freeplane offre de nombreuses fonctionnalités en particulier dans le domaine de la diffusion des cartes sur le Web.

chapitre 4 Nombres de Catalan

Formats d images. 1 Introduction

Logiciel SCRATCH FICHE 02

REPRESENTER LA TERRE Cartographie et navigation

Utiliser des fonctions complexes

Chapitre 2. Classes et objets

Opérations de base sur ImageJ

MODULES 3D TAG CLOUD. Par GENIUS AOM

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Charpente visible sous plafond et couverture isolée

Transférer et enregistrer les photos sur l'ordinateur

Cahier Technique. «Développer une application intranet pour la gestion des stages des étudiants» Antonin AILLET. Remi DEVES

Poker. A rendre pour le 25 avril

Sujet. calculatrice: autorisée durée: 4 heures

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Généralités sur le Langage Java et éléments syntaxiques.

Un exemple avec WORKSPACE d'interwrite

Initiation à linfographie

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

LimeSurvey Editeur de Questionnaire

Deux disques dans un carré

Correction du baccalauréat S Liban juin 2007

B2i. LE B2i Brevet Informatique et Internet. Niveau : tous. 1 S'approprier un environnement informatique de travail. b2ico1.odt.

DETERMINER LA LARGEUR DE PAGE D'UN SITE et LES RESOLUTIONS d'ecran

Manuel d'utilisation de l'administration du site Japo.ch - 1

Desktop Intégration. Rémi Forax

BAMOSONIC IT. - Mesure de niveau -

Transcription:

Projet de Java Licence 3 Informatique Rémi Forax, Pierre Peterlongo, Benoit Olivieri (forax@univ-mlv.fr, pierre.peterlongo@univ-mlv.fr, olivieri@univ-mlv.fr) Description du projet Le programme RayOfLight est un petit programme de Raytracing (lancé de rayon) permettant facilement de faire de la synthèse d'image simple. Il existe déjà beaucoup de raytracers qui marchent très bien et qui font beaucoup de choses, le but n'est pas d'implanter toutes les fonctionnalités d'un raytracer classique mais un sousensemble cohérent et qui fonctionne. Principe d'un Raytracer Une scène correspond à un ensemble d'objets que l'on veut afficher à l'écran. Pour chaque point de l'écran, on lance un rayon perpendiculaire (presque voir camera plus bas) à l'écran dans le but de toucher un objet de la scène. Parmi les points d'intersections d'un rayon avec les différents objets de la scène, on prendra le point le plus proche de l'écran pour simuler la profondeur. La couleur du point de l'écran sera en première approximation la couleur de l'objet atteind par le rayon. En fait, cela ne dépend pas uniquement de la couleur de l'objet mais dépend aussi des lumières placées dans la scène, de la reflexion du rayon sur l'objet, etc. On appele modèle d'illumination la formule qui permet de calculer la couleur d'un rayon à un point d'un objet. Qu'est -ce qu'un rayon? Un rayon est caractérisé par un point (noté A par la suite) et un vecteur ( t ). Le point correspond à l'endroit de l'écran où d'un objet dont part le rayon. Le vecteur correspond à la direction du rayon. Référentiel local et universel Lorsque l'on lance un rayon celui-ci a des coordonnées dans le référentiel de la scène globale. Il n'est pas très facile de calculer l'intersection d'un rayon avec un objet dans n'importe que référentiel. Il est plus facile de se placer dans le référentiel de l'objet car les équations sont plus simples. Pour transformer un rayon d'un référentiel vers un autre, on utilise une matrice 4x4 appelée matrice en coordonnées homogènes qui permet d'exprimer les rotations, translations et agrandissements. (cf références sur les bases mathématiques) Attention, exprimer une transformation sur un objet revient à exprimer la transformation inverse sur le rayon. De plus, pour simplifier les calculs, il est plus aisé d'utiliser, une fois tranformés pour être exprimés dans le référentiel de l'objet, des rayons unitaires 1. 1 Les rayons dont le vecteur u a sa norme (longueur) qui est égale à 1

La camera La camera modélise l'écran ainsi que l'oeil de l'observateur. Les rayons sont lancés à partir de l'oeil et détermine la couleur du point de l'écran qui intersecte le rayon. Une caméra est construite en indiquant la taille de l'écran en pixel (width x height) ainsi que la distance entre l'écran et l'oeil de l'observateur. Les objets présent dans la scène Il est demandé d'implanter uniquement deux types objets les sphères et les plans. Soit une sphère placée en (0,0,0) et de rayon 1, M le point de contact entre le rayon et la sphère, u le vecteur du rayon et A le point sur l'écran. Pour trouver la distance d'un rayon à la sphère : - le rayon doit frapper la sphère AM =t u, avec t 0 donc {x M =t u x x A, y M =t u y y A, z M =t u z z A } - le point de contact est sur la sphère x 2 y 2 z 2 =1 On cherche t qui exprime la distance entre un rayon et l'objet, en injectant la première équation dans la seconde équation, on obtient t 2 u x 2 u y 2 u z 2 t 2 u x x A u y y A u z z A x A 2 y A 2 z A 2 1=0 C'est une équation du second degrés en t que l'on résoud facilement avec un discriminant. Si le discriminant est négatif, le rayon n'intersecte pas la sphère Si le discriminant est positif, il faut prendre la racine la plus petite, c-à-d le t le plus petit donc le point de contact avec la sphère le plus proche du rayon. Pour un plan passant par l'origine (0,0,0) perpendiculaire à l'axe des z. Pour trouver la distance d'un rayon au plan : le rayon doit frapper la sphère AM =t u, avec t 0 donc {x M =t u x x A, y M =t u y y A, z M =t u z z A } comme le rayon a un point de contact avec le plan z M =0. t= z A u z si u z est nul, il n'y a pas de point de contact car le rayon est parallèle au plan. si t est négatif, le plan est derrière le rayon.

Les modèles d'illumination Il est demandé d'implanter 4 modèles d'illumination : le modèle ambiant le modèle de Lambert le modèle de Phong le modèle de Whitted (modèle pas complet, juste la reflexion) Pour que le problème reste simple, les modèles de Lambert, Phong et Whitted ne tiendront pas compte du fait qu'un objet peut être placé entre la lumière et l'objet frappé par un rayon. Le modèle ambiant Chaque objet de la scène possède une couleur et lorsque le rayon vient frapper cet objet, la couleur du rayon I (en fait, chaque composante RGB) est celle de l'objet frappé multipliée par un facteur de reflexion k a. I =k a I a I a correspond à la couleur de l'objet et k a au facteur de luminosité ambiant de l'objet. Les lumières de la scène ne sont pas prises en compte dans ce modèle. Le modèle de Lambert Ce modèle prend en compte la reflexion diffuse des lumières de la scène sur les objets. La couleur en un point se calcule en additionnant à la lumière ambiante de l'objet la contribution de chaque lumière de la scène. n I =k a I a i=1 I s k d cos Cette contribution varie en fonction de l'intensité de la lumière I l sur chaque composante RGB (une lumière n'est pas forcément blanche) et du cosinus de l'angle, angle entre la normale N à la surface de l'objet au point d'intersection avec le rayon et le vecteur L I issue de la position de la lumière. L I = MS et MS x =S x M x, MS y =S y M y, MS z =S z M z S x, S y et S z correspondent à la position de la lumière plongée dans le référentiel de l'objet et M x, M y et M z à la position de l'impact du rayon sur l'objet toujours dans le référentiel de l'objet. cos = L I N = MS N = MS x N x MS y N y MS z N z 2, Le cosinus n'a de sens que pour des valeurs positives. Pour les valeurs négatives, l'apport de lumière est nul (l'objet est entre la source et le point d'impact). k d correspond au facteur associé à la reflexion diffuse d'un objet. 2 On rappelle que le produit scalaire de u et v est égal à u x v x u y v y u y v y

A correspond à la position du rayon dans le référentiel de l'objet. M correspond au point d'impact du rayon sur l'objet. S correspond à la position d'une lumière dans le référentiel de l'objet. Le modèle de Phong Ce modèle prend en compte en plus la partie spéculaire 3 de la lumière. n I =k a I a i=1 I l k d cos k s cos m Pour cela il faut calculer le cosinus de l'angle alpha : cos = L R MA Le vecteur de la lumière réfléchi L R est calculé par le fait que L R et L I, le vecteur de la lumière incidente, sont symétriques par rapport à N donc L I L R =2 cos N. On obtient L R par la formule suivante : L R =2 cos N L I donc cos est égal à : cos = 2 cos N x L I x MA x 2 cos N y L I y MA y 2 cos N z L I z MA z 3 C'est la tâche de couleur qui se déplace sur l'objet lorsque l'on change de point de vue. Cela correspond plus ou moins à la reflexion de la lumière sur la boule.

Le modèle partiel de Whitted Ce modèle prend en compte la réflexion d'un objet sur un autre n I =k a I a I s k d cos k s cos m k s I r i=1 Le rayon réfléchi R est calculé par le fait que R et MA sont symétriques par rapport à N donc MA R=2 N cos donc R=2 N cos MA de plus cos = MA N = MA x N x MA z N z MA z N z L'intensité réfléchie I r correspond à l'intensité du rayon envoyé suivant R à partir de M. Comme le modèle de Whitted est récursif, il faut décider de relancer un rayon jusqu'à une certaine profondeur de récursion. On spécifie donc une profondeur (depth) qui correspond au nombre de rayons réfléchis qui seront calculés pour un rayon. Le modèle de Whitted présenté ici n'est pas complet car il manque la transmission du rayon à l'intérieur de l'objet qui permet de gérer la transparence. Pour le modèle de Whitted simplifié, l'apparence d'un objet dépend donc des coéfficients k a, k d, k s et m.

Erreur fréquente : lorsque l'on relance un rayon réfléchi, il faut faire attention à ce qu'il ne rentre pas en collision avec l'objet qu'il vient de toucher. Ligne de commande java -jar rayoflight.jar [-time] scene.xml [-out image.png] java -jar rayoflight.jar permet de lancer le programme. -time indique que le temps de calcul 4 de la scène sera affiché en nano-secondes. scene.xml correspond à un nom de fichier contenant une description en XML d'une scène à raytracer. -out permet d'indiquer le nom et le format de l'image voulu (ex: toto.gif, tutu.jpg) sinon, par défaut, l'image générée est une PNG qui à le même nom que la scène en changeant l'extention. Le format XML d'une scène Une scène est décrite sous forme d'un fichier XML contenant les objets : light possède une position (x,y,z) et une couleur (color) sphere, plane objets qui peuvent avoir une couleur, un material et des transformations camera possède une largeur et une hauteur en pixel et une distance entre l'oeil de l'observateur et la camera. Une camera peut subir des transformations model indique le modèle d'illumination parmi ambient, lambert, phong et whitted. whitted possède en plus un champs depth indiquant le nombre d'appels 4 Ce temps ne prend pas en compte le chargement de la scène ni la sauvegarde de l'image mais uniquement le temps de rendu

récursifs pour la réflexion. color spécifie une couleur au format RGB material spécifie pour un objet son comportement face à la lumière transformation indique les transformations sur un objet ou une camera. Les transformations possible sont : translate x,y,z effectue une translation. rotate-x angle effectue une rotation en x suivant un angle en radian. rotate-y angle effectue une rotation en y suivant un angle en radian. rotate-z angle effectue une rotation en z suivant un angle en radian. scale factor effectue un agrandissement suivant le facteur factor. Exemple : <?xml version="1.0"?> <scene> <sphere> <color red="0.2" green="0.8" blue="0.2"/> <material ka="0.3" kd="0.3" ks="0.3" m="20"/> <transformation> <translate x="2" y="0" z="-2"/> </transformation> </sphere> <sphere> <color red="1.0" green="0.2" blue="0.0"/> <material ka="0.4" kd="0.5" ks="0.3" m="1"/> <transformation> <translate x="-2" y="0" z="-2"/> </transformation> </sphere> <light x="1" y="-4" z="-2"> <color red="1.0" green="1.0" blue="1.0"/> </light> <camera width="600" height="600" eyedistance="4"> <transformation> <translate x="0" y="0" z="-20"/> </transformation> </camera> <model type="whitted" depth="2"/> </scene> Calendrier Ce projet est à faire par binômes (cela veut dire deux personnes pas trois ni une). Le rendu du projet est découpé en deux parties : 1. Pré-rapport indiquant l'architecture objet et tests d'utilisation. Date de rendu : le 31 mars, avant minuit. 2. Rendu du projet en lui-même. Date de rendu : le 11 mai, avant minuit.

Chaque rendu s'effectuera par mail sous forme d'une pièce jointe au format ZIP contenant l'ensemble des programmes et documents. Le mail devra être envoyé avant minuit aux trois adresses données au début de ce document. Le fichier s'appelera nom1_nom2.zip avec nom1 et nom2 les nom des binomes dans l'ordre alphabétique. Détail du premier rendu Le premier rendu est composé de deux documents distincts : un rapport d'architecture détaillant l'architecture objet proposée pour le programme. un rapport de tests contenant des exemples de code commentés des tests à effectuer (les tests demandés sont détaillés plus bas). Ces deux documents doivent être au format PDF. L'architecture générale du projet (au moins 10 pages) : Répondre aux questions : Comment sont codées les transformations sur les objets? Comment l'algorithme de raytracing est codé en terme d'appels de méthodes entre les différents objets? Comment faire pour représenter les différents objets de la scène (boule et plan)? Qu'implique le format du fichier XML sur les objets? Comment faire pour utiliser un modèle d'illumination en fonction de ce qui est demandé dans le fichier XML? Doit suivre ensuite : Le découpage en différentes classes (il y a environ 20 classes ici) en faisant un ou plusieurs schéma. Le rôle de chaque classe. L'ensemble des méthodes publiques de chaque classe. Les tests : voici l'ensemble des essais à effectuer : création d'un script ANT de compilation. création d'un Jar exécutable. Parsing XML, création d'un parseur XML, les APIs DOM et SAX un exemple de chaque ainsi qu'une discussion pour motivé le choix d'une API plutôt que l'autre Image création d'une image en indiquant la couleur de chaque pixel ImageIO, trouver tous les formats de sauvegarde disponibles ImageIO, sauver une image au format PNG, JPG etc. Chaque test doit être accompagné d'un texte expliquant les concepts manipulés, les instructions pour exécuter le test et le code pertinent du test (le plus clair possible, le plus efficace en restant lisible).

Eviter les copier/coller à partir du Web, la plupart du temps les exemples ne sont pas les plus pertinents quand il ne sont pas faux. Remarque générale, essayez de faire des documents cohérents et lisibles, SVP. Détail du second rendu Le second rendu sera détaillé plus tard. Références Jar exécutable http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html Parsing XML cf paquetage javax.parser, org.w3c.dom et org.xml.sax Cours intéressants sur les bases mathématiques http://www710.univ-lyon1.fr/~ameyer/teaching/m1-image/c02_si_math.pdf http://www.siggraph.org/education/materials/hypergraph/modeling/mod_tran/3d.htm Ant http://ant.apache.org/ http://ant.apache.org/manual/ ImageIO cf paquetage javax.imageio et plus particulièrement la classe ImageIO Génération d'une image en Java BufferedImage image= new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); int[] data = ((DataBufferInt)image.getRaster().getDataBuffer()).getData(); //le tableau data est un tableau contenant width*height pixel encodé //sur un int avec suivant le format 0xFF000000 red<<16 green<<8 blue