ContribCliquez ici pour proposer des corrections ou des compléments pour cette page.
Obj 1

Voler au dessus d'un désert ou à 35 000 ft, c'est sympa, mais ça va cinq minutes ;-)) Pourquoi ne pas s'amuser à slalomer autour des immeubles, faire du vol à très basse altitude entre les obstacles?

Plus de détails sur les spécifications dans l'antre de Ben.

Vaste sujet que sont les objets... même si plusieurs logiciels de 3D bénéficient de scripts d'export gratuits pour générer des objets pour X-Plane (voir la page du Wiki consacrée aux Techniques 3D), il y a fort à parier qu'un jour ou l'autre vous serez amenés à jeter un œil dans le code de ces objets. Même si ce code tend à rester simple, les quelques paragraphes qui vont suivre vous seront très utiles pour en comprendre un peu le fonctionnement.

Dans X-Plane, un Objet est fichier texte !

En effet, en théorie, vous n'avez besoin que d'un logiciel de traitement de texte pour créer un objet (Notepad et TextEdit font très bien l'affaire la plupart du temps). L'extension de ces fichiers est .obj. Si l'organisation des fichiers objet n'a pas vraiment bougé depuis la version 5, il n'en est pas de même avec la version 8. Nous étudierons donc le format des objets en version 7 et 8.


Objets X-Plane version 5,6,7

Voyons à quoi cela ressemble, ouvrons le fichier hangar.obj. Voilà un extrait du code que l'on y trouve :

A
700
OBJ

hangar		//

ATTR_NO_DEPTH //

quad_hard		// sol
0 0 20    0.5 0.25
0 0 0    0.5 0.0
25 0 0    0.5 0.0
25 0 20    0.5 0.25

end		//

Pour cet exemple, il s'agit d'un objet v7 de X-Plane. Les versions antérieures de X-Plane ne comprendront pas cet objet et ne l'afficheront pas. Par contre, la v8 le comprend bien et l'affiche sans problème. détaillons son code:

  • A - Il s'agit du type de format de fichier, A pour Apple et I pour Intel. Comme vous le savez X-plane est multiplateformes, vous pouvez donc fabriquer vos objets sur n'importe quelle machine, avec n'importe quel système d'exploitation. Ce qui compte, ce sont les fins de ligne. Il s'agit d'un problème récurrent en informatique. Il existe deux types de fins de lignes : CR (Carriage Return) et LF (Line Feed). Les Macs utilisent CR, alors que les PC utilisent CR et LF (en général). Mais ce n'est pas grave, le A ou I sont là pour dire si vous avez enregistré votre fichier au "format mac ou pc". S'il y en qui font des objets sous Linux, il faudra utiliser A, comme avec les Mac.
  • 700 - Il s'agit de la version de votre objet, c'est à dire de la version de X-plane qui comprend votre objet. La v7.01 comprends le fichier, mais pas la v6.99. Nous verrons plus tard comment déterminer cette version.
  • OBJ - Permet à X-plane de savoir qu'il s'agit d'un objet. Pourquoi???
  • hangar - Nom de la texture associée, c'est à dire de l'image (fichier BMP ou PNG, comme l'extension n'est pas précisée on pourra changer sans avoir à retoucher le fichier) qui sera plaquée sur l'objet pour l'habiller.

On aurait pu trouver ici bat:hangar. Cela aurait signifié que la texture hangar se trouvait dans le sous-répertoire bat de custom object textures.

  • ATTR_NO_DEPTH - Option de rendu qu'offre X-plane pour résoudre certains problèmes d'affichage.Les autres attributs (ATTR) utilisables dans les objets sont indiqués dans le fichier KSBD_exemple.obj ou dans la liste qui suit dans cette page.
  • quad-hard - Type de "face" fabriquée, ici il s'agit d'un rectangle "dur", pour pouvoir poser un hélico sur un bâtiment par exemple.Il existe d'autres valeurs comme quad, quad_strip, tri, tri_fan,...
  • 0 0 20 0.5 0.25 - Les trois premiers nombres sont les coordonnées d'un vertex (point) dans l'environnement 3D. Les deux derniers sont les coordonnées de ce même point mais dans la texture associée (une image) donc en 2D, mais on y reviendra plus précisément. Un rectangle étant constitué de quatre coins, on a bien quatre lignes de coordonnées.
  • end - Marque la fin de l'objet, tout ce qui est écrit après n'est pas interprété par X-plane. Vous pouvez donc par exemple y mettre votre copyright ou autres sans aucun problème.
  • // - Vous avez remarqué plusieurs fois ce sigle, il s'agit en fait de zone de commentaire. Tout ce qui est écrit après n'est pas interprété, vous pouvez par exemple nommer les différentes parties de vos objets pour vous y retrouver par la suite.

Objets version 8 et supérieure

Le nouveau format d'objet change de forme, celle-ci devient moins intuitive mais apporte plein d'améliorations et de possibilités (notamment la possibilité d'animer des parties de l'objet). Pour avoir un aperçu du fonctionnement de ce nouveau codage consultez cette page. Ici, nous nous "contenterons" de comprendre les lignes de code de ce nouveau format afin d'avoir une maîtrise poussé sur l'objet. Lorsque l'on ouvre un objet au format 8, voici ce que l'on trouve:


A // type d'ordinateur sur lequel a été créé ce code (A= apple / I= Intel PC)
800 // version d'X-Plane pour lequel l'objet a été créé (800 pour X-Plane version 8)
OBJ // type d'élément (ici un objet: OBJ)

TEXTURE terminal.png // texture utilisée par l'objet
TEXTURE_LIT terminal_lit.png // texture de nuit utilisée par l'objet
POINT_COUNTS 188 0 0 282
VT -103.900002 5.000000 47.900002 -1.000000 0.000000 0.000000 1.000000 1.000000
VT -103.900002 2.000000 45.900002 -1.000000 0.000000 0.000000 0.000000 0.500000
VT -103.900002 2.000000 47.900002 -1.000000 0.000000 0.000000 1.000000 0.500000
VT -103.900002 5.000000 45.900002 -1.000000 0.000000 0.000000 0.000000 1.000000
VT -88.900002 3.000000 46.900002 -1.000000 0.000000 0.000000 1.000000 0.500000
VT -88.900002 0.000000 43.900002 -1.000000 0.000000 0.000000 0.500000 0.000000
IDX 20170
IDX 20171
IDX 20171
IDX 20170
IDX 20172
ATTR_cockpit // appel la texture du tableau de bord
TRIS 0 660 // vecteurs utilisant la texture du tableau de bord
ATTR_no_cockpit // revient sur la texture de l'objet
ATTR_shiny_rat 1 1 1 // règle la brillance des vecteurs suivants au maximum
TRIS 660 26169 // vecteurs affectés par la brillance
ANIM_begin // début d'une animation
ANIM_rotate 0.000000 0.174000 0.985000 0.000000 -30.000000 0.000000 1.000000 sim/cockpit/engine/ignition_on[0]
// animation de rotation activée par l'allumage du moteur (ignition_on)
TRIS 26829 276 // vecteurs de la partie de l'objet qui sera affectée par cette animation de rotation
ANIM_end // fin de l'animation
ATTR_shiny_rat 0 0 0 //remet la brillance à 0
TRIS 46308 1506 //vecteurs affectés par cette nouvelle brillance
ATTR_no_cull // force l'affichage des deux faces d'un polygone
TRIS 47814 12 //vecteurs affectés par ce nouvel affichage

Par rapport au format 7, le fichier Obj8 ne nous permet plus de retrouver le nom ou description des parties, quasiment impossible de s'y retrouver dans les TRIS X XXX, pour contourner ce problème, on peut utiliser les fonctions disponibles dans votre logiciel 3D. Il y a plusieurs façon de faire, donner un attribut ou une animation via le logiciel 3D (pas toujours simple), donner un attribut facilement identifiable à la partie de l'objet que l'on souhaite identifier dans le code (par exemple, si l'on créé un cockpit, on aura jamais a utiliser la fonction HARD (collision), donc on peut encore appliquer la fonction hard au groupe de TRI que l'on veut isoler et la retrouver facilement dans le code ensuite.), une autre solution est de générer un objet au format 7 (si celui-ci ne comporte pas d'animations !), faire les modifications d'attributs et le convertir au format 8 avec ObjectConverter (utile pour gérer les zones HARD d'un objet par exemple).


Comment passer un OBJ7 en OBJ8

Depuis la version 11, les objets de la version 7 ne sont plus supportés. Il ne s'affichent plus. Il faut donc les passer en V8, avec un outil de cette page.

Assurez-vous d'utiliser l'ancienne version 12-2. Il va convertir V7 en format d'objet V8, le plus récent 15-3 ne le fera pas. Il suffit de le glisser et le déposer.

Types d'attributs

Voici une petite liste des lignes de code d'attributs susceptibles de vous être utiles. A noter que ces lignes n'affectes que les polygones qui suivent cette ligne et s'applique jusqu'au prochain changement d'attribut !

  • ATTR_poly_os 0: cet attribut détermine l'ordre d'affichage du (ou des) polygone qui suit. Un polygone avec un attribut de 1 s'affichera devant un polygone avec un attribut de 0 (même si il est géographiquement derrière celui-ci)
  • ATTR_shade_smooth: cet attribut supprime le dessin des angles d'un modèle 3D, un dôme avec quelques facettes paraitra pratiquement lisse tout en utilisant toujours que quelques polygones.
  • ATTR_shade_flat: fonction inverse du précédent, les faces sont affichées nettement.
  • ATTR_LOD 0 1000: cet attribut détermine à partir de quelle distance les vecteurs qui suivent seront affichés. Elle permet d'avoir plusieurs versions d'un objet, une version détaillée affichée de près (de 0 à 1000m comme dans cet exemple), une version moins détaillée s'affichant à distance moyenne et une version minimale affichée de très loin. Toutes ces versions sont comprises dans le même code de l'objet, seul cet attribut les sépare.
  • ATTR_ambient_rgb 1.0 1.0 1.0 : lumière ambiante éclairant l'objet (seulement visible sur l'objet !) suivi des données rouge/vert/bleu.
  • ATTR_difuse_rgb 1.0 1.0 1.0 : lumière diffusée par l'objet suivi des données rouge/vert/bleu.
  • ATTR_specular_rgb 1.0 1.0 1.0 : lumière spéculaire de l'objet suivi des données rouge/vert/bleu.
  • ATTR_emission_rgb 1.0 1.0 1.0 : Luminosité de l'objet suivi des données rouge/vert/bleu. Un objet avec une émission de 100 100 100 affichera sa texture de jour également la nuit... il sera donc totalement éclairé la nuit.
  • ATTR_shiny_rat 0 0 0 : indice de brillance de l'objet (0 0 0 = mat / 1 1 1 = brillant)
  • ATTR_no_depth: règle des conflits d'objets plats au sol (clignotement, disparition, invisibilité).
  • ATTR_depth: met fin à l'attribut.
  • ATTR_no_cull: force l'affichage d'une face des deux cotés (pile et face).
  • ATTR_cull: met fin à l'attribut.
  • ATTR_reset: annule tous les attributs
  • ATTR_hard: uniquement utilisé en objet 8, cet attribut détermine un polygone solide (possibilité de se poser dessus ou d'entrer en collision avec). La gestion des surfaces "hard" (solides donc) dans les objets ne permet pas d'avoir un toit en "dur" et le dessous du toit en "pas dur". En fait, X-plane considère cette surface de toit comme un morceau de terre sur-élevé... du coup, tout ce qui est en dessous est considéré comme solide (même si il n'y a que du vide). A noter aussi que cet attribut est très gourmand en ressouces étant donné qu'il demande une détaction de colision permanente au simulateur (à n'utiliser que lorsque c'est vraiment necessaire donc !)
  • ATTR_layer_group  airport -1 : un peu comme l'attribut "Poly_os" mais en plus précis, cet attribut permet de déterminer l'ordre d'affichage de l'objet par rapport aux autres éléments du décors. Il necessite deux paramètres: le groupe auquel il appartient / son placement au sein de ce groupe. Les groupes disponibles sont: terrain, beaches, shoulders, taxiways, runways, markings, airports, roads, objects, light_objects, cars. Pour chaque groupe, on peut avoir une hiérarchie allant de -5 à +5 sachant que le niveau par défaut est le 0. Dans l'exemple donné en début de paragraphe "ATTR_layer_group airport -1" on détermine que l'objet est affiché avec le groupe contenant les éléments d'aéroport (pistes, taxixays, signalétique...) mais qu'il se situe en dessous de ces éléments (c'est le -1). Notre objet sera donc visible sauf si il est recouvert par un élément d'aéroport car ceux-ci sont sur le niveau 0, donc prioritaires.

Types d'Elements

Cette liste est uniquement valable pour les objets version 7.

  • light
  • -6.0 60.0 -6.0 99 99 99: simple lumière qui s'allume à la nuit tombée suivi des données rouge/vert/bleu et des données de chaque couleur (99 99 99 = une lumière rouge pulsée / 98 98 98 = une lumière clignotante / 97 97 97 = un feux tricolore avec ses phases / -xx -xx -xx = un chiffre négatif détermine une lumière flashante)
  • line
  • 6.0 40.0 6.0 5 5 5: détermine une ligne (antenne par exemple)avec sa taille x/y/z suivi des données rouge/vert/bleu déterminant sa couleur
  • tri: détermine un polygone triangulaire.
  • quad: détermine un polygone à quatre cotés.
  • quad_hard: détermine un polygone à quatre cotés considéré comme "dur" (un objet peux se poser dessus ou le percuter).
  • quad_strip: bande de quads (entourage d'un cube par exemple).
  • tri_strip: même chose avec des triangles.
  • tri_fan: succession de triangles jointifs (dessus d'un cylindre par exemple).
  • smoke_white
  • 0.0 35.0 0.0 2.0: point d'où est émis une fumée blanche. figure sa location x/y/z et sa taille (ici 2.0).
  • smoke_black: même chose mais avec une fumée noire...