Bent normals: the underrated cousin of ambient occlusion
Why would you ever want to bend a normal, and how can that possibly improve your shadows and lighting? Isn’t ambient occlusion (AO) enough? Let’s start with the basics: what exactly are bent normals?
Bent normals, much like ambient occlusion, are used to estimate how much ambient light reaches a surface. In a simple diffuse lighting scenario, AO often does the job well enough. It provides a scalar value that answers the question: “How visible is this point from all directions?”
However, specular lighting – reflections, highlights, and glossy surfaces – depends on both the view direction and the light direction. In this case, a simple scalar AO value isnot enough. We need to understand which directions are unoccluded, not just how many. This is where bent normals come into play. They add directionality to ambient occlusion by bending the surface normal toward the average unoccluded direction – essentially pointing it toward where light is most likely to come from.
Bent normals also improve environment lighting and environment reflections sampled from cubemaps. Typically, they’re baked per vertex or stored in a texture map, using an RGB texture to encode direction data.
The concept can be extended further into what’s known as bent cones, which represent both the average direction and the spread of unoccluded space. The cone’s solid angle is often encoded as the length of the bent normal vector.
Some techniques compute bent normals or bent cones at runtime. For example:
– Unreal Engine calculates bent cones during Distance Field Ambient Occlusion (DFAO) and later uses them for Sky Occlusion. You can see this by enabling “Cast Shadows” in the SkyLight properties.
– Unreal’s Lumen Global Illumination system also computes bent normals alongside short-range ambient occlusion.
– Screen-space AO techniques such as SSAO or GTAO can be extended to calculate bent cones dynamically.
Bent normals are often overlooked, yet they deliver noticeably better specular lighting at a relatively low cost – no need for a full-blown global illumination system.
Additional resources: