PathEngine home previous: Performance Considerationsnext: 3D Content Processing Options
Contents, Programmers Guide, World Representation, 3D Content Processing, Tiled 3D Content Processing

Tiled 3D Content Processing

Starting from release 5.11 it is now possible to split the 3D content processing source data with a horizontal tiling, process each of these source chunks independantly, and then subsequently recombine the resulting ground pieces (to create either a single world mesh, or a run-time set of 'mesh federation' tiles).

The the 3D Content Processing Demo has been updated to use the new tiled process. You can run the demo to see the new process in action, and browse the source code to see a detailed example implementation of the various steps involved in a tiled 3D content processing setup.

Defining a tiling

The first step is to define a world range, and horizontal tiling, by creating an instance of Interface iSourceTiling.
The tiling object can be queried for things like the number of tiles, and the horizontal range of each tile.

Per tile processing

The next stage in the process is to run the 3D content processing for each tile in the tiling, with a suitable subset of the 3D source data.
All source elements overlapping each tile must be included in the processing for that tile, and where elements overlap multiple tiles, these elements must be presented identically for the processing of each of those tiles (i.e. element geometry and attributes must be identical).
'Element' here means either individual faces, in the case of mesh source data, or individual solid objects, in the case of solid object source data. It's ok to include elements not overlapped by a tile's range, as this will be filtered out. (So the application driving the content processing can chose to filter objects at a coarser level than these elements if desired, e.g. individual scenery objects can be considered based on the total range overlapped by each scenery object.)

Note that elements should be filtered by a slightly expanded range, which can be obtained by calling iSourceTiling::getTileFilterRange(), as opposed to the actual physical range covered by the tile.
This enables PathEngine to ensure that the borders of generated tiles can be matched up correctly.

The processing is performed with the same API methods as standard 'one shot' 3D content processing, but with an additional option passed in to specify the range of the tile being processed.
The source tiling interface includes a method to provide the relevant option, as follows:

iSourceTiling* tiling = SetUpTiling();
const char* options[3];
options[0] = "clipToTile";
options[2] = 0;
tSigned32 tileIndex;
for(tileIndex = 0; tileIndex != tiling->size(); ++tileIndex)
{
    options[1] = tiling->getTileRangeAsString(tileIndex);
    
    //... run 3D content processing for this tile with these options
 
}

Combination of tiled result pieces

Use iPathEngine::buildMeshFromGroundTiles() when you want to generate a single run-time ground mesh.
The 3D content processing demo provides a worked example of this.

Or you can use the following methods (in Interface iMeshFederation) to generate a set of ground meshes for use with PathEngine's 'mesh federations' functionality (this approach enables the 3D content processing to be applied over worlds of effectively unlimited size):

Refer to this page, in the documentation for the mesh federation functionality, for more details about this second possibility.


Documentation for PathEngine release 5.15 - Copyright © 2002-2008 PathEnginenext: 3D Content Processing Options