Raytracer - Documentation

Features

Présentation

Pour créer des éléments dans un scène, que ce soit l'oeil, les objets, les lumières, etc. la syntaxe est la suivante :

element
{
  param1	1 2 3
  param2	foobar
  param3	-4.2
}
    

Les commentaires se font à l'aide du caractère '#'. Exemple :

#####################
# Global parameters #
#####################

global
{
  width		1024
  height	768
  highdef	0
#  max_reflect	10
}
    

Note :
L'indentation est facultative (1 espace suffit en séparateur).

Repert

                ^ z
                |
                |    _
                |    /| x
                |   /
                |  /
                | /
                |/
   <------------+
  y
    

Oeil

Mot clé : eye

Propriétés Type de la valeur attendue. Commentaire
coords Coordonnées Détermine les coordonnées de la caméra.
rot Rotation Rotation de la caméra (en degré).

Objets

Mot clé : item

Propriétés Type de la valeur attendue. Commentaires
type Objet type La liste des objets est disponible en annexe.
coords Coordonnées Détermine les coordonnées de l'objet.
rot Rotation Rotation de l'objet par rapport a son centre.
radius Double Représente généralement le rayon.
group_id Entier Voir le chapitre sur les groupes.
color Couleur Couleur de l'objet (969696 par défaut).
color2 Couleur Seconde couleur de l'objet. Utilisée pour perlin ou le quadrillage. (Noir par défaut).
tex Texture Fichier de texture. Prend le dessus sur la couleur (voir tex_rep).
tex_rep Booléen Si tex_rep est définie à 0, la couleur sera prise en compte en dehors de la région texturée. Par défaut définie à sur 'True' (1).
tex_coef Entier Zoom pour les textures.
tex_cut Booléen Active ou non le découpage texturé.
tex_color_cut Couleur Couleur pour le découpage texturé.
opacity Pourcentage Une opacitée faible signifie un objet transparent.
density Double Influence la transparence. Le rayon qui traverse l'objet sera plus ou moins perturbé selon la valeur de cette densité. Par defaut, elle est définie à 1.
reflect Pourcentage Degré de réflexion de l'objet.
brightness Pourcentage Nécessite une lumière aux alentours. Elle détermine la brillance de l'objet ; le taux de couleur qu'elle "prendra" à la lumière.
limits Limites Détermine ce qui est affiché de l'objet.
checkerboard Entier Nul par défaut. Si précisé, défini un damier de la largeur celle indiquée.
pnoise Entier Active le bruit de perlin (pnoise pour perlin noise).
pnoise = 1 : bruit de perlin Normal
pnoise = 2 : bruit de perlin type Bois
pnoise = 3 : bruit de perlin type Marbre
pnoise_octave Entier Nombre de bruit de perlin cumulés.
pnoise_freq Double Fréquence pour le bruit de perlin. Une valeur faible entraine un bruit de perlin plus fin.
pnoise_pers Double Persistence de bruit de perlin. Influence l'octave.
bump Double Déviation de la normale en fonction du bruit de perlin. Nulle par défaut.
bump_only Entier N'applique que la déviation de la normale, sans modifier la couleur avec le filtre du bruit de perlin.

Lumières

Mot clé : light

Propriétés Type de la valeur attendue. Commentaire
coords Coordonnées Détermine les coordonnées de la lumière.
color Couleur Couleur de la lumière (969696 par défaut).
intensity Pourcentage Intensité de la lumière.
soft_quality Double Concerne les ombres floues. Cette valeur correspond à l'écart entre chaque divisions.
soft_shadow Entier Nombre de divisions pour les ombres floues. Ce nombre de divisions est mis à la puissance 3. Il est donc conseillé de mettre une valeur relativement faible.

Paramètres généraux

Mot clé : global

Propriétés Type de la valeur attendue. Commentaire
width Entier Largeur de l'image de sortie (en pixels). À 800 par défaut.
height Entier Hauteur de l'image de sortie (en pixels). À 600 par défaut.
highdef Entier Haute définition. Précisez une valeur multiple de 2. Au dessus de 6, c'est généralement inutile. La HD permet un rendu effet "anti-aliasé". (Elle est 0 par défaut).
max_reflect Entier Nombre maximum de degré de reflexion. (Par défaut : 3)
distscreen Entier Distance à l'écran (Par défaut : 1000).
l_color Couleur Correspond à la couleur de la lumière d'ambiance. (Noire par défaut)
l_intensity Pourcentage Intensité de la lumière d'ambiance.
style Entier Effet après calcul du pixel.
style = 1 : Niveau de gris style = 2 : Crayonné style = 3 : Noir et blanc
style_param Entier Paramètre optionnel. Disponible pour le style 2 uniquement (exemple : 80). Module extensible facilement.

Groupes

Intro

Le group_id d'un objet prend en paramètre un Entier n. Tous les objets qui ont un group_id n précisé appartiendront à ce groupe n. Il n'apparaitront pas jusqu'à ce qu'un groupe ayant pour id "n" ne soit déclaré. Une fois le groupe d'objet défini, on peut le copier, le déplacer, le faire tourner, changer sa taille, ...

Utiliser un groupe d'objet

Mot clé : group

Propriétés Type de la valeur attendue. Commentaire
id Entier Identifiant groupe.
coords Coordonnées Détermine les coordonnées du groupe d'objets.
rot Rotation Idem, mais pour les rotations. En degré toujours.
size_mul Double Coefficient pour la taille. La taille du groupe est multipliée par cette valeur.

Exemple de scène complète avec groupes

#
# Parametres generaux
#
global
{
  width		640
  height	480
  distscreen	1000
  highdef	4
}

#
# Notre oeil
#
eye
{
  coords	-230 0 0
}

#
# Definition d'un groupe d'objet.
# Ici, c'est une pokeball...
#

# Top
item
{
  type		sphere
  color		FF0000
  radius	25
  coords	0 0 0
  limits	0 0 0 0 2 25
  brightness	80
  group_id	1
}

# Separator
item
{
  type		sphere
  color		000000
  radius	25
  limits	0 0 0 0 -2 2
  group_id	1
}

# Button
item
{
  type		sphere
  color		000000
  radius	7
  coords	-20 0 0
  group_id	1
}

item
{
  type		sphere
  color		FFFFFF
  radius	4
  coords	-24 0 0
  group_id	1
}

# Bottom
item
{
  type		sphere
  color		FFFFFF
  radius	25
  coords	0 0 0
  limits	0 0 0 0 -25 -2
  group_id	1
}

#
# Insertion de nos pokeballs dans la scene
#

group
{
  id		1
  rot		0 -30 0
}

group
{
  id		1
  size_mul	0.4
  coords	-280 40 -30
  rot		-10 -20 0
}

group
{
  id		1
  size_mul	0.5
  coords	150 60 30
  rot		20 30 -10
}

group
{
  id		1
  size_mul	0.5
  coords	-150 -60 -30
  rot		20 30 10
}
    

Résultat :

Pokeballs

Bruit de perlin / Bump mapping

Pokeballs

1 2 3
color		404040
color2		b57118
brightness	20
pnoise		1
pnoise_octave	10
pnoise_freq	4
pnoise_pers	1
bump		100
	  
pnoise		3
pnoise_octave	10
pnoise_freq	2
pnoise_pers	.9
	  
type		sphere
color		FF0000
color2		bc7640
brightness	20
pnoise		3
	  
4 5 6
color		303090
color2		309090
brightness	20
pnoise		3
pnoise_octave	10
pnoise_freq	5
pnoise_pers	5
bump		100
	  
color		3b2b15
color2		776144
pnoise		2
pnoise_octave	1
pnoise_freq	0.3
pnoise_pers	1
bump		150
	  
color		303030
color2		FFAAAA
pnoise		3
pnoise_freq	.9
pnoise_pers	0.9
pnoise_octave	5
	  

Annexe I : Les differents types

Type Valeur attendue Exemple Commentaires
Booléen 0 ou 1 1 La valeur est recupérée comme un entier.
Coordonnées 3 valeurs flottantes (double) -3.4 42 7.1 R.A.S.
Couleur Entier en hexadecimal ff420a Ce n'est pas sensible a la casse. FF420A marche aussi.
Double valeur flottante -3.4 R.A.S.
Entier valeur entiere 4042 R.A.S.
Limites 6 valeurs flottantes (double) 0 0 -3.3 7 42 47.01 Les deux premières valeurs correspondent aux limites visibles sur l'axe x, les deux suivantes sur l'axe y, et les 2 dernières sur l'axe z. Pour qu'une limite sur l'un des axes soit ignorée, il suffit de préciser le meme nombre pour ses 2 valeurs.
Objet type L'un des valeur suivante : sphere, cylinder, cone, plane. sphere Bien que ce soit une chaine de caractères, les guillemets sont proscrites.
Pourcentage Entier compris entre 0 et 100. 42 Ne pas mettre de caractere '%'.
Rotations Meme chose que les coordonnées. 42 32.3 -5 Les valeurs sont en degré.
Texture Adresse du fichier bitmap. tex/texture.bmp R.A.S.

Annexe II : Objets disponibles

Cone Cylindre Plan Sphere
Cone Cylindre Plan sphere

Annexe III : Hall Of Fame