Tony,
While exploring the rather mixed bag of assets with various TBs and categories clutched up by a "package" I came across a multitude of assets that are missing a tag at TB 4.6 that CM declares as faulty.
This from a KIND Scenery Ground Cover Stones 1b Auran TB 4.6
Extract from config.txt
mesh-table
{
lod1n
{
mesh-asset <kuid:661281:97517>
mesh "Stones1Clod1n.trainzmesh"
auto-create 1
lod-level 0
mesh-season 0
}
}
custom-category-list "FXCLT"
kuid-table
{
0 <kuid:661281:97517>
}
Extract from fault status of a similar asset
; <kuid2:661281:97520:1> : Validating <kuid2:661281:97520:1>
- <kuid2:661281:97520:1> : VE60: Required tag 'mesh-table-lod-transition-distances' was missing and has been set to
default.
This is quite a common fault from many creators, including Auran, when upversioning to TB 4.6 or above. Up to this TB it was a warning only.
Here is the extract from validation inheritance.txt mesh-object
mesh-table-lod-transition-distances
{
kind value
type floatlist
compulsory 4.6
minimum-version 4.6
default 100.0
}
The above is the culprit. See article at Trainz Content Creation at end of this post. It is still shown as 'compulsory 4.6' in validation yet intent is to be optional at TB 4.6. Yet we are now at TB 4.8 in Trainz Plus and causing hundreds of false faulties.
I trialled a default tag:
mesh-table-lod-transition-distances "1000"
which satisfied CM and displayed the image in Preview Viewer.
Apart from the fact that creators need to be reminded to include this tag, it then needs some guidance on what are optimum or typical ranges of values.
Extract from Wiki:
mesh-table-lod-transition-distances
The "mesh-table-lod-transition-distances" tag (float array) determines the distances in meters at which each mesh-table LOD level ends. This means that there is effectively one more mesh-table LOD than entries in this array. With an empty array (i.e. to tag value), no mesh-table LOD is used. With three values in the array, four mesh-table LOD indices are used (ie. 0, 1, 2, 3). For small objects, it may be appropriate to not provide any meshes for the final mesh-table LOD index, effectively giving some number of meaningful LOD variants and a final "null" LOD where no rendering occurs.
This is used in conjunction with the "lod-level" tag in the "mesh-table" Container. Note that mesh-table LOD is an entirely separate concept from LM.txt file format LOD. You should not attempt to configure the LM.txt transition distances using this tag. It is, however, possible to combine the effects.
This tag does not override user settings for draw distance and scenery detail. If a LOD transition takes place beyond the master draw distance for that object type, it will never be visible. Furthermore, at lower detail settings the LOD ranges may be adjusted to be more aggressive than specified by the content creator.
The validation default only masks the issue and does little to get the LOD Transition Distances optimised for the supplied LOD meshes.
The following is a rather simplistic view for custom-category-list that I was about to trial in TARDIS as a default value.
However it applies to all LOD meshes.
;
;xxxxxxxxxxxxxxxxxxxx
;
CUSTOM-CATEGORY-LIST - LOD TRANSITION DISTANCES
;
xxxxxxxxxxxxxxxxxxxx
;These are default values.
;Creators need to optimise.
;Note that at LOD 0 I shouldn't need this tag.
;
-If|custom-category-list@
;
-Update|mesh-table-lod-transition-distances|1000
;
-Category|category-keyword|_LOD_Transitions
;
-Else
;
;do nothing
;
-Endif
;
;But then what about multiple LOD Levels and different types of objects besides ground cover.
;CM will fault the default value if there are LOD Levels.
Aha! At the Trainz Content Creation website:
;
Controlling LOD Distances
;
As content quality and fidelity improve over time and in-game objects look more and more realistic, it becomes increasingly important to ensure the Level of Detail (LOD) is carefully managed.
Imagine the performance impact of a very high resolution asset that doesn’t reduce in complexity when it apears as a few pixels on screen.
In the current Trainz, the game decides when to reduce LOD. In the next version of Trainz, we’re providing the Content Creators the power to customise and control when each LOD cuts in. This gives more flexibility to allow more aggressive scene reduction
;

;
We’ll be introducing a new config.txt tag (“mesh-table-lod-transition-distances”) to control the distance at which the LOD transitions occur.
The use of this feature replaces the “mesh-detail-level-count” and “maximum-lod-distance” tags, which will be obsolete as of v4.6 (the expected trainz-build number for our next Trainz product).
The “mesh-table-lod-transition-distances” tag will be optional as of v4.6 and if used must contain a float array specifying the end distances for each LOD level. If this tag is omitted, then no mesh-table LOD is used.
This is suitable for low-detail scenery assets and for LM-only assets such as train vehicles or Carz.
;
Example:
;
mesh-table-lod-transition-distances 10.0, 30.0, 150.0, 1000.0
This example specifies 5 mesh-table LOD levels.
The first (LOD 0) ranges from 0.0m to 10.0m.
The first (LOD 1) ranges from 10.0m to 30.0m.
The first (LOD 2) ranges from 30.0m to 150.0m.
The first (LOD 3) ranges from 150.0m to 1000.0m.
beyond this the asset won’t be rendered.
;
Practical Example:
;
Here is an example of an in-game asset that has LOD versus one that doesn’t.
On the left we are showing <kuid2:134105:28049:1> Terrace 1 – LOD
On the right we are showing <kuid:134105:28041> Terrace 1
;
;
With LOD implemented, the creator Paulzmay reduces the house from 168 polygons to just 14 at the lowest LOD.
So with 32,000 of these items loaded (using the “Performance Anaysis” option in Preview Asset) we see that the LOD version requires just 22,644 polys and 9 draw calls versus a mammoth 1,666,224 polys and 53 draw calls for the no-LOD version. That’s 80x less polys
In the image below is a beautiful street lamp. The closeup view shows how detailed this item really is. However, in the distant view, with no-LOD, each lamp is still being drawn with all 2,780 polygons per lamp, even when the item is a single pixel wide on screen. So now the scene is rendering over 12 Million polys!
;

;