Ipotrick

@ipotrick.bsky.social

Bsky tends to remove noise from videos but i think its still visible here. A comparison of the temporal accumulation only (spatial passes disabled here for visualization purpose). Ray Redistribution On vs Off. Same performance, much better resolve with redistribution.

Adaptive ray rate per pixel! A series of compute passes distribute a fixed budget of rays over the pixels on the screen, a fixed trace dispatch goes over the final ray list and traces them. Improves disocclusions drastically. Allows way fewer (i'm using 2x fewer) rays per pixel at BETTER quality.

1 ray per pixel fix ray rate0.5 rays per pixel total budget, rays distributed based on need1 ray per pixel budget, rays distributed based on pixels on need

NEW: Surface Detail Guiding! Analyzing surface detail (using albedo and normals, showin in the heatmap) to inform the spatial denoise passes. Flat color -> wide softer blur. Detailed surface -> smaller blur allowing sharp lighting.

BildBild

New blog post! In "Quantizing tangent frames", we look at various established methods to represent tangent frames in the vertex data, squeeze a few variants into 32 bits per vertex and look at the resulting precision. zeux.io/2026/04/30/q... Share, like and subscribe!

Quantizing tangent frames

I’ve been working on tangent space generation recently, and also pondering the tradeoffs between QTangent and normal-angle storage. So when, in a completely unrelated discussion, someone said “you cou...

zeux.io

Advances in Real-Time Rendering in Games will be returning SIGGRAPH 2026... The course will be on Tuesday of SIGGRAPH, room and other details TBD. Cool talks lined up - stay tuned for more info.

The indirect diffuse denoising now resolves very fast. Evem better since my recent refactor. Here an example of the output in movement before application of albedo (albedo detail can hide potential artifacts). Direct diffuse in the video is a separate system and not denoised, ignore its noise :).

Testing in many different settings is very important for graphics techniques. What works in one setting will fall apart horribly in another. Usually its best to have actual game data to work with. At home i use a lot of dumb test scenes. Very happy to say the GI now works well in all of them 🥳

BildBildBildBild

Mooore denoising tricks 😃!! I tested variance as well as ray-length guided spatial filtering. Variance guided filtering is good at preserving lighting silhouettes, while ray-length guiding adds a lot of contact hardening sharpness! 1. no guiding 2. variance guiding 3. ray-length guiding

BildBildBild

More images of the improved denoiser. This showcases how much smarter the prefilter is now. Its able to keep much more lighting energy at better temporal stability. This is a better comparison than in my last post.

BildBild

I found a few tricks to make the denoiser able to handle a much sparser signal while also increasing temporal stability. With these tricks applied, indirect lighting now looks much better in dark areas. Bright small areas can not illuminate distant pixels much more accurately. Before vs After:

BildBild

I found a bunch of new tricks for denoising. Using them, i re-architected the whole denoising pipeline. Old: prefilter -> stochastic blur -> upscale -> temporal New: prefilter -> stochastic blur -> temporal -> smooth blur -> upscale. Perf and quality are much better with the new architecture.

I think most raytracing effects and denoisers don't really think about needs of fast games like shooters. For my RTGI denoiser, i put in a lot of care to get an immediately readable and stable image from the first frame after dis-occlusion. its very satisfying.

My RTGI denoiser had temporal stability issues on thin geometry. While tinkering, i found two tricks to improve this significantly: 1. Based on a per pixel "thin-ness" factor, a crude blur is applied. 2. A geometric mean based firefly filter does the rest. Works much better than i expected.

Diese kostbaren zwei Stunden am späten Abend, wenn niemand mehr etwas von einem will und nichts mehr zu erledigen ist, wenn man tun kann, was man wirklich möchte. So müssten ganze Tage, Wochen, Jahre, Leben sein.

I believe this is not done by others because it requires quite a high probe resolution to work properly without loosing too much quality. Luckily, last year i developed a self adapting sparse raytraced probe volume that can reach densities high enough to capture the world in enough detail :).

Ipotrick@ipotrick.bsky.social · 7mo ago

With my rtgi i am also doing something, that i believe, is a novel technique that i have not seen done before. While probes are often used in rtgi for indirect diffuse on hit shading, i use them to replace all rtgi hit shading. On each hit i project the closest probes radiance into the hits.

This is how the world looks when projecting the closest probes radiance onto the ray hit position.

With my rtgi i am also doing something, that i believe, is a novel technique that i have not seen done before. While probes are often used in rtgi for indirect diffuse on hit shading, i use them to replace all rtgi hit shading. On each hit i project the closest probes radiance into the hits.

This is how the world looks when projecting the closest probes radiance onto the ray hit position.Bild

I have been working on a denoiser for raytraced diffuse global illumination in my hobby engine. I am now quite happy with it. It can create a high quality output with only 0.25 rays per pixel. I am particularly proud of how stable it is in movement and on disocclusions.

dark scene before denoisedark scene after denoisedaylight scene before denoisedaylight scene after denoise

The radiance cache works by storing another layer of texels on the probe. The new texels store the direct radiance coming into their direction, no cos convolve. When shading rtgi ray hits, i sample the radiance of the 8 closest probes by projecting the radiance back onto the hit ws position.

Ipotrick@ipotrick.bsky.social · 11mo ago

Experimenting more with hybrid probe and per pixel traced gi. I now use a radiance cache to shade per pixel ray trace hits. It saves a lot of performance and the quality is very close to proper hit shading. Roughly saving ~30-70% of performance for rtgi (local lights make this verrry worthwhile).

Experimenting more with hybrid probe and per pixel traced gi. I now use a radiance cache to shade per pixel ray trace hits. It saves a lot of performance and the quality is very close to proper hit shading. Roughly saving ~30-70% of performance for rtgi (local lights make this verrry worthwhile).

Bild

Started to experiment with raytraced diffuse gi. My probe GI works well but it just can not represent fine details with good performance/memory usage. AO helps it a lot i want even more. Most of the work on RTGI is denoising, very interesting work. Here the current state: Probes only vs RTGI:

BildBildBildBild

While watching all the trailers from the Sony State of Play I could not help but notice that 90% of the games shown are Unreal Engine games... with each new scene/effect/character shown it is hard not to think "that will probably stutter on PC".

BildBild