How do Bent Normals work? (and do studios actually use them?)

Surprisingly I couldn’t find much on google about this. I’ve read through Epic’s documentation on Bent Normals a few times and am utterly confused by the physics jargon:

Reflection Occlusion works by intersecting the Specular lobe with the visible cone or a cone representing the unoccluded part of the hemisphere described by the Bent normal as the cone axis and the AO amount as the cone angle. This results in significantly reduced Specular light leaking especially when Screen Space Reflection (SSR) data is not available.

Can someone explain that part like I’m 5 years old?

What I gathered:

Easy explanation: Better, more accurate shadows on object
Medium explanation: Normal map mixed with Ambient Occlusion?
Actual explanation: ???

  1. What is a bent normal texture calculating? What does the 3D vector of a texel do?
  2. Do people actually use this? I’ve always seen this bake option in Substance Painter but have yet to hear of anyone using it.

following up

There are a few different implementations of bent normals and it can very per-engine (and I could be totally wrong), but here’s what I was taught (this will be a long post):

What an AO map is to diffuse lighting, a bent normal map is to specular lighting. AO creates occlusion for diffuse diffuse light, and a bent normal map creates occlusion for specular light. The way it does this is by using a normal map (because they can encode direction, unlike AO), to basically tell the renderer to not create a highlight where it would be occluded by the object, and to ‘bend’ that highlight in the direction where it shouldn’t be occluded.

Substance painter makes it really easy to toggle bent normals, so let me demonstrate:

This is a fan without bent normals enabled. Notice how the specular lighting from the environment map is just going right through the mesh, so everything’s lit in an even, glowy way.


Now, look at the same image with bent normals:

Ignoring how grainy the image is (I baked at a low sample count), notice how the reflection of the tip of the fan is occluded now- it’s blocked from recieving light, like an AO map.

The key difference between it and an AO map is that a bent normal provides occlusion for a whole hemisphere instead of a point- what that means is that as I move the camera, the occlusion changes because the reflection vector changes. Since the front of the fan is no longer occluding the blades, the occlusion level changes.

To answer the second part of your question, from what I’ve heard, studios generally don’t use bent normals. There are a variety of reasons for this, mostly due to a combination of authoring content and runtime expense, but part of it is just that they don’t deliver a lot of bang for the buck: a bent normal is not a cheap texture to sample (as the Epic documentation itself says), and the specular occlusion it provides is limited in quality by texture resolution, and it can’t solve inter-object occlusion. It might make sense on a hero asset, but even then certainly not for everything shiny in your scene. If you’re making an AAA game, every texture costs something, and unique textures for meshes like bent normals often simply aren’t worth the cost.

If you need cheap specular, you’re generally better off with DFAO, SSR, and cubemaps, which tend to get the job done well enough. If you need good reflections for current consoles/PC, just use lumen, which have the added benefit of actually showing the scene around you instead of just the illusion of occlusion. Bent normals were a solution for good specular lighting in an age before HWRT, but they’re just sort of redundant now in most cases.

2 Likes

thank you for your clear explanation

1 Like