As announced in the mailing list before leaving to the Havana event Informatica 2009 I have rewritten the Path Tracer code according to a modular black box BxDF design (BRDF,BTDF,BSDF… could be easily handled once implemented)
Since my return I have retaken its development and have improved convergence, now with less samples per pixel images exhibit less noise than before.
I have implemented for now only one BRDF model: the Blinn-Phong modified model and have made some tests with it. Currently not big deal but the longest journey begins with a single step.
I’m glad that the image quality is at the same level as the first versions of many path tracers floating in the web so im not so lost 🙂
Later I plan to implement the perfect mirror model and the refractor, one thing I have realized from the implementation is that one single mode to achieve all the possible effects is not possible or even desired,because every rendering algorithm have pathological scenes where it will fail so there should be there other models to workaround this. That´s the typical case of the perfect mirror: since the BRDF of it is a Dirac function, the probability of a light ray to be reflected according to that directions tend to zero and path tracers hang up (= if the raytracer shoots the rays randomly around a point (=spherical distribution), only those who are shot in the reflexion direction (one point on the spherical distribution) will converge, which is a very low probability (because only one successful point on all a sphere) )
Of course , there´s a lot of optimizations to be done, currently there´re no importance sampling, startified sampling and many more stuffs that could make the life of path tracer better, currently is the raw pathtracer in action!
Fig. 1 – 200 samples per pixel (spp) – rendering time: 3 min
Fig. 3 – 1000 spp with reflexions – 30 min
Fig. 4 – 1000 spp with reflexions – 43 min
Fig. 5 – 2000 spp – 33 min
Fig. 6 – 1000 spp – 31 min
Fig. 7 – 3200 spp – 34 min
Fig. 8 – 1000 spp – 10 min