Important: This feature is in early development, and not in master yet. The implementation may have bugs and limitations. This is a feature contributed by Reality Labs and developed specifically to render eye caustics. We are still evaluating how well it works as a feature for general rendering of refractive caustics in Cycles.
Just opening this topic, to keep the code review focused on development and give users a chance for feedback here.
Thx for creating the thread @ThomasDinges !
Thx a lot also to @olivier.fx (or Christophe Hery ?) for contributing the patch ! This is Fantastic !
It seem that MNEE canât render caustic that lie outside of the shadow :
ââNote that the present formulation of MNEEâs implementation does not consider reflected caustics or refracted ones which lie outside the shadow of the transmissive object: this is because in these cases our method does not construct a seed path to start the processââ
Is there a plan to make the caustic goes outside of the shadow area ? Or is the MNEE a tad limited in that area ?
Thx a lot
Edit 22 December :
This is know limitation. See all comments from Olivier Maury on patch differential.
ââ 3. As reported, MNEE only tries to solve caustics inside the direct shadow areas of a light: This also comes from the way the solver is initiated (seed paths) and is also one of the issues SMS attempt to address.ââ
Iâll upload here the video test I did to compare it with LuxCore.
The reason to compare it with LuxCore is not to make a software comparison of âthis one is betterâ, is more to show that the expected and correct refractive caustics result should deliver at least something similar to what Lux deliver with Light Tracing, but even if itâs not exactly the same, it shows clearly how there is a loos of energy in the caustics calculation.
It probably needs some improvement or modification to go into master, or it may not go to master as it is, who knows, but wanted to put that on the developer radar
Indeed, Light Tracing in LuxCore AFAIK is like a lite version of Bidirectional Path Tracing, so I also believe that it is save to treat LuxCore result here as âcloser to ground truthâ
However MNEE can actually be better than LuxCore in some cases. This is actually incredible, in the scenes I tested, all of them are not as good as LuxCore results except for this one pool scene here:
Thatâs because Light Tracing does not work with SDS caustics, so only directly visible (reflective or refractive) caustics calculation.
This caustics donât care about them being directly visible or SDS, they are just caustics (but refractive ones, and probably with other limitations )
Itâs not a matter of âbetterâ but simply something not supported.
What I try to show is not if itâs better or not, but that I think there is a bug, some kind of loss of energy, in the caustic computation process
Yes, I think your explanation says it all, and that must be the reason why we are not seeing more energy, so itâs just a limitation.
Out of curiosity, is it possible to increase limits for these limitations? Like giving the user an option to set more paths or bounces for caustics at the cost of performance? Maybe is a total limit of the technique or maybe is something that can be handled
Also, now I understand the interface limit you mentioned
Iâm not super familiar with this at the moment, but considering the variables being added for using caustics, would this enable switching over to more advanced algorithms in the future / upgradeability, for example to SMS[RGL | Specular Manifold Sampling for Rendering High-Frequency Caustics and Glints], which appears to be highly efficient at caustics. This seems especially useful as the algorithm seems capable of support for both specular refraction and reflection, and potentially uses less memory.
This shouldnât be hardware limited right? Iâve been trying to read up on the patch but I see nothing that says it shouldnât work on Mac.
But while I see Caustic Caster and Receiver in the Object options, I donât see Caustic Light under any Light on my Mac (latest 3.1 alpha and the D13533 tested).
Now that GPU/Metal acceleration is making itâs way, I really hope that general functionality like this isnât tied to Windows, CUDA/Optix or similar.
Is it a bug that the Caustic Light checkbox isnât available on my system?
I would not expect MNEE to work that well as a general refractive caustic solution, i.e. for general high-frequency casting geometry: MNEE finds only 1 caustic path deterministically per sample, and for complex caustic casters, there are many solutions, as Tizian wonderfully shows in his paper introducing Specular Manifold Sampling (Specular Manifold Sampling for Rendering High-Frequency Caustics and Glints | RGL). We could certainly decide to extend this implementation to SMS but thatâs currently out of scope.
The devs. are using the same approach as all of the other big features from the last year. That is to get an initial implementation in first even if a little limited (ie. no feature creep), and then expand on it in following releases. Usually, a patch that becomes a monster stuffed with new enhancements can become a nightmare to review and test.
I just thought I would comment here with what I believe is a bug.
When rendering with Shade Flat there appears to be a loss of energy. And when rendering with Shade Smooth there is some artifacts. Hereâs some renders I did.
Note: Reflective Caustics are turned off and Filter Glossy is set to 0.
if you resize the water to not intersect the glass, you should be able to see caustics from both the glass and water.
No that didnât work for me
Even if it does work, the thing is, I believe it is a standard practice to have water intersect with the cup.
Here is Blender Guruâs 2.80 version donut tutorial:
Look at the part starts at 12:40 , he talks about how the gap between water and glass is not correct, and how we should intersect the two to make it work.
So if MNEE does not work in this case, I believe itâs a bug.
Iâm not seeing the issue of suzane over the pool killing the caustics
Are you sure the lighting is Nishita and sun height is 90 degrees? For me itâs 100% reproducible by by just opening the file and hit render view shading mode.
One question after reading the thread on the developer site, is there anything that would prevent the algorithm from switching to a different seed path after X number of samples and adding the resultant caustic information to the accumulation buffer?
The algorithm itself would still be tracing a single seed path on every new sample put down, theoretically it shouldnât even need to use the chosen path for the entire duration of the render because the caustics that are found converge so quick to begin with.