alaingalvan / alainxyz-comments

🔮 Utterances powered comments for the Alain.xyz blog.
https://alain.xyz/blog
MIT License
2 stars 0 forks source link

blog/ray-tracing-denoising #6

Open utterances-bot opened 4 years ago

utterances-bot commented 4 years ago

Ray Tracing Denoising

Alain Galván is an Engineer @ Marmoset.co, here's his personal portfolio focused on 🛆 Computer Graphics, 🎨 Art & 🎹🎸 Audio Design/Engineering.

https://alain.xyz/

flouroantimonic commented 4 years ago

Thanks Alain, currently writing a basic game engine with sparse voxel octrees...having all of this information in one place is absurdly helpful.

redorav commented 4 years ago

Thanks Alain, excellent post. Just a quick typo correction, I found a line that says this, where it should say 7x7 Gaussian Kernel.

int radius = 3; // ⚪ 3x3 Gaussian Kernel

When I read further up that denoisers use a 3x3 kernel 5 times, it sounds like an affordable amount of work, especially if they can all be done within a single compute shader. However, does this typo imply that it is actually a 7x7 kernel, 5 times? If so it's a lot more expensive, so it's worth clarifying.

alaingalvan commented 4 years ago

Thanks @redorav, you're right, that example is a 7x7 kernel, I went ahead and updated that section to reflect this, thanks so much!

TH3CHARLie commented 4 years ago

Thanks for this great post! It's definitely gold for people who want to improve their naive path tracer's performance(YES THAT'S ME)

elvencache commented 4 years ago

thanks for this excellent survey of techniques. i appreciate the amount of work that must have gone into preparing this. and on top of that you also made it quite slick looking!

looking over the code examples, i found a couple spots that look like typos, though.

in the clamp rejection code snippet, return max(radiance, maxRadiance);, should the max be min instead? ray tracing gems section 17.3 gives the following example on clamping for fireflies, c' = min(c,t)

in several examples of filtering across some kernal in x and y, there's a check to skip the center pixel. if (xx != 0 || yy != 0) { continue; } which i read as "if x isn't zero, or y isn't zero, skip." but it seems like you only want to skip the opposite case, where both x and y are zero.

kieroooo commented 1 year ago

Great post, thank you. Just a small issue, i think something got messed up in the HLSL code snippet:

float histlen = tHistoryLength, ipos, 0).r; <- something ate the .Load() there