This is a bit of a pre-anouncement. As you no doubt have noticed, I’ve been thinking about BRDF sampling and, as will be outlined in a future post, how to effectively do bidirectional path tracing in an unbiased manner. Why?, you may ask. I am interested in whether an understanding of the statistics of stochastic rendering can help with removing the characteristic ’sampling noise’ present in rendered images. As an example, look at the following figure. Those reading this on Facebook will probably need to follow the link to the full size image.

Above is the output from my unbiased path tracer and on the left is the output from a state of the art canned denoising algorithm from Willett. Much of the literature on denoising rendered images relies on bilateral filtering as an image based approach. The advantage of Willett’s approach is that it doesn’t require a ’smoothing’ parameter to be inferred and works instead directly on the per-pixel sample count.
The disadvantage is, however, obvious: fine texture detail is lost or blurred severely. This is not the fault of Willett’s algorithm: it requires that the input images have certain statistics which are not exhibited by the images my renderer produces. I have tried to ‘help’ the Willett algorithm along by rendering a high sample count image so the sampling noise is relatively low.
The blurring you see, especially on the floor, is due to the ‘unbiased’ renderer not being truly ‘unbiased’ in that although light transport is modelled correctly, a) surface colour is modelled by multiplying colours along the light path and b) in a bidirectional renderer one ‘merges’ light and eye paths not stochastically but by directly connecting nodes on the path and calculating an explicit BRDF to ‘join’ the lights to the eye.
My approach is on the right. As you can see, the floor detail, etc is preserved. The algorithm is in essence the same as Willett’s except that I explicitly acknowledge the multiplicative bias in my renderer and, by careful consideration of the sample statistics, I estimate it and remove it before the denoising algorithm is run.
In summary, this post makes the (somewhat obvious) statement that in a path tracing renderer one must be extremely careful to track sources of bias. Once you accept that the renderer is only quasi-unbiased, you can move on and ‘deal’ as our North American cousins would say.