User Tools

Site Tools


Bent Normal Maps

The Bent Normal maps within Knald are generated from high to low polygonal meshes via The Baker. While they do contain directional data similar to that of normal maps, they are actually more similar to Ambient Occlusion maps as they include a form of occlusion data via the bent normal (i.e. the occlusion value of the mean ray/weighted average that does not intersect with the high poly mesh after hemisphere sampling) which represents the weighted average of all unoccluded directions.

The Bent Normal Group's Settings

Bent Normals Settings

Weighting: A choice between different methods of occluder weighting.

  • Cosine: Each sample is weighted by it's cosine to the normal.
  • Uniform Clamped: The bent normal represents the expectation for the distribution of visible directions.
  • Uniform Unclamped: Corresponds to projection of visibility onto second spherical harmonic band L=1.
The difference between the three weighting methods for Magnitude within Knald. Cosine (left), Uniform Clamped (middle) & Uniform Unclamped (right).

Flip Green: Here you can change the axis in the dropdown to match the Normal/Derivative maps for your engine or application as required. By default Knald is set to X+Y+Z+, so if you are using a Normal or Derivative map that differs from this configuration, you will need to change this setting. To change this setting check the Flip Green check box to save your choice.

View OS Normal: Enables the viewing of the Object Space Bent Normals map in the Bent Normals tab rather than the Tangent Space Bent Normals map.

  • Normalized: A choice of how the magnitude is stored within the exported texture.
  • Normalized Checked: The texture is normalized and the magnitude of the Bent Normals map is packed into the Alpha channel of the exported texture.
  • Normalized Unchecked: The texture is not normalized and the magnitude of the Bent Normals map is included in the RGB channels of the exported texture.

Ignore Backface Hits: Checking this option ignores backface ray hits, which is useful in instances where you are using floating geometry on the High Poly mesh.

Rays: This slider is used to determine the number of samples in a discrete evaluation of the integral across the half sphere for diffuse outgoing radiance with a constant radiance field with a minimum of 256 and maximum of 8192 rays being available.

  • A higher number or rays will increase the quality of the Bent Normals Map at the cost of speed.
  • We do not recommend going below a value of 512 rays as this can cause banding to appear in the map.
  • A value of 1024-2048 or above should be perfect for production.

Bias: A bias value based upon mesh density. A value of 10 should be good in most situations.

A normalized Object Space Bent Normals Map set to Cosine with the associated magnitude.

Bent Normal Map Types

Knald can bake both Tangent Space and Object Space Bent Normal map data, and does so simultaneously when baking is initiated. While both maps can be used for real-time rendering, Object Space tends to be the most commonly used during runtime.

Tangent Basis

Knald uses MikkTSpace by Morten S. Mikkelsen, which is available for free, from & the xNormal SDK.

It also calculates the bitangent on the fly by default due to the fact that it is more efficient on modern hardware (sending data from vertex to pixel shader is more costly than executing a minor calculation in the pixel shader), which is consistent with Unreal Engine 41) & Blender.

bent_normal_maps_knald_1.2.txt · Last modified: 2017/05/23 03:49 (external edit)