Vous êtes sur la page 1sur 55

Formation ` POV-RAY a

Sbastien Bancquart e 3 juillet 2006

Introduction
i vous tes ici, il est fort probable que vous sachiez dj` ce quest e ea POV-RAY. Un petit rappel, nanmoins : POV-RAY est un logiciel e de cration dimages de synth`ses, capable de crer des images de e e e qualit photoraliste. Contrairement ` la plupart des produits sur e e a le march, POV-RAY nest pas bas sur une interface graphique, o` lon e e u prvisualise sa sc`ne (soit en l de fer soit dj` en 3D) et o` lon cre en e e ea u e ajoutant des objets ` la souris. Dans POV-RAY, les sc`nes sont programa e mes. Pas de panique, en fait cest tr`s simple : POV-RAY est bas sur un e e e langage descriptif : vous dites au logiciel Ici, place une sph`re de rayon 1, e ayant une texture rchissante. L`, place une source de lumi`re bleue. Ici, e e a e place la camra. Et maintenant, dbrouille-toi ! et POV-RAY se dbrouille e e e pour crer limage. e Cette mthode, bien que paraissant droutante, a de nombreux avane e tages, notamment au niveau prcision et souplesse dutilisation. Des fonce tions de programmation permettent de plus de faciliter la cration de groupes e dobjets, dobjets semi alatoires ou de structure complexe. Lexprience e e montre que lorsque lon a got ` ce type dinterface, il est dicile de reuea tourner en arri`re. e POV-RAY existe depuis la prhistoire de linformatique et a grandement e volu avec la technologie et les possibilits des ordinateurs. Il est disponible e e e sur quasiment toutes les plateformes, et dispose dune importante communaut dutilisateurs prts ` changer des astuces ou des lments dimage. e e ae ee Enn, un point important, POV-RAY est gratuit. Dans ce manuel, nous consid`rerons que vous savez utiliser les fonctions e courantes de votre syst`me dexploitation, mais ne connaissez pas du tout e POV-RAY. Nous construirons ensemble et pas-`-pas des images de bonne a qualit visuelle. e

Lorsque vous rencontrerez ce type de boite, elle contiendra une astuce. Prenez-en note, elle peut vous faire gagner du temps

Table des mati`res e


1 Premiers pas 1.1 Pr-requis . . . . . . . . . . . . . . . e 1.1.1 Logiciel . . . . . . . . . . . . 1.1.2 Mathmatiques . . . . . . . . e 1.1.3 Ma premi`re sc`ne . . . . . . e e 1.1.4 Commentaires sur cette sc`ne e 1.1.5 Options de linterface . . . . 1.2 De nouveaux objets . . . . . . . . . 1.2.1 box . . . . . . . . . . . . . . 1.2.2 cylinder . . . . . . . . . . . . 1.2.3 cne . . . . . . . . . . . . . . o 1.3 Transformations ! . . . . . . . . . . . 1.3.1 Dclarations . . . . . . . . . e 1.3.2 La translation . . . . . . . . . 1.3.3 La mise ` lchelle . . . . . . a e 1.3.4 Rotation . . . . . . . . . . . . 1.4 Pour aller plus loin . . . . . . . . . . 2 Un premier vrai projet : le 421 2.1 Mise en place . . . . . . . . . . . . . 2.1.1 Un chier de test . . . . . . . 2.1.2 Commentaires . . . . . . . . 2.1.3 Quelques dclarations de base e 2.2 Sculpture du d . . . . . . . . . . . . e 2.2.1 Arrondir les coins . . . . . . . 2.2.2 Creuser les trous . . . . . . . 2.2.3 Le d, version dnitive . . . e e 2.2.4 Avant de poursuivre . . . . . 2.3 Piste de ds . . . . . . . . . . . . . . e 2.3.1 Premiers essais . . . . . . . . 2.3.2 Version nale . . . . . . . . . 2.3.3 Avant de poursuivre . . . . . 2.4 La sc`ne . . . . . . . . . . . . . . . . e 5 7 9 9 9 10 12 14 16 16 17 18 19 20 24 25 26 30 33 34 34 34 35 35 36 38 40 41 42 42 43 46 46

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

6 A Correction des exercices

` TABLE DES MATIERES 49

Chapitre 1

Premiers pas
Sommaire
Pr-requis . . . . . . . . . . . . . . . . . . . . . e 1.1.1 Logiciel . . . . . . . . . . . . . . . . . . . . . 1.1.2 Mathmatiques . . . . . . . . . . . . . . . . . e 1.1.3 Ma premi`re sc`ne . . . . . . . . . . . . . . . e e 1.1.4 Commentaires sur cette sc`ne . . . . . . . . . e sphere . . . . . . . . . . . . . . . . . . . . . . plane . . . . . . . . . . . . . . . . . . . . . . camera . . . . . . . . . . . . . . . . . . . . . light source . . . . . . . . . . . . . . . . . . . 1.1.5 Options de linterface . . . . . . . . . . . . . Lancer la sc`ne . . . . . . . . . . . . . . . . . e Rsolution . . . . . . . . . . . . . . . . . . . . e Dsaliasage . . . . . . . . . . . . . . . . . . . e Reprise dimages . . . . . . . . . . . . . . . . 1.2 De nouveaux objets . . . . . . . . . . . . . . . 1.2.1 box . . . . . . . . . . . . . . . . . . . . . . . 1.2.2 cylinder . . . . . . . . . . . . . . . . . . . . . 1.2.3 cne . . . . . . . . . . . . . . . . . . . . . . . o Section de cne . . . . . . . . . . . . . . . . . o Vrai cne . . . . . . . . . . . . . . . . . . . . o Cas particuliers . . . . . . . . . . . . . . . . . 1.3 Transformations ! . . . . . . . . . . . . . . . . . 1.3.1 Dclarations . . . . . . . . . . . . . . . . . . e Introduction . . . . . . . . . . . . . . . . . . texture . . . . . . . . . . . . . . . . . . . . . objets entiers . . . . . . . . . . . . . . . . . . La commande #include . . . . . . . . . . . . 1.3.2 La translation . . . . . . . . . . . . . . . . . . 1.3.3 La mise ` lchelle . . . . . . . . . . . . . . . a e 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 9 9 10 12 12 13 13 14 14 14 15 15 15 16 16 17 18 18 18 19 19 20 20 23 23 24 24 25

CHAPITRE 1. PREMIERS PAS


Uniforme . . . . . . . . . . . . . . . . . . . . Non uniforme . . . . . . . . . . . . . . . . . . 1.3.4 Rotation . . . . . . . . . . . . . . . . . . . . . Rotation autour dun axe principal . . . . . . concepts avancs . . . . . . . . . . . . . . . . e 1.4 Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 26 26 26 29 30

1.1. PRE-REQUIS

1.1
1.1.1

Pr-requis e
Logiciel

P
!
1.1.2

our travailler sous POV-RAY, il vous faut. . .POV-RAY. Si vous ne lavez pas dj` install, le chier dinstallation est disponible sur le ea e site ociel, ` ladresse http ://www.povray.org . Protez-en pour a regarder les images que les spcialistes ont cres avec ce logiciel. e ee Une fois POV-RAY install, il vous faut un diteur de texte pour crer les e e e chiers-source. Si vous travaillez sous Windows, lditeur est intgr dans le e e e logiciel. Sous les autres syst`mes, tels Linux, vous devez bien avoir un diteur e e de textes sous la main. Ce document est essentiellement bas sur la version Wine dows de POV-RAY. Mis ` part des dirences dinterface, a e le cur du logiciel est identique.

Pour proter ` fond des possibilits de POV-RAY, un diteur dimages a e e peut tre utile. Par exemple, GIMP (http ://www.gimp.org) est gratuit et e tr`s performant. e Enn, dans un premier temps nous navons besoin de rien de plus. Un grand nombre de logiciels ont nanmoin t dvelopps pour travailler avec e ee e e et autour de POV-RAY. Nous en reparlerons en cas de besoin.

Mathmatiques e

e vois dj` certains dentre vous plir. Rassurez-vous, la partie ea a mathmatiques ncessaire ` lutilisation de POV-RAY est ridicue e a lement faible et sera tr`s simple. Elle se limite ` comprendre le e a syst`me de coordonnes. e e Sur une feuille de papier quadrille, on peut facilement reprer un point e e de cette feuille en comptant les carreaux. Le point est donc dni par deux e nombres : le nombre de carreaux depuis la gauche, et le nombre de carreaux depuis le bas. Ces deux nombres sont appels coordonnes. e e En trois dimensions, cest aussi simple, il vous faudra juste trois coordonnes e au lieu de deux : la distance au bord gauche, la distance au bas et la profondeur. Ces trois dimensions sont notes x, y et z et sont les coordonnes e e du point. Un point est donc dni par ses trois coordonnes. Deux points peuvent e e dnir un vecteur : cest une che, avec une direction et une longueur. e e Un vecteur est aussi dni par trois coordonnes (qui sont la dirence des e e e coordonnes des deux points qui le composent). e Le syst`me de coordonnes de POV-RAY est prsent ` la gure 1.1. e e e e a Ainsi, laxe x est laxe gauche-droite. Laxe y est laxe bas-haut et laxe z est laxe arri`re-avant. e

10

CHAPITRE 1. PREMIERS PAS

Fig. 1.1 Le syst`me daxes e

En cas de besoin, la longueur dun vecteur peut tre calcule e e par Pythagore : l = x2 + y 2 + z 2

Cest tout pour les mathmatiques. Enn pour linstant. Vous avez sure vcu ? Alors on se lance dans le vif du sujet ! e

O
1.1.3

Ma premi`re sc`ne e e
uvrez lditeur de POV-RAY. Nous allons entrer notre premi`re e e sc`ne, qui est un grand classique du genre : une sph`re rchise e e e sante sur un damier. Ne vous inquitez pas si vous ne comprenez e pas tout, cest normal, on aura le temps dy revenir en temps voulu.

sphere{ <0,1,0>,1 pigment {color rgb <1,1,1>} finish {reflection 0.5} }

plane { y,0 pigment {checker color rgb <1,0,0> color rgb<0,1,1>} }

1.1. PRE-REQUIS

11

camera { location <0,1,-3> look_at <0,0,0> } light_source{ <2,1,-3> color rgb <1,1,1> } Cliquez sur Run et regardez le rsultat. Si tout se passe bien, vous dee vriez obtenir une jolie image. Celle-ci est dans le mme temps enregistre e e dans le dossier o` se trouve votre chier source. Faites quelques essais en u changeant les valeurs numriques du code source. Essayez de comprendre e a ` quoi correspondent ces param`tres. Lorsque vous voudrez en savoir plus, e passez au paragraphe suivant.

Vous tes sous Linux ? Nappuyez pas sur Run, ce bouton e nexiste pas. A la place, sauvez votre chier, par exemple sous monchier.pov et tapez en ligne de commande povray monchier.pov

Fig. 1.2 Ma premi`re sc`ne e e

12

CHAPITRE 1. PREMIERS PAS

L
1.1.4

Commentaires sur cette sc`ne e

e langage POV-RAY est assez simple, une fois que lon a retenu quelques r`gles lmentaires : tout dabord, les dirents objets, e ee e tels sphere ou camera prennent leurs arguments entre accolades { }. Les vecteurs et les coordonnes de points sont entrs entre e e les signes < et >. Des virgules sont utilises pour sparer les arguments. Si e e besoin, le symbole dcimal est le point. e

Lorsque lon ouvre une accolade, on dnit un nouveau nie veau logique. Par souci de lisibilit, on prend lhabitude de e dcaler le texte entre les accolades de quelques caract`res. e e Ce nest pas indispensable, mais cest tr`s utile, notamment e dans le cas (tr`s courant) daccolades imbriques. e e

Voyons les dirents objets inclus dans cette sc`ne : e e sphere Cette section cre la sph`re rchissante. Le premier param`tre <0,1,0> e e e e e est la coordonne du centre de la sph`re. La sph`re est donc une unit au e e e e dessus du centre du monde.

Le point <0,0,0> nest pas la limite du monde mais son centre. Les coordonnes ngatives sont bien entendues autoe e rises. e

Le param`tre suivant est le rayon de la sph`re. Avec un rayon de 1, la e e sph`re aura donc une lvation comprise entre 0 et 2 (rappel : son centre e ee aune lvation de 1). ee

Les units sont arbitraires, 1 ne reprsente pas 1 m`tre, un e e e milim`tre ou 1 pouce. Il reprsente ce que vous voulez. e e

La section pigment dnit la couleur de la sph`re. Ici, largument dnit e e e la couleur blanche (color rgb indique que lon va utiliser une couleur dans le syst`me rgb. Le param`tre <1,1,1> indique que la couleur comprend 100% e e de rouge, 100% de vert et 100% de bleu, ce qui est la couleur blanche.

Au dpart, il est dicile de se reprsenter ces codes coue e leur. Votre logiciel de traitement dimage a des palettes de couleur qui vous permettent de trouver les pourcentages de rouge, vert et bleu de la couleur qui vous intresse. Dautres e mthodes de cration de couleur sont prsentes plus loin). e e e e

La section nish dnit la nition de lobjet. Ici, reection 0.5 indique e que lobjet va rchir 50% de la lumi`re. e e e

1.1. PRE-REQUIS

13

Exercice 1 Modiez la sc`ne pour obtenir une sph`re deux fois plus petite, e e mais qui repose encore sur le plan. Cette sph`re sera bleue et tr`s lg`rement e e e e rchissante. e e plane Lobjet plane dnit un plan inni. Cet objet na pas dpaisseur, pas de e e volume, mais stend ` linni. Le premier param`tre est le vecteur normal e a e au plan. En clair, pour les non mathmaticiens, cest la direction perpendie culaire au plan. En encore plus clair, y signie que le plan stend dans les e directions x et z. En encore plus clair, cest un plan horizontal.

Comme on le verra plus tard, y est quivalent ` <0,1,0>. e a Il est possible de dnir des plans selon nimporte quelle e orientation en utilisant des vecteurs normaux quelconques. Pour les non matheux ou ceux qui ont du mal ` voir les a vecteurs normaux, on se contentera de plans simples que lon fera tourner, comme on apprendra bientt ` le faire. o a

Le nombre 0 est la distance du plan au centre du monde. Ici, le plan passera donc par lorigine. pigment donne ici encore la couleur du plan. Ici, on nutilise pas une couleur unie mais un motif. Le motif checker est lun des plus simples disponible. Il cre un quadrillage bicolore, dont les couleurs sont dnies par les e e deux arguments suivants, soit la couleur rouge (<1,0,0>) et cyan <0,1,1>. Ici, pas de nition, on aura donc un objet mat, sans rection. e A noter : les motifs sont toujours crs avec une dimension spcique de ee e lordre de lunit. Ici, les cases de lchiquier ont un cot de 0,5 unit. Nous e e e e apprendrons rapidement ` renommer tout a tr`s bientt. a c e o

!
camera

Tous les motifs ne seront pas tudis dans ce livre. Lorsque e e vous aurez une vision plus approfondie du logiciel, reportezvous ` laide de POV-RAY pour en apprendre plus. a

Exercice 2 Rendez le plan aussi rchissant que la sph`re. e e e

Maintenant que nous avons cr nos objets, il faut pouvoir les regarder. ee Cest le but de lobjet camera. Celle-ci fonctionne comme une vraie camra, e avec des possibilits de rglage douverture focale, de largeur de champ et e e autres. . .Dans cet exemple, nous utilisons une camra tr`s simple, mais fonce e tionnelle. Le premier param`tre, location donne la position de la camra. Le e e point choisi ici (<0,1,-3>) se trouve en face du centre de la sph`re, et un e peu en avant. Le second param`tre, look at indique vers quel point regarde e

14

CHAPITRE 1. PREMIERS PAS

la camra. Ici, ce point tant le centre de la sph`re, la camra regarde vers e e e e notre objet. Exercice 3 Dans notre sc`ne, la sph`re sort partiellement de notre champ e e de vision. Essayez de rgler ce probl`me en bougeant la camra. e e e

Il ne peut y avoir quune seule camra. Si vous en dnissez e e plusieurs, POV-RAY va rler et ne tenir compte que de la a derni`re. e

light source Dans lobscurit, on ne voit pas grand chose. . .Cest pour cel` que lon e a ajoute dans notre sc`ne une source de lumi`re. La source choisie est la plus e e simple disponible : cest une source omnidirectionnelle o` les rayons ne sont u pas attnus par la distance. Ce nest pas tr`s raliste, mais cest susant e e e e pour commencer. Quels sont nos param`tres ? Le premier param`tre est la e e position de la source de lumi`re. Ici (<2,1,-3>), la lumi`re se trouve un peu e e sur le cot de la camra. e e

Eclairer directement un objet dans laxe de la camra crase e e les reliefs et met moins bien les objets en valeur. Un contrejour nest pas conseill non plus, car il claire la face que e e lon ne voit pas. . .Apr`s, tout dpend de ce que vous voulez e e faire

Le second param`tre est la couleur de la source de lumi`re. Nous avons e e donc une lumi`re blanche. e A noter : il est autoris davoir plusiques sources de lumi`re. La seule e e consquence est de ralentir les calculs. e Exercice 4 Essayons un clairage dirent : clairez la sph`re par deux e e e e sources de lumi`re, places assez loins sur la gauche et la droite de la sph`re, e e e et de couleur respective verte et magenta. Voil`, vous avez les bases. D`s ` prsent, nous allons voir quelques dtails a e a e e dinterface, puis nous reprendrons notre sc`ne pour la compliquer un peu. e

1.1.5

Options de linterface

Lancer la sc`ne e ous en avons dj` parl. Sous Windows, il est facile de lancer la ea e sc`ne, cest le bouton Run. Sous Linux, nous tapons en ligne de e commande povray monchier.pov. Cette opration lance les cale culs, ache limage et la sauvegarde dans le dossier o` se trouve u votre chier source. Direntes options sont disponibles pour modier la e mani`re dont POV-RAY cre son image. e e

1.1. PRE-REQUIS Rsolution e

15

La rsolution, cest la taille de limage nale. Sous Windows, un menu e droulant vous permet de choisir la rsolution voulue. Sous Linux, cest e e presque aussi simple. Il sut de rajouterr deux arguments en n de ligne. Par exemple, la ligne de commande povray monchier.pov -W800 -H600 Va lancer le calcul dune image de 800 points de large (Width en anglais) sur 600 de haut (Height).

Sous windows, linterface propose une petite ligne permettant dentrer les arguments de ligne de commande. Cest le moyen le plus simple pour crer une image de taille non e standard par exemple

Pour linstant nos images sont tr`s simples, et sont calcules en un temps e e tr`s court. Cel` ne sera pas toujours le cas. Augmenter la rsolution dune e a e image augmente ncessairement son temps de rendu. e

Si vous tentez un rendu dans une rsolution qui nest pas au e format 4/3, vous observerez une distorsion de limage. Pas de panique, nous apprendrons ` rgler la camra en consa e e e quence bientt. o

Dsaliasage e Cet acronyme est connu en anglais sous le nom dAntialiasing. Son but est de gommer les marches descalier que lon peut voir sur une ligne droite penche. Cette opration est ralise en calculant si ncessaire plusieurs points e e e e e pour chaque point de limage nale. POV-RAY est capable de savoir de luimme sil est ncessaire de calculer ces sous-points. comment activer cette e e option ? Sous Windows, loption est dans le menu droulant de choix de re e solution : ce sont toutes les rsolutions indiques par le code AA 0.3. Sous e e Linux, ajoutez -A0.3 ` votre ligne de commande. a

La valeur 0.3 est un indice de qualit. Elle est comprise entre e 0 et 1. Plus elle est leve, plus limage est ne, mais plus e e le temps de calcul augmente. 0.3 est gnralement un bon e e compromis.

Le dsaliasage augmente de mani`re consquente le temps de rendu de e e e limage. Reprise dimages Il peut arriver de ne pas avoir lee temps de terminer un calcul. Dans ce cas, pas de panique. Arrtez POV-RAY. Pour reprendre le calcul, ajoutez -C e

16

CHAPITRE 1. PREMIERS PAS

en ligne de commande. Evidemment, cel` ne fonctionne correctement que si a la sc`ne na pas chang et si les param`tres de rendu (notamment la taille e e e de limage) sont identiques.

N
1.2

De nouveaux objets

ous ne pouvons pas nous contenter de sph`res et de plans innis. e Nous allons donc ajouter quelques objets supplmentaires ` notre e a base de connaissance. Ces objets sont dsigns sous le terme ge e e nral de primitives. Reprenons le code source de notre sph`re sur e e damier et eaons la sph`re. Protons-en pour reculer un peu la camra an c e e de voir lobjet dans son ensemble. Ce code minimal sera la base de nos essais dans ce chapitre. Vous avez oubli ou perdu ce code source ? Pas de panique, e le voici ! plane { y,0 pigment {checker color rgb <1,0,0> color rgb<0,1,1>} } camera { location <0,1,-6> look_at <0,0,0> } light_source{ <2,1,-3> color rgb <1,1,1> } Avant de commencer, un dernier dtail : lordre dans lequel nous insrons e e les objets dans le code na, pour linstant, aucune importance.

A
1.2.1

box
llons-y, ajoutons un nouvel objet : la boite. Une boite est dnie par e les coordonnes de deux de ses sommets opposs. Il nest pas ncese e e saire (et pas possible) de dnir ` la main les autres points, POVe a RAY sen charge. Ajoutez-donc le code suivant ` votre source : a

box{ <-1,0,-1>,<1,2,1> pigment {color rgb <1,1,1>} }

1.2. DE NOUVEAUX OBJETS

17

Evidemment, nous sommes en plein dans laxe, ce qui cache la profondeur de lobjet. Do` : u Exercice 5 Dplacez la camra an dobtenir quelque chose ressemblant ` e e a la gure 1.3

Fig. 1.3 Une boite, sous un autre angle de vue Au niveau du code, rien de particulier : juste les coordonnes de deux e sommets, spars par une virgule. Noubliez surtout pas les < et > ! Ensuite, e e on retrouve notre pigment, et on peut ventuellement y ajouter des nish ou e bien dautres surprises (ne gchons pas le suspense, nous ne sommes quau a dbut du livre). e Quelque chose peut frapper rapidement : cette syntaxe cre systmatie e quement des boites dont les cots sont parall`les aux axes de notre rep`re. e e e Et ici, par exemple, parall`les au quadrillage du plan. Cest tr`s restrictif. e e Heureusement, il sera tr`s facile de rgler a. Avant la n de ce chapitre, e e c vous saurez tout ` ce sujet. . . a

une bo tr`s plate peut faire une bonne planche. Beaucoup te e dobjets manufacturs sont composs de bo e e tes

A
1.2.2

cylinder
prsent, un objet un peu moins rgulier. Jai nomm le Cylindre. e e e Comment crer un cylindre ? Avec le mot-clef cylinder. La syntaxe e

18

CHAPITRE 1. PREMIERS PAS

est simple : il nous faut les coordonnes du centre des deux faces e circulaires, ainsi que le rayon de ces faces. Un exemple ? faites sauter le code de la boite prcdente et injectez ceci : e e cylinder{ <0,0,0>,<0,2,0>,1 pigment {color rgb <1,1,1>} }

Un cylindre avec un petit rayon et des centres tr`s loigns e e e peut donner une barre ou le corps dun crayon. Un cylindre plus cras avec un gros rayon donnerait un camembert. e e En crasant encore un peu le cylindre, on peut obtenir une e crpe. e

Pas de commentaire ? Cest facile, hein ? Alors on continue !

E
1.2.3

cne o
t si lon pouvait faire varier le rayon du disque le long du cylindre ? Quobtiendrait-on ? Une section de cne. Et avec quoi cre-t-on une o e section de cne ? Avec le mot-clef cone. o

Section de cne o La primitive cone demande 4 arguments : les coordonnes du centre dune e face, le rayon de cette face, les coordonnes de la seconde face et enn son e rayon, le tout spar par des virgules, sil-vous-pla En bref, il faut juste e e t. un param`tre de plus que prcdemment : le second rayon. Allez, lexemple ! e e e cone{ <0,0,0>,1,<0,2,0>,0.5 pigment {color rgb <1,1,1>} } Vrai cne o Un vrai cne est une section de cne o` lun des rayons est gal ` zro. o o u e a e Essayez donc par exemple : cone{ <0,0,0>,1,<0,2,0>,0.5 pigment {color rgb <1,1,1>} } Exercice 6 Sauriez-vous poser le cne sur sa pointe ? o

1.3. TRANSFORMATIONS ! Cas particuliers

19

Des choses amusantes surviennent parfois lorsque lon pousse un objet ` a la limite de ce que pourquoi il est prvu. Voyons dans le cas du cne ce quil e o peut arriver. Quest une section de cne lorsque ses deux rayons sont gaux ? Un cyo e lindre, tout simplement. Et si ses deux rayons sont nuls ? Lobjet dispara mais cel` ne gne t, a e pas POV-RAY qui calcule tranquillement son image, sans mme un message e davertissement. Par contre, si les deux centres sont confondus, POV-RAY sarrte net et e nous parle de cne dgnr. o e e ee Dune mani`re assez curieuse, les rayons peuvent tre ngatifs. Si les deux e e e rayons sont ngatifs, cela ne change pas grand chose, lobjet est quivalent e e a ` son homologue aux rayons positifs. Par contre, si lun des deux seulement est ngatif, cel` devient intressant : lorsque lon parcourt la hauteur du e a e cylindre, le rayon diminue, passe par zro, puis, augmente ` nouveau. Voyez e a lexemple ci-dessous : cone{ <0,0,0>,-1,<0,2,0>,1 pigment {color rgb <1,1,1>} } Nous avons assez dobjets pour commencer ` travailler. Dans la section a suivante nous apprendrons ` transformer nos objets. En attendant, un dera nier petit exo. Exercice 7 Sauriez-vous dessiner un cylindre surmont dun e Ce chapeau pourra tre un cne ou une demi sph`re. e o e chapeau ?

Observez les objets crs dans cet exercice. On arrive dj` ee ea a ` des solides de forme plus complexe. Observez les objets de tous les jours et essayez de les dcomposer en boites, e cylindres, sections de cnes et sph`res. Vous avez une ide o e e de ce qui peut tre ralis. e e e

D
1.3

Transformations !

ans cette section, nous allons tout dabord apprendre ` crer des a e raccourcis qui nous viterons de taper plusieurs fois des sections de e code utilises ` dirents endrois de notre sc`ne. Ensuite, et fort e a e e de ce nouvel outil, nous allons transformer nos objets, changer leur taille, leur position, les faire tourner. . .Une fois ces derniers concepts digrs, ee nous serons prts ` nous lancer dans un vrai projet. e a

20

CHAPITRE 1. PREMIERS PAS

Fig. 1.4 Un cne avec un seul rayon ngatif o e

u lart de recycler. Pour linstant nous avons des objets assez ` simples. Cela va se compliquer rapidement. Si une dnition dobe jet prend dix lignes et que je dois la retaper ` chaque fois que je a men sers, cest du temps de perdu. La solution ` tous nos malheurs a se trouve dans le mot-clef #declare. Introduction Cette commande est la premi`re commande ` commencer par un # que e a nous rencontrons. Ces commandes ont toutes un point commun : contrairement aux autres commandes, elles ne crent pas directement un objet. e La commande #declare permet de dnir un nouveau mot-clef. Celuie ci peut contenir un chire, un objet, un pigment, un nish, une source de lumi`re, une couleur, et bien dautres objets encore. La syntaxe est extrmee e ment simple, comme vous pouvez le juger sur lexemple suivant : comparez ce code-source avec le suivant. plane { y,0 pigment {checker color rgb <1,0,0> color rgb <0,1,1>} } camera {

O
1.3.1

Dclarations e

1.3. TRANSFORMATIONS ! location <0,1,-6> look_at <0,2,0> } light_source{ <2,1,-3> color rgb <1,1,1> } sphere{ <0,1,0>,1 pigment {color rgb finish{ reflection } sphere{ <-2,1,0>,1 pigment {color rgb finish{ reflection } sphere{ <2,1,0>,1 pigment {color rgb finish{ reflection } sphere{ <0,3,0>,1 pigment {color rgb finish{ reflection }

21

<1,1,1>} 0.5}

<1,1,1>} 0.5}

<1,1,1>} 0.5}

<1,1,1>} 0.5}

#declare BLANC=pigment{color rgb<1,1,1>} #declare REFLECHISSANT=finish{reflection 0.5} plane { y,0 pigment {checker color rgb <1,0,0> color rgb <0,1,1>} } camera { location <0,1,-6> look_at <0,2,0> } light_source{ <2,1,-3> color rgb <1,1,1> } sphere{

22 <0,1,0>,1 pigment {BLANC} finish{REFLECHISSANT} } sphere{ <-2,1,0>,1 pigment {BLANC} finish{REFLECHISSANT} } sphere{ <2,1,0>,1 pigment {BLANC} finish{REFLECHISSANT} } sphere{ <0,3,0>,1 pigment {BLANC} finish{REFLECHISSANT} }

CHAPITRE 1. PREMIERS PAS

Fig. 1.5 Une sc`ne dexemple pour lutilisation de #declare e Outre une plus grande lisibilit, lintrt est immdiat. Si lon veut moe ee e dier la couleur des sph`res, il sut de changer une ligne et non pas quatre. e

1.3. TRANSFORMATIONS ! Exercice 8 A ce propos, sauriez-vous recolorer les sph`res en vert ? e texture

23

Une solution plus lgante peut tre utilise lorsque lon sait que texture ee e e est un conteneur servant ` englober pigment et nish (ainsi que normal qui a sera vu plus tard. Regardez ce bout de code : #declare CHROME=texture{ pigment{color rgb<1,1,1>} finish{reflection 0.5} } sphere{ <0,1,0>,1 texture{CHROME} } objets entiers Enn, et cela sera utile d`s le paragraphe suivant, un objet entier peut e tre englob dans un #declare. Il sera alors appel par object, comme dans e e e lexemple suivant :

#declare BOULE=sphere{ <0,1,0>,1 texture{CHROME} } object{BOULE} Notez au passage lutilisation de dnitions dans les dnitions. e e

! !

Il est ncessaire que la dclaration soit eectue avant lene e e droit o` elle est appele. u e Dans ce paragraphe, nous avons vu plusieurs notions. Avant de passer ` la suite, vriez que les mots-clef suivant veulent a e dire quelque chose pour vous : #declare, texture, object.

Un dernier point : #declare peut aussi accepter des valeurs numriques. e Dans ce cas, la commande est suivie dun point-virgule. En cas doubli, POVRAY va rler. a

24

CHAPITRE 1. PREMIERS PAS

#declare TroisFoisHuit=24;

POV-RAY respecte la casse. Ainsi, pour lui, blanc, Blanc et BLANC sont trois objets dirents. e

La commande #include Une application intressante de la fonction #declare est la cration dun e e catalogue de couleurs. Il peut tre intressant dinclure en dbut de chier e e e une partie de code qui ressemblerait ` ceci : a #declare ROUGE=color rgb <1,0,0>; #declare JAUNE=color rgb <1,1,0>; #declare ORANGE=color rgb <1,0.5,0>; Cependant, il est assez fastidieux de retaper ceci ` la main ` chaque a a fois que cel` est ncessaire. La solution est plus lgante et fait appel ` a e ee a un chier dinclusion. Un chier dinclusion est un chier portant le suxe .inc. Il est appel par la fonction #include, suivie du nom du chier entre e guillemets. Lors de son appel, POV-RAY se comporte exactement comme si lon remplaait cette commande #include par le contenu du chier. c De tels catalogues de couleur existent. Ainsi, colors.inc est distribu avec e POV-RAY et contient un assez grand nombre de couleurs (noms en anglais). Il est donc appel par la commande e #include "colors.inc" Dautres catalogues existent. Par exemple, lauteur propose le package couleur.inc sur le site web http://croquis.over-blog.com. Nous en savons assez pour commencer les transformations proprement dites.

V
1.3.2

La translation

oyons d`s ` prsent la premi`re et la plus simple des transformae a e e tions : la translation. Lorsque la commande translate <x,y,z> est utilise ` lintrieur de la dnition dun objet, dune texture ou e a e e dun groupe object, elle dcale la position de cet lment dun vece ee teur <x,y,z>, soit, de x units vers la droite, y vers le haut et z vers le fond. e Ainsi, les trois exemples suivants donnent le mme rsultat : e e sphere{ <0,1,0>,1

1.3. TRANSFORMATIONS ! texture{CHROME} } sphere{ <0,0,0>,1 translate <0,1,0> texture{CHROME} } #declare boule=sphere{ <0,0,0>,1 texture{CHROME} } object{boule translate <0,1,0>}

25

Ceci va nous tre tr`s utile pour rendre nos sc`nes plus compactes et e e e plus lisibles. Exercice 9 Rcrivez de mani`re plus compact la sc`ne exemple de ce chaee e e pitre avec les quatre sph`res. e

!
1.3.3

Maintenant que nous connaissons la translation, prenons lhabitude, lorsque nous crons un nouvel objet, de le centrer e sur lorigine. Simplicit et lisibilit. . . e e

I
!

La mise ` lchelle a e

Uniforme maginons que je veuille raliser une sc`ne comportant plusieurs e e sph`res de taille dirente. Je ne peux plus, ` priori, utliser la e e a technique des dclarations, ` moins de disposer dun outil permete a tant de changer leur taille. Cet outil, cest la fonction scale. En eet, il sut par exemple dajouter scale 2 pour doubler la taille de lobjet. Attention : scale multiplie les coordonnes : pour un obe jet non centr sur lorigine, la taille varie, mais la position e aussi. Ainsi, box{<1,1,1>,<2,2,2> scale 10} est quivalent ` e a box{<10,10,10>,<20,20,20>}. Le pi`ge est classique lorsque e lon dbute sur POV-RAY. e

Comme pour la translation, tous les objets, ainsi que les textures, les pigments ou tout ce qui vous passe par la tte, acceptent la mise ` lchelle. e a e Une version plus aboutie de la mise ` lchelle est disponible, elle est a e dcrite ci-dessous : e

26 Non uniforme

CHAPITRE 1. PREMIERS PAS

Fig. 1.6 Application de la mise ` lchelle non uniforme a e Voyez la sc`ne exemple : les sph`res ne sont plus, euh, sphriques, mais e e e aplaties. Comment faire ? Utilisons la version vectorielle de la mise ` lchelle. a e La syntaxe est tout simplement scale <x,y,z>. Utiliser cette commande va multiplier la longueur de lobjet sparment sur les trois axes. Ainsi, scale e e <1,0.5,4> ne va pas modier laxe gauche-droite (les dimensions sont multiplies par 1), diviser par deux les dimensions sur laxe haut-bas (et donc e craser lobjet) et multiplier par 4 les dimensions sur laxe avant-arri`re e e (tirant fortement lobjet). e Exercice 10 Sauriez-vous recrer la sc`ne de lexemple ? e e Encore une fois, cette transformation donne des objets dont les axes sont aligns avec les axes du syst`me. Nous avions eu le mme cas avec les boites e e e et les pigment en quadrillage, notamment, et ce sera le cas pour bien des objets. La solution pour combler ce manque est la rotation.

1.3.4

Rotation

Rotation autour dun axe principal a commande pour faire tourner un objet est rotate <x,y,z>. Son utilisation la plus intuitive est la rotation autour dun des axes

1.3. TRANSFORMATIONS !

27

principaux. ainsi, la commande rotate <angle,0,0> fait tourner lobjet dun angle angle autour de laxe x. De mme, rotate <0,angle,0> e et rotate <0,0,angle> eectuent les rotations selon les autres angles.

Attention ` lordre des oprations. rotate <10,0,0> rotate a e <0,10,0> nest pas quivalent ` rotate <0,10,0> rotate e a <10,0,0>.

Dans quel sens seectue la rotation ? Il est dit que POV-RAY est gaucher. Levez le pouce gauche et alignez-le avec laxe de rotation (le haut du pouce vers la direction positive). Fermez alors la main. Les doigts senroulent dans le sens de la rotation. Les rotations sont toujours eectues par rapport ` lorigine. Un objet e a centr sur lorigine subira donc une vraie rotation. Voyez lexemple suivant : e #declare boite=box{ <-1,-0.5,-1>,<1,0.5,1> pigment {color rgb <1,1,1>} } plane { y,0 pigment {checker color rgb <1,0,0> color rgb<0,1,1>} } camera { location <0,1,-6> look_at <0,2,0> } light_source{ <2,1,-3> color rgb <1,1,1> }

object{boite translate <0,0.5,0>} object{boite rotate <0,30,0> translate <0,1.5,0>} object{boite rotate <0,60,0> translate <0,2.5,0>} Lexemple suivant montre une rotation excentre. Dans ce cas, les objets e ont subi un translate prliminaire et ne sont donc plus centrs sur lorigine. e e La rotation seectuant par rapport au centre de lunivers, les objets sont aussi dplacs, un peu comme une plan`te tournant autour du soleil. Notez e e e

28

CHAPITRE 1. PREMIERS PAS

Fig. 1.7 Exemple de rotation centre e que la translation applique est la mme pour toutes les boites. Enn, une e e petite sph`re verte indique le centre du monde. e #declare boite=box{ <-1,-0.5,-1>,<1,0.5,1> pigment {color rgb <1,1,1>} } plane { y,0 pigment {checker color rgb <1,0,0> color rgb<0,1,1>} } camera { location <0,15,0> look_at <0,2,0> } light_source{ <15,15,0> color rgb <1,1,1> }

1.3. TRANSFORMATIONS !

29

object object object object object object object object object object object object

{boite {boite {boite {boite {boite {boite {boite {boite {boite {boite {boite {boite

translate translate translate translate translate translate translate translate translate translate translate translate

<5,0.5,0>} <5,0.5,0> rotate <5,0.5,0> rotate <5,0.5,0> rotate <5,0.5,0> rotate <5,0.5,0> rotate <5,0.5,0> rotate <5,0.5,0> rotate <5,0.5,0> rotate <5,0.5,0> rotate <5,0.5,0> rotate <5,0.5,0> rotate

<0,30,0>} <0,60,0>} <0,90,0>} <0,120,0>} <0,150,0>} <0,180,0>} <0,210,0>} <0,240,0>} <0,270,0>} <0,300,0>} <0,330,0>}

sphere{<0,0,0>,0.3 pigment {color rgb <0,1,0>}}

Fig. 1.8 Exemple de rotation non centre e

concepts avancs e Commenons par une notation bien pratique : rotate <30,0,0> peut c scrire aussi rotate 30*x. Cest plus court et plus lisible. Evidemment, les e autres axes sont aussi dnis. e

30

CHAPITRE 1. PREMIERS PAS

Il est possible de composer plusieurs rotations. Ainsi, rotate 30*x rotate 20*y fait tourner lobjet de 30 degrs autour de laxe x, puis (et dans cet e ordre), de 20 degrs autour de laxe y. Attention encore une fois ` lordre e a des rotations.

Et attention, le rsultat nest absolument pas gal ` rotate e e a 30*x+20*y

La rotation est aussi dnie pour des valeurs quelconques du vecteur e x,y,z. Dans ce cas, la rotation a lieu autour dun axe ayant la mme direction e que ce vecteur, et dun angle gal ` la norme de ce vecteur. Bref, cest e a compliqu et pas facile ` visualiser. On lutilisera donc peu et on prf`rera e a ee composer plusieurs rotations entre elles. Deux petits exercices pour conclure. Exercice 11 Sauriez-vous dessiner un cube reposant sur sa pointe ? Exercice 12 Mon objet est centr sur le point <1,0,0>. Comment le faire e tourner de 45 degrs autour de laxe y, mais sans quil change de place ? e

ette petite section concluera chaque partie de ce livre. Elle consistera en un petit bilan des notions apprises et des pistes dapprofondissement pour les curieux. Ces approfondissements ne seront jamais ncessaires pour comprendre la section suivante. Par contre, e si certains concepts rsums ici ne vous rappellent rien, retournez un peu en e e arri`re. e Dans cette premi`re partie, nous avons fait connaissance avec POV-RAY e et apprhend les bases du logiciel. Nous avons vu la quantit minimale dine e e formation ncessaire pour crer une sc`ne : une camera et une light source. e e e Ces deux objets ont t survols, nous y reviendrons plus tard. ee e Nous avons appris les bases de linterface de POV-RAY. Comment lancer un calcul, le reprendre en cours, comment changer la rsolution et le e dsaliasage. Dautres options de ligne de commande peuvent tre utiles. Les e e curieux pourront parcourir ce chapitre de la documentation. Nous avons vu un certain nombre dobjets de base, qui sont box, sphere, cylinder et cone. Vous pouvez jeter un il sur la doc ocielle pour avoir plus dinformations sur ces objets. Dautres objets peuvent vous intresser. e Voyez notamment torus et ` la limite text. Les autres objets viendront en a temps voulu. Un autre type dobjet eeur est le plan inni plane. Plus dinfos peuvent e tre trouves dans la doc. e e Nous avons eeur le syst`me de texturation, avec les concepts de pige e ment et nish. Un exemple de nish a t prsent : reection, tandis quun ee e e

C
1.4

Pour aller plus loin

1.4. POUR ALLER PLUS LOIN

31

motif particulier a t utilis comme pigment : checker. Nous en avons parl ee e e car ctait ncessaire pour notre premi`re sc`ne. Nous reviendrons bien en e e e e dtail un peu plus tard, ce nest pas ncessaire dapprofondir maintenant. e e De mme, nous avons not le mot-clef texture qui reprend les pigment et e e nish. Nous avons vu comment dnir une couleur grce ` color rgb. Des infos e a a intressantes sont disponibles dans la doc. Par contre, ne vous embtez pas e e avec les rgbt ou rgbf, nous en parlerons bientt. o Deux directives ont t abordes : #declare et #include. Il ny a plus ee e rien ` ajouter dessus. Par curiosit, regardez dans le dossier /include du a e rpertoire dinstallation de POV-RAY, vous aurez un aperu de ce que les e c dveloppeurs nous ont laiss comme cadeaux. e e Enn, nous avons vu quelques transformations : translate, scale et rotate, que vous pouvez aprrofondir un peu en lisant la doc. Une derni`re e transformation existe, cest la transformation matrix qui est plus complexe et rserv aux moins allergiques aux mathmatiques. e e e Vous avez survcu ? Alors prparez-vous pour la suite. e e

Fig. 1.9 primitiv.pov : un chier dexemple montrant quelques objets de base

32

CHAPITRE 1. PREMIERS PAS

Chapitre 2

Un premier vrai projet : le 421


Sommaire
Mise en place . . . . . . . . . . . . . . . . . . . 2.1.1 Un chier de test . . . . . . . . . . . . . . . . 2.1.2 Commentaires . . . . . . . . . . . . . . . . . Commentaires en n de ligne . . . . . . . . . paragraphes en commentaire . . . . . . . . . 2.1.3 Quelques dclarations de base . . . . . . . . . e 2.2 Sculpture du d . . . . . . . . . . . . . . . . . e 2.2.1 Arrondir les coins . . . . . . . . . . . . . . . . 2.2.2 Creuser les trous . . . . . . . . . . . . . . . . 2.2.3 Le d, version dnitive . . . . . . . . . . . . e e 2.2.4 Avant de poursuivre . . . . . . . . . . . . . . 2.3 Piste de ds . . . . . . . . . . . . . . . . . . . . e 2.3.1 Premiers essais . . . . . . . . . . . . . . . . . 2.3.2 Version nale . . . . . . . . . . . . . . . . . . 2.3.3 Avant de poursuivre . . . . . . . . . . . . . . 2.4 La sc`ne . . . . . . . . . . . . . . . . . . . . . . e 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 34 34 34 35 35 35 36 38 40 41 42 42 43 46 46

33

34

CHAPITRE 2. UN PREMIER VRAI PROJET : LE 421

N
2.1
2.1.1

Mise en place
ous allons commencer notre premier projet. Nous allons modliser e une partie de 421, qui comportera donc trois ds lancs sur une e e piste de jeu. Le tout sera pos sur une table en bois, ` cot dun e a e verre de whisky.

Un chier de test

La premi`re tape va consister ` crer un chier test. Ce chier servira e e a e a ` tester les objets indpendamment de la sc`ne elle-mme. Allons-y, crons e e e e donc une sc`ne vide comportant une source de lumi`re, une camra et un e e e plan quadrill, qui servira de rep`re au niveau dimensions. Ca vous rappelle e e quelque chose ? Alors voici le code source choisi : plane{y,0 pigment{checker color rgb <1,0.5,0.5>,color rgb <0.5,1,1>} } light_source{<-2,1,-6> color rgb <1,1,1>} camera {location <0,3,-4> look_at <0,1,0>} Sauvez ce code minimaliste dans un chier, nommez-le par exemple test.pov.

!
2.1.2

Vous avez peut-tre remarqu que parfois les arguments dun e e objet sont spars par une virgule, parfois pas. La virgule e e peut tre supprime sil ny a pas dambiguit. Dans les cas e e e douteux, mettez des virgules.

Commentaires

Nous abordons un projet de taille apprciable. Si vous le reprenez dans e quelques mois, il est fort possible que vous ne puissiez pas vous relire. Les commentaires sont l` pour vous guider. Nous avons deux mthodes pour a e crer des commentaires. e Commentaires en n de ligne Le code // dlimite des commentaires. Tout ce qui le suit ne sera pas lu e par POV-RAY. Voyez lexemple : sphere{ // une boule <0,0,0> // centre ` lorigine e a 1 // de rayon 1 pigment {color rgb <1,0,0>} // rouge } // et cest tout

2.2. SCULPTURE DU DE paragraphes en commentaire

35

Tout bloc plac entre les codes /* et */ est considr comme commene ee taire. Un intrt de ce syst`me est de commenter une partie du code source ee e dune sc`ne an de faire des rendus rapides. Voyez : e /* sphere{ <0,0,0>,1 pigment {color rgb <1,0,0>} } Cette sph`re nest pas affiche e e */

2.1.3

Quelques dclarations de base e

Nous allons commencer notre chier en dnissant quelques couleurs. e Ouvrez un document vide et entrez le code suivant : #declare #declare #declare #declare #declare #declare #declare T_BOIS=texture{pigment{color rgb <0.6,0.2,0.2>}} T_DE=texture{pigment{color rgb <0.9,0.9,0.7>}} T_POINT=texture{pigment{color rgb <0.2,0.2,0.2>}} T_PLATEAU=texture{pigment{color rgb <0.7,0.1,0.1>}} T_FEUTRE=texture{pigment{color rgb <0,1,0>}} T_VERRE=texture{pigment{color rgb <1,1,1>}} T_WHISKY=texture{pigment{color rgb <0.9,0.9,0>}}

Quavons-nous fait ? Nous avons cr sept textures, qui sont des pigments ee unis. Ce ne sera pas, bien videmment, les textures nales, mais cela nous e permettra de commencer ` modeler les objets. Dans une autre tape nous a e travaillerons ces textures. Ces textures seront appliques, dans lordre, au e bois de la table, aux ds, aux points des ds, au plateau de jeu, ` la toile de e e a feutre du plateau, au verre et au whisky.

Pourquoi avons-nous utilis des texture alors que nous e navons que des pigment ? Nous savons que les texture servent ` englober dirents lments, dont des pigment et a e ee des nish. Par la suite, nous modierons le code, et le dlie miteur texture sera ncessaire. Alors nous linsrons tout de e e suite.

A
2.2

Sculpture du d e
llons-y pour notre premier objet : un d. Quest-ce quun d ? Cest e e un cube avec des points peints ou creuss sur chacune de ses faces. e

36

CHAPITRE 2. UN PREMIER VRAI PROJET : LE 421

Nous allons nous placer dans le cas le plus complexe, et donc le plus intressant : les points seront creuss dans le d, et lintrieur e e e e de ces trous sera peint en noir. Pour rendre le d encore plus esthtique, e e nous allons arrondir les coins. Le cube servant de base ` notre d sera un cube de longueur 1, centr a e e sur lorigine. ses coordonnes varieront donc de -0,5 ` 0,5. e a Evidemment, nous allons y aller par tapes. e

2.2.1

Arrondir les coins

Regardez la gure 2.1 : le cube de droite, avec des coins arrondis, peut tre obtenu en prenant le cube entier de gauche, auquel on a coup tous les e e morceaux qui dpassent de la sph`re. Autrement dit, ce qui nous intresse, e e e cest lintersection entre le cube et la sph`re. e

Fig. 2.1 Arrondir les coins Comment raliser une intersection ? grce au conteneur intersection{ }. e a Celui-ci doit contenir la liste des objets dont on veut lintersection. On peut y ajouter par la suite une dnition de texture ou des transformations, comme e tout objet. Essayez par exemple de copier le code suivant dans la sc`ne de e dmo : e intersection{ sphere{<0,0,0>,0.72 } box{<0.5,0.5,0.5>,<-0.5,-0.5,-0.5>}

2.2. SCULPTURE DU DE texture{T_DE} translate 0.5*y } Si vous lancez le code tel quel, vous aurez une erreur, car T DE nest pas dni. Avez-vous pens ` copier la dnie e a e tion de la texture du document principal vers la test ? Par la suite, nous ne rappellerons pas ces lignes videntes, lorsque e les lments ont dj` t dclares dans notre document prinee e ae e e e cipal.

37

Exercice 13 Faites varier le rayon de la sph`re pour voir linuence de ce e param`tre. Essayez aussi de faire tourner ce d. voyez-vous do` vient la e e u translation de 0,5 units ? e Voil`, nous avons le corps du d de prt. Avant de passer ` la suite, a e e a voyons deux dtails sur lintersection. e Tout dabord, il est possible de dnir une texture dirente pour les e e deux objets intervenant dans lintersection, en incluant la dnition des texe tures dans les objets individuels, et non pas dans lobjet nal. Les die rentes parties de lobjet nal porteront la texture de lobjet initial. Essayez lexemple ci-dessous. intersection{ sphere{ <0,0,0>,0.7 pigment{color rgb<0,1,0>} } box{ <0.5,0.5,0.5>,<-0.5,-0.5,-0.5> pigment {color rgb <1,0,1>} } translate 0.5*y } Un autre point : lorsque vous eectuez une dirence avec des objets e qui ont des faces communes, le rendu peut tre tr`s bizarre. Dans ce cas, e e dcalez tr`s lg`rement lun des deux objets. Nous rencontrerons plusieurs e e e e fois ce phnom`ne par la suite. e e Enn, notez quil nest pas interdit de faire des intersections de plus de deux objets. Il sut de les inclure tous dans le bloc intersection.

38

CHAPITRE 2. UN PREMIER VRAI PROJET : LE 421

Fig. 2.2 Une intersection bicolore

2.2.2

Creuser les trous

Nous allons raisonner de la mme mani`re que prcdemment. Si je veux e e e e crer un point sur mon d, je vais creuser la surface de mon d avec une e e e petite sph`re, comme le montre la gure suivante : e La solution pour obtenir ce genre deet est un conteneur du nom de dierence. Celui-ci fonctionne dune mani`re similaire ` lintersection. ici un e a code du type dierence {objetA objetB} va soustraire lobjet B de lobjet A. Cest ce que nous voulons faire ici, en soustrayant une petite sph`re de notre e grand cube. Le code-source est donc le suivant (pensez ` le coller dans votre a document de test) : difference{ box{<0.5,0.5,0.5>,<-0.5,-0.5,-0.5>} sphere {<0,0,-0.5>,0.1} translate <0,0.5,0> texture{T_DE} } Avant de continuer, faites des tests avec ce bloc jusqu` ce que vous coma preniez son nctionnement. Notamment, notez que lordre des objets a une grande importance. Le premier est solide, le second est le trou. remarquez aussi que des morceaux de lobjet B peuvent dpasser de lobjet A. Ils seront e

2.2. SCULPTURE DU DE

39

Fig. 2.3 Comment creuser son trou ? tout simplement ignors. e Il nous reste deux choses ` voir. Tout dabord, dans un d, il y a plus a e quun point. Le conteneur dierence accepte plus de deux objets. Dans cee cas, le premier est positif, et tous les autres sont les trous. voyez le code suivant : difference{ box{<0.5,0.5,0.5>,<-0.5,-0.5,-0.5>} sphere {<0,0,-0.5>,0.1} // les trous spheres sphere {<-0.3,-0.3,-0.5>,0.1} // reprsentent la face 3 e sphere {<0.3,0.3,-0.5>,0.1} // il reste 5 autres faces translate <0,0.5,0> texture{T_DE} } Un dernier point ` rgler, la couleur. Nous aimerions que les points du a e d soient dune autre couleur, et cest pour cel` que nous avions dni une e a e texture T POINT. Essayez lexemple suivant : difference{ box{<0.5,0.5,0.5>,<-0.5,-0.5,-0.5> texture{T_DE}} sphere {<0,0,-0.5>,0.1 texture{T_POINT}} sphere {<-0.3,-0.3,-0.5>,0.1 texture{T_POINT}}

40

CHAPITRE 2. UN PREMIER VRAI PROJET : LE 421 sphere {<0.3,0.3,-0.5>,0.1 texture{T_POINT}} translate <0,0.5,0>

} Vous savez presque tout sur lintersection. A prsent, mettons en commun e ce que nous avons appris lors des deux derniers paragraphes.

2.2.3

Le d, version dnitive e e

Nous avons appris ` arrondir les angles dun cube. Nous avons appris a a ` creuser des trous dans un cube. Nous allons pouvoir composer ces deux concepts pour creuser un d. Lastuce est simple : dans une dirence, lobjet e e A peut tre lui-mme un objet compos, tel une intersection de deux objets. e e e Une fois ceci vu, le code coule de source, mme si il peut paraitre fastidieux. e

Noubliez pas : si vous avez du mal ` voir les coordonnes, a e faites un schma sur papier quadrill. e e

#declare trou=sphere{<0,0,0>,0.1 texture {T_POINT} } // ceci va permettre dallger lcriture e e #declare de=difference { intersection { // lintersection est lobjet A sphere{<0,0,0>,0.8} box{<0.5,0.5,0.5>,<-0.5,-0.5,-0.5>} texture{T_DE} } object{trou translate <0,0.5,0>} //face 1 object{trou translate <-0.3,-0.5,-0.3>} // face 6 object{trou translate <0,-0.5,-0.3>} object{trou translate <0.3,-0.5,-0.3>} object{trou translate <-0.3,-0.5,0.3>} object{trou translate <0,-0.5,0.3>} object{trou translate <0.3,-0.5,0.3>} object{trou translate <-0.5,-0.3,-0.3>} // face 2 object{trou translate <-0.5,0.3,0.3>} object{trou translate <0.5,-0.3,-0.3>} // face 5 object{trou translate <0.5,-0.3,0.3>} object{trou translate <0.5,0.3,-0.3>} object{trou translate <0.5,0.3,0.3>} object{trou translate <0.5,0,0>} object{trou translate <-0.3,-0.3,-0.5>} // face 3 object{trou translate <0,0,-0.5>} object{trou translate <0.3,0.3,-0.5>} object{trou translate <-0.3,-0.3,0.5>} // face 4

2.2. SCULPTURE DU DE object{trou translate <0.3,-0.3,0.5>} object{trou translate <-0.3,0.3,0.5>} object{trou translate <0.3,0.3,0.5>} } // par lisibilit, respectez les espaces e

41

Maintenant, copiez cette section de code dans le chier 421.pov. Cette dnition est dnitive, nous ny reviendrons plus. e e Nous avons cr un objet de, qui pourra tre utilis en plusiques exemee e e plaires dans une sc`ne. e Exercice 14 Sauriez-vous crer une sc`ne ressemblant ` la gure 2.4 ? e e a

Fig. 2.4 Plusieurs ds e Notre d est gomtriquement exact. Il lui manque nanmoins la petite e e e e touche nale : les textures. Nous verrons cel` bien plus tard. a

2.2.4

Avant de poursuivre

Avant de poursuivre, faisons le point : Nous ma trisons les objets box et sphere Nous avons compris le fonctionnement de dierence et intersection Nous savons dclarer un objet avec #declare et le rutiliser via object. e e Si lun de ces points nest pas clair, revoyez cette section, ou consultez le manuel de POV-RAY.

42

CHAPITRE 2. UN PREMIER VRAI PROJET : LE 421

Notons au passage que dierence et intersection sont deux exemples de ce qui est appel oprations boolennes. Nous navons pas parl de la plus e e e e simple dentr-elles : lunion. Les objets inclus dans un conteneur union sont achs tels quels, sans aucune modication. Lintrt est de pouvoir grer e ee e cet ensemble comme un seul objet. Nous aurons mille occasions dutiliser cette opration par la suite. e

N
2.3
2.3.1

Piste de ds e

ous avons un joli d. Nous savons le dupliquer et nous sommes e capables de faire un 421 (avez-vous essay ?) dans quoi allons nous e le lancer , Dans une piste de ds. Alors, quest-ce quune piste de e ds ? Cest un plateau circulaire, pourvu dun rebord, et recouvert e dune couche de feutre, gnralement de couleur verte. Dans cette section, e e nous nous attaquons ` la cration du plateau. a e

Premiers essais

Tout dabord, reprenez la sc`ne de test et tez tout ce qui a rapport au e o d. Nous partons dun chier propre, il ne doit rester que le strict minimal. e Une piste de ds, cest un plateau avec un rebord. On peut le voir aussi e comme un cylindre trapu, dans lequel on creuse un autre cylindre, qui ne percera pas de part en part le premier. Essayez le code suivant :

Lobjet est plus grand quun d. Votre camra est peut-tre e e e mal place. Changez ses coordonnes an davoir une vue e e densemble de lobjet. Pensez aussi ` dplacer votre suirce a e de lumi`re. Une source de lumi`re ` lintrieur dun objet e e a e claire assez mal. . . e

difference{ cylinder {<0,0,0>,<0,1,0>,12} cylinder {<0,0.2,0>,<0,1,0>,11} texture{T_PLATEAU} } Rsultat : a ne marche pas. Essayons de comprendre pourquoi. Nous e c avons un cylindre, centr sur lorigine, de hauteur 1 et de rayon 12. De ce e cylindre, nous soustrayons un autre cylindre, centr lui aussi, de rayon plus e faible, et de hauteur comprise entre 0,2 et 1. On sattend donc ` le voir creus a e dans le premier cylindre, de telle mani`re que le fond du plateau se trouve e a ` une hauteur comprise entre 0 et 0,2. Alors, o` est le probl`me. Rappelezu e vous ce qui a t dit lorsque nous avons commenc ` parl des oprations ee ea e e

2.3. PISTE DE DES

43

boolennes : POV-RAY gre bizarrement les surfaces confondues. Or, ici, la e e surface suprieure des deux cylindres est confondue. e Quelle est la solution ? Remonter lg`rement la seconde face. Essayez par e e exemple : difference{ cylinder {<0,0,0>,<0,1,0>,12} cylinder {<0,0.2,0>,<0,1.01,0>,11} texture{T_PLATEAU} } Cest mieux. Maintenant, nous allons mettre de la couleur, en appliquant la texture de feutre ` lintrieur du plateau. Le code devient : a e difference{ cylinder {<0,0,0>,<0,1,0>,12 texture{T_PLATEAU} } cylinder {<0,0.2,0>,<0,1.01,0>,11 texture {T_FEUTRE} } }

Fig. 2.5 Piste de ds, premi`re version e e

2.3.2

Version nale

Une fois que lon a russi ` faire des ds, ce nest pas une pauvre petite e a e piste de ds qui va nous embter. Voyons comment on peut compliquer les e e

44

CHAPITRE 2. UN PREMIER VRAI PROJET : LE 421

choses. Il pourrait tre du plus bel eet davoir le dessus de notre piste un e peu bomb. comment faire ? e Dans un exemple prcdent, nous avions plac une sph`re au dessus dun e e e e cylindre, pour donner un cylindre se terminant par une jolie surface courbe. Nous allons utiliser la mme ide ici, avec un objet capable de crer une e e e courbe le long de notre piste, cest-`-dire un tore. a Le mot-clef torus cre un tore. Ici, la syntaxe est assez particuli`re, car il e e ne demande que deux arguments, un grand et un petit rayon. Nous pouvons imaginer le tore comme un cercle ayant ce grand rayon. Le trait dlimitant e ce cercle a un trait dune certaine paisseur, donne par ce petit rayon. Le e e tore ainsi cr est systmatiquement centr sur lorigine (il faudra donc le ee e e dplacer). Il est contenu dans le plan xz (coup de bol, cest le bon. Sinon, il e aurait fallu le tourner).

Le tore est compris dans le plan xz. Pour le ramener dans le plan yz, une rotation de 90 degrs selon x sut. Pour le e ramener dans le plan xy, appliquez une rotation de 90 degrs e selon laxe z.

Notre tore sera compris entre les rayons 11 et 12. Nous prendrons donc 11,5 comme grand rayon et 0,5 comme petit rayon (comme dhabitude, si vous ne voyez pas pourqoui, faites un dessin). Essayez donc le code suivant : difference{ cylinder {<0,0,0>,<0,1,0>,12 texture{T_PLATEAU} } cylinder {<0,0.2,0>,<0,1.01,0>,11 texture {T_FEUTRE} } } torus { 11.5,0.5 translate <0,1,0> texture {T_PLATEAU} } Cest pas mal, mais pas parfait. On pourrait prfrer un dessus plus plat. ee Cest faisable, il sut daplatir le tore. alors, disons merci ` la fonction scale a et admirons le rsultat. e difference{ cylinder {<0,0,0>,<0,1,0>,12 texture{T_PLATEAU} } cylinder {<0,0.2,0>,<0,1.01,0>,11 texture {T_FEUTRE} } } torus { 11.5,0.5 scale <1,0.5,1> translate <0,1,0> texture {T_PLATEAU} }

2.3. PISTE DE DES

45

Fig. 2.6 Piste de ds, version nale e Cest bien, la courbe est discr`te, mais elle prendra bien la lumi`re lorsque e e nous soignerons les textures. En attendant, nous allons transfrer notre objet e dans notre chier nal. Il sut dajouter un #declare, et. . .Oui, mais, il y a deux objets ici. Comment les faire tenir ` deux dans un seul #declare ? a Grce ` lopration boolenne dont nous avons parl rcemment. Jai nomm a a e e e e e lunion. Le code ` transfrer est donc : a e #declare plateau=union{ difference{ cylinder {<0,0,0>,<0,1,0>,12 texture{T_PLATEAU} } cylinder {<0,0.2,0>,<0,1.01,0>,11 texture {T_FEUTRE} } } torus { 11.5,0.5 scale <1,0.5,1> translate <0,1,0> texture {T_PLATEAU} } } Nous avons une partie de nos objets. La table sera reprsente par un e e plan inni. Le verre de whisky sera ajout plus tard, il ncessitera en eet e e des objets transparents, ce que nous ne savons pas encore faire. Mais avant de poursuivre, un petit exercice. . .

46

CHAPITRE 2. UN PREMIER VRAI PROJET : LE 421

Exercice 15 Sauriez-vous crer lobjet prsent sur la gure 2.7 ? e e

Fig. 2.7 Un rond de serviette

2.3.3

Avant de poursuivre

Un petit bilan : notre comprhension de POV-RAY progresse petit ` e a petit. Nous avons appris ` utiliser un nouvel objet, le torus. Nous progressons a dans la connaissance des oprations boolennes, et avons notamment vu le e e pi`ge classique des surfaces confondues. Nous voyons la puissance de cette e mthode de modlisation et commenons ` voir comment crer des objets e e c a e complexes ` partir de primitives simples. a Exercice 16 sauriez-vous appliquer ce que nous avons appris ? Crez un e moule ` baba au rhum, comme prsent ` la gure 2.8. a e ea

2.4

La sc`ne e

` 2.4. LA SCENE

47

Fig. 2.8 Un moule ` baba a

48

CHAPITRE 2. UN PREMIER VRAI PROJET : LE 421

Annexe A

Correction des exercices


Exercice 1 Remplacez le paragraphe de la sph`re par : e sphere{ <0,0.5,0>,0.5 pigment {color rgb <0,0,1>} finish {reflection 0.2} } Exercice 2 Simple. La dnition du plan devient : e plane { y,0 pigment {checker color rgb <1,0,0> color rgb<0,1,1>} finish {reflection 0.5} } Exercice 3 Par exemple : camera { location <0,1,-6> look_at <0,0,0> } Exercice 4 On note que vert vaut <0,1,0> et magenta <1,0,1>. Supprimez la lumi`re de la sc`ne dorigine et remplacez-l` par le code suivant : e e a light_source{ <-10,1,0> color rgb <0,1,0> } 49

50 light_source{ <10,1,0> color rgb <1,0,1> }

ANNEXE A. CORRECTION DES EXERCICES

Limage que vous obtenez devrait ressembler ` celui de la gure A.1. La a couleur du plan nest pas perturbe car il reoit la lumi`re des deux sources e c e et la somme des deux clairages vaut <1,1,1>, donc une lumi`re blanche. e e Notez les ombres colores. e

Fig. A.1 Un exemple dclairage color e e Exercice 5 Lexemple prsent a t ralis avec la camra suivante : e e ee e e e camera { location <-3,1,-4> look_at <0,0,0> } Exercice 6 Allons-y au plus simple : cone{ <0,0,0>,0,<0,2,0>,1 pigment {color rgb <1,1,1>} }

51 Exercice 7 Le code-source du premier cas contiendra : cylinder { <0,0,0>,<0,2,0>,1 pigment{color rgb <1,1,1>} } cone{ <0,2,0>,1,<0,3,0>,0 pigment {color rgb <1,1,1>} } Le second cas donnera : cylinder { <0,0,0>,<0,2,0>,1 pigment{color rgb <1,1,1>} } sphere{ <0,2,0>,1 pigment {color rgb <1,1,1>} } En fait, la sph`re est enti`re, mais lautre moiti est cache ` lintrieur e e e e a e du cylindre. Nous apprendrons bientt ` crer de vraies demi-sph`res lorsque o a e e cela sera ncessaire. e La commande pigment est commune ` tous les objets et il peut para a tre fastidieux de la rcrire ` chaque fois. Nous verrons tr`s tr`s bientt comee a e e o ment contourner cette limitation. Exercice 8 La premi`re ligne devient : e #declare BLANC=pigment{color rgb<0,1,0>} Appeler BLANC un pigment vert est curieux, mais pas impossible. . . Exercice 9 Nous allons faire un usage intensif des fonctions vues jusqu` a prsent : e #declare CHROME=texture{ pigment{color rgb<1,1,1>} finish{reflection 0.5} } #declare boule=sphere{

52 <0,0,0>,1 texture{CHROME} }

ANNEXE A. CORRECTION DES EXERCICES

plane { y,0 pigment {checker color rgb <1,0,0> color rgb<0,1,1>} } camera { location <0,1,-6> look_at <0,2,0> } light_source{ <2,1,-3> color rgb <1,1,1> }

object{boule object{boule object{boule object{boule

translate translate translate translate

<0,1,0>} <-2,1,0>} <2,1,0>} <0,3,0>}

Nettement plus compact et lisible, non ? Exercice 10 Le dbut du code est commun avec lexercice prcdent. reme e e placez juste les quatre objets par : object{boule object{boule object{boule object{boule translate <0,1,0>} scale <0.5,1,1> translate <-1.5,1,0>} scale <0.5,1,1> translate <1.5,1,0>} scale <1,0.5,1> translate <0,2.5,0>}

Notez que le scale est appliqu avant le translate, ce qui permet de garder e les objets au centre avant de les dformer. Si vous avez trouv du premier e e coup les valeurs numriques pour les translations, bravo ! Sinon, il nest pas e interdit de tatonner un peu, tant que vous aboutissez sur les bonnes valeurs. Exercice 11 On applique deux rotations de 45 degrs selon deux axes die e rents. Si vous avez du mal ` visualiser ce genre de transformation, munisseza vous dun d pendant la cration de la sc`ne. e e e

53 Une fois les deux rotations eectues, il reste ` dplacer le cube ` la bonne e a e a place. Avez-vous trouv facilement la distance de translation ` appliquer ? e a Cest 23 . Un peu de gomtrie peut aider. Sinon, on tatonne. e e plane { y,0 pigment {checker color rgb <1,0,0> color rgb<0,1,1>} } camera { location <0,1,-3> look_at <0,1,0> } light_source{ <-2,1,-6> color rgb <1,1,1> } box{ <-0.5,-0.5,-0.5>,<0.5,0.5,0.5> pigment{color rgb <1,1,1>} rotate 45*y rotate 45*x translate 0.866*y } Avez-vous not la syntaxe utilise dans le translate ? e e

Exercice 12 Pas vident celui-ci. On y va en trois tapes : tout dabord, e e on dplace lobjet au centre du monde, puis on lui applique la rotation, et e enn, on le replace ` sa position dorigine. a translate <-1,0,0> rotate 45*y translate <1,0,0> Astuce ` retenir, cel` peut resservir. a a Exercice 13 Une rotation selon laxe y permet de voir le d sous dirents e e angles sans le dcoller du sol. La translation de 0,5 units le ramne au e e e niveau du plan.

54

ANNEXE A. CORRECTION DES EXERCICES

Fig. A.2 Un cube sur la pointe Exercice 14 reprenez la sc`ne de test, collez la dnition du d (noubliez e e e pas la dnitiondu point), les textures ncessaires, et ajoutez simplement les e e six lignes suivantes : object{de object{de object{de object{de object{de object{de rotate rotate rotate rotate rotate rotate -90*x translate <-1,0.5,0>} -60*y translate <-0.9,1.5,0.1>} 15*y translate <-1.2,2.5,0>} 175*y translate <1,0.5,0>} 60*y translate <1,1.5,0.2>} 90*x rotate 15*y translate <1.1,2.5,-0.1>}

Exercice 15 Cest un cylindre perant un tore. Un exemple de code est c donn ci-dessous. Notez comment le cylindre dpasse un peu. Et notez la e e translation pour ramener le tout au-dessus du sol. La gure A.3 montre les deux objets utiliss. e difference { torus {3,1} cylinder {<0,-1.1,0>,<0,1.1,0>,3} pigment{color rgb 1} translate <0,1,0> }

55

Fig. A.3 Rond de serviette, objets mis en uvre Exercice 16 Allons-y par tape. Il nous faut un demi tore. Nous lobtenons e par lintersection entre un tore et une bo qui englobe le tore et lui arrive te a ` mi-hauteur. Ensuite, nous creusons le tore en faisant la dirence entre e notre demi-tore et un autre tore de rayon secondaire un peu plus petit. Le rsultat semble cras. Qu` cel` ne tienne, nous appliquons une mise ` e e e a a a lchelle non uniforme. Il reste ` dplacer lobjet pour quil soit au dessus e a e du niveau du plan, et ` le colorier. Le code-source correspondant est par a exemple : difference{ intersection{ // un demi tore torus {2,0.5} box{<-3,0,-3>,<3,-1,3>} } torus{2,0.45} // que lon creuse scale <1,1.3,1> pigment {color rgb <1,1,1>} // blanc translate <0,0.65,0> // pos au dessus du plan e }

Vous aimerez peut-être aussi