Hello,
We are using Optix7.4 and MDL SDK for our renderer and are using OptiX-denoiser.
Denoiser expects ‘albedo’ as input, kind-of a problem is that I could not find standard albedo function exposed by MDL API. Please, let me know if there is one.
By definition, ‘albedo’ is what we would call ‘surface color’, i.e. average color reflected in random direction when the surface is uniformly lit. Taking this into consideration, we have thought of some ways to approximate albedo value and here are the options we came up with:
-
Base option is just to just randomize view and light directions and averaging-out BRDF, but I think this is a lost cause, since for mirror-like surfaces it’ll just give us black for a simple reason that it’s extremely unlikely to randomly pick mirror-reflection direction pair; Also, it’ll probably generally struggle with converging.
-
Second option is to just use average first-hit sample transmittance as albedo; This would probably ‘simulate’ uniform lighting, but would introduce view-direction bias. That bias might be bad in general, but it would also record some iridescence data;
-
Another option is to use samples again, but specifically for albedo, just randomize view-vector to eliminate that bias. We can also do multiple samples per-first-hit to converge faster (in theory). Before experimenting with any of these, I lean towards this one the most.
For option 3, there’s also a question of sampling view-direction over a half-sphere ‘above’ the front or back-face (whichever got hit), versus sampling from all directions. Front and back can behave differently, potentially breaking some opaque materials, so I guess it’s probably a good idea to stick with one side only, but I’ll be happy to hear more informed opinions.
Anyone experienced with these, what do you think the best approach would be? Are there other options we have and have not thought about?
Thank you in advance :D