Phares et feux des matériels *

Dans Microsoft TrainSimulator il est possible de simuler différents types d'effets lumineux sur les matériels roulants. Tous les trains pilotés ou non peuvent disposer de ces effets. Ces effets peuvent être statiques ou dynamiques, changer selon certains paramètres, selon la commande du joueur et certaines conditions du déroulement du jeu, en fonction du temps et/ou de l'heure du jour. On les utilise donc pour représenter les phares, les feux mais aussi d'autres effets comme les étincelles de pantographes, de freins, le foyer des locomotives à vapeur ou même des reflets du soleil sur le modèle. Dans la suite du document on ne parlera que des feux et des phares. On ne peut pas utiliser de feux dans une cabine, par contre rien ne s'y oppose dans une vue interne 3D mais ils n'auront aucun effet sur la cabine elle-même (voir éclairage des cabines et des rames).

L'ensemble des feux d'un matériel est spécifié dans un paragraphe "Lights" (avec s) du fichier .eng pour une locomotive ou du fichier .wag pour les autres matériels remorqués. Les conditions et descriptions sont décrites feu par feu dans un paragraphe "Light" (sans s). Il y a donc autant de paragraphes Light qu'il y a de feux ou d'états de feux sur le matériel envisagé.

Il n'est pas dit si le nombre de feux sur un matériel est limité ou non. Ce qui est sûr est que le cône d'éclairage est coûteux en traitement graphique.

Comme tous les fichiers texte de Train Simulator, ces fichiers doivent être édités et sauvés en format Unicode. Le modeleur TrainSim Modeler v1.1 facilite le positionnement des feux. Voir ma page spécifique.

1 - Conditions d'allumage

La première chose à préciser sont les conditions dans lesquelles un feu est allumé. On trouvera ci-dessous les différentes conditions possibles. En général, une condition avec (0) comme paramètre équivaut à ne pas spécifier cette condition. Si pour un feu donné, on désire avoir différents états selon différentes conditions il faudra plusieurs paragraphes "Light" : un pour chaque condition.

Si aucune condition n'est donnée, le feu sera constamment allumé.

Conditions possibles d'allumage

Headlight (0) commande clavier "H" des feux ignorée : allumage permanent si aucune autre condition
Headlight (1) la commande clavier est en position "Off"
Headlight (2) la commande clavier est en position "Dim" (1 fois touche H)
Headlight (3) la commande clavier est en position "Bright" (2 fois touche H)

Attention : la distinction (2) et (3) n'est valable que pour les locomotives électriques et diesels. Pour une locomotive à vapeur il n'y a qu'une position : Headlight (3) correspondant à 1 fois touche H.
Cela a comme conséquence que la directive HeadLights du fichier .eng (commande des feux) a 4 paramètres en électrique et diesel et 3 paramètres seulement sur vapeur.

Unit (0) situation du matériel quelconque
Unit (1) le matériel est dans la rame mais ni en tête ni en queue
Unit (2) le matériel est le premier de la rame
Unit (3) le matériel est le dernier de la rame

Penalty (0) pénalité ignorée
Penalty (1) allumage hors pénalité
Penalty (2) allumage si pénalité appliquée

Control (0) conduite ignorée
Control (1) le matériel n'est pas conduit par le joueur
Control (2) le joueur conduit le matériel

Service (0) service ignoré
Service (1) le matériel n'est pas dans un service
Service (2) matériel dans un service

TimeOfDay (0) allumé jour et nuit
TimeOfDay (1) allumé de jour
TimeOfDay (2) allumé de nuit

Cette option peut être utilisée avec le feu de Type(1) pour éviter d'avoir des effets d'éclairage en plein jour mais malheureusement, pour MSTS, le jour commence à 6h00 quelle que soit la saison ce qui est assez irréaliste.

Weather (0) allumé quelque soit le temps
Weather (1) allumé par beau temps
Weather (2) allumé par temps de pluie
Weather (3) allumé par temps de neige

Coupling (0) allumé accouplé ou non
Coupling (1) avant du wagon accouplé
Coupling (2) arrière du wagon accouplé
Coupling (3) avant et arrière accouplés à d'autres matériels

À mon avis la condition "Coupling" est redondante avec la condition "Unit" telle qu'énoncée (et elle ne semble pas marcher correctement). Il aurait été plus utile d'avoir une condition "Marche avant", "Marche arrière" pour la commutation des feux AV/ARR.

 2 - Description du feu

Une fois les conditions spécifiées, on décrit le feu et ses différents états possibles.

a) Type de feu

On peut définir deux types de feux.

Type(n)  si n = 0 c'est un FEU à halo, n = 1 c'est un CONE de lumière

Type (0)   Feu visualisé par un polygône "lumineux" lorsqu'il est allumé, il n'éclaire pas l'environnement et pour le voir "allumé" le point de vue doit être dans son faisceau (voir plus loin). Le polygône constitue le halo lumineux du feu lorsqu'on le regarde en face. Si ce halo est transparent il paraîtra moins éblouissant qu'un halo opaque.

Type (1)   Cône de lumière qui comme son nom l'indique, n'est pas visualisé en lui-même : c'est son effet sur les objets environnants que l'on voit. Les polygônes situés dans le cône sont "éclairés". C'est l'ajout d'une texture claire transparente qui réalise cet effet. On a coutume de n'utiliser qu'un seul cône pour visualiser un ensemble de phares dans une direction donnée.

Truc : Ce cône de lumière est toujours dirigé vers l'avant de la locomotive. Si l'on veut simuler un éclairage de l'arrière (cas de matériel réversible) on doit mettre l'origine du cône très en arrière correspondant à la portée des phares : cela ne donne pas un vrai faisceau mais en est approchant.

Deux phares d'une motrice seront donc spécifiés à l'aide de deux déclarations Light avec type(0) et une déclaration Light avec type(1) pour l'effet sur le paysage.

b) Temps d'allumage et d'extinction

Précise le temps en secondes du passage d'un état à l'autre.

FadeIn (t)  temps d'allumage en secondes
FadeOut (t)  temps d'extinction en secondes

c) Cycle

N'est utile que si l'on définit plusieurs états pour le feu.

Cycle(n)   (0) indique que l'on déroule les états de façon séquentielle : pour 3 états on aura 123123123123....
(1) indique que l'on déroule les états de façon alternée : 12321232123...

d) Etats

L'ensemble des états est décrit dans un paragraphe "States" suivi du nombre d'états et chaque état est lui même décrit dans une structure parenthésée.
States ( n
      State (
                 )
       State (
                )
       ...)

Pour chaque état on spécifie les caractéristiques lumineuses suivantes :

Duration (t) durée de cet état en secondes. 0.0 pour un état de durée indéterminée.

LightColour (aarrggbb) couleur du feu sous forme d'un nombre exprimé en hexadécimal sur 32 bits où dans l'ordre sont données 4 valeurs sur 8 bits : opacité, rouge, vert, bleu.
Exemples : ffffffff (soit 255, 255, 255, 255) donne une lumière blanche opaque. 60ffffff donne une lumière blanche transparente donc qui aura l'air un peu moins brillante.
80ff0000 est un feu rouge assez lumineux. ffff0000 est un phare rouge éblouissant trop brillant pour un feu.
Attention : ffffff (soit 0, 255, 255, 255) est un feu blanc complètement transparent : on risque de ne pas le voir du tout.
L'intensité du feu se règle aussi par la dimension du halo (paramètre Radius) ci-dessous.

Position (x y z) position géométrique du feu dans le repère de base du matériel (voir page "repère de base").

Radius (r) rayon en mètres du polygone lumineux (pour Type (0) seul) ou distance d'effet du cône de lumière Type(1) ?.

Les trois paramètres suivants spécifient les dimensions du "faisceau" du feu : c'est à dire la zone dans laquelle on pourra voir que le feu est effectivement allumé (et non la zone éclairée par le feu).

Azimuth (min centre max) ces trois valeurs définissent les limites en angle d'azimuth (dans la direction de la marche de gauche à droite - voir "repère de base") du faisceau du feu de Type(0). Le feu ne sera visible de l'extérieur que lorsque le point de vue (position de la caméra) sera à l'intérieur de ce faisceau. L'ordre semble plutôt être (centre min max)...

Elevation (min centre max) trois valeurs d'angle définissant les limites en élévation (de bas en haut sur un plan vertical)

Transition (n) existence d'une transition entre deux états : (0) pas de transition, (1) "fondu" entre les deux.

Angle (n) Ouverture (Angle solide) en degrés du cône de lumière (pour Type (1) seul).


Exemples

Un exemple classique tout simple : les phares d'une motrice qui seront lumineux en position "faible" (Dim) et éclaireront le paysage uniquement en position "fort" (High). Ses feux arrières ne seront allumés que quand elle est seule ("haut le pied") et ceci de jour comme de nuit dès qu'elle est conduite par le joueur. Comptons le nombre de déclarations nécessaires : 2 pour les feux arrières, 2 pour les phares "faibles", 2 pour les phares "forts" et 1 pour le cône de lumière des phares en position "forts". Soit 7 au total.

 Lights ( 7          <- nombre d'effets lumineux
   Light (
		Type ( 1 ) <- phare sur le paysage (1 seul cône de lumière possible)
   	   comment ( cône de lumière )
            Conditions (
		    Headlight ( 3 ) <- allumé si touche H deux fois (Fort)
   		 Unit ( 2 ) <- allumé si véhicule en tête
   		 TimeOfDay ( 2 ) <- allumé uniquement de nuit
   		)
		Cycle ( 0 ) <- cycle entre les différents états possibles du feu
   	   FadeIn ( 0.5 )  <- allumage progressif
   	   FadeOut ( 0.5 )
		States ( 1    <- 1 seul état
   		State (
			Duration ( 0.0 )
			LightColour ( ffffffff ) <- couleur sur 4 octets en hexadécimal : alpha, R, G, B
                                                 ffffffff = 255, 255, 255, 255, 255 soit transparent, blanc
   		   Position ( 0.0 3.5 18 ) <- position du feu X,Y,Z sur le matériel
   		   Transition ( 0 )
			Radius ( 4.0 ) <- rayon de la source (simule l'intensité)
   		   Angle ( 15.0 ) <- ouverture du cône de lumière
   			)
		)
	) <- termine la description du premier feu
   Light (  -> nouveau feu
   	   Type ( 0 ) <- phare ordinaire
   	   comment ( Phare droit moyen )
            Conditions (
		   Headlight ( 2 ) <- actif si touche H une fois (Moyen)
   		Unit ( 2 )
		)
		FadeIn ( 0.5 )
		FadeOut ( 0.5 )
		Cycle ( 0 )
		States ( 1
		   State (
			Duration ( 0.0 )
			LightColour ( 80ffffff )
			Position ( 1.40 2.00 7.00 ) phare de droite
   			Azimuth ( 0.0 -5.0 5.0 )  <- faisceau de 10° de large
   		   Transition ( 0 )
			Radius ( 1.0 )
			)
		)
	)
      Light (  -> nouveau feu
   	   Type ( 0 )
      	   comment ( Phare gauche moyen )
      	   Conditions (
		   Headlight ( 2 )
      		Unit ( 2 )
		)
		FadeIn ( 0.5 )
		FadeOut ( 0.5 )
		Cycle ( 0 )
		States ( 1
		   State (
			Duration ( 0.0 )
			LightColour ( 80ffffff )
			Position ( -1.40 2.00 7.00 ) phare gauche
   			Azimuth ( 0.0 -5.0 5.0 )
      		   Transition ( 0 )
			Radius ( 1.0 )
			)
		)
	)
   Light (
		comment( phare gauche "fort" )
		Type ( 0 )
		Conditions (
			Headlight ( 3 )
			Unit ( 2 )
		)
		FadeIn ( 0.5 )
		FadeOut ( 0.5 )
		Cycle ( 0 )
		States ( 1
		   State (
			Duration ( 0.0 )
			LightColour ( ffffffff )
			Position ( -1.40 2.00 7.00 )
			Azimuth ( 0.0 -5.0 5.0 )
			Transition ( 0 )
			Radius ( 1.0 )
			)
		)
       )
   Light (
		comment( phare droit "fort" )
		Type ( 0 )
		Conditions (
			Headlight ( 3 )
			Unit ( 2 )
		)
		FadeIn ( 0.5 )
		FadeOut ( 0.5 )
		Cycle ( 0 )
		States ( 1
		   State (
			Duration ( 0.0 )
			LightColour ( ffffffff )
			Position ( 1.40 2.00 7.00 )
			Azimuth ( 0.0 -5.0 5.0 )
			Transition ( 0 )
			Radius ( 1.0 )
			)
		)
       )
	Light (
            comment( feu arrière gauche )
            Type ( 0 )
            Conditions (         
                  Headlight ( 0 ) <- toujours allumé
                     Unit ( 3 ) <- s'il n'y a rien derrière
                     Control ( 2 ) <- et qu'on le conduit
               )
            FadeIn ( 0.5 )
            FadeOut ( 0.5 )
            Cycle ( 0 )
            States ( 1
               State (
                  Duration ( 0.0 )
                  LightColour ( 80ff0000 )
                  Position ( -1.3 2.0 -7.0 ) <- X négatif et Z négatif
                     Azimuth ( -200 -180 -160 )
                  Transition ( 0 )
                  Radius ( 0.5 )
               )
           )
      )
	Light (
            comment( feu arrière droit )
            Type ( 0 )
            Conditions (         
                  Headlight ( 0 )
                  Unit ( 3 )
                  Control ( 2 )
            )
            FadeIn ( 0.5 )
            FadeOut ( 0.5 )
            Cycle ( 0 )
            States ( 1
               State (
                  Duration ( 0.0 )
                  LightColour ( 80ff0000 )
                  Position ( 1.3 2.0 -7.0 ) <- X positif et Z négatif
                     Azimuth ( -200 -180 -160 )
                  Transition ( 0 )
                  Radius ( 0.5 )
               )
           )
      )
   
   
   )
   


Pour avoir une machine électrique ou diesel dont les feux vont commuter selon le sens de marche... Il n'y a pas de solution "propre" : l'usage sur certains modèles est de ne pas utiliser les deux positions d'éclairage "moyen" et "fort" mais de les transformer en "marche avant" (1 fois touche H) et "marche arrière" (2 fois touche H). Les séquences Light correspondantes seront donc :

En position AVANT (1 fois H)
Pour les phares avant

		Light (
            comment ( faisceau des phares avant  )
			Type ( 1 )
			Conditions (
				Headlight ( 2 )  <---
   				Unit ( 2 )
				TimeOfDay ( 2 )  <--- uniquement "de nuit"
   			)
			Cycle ( 0 )
			FadeIn ( 0.5 )
			FadeOut ( 0.5 )
			States ( 1
				State (
					Duration ( 0 )
					LightColour ( ffffffff)
					Position ( 0.0 1.58 5.0 )
					Transition ( 0 )
					Radius ( 300.0 )
					Angle ( 10.0)
				)
			)
		)

 

            Type ( 0 )
            Conditions (         
                  Headlight ( 2 ) <-
                     Unit ( 2 )
                  Control ( 2 )
            )

Pour les feux arrières rouges

            Type ( 0 )
            Conditions (         
                  Headlight ( 2 )
                  Unit ( 3 )
                  Control ( 2 )
            )
   

En position "Réversibilité" (2 fois H)
Faisceau des phares en réversibilité

		Light (
			comment ( faisceau des phares arr )
			Type ( 1 )
			Conditions (
				Headlight ( 3 ) <--
   				Unit ( 3 )
				TimeOfDay ( 2 )
			)
			Cycle ( 0)
			FadeIn ( 0.5)
			FadeOut ( 0.5)
			States ( 1
				State (
					Duration ( 0 )
					LightColour ( ffffffff)
					Position ( 0.0 1.58 -300.0 )  <--- source placée 300m en arrière
   					Transition ( 0 )
					Radius ( 300.0 )
					Angle ( 10.0)
				)
			)
		)


Les phares blancs "arrières"

            Type ( 0 )
            Conditions (         
                  Headlight ( 3 ) <-
                     Unit ( 3 )
                  Control ( 2 )
            )

Pour les feux rouges "avant"

            Type ( 0 )
            Conditions (         
                  Headlight ( 3 )
                  Unit ( 2 )
                  Control ( 2 )
            )
   

...

Attention : La modification MSTSBin 1.6 ou 1.7 (Bin Patch) apporte des compléments importants pour la gestion des feux en réversibilité. Pour ceux qui sont intéressés, lire le mode d'emploi.


Éclairage des cabines et des rames
Les directives précédentes s'appliquent aux feux extérieurs des matériels et rien n'est prévu pour les éclairages intérieurs. Ceux-ci doivent être simulés par le concepteur du modèle qui affectera aux parties intérieures du modèle un matériau "lumineux" la nuit. Sous MSTS ces matériaux prédéfinis sont du type "HalfBright" ou "Bright" : ce dernier étant réservé à la simulation de panneaux et autres sources lumineuses. On affectera donc aux polygones les matériaux SolidHlfBrgt, TransHlfBrgt ou AlphHlfBrgt en ayant bien pris soin de rendre les fenêtres transparentes évidemment.

Tout ceci explique pourquoi il est très rarement possible de rendre un matériel éclairé de nuit si cela n'a pas été prévu par le concepteur du modèle.


* ce document est essentiellement une traduction adaptée et complétée du document original fourni avec le jeu MSTS "How_To_Specify_Lights.doc" dans le dossier "Techdoc" des CDROM du jeu.

 

 © 2002-2009 - PG - Mise à jour 28 février 2009