View Full Version : WETA: Dmap shadow based reflection occlusion?
Blur1 09-20-2003, 12:00 PM In this article, a guy from Weta mentions a dmap shadow based technique for reflection occlusion.
http://www.theonering.net/perl/newsview/8/1060224376
Can anyone suggest how that may work? Would it take into account the diffuseness of the material or would it only work on 100% reflective surfaces such as chrome? The only reflection occlusion I have seen that takes more diffuse surfaces into account is in Prman.
|
|
I think the article is refering to this technique:
http://zj.deathfall.com/depthbasedOcc.htm
Blur1
09-20-2003, 12:51 PM
Thanks for your reply. ZJ's tutorials are great. That page refers to ambient occlusion though. I am looking for a method of doing reflection occlusion without a raytracer.
Reflection occlusion is typically a one bounce raytrace that determines wether or not a reflection map is occluded by the object that is recieving the reflection, or by nearby objects that are getting in the way (occluding) of the reflection.
I didn't think it was possible to do it without raytracing but the guy from Weta seems to be saying it is.
Ops, my bad.
This one maybe? It's casting a single ray in the R-direction to detemine wether to do a envmap lookup or not.
http://zj.deathfall.com/reflocc.htm
Blur1
09-20-2003, 01:36 PM
No, this uses raytracing to calculate the occlusion. There is nothing wrong with this, but I am curious to know of how Weta use shadow maps to get the same result. I assume that it is faster than raytracing and perhaps allows options for the level of reflectivity.
IŽd hazzard the guess that it is the same approach, albeit the occlusion is also weighted by L.R within the illuminance loop.
rendermaniac
09-20-2003, 09:53 PM
Ambient occlusion and reflection occlusion are both done with raytracing - just using different directions to work it out. Ambient occlusion uses the surface normal and reflection occlusion uses the reflection vector.
Weta (and ILM) speed this up a bit by using shadowmaps to do the raytracing. This is because in a RenderMan shader you can convert your point into the lightsource space, work out the depth that there is an occluding object between the light and your shading point. You can then get the actual position by working out the camera space position (as a percentage between your point and the light) then convert back to current space. The 2002 Stupid RenderMan Tricks by Christophe Hery http://www.renderman.org/RMR/Examples/srt2002/index.html#shadowb explain it better.
You do need a hell of a lot of blur to get rid of banding between the shadows and there is much less detail than raytracing, but it is a bit faster. It's all a matter of compromise.
Simon
rendermaniac
09-21-2003, 01:50 AM
PS you can use shadow map based ray tracing anywhere you use normal ray tracing, but it is a bit of a pain in the arse to setup.
Especially if you are trying to use it for interactive lighting as you have to fire off a shadow map generation every time and track where you are keeping them... feed that into shaders etc.
Blur1
09-21-2003, 05:47 AM
Thanks for the replies! I would have to argue the point that ambient occlusion is solely a raytracing technique wether or not you use depth maps. The Andrew Whitehurst web page as well as ZJ's page show the depth map based AO technique that does not use ray tracing at all. Excluding the bent normal gag, essentially it is a dome of spot lights where the combined shadow maps create the requisite AO effect, then this shadow data is cached or baked.
I understand that this may not be the case with reflection occlusion, ie. it may be dependent on ray tracing with or without a depth map, but if there is a technique that Weta are using that does not involve ray tracing at all, then I am interested to know.
Mauritius
09-22-2003, 02:46 AM
What you do is using shadow buffers (aka depth maps) to build up a discretized version of your scene around the resp. geometry. Similiar to e.g. an environemnt map -- only reversed camera direction and contains depth.
After you have these maps, you do all stuff you'd usually do in a raytracer -- it all depends on the lookup direction. If it's N, you get ambient occlusion, if its R, you get reflection occlusion, etc. You can use this to do all kinds of stuff, even sub-surface scattering.
There are renderers which have a much easier setup on the shader side of things (currently AIR and Aqsis), as they can combine multiple shadow buffers into one map. Rumor has it that 3Delight is next on the line to support this.
Additionally, both AIR and Aqsis support looking up the buffer through the occlusion() shadeop. This has some advance, as you can get the bent normal immediately.
.mm
Blur1
09-22-2003, 04:55 AM
Sounds interesting...well, it's easy enough for me to generate an environment map with depth information, I can use fog to do this (8 bit only). Now since I don't have a Renderman compliant renderer what I can do is use this as a reflection map and render a full strenth reflection pass across my scene.
Maybe by clamping such a reflection pass in compositing I can get reflection occlusion?
I will have to experiment.
Mauritius
09-22-2003, 05:14 AM
You seem to misunderstand what I said. I was comparing shadow buffers to environment maps as both are map based, object centric approaches to calculate a fake/approximated version of something more expensive to 'correctly' calculate with a raytracter.
Your approach won't work per se and for sure it won't -- in either case -- work in comp.
.mm
Blur1
09-22-2003, 09:17 AM
Aha! Shot down in flames. Thanks for explaining that. I imagine you are talking about something like this, as far as what can be done:
http://zj.deathfall.com/depthbasedTranslucence.htm
CGTalk Moderation
01-16-2006, 05:09 AM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.
vBulletin v3.0.5, Copyright ©2000-2012, Jelsoft Enterprises Ltd.