Finally an explanation that's understandable for non-mathematicians, thank you! I've pieced together the basic concept in the past by looking at countless different sources, but this gets to the point like none other.
If we do not want to spread a confusion, there seems to be a small problem in this equation. In recursive part where we calculate Rendering equation again, we do it for the new point (y), given by our hemisphere in direction -omega_i, not again for point x from direction omega_i. This way, in theory, we would end up calculating radiance for the same point from every possible angle over and over again, completely omitting the nature of reflectance in global illumination. So, instead of L_i(x, omega_i) it should be written L_i(y, -omega_i), it's just a notation method that is less confusing, but the explanation still applies correctly.
@Eric Arneback, please illustrate the Monte Carlo approximation. One question, how the ray determining whether it is hitting a light source or not? For example, in 1:31 the shadow ray is hitting the light (emitting object) and determining it is a light source, how?
Hi! Thank you for the great explanation! However, i still dont understand how in order to get the Li you need to calculate its own Rendering equation, and so on.. so basically its an infinite loop?
If I understand correctly, because computers are limited, the integral in practice is actually just a summation. So then there will be one vector from the hemisphere for each ray calculated in the summation.
Really well done! One question: does the BRDF simply need omega_i to get the color of whatever omega_i points to so that it can properly reflect it? It seems like the overall brightness comes from the BRDF being multiplied by L_i(x, omega_i).
BRDF (and similiar functions BSDF etc) describe what amount of light remains when it reaches point x. If x is mirror all light will go in one direction, if x is soot all light would be absorbed and 0 of it will go to the camera, etc.
Very late reply but from graphics lectures essentially you can keep going forever. Obviously a never ending amount of samples would be not something that may be implemented so a limited sample size is taken. Which samples are taken and how and when to choose when to stop are all part of optimizing efficiency and final image quality given the limitations.
Finally an explanation that's understandable for non-mathematicians, thank you! I've pieced together the basic concept in the past by looking at countless different sources, but this gets to the point like none other.
This is beautiful, the best explanation I've seen of this so far
Come to think of it, it only makes sense to use graphics to explain graphics
GREAT explanation. Very much appreciated.
If we do not want to spread a confusion, there seems to be a small problem in this equation.
In recursive part where we calculate Rendering equation again, we do it for the new point (y), given by our hemisphere in direction -omega_i, not again for point x from direction omega_i.
This way, in theory, we would end up calculating radiance for the same point from every possible angle over and over again, completely omitting the nature of reflectance in global illumination.
So, instead of L_i(x, omega_i) it should be written L_i(y, -omega_i), it's just a notation method that is less confusing, but the explanation still applies correctly.
I looking forward for the next video like this one
wouldn't the hemisphere ray been shoot out at 1:33 be highlighted inside intergral as Li(x, wi)?
@Eric Arneback, please illustrate the Monte Carlo approximation. One question, how the ray determining whether it is hitting a light source or not? For example, in 1:31 the shadow ray is hitting the light (emitting object) and determining it is a light source, how?
This is top notch material!
Very good, simple and concise explanation, great job :^)
Subscribing. Such a beautiful integral representing all that radiance.
Can you please explain Monte Carlo equation satisfying the rendering equation sir please I çan not find any material on internet
Hi! Thank you for the great explanation! However, i still dont understand how in order to get the Li you need to calculate its own Rendering equation, and so on.. so basically its an infinite loop?
So, no taking account of transparency, translucency or SSS?
Thank you for your explanation, it really helps!
Thank you, i finally understand it.
Hello, can I pleaaaaaase use this in my masters presentation?
This video really explains it very well.
sure 👍
@@ericarneback2706 Thanks man!
From the hemisphere vector we just need to select a single random vector to do the recursion or a few of those?
If I understand correctly, because computers are limited, the integral in practice is actually just a summation. So then there will be one vector from the hemisphere for each ray calculated in the summation.
yes im looking for this for a longgggg time! thanks dude
Thank you so much for such clear explanation!
What is a gray expression?
Nice & clean, thanks!
Really well done! One question: does the BRDF simply need omega_i to get the color of whatever omega_i points to so that it can properly reflect it? It seems like the overall brightness comes from the BRDF being multiplied by L_i(x, omega_i).
BRDF (and similiar functions BSDF etc) describe what amount of light remains when it reaches point x. If x is mirror all light will go in one direction, if x is soot all light would be absorbed and 0 of it will go to the camera, etc.
what happens when you hit the light, you return the radiance or keep going
Very late reply but from graphics lectures essentially you can keep going forever. Obviously a never ending amount of samples would be not something that may be implemented so a limited sample size is taken. Which samples are taken and how and when to choose when to stop are all part of optimizing efficiency and final image quality given the limitations.
@@benstech726 Was wondering the same question, thank you for the clear answer.
It really helps! Thank you !
Nice job! please add voice
you're the best
Nice. Should have mathml and glsl side by side.
It explains so well. Thank you so much. I also found a c++ example in github, which implements this idea. github.com/ssloy/tinyraytracer.git