TP POV-RAY N°1
Transcription
TP POV-RAY N°1
TP POV-RAY N°1 Découverte du logiciel La première étape de ce TP va être de prendre en main le logiciel afin que vous puissiez réaliser votre première scène. POV-Ray existant aussi bien sous Windows que sous Linux, vous pouvez lancer votre session sous le système d’exploitation de votre choix. Néanmoins, sachez que la configuration de la scène et la scène elle-même se fait beaucoup plus facilement sous Windows (à travers une simple interface, coloration syntaxique appropriée, présence de menu adapté, …) que sous Linux (quelques lignes à taper dans un fichier séparé, pas de coloration syntaxique, …). Si vous choisissez de travailler sous Windows, vous pouvez passer directement à la section suivante. Pour les plus geeks acharnés, voilà comment configurer sa scène sous Linux. Avant de décrire une scène, POV-Ray doit connaître les paramètres qui devront être utilisés lors du rendu de celle-ci. Ces paramètres doivent être renseignés dans un fichier .ini, il va donc falloir créer ce fichier. Lancez l’éditeur de texte de votre choix et créez un fichier nommé Config.ini, ou quelque chose dans le genre. De nombreuses options sont disponibles, mais nous n’utiliserons que les plus répandues (vous pouvez satisfaire votre curiosité concernant toutes les options possibles en consultant la documentation en ligne sur le site de POV-Ray, mais le temps risquerait de vous manquer). Voilà à quoi ressemble un fichier .ini de base ; Ceci est un commentaire ; Dimensions de l’image Width = 800 Height = 600 ; Fichiers d’entrée et de sortie Input_File_Name = EpicSaxGuy.pov ; la scène que l’on souhaite rendre Output_File_Name = GetOnMyHorseMyHorseIsAmazing.png ; Veillez à bien mettre l’extension du fichier image ; final .png. Il est également possible d’utiliser ; d’autres extensions. ; Chemin des différentes librairies Library_Path = /usr/share/povray-3.6/include ; Diverses options Display = On ; Affiche ou non le rendu en temps réel dans une fenêtre Pause_When_Done = On ; Ferme automatiquement ou non la fenêtre de rendu Display_Gamma = 0.0 ; Changez cette valeur seulement si la fenêtre de rendu est trop claire / sombre Une fois que votre fichier .ini est créé, il nous vous reste plus qu’à créer un second fichier (dont l’extension est .pov) dans lequel vous allez décrire votre scène POV-Ray. C’est le chemin vers ce nouveau fichier que vous devez renseigner dans le .ini. Ainsi, il est donc possible de n’avoir qu’un seul fichier Config.ini pour différentes scènes afin de ne pas avoir à le recréer à chaque fois. Dans ce cas, veillez bien à changer le nom du fichier de la scène à rendre. Enfin, le rendu s’effectue via la commande povray nom_du_fichier_config.ini. Hello sphere Pour rendre ses images, POV-Ray se base sur un fichier .pov dans lequel la scène 3D est décrite. C’est ce fichier que nous allons créer et que vous allez peu à peu modifier jusqu’à ce que vous soyez assez à l’aise pour en créer de nouveaux. Tapez les lignes suivantes (notez que la caméra doit être définie en premier, puis au moins une lumière. Les objets de la scène viennent seulement ensuite). #include “colors.inc” #include “textures.inc” // Inclut les couleurs // Inclut les textures /* Ceci est un commentaire sur plusieurs lignes */ // Ceci est un commentaire sur une seule ligne /* LA CAMERA */ camera { position <15,10,15> look_at <0,0,0> } /* UNE LUMIERE */ light_source { <20,15,20> color White } // La position de la caméra // L’endroit regardé par la caméra // On place la lumière juste au dessus-de la caméra //La couleur de la lumière /* LES OBJETS DE LA SCENE */ sphere { <0,0,0>, // La position du centre 3 // Le rayon de la sphère pigment { color Red } } Amusez-vous à changer les différents paramètres (de la caméra, des objets, …) pour voir l’impact de ceux-ci sur la scène finale. Vous pouvez également introduire de nouveaux objets (regardez pour cela les primitives de base et leurs syntaxes en dernière page) ou de nouvelles lumières, mais pas de nouvelle caméra. Couleurs et textures Les objets présents dans la scène sont pour l’instant composés d’une unique couleur, laquelle est définie dans l’instruction pigment. Essayez de changer le nom de ces couleurs (attention, elles doivent commencer par une majuscule et être en anglais) ou créez votre propre couleur en utilisant la commande rgb <r,g,b> où ݎ, ݃ et ܾ sont respectivement les composantes rouge, verte et bleue de la couleur voulue et en ayant 0 ≤ ݎ, ݃, ܾ ≤ 1. Les objets peuvent également être composés d’une texture prédéfinie. Dans ce cas, la texture se met dans l’instruction texture (l’instruction pigment devient alors inutile). Voici quelques textures en vrac contenues dans le fichier textures.inc (attention aux majuscules) : Metal_Chrome, DMFWood6, DMFWood3, Brushed_Aluminum, … Testez-en quelques unes. Vous pouvez aussi regarder dans le fichier textures.inc pour voir les (nombreuses) textures disponibles. Opérations de transformations POV-Ray offre la possibilité de transformer les différents objets via trois fonctions de transformation de base. Ces fonctions sont les suivantes : La fonction translate permet d’effectuer une translation selon un vecteur <x,y,z> donné en paramètre (ex : translate <-5,10,3>). La fonction rotate va effectuer une rotation selon les axes ݕ ݔou ݖd’un nombre de degré passé en paramètre. Il y a deux manières d’écrire cette transformation : pour une rotation de 90° selon l’axe ݔ et ݖon pourra écrire soit rotate <90,0,90>, soit rotate x*z*90. La fonction scale va elle permettre d’effectuer une homothétie de rapport <x,y,z> selon chaque axe respectif. Ces transformation se placent à la fin de la définition d’un objet, juste avant l’accolade finale (} ). Reprenez votre scène, effectuez quelques unes de ces transformations et étudiez ce qu’il se passe. Essayez notamment de combiner l’ordre des transformations translate et rotate pour un même objet et essayez de comprendre (ou de vous rappeler) ce qu’il se passe. L’instruction #declare De la même manière qu’il existe une fonction très utile en langage C, le #define, POV-Ray a également son propre #define. Cette commande est #declare et peut servir à déclarer plusieurs sortes d’entités. Regardez les exemples suivants, retenez la syntaxe de l’instruction #declare et servez-vous en pour afficher les axes ݔ, ݕ, ݖde la scène. Cela vous sera très utile par la suite. #declare bleuClair = rgb <0.7,0.7,1> ; #declare maSphere = sphere {position, 5 pigment{color bleuClair}} #declare position = <10,37,19> ; #declare sombre = rgb <0.1,0.1,0.1> ; #declare toutEnsemble = intersection { object{maSphere} object{maSphere translate position} } Opérations de Constructive Solid Geometry (CSG) Les opérations CSG s’appliquent entre deux objets ܣet ܤet sont les suivantes : L’opérateur union{A B} désigne la réunion de l’objet A et de l’objet B. Bien que visuellement le résultat ne change rien, il n’y aura au final plus qu’un seul objet. L’opérateur difference{A B} désigne la différence entre l’objet ܣet l’objet ܤ. Attention, cette opération n’est pas commutative ( ܣ− ܤ ≠ ܤ− )ܣ. L’opérateur intersection {A B} désigne l’intersection entre l’objet ܣet l’objet ܤ. Le résultat sera un nouvel objet composé des points communs à ܣet ܤ. Familiarisez-vous avec ces opérateurs en les appliquant aux objets que vous voulez. Mise en application En vous servant de tout ce que vous avez vu jusqu’à maintenant, créez une nouvelle scène et essayez de réaliser la figure suivante. Les 6 primitives de base sphere { <x,y,z>, r } Une sphère centrée en (ݔ, ݕ, )ݖde rayon ݎ box { <xmin,ymin,zmin>, <xmax,ymax,zmax> } Une boite définie par ses coins diagonalement opposés (݉݅݊ et ݉ܽ)ݔ. Attention, les arêtes doivent être parallèles aux axes et ݔܽ݉ݔ ≤ ݊݅݉ݔ, ݔܽ݉ݕ ≤ ݊݅݉ݕet ݔܽ݉ݖ ≤ ݊݅݉ݖ cylinder { <x1,y1,z1>,<x2,y2,z2>,r } Un cylindre de rayon ݎdont l’axe va du point (ݔ1, ݕ1, ݖ1) au point (ݔ2, ݕ2, ݖ2). cone { <x1,y1,z1>,r1,<x2,y2,z2>,r2 } Pareil que pour le cylindre, mais avec un rayon pour chaque extrémité de l’objet. torus { grand,petit } Un tore centré en (0,0,0) et dont le grand rayon est ݃ ݀݊ܽݎet le petit rayon ݐ݅ݐ݁. plane { <nx,ny,nz>,distance} Un plan dont la normale est le vecteur (݊ݔ, ݊ݕ, ݊ )ݖet situé à la distance ݀݅ ݁ܿ݊ܽݐݏde l’origine.