Sign in to follow this  
Vincent_M

Ambient Occlusion for Deforming Geometry

Recommended Posts

Could ambient occlusion be used correctly on skinned models that are animating? It would seem that it only works on static objects that could be repositioned, rotated and scaled as a whole, but not when its geometry is deforming because the radiance map would have to be re-computed. Is this correct?

Share this post


Link to post
Share on other sites

Could ambient occlusion be used correctly on skinned models that are animating? It would seem that it only works on static objects that could be repositioned, rotated and scaled as a whole, but not when its geometry is deforming because the radiance map would have to be re-computed. Is this correct?

 

If by pre-baked ambient occlusion, then it's certainly used less on skinned models but is still used. Some will prebake only on areas that move less relative to each area. World of Warcraft, for example, has always used it on character models. Areas like armpits and etc. can still make use of it, and it's probably a good idea for any game still needing prebaked ambient occlusion.

Share this post


Link to post
Share on other sites

 

Could ambient occlusion be used correctly on skinned models that are animating? It would seem that it only works on static objects that could be repositioned, rotated and scaled as a whole, but not when its geometry is deforming because the radiance map would have to be re-computed. Is this correct?

 

If by pre-baked ambient occlusion, then it's certainly used less on skinned models but is still used. Some will prebake only on areas that move less relative to each area. World of Warcraft, for example, has always used it on character models. Areas like armpits and etc. can still make use of it, and it's probably a good idea for any game still needing prebaked ambient occlusion.

 

I imagine that WoW and many other games are not prebaking AO but simply painting it into the diffuse/albedo maps by hand. That's something artists have done for decades. Centuries? Millenia?

Share this post


Link to post
Share on other sites

Thanks guys! I'm new to AO, and haven't even implemented it yet, so this helps a lot.

 


Alternatively, instead of pre-baking AO from animated objects you can compute it at runtime, so that the animation is taken into account. Some games do this by attaching a small number of ellipsoids to the character's bones to act as a very low-detail proxy of the character's volume. You can then very cheaply ray-trace against this array of ellipsoids to calculate occlusion.

Does this occur once during load-time? I could see this being beneficial as it saves the artists time, and I can just have that resources available when I want the effect turned on. I'd only do this once though, right? If my model is animating, I'd never want to re-update my AO map, right?

 


I imagine that WoW and many other games are not prebaking AO but simply painting it into the diffuse/albedo maps by hand. That's something artists have done for decades. Centuries? Millenia?

When you say pre-baking, do you mean by calculating the AO offline, then multiplying the result into diffuse/albedo's color, therefore bypassing any type of dynamic AO calculations in the shader? That'd be like baking light maps into textured geometry before multi-texturing was possible.

 


I believe, that a cleverly baked AO map enchanced the appearance of animated characters more than that the potential artifacts are annoying

Once I have AO working, I'm really looking forward to testing animated characters with AO enabled and disabled to see the difference in appearance. I'll probably just be generating the maps in Blender using some sort of plugin at the beginning.

Share this post


Link to post
Share on other sites


Does this occur once during load-time? I could see this being beneficial as it saves the artists time, and I can just have that resources available when I want the effect turned on. I'd only do this once though, right? If my model is animating, I'd never want to re-update my AO map, right?

 

No, you would do it at runtime (how could you do it at load time if you're changing the AO based on the animation of the character?). It's generally something you would do as a deferred pass, where you evaluate the AO contribution from the occluders per-pixel and write the results into a render target texture (just like SSAO).

 


When you say pre-baking, do you mean by calculating the AO offline, then multiplying the result into diffuse/albedo's color, therefore bypassing any type of dynamic AO calculations in the shader? That'd be like baking light maps into textured geometry before multi-texturing was possible.



He just means generating a separate AO map offline, and then using that map at runtime.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this