Timon E.C.
@timonec.bsky.social
Physicist ⚛️ & Programmer 💻
Currently obsessed with ray tracing 💡
Currently obsessed with ray tracing 💡
🌍🌕 Switching perspectives to a geocentric scene with moon and stars in relative motion.
Don't get dizzy...
Don't get dizzy...
November 8, 2025 at 11:57 PM
🌍🌕 Switching perspectives to a geocentric scene with moon and stars in relative motion.
Don't get dizzy...
Don't get dizzy...
🌍☀️ More experiments with my C++ #raytracer & #renderer.
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.
November 8, 2025 at 11:57 PM
🌍☀️ More experiments with my C++ #raytracer & #renderer.
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.
✨ Rotating Object Render
⚙️ 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.
November 7, 2025 at 11:13 PM
✨ Rotating Object Render
⚙️ 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.
November 7, 2025 at 10:46 PM
November 7, 2025 at 10:46 PM
🌌 Path Tracing Renderer
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.
November 4, 2025 at 8:20 AM
🌌 Path Tracing Renderer
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.
🔦 Ray Tracing Renderer
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"...
November 4, 2025 at 8:20 AM
🔦 Ray Tracing Renderer
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"...
💡 Deterministic Renderer
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.
November 4, 2025 at 8:20 AM
💡 Deterministic Renderer
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.
🎨 Simple Renderer
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.
November 4, 2025 at 8:20 AM
🎨 Simple Renderer
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.
I’ve built four different renderers for my ray tracer:
🎨 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!
November 4, 2025 at 8:20 AM
I’ve built four different renderers for my ray tracer:
🎨 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!
I'm currently trying to improve my ray tracer to be more physically accurate, learning a lot about Physically Based Rendering (PBR).
Oh boy, stuff goes wrong. At least I get some funky images.
Oh boy, stuff goes wrong. At least I get some funky images.
October 28, 2025 at 11:12 PM
I'm currently trying to improve my ray tracer to be more physically accurate, learning a lot about Physically Based Rendering (PBR).
Oh boy, stuff goes wrong. At least I get some funky images.
Oh boy, stuff goes wrong. At least I get some funky images.
Finally, through all these properties that I can adjust, I can try to model metallic surfaces.
Here, I tried to simulate a bronze, silver, and golden sphere.
Here, I tried to simulate a bronze, silver, and golden sphere.
October 16, 2025 at 9:20 PM
Finally, through all these properties that I can adjust, I can try to model metallic surfaces.
Here, I tried to simulate a bronze, silver, and golden sphere.
Here, I tried to simulate a bronze, silver, and golden sphere.
Just like for reflections, the glass might have a rough structure which adds a bit more randomness to the refractive interaction.
You get a more "milky" glass.
You get a more "milky" glass.
October 16, 2025 at 9:20 PM
Just like for reflections, the glass might have a rough structure which adds a bit more randomness to the refractive interaction.
You get a more "milky" glass.
You get a more "milky" glass.
Moving on to transparent materials and glass spheres. We can simulate refraction by increasing the refractive index of the spheres and using Snell's law.
Check out the light patterns on the floor.
Check out the light patterns on the floor.
October 16, 2025 at 9:20 PM
Moving on to transparent materials and glass spheres. We can simulate refraction by increasing the refractive index of the spheres and using Snell's law.
Check out the light patterns on the floor.
Check out the light patterns on the floor.
Reflections are not always perfect. Mirroring surfaces might not be smooth. We can increase the surfaces roughness and see what happens to the reflected light.
October 16, 2025 at 9:20 PM
Reflections are not always perfect. Mirroring surfaces might not be smooth. We can increase the surfaces roughness and see what happens to the reflected light.
Indeed, we can smoothly increase the reflectance of an object from completely matte to reflective like a mirror.
October 16, 2025 at 9:20 PM
Indeed, we can smoothly increase the reflectance of an object from completely matte to reflective like a mirror.
We can take the same colored balls and add a bit of reflectance, to get a more shiny surface.
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.
October 16, 2025 at 9:20 PM
We can take the same colored balls and add a bit of reflectance, to get a more shiny surface.
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.
As a first interaction, we have diffuse scatterings, where light gets scattered into a random direction.
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.
October 16, 2025 at 9:20 PM
As a first interaction, we have diffuse scatterings, where light gets scattered into a random direction.
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.
For a while now, I have thought about how to model the light ray interaction with surfaces for my ray tracing project.
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
October 16, 2025 at 9:20 PM
For a while now, I have thought about how to model the light ray interaction with surfaces for my ray tracing project.
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
While optimizing my #raytracer, I experimented a bit with colored light sources.
September 27, 2025 at 7:36 AM
While optimizing my #raytracer, I experimented a bit with colored light sources.
Another day, another ray tracing rendering.
My objects can move now ⏩
On a side note: I have to think about optimization soon. This video took my laptop 5 hours to render...
My objects can move now ⏩
On a side note: I have to think about optimization soon. This video took my laptop 5 hours to render...
September 24, 2025 at 9:09 PM
Another day, another ray tracing rendering.
My objects can move now ⏩
On a side note: I have to think about optimization soon. This video took my laptop 5 hours to render...
My objects can move now ⏩
On a side note: I have to think about optimization soon. This video took my laptop 5 hours to render...
September 20, 2025 at 9:53 PM
The next challenge is that the generation of realistic images takes a lot more time (minutes instead of milliseconds) and that the images are noisy and grainy due to the stochastic nature of the realistic ray tracer.
But then again, I also have not done any optimization yet. Let's see.
But then again, I also have not done any optimization yet. Let's see.
September 17, 2025 at 9:17 PM
The next challenge is that the generation of realistic images takes a lot more time (minutes instead of milliseconds) and that the images are noisy and grainy due to the stochastic nature of the realistic ray tracer.
But then again, I also have not done any optimization yet. Let's see.
But then again, I also have not done any optimization yet. Let's see.
At this point, I thought it could be fun to have some more interesting surfaces besides flat colors.
I implemented textures and was surprised how straight-forward that was, it took less than an hour to get this running.
I implemented textures and was surprised how straight-forward that was, it took less than an hour to get this running.
September 17, 2025 at 9:17 PM
At this point, I thought it could be fun to have some more interesting surfaces besides flat colors.
I implemented textures and was surprised how straight-forward that was, it took less than an hour to get this running.
I implemented textures and was surprised how straight-forward that was, it took less than an hour to get this running.
But I managed to figure that out thanks to ChatGPT and Google.
With the new algorithm, shadows and light attenuations just fall out of this algorithm, and it already looks quite cool I think.
With the new algorithm, shadows and light attenuations just fall out of this algorithm, and it already looks quite cool I think.
September 17, 2025 at 9:17 PM
But I managed to figure that out thanks to ChatGPT and Google.
With the new algorithm, shadows and light attenuations just fall out of this algorithm, and it already looks quite cool I think.
With the new algorithm, shadows and light attenuations just fall out of this algorithm, and it already looks quite cool I think.