Texel
OpenGL | Index | Contact

Les fichiers an8 d'Anim8or
Mode objet
Avec uniquement des Meshes

English version here


Note: Cet article a été écrit il y a plusieurs année, alors que les specs du format de fichier .an8 d'Anim8or n'étaient pas disponibles. Depuis l'auteur d'Anim8or a publié des specs sur le site officiel d'Anim8or. Elle sont néanmoins incomplètes à l'heure où j'écris ces lignes. Les quelques informations ci-dessous vous fournirons peut-être quelques bases pour comprendre le fonctionnement du format de fichier Anim8or. Je vous invite en outre à tester LibAn8, ma librairie de chargement de fichiers Anim8or dont le code source est disponible.

Téléchager LibAN8

Anim8or est un modeleur 3D gratuit et facile à utiliser. Je vous conseil de l'essayer avant de lire ces specs.(Site Officiel d'Anim8or)
Ces specs ne sont pas complètes. Mais elles vous permettrons de gagner du temps. Pour plus d'infos, faites comme moi...des tests.
Il est beaucoup plus facile d'importer ou d'exporter un fichier Anim8or contenant seulement des meshes. Utilisez dans Anim8or "Build -> convert to mesh"

Voici le contenu d'un fichier an8 décrivant un cube texturé:

Légende:
Toujours présent.
Présent seulement si une texture est utilisé dans l'objet.
Présent seulement si un material est utilisé dans l'objet.
Toujours présent si un material est utilisé.
Présent seulement si les paramètre par defaut ont été modifié
Présent sous certaines conditions

header {
  version { "0.8" }
  build { "2002.08.01" }
}
environment {
  grid { 1 10 50 50 }
  framerate { 24 }
}
texture { "sand"
  file { 
    "D:\\MyProjects\\divers\\anim8or\\an8demo_02-09-06\\Debug\\Data\\sand.bmp" }
}
object { "object01"
  material { "material01"
    surface {
      /* RGB chunk no longer used */
      rgb { 245 208 200 }
      lockambiantdiffuse { }
      ambiant {
        rgb { 245 208 200 }
        factor { 0.30000 }
      }
      diffuse {
        rgb { 245 208 200 }
        factor { 0.70000 }
        texturename { "sand" }
        textureparams {
          blendmode { decal }
          alphamode { none }
        }
      }
      specular {
        rgb { 255 255 255 }
        factor { 0.20000 }
      }
      emissive {
        rgb { 0 0 0 }
        factor { 1 }
      }
      alpha { 127 }
      brilliance { 2 }
      phongsize { 32 }
      map {
        kind { "transparency" }
        texturename { "land" }
        textureparams {
          blendmode { decal }
          alphamode { none }
        }
      }
      map {
        kind { "bumpmap" }
        texturename { "land" }
        textureparams {
          blendmode { decal }
          alphamode { none }
          percent { 40 }
        }
      }
    }
  }
  mesh {
    name { "mesh01" }
    base {
      origin { (0.45147 -0.56433 0) }
      orientation { (0.16159 -0.01033 -0.00169 0.98680) }
    }
    material { "material01" }
    smoothangle { 45 }
    /* 8 points, 6 faces, 8 uvCoords */
    materiallist {
      materialname { "material01" }
    }
    points {
      (-22.799 -20.993 -22.799) (-22.799 -20.993 22.799) 
      (-22.799 20.993 -22.799) (-22.799 20.993 22.799) (22.799 -20.993 -22.799) 
      (22.799 -20.993 22.799) (22.799 20.993 -22.799) (22.799 20.993 22.799)
    }
    normals {
      (0 0 -1) (0 0 1) (-1 0 0) (1 0 0) (0 1 0) (0 -1 0) (0 0 -1) (0 -1 0) 
      (-1 0 0) (0 0 1) (0 -1 0) (-1 0 0) (0 0 -1) (0 1 0) (-1 0 0) (0 0 1) 
      (0 1 0) (-1 0 0) (0 0 -1) (0 -1 0) (1 0 0) (0 0 1) (0 -1 0) (1 0 0) 
      (0 0 -1) (0 1 0) (1 0 0) (0 0 1) (0 1 0) (1 0 0)
    }
    texcoords {
      (0 0) (0 0) (0 1) (0 1) (1 0) (1 0) (1 1) (1 1)
    }
    faces {
      4 4 0 -1 ( (0 0) (4 4) (6 6) (2 2) )
      4 4 0 -1 ( (1 1) (3 3) (7 7) (5 5) )
      4 4 0 -1 ( (0 0) (2 2) (3 3) (1 1) )
      4 4 0 -1 ( (4 4) (5 5) (7 7) (6 6) )
      4 4 0 -1 ( (2 2) (6 6) (7 7) (3 3) )
      4 4 0 -1 ( (0 0) (1 1) (5 5) (4 4) )
    }
  }
}


























































































Bloc header

version: Numéro de version d'anim8or utiliser pour générer le fichier.
build: Date de création du fichier.


Environment

Bloc environment

grid: ?
framerate: Nombre d'images par seconde.


Texture

Bloc texture

Le nom de la texture suit le nom du bloc.
Le bloc "file" contient le chemin complet de la texture.
Il peut ressembler à ça:
file {
"D:\\MyProjects\\divers\\anim8or\\an8demo_02-09-06\\Debug\\Data\\sand.bmp" }

or
file { "D:\\MyProjects\\divers\\anim8or\\an8demo_02-09-06\\Debug\\Data\\sand.bmp" }


Object

Bloc object

Le nom de l'objet suit le nom du bloc.
Un seul objet est exporté en mode "object", plusieurs en mode scène.
Ce bloc contient les blocs mesh et material.

Dans un objet, plusieurs meshes peuvent être inclus dans un ou plusieurs blocs group.


group {
    name { "group01" }
    base {
      origin { (-34.502 8.2121 0) }
      orientation { (-0.20344 0.79545 -0.42652 0.37941) }
    }
    mesh {
		// description du mesh
    }
    mesh {
		// description du mesh
    }
	etc...
}



















Le bloc base:
bloc origin: coordonnée du repère local du groupe.
bloc orientation: Quaternion pour l'orientation du groupe (x, y, z, w) (présent seulement en cas de rotation).
Les coordonnées des meshes sont alors exprimées dans le repère du groupe.


material

Bloc material

Le nom du "material" suit le nom du bloc.
Ce bloc n'apparaît qu'au cas où un "material" a été créer dans Anim8or.
Le bloc surface est toujours présent et semble être le seul sous bloc direct du bloc "material".

Bloc lockambiantdiffuse

Présent si le bouton "=" est sélectionné dans Anim8or (boîte de dialogue des matériaux).


Bloc ambiant, diffuse et specular

Toujours présent si un "material" est créer. Et toujours dans le même ordre (ambiant,diffuse,speculare).
Sous bloc "rgb" (couleur rouge,bleu, vert) et "factor" (facteur) toujours présent.
Sous bloc texturename,textureparams présent seulement si le "material" a une texture.

Sous bloc texturename

Suivit du nom de la texture.

Sous bloc textureparams

Contient le mode de blending et alph dans ses sous bloc correspondants.

Bloc phongsize

Toujours présent si "material" présent.
Correspond au paramètre "Rough" d'Anim8or.
Pas de sous bloc.


Bloc emissive

Présent si paramètres par défaut modifié dans Anim8or.
Sous bloc "rgb" (couleur rouge,bleu, vert) et "factor" (facteur) toujours présent.
Sous bloc texturename,textureparams présent seulement si le "material" a une texture.

Bloc alpha et brillance

Présent si paramètres par défaut modifié dans Anim8or.
Correspond au paramètres "Trans" et "brillance" d'Anim8or.
Pas de sous bloc.


Bloc map

Present seulement si une texture est affecté à la transparence ou au bumpmapping. Present après phongsize. Le sous bloc "kind" indique si le bloc décrit une transparence ou un bumpmapping (l'un peu être présent sans l'autre).

Mesh

Bloc Mesh

Contient un mesh.
Plusieurs meshes possible par objet.
Note: Un bloc "group" peut contenir plusieur meshes. Il contient alors un bloc "name", "base" puis les blocs "mesh".

Bloc name

Toujours présent
Nom du mesh.


Bloc base

Présent Lorsque le mesh est déplacé dans l'éditeur d'objets de Anim8or.
Sous bloc origin: coordonnée du repère local du mesh.
Sous bloc orientation Quaternion pour l'orientation de l'objet (x, y, z, w) (présent seulement en cas de rotation).
Les coordonnées du mesh sont alors exprimées dans le repère de cette base.


Bloc material

Material par defaut de la mesh ?


Bloc smoothangle

Lorsqu'un vertex appartient à plusieurs polygones, il possède des normales différentes pour chaques polygones (suivant la normal des face des polygone).
Le smoothangle est l'angle à partir du quel les différentes normales d'un même vertex son additionnées pour tromper la lumière et lisser les objets .


Commentaire /* n points, m faces, k uvCoords */

Nombre n de points.
Nombre m de faces.
Nombre k de coordonnées de texture.


Bloc materiallist

Liste par nom des materiaux utilisés dans par la mesh dans le sous bloc "materialname".
Un bloc "materialname" par nom de "material".
Toujours au moins un nom (" -- default --").
L'ordre d'apparition dans la liste est important (cf bloc face)


Bloc points

Liste des points et leurs coordonnées (x,y,z).
Le nombre de points par ligne est variable.
Note: Un point peur être utilisé par plusieurs faces (cf bloc face).


Bloc texcoords

Liste des coordonnées de texture utilisé dans le programme.
Note: une coordonnée de texture peut être utilisé par plusieurs vertices (cf bloc face).


Bloc normals

Présent seulement si on a demandé à Animor d'exporter les normals.
Liste des coordonnées des normals.


Bloc faces

Une ligne par face.
Quatre nombres précèdent la liste des indices de la face.

Ces quatre nombres correspondent:
_ 1er: Nombre de vertices pour cette face (triangle, quad,...).
_ 2ième: Masque.
Nombre binaire converti en décimal. Ce nombre a été calculé de la façon suivante:
Soit un nombre binaire à trois chiffres.
Le premier bit (à droite) est mis à 1 par Anim8or si les faces arrières doivent être affichées (backfaces) ou 0 sinon (valeur par défaut).
Le deuxième bit est mis à 1 si les vertices ont chacun leur normal ou 0 sinon (valeur par défaut).
Le troisième bit est mis à 1 si on utilise les coordonnées de texture ou 0 sinon (valeur par défaut).
Ce nombre binaire est ensuite converti en décimal. Anim8or met dans la majorité des cas ce nombre à 4 et il est assez rare que ce masque soit différent pour chaques faces.
Quelques exemples:
   0: Pas d'indices de textures
   1: Montre les faces arrières des faces.
   2: Les faces utilisent les normales par vertex exporté par Anim8or (avec "debug").
   4: La face a des coordonnées de texture.
   6: Les faces utilisent les normales par vertex exporté par Anim8or (avec "debug") + les coordonnées de textures.
_ 3ième: Numéro du material utilisé pour cette face. Ce numéro correspond à l'ordre dans lequel les matériaux apparaissent dans le bloc "materiallist" de la mesh courante.
_ 4ième: Si plus grand ou égale à 0, index de la normale de la face elle-même (et pas de ses vertices)

Trois types d'indices peuvent être stockés: les indices de points et les indices des coordonnées de texture et les indices de normales.
A l'intérieur de deux parenthèses, les indices de chaques vertices de face sont eux même listé à l'intérieur de deux parenthèses.
Il peut y avoir 1, 2 ou 3 indices par vertex:
   _ L'indice d'un point de la face (toujours présent et en premier).
   _ L'indice d'une coordonnée de texture pour un point de la face (présent si le masque l'indique).
   _ L'indice d'une normale d'un point de la face (présent si le masque l'indique).

Les indices sont listés avec une orientation dans le sens des aiguilles d'une montre.
Anim8or recalcule automatiquement les normales si elles ne sont pas définies dans le fichier.
Si les normales sont stockées dans le fichier, elles le sont de la même façon que pour les points ou les coordonnées de texture.

Attention:
Une face n'est pas forcement décrit sur une seule ligne( lorsque le nombre de vertex est important), mais les indices d'un vertex (les 2 ou 3 indices de vertex, d'uv, et de normale entre "()") sont toujours sur une même ligne.

Exemple:
4 4 0 -1 ( (1 1) (3 3) (7 7) (5 5) )
4 4 0 -1 ( (1 1) (3 3) (7 7) 
(5 5) )
4 4 0 -1 ( (1 1) (3 3) (7 7) (5 5) 
)
4 4 0 -1 ( (1 1) 
(3 3) (7 7) 
(5 5) )














Version originale: Novembre 2002
Dernière mise à jour: Juillet 2003
Par Grégory Smialek
texel.free.fr