ContribCliquez ici pour proposer des corrections ou des compléments pour cette page.
Gestion de l'affichage

Traduction de X-Plane 8 OBJect Models

Comment X-Plane gère t-il l'affichage 3D ? Ces explications pourront vous être utiles pour mieux comprendre certaines erreurs d'affichage et les corriger...

Les attributs et l'état

Dans X-Plane 8, les objets sont constitués d'un ensemble de commandes, chacune traçant des triangles. l' "état" de l'objet influence la façon dont il est tracé. A la base, X-Plane dessine d'une certaine manière; on utilise une commande d'attribut pour changer la manière dont le tracé se fait. Le dessin s'exécute de la même manière jusqu'à ce qu'on utilise une autre commande d'attribut, ou que le dessin soit terminé.

Les sections suivantes traitent plus en détail des différents états d'un objet.

La façon typique d'utiliser les attributs est de régler des problèmes particuliers concernant votre modèle. Il est vrai que certains modèles n'auront besoin d'aucun attributs. Référez-vous à la documentation de votre application graphique 3D, et à son plugin d'export, pour savoir comment pratiquement on crée ces attributs.

PERFORMANCE: X-Plane tente de tracer la géométrie de votre modèle en masse. OpenGL est capable de tracer 100 triangles à peu près aussi vite qu'il n'en trace un seul, et son mode le plus performant est le tracé d'un grand nombre de triangles dans l'ordre. Mais chaque fois que vous changer l'état, X-Plane doit s'arrêter et reconfigurer OpenGL.

A chaque fois qu'X-Plane reconfigure OpenGL, puis trace une série de triangles, on appelle ça un "lot" (NDT: "batch"). Pensez à une usine qui produit des articles par lots - l'usine doit faire une pause pendant quelques heures pour effectuer une reconfiguration entre les lots. Le framerate de votre objet est sans doute plus influencé par le nombre de lots que par le nombre de triangles !

Vous pouvez facilement voir le nombre de lots dans un OBJ8 : chaque utilisation des commandes TRIS, LINES et LIGHTS représente un lot. Par exemple, pensez à cet extrait:

ATTR_poly_os 3.000000
TRIS 0 6
ATTR_poly_os 0.000000
ATTR_shade_smooth
TRIS 6 48
ATTR_shade_flat
TRIS 54 54
smoke_white 0.000000 35.000000 0.000000 2.000000
TRIS 108 48
ATTR_hard
TRIS 156 12
LINES 168 8
LIGHTS 0 4

Cet objet contient 7 lots. Il serait tracé plus rapidement si la commande smoke_white était déplacé jusqu'en bas; deux lots de triangles pourraient être combinés, ce qui améliorerait le framerate.

X-Plane ne ré-ordonne pas vos commandes d'objet; vous verrez plus loin que certains effets ne peuvent être obtenus que si l'on a un contrôle total de l'ordre de tracé de l'objet. Il est donc important que vous organisiez votre objet pour réduire le nombre de lots. La façon dont vous vous y prendrez dépendra de votre logiciel 3D et de son plugin d'export. Il est possible qu'il puisse vous aider dans cette tâche; possible aussi qu'une certaine structure soit requise.

AC3D: Dans l'exportateur d'AC3D, une surface donnée peut être uniface ou double-face. Si vous créez un objet qui comporte à la fois des surfaces uniface et double-face, puis le copiez 1000 fois, AC3D va en fait exporter l'objet dans l'ordre des (NDT: copies d') objets, ce qui veut dire qu'il fera quelques surfaces uniface, puis quelques-unes double-face, encore et encore. Le résultat obtenu est : 2000 lots ! Mais si vous faites des groupes différents pour l'uniface et le double-face, et que vous les copiez séparément, vous pouvez réduire l'ensemble à 2 lots seulement.

Sur du hardware moderne, X-Plane est capable de tracer des dizaines de milliers de triangles dans un objet sans affecter sensiblement le framerate. Si toutefois votre objet semble faire chuter le framerate, jetez donc un coup d'oeil au fichier texte, et voyez s'il n'y a pas trop de lots.

Décalage de polygone et conflit "z-buffer"

(NDT: buffer = mémoire tampon)

X-Plane utilise une technique appelée Z-buffering pour tracer en 3D. En fait, pour chaque pixel dessiné à l'écran, X-Plane se souvient de sa distance par rapport à l'observateur. Lorsqu'un nouveau modèle est dessiné, seuls les pixels qui sont plus proches de l'observateur sont visibles.

Si X-Plane n'utilisait pas le Z-buffering, alors les objets situés derrière une colline seraient dessinés par-dessus la colline. Avec le Z-buffering, la colline cache l'objet même si elle est dessinée en premier.

Sur l'image de gauche, les bâtiments sont dessinés dans l'ordre indiqué. Mais le Z-buffering s'assure que les buildings les plus proches soient dessinés par dessus les autres. Par exemple, le bâtiment 7 n'est dessiné qu'en partie car le bâtiment 6 est "plus proche" de l'observateur. Sur l'image de droite, le Z-buffering est désactivé. L'effet ressemble à des morceaux de papiers qui se chevauchent.

Un problème survient quand un morceau de votre modèle recouvre le sol. A cause d'un manque de précision de la carte graphique, à certains endroits le modèle sera dessiné par-dessus le sol, et à d'autres endroits c'est le sol qui recouvrira le modèle. On appelle ça le "conflit z-buffer" (NDT: en anglais, "Z-Buffer Thrash")

Sur l'image ci-dessus, les deux hélipads sont des objets qui touchent le sol. A gauche, le polygone est en conflit avec le terrain. A droite, on a appliqué un décalage de polygone (polygon offset) de 1, et le dessin est net.

Pour obtenir le rendu correct d'un modèle qui se trouve plaqué sur le sol, vous devez utiliser l'attribut "polygon offset". Cet attribut force la carte graphique à favoriser votre modèle au dépend du sol, éliminant ainsi le conflit. Le "polygon offset" est fixé par un entier. "0" indique l'état normal (pas de décalage); des valeurs positives indiquent la quantité de protection contre le conflit. En général, un décalage de 1 ou 2 est suffisant, mais il se peut que vous ayez à expérimenter d'autres valeurs pour obtenir de meilleurs résultats.

REMARQUE: Etant donné un polygone sur le sol (avec décalage) et le reste d'un bâtiment, vous obtiendrez probablement de meilleurs résultats si vous tracez le polygone décalé en premier, et ensuite le bâtiment.

IMPORTANT: N'utilisez des décalages de polygone supérieur à zéro que pour les parties au contact du sol; si vous le faites pour le reste de votre modèle, il y aura des erreurs de rendu !

Une utilisation typique de "polygon offset" serait d'ajouter des marquages sur le revêtement d'aéroport. Les polygones qui sont à plat sur le sol et ont des texture de revêtement doivent avoir un poly_os de "1". Tous les polygones qui représentent des vrais objets en 3D comme des véhicules ou des bâtiments doivent avoir un poly_os de "0".

PERFORMANCE: Comme tous les attributs, le "polygon offset" est un changement d'état et exige un nouveau lot. Pensez à fusionner plusieurs marquages de revêtements ou autre géométrie "poly_os" en un seul gros objet pour éviter le conflit.

Blending et contrôle de la composante Alpha

Il se peut que la texture de votre objet contient une composante alpha. Là où la composante alpha est transparente, vous pourrez voir à travers votre objet; là où elle est opaque... vous ne pourrez pas. On peut donc utiliser la composante alpha pour une création facile de fenêtres et autres ouvertures dans un objet.

Là où la composante alpha possède une valeur intermédiaire, l'objet sera translucide. Mais voici le problème : tout ce qui est dessiné APRES votre modèle mais derrière une texture translucide n'apparaîtra pas. Pour que la translucidité soit effective, le tracé doit être fait dans un ordre précis.

C'est un sérieux problème; X-Plane dessine les modèles dans un ordre aléatoire conçu pour maximiser le framerate. Donc, vous pourriez très bien ne pas savoir quels autres modèles seront tracés. Cela peut conduire à des effets très étranges.

Ce bâtiment a deux fenêtres; celle de gauche est translucide (teintée sombre) et celle de droite est transparente. Sur l'image de gauche, dû à l'ordre de tracé, le mur du fond à l'intérieur du bâtiment est visible à travers la fenêtre de droite, mais on peut voir les montagnes à travers la fenêtre de gauche. Sur l'image de droite, le mur du fond est visible à travers les 2 fenêtres car il est tracé en premier.

Dans X-Plane, les modèles sont toujours dessinés dans l'ordre que vous spécifiez dans votre fichier OBJ. Donc, vous pouvez utiliser la translucidité en toute sécurité, du moment que vous vous assurez que votre objet est tracé dans le même ordre. Mais vous ne pouvez pas utiliser la translucidité entre des objets - parfois les objets seront dessinés dans le mauvais ordre, et vous obtiendrez des artefacts.

Ca se complique: à mesure que la caméra se déplace, il se peut que vos textures soient étirées pour s'ajuster à l'objet. Dans ce processus d'étirement, la composante alpha risque d'être altérée par interpolation... Par conséquent, même si votre alpha ne contient que des zones opaques et transparentes, il est possible que vous obteniez des zones translucides à cause de l'étirement.

A gauche, un arbre: le masque alpha est en fait totalement opaque ou transparent, mais dû à l'étirement, certains pixels des bords deviennent translucides. (quand on appose une texture sur un objet 3D, plus elle est étirée ou déformée, plus la texture sera affichée floue) A droite, le masque alpha lui-même est utilisé; notez les bords grisâtres. [NDT: pas très clair son exemple, mais bon, on a compris le principe]

Ceci peut créer un effet "halo". Là où votre texture est transparente, vous obtiendrez un rendu correct, mais juste sur les bords séparant une zone transparente d'une zone opaque, les pixels translucides vont laisser voir des aberrations pas vraiment jolies.

Pour résoudre ce problème, vous pouvez désactiver l'alpha blending (code "ATTR_no_blend" à ajouter dans le code de votre objet). Quand le blending est désactivé, tous les pixels translucides de 50% d'opacité ou moins seront tracés en transparent, et tous les autres (plus de 50 % d'opacité) seront opaques. Ceci créera un bord net et précis entre les zones opaques et transparentes.

A gauche: deux arbres. Celui de gauche utilise l'alpha blending, celui de droite ne l'utilise pas. On obtient des pixels translucides autour des bords de l'arbre de gauche. Alors que des pixels vraiment transparents laisse voir le bâtiment derrière, des pixels translucides laisse voir le ciel. La couleur différente apparaît comme un halo de 1 pixel.

A droite, une vue rapprochée de l'arbre de gauche. Le bleu, c'est le ciel; le gris, c'est le bâtiment.

Voici un résumé des règles pour la transparence:

  • Si vous avez du transparent à travers lequel vous pouvez voir un autre objet du décor, désactivez l'alpha blending pour éviter les halos (ex: des arbres)
  • Si vous avez du translucide à travers lequel votre propre objet est visible, laissez l'alpha blending activé pour la translucidité (ex: les fenêtres)
  • Si aucun de ces deux cas ne s'applique, laissez le blending activé, car c'est le réglage par défaut.
  • Vous ne pouvez pas avoir de zone translucide à travers laquelle on voit d'autres objets !

Normalement, il vaut mieux désactiver le blending pour les arbres et les autres structures qui utilisent la transparence pour découper des ouvertures dans les objets. Laissez-le activé pour tous les types d'effet de translucidité.

PERFORMANCE: Comme pour les autres attributs, il est préférable d'éviter de changer le mode de blending afin de conserver un nombre minimal de lots. Si vous avez un objet où certains polygones nécessitent l'activation/désactivation du blending, et que ce n'est pas important pour les autres polygones, réglez tous les polygones de la même façon, afin qu'un seul mode de blending soit utilisé pour tout l'objet.

Si vous n'avez pas besoin que votre objet soit dessiné dans un ordre précis pour des raisons de translucidité, réorganisez vos polygones pour conserver les polygones de même type ensemble, ce qui réduira le nombre de lots. La translucidité et les effets alpha (de jour comme de nuit) et éventuellement le décalage de polygone, sont les seuls vrais cas où vous aurez besoin de contrôler l'ordre du tracé.

Éclairage de nuit et Alpha Blending

Quand vous utilisez une texture associée à un masque alpha, et un masque d'éclairage qui n'en possède pas, le masque d'éclairage n'est visible que là où la texture ordinaire l'est. Par exemple, dans le cas suivant, l'effet d'éclairage n'est pas visible là où l'objet est transparent.

Voici une texture pour une simple cabane. On utilise la composante alpha pour découper une ouverture sur le devant. La texture de jour est à gauche, celle de nuit (éclairage) est à droite. L'image RVB est en haut et le masque alpha en bas (noir = transparent; blanc = opaque). Dans ce cas le masque d'éclairage n'a pas de composante alpha.

résultats inattendus : alors que l'aspect de la cabane est correct pendant le jour, le rendu pour la nuit montre un halo de lumière sur le devant, découpé selon les briques, et ceci à cause du masque alpha de la texture de jour.

Pour remédier à cela, vous pouvez utiliser un masque d'éclairage avec un masque alpha. Cependant, il reste un problème : si vous utilisez un masque alpha opaque, vous cacherez ce qui était transparent !

Un remède inadapté : ajouter une composante alpha totalement opaque au masque d'éclairage.

Le masque d'éclairage est opaque. Ceci empêche de voir à travers le devant du bâtiment.

La solution à cela est de fabriquer une texture totalement claire, et d'utiliser la composante alpha pour former le masque d'éclairage.

Ici, le masque d'éclairage est correct.

Le bâtiment avec un halo de lumière sur la façade.

Notez que dans ce troisième exemple, là où la texture de jour est opaque, le masque d'éclairage de nuit est opaque et la texture de nuit varie en luminosité. Mais là où la texture de jour est transparente, le masque d'éclairage de nuit varie en opacité et la texture de nuit est complètement blanche.

IMPORTANT : A aucun moment on ne trouve des variations de texture et d'opacité en même tps dans le masque d'éclairage. Ceci provoquerait une double transparence du masque d'éclairage. Le résultat ferait apparaître des anneaux sombres autour de l'objet, et ce n'est pas vraiment ce que l'on veut.

Voici un résumé des règles concernant les masques d'éclairage :

  • Quand vous éclairez un rectangle opaque, utilisez 100% d'alpha dans le masque d'éclairage, et un dégradé du noir vers la lumière pour la source d'éclairage.
  • Quand vous éclairez un rectangle transparent, utilisez un masque alpha pour former la source de lumière, et une texture 100% claire.

Voici un problème similaire : lorsque vous créez un éclairage ou une source de lumière vive, faites-le avec le masque alpha, pas avec la texture elle-même.

A gauche : un motif de source de lumière copié sur la texture et sur le masque. Au centre : ce que cela donnerait dans Photoshop. A droite : ce que cela donnerait dans X-Plane. Le problème est que le gris du centre de la texture provenant de la composante RVB est mélangé dans la scène X-Plane. Ceci noircit un peu le ciel, en créant un anneau noir.

La solution est de régler les composantes RVB sur 100% blanc, ou 100% de la couleur recherchée pour l'éclairage. Servez-vous du masque alpha pour réduire l'intensité de la lumière près des bords.

PERFORMANCE : X-Plane n'attribue une composante alpha à vos masques d'éclairage que si votre PNG contient une composante alpha. Les images PNG peuvent comporter des informations RVB ou RVBA; les images BMP n'utilisent jamais de composante alpha pour les masques d'éclairage. Le fait d'inclure une composante alpha augmente la quantité de RAM vidéo nécessaire pour le masque d'éclairage de 33% lorsque la compression de texture est désactivée. Par conséquent, si vous décidez d'utiliser un masque d'éclairage sans alpha ou avec un alpha 100% opaque, assurez-vous qu'aucune composante 100% alpha n'est incluse dans votre PNG. Pour une texture 1024x1024 en très haute résolution, on économise 1MB de RAM vidéo.

Polygones solides

Normalement les polygones de votre modèle ne sont pas envoyés vers le moteur de calcul physique d'X-Plane. Cela signifie que vous pouvez voler à travers les bâtiments. Quand on active "polygones solides" ('hard polygons'), X-Plane vérifie les cas de collision avec les modèles. Deux remarques importantes à ce sujet :

  • Les polygones solides consomment de la RAM et du temps de calcul du processeur. Utilisez-les avec modération !
  • Les polygones solides fonctionnent bien pour faire atterrir un appareil, mais pas vraiment pour les collisions horizontales. En d'autres termes, si vous roulez d'un taxiway directement dans un mur vertical 'solide', la collision ne sera pas bien rendue.

REMARQUE : Si vous utilisez plusieurs LODs (expliqué ci-dessous), les polygones solides ne doivent être utilisés que dans le premier LOD, c-à-d le plus proche, le plus détaillé.

A la base, les polygones solides sont surtout utilisés pour les toits des bâtiments, afin que les hélicoptères puissent atterrir dessus.

PERFORMANCE : les polygones solides augmentent le temps de chargement du processeur, car le moteur de calcul physique doit évaluer plus de surfaces. Mais plus important encore, ils augmentent la consommation de RAM ! Dans l'implémentation actuelle, alors que les données d'objet sont gardées en [mémoire disque], les emplacements des polygones solides sont conservés séparément dans la RAM du système pour une utilisation par le moteur de calcul physique. Pire encore, ils sont conservés pour chaque instance de votre objet, et non pas une fois pour toutes les instances. Par conséquent, utiliser un objet entièrement solide peut avoir énormément d'effet sur la RAM. Utilisez cet option seulement lorsque cela est nécessaire.

Texture de tableau de bord.

Chaque objet utilise une texture et un masque d'éclairage; on les appelle collectivement : texture d'objet.

Vous pouvez aussi utiliser le tableau de bord 2D de l'appareil comme une seconde texture. Quand vous faites cela, le tableau de bord est utilisé instantanément tel qu'il apparaît. Ceci signifie que, par exemple, vous pouvez utiliser la carte flottante du tableau de bord 2D pour créer une carte flottante dans votre cockpit 3D.

Si vous utilisez la texture du tableau de bord, l'utilisateur pourra cliquer sur les parties cliquables du tableau de bord 2D là où elles sont utilisées dans votre modèle 3D. Donc, pour rendre votre tableau de bord fonctionnel, essayez d'utiliser la texture 2D autant que possible.

PERFORMANCE : Le changement entre la texture de l'ojet normal et celle du tableau de bord consomme énormément. Prenez bien soin de vous assurer que vous consolidez la géométrie avec la texture de tableau de bord, pour éviter un changement répété. Organisez vos objets de cockpit de manière à n'avoir à activer la texture de tableau de bord qu'une seule fois. De tous les changements d'états, celui-ci est le moins coûteux.

Géométrie double-face

Normalement, X-Plane ne dessine qu'une face de vos polygones, le "devant" (le devant est défini comme étant le coté où les vertex sont listés dans le sens des aiguilles d'une montre). Ceci est fait dans un souci d'optimisation; les faces arrières ne sont pas dessinées, ce qui réduit le nombre de polygones d'environ moitié. Ce processus est appelé "culling" [NDT : élimination, suppression].

Si vous devez utiliser un polygone double-face, servez-vous de l'attribut "no_cull" pour désactiver le culling.

Sur l'image de gauche, le culling est désactivé, et la face arrière (ici, intérieure) du mur du fond est visible. A droite, le culling est activé, et donc le mur du fond n'est pas dessiné puisqu'il est orienté dans la direction opposée à l'observateur.

Il existe un cas pour lequel vous ne pouvez pas utiliser la géométrie double-face : si vous voulez qu'un polygone ait une texture différente sur chaque face (par exemple, un mur qui est en brique d'un côté et en plâtre de l'autre côté) vous ne pouvez pas utiliser un seul polygone. Vous devrez utiliser 2 polygones unifaces orientés dos-à-dos.

REMARQUE : Les calculs d'éclairage dans X-Plane peuvent ne pas rendre correctement l'effet de lumière d'un côté et l'ombre de l'autre côté, sur un polygone double-face. Il vaut mieux utiliser 2 polygones uniface pour cela.

PERFORMANCE : Il est plus rapide de tracer un triangle uniface qu'un triangle double-face. Plus rapide de tracer un seul triangle double-face que 2 triangles uniface au même endroit. Mais le plus lent, c'est de changer de mode, du tracé uniface au tracé double-face ! Par conséquent, les règles suivantes vous parleront sans doute :

  • Si vous avez besoin de textures différentes sur les deux côtés, utilisez 2 polygones unifaces dos-à-dos, puisque c'est la seule façon de procéder.
  • Si vous créez de nombreux polygones qui doivent être double-face, utilisez le double-face pour tout.
  • Si vous créez seulement un ou deux polygones en double-face, alors doublez-les et gardez tout en mode uniface.
  • Si vous avez assez de polygones pour tomber dans les deux cas, groupez-les pour éviter le changement d'état au maximum.

En théorie, l'ordre le plus rapide pour des triangles unifaces serait de rendre la face avant et la face arrière consécutivement. Mais je n'ai pas encore fait d'évaluation pour savoir si la différence est visible.

AC3D : Comme AC3D vous permet de choisir entre le mode uniface ou double-face pour chaque surface, et comme toutes les surfaces d'un objet sont dessinées ensemble, il existe avec les modèles AC3D un risque que vous puissiez provoquer un grand nombre de changements de mode "culling". Assurez-vous de faire un réglage explicite de tous vos objets sur le mode uniface, ou double-face, que vous désirez !

Flat Shading vs Smooth Shading, et Normales "par vertex"

[NDT : "flat shading" = calcul d'ombrage direct; "smooth shading" = calcul d'ombrage par interpolation (smooth = doux)]

X-Plane 8 propose le "flat shading" et le "smooth shading". En flat shading, la luminosité d'un triangle (une fonction de l'angle du soleil depuis le ciel) est uniforme sur toute sa surface. Avec le smooth shading, la luminosité est calculée pour chaque vertex et mélangée sur tout l'objet.

Les cylindres de gauche et de droite ont le même nombre de polygones, mais celui de gauche n'apparaît pas bien lisse à cause du flat shading. Celui de droite utilise le smooth shading et donne l'illusion d'être parfaitement incurvé et lisse.

Le smooth shading produit des changements continus de luminosité qui peuvent faire apparaître des objets bien courbes et lisses. Cependant, le taux de mélange de luminosité dans un triangle n'est pas tout à fait le même que dans un objet courbe réel, et donc vous devrez utiliser assez de triangles pour éviter des effets de luminosité étranges.

Le cylindre de gauche a 36 segments, alors que celui de droite n'en a que 10. Du coup, le shading n'est pas très uniforme. Cet effet se remarquera plus ou moins selon les conditions d'éclairage.

PERFORMANCE : évitez de changer cet attribut autant que possible. Le mode par défaut est "smooth shading". Souvenez-vous que même en smooth shading, vous pouvez créer un effet "flat shading" en ajustant les normales (perpendiculaires) de façon appropriée (ceci serait effectué par le plugin d'export, pas par le programme de modélisation).

AC3D : Pour les utilisateurs d'AC3D, le plus efficace est de régler toute la géométrie sur "smooth" (lisse) et d'utiliser la fonction ["crease-angle"] pour contrôler le lissage. L'objet aura la même apparence dans AC3D et dans X-Plane.

Matériaux

Vous pouvez changer les propriétés de "matériau" d'un polygone; ceci affecte la manière dont l'objet réagit au modèle d'éclairage. Voici les propriétés de matériau :

  • Couleur diffuse [diffuse color] : la couleur de l'objet à la lumière du soleil. C'est une teinte appliquée à toute la texture, donc elle est normalement réglée sur blanc, ce qui donne l'aspect "normal" à votre texture.
  • Couleur émissive [emissive color] : cette couleur est émise par votre objet, même lorsque le soleil ne l'éclaire pas, ou dans l'obscurité. Contrairement au masque d'éclairage, ceci fonctionne en permanence.
  • Taux de brillance [specular ratio] : un taux allant de 0 à 1 pour contrôler la brillance de votre objet.

Normalement, la couleur diffuse est réglée sur blanc, la couleur émissive sur noir, et la brillance est désactivée. X-Plane trace votre objet en ajoutant ensemble la couleur émissive, la couleur diffuse ajustée selon l'angle du soleil, et le taux de brillance élevé à une puissance basée sur l'angle du soleil ( pour réduire la zone de brillance). Ce niveau final de luminosité est utilisé pour assombrir votre texture.

Un effet étrange observé avec les matériaux est que ce calcul est effectué séparément pour les composantes rouge, vert, et bleu, et que les résultats sont limités à 1.0 (luminosité maximale). Donc, par exemple, si vous réglez la couleur émissive sur 1,0,0 (rouge pur) et la couleur diffuse sur 0,1,0 (vert pur), alors, à l'endroit où le soleil éclaire votre objet, ces valeurs seront ajoutées et limitées à 1,1,0, c-à-d jaune ! Pour éviter cela, assombrissez la couleur diffuse lorsque vous réglez une certaine couleur émissive, afin que l'addition des deux donnent un résultat sensé.

Remarque : OBJ7 utilisait les commandes ["ambient " et "specular color"]. Elles ne fonctionnaient pas et ne sont pas supportées dans OBJ8.

La sphère du bas est une sphère lisse normale. Celle de gauche a été teintée en bleu grâce à une couleur diffuse. Celle d'en haut possède une couleur émissive rouge. Notez qu'elle est complétement lumineuse bien que le soleil éclaire depuis la droite. La sphère de droite possède un taux de brillance de 1.0 - remarquez la tache brillante sur le côté droit.

PERFORMANCE : Je n'insisterai jamais assez sur ce point : l'utilisation de matériaux provoque des RALENTISSEMENTS ! Réfléchissez-bien avant d'en utiliser dans vos modèles.

Bien que les changements au niveau des matériaux ne ralentissent pas autant le calcul que les changements au niveau de la texture de tableau de bord, ils nécessitent tout de même la création d'un nouveau lot, et donc ralentissent le tracé comme tout autre attribut. Mais contrairement aux autres attributs, vous pouvez créer les mêmes effets que les matériaux par l'utilisation créative de textures. Donc, essayez d'utiliser des textures créatives plutôt que des matériaux autant que possible.

Il n'y a vraiment que 2 cas où vous devez utiliser les matériaux (bon, en tout cas ceux auxquels j'ai pensé) :

  • Si vous créez un objet qui fait partie d'un appareil, utilisez "ATTR_shiny_rat" pour faire correspondre la brillance de l'objet avec l'appareil.
  • Si vous créez un panneau d'affichage avec éclairage par derrière, servez-vous de "ATTR-emission-rgb" pour le forcer à rester lumineux, même dans des conditions limite d'éclairage. Ceci est particulièrement utile pour la création des signaux de taxiway.

N'essayez PAS d'utiliser les changements de couleur diffuse pour la modélisation de votre objet. C'est la texture qui doit s'en occuper ! Même si votre programme de modélisation propose une meilleure façon d'éditer grâce aux couleurs qu'avec les textures, trouvez un moyen d'utiliser les textures quand même. En terme de performance, la texturation est infiniment plus rapide que les changements au niveau des couleurs de matériau.

Test de profondeur

Vous pouvez désactiver le Z-Buffering. Ceci dit, ce n'est en général pas une bonne idée et ce n'est pas recommandé. Cette option est fournie uniquement par souci de compatibilité avec des versions précédentes d'X-Plane.

LOD - Level Of Detail

[NDT : Level Of Detail = LOD = niveau de détail]

Vous pouvez spécifier plusieurs niveaux de détail (LOD) pour vos objets. Les LOD sont des versions distinctes de votre modèle vu à des distances différentes. Chaque LOD possède une portée en mètres à l'intérieur de laquelle il est utilisé. Lorsque la caméra est plus loin que la fin de la toute dernière portée LOD, l'objet n'est plus dessiné. Même si vous utilisez un seul LOD, ceci permet d'être sûr que votre objet est dessiné jusqu'à une certaine distance.

A gauche, le LOD le plus détaillé de l'objet de la démo KSBD. a droite, une version plus simple est utilisée lorsqu'on s'éloigne.

Si vous vous servez de LODs, vous devez choisir des portées qui sont consécutives et qui ne s'empiètent pas.

Si vous ne précisez aucun LOD, X-Plane choisit la portée sur laquelle votre objet est visible en fonction de sa taille. Cependant, X-Plane ne peut pas prendre en compte des facteurs tels que la visibilité de votre objet depuis le ciel, donc il est sans doute préférable d'utilisez les LODs pour un contrôle total.

Il n'y a que 2 cas pour lesquels il faut utiliser les LODs :

  • si vous avez un objet très gros et très complexe, alors un second LOD peut soutenir le framerate.
  • même si vous n'en utilisez qu'une version, l'attribut LOD contrôle la disparition de l'objet, ce qui est utile si on veut pouvoir contrôler manuellement.

PERFORMANCE : Avant de décider si vous devez créer un LOD, considérez deux facteurs :

  • le moteur OBJ est assez rapide. A moins que qu'il ne vous fasse économiser un très grand nombre de triangles, le LOD peut très bien consommer plus de RAM sans améliorer le framerate pour autant.
  • l'économie réalisé par le LOD est aussi fonction du nombre de fois que l'objet est dessiné. Par exemple, une passerelle utilisée 100 fois dans un aéroport économisera 100 triangles pour chaque triangle que vous éliminez avec le LOD. Une statue qui n'est utilisée qu'une fois n'économisera qu'un triangle pour chaque triangle éliminé...

Donc, les seuls objets pour lesquels les LODs sont vraiment appropriés sont ceux qui possèdent beaucoup de triangles et qui sont utilisés souvent. Évaluez l'effet sur le framerate pour décidez si vous utilisez un second LOD ou pas (par exemple, testez en utilisant un seul LOD mais en le faisant disparaître plus tôt).

Une règle générale est que les objets de moins de 100 triangles ne valent probablement pas la peine de créer un second LOD. Les objets de moins de 24 triangles n'ont jamais besoin d'être simplifiés.

Une passerelle serait un excellent candidat à l'utilisation des LOD; le modèle proche pourrait contenir des milliers de polygones, mais le plus éloigné n'en contiendrait qu'une centaine. Utilisée une centaine de fois dans un aéroport, l'économie totale grâce aux LODs serait d'environ une centaine de milliers de polygones, ce qui améliorerait fortement la performance.

Animation

Vous pouvez animer vos objets. L'animation est proposée pour la rotation et la translation (mouvement) de certaines parties de votre objet. L'animation est contrôlée par des "datarefs", qui sont des variables publiées à partir du simulateur. Par exemple, vous pouvez créer un modèle de cockpit où les commandes de gaz pivotent selon la puissance du moteur dans le simulateur.

Les animations peuvent être emboitées. Par exemple, prenez le cas du manche. Le manche et sa colonne de direction peuvent être déplacés d'avant en arrière. Attaché sur la colonne, le manche pivote vers la droite et la gauche. Si vous emboitez les animations, on obtiendra l'effet attendu. Si vous ne le faites pas, alors la colonne se déplacera mais le manche s'en détachera.

PERFORMANCE : Chaque groupe d'animation crée un nouveau lot ! Donc, l'animation à un coût en terme de temps de calcul.

N'utilisez PAS les commandes d'animations pour le déplacement de parties de votre objet, si elles ne se déplacent pas effectivement. Par exemple, vous pourriez utiliser la commande "ANIM_trans" pour dessiner un camion en deux endroits (dessine une fois, déplace, re-dessine). Cependant, le coût nécessaire à l'animation n'en vaut pas la peine ! Copiez-collez le camion dans votre OBJ.

Vous avez la possibilité d'inclure des animations, différentes d'un point de vue conceptuel, à un groupe d'animations donné. Par exemple, prenez une articulation qui possède plusieurs degrés de mouvement libre. Vous pouvez créer un groupe d'animation suivi d'une commande de translation et plusieurs commandes de rotation. Il y a une limite au nombre de groupes d'animation qui peuvent être emboités, et toute animation prend du temps, donc il y a tout à y gagner.

Annexe A : Errata

  • Avant X-Plane 8.20, seules les couleurs émissives fonctionnaient.
  • Avant X-Plane 8.20, l'appareil ne pouvait pas interagir avec plusieurs polygones solides.
  • Avant X-Plane 8.20, les textures de tableau de bord n'était pas cliquable en 3D, et l'objet ne pouvait pas référencer le quart inférieur de la texture du tableau de bord en 1024x768.
  • Avant X-Plane 8.20, le décalage de polygone (polygon offset) ne fonctionnait pas sur certaines machines.
  • Avant X-Plane 8.15, les polygones solides ne pouvaient pas être penchés.
  • Avant X-Plane 8.15, les polygones solides ne fonctionnaient pas pour des objets très élevés.
  • Avant X-Plane 8.06, les composantes alpha ne pouvaient pas être utilisées avec les textures de nuit.