Une des promesses de T:ANE est d'assurer la rétrocompatibilité avec les objets d'anciennes versions de Trainz.
Si l'objectif est globalement atteint, l'adaptation d'une route ancienne à T:ANE nécessite quelques travaux préparatoires. A défaut, on obtiendra un rendu saccadé et décevant.
Il faudra d'abord évoquer quelques points techniques pour bien comprendre ce qui se passe sous le capot. Et c'est ensuite seulement qu'il s'agira d'apporter les modifications nécessaires pour une adaptation.
Un ordinateur possède une puissance de calcul limitée : une fois cette limite atteinte, le rendu à l'écran fait des "pauses" pour laisser à l'engin le temps d'accomplir ses tâches. Par conséquent, et concernant l'aménagement d'une route dans T:ANE, il faut en permanence se poser la question du coût en ressource de chaque ajout ou modification.
Ce coût en ressource est dépendant de l'usage -ou non- d'un certain nombre de techniques que nous allons évoquer ici.
Un objet dans T:ANE est constitué pour l'essentiel de deux éléments : la géométrie (les polygones) et les textures.
Les polygones :
Plus l'objet est complexe, plus il comprendra de polygones. Dans la pratique, après avoir créé un bel objet dans Max ou Blender, la procédure d'exportation vers T:ANE transforme tous les polys en triangles. Pour connaître le poids d'un objet, il faudra donc s'intéresser au nombres de triangles qui le constituent (un plan = 1 poly = 2 triangles).
En tant qu'utilisateur final vous pouvez aujourd'hui très facilement inspecter un objet et découvrir son poids en nombre de triangles : il suffit de se rendre dans le "Train Content" (via : Gestion du Contenu), de choisir un objet installé et par un clic du bouton droit de la souris, choisir : View Preview (aperçu élément). Par défaut, l'affichage est calé sur le mode 'inspect' et LOD distance 'auto'. Faites bouger et s'éloigner l'objet et observez la variation des données affichées. Dans l'exemple ci-dessous, l'objet comprend 166 triangles. Il ne devrait pas peser bien lourd sur une map (NB : à ce jour, la version française de l'outil 'apercu élément' n'est pas lisible ; préférez-lui la version en langue anglaise).
On peut lire aussi que cet objet "coûte" 2 Draw Call. Il s'agit ici du nombre "d'appel" envoyé à la carte graphique pour afficher cet objet. Comme il faut compter 1 Draw Call pour 60.000 triangles et que notre objet n'en comporte que 166, il y a un élément qui vient surenchérir le coût d'affichage...
Les textures :
Par texture, il faut entendre un "matériel" venant colorier tout ou partie du modèle. Un matériel comporte un fichier image (ce qui va apparaître à l'écran) et des réglages d'apparence (mat ou brillant, transparent ou opaque,...). Donc un matériel brillant avec un fichier de texture A ne sera pas le même qu'un matériel mat avec le fichier de texture A. Il y aura deux matériels (l'introduction de la technique PBR avec Trainz 2019 permet aujourd'hui de faire varier les caractéristiques d'apprence : brillant/mat, opaque/transparent,... tout en conservant un seul matériel)
Chaque matériel vaut 1 Draw Call.
Un objet de moins de 60.000 triangles et un matériel pèse 1 Draw Call. Ce même objet avec deux matériels pèse 2 Draw Call. Si cet objet avec ces deux matériel pèse plus de 60.000 sommets, il y aura un "split" (une division) et l'affichage nécessitera 4 Draw Call.
A ce niveau un p'tit commentaire : d'un côté ma source dans le wiki dit que 1 Draw Call pèse 60.000 triangles, et d'un autre, qu'à partir de 60.000 sommets, il y a "split".....vous avez noté l'incohérence ? Mais bon, disons que pour un très, très gros objet plein de détails, 1 Draw Call ne suffira pas même s'il n'y a qu'un seul matériel de texture.
Pour reprendre l'exemple ci-dessus, compte tenu du nombre réduit de triangles de sa géométrie, s'il y a deux Draw Call, c'est qu'il y a deux matériels de texture. Comme l'ensemble est uniformément mat, on devine qu'il y a en fait deux fichiers de texture différents. Pour un aussi petit objet, avait-on besoin de deux fichiers de textures différents ? Assurément non.
Tout le monde sait que plus un objet s'éloigne d'un point d'observation, plus les détails vont en s'estompant. Cette propriété optique est utilisée pour réduire le coût d'affichage.
Dans T:ANE, un objet peut comprendre X niveaux de détails différents, du plus détaillé au plus dépouillé, le logiciel choisissant le niveau de détail à afficher en fonction de l'éloignement.
On peut ainsi passer d'un coût d'affichage très élevé à quelque chose d'économique pour peu que le créateur ait correctement configuré son travail.
Il existe aujourd'hui trois techniques pour gérer le niveau de détails :
- pour les objets statiques (bâtiments,...) la configuration devra comprendre l'indication du nombre de niveaux de détail et, pour chacun d'entre eux, une géométrie dédiée plus ou moins détaillée ; c'est le logiciel qui détermine quand l'affichage doit passer d'un niveau de détail à l'autre
- pour les objets en spline (les rails, un mur de jardin,...), la configuration comprendra en outre l'indication des distances commandant le changement de niveau de détail ; c'est donc le créateur qui a ici le choix
- pour les objets animés (bielles de locomotive, signal mécanique,...), il faudra ajouter à la configuration un fichier "chapeau" qui indique quand changer de niveau de détail et quel fichier de géométrie choisir.
Au total, un objet équipé d'un niveau de détail verra son poids en triangles diminuer à l'affichage selon son éloignement.
Voici l'exemple d'une réalisation déjà ancienne :
Ce spline ne comporte aucun niveau de détail et il est texturé au moyen de cinq matériaux différents.
Pour vérifier son coût, on utilise à nouveau l'outil "Preview Asset" en mode "Performance Analysis" cette fois.
Il en ressort qu'affiché en très grand nombre, cet objet pèse 6 millions de triangles et 580 Draw Call.
J'ai retravaillé ce spline en le dotant de trois niveaux de détail et d'un seul fichier de texture (telegraphic0 kuid:458053:103824 vincentrh).
Dans les mêmes conditions que ci-dessus, l'objet pèse 2,2 millions de triangles et 180 Draw call, soit une économie de ressources à l'affichage d'environ 70%.
Le 'mesh stitching' est la technique qui permet à une série d'objets identiques de partager les ressources de géométrie et de matériels de façon à réduire la ressource nécessaire à leur affichage.
Dans T:ANE, sont concernés tous les objets sauf les matériels roulants. Ainsi que les objets configurés au moyen de fichiers de type.LM au lieu de .IM (voir plus bas)
Dans la pratique, pour constituer une forêt par exemple, vous pourrez utiliser un très grand nombre d'arbres du même modèle sans peser sur l'affichage. Plus vous ajouterez de variétés différentes, plus le coût à l'affichage sera élevé.
Maintenant que vous savez l'essentiel sur l'économie de l'affichage dans votre simulateur préféré, voyons comment faire dans la pratique.
Remplacer toutes la végétation 2D par de la 3D
Ouvrez votre route sous une version ancienne de Trainz et utilisez l'outil "remplacer" pour substituer à chaque type d'arbre ou buisson un objet quelconque, mais de petite taille, qui vous pourrez également afficher dans T:ANE.
Par exemple : l'arbre Tree XXX sera remplacé par une maison kuid YYY.
Prenez bien note de la concordance et, dans T:ANE, recherchez un végétal qui pourra remplacer l'ancien. Notez également la concordance : maison kuid YYY à remplacer par arbre 3d ZZZ.
Quand vous aurez ainsi éliminé tous les arbres et buissons de la route (il y aura plein d'objets partout), enregistrez votre route et ouvrez-la dans T:ANE.
Avec l'outil "remplacer", sustituez chaque objets YYY par les végétaux que vous avez préalablement choisi et noté dans votre feuille de concordance.
Sauf problème, vous noterez déjà une amélioration notable de la fluidité.
Remplacer tous vos rails par des rails procéduraux :
Ils sont optimisés pour T:ANE, valent esthétiquement le détour et leur achitecture permet un affichage à moyenne et longue distance allégé. Le choix est encore restreint, mais il existe des modèle intégrés Auran qui rendent plutôt bien et quelques créations intéressantes disponibles sur la DLS.
Faire la chasse aux splines
Inspectez chaque spline présent sur la route. Pour chacun d'entre eux, allez voir dans le Trainz Content comment ils sont configurés. Premier élément de suspicion, leur n° de version. S'il est antérieur à 2.9 (Trainz 2009), vous aurez forcément affaire à un spline à l'ancienne.
S'il est de version plus récente, inspectez son fichier de configuration. Vous devriez pouvoir trouver quelque chose comme ceci :
Si ce n'est pas le cas, essayez de le remplacer par une référence plus performante : le gain à l'affichage peut être très significatif
Eliminer et remplacer les objets mal configurés :
Il y a sur nos routes toutes sortes de choses, du meilleur et du pire. Mais deux catégories d'objets sont à supprimer sans pitié :
- ceux signalés en erreur ou avertissement à l'installation et qui dans leur configuration font apparaître des fichiers LM au lieu de IM. En effet la technique du niveau de détail via l'introduction d'un fichier .LM est réservée aux objets animés tels des locomotives, des bogies,... Lu dans le wiki : "Regular scenery meshes should never use this technique. " (http://online.ts2009.com/mediaWiki/index.php/Level_of_Detail).
Voici un exemple.
Pour repérer ce type d'objet fauté, recherchez parmi les dépendances de votre route tous les objets de version 2.0 ou antérieur. Vous en trouverez sans doute (vous pouvez également utiliser le filtre de recherche "Has faulty" ou "Has warning")
Et comme, en tant qu'utilisateur final, vous ne pouvez pas réparer ce type d'erreur, remplacez l'objet.
- il y a aussi de nombreux avatars de Google Sketchup. Leur introduction sur une route est tout à dommageable car le nombre de polygônes qui les constituent est en général excessivement élevé. Pour les repérer, par d'autres moyens que d'inspecter un à un tous les objets au moyen de l'outil "preview asset". Mais en général on retrouve ces vilaines bébettes sous la forme de bâtiments, mais aussi de personnages ou de voitures. A remplacer également.
Ceci fait, (et votre route est de plus en plus fluide), traquez également les objets qui abusent de multiples fichiers de texture. Il s'agit également de création anciennes, mais pas forcément. Si vous avez encore la patience nécessaire, remplacez-en quelques uns, ce sera toujours ça de pris....
Commencez par supprimer de votre route tout matériel roulant. Placez-les sur la couche session. Enregistrez, fermez et ouvrez à nouveau.
En mode "route" et "Concepteur", cliquez sur le bouton de menu principal en haut à gauche de l'écran. Dans la boîte de dialogue qui s'affiche, choisissez "option atelier" et "paramètres généraux". Cochez la case "Afficher les stat de performance dans géomètre". Fermez la boîte de dialogue.
Sur l'écran apparaît alors toute une batterie de chiffres. Nous nous intéresserons aux valeurs "worst buffer count" et "worst index count".
L'indicateur "worst buffer count" indique l'objet de la map qui consomme actuellement le plus de ressources. L'indicateur "worst index count" nous indique quel est l'objet dont la géométrie comporte le plus de polygones.
Commencez par l'objet signalé en "worst buffer count". Notez son KUID et allez dans le Trainz Content pour afficher sa configuration. Référez-vous à tout ce qui vient d'être dit plus haut pour essayer de comprendre pourquoi cet élément est gourmand ( végétation 2D , "vieux" spline ? fichier .lm sans animation ? multiplicité des fichiers de textures ?).
A noter :
- le fait qu'un élément apparaisse comme gourmand ne signifie pas forcément qu'il soit mal bâti mais qu'il est utilisé de manière intensive ; dans la plupart des cas, il s'agit des rails posés sur la map; pour poursuivre vos investigations, remplacez provisoirement les rails par l'objet spécialement conçu "rail remplacement" 458053:100835 (si vous avez plusieurs type de rails, clonez l'objet "rail remplacement" et utilisez ces clones pour remplacer chaque type de rail)
- vous pouvez décider de ne pas remplacer certains splines même s'ils sont gourmands ; comme ci-dessus, remplacez-les provisoirement par l'objet "spline remplacement" 458053:100847
Téléchargement des outils de remplacement : téléchargement
A part les deux exceptions que nous venons d'évoquer, et en tant qu'utilisateur final, vous n'aurez pas d'autre choix que de procéder au remplacement par un objet similaire plus "moderne". A cette occasion, inspectez au préalable le remplaçant pressenti grâce à l'outil "Aperçu élément" ( voir : les polygones). inutile de remplacer le mauvais par le pire !
Après avoir remplacé quelques objets apparaissant dans le "worst buffer count", inspectez à leur tour les objets signalés en "worst index count".
Supprimez ou remplacez.
Procédez ainsi alternativement, jusqu'à ce que votre route offre une fluidité satisfaisante.
Tout ce qui précède étant accompli, il faut en rester aux évidences : une route détaillée nécessite une bonne configuration.
Voici celle recommandée par N3V (http://forums.auran.com/trainz/showthread.php?113153-TANE-Hardware-Discussion)
Personnellement, disposant d'une carte NVDIA 970X, et au vue de mes réglages, je doute qu'une GTX660 soit à la hauteur. Prenons ceci comme une configuration minimum.
Au démarrage, choisissez "Trainz setting" et sur le panneau de réglages qui s'affiche, cliquez sur "performance help" : vous accédérez à une page du wiki qui explique clairement les différents réglages et leur impact sur la performance de l'affichage (en anglais seulement...à vos dico !)
D'expérience, les réglages qui ont le plus d'impact sont ceux ayant trait au "maximum draw distance" et à la qualité des ombres (Shadow Quality). A vous de faire vos propres essais.
Un écran d'ordinateur courant a une fréquence invariable de balayage de 60 Hz, soit 60 images par seconde. Il est alimenté en image par la carte graphique qui, elle, vit sa vie à son propre rythme qui est irrégulier en fonction des calculs à effectuer.
Dès lors, deux phénomènes peuvent se produire :
- la carte graphique travaille à un rythme moyen inférieur à la fréquence de l'écran, ce qui provoque des bégaiement à l'affichage :
- la carte graphique travaille plus vite que ce que l'écran peut afficher, et des phénomène de cisaillement de l'affichage apparaissent :
La synchronisation verticale élimine ces phénomène en contraignant la carte graphique à se mettre au rythme de l'écran : elle commence à calculer une nouvelle image qu'à partir du moment où l'écran commence à afficher l'image précédement calculé. Ainsi, une partie des désynchronisations est éliminée et si la carte prend de l'avance, elle se repose un p'tit coup, ce qui est bon pour la consommation d'énergie et la chaleur émise.
Néanmoins, si la carte est contrainte à prendre du retard du fait de calculs trop lourds, le phénomène de bégaiement persistera.
Il existe une solution initiée par NVidia qui consiste à rendre l'écran "esclave" de la carte graphique : mais cette technique est réservée aux cartes les plus récentes et à des moniteurs hauts de gamme (très chers + 400 €)
En définitive : faut-il ou non activer la synchronisation verticale ?
- si le taux de rafraîchissement de vos image est supérieur à 60 images par seconde, activez la synchronisation verticale
- si votre config ne permet pas d'atteindre ce niveau, n'utilisez pas la synchronisation.
A noter pour les possesseurs de cartes NVidia :
si vous accédez au panneau de configuration de votre carte, veillez qu'en ce qui concerne le programme Trainz : A New Era, le paramètre de synchronisation vertical soit réglé sur adaptatif. En revanche, décochez la case Synchronisation Verticale dans le menu du jeu.
Où trouver le taux de rafraîchissement ?
En mode conducteur, cliquez sur 'main menu' (en haut à gauche de l'écran) , choisissez "setting" (réglages) , "General Settings" et cochez la case "Show performance statistics in Driver". Fermez le panneau.
Vous verrez apparaître alors toute une série de données sur la gauche de l'écran. Recherchez la variable : Mean Frame Time (temps d'affichage moyen). Il est exprimé en milli secondes. Ainsi, si vous lisez une valeur de 27.71, vous aurez 1000/27.71=36.09 images par seconde, le taux de rafraîchissement.