LOD was first introduced into Trainz way back in TRS2004. Initially it was used only for locomotives, but ten years later it is recommended for every mesh based asset.
Since TS2009, Trainz has a texture LOD system - it will automatically use a lower mip level of a texture if the object is further away, and will avoid loading mip maps of higher resolution than necessary for a given scene to reduce the memory footprint.
However, some content creators have got into the habit of changing the texture file for each LOD level to a resized copy of the same texture at a lower resolution.
This is unnecessary, and can cause graphical problems. If a creator has copied the texture, resized it to a smaller resolution, and used the smaller copy on the lower LOD level, the LOD change will be more obvious. When the mesh is swapped, a new texture is required. Texture loading happens in the background, so a few frames will pass with only a low resolution copy of the texture available, before the high resolution version is available. The result is the LOD appears to swap down then back up again very quickly at each transition point.
It can also cause increased memory usage. If there is more than one copy of the object in the scene, it is likely that each of the different resolutions will be loaded at once - and Trainz will then be forced to use more texture memory than if the texture had not been changed. And if the LOD doesn't also adequately cut the polygon count, you might even have an object that is less efficient than if it had no LOD at all.
So when you are making a mesh, consider very carefully if you really need to change textures when the LOD levels change. Do not change the texture purely to reduce the resolution, as we do that for you already. Generally you should avoid changing the texture unless absolutely necessary - e.g. if you are moving significant amounts of detail from geometry into texture with that LOD change.
There is an exception to this rule, and that is objects which use alpha transparency. Trainz uses alpha-to-coverage to represent transparent objects. Alpha-to-coverage is fast, and doesn't exhibit the sorting issues that historic versions of Trainz were known for, but multiple alpha blended objects placed behind each other won't stack up to appear as solid as they would if done by the older, slower methods. To counteract this, Trainz generates mip maps of textures with alpha which tend towards being more opaque, so distant objects (e.g. old format trees) don't fade to translucent shadows at extreme range.
The catch here is that some objects do need to fade out in the distance to look realistic. The classic example would be a lightweight fence, e.g. a mesh or barbed wire fence.
A conventional approach with a high resolution texture results in this appearance:

Looks great close up, with lots of detail. But as you go into the distance, it gets overly heavy, taking on the appearance of a much more solid 3 bar fence. Eventually it becomes a single black stripe.
In real life, the wires should visually melt away, leaving just the posts clearly visible. To achieve this effect, we use a series of appropriately sized textures to maintain correct appearance over the visible range. Try to keep the texture size to around one texture pixel per screen pixel at the closest end of each LOD level's visibility. This will cause Trainz to use the full size of the texture rather than a lower mip level, and minimise the effect of the alpha becoming more opaque as further mip maps are used.
This copy has had the lower LOD textures resized down in a graphics editing tool to be closer to one pixel per pixel when the LOD is at it's largest. No other changes were made to the content.

Since TS2009, Trainz has a texture LOD system - it will automatically use a lower mip level of a texture if the object is further away, and will avoid loading mip maps of higher resolution than necessary for a given scene to reduce the memory footprint.
However, some content creators have got into the habit of changing the texture file for each LOD level to a resized copy of the same texture at a lower resolution.
This is unnecessary, and can cause graphical problems. If a creator has copied the texture, resized it to a smaller resolution, and used the smaller copy on the lower LOD level, the LOD change will be more obvious. When the mesh is swapped, a new texture is required. Texture loading happens in the background, so a few frames will pass with only a low resolution copy of the texture available, before the high resolution version is available. The result is the LOD appears to swap down then back up again very quickly at each transition point.
It can also cause increased memory usage. If there is more than one copy of the object in the scene, it is likely that each of the different resolutions will be loaded at once - and Trainz will then be forced to use more texture memory than if the texture had not been changed. And if the LOD doesn't also adequately cut the polygon count, you might even have an object that is less efficient than if it had no LOD at all.
So when you are making a mesh, consider very carefully if you really need to change textures when the LOD levels change. Do not change the texture purely to reduce the resolution, as we do that for you already. Generally you should avoid changing the texture unless absolutely necessary - e.g. if you are moving significant amounts of detail from geometry into texture with that LOD change.
There is an exception to this rule, and that is objects which use alpha transparency. Trainz uses alpha-to-coverage to represent transparent objects. Alpha-to-coverage is fast, and doesn't exhibit the sorting issues that historic versions of Trainz were known for, but multiple alpha blended objects placed behind each other won't stack up to appear as solid as they would if done by the older, slower methods. To counteract this, Trainz generates mip maps of textures with alpha which tend towards being more opaque, so distant objects (e.g. old format trees) don't fade to translucent shadows at extreme range.
The catch here is that some objects do need to fade out in the distance to look realistic. The classic example would be a lightweight fence, e.g. a mesh or barbed wire fence.
A conventional approach with a high resolution texture results in this appearance:

Looks great close up, with lots of detail. But as you go into the distance, it gets overly heavy, taking on the appearance of a much more solid 3 bar fence. Eventually it becomes a single black stripe.
In real life, the wires should visually melt away, leaving just the posts clearly visible. To achieve this effect, we use a series of appropriately sized textures to maintain correct appearance over the visible range. Try to keep the texture size to around one texture pixel per screen pixel at the closest end of each LOD level's visibility. This will cause Trainz to use the full size of the texture rather than a lower mip level, and minimise the effect of the alpha becoming more opaque as further mip maps are used.
This copy has had the lower LOD textures resized down in a graphics editing tool to be closer to one pixel per pixel when the LOD is at it's largest. No other changes were made to the content.
