home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DP Tool Club 8
/
CDASC08.ISO
/
LUXART
/
LUXART.DOC
< prev
next >
Wrap
Text File
|
1993-10-07
|
66KB
|
1,749 lines
╔════════════════════════╗
║ ·L·U·X·A·R·T· ║
║ Ray-Tracer ║
║ Version 1.0 ║
║ [13/09/93] ║
╚════════════════════════╝
(C)opyright Septembre 1993, ChromaGraphics.
Ecrit et développé par Stéphane MARTY.
Ce logiciel est officiellement diffusé et distribué par :
DP Tool Club
B.P. 745
59657 Villeneuve D'Ascq
Il est disponible sur 2 disquettes 3"1/2 (1,44Mo) ou sur CD-ROM.
Pour que l'authenticité du programme ne puisse être mise en doute, le pack
distribué sur disquettes doit se présenter sous la forme :
°°°°°°°°°°°°°°
DISQUETTE 1 : (contenu)
°°°°°°°°°°°
- LISEZMOI.COM : note à lire
- DISK1.ID : identité de la disquette
- INSTALLE.EXE : programme d'installation
- LUXART1.SM : fichier de données compactées n°1
- LUXART2.SM : fichier de données compactées n°2
- LUXART3.SM : fichier de données compactées n°3
DISQUETTE 2 : (contenu)
°°°°°°°°°°°
- DISK2.ID : identité de la disquette
- LUXART4.SM : fichier de données compactées n°4
- LUXART5.SM : fichier de données compactées n°5
Le logiciel ne doit être installé qu'à partir de sa propre procédure
d'installation.
Le manuel de référence complet et illustré imprimé en qualité laser sera
disponible à partir du mois de Novembre 1993. Voir le fichier MANUEL.DOC qui
contient le bon de commande ainsi que d'autres détails à connaître.
Sachez dès à présent que cette succincte documentation ne couvre que 25%
(pour-cent) environ de la totalité du manuel de LUXART. En effet, elle
représente le strict minimum pour commencer à travailler avec le logiciel.
1) INTRODUCTION
°°°°°°°°°°°°°°°
LUXART v1.0 est le nouveau logiciel français 32-bits de Ray-Tracing (procédé
de rendu d'image de synthèse du domaine du photoréalisme utilisant les lois
fondamentales de l'optique) pour IBM PC 386/486 et compatibles. Il a été
développé par l'auteur des deux précédents ray-tracers DIRECTOR-3D et
SM·TRACER 386.
Ce programme atteind désormais des sommets dans le domaine du photoréalisme
sur cette gamme de machine. Ses algorithmes sont, en effet, plus pointus que
ceux qu'utilisent Persistence of Vision v1.0, PolyRay, RayShade..., d'où un
rendu de meilleure qualité. Ils ont été, à la base, développés séparément
par C. Watkins, M. VandeWettering (MTV ray-tracer) et S. Coy (Vivid).
De plus, la convivialité de LUXART, sa simplicité d'emploi et ses facultés
de traitement écrasent tout ce qui s'est fait jusqu'à présent dans le
Domaine Public en matière de création d'images de synthèse.
Bien qu'étant développé pour être supporté par un processeur Intel 386, ce
logiciel est plutôt taillé pour les "matheux" que sont les 486DX. En effet,
les calculs en virgule flottante sont fortement sollicités par les
procédures de LUXART et "fatiguent" rapidement ceux (les 386) qui n'ont pas
assez de ressources pour cela. Heureusement, la solution du coprocesseur
arithmétique (387SX/DX, 487SX) sauve les meubles...
2) CARACTERISTIQUES
°°°°°°°°°°°°°°°°°°°
En voici un petit aperçu :
■ Rendu Ray-Tracing
· Réflexion
· Réfraction (avec indice)
· Lumière diffuse
· Lumière ambiante
· Réflexion spéculaire
· Ombres portées
· Ombres douces (exactes)
· Caustiques (les rayons lumineux sont réfléchis et brûlent à l'intérieur
d'une surface en réfraction. On peut alors les apercevoir dans l'ombre de
l'objet).
■ Détails techniques pour la caméra
· Ouverture du diaphragme
· Profondeur de champ
· Champ visuel
■ Trois niveaux d'anti-crénelage
· Rapide
· Soigné
· Récursif (avec seuil)
■ Quatre types de source lumineuse
· Point
· Ampoule
· Laser
· Projecteur
■ Bump mapping (procédé permettant de reproduire des surfaces bosselées).
■ Image mapping (procédé permettant de plaquer un fichier graphique sur la
surface d'un objet).
■ Brouillard
■ Rendu artefact (phénomène d'origine artificielle dont l'apparition est liée
à la méthode utilisée pour l'observation d'un fait naturel...).
■ Perspective (projection 3D -> 2D)
· Photographique
· Orthogonale
· Universelle
· Architecturale
■ Puissantes commandes de traitement des matières
· damier
· concentrique
· fractal
· turbulence
· cycle
· amplitude
· vague
· crête à crête
· transition
· atténuation
· phase
· imperfection
■ Primitives de base
· Cône
· Sphère
· Polygone
· Triangle lissé
· Anneau
· Disque
· Cylindre
■ contrôlées par des commandes de type
· déplacer
· pivoter
· ajuster
· découper (CSG)
· bloc
■ Commandes du Préprocesseur
· inclure
· déclarer
· annuler
■ Modeleur 3D filaire intégré (nécessite une carte vidéo avec 1Mo RAM).
■ Editeur de scripts intégré
■ Enveloppes (automatiquement déployées autour de chaque objet afin d'en
optimiser le rendu).
■ Génère 7 formats graphiques
· LUXart (24-bits compressé)
· TARGA (24-bits)
· JPEG (24-bits compressé)
· RAW (24-bits)
· SunRaster (24-bits)
· PCX (24-bits compressé)
· GIF (8-bits compressé)
■ Interface utilisateur VGA
· Gestion par icônes, menus déroulants et multi-fenêtrage.
· Souris obligatoire
■ Gère 17 modèles de cartes vidéo compatibles V.E.S.A.
· Ahead Systems
· ATI
· Chips & Technologies
· Cirrus Logic
· Compaq
· Everex
· Genoa
· NCR
· OAK Technologies
· Paradise
· Trident
· Tseng Labs
· Video Seven
■ Traitement sur images
· Filtres sur format LUX
· Conversion LUX <-> TGA <-> GIF...
· Visualisation LUX -> TGA -> GIF
· Impression GIF en émulation HP LaserJet+, Postscript et HP PaintJet.
■ Procédures (générant un script prêt à être utilisé)
· Arbre fractal
· Carrelage puzzle
· Flocon de sphères
· Modèle de tore
· Terrain Plasma (avec projection 3D en temps réel)
■ Divers...
· Méthode RVB 256 couleurs ou 64 tons de gris pour afficher l'image pendant
le rendu.
· 6 algorithmes proposés pour assurer la conversion 24bits -> 8bits du
format GIF.
· Possibilité de continuer un rendu interrompu.
· Autorise le rendu d'une partie de l'image.
· Contrôle de la qualité du rendu
· Accès temporaire au système DOS possible.
· Rapport de travail rédigé sur demande dans un fichier ASCII texte.
· Résolution d'une image illimitée.
· Indication de la durée du dernier calcul effectué.
· Détection automatique du type de processeur (CPU) pour une optimisation
maximale du ray-tracer.
· Temps de calculs exceptionnels par rapport à la complexité et au réalisme
des images obtenues.
· Puissant analyseur syntaxique de scripts.
...et tout ce qui n'a pas été dit et qui reste à dire...
Comme dans tous les autres ray-tracers du marché, la description de la scène
virtuelle à calculer est écrite dans le langage de LUXART, mais les outils
qu'il met à la disposition de l'utilisateur vont grandement faciliter cette
tâche.
Le rendu d'une image par LUXART se fait toujours pixel par pixel et ligne
par ligne sachant qu'au moins un rayon lumineux par pixel sera suivi.
Configuration minimale nécessaire
· IBM PC ou compatible 386 (SX/DX) ou plus.
· Ecran et carte SVGA compatible standard V.E.S.A.
· 4 Mo de mémoire RAM.
· Disque dur avec 6 Mo de disponible.
· Souris.
· MS-DOS/PC-DOS v5.0/6.0 ou DR-DOS v5.0/7.0.
Configuration recommandée (idéale)
· IBM PC ou compatible i486 DX (33/50/66 Mhz).
· Carte vidéo SVGA avec 1Mo de mémoire.
· Gestionnaire d'antémémoire SMARTDRV résident.
· Plus de 4 Mo de mémoire RAM.
· 10Mo de libre sur disque dur.
3) LES LIMITES DE CETTE VERSION
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Cette version distribuée par DP Tool Club fait partie du Domaine Public.
Elle peut être copiée et diffusée librement. Cependant, elle reste très
limitée par rapport à celle qui accompagne le manuel de référence disponible
directement auprès de l'auteur (voir fichier MANUEL.DOC).
Voici les principales restrictions imposées à la présente version :
· Rendu maximum bridé à des images en 640 x 400 pts ;
· N'utilise pas les services d'un processeur arithmétique installé ou d'un
486DX (tourne toujours comme si l'on travaillait sur un 80386) ;
· Le modeleur 3D filaire d'objets n'est ni opérationnel, ni inclus ;
· Les tests anti-virus ne sont pas activés.
Le fichier MANUEL.DOC contient un tableau comparatif des performances entre
la version du Domaine Public et la version Auteur. Les résultats sont
"cruels" pour la première... En effet, si vous possédez un 486DX ou un
coprocesseur arithmétique 387SX, 387DX ou 487SX, vous avez tout intérêt à
vous procurer la version Auteur pour tirer pleinement profit de la puissance
de votre machine et, a fortiori, du programme.
4) RAY-TRACING : Principes et théorie
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
- Chapitre traité uniquement dans le Manuel de Référence -
5) PREMIERE PRISE DE CONTACT AVEC LUXART
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Le programme s'installe automatiquement dans un répertoire nommé LUXART.
Pour y rentrer, il faut donc se placer sur le disque qui contient ce
répertoire et taper la commande DOS :
CD LUXART {entrée}
Ce répertoire comporte 4 sous-répertoires nommés :
· SCENES qui contient les fichiers scripts de scènes (.ART) ;
· OBJETS qui contient les fichiers scripts d'objets utilisés dans des scènes
(.INC) ;
· IMAGES qui contient les fichiers images rendues (7 formats possibles) ;
· TEXTURES qui contient les fichiers échantillons de textures à plaquer sur
la surface des objets (.LUX), les fichiers palettes de couleurs (.PAL) et
les fichiers filtres (.FLX).
Le logiciel se lance en tapant le nom du programme exécutable :
LUXART {entrée}
Comme nous le verrons ultérieurement, il est possible de lui donner une
série de commandes en ligne afin de lui faire calculer une scène directement
sans avoir à passer par le Bureau.
Un fois le nom de l'exécutable validé, l'image de présentation LUXART
s'affiche au bout de quelques secondes si aucun problème n'est survenu. Dans
le cas contraire, un message d'erreur sera annoncé.
Sur cette image est écrit en haut de l'écran, le numéro de version et le
message "Un instant svp...". Le programme prépare ici son initialisation.
Cela peut durer de 5 à 25 secondes environ suivant la vitesse de traitement
de la machine. Une fois cette phase terminée, le Bureau graphique de LUXART
s'affiche : nous sommes au coeur du programme.
Le bureau graphique peut être considéré comme la tour de contrôle du
logiciel. C'est d'ici que l'utilisateur va pouvoir exploiter les différents
outils qui lui sont proposés et donner les ordres qui seront traités par le
ray-tracer.
5.1) Description du Bureau
°°°°°°°°°°°°°°°°°°°°°°°°°°
NB : Certains termes employés ci-après se rapportent directement au chapitre
concernant le langage de description de LUXART.
Ce bureau se présente sous cette forme :
Stéphane MARTY · L · U · X · A · R · T · Version 1.0
┌─── Scène ──┐ ┌───── [X] Imposer taille image ─────┐ ╔═══╗ Modeleur
│ ≡ ········ │ │ Largeur ········ Hauteur ········ │ ╚═══╝ objet 3D
└────────────┘ └────────────────────────────────────┘
┌── Format ──┐ ┌─[X] Anti-crénelage ─┐ ┌──── Rendu ─────┐ ╔═══╗ Editeur
│┌(■) LUXART │ │ ┌(■) Nul │ │ [X] Réflexions │ ╚═══╝ script ≡
│├(■) TARGA │ │ ├(■) Rapide │ │ [X] Réfraction │
│├(■) JPEG ≡ │ │ ├(■) Soigné │ │ [X] Matières │ ╔═══╗ Lancer
│├(■) RAW │ │ └(■) Récursif │ │ [X] Ombres │ ╚═══╝ rendu
│├(■) SunRAS │ └─────────────────────┘ └────────────────┘
│├(■) PCX-24 │ ┌───── CPU ────┐ ┌── Méthode 24 : 8 bits ──┐ ╔═══╗ Continuer
│└(■) GIF │ │ │ │ ┌(■) Algorith. Heckbert │ ╚═══╝ rendu
└────────────┘ │ │ │ ├(■) Popularité │
└──────────────┘ │ └(■) Niveaux de gris │ ╔═══╗ Barre des
┌──────── Options ────────┐ │ ┌(■) Floyd-Steinberg │ ╚═══╝ Menus
│ [X] Préprocesseur │ │ ├(■) Ordonné │
│ [X] Rapport ASCII .RAP │ │ └(■) Chaotique │ ╔═══╗ Accès
│ ┌(■) Affichage N&B │ └─────────────────────────┘ ╚═══╝ au DOS
│ └(■) Affichage Couleurs │ ┌───── [X] Carte Vidéo ───────┐
│ ···· : Ligne de début │ │ ≡ ························· │ ╔══════╗ Quitter
│ ···· : Ligne de fin │ │ (■) 512Ko (■) 1Mo │ ╚══════╝ on/off
└─────────────────────────┘ └─────────────────────────────┘
[X] Sauvegarde bureau │ Ray-Tracer 32-bits │ Durée dernier calcul hh:mm:ss
(PS : la conversion en caractères ASCII n'est pas toujours évidente...)
Légende
-------
[X] : interrupteur activé/désactivé (l'option sera prise en compte ou pas)
(■) : sélecteur (1 sélecteur activé par arbre)
┌(■) : arbre de sélection. Les sélecteurs sont liés entre-eux mais un seul
├(■) : à la fois ne s'allume.
└(■)
≡ : bouton pression qui appelle une boîte de liste ou une boîte de dialogue
╔═══╗ : bouton icone qui déclenche une action prioritaire
╚═══╝ :
hh:mm:ss : durée exprimée en heures, minutes et secondes
Description
-----------
┌─── Scène ──┐ Doit contenir le nom de la scène en cours (ouverte).
│ ≡ ········ │ 1 seule scène peut être ouverte en même temps.
└────────────┘ La scène est choisie dans la liste appelée par le bouton
pression. Si une nouvelle pression est exercée sur ce bouton
alors qu'une scène est déjà ouverte, une fenêtre vous propose d'en terminer
avec celle-ci et d'en ouvrir une autre.
┌───── [X] Imposer taille image ─────┐ Fixe la taille de l'image à calculer
│ Largeur ········ Hauteur ········ │ si l'interrupteur est activé, sinon
└────────────────────────────────────┘ la taille est celle spécifiée dans
le script. La présente version est
volontairement bridée à une largeur de 640 et une hauteur de 400 pts. Ceci
est aussi valable en ligne de commande (voir chapitre 7).
┌── Format ──┐ Sélectionne le type de format qui doit être utilisé pour
│┌(■) LUXART │ créer l'image de synthèse. Les 6 premiers sont codés sur
│├(■) TARGA │ 24-bits. Le premier est prioritaire sur tous les autres
│├(■) JPEG ≡ │ car c'est celui que manipule LUXART dans les traitements.
│├(■) RAW │ Le format JPEG contient une boîte d'Options pour régler
│├(■) SunRAS │ le taux de compression de l'image (plus la qualité est
│├(■) PCX-24 │ proche de 100%, moins le fichier sera compressé et plus
│└(■) GIF │ l'image sera de bonne qualité).
└────────────┘
┌─[X] Anti-crénelage ─┐ Fixe le niveau d'anti-crénelage à utiliser pour
│ ┌(■) Nul │ rendre l'image si l'interrupteur est activé, sinon
│ ├(■) Rapide ─┐ │ le programme choisit celui indiqué dans le script.
│ ├(■) Soigné ─┼>·· │ La valeur qui peut être indiquée dans la zone ··
│ └(■) Récursif ─┘ │ correspond au seuil. Si cette zone est vide, le
└─────────────────────┘ seuil est celui écrit dans le script.
┌──── Rendu ─────┐ Règle la qualité du rendu. Cette qualité est au maximum
│ [X] Réflexions │ lorsque toutes les propriétés sont activées. Une
│ [X] Réfraction │ propriété désactivée diminuera les temps de calcul mais
│ [X] Matières │ le réalisme de l'image obtenue sera également affecté.
│ [X] Ombres │
└────────────────┘
┌──────── Options ────────┐
│ [X] Préprocesseur │ - Préprocesseur activé ou non pendant l'analyse
│ [X] Rapport ASCII .RAP │ syntaxique du script.
│ ┌(■) Affichage N&B │ - Rapport confirmé ou non sur le rendu en cours.
│ └(■) Affichage Couleurs │ Ce rapport est écrit en français dans un fichier
│ ···· : Ligne de début │ ASCII qui porte le même nom que le script
│ ···· : Ligne de fin │ correspondant. il sera toujours placé dans le
└─────────────────────────┘ sous-répertoire IMAGES.
- Le sélecteur de palette (N&B, couleurs) permet de choisir si l'image qui
s'affiche en temps réel pendant le rendu doit être en 256 couleurs ou en
64 niveaux de gris.
- Si une image doit être calculée partiellement (pour des tests par exemple),
les lignes de début et de fin doivent être indiquées dans leur zone respec-
tive sachant que la première ne doit pas être supérieure à la seconde et
qu'elles ne doivent pas dépasser la largeur de la résolution de l'image.
┌── Méthode 24 : 8 bits ──┐ Ces sélecteurs sont utilisés lorsque l'on
│ ┌(■) Algorith. Heckbert │ choisit de rendre une image au format GIF.
│ ├(■) Popularité │ Ils correspondent chacun à un algorithme
│ └(■) Niveaux de gris │ différent qui contrôle la conversion 24-bits
│ ┌(■) Floyd-Steinberg │ de l'image originale en 8-bits du format GIF.
│ ├(■) Ordonné │ La fonction de chacun d'eux n'est explicitée
│ └(■) Chaotique │ que dans le manuel de référence. Mais, dans la
└─────────────────────────┘ plupart des cas, le meilleur résultat est obtenu
par Algorith. Heckbert / Floyd-Steinberg.
┌───── [X] Carte Vidéo ───────┐ Lorsque la carte vidéo est activée (défaut)
│ ≡ ························· │ le rendu d'une scène s'affiche en temps
│ (■) 512Ko (■) 1Mo │ réel en 256 couleurs ou en 64 tons de gris
└─────────────────────────────┘ suivant la palette sélectionnée dans le cadre
'Options'. Si l'interrupteur n'est pas coché, LUXART ne passera pas en mode
vidéo VESA pour calculer l'image, mais restera en mode texte et signalera
son évolution ligne par ligne. La carte vidéo est détectée systématiquement
au lancement du programme ainsi que sa mémoire RAM.
[X] Sauvegarde bureau : Permet de sauvegarder la configuration du bureau au
moment de quitter LUXART afin de le retrouver intact
à la prochaine exécution du programme.
Durée dernier calcul hh:mm:ss : Exprime en heures, minutes et secondes les
temps de calcul du dernier rendu.
╔═══╗ Modeleur : N'est pas opérationnel dans cette version.
╚═══╝ objet 3D
╔═══╗ Editeur : Le bouton pression ouvre une boîte de dialogue dans laquelle
╚═══╝ script ≡ : on indique si le script à éditer correspond à la scène en
cours (ouverte, répertoire SCENES) ou à un script objet
(répertoire OBJETS). Dans le second cas, l'objet existant est sélectionné
dans la liste appelée par le bouton pression de cette boîte de dialogue.
Pour créer un nouveau fichier objet, il suffit d'activer le sélecteur 'Objet'
et d'inscrire son nom dans la zone de texte grisée.
Une scène peut être éditée à condition d'être ouverte (en cours).
L'éditeur se présente sous la forme :
- La ligne d'édition est écrite en blanc sur fond rouge. Le curseur se trouve
donc toujours sur cette ligne.
- Le reste du texte est écrit en vert sur fond noir.
- Les barres d'état en haut et en bas de l'écran sont écrite en blanc sur fond
bleu.
- Tout message de l'éditeur sera écrit en bleu clair sur l'avant dernière
ligne de l'écran.
- A partir du moment où un caractère est inséré ou supprimé du script, celui-
ci est considéré comme modifié et un astérisque clignotant s'affiche devant
le nom du fichier en haut à gauche de l'écran.
- L'écran récapitulatif des principales touches opérationnelles s'obtient en
appuyant sur la touche F1.
╔═══╗ Lancer : Déclenche le rendu complet de la scène en cours. Chaque
╚═══╝ rendu : interrupteur et sélecteur est analysé pour savoir s'il doit
jouer un rôle dans ce calcul. Le programme entre alors dans
sa phase d'analyse syntaxique du script assisté du préprocesseur s'il est
actif. Si une erreur ou un problème surgit, ce sera pendant ce laps de
temps. Si tout se déroule correctement, LUXART entre en phase "Ray-Tracing"
et commence son suivi de rayons. L'image se génère pixel par pixel en 256
couleurs ou 64 tons de gris sur l'écran (si la carte vidéo est active), et
est codée sur 24-bits dans un fichier au format correspondant (8-bits si GIF)
placé dans le sous-répertoire IMAGES. Le rendu peut être interrompu en
appuyant sur Echap et le programme rendra la main dès qu'il aura terminé de
calculer la ligne entière.
╔═══╗ Continuer : Permet de continuer une scène dont le rendu a été volontai-
╚═══╝ rendu : rement interrompu par l'utilisateur. Pour cela, elle doit
être ouverte avec son fichier .LUX correspondant créé dans
le répertoire IMAGES. Les 2 mêmes phases que le précédent 'Lancer rendu'
seront enchaînées avec la différence que la partie déjà calculée s'affichera
avant la phase 'Ray-Tracing'.
╔═══╗ Barre des : Démasque la barre des menus déroulants placée au sommet de
╚═══╝ Menus : l'écran. Le pointeur de la souris devient alors une flèche
et le bureau passe en mode 'Edition des menus'. La signi-
fication des commandes de chaque menu fait l'objet du prochain chapitre.
Pour retourner au mode bureau, cliquer sur le menu 'Bureau' à droite de la
barre des menus.
╔═══╗ Accès : Permet l'accès temporaire au système DOS. Il est conseillé
╚═══╝ au DOS : de ne pas exécuter d'application sous ce mode car LUXART est
toujours résident en mémoire. Pour quitter le système et
retourner au bureau, taper EXIT.
╔══════╗ Quitter : Permet de sortir définitivement du programme.
╚══════╝ on/off : Au moment de quitter, une dernière fenêtre vous demandera
de confirmer votre choix en appuyant sur OUI ou NON.
Dans l'affirmative, l'interrupteur 'Sauvegarde bureau' est vérifié pour
savoir si la configuration actuelle du bureau doit être enregistrée afin de
la retrouver intacte à la prochaine exécution du programme.
Tous les messages destinés à l'utilisateur sont écrits en blanc sur fond
noir sous le bureau en bas de l'écran.
Toutes les actions sont menées à l'aide de la souris. Le bouton de gauche
est utilisé pour le "clic".
Néanmoins, les lettres en surimpression bleu clair de certains cadres et
boutons (exemple : le 'S' de Scène, le 'L' de Lancer rendu...) peuvent être
directement activés en appuyant sur la touche du clavier correspondant à
cette initiale. La touche 'Echap' prend ici la fonction 'Annuler' lorsqu'une
liste ou une boîte de dialogue est affichée (retour au bureau).
6) LA BARRE DES MENUS DEROULANTS
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Comme nous venons de le voir dans le précédent chapitre, cette barre des
menus est démasquée et activée par le bouton icône 'Barre des Menus'. Dans
chaque commande de ces menus, les lettres jaunes écrites en majuscules
signifient qu'elles sont directement accessibles au clavier (raccourci).
Voici une courte description de chacune des commandes :
6.1) Menu Fichier
°°°°°°°°°°°°°°°°°
- Nouvelle scène : Par cette commande doit être spécifié le nom de la
nouvelle scène à créer (et formater) qui sera ouverte et placée dans le
sous-répertoire SCENES.
- Ouvrir une scène : Même fonction que le bouton pression de la zone 'Scène'
du bureau.
- Editer une scène : Même fonction que le bouton icône 'Editeur script' du
bureau. Cette commande n'est accessible dans ce menu que lorsqu'une scène
est ouverte.
- Fermer la scène en cours : Clôture la scène active mais ne propose pas
d'en ouvrir une autre.
- Copier une scène : Copie le contenu de la scène sélectionnée dans la boîte
de liste (scène source) vers une nouvelle scène dont le nom doit être
spécifié dans la zone 'Scène cible'. Cette scène sera placée dans le sous-
répertoire SCENES.
- Supprimer une scène : Supprime physiquement la scène choisie dans la boîte
de liste.
- Copier un objet : Copie le contenu de l'objet sélectionné dans la boîte de
liste (objet source) vers un nouvel objet dont le nom doit être spécifié
dans la zone 'Objet cible'. Cet objet sera placé dans le sous-répertoire
OBJETS.
- Supprimer un objet : Supprime physiquement l'objet choisi dans la boîte de
liste.
- Environnement : Indique le chemin d'accès aux 4 sous-répertoires de
travail de LUXART. Il est vivement conseillé de ne pas apporter de
modifications à ces zones de texte sauf si vous tenez absolument à utiliser
d'autres répertoires déjà créés.
6.2) Menu Image
°°°°°°°°°°°°°°°
- Filtrer une image LUX : Permet de soumettre un fichier image au format LUX
choisi dans la boîte de liste à un filtre prédéfini ou personnel.
L'explication de chacun de ces filtres est fourni dans le manuel. Le fichier
qui reçoit le résultat de cette procédure est indiqué dans la zone 'Nouvelle
image filtrée'.
- Convertir une image :
1) format LUX -> TGA : convertit le fichier image LUX sélectionné dans la
boîte de liste vers un nouveau fichier image TGA (Targa 24-bits) de même
nom. Cette image sera placée dans le sous-répertoire IMAGES.
2) format LUX -> GIF : convertit le fichier image LUX sélectionné dans la
boîte de liste vers un nouveau fichier image GIF (8-bits) de même nom. Cette
image sera placée dans le sous-répertoire IMAGES. La conversion en GIF prend
en compte les options de la zone 'Méthode 24 -> 8 bits' du bureau. Le
résultat est affiché après conversion.
3) format LUX -> niveaux de gris : convertit en 256 tons de gris le fichier
image LUX sélectionné dans la boîte de liste vers un nouveau fichier image
LUX dont le nom a subi une petite transformation pour garder intact
l'original. Cette image sera placée dans le sous-répertoire IMAGES.
- Voir une image :
(Cette commande est inactive si l'interrupteur 'Carte vidéo' du bureau n'est
pas coché)
1) format LUX : affiche en 256 couleurs le fichier image LUX sélectionné
dans la boîte de liste. Il n'est pas nécessaire de disposer d'une carte
vidéo 24-bits car la conversion en temps réel 24-bits (16,8 Millions de
couleurs) en 8-bits (256 couleurs) est assurée par la méthode 3-3-2 RVB.
2) format TGA : affiche en 256 couleurs le fichier image TGA (Targa)
sélectionné dans la boîte de liste. Il n'est pas nécessaire de disposer
d'une carte vidéo 24-bits car la conversion en temps réel 24-bits (16,8
Millions de couleurs) en 8-bits (256 couleurs) est assurée par la méthode
3-3-2 RVB.
3) format GIF : affiche en 256 couleurs le fichier image GIF sélectionné
dans la boîte de liste.
- Imprimer une image GIF : imprime en émulation HP LaserJet+, PostScript ou
HP PaintJet le fichier image GIF sélectionné dans la boîte de liste. Une
boîte de dialogue propose alors diverses options.
6.3) Menu Textures
°°°°°°°°°°°°°°°°°°
- Voir un fichier palette : affiche les 256 couleurs que contient le fichier
palette PAL sélectionné dans la boîte de liste.
- Voir un fichier texture LUX (inactive si l'interrupteur 'Carte vidéo' du
bureau n'est pas coché) : affiche en 256 couleurs le fichier texture LUX
sélectionné dans la boîte de liste. Il n'est pas nécessaire de disposer
d'une carte vidéo 24-bits car la conversion en temps réel 24-bits (16,8
Millions de couleurs) en 8-bits (256 couleurs) est assurée par la méthode
3-3-2 RVB.
- Convertir format GIF -> LUX : convertit le fichier GIF (appartenant au
sous-répertoire TEXTURES) sélectionné dans la boîte de liste vers un nouveau
fichier texture LUX (24-bits) de même nom. Il sera également placé dans le
sous-répertoire TEXTURES.
- Convertir format TGA -> LUX : convertit le fichier TGA (24-bits,
appartenant au sous-répertoire TEXTURES) sélectionné dans la boîte de liste
vers un nouveau fichier texture LUX (24-bits) de même nom. Il sera également
placé dans le sous-répertoire TEXTURES.
6.4) Procédures
°°°°°°°°°°°°°°°
- Arbre fractal : génère un script objet dans le sous-répertoire OBJETS qui
reproduit naturellement un arbre (voir image PARC.JPG) suivant les valeurs
des paramètres spécifiés dans la boîte de dialogue. Le nom de ce nouvel
objet sera celui fixé dans la zone 'Fichier procédure'. La fonction des
paramètres est explicitée dans le manuel de référence.
- Carrelage puzzle : génère un script objet dans le sous-répertoire OBJETS
qui reproduit du carrelage brisé (voir image ZEPHYR.JPG) suivant les valeurs
des paramètres spécifiés dans la boîte de dialogue. Le nom de ce nouvel
objet sera celui fixé dans la zone 'Fichier procédure'. La fonction des
paramètres est explicitée dans le manuel de référence.
- Flocon de sphères : génère un script objet dans le sous-répertoire OBJETS
qui reproduit un amas de sphères en couches récursives (voir images
OMBRES1.JPG ou CAUSTIQU.JPG) suivant les valeurs des paramètres spécifiés
dans la boîte de dialogue. Le nom de ce nouvel objet sera celui fixé dans la
zone 'Fichier procédure'. La fonction des paramètres est explicitée dans le
manuel de référence.
- Modèle de tore : génère un script objet dans le sous-répertoire OBJETS qui
reproduit un tore suivant les valeurs des paramètres spécifiés dans la boîte
de dialogue. Le nom de ce nouvel objet sera celui fixé dans la zone 'Fichier
procédure'. La fonction des paramètres est explicitée dans le manuel de
référence.
- Terrain plasma : génère un script objet dans le sous-répertoire OBJETS qui
reproduit une portion de terrain naturellement accidentée (voir image
ROCHER.JPG) suivant les valeurs des paramètres spécifiés dans la boîte de
dialogue. Le nom de ce nouvel objet sera celui fixé dans la zone 'Fichier
procédure'. La fonction des paramètres est explicitée dans le manuel de
référence.
Précision : lorsqu'un plasma a été graphiquement généré à l'écran, trois
touches sont opérationnelles :
1) Echap : pour retourner au bureau ;
2) Barre d'espace : pour recalculer un autre plasma à l'écran ;
3) Entrée : pour entamer la procédure de calcul des normales et de création
du fichier script objet. ATTENTION : ceci peut être très long en fonction
de l'Etendue du terrain. Un terrain peut occuper plusieurs Mégas octets
sur votre disque dur !
6.5) Quitter
°°°°°°°°°°°°
- Oui / Non : Au moment de quitter, une dernière fenêtre vous demandera de
confirmer votre choix en appuyant sur OUI ou NON. Dans l'affirmative,
l'interrupteur 'Sauvegarde bureau' est vérifié pour savoir si la
configuration actuelle du bureau doit être enregistrée afin de la retrouver
intacte à la prochaine exécution du programme.
- A propos... : affiche une boîte de dialogue avec quelques noms ainsi que
la quantité de Kilos octets libres sur l'unité de disque en cours.
6.6) Bureau
°°°°°°°°°°°
Masque et désactive la barre des menus et redonne la main au bureau. Le
pointeur de la souris redevient alors une main pointant son index.
7) LES COMMANDES EN LIGNE
°°°°°°°°°°°°°°°°°°°°°°°°°
Comme nous l'avons dit en début de chapitre 5, plusieurs options peuvent
être rendues actives dès le lancement de LUXART, ce qui permet de lancer le
calcul d'une scène directement à partir du DOS.
La syntaxe est donc la suivante :
LUXART { options } scène
Les options disponibles sont :
-i largeur hauteur : taille de l'image à calculer.
-a 0..3 : type d'anti-crénelage.
0 = nul / 1 = rapide / 2 = soigné / 3 = récursif
-v : désactive la carte vidéo.
-c : permet de continuer le calcul à l'endroit où il a été interrompu.
-r : ne créé pas de rapport ASCII du rendu.
-g : utilise une palette de 64 niveaux de gris au lieu de 256 couleurs.
Voici quelques exemples significatifs :
LUXART -i 320 200 -r aestus
LUXART -c crypta
LUXART piscine
LUXART -a 0 -g cuisine
Le rappel de ces commandes en ligne est obtenu en tapant
LUXART ?
8) LE LANGAGE
°°°°°°°°°°°°°
Afin de vous familiariser avec le langage de description de LUXART, il est
conseillé d'étudier les fichiers scripts de scènes (extension .ART,
répertoire SCENES) inclus dans ce package. Pratiquement tous les niveaux de
difficultés sont rencontrés.
8.1) Les axes
°°°°°°°°°°°°°
LUXART se paramètre en coordonnées cartésiennes et utilise donc comme repère
un système d'axes orthonormés (abscisse, ordonnée et cote). Chaque
coordonnée est exprimée par trois nombres X, Y et Z dont les valeurs peuvent
être entières ou décimales, positives ou négatives sachant que :
- l'on regarde à travers l'écran sur l'axe +Y
- l'axe +X tend vers la droite de l'écran
- l'axe +Z tend vers le haut de l'écran
+Z
+Y
| /
| /
| /
----------+----------> +X
/ |
/ |
/ |
|
8.2) Les types de paramètres utilisés par le langage
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
┌------------┬-----------------┬----------------┬----------------┐
| Paramètres | Définition | Exemple | Valeurs |
├------------┼-----------------┼----------------┼----------------┤
| x y z | Vecteur | 5 -47 62.11 | Toutes |
| r v b°° | Couleur | 0.0 0.58 1.0 | Entre 0 et 1 |
| ent | Entier | 320, -54, 0... | Toutes non déc.|
| déc | Décimal | -24.78, 1.4... | Toutes déc. |
| ent+ | Entier positif | 1024 | Toutes >= 0 |
| déc+ | Décimal positif | 8.5, 0.1574... | Toutes >= 0 |
| $texte$ | Chaîne de carac.| Bois_Clair | ASCII 80c. max |
└------------┴-----------------┴----------------┴----------------┘
°° r v b = rouge vert bleu = couleurs primaires
exemple : pour reproduire la couleur Orange, le trinôme sera 1 .647059 0
1 = 100% de rouge
.647059 = 64,7059% de vert
0 = 0% de bleu
8.3) Les commentaires
°°°°°°°°°°°°°°°°°°°°°
Pour mettre une seule ligne en commentaire, on utilise la syntaxe :
// commentaire...
En fait, tout ce qui se trouve après '//' n'est plus pris en compte :
#inclure couleurs.inc // fichier contenant la déclaration de près de
// 320 noms de couleurs.
Pour mettre une partie du script en commentaire, on utilise la syntaxe :
/* <- début du commentaire
...
...
... */ <- fin du commentaire
Les commentaire peuvent être imbriqués les uns dans les autres.
8.4) Les fonctions du langage
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Le vocabulaire de LUXART va permettre la description "mathématique" de la
scène virtuelle que l'artiste souhaite reproduire. Dans la mesure où la
syntaxe de chaque fonction est respectée, le créateur n'a aucune limite.
Aussi, la meilleure façon d'apprendre et de progresser est d'étudier et de
comprendre les nombreux exemples de scripts fournis avec ce logiciel...
Précision : les accents ne sont pas reconnus ! Il faut, par exemple, écrire
'sphere' et non pas 'sphère' sinon l'analyseur syntaxique signalera une
erreur.
LUXART n'impose pas de forme particulière pour écrire un script. La
description peut être menée à terme dans n'importe quel ordre. Cependant, il
est conseillé, pour des questions d'organisation, de suivre une structure
qui semble simple et logique :
[ initialisation ] par exemple #inclure couleurs.inc
#inclure matieres.inc
etc...
environnement { ... } définition de l'environnement
source_lumineuse { ... } mise en place des sources de lumière
matiere { ... } description mathématique de la scène par
objet { ... } les différentes primitives du ray-tracer
.
.
.
Les trois fonctions suivantes (8.4.1, 8.4.2 & 8.4.3) sont contrôlées par le
préprocesseur et doivent par conséquent être précédées du symbole #.
8.4.1) Les déclarations
°°°°°°°°°°°°°°°°°°°°°°°
On s'en sert pour assigner à une chaîne de caractères :
- une valeur
- une texture
- une couleur
- un ensemble de primitives...
afin de l'utiliser ultérieurement dans le script et, au besoin, plusieurs fois.
Exemples (commentés suivant la syntaxe de LUXART) :
#declarer Rouge [ 1 0 0 ] // une couleur se définie toujours entre crochets
#declarer INTENSITE .8 .8 .8 // la variable INTENSITE correspond à une
// intensité d'éclairage
#declarer DOUCEUR 32 // cette variable sera utilisée ultérieurement
#declarer TAPIS + // pour définir une texture ou un
matiere { + // objet, on joint chaque fin de
couleur Vert_Fonce + // ligne par le signe '+' pour dire
imperfection .2 + // à LUXART que la déclaration
force_crenelage + // se poursuit sur la ligne suivante
}
8.4.2) L'effacement de variable
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Il est possible de modifier ou d'effacer la valeur d'une variable qui a déjà
été utilisée grâce à la fonction #annuler.
Exemple tiré de PAUSCAFE.ART (commentés suivant la syntaxe de LUXART) :
#declarer NIVEAU 1.1 // NIVEAU prend la valeur 1.1
.
.
.
#annuler NIVEAU // on lui retire sa valeur...
#declarer NIVEAU .8 // ...pour lui en affecter une autre
.
.
.
#annuler NIVEAU // puisqu'on ne l'utilisera plus, on la retire de la mémoire
8.4.3) L'inclusion de scripts
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Le préprocesseur de LUXART est capable d'imbriquer un script dans un autre
grâce à la fonction #inclure. Ceci est, par exemple, très efficace pour
utiliser un objet décrit séparément dans un autre script.
Exemples (commentés suivant la syntaxe de LUXART) :
#inclure couleurs.inc // ceci est devenu indispensable en début de script
// pour pouvoir utiliser les différentes couleurs
// par leur nom et non par leur trinôme r v b.
// Profitez-en, il y en a près de 320 !
bloc { deplacer -5 10 0 }
#inclure tabouret.inc // on rajoute un tabouret de plus...
fin_bloc
8.4.4) L'environnement
°°°°°°°°°°°°°°°°°°°°°°
C'est une des fonctions fondamentales du langage de LUXART parce que c'est
grâce à elle que l'on positionne la caméra et que l'on configure la scène a
créer.
Tous ses paramètres sont optionnels sauf ceux qui concernent la caméra (les
4 premiers) :
environnement
{
position_camera x y z
pointe_vers x y z
orientation_z x y z
champ_visuel ent+
resolution xent+ yent+
facteur_proportionnel déc+
perspective $texte$
atmosphere r v b
fond r v b
ou
fond { $texte$
orientation_z x y z
}
brouillard déc+
anti_crenelage $texte$
seuil ent+
artefact
ouverture_diaphragme déc+
profondeur_champ déc+
quantite ent+
refraction_limitee
caustiques
limite_ray_tracing ent+
}
position_camera : Sans commentaire...
pointe_vers : Endroit de la scène où pointe la caméra
orientation_z : 0 0 1 pour un axe Z en hauteur (défaut)
champ_visuel : >= 180 correspond à un objectif à grand angle.
<= 10 équivaut à un objectif téléphoto.
Un angle compris entre 40 et 80 donne de bons
résultats.
resolution : Taille en pixels de l'image à calculer
facteur_proportionnel : Rapport Largeur/Hauteur de l'écran pour l'image à
calculer. Pour des écrans 14", 15" et 17", 1.3333
est la meilleure valeur.
perspective : Contrôle la projection 3D du monde virtuel de LUXART
sur le plan 2D de l'écran. 4 paramètres sont valables :
photographique (défaut, la plus humaine)
universelle (projection sphérique)
architecturale (pour les amateurs d'architecture)
orthogonale (rayons parallèles entre-eux). Pour ce
dernier paramètre, le 'champ_visuel' n'est pas utilisé
et est remplacé par :
largeur ent+
qui correspond à la hauteur de l'écran dans le système
de coordonnées.
atmosphere : Contrôle la densité de l'air dans la scène. S'apparente
aussi à un facteur de lumière ambiante globale. Pour
des images d'extérieur, le trinôme .2 .2 .2 ou plus
simule un éclairage ambiant naturel, tandis que pour
des rendus d'intérieur, l'atmosphère se situe plutôt
autour de .05 .05 .05 ou .1 .1 .1.
fond : Couleur retournée quand il n'y a pas eu d'intersection
rayons/objets. Un fichier palette peut aussi servir de
fond. Dans ce cas, chaque couleur qu'il contient est
étalée en fonction de l'orientation voulue sur Z.
brouillard : Densité de la brume dans la scène (0 par défaut). Plus
cette valeur est supérieure à 0, et plus la couleur de
fond influera sur l'intensité du rayon suivi. Il est
conseillé de ne pas utiliser de valeur du dessus de
0.01
anti_crenelage : Fixe le niveau d'anti-crénelage utilisé pour le rendu.
nul -> 1 rayon par pixel.
rapide -> 1 rayon est suivi pour une zone de 6 pixels².
A partir de l'intensité de ce rayon, un calcul
approximatif détermine la couleur des autres pixels
de ce carré. Donne d'excellents résultats en niveaux
de gris. Les temps de calculs de l'image peuvent
être réduits jusqu'à 15 fois.
soigne -> 1 pixel est divisé en 4 parties égales qui
devront chacune suivre 1 rayon.
recursif -> puissante procédure qui subdivise chaque
pixel en autant de rayon qu'il le faut pour trouver
la meilleure intensité possible adaptée à ce pixel.
Cette récursivité est fixée par le paramètre suivant.
seuil : Valeur qui détermine le niveau de récursivité maximal
pour un anti-crénelage récursif. Plus elle est proche
de 0 et plus l'anti-crénelage sera parfait, mais plus
les temps de calculs seront longs. Valeur conseillée : 4.
artefact : En association avec un anti-crénelage récursif, ce
paramètre affine encore plus la qualité de l'image et
lui donne une apparence plus naturelle.
ouverture_diaphragme : 0 par défaut. Ce paramètre doit être combiné avec
le suivant 'profondeur_champ'. Plus grande est sa
valeur, plus flous seront les objets dans la
profondeur de champ. De bonnes valeurs varient
entre 0.05 et 0.2. Avec un contrôle de l'ouverture
du diaphragme, les images rendues vont devenir
très réalistes telles de véritables photos, mais
les temps de calculs risquent d'être multipliés
par 3 ou 4 en fonction de la quantité de rayons
supplémentaires que l'on aura choisi de suivre
pour obtenir un tel effet.
profondeur_champ : Détermine la distance entre la caméra et les objets
nets les plus rapprochés. Si aucune valeur n'est
donnée, cette distance sera celle calculée entre
'position_camera' et 'pointe_vers'.
quantite : Fixe le nombre de rayons supplémentaires par pixel qui
doivent être suivis lorsque le paramètre
'ouverture_diaphragme' n'est pas nul. 8 est la valeur
par défaut.
refraction_limitee : Elimine l'atténuation exponentielle des rayons qui
traversent une surface en réfraction. Ceci accélère
agréablement les temps de calculs lorsque la réfraction
est très sollicitée (ex : PISCINE.ART).
caustiques : Force le rendu des caustiques que l'on pourra apercevoir
dans l'ombre des objets en réfraction.
limite_ray_tracing : Contrôle la puissance du moteur de ray-tracing. Les
valeurs possibles vont de 1 à 20. Plus cette valeur
tend vers 20 et plus le ray-tracer exploitera sa
puissance. La valeur par défaut est 20.
8.4.5) Les sources lumineuses
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
Pour chacun des 3 premiers types de source lumineuse dont dispose LUXART,
les paramètres 'intensité' et 'puissance' contrôleront l'éclat de cette
source et la variation de l'intensité en fonction de la distance suivant
l'équation :
puissance
I = I / (dist)
0
- I est l'intensité de base de la source.
0
- dist est la distance entre la source et le point de la surface de l'objet
dont la couleur va être déterminée.
Avec puissance 0, l'intensité de la source ne change pas en fonction de la
distance.
1)
source_lumineuse
{
type point
position x y z // emplacement du point lumineux
intensite r v b // couleur intrinsèque de la source
puissance ent+ // 0 par défaut
}
Les rayons émanants du point lumineux sont les plus faciles et les plus rapides
à suivre. Les résultats sont, de plus, assez surprenants et de bonne qualité.
2)
source_lumineuse
{
type ampoule // déclenche le rendu des ombres douces
position x y z // emplacement du centre de cette source sphérique
rayon ent+ ou déc+ // rayon de cette sphère
intensite r v b // couleur intrinsèque de la source
puissance ent+ // 0 par défaut
quantite ent+ // quantité de rayon supplémentaire suivis pour former
// les ombres douces projetées
}
Les résultats obtenus avec cette source sont assez impressionnants (voir
BILLARD.ART). Cependant, elle force le programme à effectuer des calculs
supplémentaires qui vont inexorablement ralentir le processus. Aussi, il est
conseillé de ne pas en abuser à moins de posséder une machine qui aime ça
(486DX50 ou DX2/66) !
3)
source_lumineuse
{
type projecteur
position x y z // emplacement du projecteur
pointe_vers x y z // point de la scène vers lequel il est dirigé
cone_angle_min ent+ // voir explications ci-après
cone_angle_max ent+ //
intensite r v b // couleur intrinsèque de la source
puissance ent+ // 0 par défaut
}
Les paramètres 'cone_angle_min' et 'cone_angle_max' définissent le cône de
lumière produit par le projecteur. Tout ce qui est à l'intérieur de l'angle
'cone_angle_min' sera totalement illuminé. A partir de là, l'intensité
décroît jusqu'à ce que l'angle 'cone_angle_max' soit atteint.
4)
source_lumineuse
{
type laser
position_laser x y z // départ du faisceau laser
visee_laser x y z // point de la scène vers lequel il se dirige
intensite r v b // couleur intrinsèque du laser
}
Cette source reproduit exactement les propriétés d'un laser : faisceau de
lumière cohérente sans aucun changement d'intensité.
8.4.6) Les matières
°°°°°°°°°°°°°°°°°°°
Cette fonction va permettre de définir les propriétés de surface (réflexion,
réfraction, textures, lumière diffuse etc...) de chacun des objets contenus
dans la scène. Lorsqu'une structure 'matiere' est rencontrée (même
antérieurement déclarée et réutilisée par son nom), toutes les primitives
qui la suivent recevront ses caractéristiques jusqu'à ce qu'une autre
'matiere' soit trouvée. Une telle structure peut rapidement devenir complexe
si elle contient des définitions de textures, de turbulences ou si elle
inclue d'autres structures. Tous les paramètres de cette fonction sont
optionnels.
structure courante :
------------------
matiere
{
diffuse r v b
ambiante r v b
reflexion r v b
speculaire ent+ r v b
refraction r v b
indice_refraction déc+
imperfection déc+
force_crenelage
}
diffuse : Couleur intrinsèque de l'objet.
ambiante : Facteur de luminosité propre de la surface.
reflexion : Faculté de réfléchir les rayons de lumière reçus.
0 0 0 = aucune réflexion -> 1 1 1 = miroir parfait.
speculaire : Contrôle la taille et la couleur des taches de
brillance dûs à la réflexion spéculaire. Une faible
valeur (1 à 20) produit de larges taches lumineuses et
plus cette valeur est grande, moins il y a de réflexion
spéculaire sur la surface. La couleur est souvent
Blanche mais n'est pas indispensable. Dans ce cas, ces
taches seront rendues à partir de la couleur de la surface.
refraction : Transparence de la surface. Faculté d'absorber les
rayons de lumière reçus.
0 0 0 = opaque -> 1 1 1 = transparent.
Doit être utilisé en combinaison avec 'indice_refraction'.
indice_refraction : Indice de réfraction. Dénote en fait l'angle de
déviation d'un rayon qui traverse une matière en
réfraction. Ces indices ne s'inventent pas, ils se
calculent. Un grand nombre d'entre-eux sont déjà connus
(manuel de référence).
imperfection : Perturbe chaotiquement la normale de la surface de
l'objet lorsque sa couleur est déterminée afin de lui
donner une apparence imparfaite et rugueuse. La valeur
attendue correspond à l'angle maximal autorisé pour
faire varier la normale (.01 à .3 pour de bons résultats).
force_crenelage : L'anti-crénelage fixé dans l'environnement n'est pas
actif (nul) pour tout objet dont la surface comporte ce
paramètre.
Bump mapping :
------------
Ceci est un procédé qui permet de simuler des surfaces bosselées, ridées ou
comportant de véritables vagues.
la syntaxe sera de la forme :
matiere
{
diffuse r v b // optionnel...
reflexion r v b // optionnel...
...
bosses
{
.
.
.
}
}
Evidemment, plusieurs structure 'bosses' peuvent faire partie d'une même
structure matière.
Première structure possible :
Concerne la simulation de vagues que l'on peut observer, par exemple, dans
des substances liquides.
bosses
{
vague
{
centre x y z
crete_a_crete déc+
amplitude éc+
attenuation déc+ entre 0 et 1
phase déc+ entre 0 et 1
}
}
centre : Position du centre de la source d'où se forme la vague.
crete_a_crete : Distance crête à crête de la sinusoïde.
amplitude : Quantité maximale de perturbation infligée à la normale de
la surface. Une valeur inférieur ou égale à 1 est meilleure.
attenuation : Dénote l'atténuation de l'amplitude avec la distance. .9
signifie, par exemple, que l'amplitude s'affaiblit de 10%
entre chaque ondulation crête à crête à partir de la source.
phase : Fixe "l'apparence" de départ de la vague. Pour mieux
comprendre ce paramètre, il faut savoir que pour animer une
vague, il suffit de modifier sa phase.
Seconde structure possible :
Simule, cette fois, des déformations fractales naturelles sur une surface.
bosses
{
turbulence
{
ajuster x y z
deplacer x y z
amplitude déc+
cycle déc+ ou ent+
}
}
ajuster : Règle sur les 3 axes les proportions de la perturbation
avant d'appliquer la fonction de turbulence.
deplacer : Décale sur les 3 axes les coordonnées de la perturbation
avant d'appliquer la fonction de turbulence.
amplitude : A partir de la position d'une intersection de rayon, la
fonction 'turbulence' choisit au hasard une valeur comprise
entre (+/-) 'amplitude' pour former la perturbation.
cycle : Contrôle l'apparence fractale de la surface. Lorsque le
cycle n est > 1, la fonction 'turbulence' est réitérée n
fois avec chaque fois le nouveau résultat qui s'accumule à
l'ancien. Chaque cycle a donc sa somme qui double et son
amplitude qui diminue de moitié.
Les textures :
------------
C'est ce qui fait la force et le réalisme de beaucoup d'objets qui doivent
avoir l'air pur et naturel (bois, marbre, roche, granite etc...). Ces
textures algorithmiques se conçoivent à partir d'échantillons de trois
sortes. Les facultés de traitement des textures de LUXART sont
particulièrement poussées afin d'obtenir des résultats exceptionnels. Les
meilleurs exemples se trouvent dans les scripts livrés avec le ray-tracer.
Une texture consiste, en fait, à définir deux matières distinctes et à
spécifier où et comment on souhaite les assembler entre-elles. Les
explications suivantes sont données à partir de structures simples,
dépourvues de fonctions de turbulence ou d'imbrication d'autres structures
de matière.
- Echantillon damier :
Produit à la base un damier tridimensionnel. La taille des cases est
contrôlée par le facteur 'ajuster'.
matiere
{
texture
{
echantillon damier
ajuster x y z // 2 2 0 consiste à des cases de 2 unités²
decaler x y z // facultatif
imperfection déc+ // facultatif
transition déc+ 0 à 1
...
matiere // Première matière
{
diffuse r v b // couleur de la première case
...
}
matiere // Seconde matière
{
diffuse r v b // couleur de la seconde case
...
}
}
}
transition : Contrôle la transition de couleur entre la première et la
seconde matière dans la texture. Plus cette valeur est
proche de 1, et plus la transition sera fluide et dégradée.
- Echantillon concentrique :
Produit alternativement une couche concentrique de chacune des 2 matières
définies. Le facteur 'ajuster', facultatif, permet de spécifier sur quel axe
doivent se produire les couches en lui attribuant le 0.
matiere
{
texture
{
echantillon concentrique
ajuster x y z // 0 1 1 pour avoir des couches horizontales
transition déc+ 0 à 1
rayon déc+ ou ent+ // rayon pour la première couche
rayon déc+ ou ent+ // rayon pour la deuxième couche
...
matiere // Première matière
{
diffuse r v b
...
}
matiere // Seconde matière
{
diffuse r v b
...
}
}
}
Les deux rayons doivent indiquer au programme le rayonnement de chacune des
deux matières sachant que le premier spécifié correspond à la première
matière.
- Echantillon fractal :
Produit une évolution fractale des 2 matières définies.
matiere
{
texture
{
echantillon fractal
ajuster x y z
transition déc+ 0 à 1
cycle déc+ ou ent+ // même utilité que dans 'turbulence'
...
matiere // Première matière
{
diffuse r v b
...
}
matiere // Seconde matière
{
diffuse r v b
...
}
}
}
Image mapping :
-------------
Ceci est un procédé qui permet de plaquer un fichier image LUX 24-bits placé
dans le répertoire TEXTURES sur la surface d'un objet. En fait, il s'agit de
remplacer le trinôme r v b d'un des paramètres 'diffuse', 'ambiante',
'reflexion' ou 'refraction' par une structure de type :
{
plaquer_image $texte$ // nom du fichier image LUX 24-bits
position x y z // position du coin supérieur gauche de l'image
cadre x y z // vecteur qui longe le haut de l'image en la
// traversant du coin supérieur gauche au coin
// supérieur droit.
normale x y z // normale de la surface sur laquelle est
// plaquée l'image.
ajuster ent+ ou déc+ // taille de l'image sachant que 1.0 est
// sa taille réelle.
}
...
Précision : cette image est plaquée autant de fois qu'il le faut pour recouvrir
intégralement la surface si l'ajustement de sa taille reste
inférieure à celle de la surface. Pour qu'il n'embrasse qu'une
seule fois la surface, il faut jouer sur le paramètre 'ajuster'.
exemple (tiré de CUISINE.ART) :
matiere
{
diffuse
{
plaquer_image tableau.lux
position 19.5 29.5 30.8
cadre 1 0 0
normale 0 -1 0
ajuster 8
}
...
}
8.4.7) Les primitives
°°°°°°°°°°°°°°°°°°°°°
Une primitive est un élément mathématique de base qui, combinée avec d'autres,
forment un objet plus complexe et plus réaliste.
LUXART dispose de 7 primitives pour la création des objets :
Sphère
------
sphere
{
centre x y z
rayon ent+ ou déc+ // jamais de rayon nul ou négatif
}
Anneau
------
anneau
{
centre x y z
normale a b c // Perpendiculaire au plan tangant.
// Détermine la direction dans laquelle
// l'anneau est orienté.
rayon_interne ent+ ou déc+ // correspond à la taille du 'trou'
rayon_externe ent+ ou déc+ // trou + bague
}
Disque
------
disque
{
centre x y z
normale a b c // Perpendiculaire au plan tangant.
// Détermine la direction dans laquelle le disque
// est orienté.
rayon ent+ ou déc+ // jamais de rayon nul ou négatif
}
Cône
----
cone
{
base x y z // centre de la base
rayon_base ent+ ou déc+ // jamais de rayon nul ou négatif
tete x y z // centre de la tête
rayon_tete ent+ ou déc+ // jamais de rayon nul ou négatif
}
Cylindre
--------
cylindre
{
base x y z // centre de la première extrémité
haut x y z // centre de la seconde extrémité
rayon ent+ ou déc+ // jamais de rayon nul ou négatif
}
Polygone
--------
polygone
{
sommets ent+ // toujours >= 3
sommet x y z // coordonnées du premier sommet
sommet x y z // coordonnées du second sommet...
...
}
Précision : le nombre de sommets du polygone est spécifié par 'sommets'.
Ensuite suit la liste des coordonnées de chacun de ces sommets. Le compte
doit être exact pour ne pas avoir d'erreur. Attention : LES SOMMETS D'UN
POLYGONE SONT DISPOSES DANS UN MEME PLAN.
Triangle lissé
--------------
Il s'agit d'un triangle dans lequel on indique, en plus des coordonnées de
chacun de ses sommets, la normale de chacun d'eux. Cette primitive est très
utile pour créer des objets complexes qui doivent avoir une apparence lisse
et quasiment parfaite.
triangle_lisse
{
sommet x y z // premier sommet
normale a b c // normale du premier sommet
sommet x y z // second sommet
normale a b c // normale du second sommet
sommet x y z // troisième sommet
normale a b c // normale du troisième sommet
}
8.4.8) Les blocs
°°°°°°°°°°°°°°°°
Un bloc est une fonction qui permet d'englober une primitive, une ou
plusieurs structure, ou encore un ou plusieurs objets entiers afin de les
manipuler. Ces manipulations portent sur
- le déplacement,
- l'ajustement de taille,
- la rotation sur chaque axe.
De plus, un bloc peut en imbriquer un autre. Mais, dans ce cas, le ray-tracer
traite les blocs dans leur ordre d'enfoncement à l'intérieur de la structure
(le dernier écrit est le premier traité).
bloc { ajuster ent+ ou déc+
deplacer x y z
pivoter x y z
}
. // développement ici de ce qui doit être
. // contrôler par le bloc
.
fin_bloc // signale que tout ce qui se trouve entre
// la fonction 'bloc' et celle-ci fait
partie
// du même bloc.
Précision : les paramètres situés entre les accolades de 'bloc' sont exécutés
suivant leur ordre d'écriture.
Exemple :
bloc { pivoter 0 45 0 ajuster .7 }
n'a pas le même effet que
bloc { ajuster.7 pivoter 0 45 0 }
8.4.9) Découper des primitives
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
LUXART est aussi capable de sectionner les primitives précédemment décrites
par quatre formes de découpage :
- en sphère,
- en plan,
- en cône,
- en cylindre.
Ces découpages accroissent ainsi les possibilités de création de formes et
d'objets.
La structure de découpage s'ajoute à l'intérieur de celle de la primitive.
Bien sûr, plusieurs découpes peuvent être faites sur une même primitive.
Les fichiers scripts DECOUPE1.ART à DECOUPE5.ART sont de bons exemples.
Découper en plan
----------------
decouper
{
centre x y z // Point par lequel passe le plan qui découpe.
normale a b c // Orientation de ce plan. La partie de la primitive qui
// fait face à la normale sera gardée intacte, tandis que
// l'autre partie sera découpée.
}
exemple :
sphere
{
centre 1.5 -1 .5
rayon .5
decouper
{
centre 1.5 -1 .5
normale 0 0 -1 // On découpe l'hémisphère nord de la sphère. Pour
// découper l'hémisphère sud, il faut indiquer 0 0
1.
}
}
Découper en sphère
------------------
decouper
{
centre x y z // centre de la partie sphérique qui va être retirée
rayon ent+ ou déc+
interieur ou exterieur // indique si ce qui doit rester intact se trouve à
// l'intérieur ou à l'extérieur de la sphère.
}
exemple :
cylindre
{
haut -1 -1 .5
base 1 -1 .5
rayon .3
decouper
{
centre 0 -1 .8
rayon .5
exterieur
}
}
Découper en cylindre
--------------------
decouper
{
haut x y z // centre de la première extrémité du cylindre en découpe
base x y z // centre de la seconde extrémité du cylindre en découpe
rayon ent+ ou déc+
interieur ou exterieur // indique si ce qui doit rester intact se trouve à
// l'intérieur ou à l'extérieur du cylindre.
}
exemple :
sphere
{
centre -1 -1 1
rayon 1
decouper
{
haut -2 -2 1.5
base 1 3 1.5
rayon .5
interieur
}
}
Découper en cône
----------------
decouper
{
tete x y z // centre de la première extrémité du cône en découpe
rayon_tete ent+ ou déc+
base x y z // centre de la seconde extrémité du cône en découpe
rayon_base ent+ ou déc+
interieur ou exterieur // indique si ce qui doit rester intact se trouve à
// l'intérieur ou à l'extérieur du cône.
}
exemple :
cylindre
{
tete -2 -2 1.5
base 1 3 1.5
rayon .5
decouper
{
tete 2 1.5 1
rayon_tete .2
base -2 1.5 1
rayon_base .8
interieur
}
}
9) LA MISE AU POINT D'UNE SCENE
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
- Chapitre traité uniquement dans le Manuel de Référence -
10) LE MODELEUR 3D FILAIRE D'OBJETS
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
- Chapitre traité uniquement dans le Manuel de Référence -
11) QUELQUES CONSEILS DE L'AUTEUR
°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
- Chapitre traité uniquement dans le Manuel de Référence -
Remerciements à
°-°-°-°-°-°-°-°
- Christopher WATKINS
- Mark VANDEWETTERING
- Stephen COY
pour leurs précieux algorithmes sans lesquels LUXART ne serait qu'un ray-
tracer de plus comparable à SM·TRACER.
- Denis OLIVIER (ChromaGraphics)
qui a testé les premières ß versions et qui m'a suggéré des améliorations qui
ont finalement apporté une meilleure finition au programme.
- Nicolas KELEMEN (DP Tool Club)
qui a pris le risque d'en parler dans sa lettre 'Les nouvelles d'Ascq' un mois
avant qu'il ne soit totalement achevé...