MXB Track Creation Guide

From PiBoSo Documentation
Jump to navigation Jump to search

Basic Workflow


Heightmap must be 16bpp IBM RAW.
The heightmap dimensions must be a power of 2 +1. 2049x2049 is recommended. Rectangular heightmaps are supported; for example, the straight rhythm heightmap is 4097x257!

Track Data files


samples_x = 2049 (RAW image width)
samples_y = 2049 (RAW image height)
data = heightmap.raw (RAW image filename)

size_x = 480 (track size in meters)
size_z = 480 (track size in meters)
scale = 3.2 (total track height in meters)

num_layers = 2 (number of texture layers)

map = track.tga (for example, the base terrain texture name)
repetitions = 1 (texture tiling)

map = grass.tga (second texure layer name)
repetitions = 50 (if you are using a shader for this texture, this value should match the one in the .shd file)
mask = grass_mask.tga (the alpha channel will be a mask that shows / hides this layer)
thickness = 0.1 (the layer thickness, in meters)

grass (enables 3d grass for this layer)
 max_density = 8
 height = 0.15
 height_diff = 0.1 (randomise the grass height by this much)
 width = 0.2
 width_diff = 0.1 (randomise the grass width by this much)
 texture = grassfx.tga (this map is split into 4 horizontal sections - so 1024x256 is split into 4 separate 256x256 textures)
 densitymap = mask.tga (alpha channel controls the grass density)

scene0 (here you add the scenery model)
name = scenery.edf (name of the scenery model file)
pos (use these values to change the position and rotation of the scenery)
	x = 0
	y = 0
	z = 0
	x = 0
	y = 0
	z = 0

If different texture tiling is needed on the X and Z axes, "repetitions" must be replaced with, for example:

repetitions_x = 1
repetitions_z = 2


samples_x = 2049 (must be the same as value in .hmf file)
samples_z = 2049 (must be the same as value in .hmf file)

data = heightmap.raw (must be the same as value in .hmf file)

size_x = 480 (must be the same as value in .hmf file)
size_z = 480 (must be the same as value in .hmf file)
scale = 3.2 (must be the same as value in .hmf file)

num_surface_layers = 3 (surface layers define different areas on your track)

	surface = off (This defines the offtrack areas)
	mask = area_off.tga

	surface = pit (This defines the pit)
	mask = area_pits.tga

	surface = start (This defines the start gate area)
	mask = area_start.tga

num_material_layers = 3 (material layers define the track physics surfaces. You can also use masks, like in the hmf file)

material_layer0 (the base layer, doesn't need a thickness)
	material = compact soil

	material = soil
	thickness = 0.1

	material = soft soil
	thickness = 0.1

scene0 (here you add the scenery model)
name = scenery.edf (name of the scenery model file)
pos (use these values to change the position and rotation of the scenery)
	x = 0
	y = 0
	z = 0
	x = 0
	y = 0
	z = 0

Material Layers

Due to the dynamic track surface in MXB, bikes will 'dig through' the material layers over time. In the above example, the top layer is soft, loose soil. Just underneath is regular soil, and then the bottom layer is a compact soil. This generally works best as the softer soils erode faster. Each material type has unique grip characteristics, and generates its own particle effects.

Material types:

  • Soil
  • Soft Soil
  • Compact Soil
  • Sand
  • Gravel
  • Grass
  • Rock

Surface Layers

These are used to define areas for the offtrack, pits, and start areas.

  • surface = off: Defines the offtrack areas and is used to calculate the correct long reset lines. Be sure that the offtrack area encompasses all trackside collision objects in order to prevent players from getting stuck inside them after a long-reset.
  • surface = pits: Not strictly necessary, but will reset riders to their pit spot when inside. Also allows for pits camera set. See TrackEd trackside cameras Surface_Params
  • surface = start: Also not strictly necessary, but allows for custom start area camera set. See TrackEd trackside cameras Surface_Params

Terrain Textures & Shaders

Textures must be in TGA or BMP truecolor format. Size must be power of 2 (256, 512, 1024, 2048, 4096). Textures can be rectangle ( for example: 256x512, 1024x64 )

SHD files

These allow you to use specular & normal maps. Must be named the same as the texture it will be applied to (for example, mud.tga & mud.shd)

map = mud_n.tga (normal map filename, specular level must be in alpha channel)
repetitions = 0

shininess = 12 (sharpness of the specular highlight)

Please note that repetitions for the normal map can be manually set here. A setting of 0 will match it with the repetitions in the hmf file, which is usually desired.
Setting repetitions to 1, for example, is useful for having a normal map that covers the entire terrain.
If "repetitions" is missing it is automatically set to 1.


If you want to use a tiled ground texture, you can use a mask to specify on which parts of the terrain it should appear.
The mask MUST BE IN THE ALPHA CHANNEL of the dedicated mask tga. All colour channels are ignored.
Then you can assign it to the correct texture layer in the HMF file:

       map = mud.tga
       repetitions = 50
       mask = mud_mask.tga
       thickness = 0.1

The base layer (layer0) should not have a mask.


scenery.edf should be exported as fbx and converted using FBX2EDF Object collision types are:

  • WLLCONC : Concrete Wall
  • WLLTYRE : Tyrewall
  • WLLHAYB : Hard haybales that stop the bike
  • WLLWIRE : Wire fence

To make an object invisible ( but still collidable ) its name must include the keyword INVISIBLE ( eg: WLLCONCINVISIBLE )

Tarmac surfaces are supported, using either TRKASPH or TRKCONC (less grip)

Soft Objects

'Soft' objects allow the bike to pass through but offer some resistance, which is useful for supercross tracks.

The following options are supported:

  • SOFTHAYB : Soft haybales, that slow the bike
  • SOFTBHAYB : Same but offers less resistance
  • SOFTCHAYB : Even less resistance
  • SOFTPLAS : Soft plastic, eg. cones

Soft objects must all be separate, individual objects. This is because the physics calculates a bounding box around the mesh. For best accuracy, the pivot should be aligned with the object axis.


TerrainEd is a command-line program. It is needed to generate a .map (graphics) file and a .trh (collisions) file. Shadows are generated automatically during the .map export. Arguments:

TerrainEd inputfile outputfile [params]


Here you can change light / shadows settings.

lightdir_x = 2 (position of the sun east)
lightdir_y = 10 (position of the sun up [can be left at 10 usually])
lightdir_z = -7 (position of th sun north)
shadowvolumes_create = 1 (enable shadow volumes generation, turn off for faster exports for testing) 
shadowvolumes_supersampling = 4 (quality of the shadow volumes, can usually be left at 4)
shadowmaps_create = 1 (enable shadows generation, turn off for faster exports for testing) 
shadowmaps_scale = 0.2 (can usually be left at 0.2)
shadowmaps_supersampling = 4 (quality of the shadow volumes, reduce for faster exports)
shadowmaps_terraincast = 1 (the terrain self-casts shadows)
  • Run map.bat to generate a file
  • Run trh.bat to generate a track.trh file

Rename these files to your chosen track name.


  • Open your .trh file in tracked.
  • You will need to create a centerline, merge it, and then save the trh.
  • You must place the pits, starting gates, finish line, and pitboards.
  • You can also place marshals and replay cameras.
  • For instructions on using TrackEd, go here: TrackEd

Environment Sounds

It is possible to place sounds sources around a track, creating a text file with SSC extension in the track folder.

numsources = 3
     data = *crowd.wav
     pos = 0,0,0
     mindistance = 10
     data = *crowd.wav
     pos = 1,1,1
     mindistance = 10
     data = test.wav
     pos = 2,2,2
     mindistance = 5

mindistance is the distance under which volume is the max.
Samples must be in .wav format and mono channel.
The files must be placed in the track folder. If the filename has a * prefix, then the file must be placed in the effects/sounds/ directory.

.amb file

You can adjust the sun position & colour, fog amount & colour, ambient light colour, and sky rotation for all conditions. Open the .amb file in notepad, and use Map Viewer to see the changes. Please note that you should use the same settings for the sun direction in the amb file and the params.ini file. You can use custom skies if desired by exporting your skydomes in .edf format.

Other Files

  • You should edit the .ini file to change the track name, author, location etc.
  • Update the track.tga screenshot and the track_map.tga.
  • In the INI file it is possible to set a paint ( located in the track folder ), for example to change the billboards textures, different for each event type:

if no file is set, "default.pnt" is automatically loaded, if it exists.


All final track files should go in a folder of the same name.
For example, mytrack/

You should have, at minimum, the following files in the folder: (track graphics)
mytrack.trh (track collision)
mytrack.rdf (race data - pits, startgates, finishline etc.)
mytrack.ini (track information)
mytrack.amb (lighting and environment settings)
mytrack_map.tga (map of the track for the UI)
mytrack.tga (screenshot of the track for the UI)
gate.edf (starting gate model)

The gate edf can be copied from the practice track.
To test your track in MXB, copy this folder to your mods\tracks folder

Extra files you should include for final tracks:

marshals.cfg (trackside marshals placement file)
mytrack.tsc (trackside cameras) & (reset lines at the track edges) & (auto-generated for resetting the bike to track)

Distribution & Registration

For distribution, zip up your track folder and rename the zip file to .pkz. The folder must be zipped, not just the files. Now users only need to drop the single .pkz file into their mods\tracks folder.

You can register your track for online records here:

Look in code.txt (in the same folder as your trh file) for your unique track code. You only need to enter 'Prev. Track Code' if you are updating a previously registered track. Once successfully registered, do a couple of laps online and your fastest lap should appear in the records: