Bent Normals for Reflective Ambient Occlusion

Hi there,
We are in need of better visuals for our current project regarding lots of hard surface mechanical models.
As you know, the lack of raytrace soft shadows or reflections complete destroys any realistic visuals illusion.
Many years ago, when I was doing an offline rendering project, I came accross the same situation, since raytrace was prohibitive in terms of render time.
So I use a kind of new technique at that time, which was to use bent normals to create a reflective ambient occlusion.
The concept is that simple, it is a regular ambient occlusion, but making it now diffuse but reflecive.
You can find a reference here:
Apparently Unreal Engine is able to do this, seeing their documentation: Bent Normal Maps | Unreal Engine Documentation

Is there any way to achieve that in BabylonJS or are there any plans of adding such feature?
Thanks for your appreciated input.

We do not have plans to support it by now but would happily help anybody who would like to do a PR for it. It would be an awesome contribution by the way and I wish days were longer the 24h to do it :slight_smile:

Sorry but I’m not a coding guy AT ALL, LOL
There is so little things to do to visually separate parts of a hard surface model without such techniques.
Since I’m not a coding guy, is this thing so complex to code?

I love the technique a lot, and it is not a tiny development to add support in babylon as it requires not only to change the pbr to add the support for a new sampler, but also nme, our serialization/deserialization, a nice doc, some tests as well as ensuring they would match the “ground truth”.

Basically it is not complex but requires a bit of time to do it properly.

@Evgeni_Popov will work with us soon after the vacation and it sounds like it could be a great mission for him :slight_smile:

I asked in first place because I’ve seen Substance Painter now can bake, apart from standard normals, those “Bent normals”, so you can achieve the effect easily. You may check that new feature.

Yup totally agree it would be nice to have :slight_smile:

1 Like

I’ll move this to Feature Requests and also add an issue on Github [Rendering] Bent Normals for Reflective Ambient Occlusion · Issue #12748 · BabylonJS/Babylon.js ( so we can maybe prioritize it :slight_smile:

1 Like

Any traction on this? would make reflective hard surface stuff look amazing if done correctly. We are finding that reflective surfaces just does not pop as much because AO only affects diffuse. Im happy to give this a shot but im curious about the best approach. All we’re trying to do is get some reflection occlusion going (last demo on that UE link above).

So … basically do we just use the bent normal for all reflection calculations only? Im not sure how to separate that out from the standard normalmap in the existing PBRMaterial shader. A quick NME example would be cool… or even just some psudocode.

Anyhoo, this is useful for everyone, not specific to our use case. so a material plugin would probably benefit everyone :slight_smile:

It’s currently not on our plans to do for 6.0 [Rendering] Bent Normals for Reflective Ambient Occlusion · Issue #12748 · BabylonJS/Babylon.js ( but we’d love if the community contributed :smiley:

1 Like

I don’t know if this is of any help?

Articles are nice, but sadly our problem is more time to make all the features :rofl: