Currently obsessed with ray tracing 💡
Both images finally look similar — but NEE reached this quality already with much fewer samples 🙌. So those extra samples were maybe not needed.
Render time: ~10–15 minutes 💻
Both images finally look similar — but NEE reached this quality already with much fewer samples 🙌. So those extra samples were maybe not needed.
Render time: ~10–15 minutes 💻
NEE is almost fully converged, while path tracing still has plenty of grain and noise
NEE is almost fully converged, while path tracing still has plenty of grain and noise
At 10 samples, NEE is starting to clean up nicely 👌
Path tracing still struggles — lots of missed light paths and black areas
At 10 samples, NEE is starting to clean up nicely 👌
Path tracing still struggles — lots of missed light paths and black areas
With just one sample per pixel, brute force path tracing wastes tons of rays — you can see all the black pixels 🕳️
NEE, on the other hand, already captures the main light contributions 💡 (still noisy, of course)
With just one sample per pixel, brute force path tracing wastes tons of rays — you can see all the black pixels 🕳️
NEE, on the other hand, already captures the main light contributions 💡 (still noisy, of course)
Both methods converge to the same final image — but NEE gets there much faster ⏱️
Here we use 10 times more samples for path tracing, yet the image still looks worse than with NEE.
Both methods converge to the same final image — but NEE gets there much faster ⏱️
Here we use 10 times more samples for path tracing, yet the image still looks worse than with NEE.
Don't get dizzy...
Don't get dizzy...
Spheres now support color textures. A solar system scene felt like the perfect demo. (Nothing to scale.)
It might not be the most complex scene for a renderer, but it's great for testing textures and motion.
Spheres now support color textures. A solar system scene felt like the perfect demo. (Nothing to scale.)
It might not be the most complex scene for a renderer, but it's great for testing textures and motion.
⚙️ Method: Ray Tracing (written in C++)
🎯 Samples per pixel: 10
⏱️ Render time: 2.5 minutes (on 8 cores)
It will probably look much better with path tracing.
⚙️ Method: Ray Tracing (written in C++)
🎯 Samples per pixel: 10
⏱️ Render time: 2.5 minutes (on 8 cores)
It will probably look much better with path tracing.
It simulates full global illumination: Light bounces multiple times, capturing indirect light and color bleeding.
The single-sample image is almost black, most rays never hit the lamp.
After ~15000 samples/pixel (≈3 hr), the scene is still noisy.
It simulates full global illumination: Light bounces multiple times, capturing indirect light and color bleeding.
The single-sample image is almost black, most rays never hit the lamp.
After ~15000 samples/pixel (≈3 hr), the scene is still noisy.
Introduces stochastic light sampling for reflections, refractions, and light sources.
The first image shows a single sample per pixel (noisy but fast). The second is the converged result after 2500 samples.
I have to figure out what causes the few "hot pixels"...
Introduces stochastic light sampling for reflections, refractions, and light sources.
The first image shows a single sample per pixel (noisy but fast). The second is the converged result after 2500 samples.
I have to figure out what causes the few "hot pixels"...
Adds physically based light interactions: direct light (and therefore shadows), reflections, and refractions are handled explicitly.
No randomness — everything is computed deterministically for stable, noise-free results.
Adds physically based light interactions: direct light (and therefore shadows), reflections, and refractions are handled explicitly.
No randomness — everything is computed deterministically for stable, noise-free results.
This one ignores all light transport — it just shows the raw base colors of materials.
It’s useful for debugging geometry, textures, and UV mapping before diving into lighting.
This one ignores all light transport — it just shows the raw base colors of materials.
It’s useful for debugging geometry, textures, and UV mapping before diving into lighting.
🎨 Simple (base color)
💡 Deterministic (direct light, reflection, refraction)
🔦 Ray tracing
🌌 Path tracing
Each handles light in a progressively more realistic way. And I finally (!) get consistent results among all four. Check it out!
🎨 Simple (base color)
💡 Deterministic (direct light, reflection, refraction)
🔦 Ray tracing
🌌 Path tracing
Each handles light in a progressively more realistic way. And I finally (!) get consistent results among all four. Check it out!
Oh boy, stuff goes wrong. At least I get some funky images.
Oh boy, stuff goes wrong. At least I get some funky images.
Here, I tried to simulate a bronze, silver, and golden sphere.
Here, I tried to simulate a bronze, silver, and golden sphere.
You get a more "milky" glass.
You get a more "milky" glass.
Check out the light patterns on the floor.
Check out the light patterns on the floor.
In this image, 5% of the incoming light gets reflected by the spheres, whereas 95% bounces off randomly.
In this image, 5% of the incoming light gets reflected by the spheres, whereas 95% bounces off randomly.
In this interaction it also picks up the base color (albedo) of that object.
In this interaction it also picks up the base color (albedo) of that object.
I finally got around to re-write my code to simulate 3 fundamental types of interactions (+variants and mixtures):
1. Diffuse scatterings
2. Reflections
3. Refractions
I finally got around to re-write my code to simulate 3 fundamental types of interactions (+variants and mixtures):
1. Diffuse scatterings
2. Reflections
3. Refractions