La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

CASANAS Sylvain PASTOR Antoine PERCHET Frederic

Présentations similaires


Présentation au sujet: "CASANAS Sylvain PASTOR Antoine PERCHET Frederic"— Transcription de la présentation:

1 CASANAS Sylvain PASTOR Antoine PERCHET Frederic
Ray-Tracing CASANAS Sylvain PASTOR Antoine PERCHET Frederic

2 Plan Principe Utilisation dans le Rendering Détection des collisions
Diffusion de l’éclairage et des matériaux Réflexion et réfraction Conclusion Plan

3 #declare Box = union { object { Box_Front translate -z. 2
#declare Box = union { object { Box_Front translate -z*2.75} object { Box_Front scale <1,1,-1> translate z*2.75} object { Left_End translate -x*3.75 } object { Left_End scale <-1,1,1> translate x*3.75 } object { Box_Lid } object { Box_Bottom } } #declare Spheres = // Inside of box sphere { <1.5, 1.5, -0.75>, 1.25 texture { T_Wood14 finish { specular 0.35 roughness 0.05 ambient 0.3 } translate x*1 rotate <15, 10, 0> translate y*2 sphere { <-1.5, 1.25, 0.5>, 1 texture { T_Wood18 finish { specular 0.25 roughness ambient 0.35 } scale 0.33 rotate <10, 20, 30> translate y*10 sphere { <-0.75, 1.0, -1.5>, 0.75 texture { T_Wood10 finish { specular 0.5 roughness ambient 0.35 } rotate <30, 10, 20> Les logiciels de modelisation comme 3DSMax, Maya, Lightwave, utilisent à la fois des moteurs de rendu par scanline et des raytracers. En effet lorsque dans 3DS Max vous visualisez une preview de votre scéne dans un des viewports, vous avez à faire sans le savoir à un moteur de rendu par scanline rapide. Par contre lorsque vous lancez le calcul du rendu final, c'est un raytracer qui prend le relai et commence son dur labeur. The ray tracing provides realistic reflection and refractions as well as shadows, while the scan line renders diffuse light and textures at high speed. On distingue les moteurs qualifiés de "scanline renderer" (rendu par scanline), et les moteurs dit "raytracer" (lanceurs de rayon pour ne pas vexer nos académiciens). Sans entrer dans le détail (rassurez-vous, nous aurons largemment l'occasion de nous y plonger), les moteurs de rendu par scanline vont calculer l'image finale pixel par pixel en commencant en haut à gauche de l'image, pour finir en bas à droite (le chemin de parcours pouvant varier selon le moteur). Le calcul de l'image finale se fera si necessaire par plusieurs passes successives, pour par exemple simuler l'éclairage et d'autres effets. Un raytracer n'est qu'une extension d'un moteur de rendu par scanline. Dans le sens qu'un raytracer va également calculer le rendu final pixel par pixel, cependant le calcul des refractions, reflections est fait en une passe et est exact, du fait qu'un raytracer va faire un calcul recursif (quand un rayon rentrera en collision avec un objet, deux nouveaux rayons seront émis : le rayon réfracté par l'objet (si il existe) et le rayon réfléchi (si il exite), et ainsi de suite), ce qui implique des temps de calcul considérables pour une précision inégalable. Les moteurs de rendu par scanline sont beaucoup plus rapide que les raytracers mais donnent également des résultats beaucoup moins satisfaisants, du fait que les ombres, reflections, éclairages ... sont purement simulés. A l'opposé un raytracer donnera des effets ultra réalistes pour la simple raison que le calcul de la lumiére et des autres effets seront exacts, se basant sur des formules physiques réeles, mais cela au depend de la vitesse de rendu (on ne peut pas avoir le beurre et l'argent du beurre). Le moteur de rendu Renderman de Pixar, lancé en 1989 et qui n'a cessé d'évoluer depuis, effectue quant à lui un rendu par scanline, pour la simple et bonne raison qu'un raytracer demande énormément de temps de calcul, et malgrés les fermes de serveurs démesurées utilisées par les studios de production, le temps de rendu reste considérable du fait de la résolution demandée, et attendre 50 ans avant d'avoir la copie finale du film n'est pas vraiment trés intéréssant ,) L'astuce dans ce cas réside dans le fait que sur les effets speciaux d'un film ou même sur un film d'animation, les images defilent tellement vite qu'il n'est pas nécéssaire d'avoir une qualitée de rendu hors du commun pour chaque image. De plus pour obtenir une qualitée de rendu optimale, Renderman à développé un systéme de shaders trés puissant qui permet réellement de personnaliser le rendu final à sa guise. Detection de collision avec des formes primitive pour détecter l’ordre dans lequel apparaissent les objets d’une scene Reflection, refraction, ombre Principe

4 Principe Permet le passage de la 3D à la 2D
Moteurs de rendu : scan line / raytracer Temps réel / Non temps réel Permet la détection de collision Simule la diffusion de la lumière Raytracing Scanline Advanced Lighting Possible Slow More design control Need to cheat Shadows Easy Slower, less control Faster, more control Need separate pass Reflection Refraction Faster, More control Geometry Requires more memory Requires less memory Les logiciels de modelisation comme 3DSMax, Maya, Lightwave, utilisent à la fois des moteurs de rendu par scanline et des raytracers. En effet lorsque dans 3DS Max vous visualisez une preview de votre scéne dans un des viewports, vous avez à faire sans le savoir à un moteur de rendu par scanline rapide. Par contre lorsque vous lancez le calcul du rendu final, c'est un raytracer qui prend le relai et commence son dur labeur. The ray tracing provides realistic reflection and refractions as well as shadows, while the scan line renders diffuse light and textures at high speed. On distingue les moteurs qualifiés de "scanline renderer" (rendu par scanline), et les moteurs dit "raytracer" (lanceurs de rayon pour ne pas vexer nos académiciens). Sans entrer dans le détail (rassurez-vous, nous aurons largemment l'occasion de nous y plonger), les moteurs de rendu par scanline vont calculer l'image finale pixel par pixel en commencant en haut à gauche de l'image, pour finir en bas à droite (le chemin de parcours pouvant varier selon le moteur). Le calcul de l'image finale se fera si necessaire par plusieurs passes successives, pour par exemple simuler l'éclairage et d'autres effets. Un raytracer n'est qu'une extension d'un moteur de rendu par scanline. Dans le sens qu'un raytracer va également calculer le rendu final pixel par pixel, cependant le calcul des refractions, reflections est fait en une passe et est exact, du fait qu'un raytracer va faire un calcul recursif (quand un rayon rentrera en collision avec un objet, deux nouveaux rayons seront émis : le rayon réfracté par l'objet (si il existe) et le rayon réfléchi (si il exite), et ainsi de suite), ce qui implique des temps de calcul considérables pour une précision inégalable. Les moteurs de rendu par scanline sont beaucoup plus rapide que les raytracers mais donnent également des résultats beaucoup moins satisfaisants, du fait que les ombres, reflections, éclairages ... sont purement simulés. A l'opposé un raytracer donnera des effets ultra réalistes pour la simple raison que le calcul de la lumiére et des autres effets seront exacts, se basant sur des formules physiques réeles, mais cela au depend de la vitesse de rendu (on ne peut pas avoir le beurre et l'argent du beurre). Le moteur de rendu Renderman de Pixar, lancé en 1989 et qui n'a cessé d'évoluer depuis, effectue quant à lui un rendu par scanline, pour la simple et bonne raison qu'un raytracer demande énormément de temps de calcul, et malgrés les fermes de serveurs démesurées utilisées par les studios de production, le temps de rendu reste considérable du fait de la résolution demandée, et attendre 50 ans avant d'avoir la copie finale du film n'est pas vraiment trés intéréssant ,) L'astuce dans ce cas réside dans le fait que sur les effets speciaux d'un film ou même sur un film d'animation, les images defilent tellement vite qu'il n'est pas nécéssaire d'avoir une qualitée de rendu hors du commun pour chaque image. De plus pour obtenir une qualitée de rendu optimale, Renderman à développé un systéme de shaders trés puissant qui permet réellement de personnaliser le rendu final à sa guise. Detection de collision avec des formes primitive pour détecter l’ordre dans lequel apparaissent les objets d’une scene Reflection, refraction, ombre Principe

5 Le rendering Qu’est ce qu’un rayon ?
Un rayon possède 3 caractéristiques : Une position de départ O Un vecteur directeur unitaire DIR Une distance t L’équation d’un rayon est : R = O + DIR * t Le rendering

6 Le rendering Comment passer d’une scène 3D à une visualisation 2D ?
Une caméra (Position+ Orientation) Un viewplan (Largeur+ Hauteur+ DistanceCam) Une résolution d’image (xRes + yRes) En fait ce rectangle imaginaire situé devant la caméra et correspondant à l'image finale, est appellé le viewplane. Il est representé dans la classe CCamera, par trois attributs : une largeur (viewplaneWidth), une hauteur (viewplaneHeight) et une distance (viewplaneDist ... la distance correspondant à la distance entre le viewplane et la caméra). Ces valeurs dépdendent du fov (field of vision), de la caméra, cependant nous allons assummer pour le moment que la largeur est de 0.35, la hauteur de 0.5 et la distance de 1.0. Le rendering

7 Le principe est de tracer un rayon pour chaque pixel de l’image en partant de la caméra.
viewPlaneUpLeft = camPos + ((vecDir*viewplaneDist)+(upVec*(viewplaneHeight/2.0f))) - (rightVec*(viewplaneWidth/2.0f)) pixViewPlan = viewPlaneUpLeft + rightVec*xIndent*x - upVec*yIndent*y Où xIndent et YIndent sont respectivement calculés de la facon qui suit : xIndent = viewplaneWidth / (float)xRes; yIndent = viewplaneHeight / (float)yRes; xRes et yRes correspondant à la résolution finale de l'image (par exemple 640x480). x et y correspondent quand à eux, à la position 2D du pixel sur l'image finale, dont on recherche la position dans l'espace sur le viewplane. On appelle donc ce calcul pour chaque pixel de l'image, qui nous retourne le vecteur directeur non normalisé du rayon. Il ne nous reste plus qu'à normaliser ce vecteur, pour obtenir un vecteur directeur unitaire, et bingo ! Nous avons désormais l'origine du rayon (la position de la caméra), le vecteur directeur de ce rayon pour chaque pixel, nous avons donc toutes les informations nécéssaires pour commencer le raytracing ! Let the fun start ! Le rendering

8 Les collisions Détermination des silhouettes
Le but est de trouver le point P(t)=O+DIR*t Solution de l’équation des formes primitives Intersection du rayon et de l’objet Il faut trouver la solution t des polynômes de degré n (solutions analytiques) Degré 1 pour les plans Degré 2 pour les sphère et cylindres Degré 3 ou 4 pour splines et torques Les collisions

9 Les collisions Primitive de base : la Sphère
Equation : (X-Xc)²+ (Y-Yc)²+ (Z-Zc)²= r² On substitue Ox+DIRx*t à X (idem pour Y et Z) On résoud l’équation polynomiale quadratique a*t² + b*t +c =0 obtenue, avec : a = DIRx² + DIRy² + DIRz² b = 2 * (DIRx * (Ox - Xc) + DIRy * (Oy - Yc) + DIRz * (Oz - Zc)) c = ((Ox - Xc)²+ (Oy – Yc)² + (Oz - Zc)²) – r² Calcul du déterminant det=b²-4*a*c Si det<0 pas de solution, det=0 une solution Si det>0 deux intersections telles que : t1 = (-b + sqrt(det)) / (2*a) t2 = (-b - sqrt(det)) / (2*a) Les collisions

10

11 Un peu de lumière et de couleur !
Eclairage

12 Eclairage for each screen pixel
   generate a ray from the camera to the pixel    intersect the ray with all objects in the scene    for the closest intersection       for each light in the scene          generate a ray from the intersection to the light          if not obstructed: Apply illumination       spawn secondary rays (e.g., reflection, refraction)       combine results Eclairage

13 Eclairage Notion de distance Utilisation des lois de Beer
Io : intensité initiale C : concentration "molaire" en produit colorant epsilon : propriété d'absorption du produit dissous l : la distance I1 = AbsorptionL *Io Eclairage

14 Eclairage Notion d’angle d’incidence Les produits scalaires

15 Couleur = Couleur(S) * scal * Couleur(L)
Notion d’angle d’incidence Couleur = Couleur(S) * scal * Couleur(L) Eclairage

16 Textures Les matériaux Material ≠ Texture
char* mName; // Le nom du material. CColor mSpecularColor; // La couleur Specular (rattaché à la brillance de l'objet). CColor mDiffuseColor; // La couleur Diffuse (éclairage diffus). CColor mAmbientColor; // La couleur Ambient (éclairage ambient). CColor mSelfIllumColor; // La couleur de Self Illum (objets éméttant eux même de la lumiére). float mShininess; // La "brillance" du material (utilisé pour la réfléxion). float mShinestrength; // La puissance de brillance (coefficient couplé avec la valeur précédente). float mTransmittivity; // Le coefficient de transmission (utilisé pour la réfraction). float mReflectivity; // Le coefficient de réfléxion (utilisé pour la réfléxion). Textures

17 Eclairage Détermination de la couleur d’un point
Methode GetLightAt(Vector3D normal, Vector3D intersection, Material matl) retourne Couleur     Calculer le vecteur LIGHTVECTOR     Normaliser LIGHTVECTOR      Calculer l'angle de frappe     Si ANGLE <= 0 Alors         COULEURFINALE = Couleur de fond     Sinon         COULEURFINALE = mDiffuseColor(mat) * couleur lumiére * ANGLE * I1 ;     fsi     Retourne COULEURFINALE Fin Methode GetLightAt. Eclairage

18

19 Réflexion

20 n2 / n1 = sin(ThetaT) / sin(ThetaI)
Réfraction Lois de Descartes-Snell n2 / n1 = sin(ThetaT) / sin(ThetaI) n1 n2 Réfraction

21 Réflexion + Réfraction

22 Recursive Réflexion + Réfraction

23

24 Conclusion Très puissant mais coûteux en temps
Des premières applications en temps réel Conclusion

25 Conclusion Vers le temps réel Changements algorithmiques
Traitement simultané de paquets de rayons Meilleurs algorithmes pour la construction de kd- trees Nouvelles structures d’index spaciaux pour les scènes dynamiques Implémentation optimisée Utilisation des dernières technologies processeur Optimisation générale du code Développement de nouveaux matériels Massivement multi-core, multi-thread Conclusion

26 1 processeur quadri-coeurs Yorkfield en 45nm
Année Puissance Resolution affichée FPS 2004 50 Processeurs Xeon 640x480 4 2007 1 processeur quadri-coeurs Yorkfield en 45nm 768x768 90 2 processeurs Xeon X5365 1280x720 “Doing that math, at a 1024x768 resolution for a total of 786,432 pixels times 30 rays per pixel and 60 frames per second, you get billion rays per second required. The team at Intel estimates that within 2 years or so, the hardware will exist that will allow "game quality" ray tracing on a desktop machine. ” Conclusion

27 Références Développement d’un Raytracer Raytracer POV-Ray
html Raytracer POV-Ray Raytracer temps réel g/2658.htm ks/Slusallek.pdf Références


Télécharger ppt "CASANAS Sylvain PASTOR Antoine PERCHET Frederic"

Présentations similaires


Annonces Google