Details how output scenes are created and their creation is controlled.
Umbra optimizes given input scene for high performance streaming and processing purposes, such as real-time rendering.
Umbra uses the input scene as the ground truth, and generates manifold triangle meshes for different levels of detail. Texture maps are generated to store attributes for meshes. This optimized output scene is split into tiles. Each detail-level has it's own set of tiles. The output scene is highly compressed, using generic and custom domain-specific compression algorithms. This ensures high streaming performance over the network.
Output meshes are by-default guaranteed to be "watertight", meaning there are no gaps between geometry, including T-vertices. This holds true even between connecting tiles and jumps between levels of detail.
Umbra allows users to specify optimization quality with
feature-size parameter. This parameter sets smallest detail that optimization tries to preserve, which can be thought as radius. When the input scene has geometrical detail that fits inside this radius, optimization is allowed to get rid of it.
There's also other important quality parameter, called
texel-ratio. This parameter describes how much more or less detail is captured into texture maps, compared to
feature-size. It is optional and is set by default to 1.0, meaning that texture quality is same as geometrical quality. For example, setting the parameter to 0.5 means that texture maps have twice smaller detail, and are twice more accurate than generated geometry. This can be thought as a value that controls capture quality for details that exists inside silhuettes, while
feature-size controls the quality of the silhuette itself.
See Parameters for more information about these and other optimization parameters in Umbra.
Let's say that we have an input scene that contains brick wall with small cavities.
feature-size value controls whether these cavities are preserved or not. Setting value that is larger than the size of cavity will end up removing them, while smaller values will preserve the details. Now let's set
feature-size to value that is larger than the cavity. We have nicely optimized mesh that geometrically resembles box without expensive triangles for all the cavity details. Unfortunately rendering this optimized scene reveals that there's not enough texels for the cavity surface normals in normal map, which causes lighting artifacts.
texel-ratio allows us to set smallest texel detail to value that is smaller than the cavity, which increases the amount of texels and eventually fixes the issue. We end up with nice optimized output scene, where brick cavities are removed from the rendered silhoutte, but still visible inside the silhoutte.