The terrain engine is designed to model exterior (outside) environments efficiently both in a time and space sense. The terrain engine is capable of modeling arbitrarily large landscapes with arbitrary levels of resolution. Functionally, the engine is fast, while providing an image which is uniformly accurate both near and far. The engine uses a mesh based engine, with several modifications that are discussed in the technical section.
Traditional terrain modelers use a mesh approach, where each point on a uniform grid is given a height and the resulting surface is drawn. There are several shortcomings of this model, both in space and time complexity. All modeling is done explicitely, so to model a 1000km x 1000km patch, with accuracy to the square meter would require 10^12 data points, roughly on the order of a terabyte of data. This is certainly unfeasible for common applications. A second problem is that with such a resolution, even if the render only considered a 10km x 10km subpatch, some 100 million data points would need to be processed. This prohibits any form of interactivity with rendering current harware.
To skirt the space complexity issue, the terrain engine does not explicitly model a terrain. Rather, there is a predetermined coarse resolution at which the terrain is modeled, and from which the engine then intelligently interpolates based on the type of terrain. To create a terrain, a user will model the terrain at this high level, leaving the engine to model the rest. This removes a good deal of control on the low level. We counter this by introducing a manner of overwriting interpolated points with customized terain data. As a further addition, the user can give each point a psuedorandom seed which is used in the creation of the terrain. This seed only affects the terrain locally so that a user can sculpt terrain in a particular area without being forced to address a large amout of points.
Traditional mesh approaches to modeling terrain suffer from constant resolution. If the resolution is high, the models take a long time to render. If the resolution is too small, locally detail looks very poor. The terain engine instead employs a dynamic mesh approach. A dynamic mesh is a mesh which does not have constant resolution, nor really a constant form. The mesh changes as the viewpoint changes, adapting to provide high resolution where required and low resolution where accuracy is not required. The overhead of a dynamic mesh lies in the mesh updating. A naive approach would scan each line in the mesh to determine if certain criteria for decimation were satisfied. The only criteria that the terrain engine uses is that of distance, which allows us to enhance this technique. We can create "horizon" of points for each level of resolution which represent the points lying on the boundary of subdivision. When the view point moves, we only need to consider the points around this horizon.
The terrain engine is design with scalability in mind. Once a terrain has been modeled at the coarse level, parameters to the renderer control how precise the refinement will be interpolated. As well, the viewer can control the range of resolution, that is the distance from the viewpoint for which a certain resolution is used. Thus, the user can control the frame rate and accuracy to their preferences. A more advanced implementation of the renderer would adjust such parameters on the fly to generate a constant framerate.
The terrain engine at present only handles the resolution based surfaces. To further flesh out the terrain, rivers, roads, and trees should be added. Considerations have been made to their addition and all that should remain is the work. The engine should also be intergrated with the VLP Engine to allow static objects to exists in the terrain. Likewise, such considerations have been made, but not yet implemented.