Hi All,
As part of the work on scaling up VirtualPlanetBuilder to comfortable
handle terrabyte database I am also working on osgTerrain, the two
bits of work are quite closely related as VPB is at its most efficient
when outputting osgTerrain based databases (the --terrain option makes
it about 100-200x faster than it is when build normal polygonal
databases). Not only VPB is faster when generating osgTerrain
based databases but the resulting databases will be more flexible and
compact, with future opportunities for improving visual quality and
performance. So all good stuff... but before we get to this terrain
nirvana a few things will need to be refactored...
My current work on osgTerrain is related to making better use of
recycling of deleted objects and sharing of things like tex coord
arrays etc where possible. This is something that now is required to
better cope with users charging around a multi-terrabyte database at
high speed - as it tends to push memory much more than we're
previously done. Recycling and sharing of object requires a shared
container for each paged terrain database, to this end I'll be
introducing a new terrain node that decorates the whole paged terrain
database. This new terrain node will also help track the hierarchy
and adjancancy of the tiles being loaded via a tile system.
The idea of a terrain node containing all the PagedLOD nodes, and the
terrain tiles that do the actual rendering of the tiles height fields
brings about a new relationship to osgTerrain, and the the naming
really needs to evolve to better suit it, unfortunately with picking
more suitable names of the new usage model we'll end up break strict
backwards compatibility. osgTerrain is still young, so I'd rather
take the pain of hit in backwards compatibility now rather than suffer
inappropriate names for the rest of the NodeKits life. The new
naming scheme goes:
osgTerrain::Terrain node is renamed osgTerrain::TerrainTile,
osgTerrain::TerrainTile API and usage model remain almost
entirely the same as the old osgTerrain::Terrain so most developers
would just
need to rename osgTerrain::Terrain to
osgTerrain::TerrainTile and then everything will compile once more.
The new terrain node that decorates the whole terrain scene graph
will be called osgTerrain::Terrain,
The API of the new Terrain node will have some overlap
with TerrainTile, such as provide a default TerrainTechnique that
nested TerrainTile has
clone, but otherwise its a totally different type of Node,
its a decorator node rather than a rendering element.
Reusing an original name might cause initial confusion,
and compile errors might through one off the scent. But... I feel
that once things
are settled down the new naming will be more sense i.e.
The a Terrain has subgraph that contains one or more TerrainTile.
Each Terrain is
conceptually a single overall block of terrain, for
instance if you have a solar system, then each planet would be its has
its own Terrain
node.
All the Layer and TerrainTechnique classes remained unchanged relative
to recent 2.3.x, although these themselves have evolved since 2.0.
Existing .ive database that contain old osgTerrain::Terrain(Tile)
objects will still load, so backwards compatibility has been
maintained, with the objects just loading as TerrainTile and
everything behaving itself as before. The .osg format won't be able
to be mapped so well unfortunately, to keep .osg files with Terrain
nodes in them working you'll need to do a search a replace of Terrain
to TerrainTile.
In my local copy of the OSG I've already made most of these changes,
and plan to check them in tomorrow. At this point if you directly use
osgTerrain then you'll need to rename Terrain to TerrainTile to get
things back working again, if you don't use osgTerrain then you'll not
notice any different at all.
Thanks in advance for you patience in tracking these changes,
Robert.
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org