My little path tracer

A picture is worth a thousand words.
Posts: 21
Joined: Sun Oct 29, 2017 3:15 pm

My little path tracer

Postby dawelter » Sat Dec 09, 2017 8:39 am

This came out of my path tracer.
cornelbox3.jpg (161.07 KiB) Viewed 3212 times

Unfortunately convergence stagnated after some 10k samples per pixel. Not unexpected since it is a difficult scene. Lit by two point lights through the holes in the ceiling. I haven't implemented area lights. The medium has chromatic collision coefficients with high scattering for blue wavelengths.


Posts: 21
Joined: Sun Oct 29, 2017 3:15 pm

Re: My little path tracer

Postby dawelter » Mon Dec 11, 2017 12:42 pm

Trying to reproduce results from Peter Kutz's Sky Render.
Using 10 discrete wavelengths, no ozone, purely exponential density decrease. Something is wrong. Much too greenish for my taste.
atmosphere_fisheye1.jpg (61.03 KiB) Viewed 3169 times

atmosphere_fisheye2.jpg (46.42 KiB) Viewed 3169 times

My approximation to the solar emission spectrum might be inadequate in the blue wavelengths :roll:
solarspectrum10bins.png (14.11 KiB) Viewed 3169 times

Yeah that looks better! ... 3.jpg?dl=0 ... 4.jpg?dl=0

I changed two things at once: 36 bins instead of 10. sRGB output instead of CIE RGB 1931 because if I tell CIMG to write jpg it is probably going to be interpreted as sRGB.

Because I need RGB to spectrum conversions, I implemented the way of Smits (1999) but with more bins (kind of). The code is easily adaptable. I put it up on github: ... sWay.ipynb

Posts: 21
Joined: Sun Oct 29, 2017 3:15 pm

Re: My little path tracer

Postby dawelter » Sat Jan 20, 2018 2:05 pm

Been working on my path tracer. Implemented table lookup for the height profile of collision coefficients. After some more work I could reproduce the blueness of the evening sky due to absorption by ozone.
atmosphere_fisheye_ozone_compare.jpg (473.17 KiB) Viewed 2909 times

Now there is support for area lights - in the form of triangles and spheres. Before, it supported only point lights and distant directional lights. Implemented MIS weighting for light vs. BRDF sampling.
arealights.jpg (453.05 KiB) Viewed 2909 times

Quick test rendering with clouds went super slow. The ground is not a plane but a huge sphere. Thus the geometry is extremely inhomogeneously distributed. And my naive Kd-tree cannot cope with it.
atmosphere_cloudy.jpg (65.41 KiB) Viewed 2909 times

Posts: 47
Joined: Thu Apr 24, 2014 8:18 am
Location: Tbilisi, Georgia

Re: My little path tracer

Postby koiava » Tue Feb 06, 2018 11:21 am

Really good results :)
Colibri Renderer

Posts: 21
Joined: Sun Oct 29, 2017 3:15 pm

Re: My little path tracer

Postby dawelter » Wed Feb 07, 2018 7:56 am

Thank you!

Meanwhile I have a better pic. Something about the clouds strikes me as odd. Still a nice second try if you ask me. :-)
atmosphere_cloudy.jpg (776.3 KiB) Viewed 2574 times

To test my algorithms needed a material that has a "delta peak" plus a continuous density, so I implemented a dielectric material with a perfectly specular reflective layer. I followed a publication by Kelemen and Kalos (2001) to obtain a symmetric brdf which goes to fully specular towards grazing angles. The result:
material_test_scene.jpg (323.38 KiB) Viewed 2574 times

Posts: 21
Joined: Sun Oct 29, 2017 3:15 pm

Re: My little path tracer

Postby dawelter » Thu Feb 22, 2018 8:44 am

Bidirectional path tracing! The first correct image! Well, as far as I can tell ;)
cornelbox5.jpg (351.36 KiB) Viewed 2283 times

High variance at 128 bidirectional random walks per pixel. Paths are weighted by one over the number of techniques that can generate the path. Implementation of MIS pending ...

Posts: 158
Joined: Mon Nov 28, 2011 7:28 pm

Re: My little path tracer

Postby graphicsMan » Thu Feb 22, 2018 2:55 pm

Nice :)

Posts: 21
Joined: Sun Oct 29, 2017 3:15 pm

Re: My little path tracer

Postby dawelter » Wed Feb 28, 2018 8:43 am

Thank you graphicsMan! :-)

Meanwhile, I implemented what I want to be mis weighting straight from the defnition p_k^a / sum_i p_i^a ... I also fixed the reflector. It has 10k triangles now and increased tesselation near the focal point. The light source was a point light, now I take very small sphere light, to "smooth" the irregularities of the model. Moved it a slight bit, too. And tada! The reflector focusses the light much much more cleanly.

Unfortunately, it does not converge :-( The noise around the sphere is gone. Which is great. But near the corners - No way this is correct. Also the brightness seems to increase from sweep to sweep as you can see at the line where I interrupted the rendering.

Will investigate. Hints appreciated ;-)
bdpt_second_pic_w_mis.jpg (165.53 KiB) Viewed 2126 times

That's 512 samples per pixel btw. Took the night to render.

Posts: 274
Joined: Mon Nov 28, 2011 11:11 pm
Location: London, UK

Re: My little path tracer

Postby ingenious » Thu Mar 01, 2018 1:48 am

dawelter wrote:Will investigate. Hints appreciated ;-)

Yeah, doesn't look correct. The most likely reason is that the MIS weights corresponding to the different techniques for constructing a path don't sum up to one. This in turn is probably due to incorrect/inconsistent path pdf computation. What has helped me greatly in the past to debug such issues has been to debug one path length at a time.

Here are some more specific tips:
1. Start with an entirely diffuse scene. The pdfs are simpler.
2. Have a unidirectional path tracer that you're sure converges to the right solution.
3. Have a unidirectional light tracer that you're sure converges to the right solution. Compare against the images produced by the path tracer.
4. In the bidirectional path tracer, start by rendering direct illumination only, i.e. paths of length two (segments). There are already three ways to construct each such path. Make sure you compute the correct path pdfs, with solid-angle-to-area conversion factors (Jacobians) etc.
5. Only after you're sure the direct illumination converges to the same result as the path tracer and light tracer, move on to debugging one path longer. And one longer, etc.
6. Once you can correctly render a diffuse scene with your bidirectional tracer, add more complex materials.

Hope this helps!
Image Click here. You'll thank me later.

Posts: 21
Joined: Sun Oct 29, 2017 3:15 pm

Re: My little path tracer

Postby dawelter » Sat Mar 03, 2018 7:51 am

Thanks Ingenious. Indeed it was wrong MIS weighting. My logic for splatting on the light image is slightly odd and so it came that the weights for techniques with one eye vertex were much too low. Had to factor in the number of pixels. Got a clue by imaging MIS weights for various eye/light path lengths in Veach's "pyramid" style.

Now this looks so much better! 8-)
bdpt_mis_proper.jpg (117.09 KiB) Viewed 2010 times

Return to “Visuals”

Who is online

Users browsing this forum: No registered users and 4 guests