This came out of my path tracer.

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.

Cheers

## My little path tracer

### Re: My little path tracer

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.

My approximation to the solar emission spectrum might be inadequate in the blue wavelengths

EDIT:

Yeah that looks better!

https://www.dropbox.com/s/0jjsmpi5jvfmi ... 3.jpg?dl=0

https://www.dropbox.com/s/nh80qd93qnbje ... 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: https://github.com/DaWelter/ToyTrace/bl ... sWay.ipynb

Using 10 discrete wavelengths, no ozone, purely exponential density decrease. Something is wrong. Much too greenish for my taste.

My approximation to the solar emission spectrum might be inadequate in the blue wavelengths

EDIT:

Yeah that looks better!

https://www.dropbox.com/s/0jjsmpi5jvfmi ... 3.jpg?dl=0

https://www.dropbox.com/s/nh80qd93qnbje ... 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: https://github.com/DaWelter/ToyTrace/bl ... sWay.ipynb

### Re: My little path tracer

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.

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.

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.

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.

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.

### Re: My little path tracer

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.

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:

Meanwhile I have a better pic. Something about the clouds strikes me as odd. Still a nice second try if you ask me.

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:

### Re: My little path tracer

Bidirectional path tracing! The first correct image! Well, as far as I can tell

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 ...

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 ...

### Re: My little path tracer

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

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

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

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

### Re: My little path tracer

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!

Click here. You'll thank me later.

### Re: My little path tracer

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!

Now this looks so much better!

### Who is online

Users browsing this forum: No registered users and 1 guest