Jump to content

Trainz/AM&C/Texture file

From Wikibooks, open books for an open world
logo
Trainz Asset Maintenance and Creation

Trainz Annotated Reference Pages
TOC | BeginningsFun | AM&C | Creation | InBook Refs ORP Refs:  • Index • Containers • Kinds • Tags | Appendixes  • Vers
 Glossary
 HKeys-CM
 HKeys-DVR
 HKeys-SUR
 HKeys-WIN
 Mouse use
 Notations

Main article: Trainz/references/texture.txt file (This page should be merged-to if more detailed, and otherwise rewritten as primer and introduction, both (and firstly) for error fixing and then for simpler forms of content creation.


Scope: This guideline applies to each of the following Trainz type specifications:

KIND Texture, KIND Groundtexture, , , and the thumbnails container.
Related data types: "Texture-variants"_container "Texture-variants" container (asset provides alternative material configurations for the texture to display as seasonal variants.)

 

Description

[edit | edit source]

Trainz Texture files are ASCII text format specification files describing a single texture (per N3V's article names[note 1]) or in common usage, a Trainzer might be referring to the graphics formatted files such a texture.txt file controls. These texture.txt files are not the compressed .texture files which are binary generated as described below, but like the graphics texture images, become one component of a pair of files forcibly married and compacted in a Auran format, the resultant '.texture file' which is constructed by CM when the asset is committed. These are sometimes visible when the asset is opened, especially when it is a new clone.

Texture files have a ".texture.txt" name extension, however when a texture file is specified within a config.txt file, the ".txt" must be omitted, leaving just the ".texture" extension in the tag data value field. (This looks odd and seems counter-intuitive, but to Trainz, '.texture' implies '.texture.txt', and the latter form (which is the Operating System format) is understood when CM manipulates the data, but is not when TrainzUtil, Driver, Railyard, or Surveyor use the committed and processed ready to use data. (TrainzUtil is a background process which does many data base operations commanded by the other Trainz modules.)


  Files with *.texture.txt suffix and extension are used to configure texture behavior in Trainz. These files may also control how textures are processed by Content Manager. These files are located in the same folder as the source texture files, typically .bmp, .tga or .jpg files (and .png's in TANE), and make 'pathspec connection' reference to them. Fixing these pathspecs is often the only tweak a faulty asset requires, as after TS09, more stringent file references were demanded by the software. These texture.txt files are generated automatically by the respective 3D graphics software exporter or importer utilities from the CC's asset source folders but may be edited by hand when specialization of effects they control is required—which is an occasional need in repairing faulty content.

File format

[edit | edit source]

The user-editable *.texture.txt files are ASCII text formatted key-value pairs with the following options. Please note that this format is not the same (despite some similarities) as other text-based formats used by Trainz. Please be aware of the filename character restrictions when naming texture and image files.

Syntax

Each token is specified on a new line. There is no white space on either side of the '=' sign. A empty value is sometimes valid. The syntax is:

<token>=<value>
Example
Primary=WayCoolTexture.tga
Alpha=WayCoolTexture.tga
Tile=st
AlphaHint=masked
Anisotropy=16
MagFilter=linear
MinFilter=linear
MipFilter=linear

(Example only, not recommended settings)


Tokens and Values

[edit | edit source]
Primary=diffusemap.bmp

This tag specifies the filename of the image file representing the color (R, G, B) channels of the texture. Any alpha channel in the image file is ignored. The resultant texture will have a pure white (100%) alpha channel.

Primary, diff Alpha

[edit | edit source]
Primary=diffusemap.jpg
Alpha=diffusemap.bmp

This tag combination specifies the filenames of the image file representing the color (R, G, B) channels of the texture and the image file representing the alpha (A) channel of the texture. The alpha channel image should be grayscale. Neither file should contain an alpha channel.

Primary, same Alpha

[edit | edit source]
Primary=diffusemap.tga
Alpha=diffusemap.tga

This tag combination specifies the filename of a single image file representing the color and alpha (R, G, B, A) channels of the texture. In this case both tags must reference the same filename. The image file must contain an alpha channel.

Compression

[edit | edit source]
Compression=dxt1

This tag forces the usage of a particular texture compression scheme. If omitted, Trainz will choose an appropriate texture compression scheme based on the contents of the supplied image files. If you don't have a specific effect in mind, don't include this tag. Valid options are 'none', 'dxt1', 'dxt3', 'dxt5'. Refer DXT Compression.

NormalMapHint

[edit | edit source]
NormalMapHint=normalmap

The 'NormalMapHint' tag allows the texture to be specified as a normal map. By default, Trainz will assume that your texture is a diffuse map and will apply some processing options which are not appropriate for normal maps. You must specify this option for normal maps. Valid options are 'none' and 'normalmap'.

ModifyMap

[edit | edit source]
ModifyMap=flipgreen

The 'ModifyMap' option allows a texture's green color channel to be flipped. Some programs such as 3ds Max create normal maps with the Y axis facing the opposite way to what is expected by the Trainz shaders. This option can be used to make the bump effect look correct in Trainz. The option is applied by the Content Manager upon Commit. Valid options are 'none' and 'flipgreen'.

AlphaHint

[edit | edit source]
AlphaHint=opaque

The 'AlphaHint' tag allows you to force a particular alpha mode on the texture. Valid options are 'opaque' (meaning that the alpha channel is unused and effectively pure white), 'semitransparent' (meaning that the alpha channel is a grayscale blend) and 'masked' (meaning that the alpha channel is a pure black&white bitmap.) If omitted, Trainz will supply an appropriate value for this tag based on the Alpha channel. Specifying this option prevents slight discoloration in a mask texture from triggering the blended alpha path.

Anisotropy

[edit | edit source]
Anisotropy=1

Anisotropic sampling quality. The higher the number, the better the visual quality but at significant performance cost. Where texture quality is needed specify a higher value. Trainz currently defaults to Very High anisotropic filtering, which is then subsequently restricted by the in-game Anisotropy slider. Valid values are integers "1" (default) - No anisotropic filtering, "2" - Low, "4" - Medium, "8" - High, and "16" - Very High

MagFilter

[edit | edit source]
MagFilter=linear

Controls the filtering style for texel magnification. This is used when a texel is displayed at larger than real size (eg. a single texel is represented with more than a single pixel.) Valid settings for the magnification filter are 'nearest', 'linear', and 'default'. Trainz currently defaults to linear interpolation. Selecting 'nearest' will use a nearest-neighbor filtering mode which results in a "pixelated" output.

MinFilter

[edit | edit source]
MinFilter=linear

Controls the filtering style for texel minification. This is used when a texel is displayed at smaller than real size (eg. a single pixel is represented with more than a single texel.) Valid settings for the minification filter are 'nearest', 'linear', and 'default'. Trainz currently defaults to linear interpolation. Selecting 'nearest' will use a quantized filtering mode which results in a "noisy" output.

MipFilter

[edit | edit source]
MipFilter=linear

Controls the filtering style for texture mipmap selection. Mipmaps are used during minification to help prevent the moire effect pattern. The cost of using mipmaps is that the resultant image will blur slightly. The benefits of using mipmaps are reduced quantization noise and reduced memory footprint (since the higher detail mip levels can be unloaded when not in use.) Valid settings for the mip filter are 'nearest', 'linear', 'default' and 'none'. Trainz currently defaults to trilinear interpolation. Selecting 'nearest' will cause the hardware to select a single mipmap for each pixel, which results in visible banding at mipmap boundaries. Selecting 'none' will disable mipmaps, resulting in lower performance, higher memory usage, and "noisy" output.


Tile=st

Tiling refers to the ability for texture coordinates outside the range of (0.0 .. 1.0) to be treated as valid coordinates on an infinitely tiled texture. With tiling active, coordinates which pass the right/bottom side of the texture effectively wrap back onto the left/top side, and so on. Valid options include 's' (tile horizontally), 't' (tile vertically), 'st' (tile both horizontally and vertically), and 'none' (do not tile the image).


Comments & Suggestions

[edit | edit source]

The token Hint is intended for internal use only, but has been used and abused by well meaning people since its discovery. Anisotropy should be used to improve texture quality, and MipFilter=none should be used to disable mip mapping only for interface textures.


Image formats

[edit | edit source]

The following image formats are acceptable as source data for the Texture file:

  • Targa (.tga) files. Targa is a lossless image format with optional compression and optional alpha channel.
  • JPEG (.jpg) files. JPEG is a lossy image compression format with no alpha channel support.
  • Windows Bitmap (.bmp) files. BMP is a lossless image format with no compression and optional alpha channel.

These images in association with the appropriate *.texture.txt file are used by Content Manager to create the Auran/N3V binary textures (*.texture files, no other extension!) that are used in the Trainz simulators. The N3V binary textures use and contain image LOD information.

  • All built-in content has only N3V binary textures that cannot be opened with normal imaging software. Appropriate tools to view these can be found on the page.

Any image larger than 2048x2048 will be resized to that maximum, so there is no point in using images larger than that in the asset. It is preferable to resize your images using your preferred resampling option in your favorite image editing program than to allow Content Manager to resize the image. In practice, images should be no larger than needed to provide the appropriate level of detail at the closest typical viewing distance. Uniform-color images should be as small as possible - certainly no larger than 16x16.

Notes on Image Editors

[edit | edit source]
  • The Targa Exporter plugin shipped with some older versions of Adobe Photoshop is broken and silently corrupts or discards alpha channels; a free update is available which resolves this issue.
  • Some image editors do not support alpha channels on BMP files.


.txt file extension

[edit | edit source]

Texture files have a ".texture.txt" name extension, however when a texture file is specified within a config.txt file or similar, the ".txt" must be omitted, leaving the ".texture" extension. For example, a texture file named grass.texture.txt is specified in a kind groundtexture config file using the syntax texture "grass.texture".

Use of image files in place of texture files

[edit | edit source]

Trainz has historically supported using any supported image file type in place of a Texture file. This technique has obvious limitations and is no longer recommended.


Notes

[edit | edit source]
  1. The TrainzOnline wiki has both the titles 'Texture File' and 'texure.txt file' as topic titles, and an edit made by Chief programmer Chris Bergman indicates he'd prefer the two pages be merged. In truth, the information in both is pretty much identical, so we replicate it herein on the texture.txt file page and just note the dual location of source 'authority' exists, and has done so for a very long time.