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.