Sunday, April 16, 2017

Enhancing visual quality of billboards

For real-time rendering it is essential to be able to simplify model geometry down to units of triangles. This simplified version is either a set of perpendicular faces (we call it a polyplane), or one face rotating towards the camera position (we call it a billboard). In this article we focus on such geometry and show examples of billboards, but it applies to polyplanes too.
Quality of the billboard texture is very important: Some real-time environments render just those, even on close. Other engines use 3D models on close, but they usually want to switch to billboards as soon as possible, usually quicker than other objects. In general, plant billboards are being rendered at very close distance in most of the cases. Their quality matters.

Manual polyplanes

Let's take a small detour: In Silvador, if we don't want to rely on automated geometry simplification (automated polyplanes), we don't have to. We can model one or more types of branch ends, the geometry in full detail can look like this:
Using ExporterProxy component, we can simplify the geometry down to one polyplane and generate a model that looks like this:
Consequently we can put such manually created model (polyplane) on top of a tree structure like this:
And we get a final model like this:
Note the bright sides - we have a complex model of a tree simplified down to reasonable number of triangles (18044) for rendering and we have the shape of polyplanes fully under control.

The problem

And now the dark side. When we want to create a billboard texture from such a geometry, we have a problem. The polyplane simplification is too visible in the output. In general there are 2 types of problems: One is, that polyplanes that are in too sharp angle to camera view form a line-like artifacts. Another one is, that polyplanes tend to have too uniform lighting on them, even though normal map is applied. The macro texture looks like this:
These artifacts are very well visible on the final output.

The solution

There is a way out of this. The main problem is, that we use simplified geometry for rendering into billboard. And we don't have to. The manual polyplane is defined up to leaf level. When we generate model out of it, we can generate 2 versions: One the usual geometry simplification down to one polyplane, second the original full geometry generated up to leaf. First is used for producing 3D geometry with polyplanes of reasonable number of triangles, second is used for billboard shading. It makes the shading more demanding as there are going to be millions of triangles to render, but as it is happening offline, it is a small price to pay. And the output looks like this:
Silvador since version 1.53 supports automated generation of both mentioned versions during proxy model generation. It puts them as two separated lods of generated model. It is being controlled through argument ExporterProxy.generateDetail.
This is how the problem and the solution looks like in the realtime environment:



No comments:

Post a Comment