Caustics by photons in Cycles?

I’d like to know as well…

A thought: Is it possible to expose caustic effects to the Light Path node? That way users could come up with node-based “fake” caustic lighting on the object that gets hit by the caustic.

Also, is it possible to make light-portals for caustics? The trouble with caustics is that they’re hard to sample, so what if instead of trying to make them sample faster, we give users a way to hint at where to look? I don’t know if this is doable, just my two cents.

First part, I guess no.
Second part could be a cool idea. Thinking further: a material option could turn on a special ‘caustic’ treatment where the user sets which light(s) should be looked for samples. A sort of ‘concentrate the efforts on this’

Hello, I’m interested in this technique. Could you share details to reproduce it?
Thanks

One possible option would be to generate a composition pass with only the caustics so that the user can then compose them as he wishes in composition.

But they wouldn’t appear in reflections/refractions, and wouldn’t contribute to diffuse illumination

I’ve created a new addon, after modifying the old povray addon. Now I can:

  • press a button (“Setup”) => adds photon properties of objects in scene and prepares the compositor;
  • setup photon properties of objects, lights and scene;
  • press a button (“Build”) => Blender creates two povray files, one for saving the photon map, the other for rendering the scene (always in povray) and loading the photon map without any other light source
  • press a button (“Render”) => Blender launches the two povray files. The povray rendered image containing only the photon map is saved.
  • Now I can run the Blender render; the compositor will add the Blender image to the povray image.

This is an example of the result:

It can manage media as well.
@lsscpp is right: the caustics wouldn’t appear in reflections/refractions, and wouldn’t contribute to diffuse illumination. Nevertheless, the process is simple and the results are quite interesting.

Now, I would like to share my addon with the community. But I want to do it in the right way:

  1. my script is built using part of the old povray addon => I need someone to help me managing the old code usage rights
  2. my script is very rough, so more work is needed to obtain a good addon.

Please, send me pm if you are interested on working on this addon.

Thank you

4 Likes

This is the “Photon Spacing Multiplier” in POV addon

Sorry for replying this old thread, but I want to ask some questions @brecht

Does this mean bidirectional path tracing is acceptable if someone shows up and take the job? I am confused, because I have heard that bidirectional path tracing comes with a lot of flaws including not compatible with Light Path node. In fact, this is what LuxCore render shows when using Bidirectional mode:
image

Is this really acceptable? I want to know the attitude the devs have towards this, because from what you said it kind of sound like it is acceptable?

Light tracing and photon cache are so far the best way to go right now, LuxCore and Corona use them, however Vray has a different technique (I wonder what is it) and provide Progressive Caustics, I imagine is something similar to Light Cache but with SDS support.

BiDir is in general slower and not so compatible with many things, so I think a better bet is to implement some of the more modern techniques compatible with Path Tracing and not include a fully different algo that will require reimplementation of different things :slight_smile:

However a dev is needed for this, I wish we could count with an additional dev that focuses on that type of improvement, because the inside devs need to focus in other priorities first I think.

5 Likes

I think BiDir has two broad problems:

  • it’s difficult to get to work on GPU (both because it’s harder to parallelize in a way suitable to the GPU, and because it takes a lot more memory per path, afaik
  • it is likely to break the various Light Path inputs

Less importantly, it actually isn’t a panacea either. There are BiDir failure cases. In particular, it has big troubles with Specular-Diffuse-Specular. I.e. paths where you go from one sharp reflection to another with a diffuse object in between. Roughly because there is only a single path that will do so as opposed to infinitely many that don’t.

So it might be interesting to look at somewhat more modern techniques which will allow for such paths as well. (That said, most of them are either very complicated, making them even harder to run on GPU, or rather slow. There’s certainly a reason why these techniques are less common than plain Path Tracing)
One particular technique just simply (as far as I can tell) extends BiDir to explicitly search for such paths:


But there are other techniques that can do it
3 Likes

Yeah, i don’t like BiDir either, in fact I like more hybrid techniques that dedicate an specific part of the power towards collecting some specific paths, that’s how light tracing works in LuxCore, and I suspect that it’s also how Progressive Caustics works in Vray.

In fact Light Tracing is not executed in the GPU in LuxCore, it’s always executed in the CPU, but it’s also a very fast technique since it’s only calculating those paths, so usually with a 5% or 10% of the CPU dedeicated to that you get super fast caustics, however the current LuxCore technique don’t support SDS and it needs Caustics Photon Cache to support SDS, but both of them together make a very powerful caustics engine, and it runs in parallel to the PathTracer (the photon caustics cache works in the GPU too BTW).

Now sure how progressive caustics in Vray works in this regard, may be a more advanced version of the light tracing algo that also supports SDS, I don’t know.

But doing hybrid techniques I think is the way to go to get everything together.

4 Likes

as far as I know Light Tracing is just the same as Path Tracing but backwards, right? (Namely, the paths go the direction they would, in fact, go in nature, from a light source, to the camera)
In that case, BiDir is just the combination of Light Tracing and (regular) Path Tracing, right?

I do like BiDir, actually. I just meant it doesn’t solve everything on its own.

1 Like

Not exactly.
Light Tracing don’t have into account many things, the only thing it calculates is caustics, that makes it super ultra fast and responsive and it makes that you don’t have to modify all the other paths and shaders, so it’s like extracting a little part of BiDir and combining it with Path Tracing.

@kram1032 is right, the term “light tracing” does not refer to a particular rendering algorithm for caustics. It is something you use as part of an algorithm like bidirectional path tracing or photon mapping.

5 Likes

Yes.

What I meant is that the part used by the Light Tracing feature ignores other rays or calculations so it returns just the caustics, it probably is a bidir reduced up to a minimum and calculated in parallel to be mixed with the path tracer, that’s why it works only on the CPU, but as I said it is so fast that that’s no a problem at all, and the result is quite amazing.

It has other drawbacks of course, like not supporting SDS, which could be awesome, but not sure up to what point its feasible.

I like bidirectional path tracing / VCM. It often adds just that missing touch of realism in areas that are difficult to reach using unidirectional path tracing. And it’s great for caustics. But I’m all for smart tricks to speed up the heavy calculations, such as different types of caching.

1 Like

That’s true, I don’t like it because it comes with all kind of caveats, like not being able to be used on the GPU for example (maybe there is some variant that can, I don’t know) , that’s what I meant with that, the quality is great, but the result is very slow, an equilibrium must be reached in the end :slight_smile:

1 Like

Personally I prefer to go unbiased wherever that is possible. For that reason, I don’t like VCM very much. However, there is an unbiased version of it that I like.

This together with the above pixar paper and, perhaps, the improved MIS that can be found here https://graphics.cg.uni-saarland.de/publications/kondapaneni-2019-siggraph-optimal-mis.html would currently be my ideal scenario, I think.

Assuming all that can be made to work on the GPU. 'cause the example scene they show surely has complex lighting and so perhaps warrants the 1h CPU rendering. But on GPU it should presumably go rather quickly.

(I’m also not sure how all these techniques play with volume rendering which is also, imo, in need of an unbiased overhaul)

2 Likes

Does anyone have an update on whether we might have a chance at ever getting some sort of bi directional ray tracing in blender? The thought has been stuck with me for a while now and i see alot of use cases for it. I ask this question since cycles apparently changed and i read somewhere that bi directional couldn’t be implemented because of cycles core. Any update would be greatly appreciated.