The L3DT mosaic master file (*.mmf) is an ASCII file that describes the size and number of map files within a mosaic map.
A typical MMF might look like this:
L3DT Mosaic master file #MosaicName: Alpha1 #MosaicType: RGB #FileExt: bmp #nPxlsX: 4096 #nPxlsY: 2048 #nMapsX: 8 #nMapsY: 4 #SubMapSize: 512 #HorizScale: 1.00 #TileState: 0 OK #TileState: 1 OK #TileState: 2 OK #TileState: 3 OK #TileState: 4 OK #TileState: 5 OK #TileState: 6 OK #TileState: 7 OK #TileState: 8 OK #TileState: 9 OK #TileState: 10 OK #TileState: 11 OK #TileState: 12 OK #TileState: 13 OK #TileState: 14 OK #TileState: 15 OK #TileState: 16 OK #TileState: 17 OK #TileState: 18 OK #TileState: 19 OK #TileState: 20 OK #TileState: 21 OK #TileState: 22 OK #TileState: 23 OK #TileState: 24 OK #TileState: 25 OK #TileState: 26 OK #TileState: 27 OK #TileState: 28 OK #TileState: 29 OK #TileState: 30 OK #TileState: 31 OK #EOF
For L3DT to load a mosaic map, it must know where to put it. Thus the MMF includes a member called MosaicName, which is a string that identifies the map into which the mosaic will be loaded. Below are listed the MosaicNames recognised by the L3DT mosaic-loader:
| Name | What is it? |
|---|---|
| “DM” | The design map |
| “HF” | The heightfield |
| “WM” | The water map |
| “WS” | The salinity map |
| “AM” | The attributes map |
| “TN” | The terrain normals map |
| “LM” | The light map |
| “SH” | The shadow map |
| “TX” | The texture map |
| “Alpha_1/2/etc” | The alpha maps |
If the map is not intended to be used by L3DT's calculations, then the MosaicName can be anything you like.
The MosaicType member specifies how the data should be interpreted when loading. Valid types are listed below:
| Type | What is it? |
|---|---|
| “HF” | A heightfield |
| “WM” | A water map |
| “AM” | An attributes map |
| “TN” | A terrain normals map |
| “BYTE” | An 8-bit map |
| “WORD” | A 16-bit map |
| “RGB” | A 24-bit image map |
| “RGBA” | A 32-bit alpha-masked image map |
| “DWORD” | A generic 32-bit map |
| “LM” | A light map (legacy; now use “RGB”) |
| “TX” | A texture map (legacy; now use “RGB”) |
| “24bit” | A texture map (legacy; now use “RGB”) |
Please not that while the MosaicType string is often the same value as the MosaicName string, this is not the case in general. For example, the heightfield has a name of “HF” and a type of “HF”, while the salinity map has a name of “WS” and a type of “HF” (the salinity map is actually stored as a heightfield within L3DT).
The following mosaic tile file extensions are supported:
| FileExt | What is it? |
|---|---|
| hff | An L3DT heightfield file |
| hf2 / hfz / hf2.gz | An L3DT compressed heightfield file |
| ter | A Terragen terrain file |
| wmf | An L3DT water map file |
| amf / amf.gz | An L3DT attributes map file |
| bmp | A bitmap image |
| jpg | A JPEG image |
| png | A PNG image |
| tga | A TGA image |
| dds | A DDS image |
| raw | A raw binary file |
| x | A DirectX mesh file (export only). |
| obj | A Wavefront OBJ mesh file (export only). |
The width of the map is given by nPxlsX, and the height by nPxlsY. Both are measured in pixels.
nMapsX and nMapsY state the number of mosaic tiles in the x and y axes, respectively. In the above example, the mosaic is an 8×4 grid of tiles, for a total of 32 tiles.
The SubMapSize value describes the side-length of the tiles in the mosaic, and is measured in pixels. A mosaic tile is always square.
The HorizScale member specifies the 'real-world' pixel-spacing of the map, and is measured in metres/pixel.
It is possible that some tiles in a mosaic will be missing. For example, the water map will not save tiles in which no water has been flooded. A list of TileStates are included in the MFF to specify whether tiles are present or absent. The syntax is:
#TileState:<tab>[TileIndex]<tab>[TileState]
Where TileIndex is the linear index of a tile, given by y × nMapsX + x, and TileState is a string that is either “OK” (the tile is present) or “FREE” (the tile is absent). Pixels in absent tiles are assumed to have a value of 0.
The ordering of tiles in a mosaic map is explained on the mosaic algorithms page.