Archive for the 'Renderer' Category

Vector Vectoria

3D GIS applications often render 2D vector data, like roads, rivers, and country boundaries onto the landscape.  Techniques for combining 2D features with 3D terrain are generally either texture or geometry based.  Both have their issues.  In this blog entry, I'm going to give a short preview of Insight3D's approach.

A few years ago for STK, we developed a method using shadow volumes.  A long thin box is created that represents, for example, a road.  The bottom of the box is below the terrain and the top is above.  The terrain is colored where the box intersects the terrain forming a line.  Two papers were recently written that describe this method:  Efficient and Accurate Rendering of Vector Data on Virtual Landscapes  and Rendering 3D Vector Data using the Theory of Stencil Shadow Volumes.

While both papers describe how to determine the height of the box, they do not describe how to determine the width.  If they keep the width static, as the camera moves away from the line, the line will disappear.  In STK, we use a vertex shader to dynamically modify the width based on the camera's field of view and distance from the line to keep the line a user defined width in pixels.

This method has two issues.  Lines breaks up from certain viewpoints as seen in the left image of fig. 1.

Figure 1

Also, lines smear down the side of steep terrain, such as on mountainsides.  The left image of fig. 2 shows a line that is supposed to be one pixel wide.

Figure 2

We have been working on a new lines on terrain method for Insight3D to eliminate these issues.  The right images of figs. 1 and 2 show the new method.  The line is not broken and remains one pixel wide over the mountainside.

Research into this method is ongoing.  We hope to add the ability to create patterned lines, like dashed and dotted lines.  We'd like to apply this method to create altitude contour lines.  We are also working on a line level of detail system to allow Insight3D to render massive amounts of 2D vector data.

There you go - a short preview of current research we are doing.  Sometime in the future, we expect to describe the new method in detail.

Precisions, Precisions

Rendering objects over large distances is common for geospatial programs, and when done incorrectly, the objects may visually jitter.  Here, an object is made up of any combination of triangles, lines, and points, like a 3D model.  The problem becomes more noticeable as the viewer nears the object.  The following video demonstrates this using STK.  (Note that I had to modify STK as it does not ordinarily exhibit jitter.)

Rotating about the space shuttle from far away, there is no jitter.  After zooming in, the jitter is readily apparent.  In this blog entry, I'll discuss the cause of this problem and the solutions used in Point Break and STK.


Introducing Primitives

In Point Break, primitives form the building blocks of a 3D scene. Developers create primitives and initialize them with information, such as position and attitude. Primitives then take care of all the 3D rendering (drawing) and optimizations, allowing developers to focus on their application code.

An abridged set of primitives planned for Point Break include:

  • Models – Support for the industry standard COLLADA format and AGI’s MDL format.
  • Markers –2D images that always face the viewer and remain a constant pixel size. Markers are commonly used to visualize a large number of tracks moving in real-time.
  • Polylines – Used for rendering lines on the ground or in space. Polylines are used to visualize many things including country borders, drop lines, range rings, and access lines. Polyline variants can conform to terrain when drawn on the ground.
  • Triangle Meshes – The rendering workhorse for things such as area targets (e.g. states or countries), terrain and imagery extents, ground ellipses, and border walls. The surface mesh, a triangle mesh variant, can conform to terrain when drawn on the ground.