L'exportation vers POV-Ray est l'une des raisons historiques du développement d'Arabeske. Une forme d'exportation implicite, à base de material_maps, existe depuis longtemps, mais la version de développement 1.1.7 a introduit une exportation directe sous forme de code source POV-Ray.
Le module d'exportation exporte des objets POV. Il est donc nécessaire d'avoir défini des polygones ou des segments "épais" dans Arabeske, c'est pourquoi l'export vers POV-Ray n'est disponible que dans les modes "final" et "entrelacé".
Pour exporter, sélectionnez , puis choisissez le nom de fichier. L'extension par défaut, si cette option est activée, est ".pov", tandis que le sélecteur de fichier affiche les fichiers .pov et .inc. Cliquez Export.
On vous demande alors de choisir entre deux modes d'exportation:
Voici un exemple de rendu obtenu à partir de l'export basique:

Regardons de plus près l'exportation en mode "expert". Les informations données dans le fichier exporté sont:
AraColors. Ce tableau de 256 couleurs reprend celles données
par l'utilisateur à chacune des textures du motif.Les valeurs spéciales
sont 0 (fond), 1 (lignes), et 2 (creux dans les lignes). On peut les utiliser
pour faire un texturage simplifié, ou comme base pour quelque chose
de plus abouti...
AraUserSegmentThickness. Ce nombre est la largeur des segments.
AraUserSegmentSubThickness. Ce nombre est la largeur du creux
dans les segments entrelacés.
AraBBoxLL. Ce vecteur est l'angle "en bas à gauche"
de la partie du motif normalement visible. A noter que la coordonnée
Y doit être adaptée à l'épaisseur de vos objets
si ce vecteur est utilisé pour construire une bounding_box.
AraBBoxUR. Ce vecteur est l'angle "en haut à droite"
de la partie du motif normalement visible. Même remarque pour la bounding_box.
Enfin, vous devez fournir entre une et quatre macros, selon le mode depuis lequel vous exportez et les lignes que vous utilisez:
AraUserPolygon(vertices, index). Cette macro trace (ou gère
etc...) les polygones. Elle est obligatoire. Le paramètre index est
le numéro de la texture du polygone. Le tableau "vertices"
est la liste des sommets du polygone, suivie de la liste des sommets des
polygones qui doivent être découpés dans le premier,
etc. Chaque polygone est correctement fermé. Il s'agit en fait exactement
des informations à donner à l'objet "prism", dans
le même ordre, et le mieux est de se référer à
cette partie de la documentation de POV-Ray pour plus de détails.
AraUserBezierPolygon(vertices, index). Cette macro est l'équivalent
de la précédente pour les surfaces bordées par au moins
une courbe de Bézier. Les sommets sont répartis par paquets
de quatre points, chaque paquet décrivant une courbe de Bézier.
Il ne doit pas être supposé que le premier point d'une courbe est toujours le dernier de la courbe précédente. Il est donc fortement recommandé de relier chaque segment de courbe au suivant par un segment droit. Le mode "basique" gère ce problème (non décrit dans la documentation de POV-Ray), et un exemple est fourni plus loin.
AraUserSegment(Start, End). Cette macro n'est obligatoire
que dans le mode "Final", et gère les segments épais.
Les paramètres sont les extrémités du segment. Le numéro
de la couleur est toujours 1.
AraUserBezierCurve(Start, Ctrl1, Ctrl2, End). Cette macro
n'est nécessaire qu'en mode "Final", quand des courbes
de Bézier ont été utilisées. Les paramètres
sont tout simplement les extrémités du segment, et les deux
points de contrôle associés.
A noter que POV-Ray ne gère pas directement les courbes de Bézier. Une macro spécifique est utilisée par l'exporteur basique, et elle est reprise dans l'exemple ci-dessous.
Point important: ce mode d'exportation ne fournit bien évidemment aucune forme de bounding ou de clipping, ce qui fait que si rien n'est mis en place, de nombreux objets indésirables ou trop grands seront tracés. Le clipping doit être mis en place dans votre propre code.
A noter également: les informations de bounding_box vous indiquent la
taille du motif exporté en coordonnées POV-Ray. Si vous désirez
un motif 10x10 dans votre scène, il suffit d'utiliser l'opérateur scale
dans votre code.
Une version améliorée de cet exemple est diponible ici.
Généralités poviennes:
#include "metals.inc"
#include "colors.inc"
camera {
up y
right -x
location <10, 10, -20>
look_at <0, 0, 0>
angle 5
}
light_source{
<-1, -2, -5>
rgb 1.5
}
Première macro, qui dessine un polygone en utilisant l'objet "prism", avec la couleur exportée par Arabeske.
#macro AraUserPolygon(A, index)
prism{
-1, 0,
dimension_size(A, 1)
#local i=0;
#while (i<dimension_size(A, 1))
A[i]
#local i=i+1;
#end
pigment {rgb AraColors[index]}
clipped_by{box{<-1, -.01, -1>, <1, .1, 1>}}
rotate -90*x
}
#end
Seconde macro, indispensable en mode "final". Elle trace les segments sous forme de cylindres dorés arrondis de rayon AraUserSegmentThickness/2.
#macro AraUserSegment(Origin, End)
union{
cylinder{Origin, End, AraUserSegmentThickness/2}
sphere{Origin, AraUserSegmentThickness/2}
sphere{End, AraUserSegmentThickness/2}
clipped_by{box{<-1, -.01, -1>, <1, .1, 1>}}
rotate -90*x
texture{T_Gold_1E}
}
#end
Enfin, inclusion du motif exporté depuis Arabeske:
#include "expert.pov"
Et voilà! Avec un fond nuageux, le résultat donne ceci: