Simple SDS caustic investigation

Use this forum for general user support and related questions.
Forum rules
Please upload a testscene that allows developers to reproduce the problem, and attach some images.
Post Reply
LuxMarkus
Posts: 5
Joined: Tue Feb 18, 2020 8:21 am

Simple SDS caustic investigation

Post by LuxMarkus »

Hello!

First of all: a big thank you to all developers and supporters for the developments and making LuxCoreRender opensource! It is a great tool also for scientists and it already helped me to investigate some interesting everyday optical phenomena (cf. "Wine glass caustic and halo analogies", https://www.osapublishing.org/ao/abstra ... 57-19-5259, "Halo in the box: a macroscopic crystal arrangement to project mosaic halos" https://www.osapublishing.org/ao/abstra ... 57-29-8614).

Now, for a small research project related to my latest project ("Bubble optics", https://www.osapublishing.org/ao/abstra ... ao-59-1-45), I am currently trying to investigate a particular caustic occuring below floating surface bubbles floating on a liquid as cast on a screen below the bubble.

To this end, I have modelled the outer and inner bubble meniscus (the bubble cap being thin and almost non-refracting) in Blender and wanted to investigate the caustic with LuxCoreRender. After reading some posts in this forum I realized that this is a setup which causes some problems as it is of the type SDS (specular - diffuse - specular) since both the camera as well as the light source are exterior to the liquid in which the caustic is cast (see image of the setup, attached. Also the scene is attached.). (The scene is similar to a pool caustic scene, and indeed you can observe bubble caustics in a pool on a sunny day.) Hence, no light tracing nor bidirectional tracing are possible.

I have still managed to get the caustic as expected using an area light (a disc source with 5 times the solar diameter, hence blurring the caustic but increasing efficiency) + path tracing. Also, I could quickly get the desired caustic to render using the PhotonGI caustic cache feature.

However, my aim is to learn about the ray paths responsible for the caustic under certain conditions (incident light angle, depth of the "pool"). To do so, my hope was to use:

- the path depths setting to distinguish between ray path contributions to the caustic. However, the results appear to be inconsistent with my understanding of the caustic and the way the total path depth is supposed to work (viewtopic.php?t=508). I.e., I expect at least part of the astroid caustic to appear for a setting of (total path depth 3, diffuse 1, glossy 1, specular 2) since then the eye rays can then penetrate through the air-water interface (specular = 1, coming from the camera = starting at 0), reflect diffusely from the projection plane (diffuse reflection = 1) to finally refract through the water-air interface again (specular = 2nd, connect to the area light). [Glossy is actually not needed.] However, instead I only observe external reflections using the 3-1-1-2 setting. I start to see the caustic only with a 4-1-1-3 setting, i.e. 3 specular reflections. It seems as if the abort condition is not exceeding the threshold, but rather reaching the threshold? Can that be?

Also, for my investigations I was hoping to be able to alterantively use the more efficient PhotonGI caustics cache method. However, the minimum setting for depth seems to be 3. Is there a way to reduce this, i.e. to 1? Also, using this approach, I would expect to be able to use a high Photon depth combined with a path tracing depth setting of 2-1-1-1 to see the caustic, i.e. requiring only 1 refraction (specular interaction starting at the camera) to see the caustic. Instead, counterintuitively, I only start seeing the caustic with the setting 2-1-1-2 (two specular interactions). Why is this so?

- I would like to see dispersion on the caustics. Can PhotonGI handle this?

Thank you for your help!
Attachments
Setup3.JPG
BubbleBlenderExtreme3.blend
(1.65 MiB) Downloaded 173 times
User avatar
Dade
Developer
Developer
Posts: 5672
Joined: Mon Dec 04, 2017 8:36 pm
Location: Italy

Re: Simple SDS caustic investigation

Post by Dade »

LuxMarkus wrote: Tue Feb 18, 2020 9:14 am - the path depths setting to distinguish between ray path contributions to the caustic. However, the results appear to be inconsistent with my understanding of the caustic and the way the total path depth is supposed to work (viewtopic.php?t=508). I.e., I expect at least part of the astroid caustic to appear for a setting of (total path depth 3, diffuse 1, glossy 1, specular 2) since then the eye rays can then penetrate through the air-water interface (specular = 1, coming from the camera = starting at 0), reflect diffusely from the projection plane (diffuse reflection = 1) to finally refract through the water-air interface again (specular = 2nd, connect to the area light). [Glossy is actually not needed.] However, instead I only observe external reflections using the 3-1-1-2 setting. I start to see the caustic only with a 4-1-1-3 setting, i.e. 3 specular reflections. It seems as if the abort condition is not exceeding the threshold, but rather reaching the threshold? Can that be?
BlendLuxCore internally add 1 to the set values to keep MIS (Multiple Importance Sampling enabled) so it may be the source of your problem. You may want to export the scene in text format, edit the .cfg file and render with luxcoreui executable in order to have free and transparent access to all settings.

LuxCoreUI executable is included in the standalone version of LuxCoreRender.
LuxMarkus wrote: Tue Feb 18, 2020 9:14 am Also, for my investigations I was hoping to be able to alterantively use the more efficient PhotonGI caustics cache method. However, the minimum setting for depth seems to be 3. Is there a way to reduce this, i.e. to 1? Also, using this approach, I would expect to be able to use a high Photon depth combined with a path tracing depth setting of 2-1-1-1 to see the caustic, i.e. requiring only 1 refraction (specular interaction starting at the camera) to see the caustic. Instead, counterintuitively, I only start seeing the caustic with the setting 2-1-1-2 (two specular interactions). Why is this so?
Again, if you can edit the .cfg, you have access to all possible settings (including wrong one so be careful).
LuxMarkus wrote: Tue Feb 18, 2020 9:14 am - I would like to see dispersion on the caustics. Can PhotonGI handle this?
Yes, dispersion is supported by PhotonGI.
Support LuxCoreRender project with salts and bounties
LuxMarkus
Posts: 5
Joined: Tue Feb 18, 2020 8:21 am

Re: Simple SDS caustic investigation

Post by LuxMarkus »

Dear Dade,

thank you for your quick reply!

However: If 1 is internally added , I would expect external reflection only when 0 is set in Blender for specular interactions? Instead, I see external reflections only if I set the setting to 2, which should then (adding 1 internally) correspond to a rendering of 3 specular reflections according to you? I only see (part of) the caustic if I have set specular bumps to 3 (total to 4, 1 diffuse (which then corresponds to 2 diffuse rendered?))

I would appreciate any clarification. In addition, I will try the export as you suggested.
User avatar
Dade
Developer
Developer
Posts: 5672
Joined: Mon Dec 04, 2017 8:36 pm
Location: Italy

Re: Simple SDS caustic investigation

Post by Dade »

If you set specular max. depth to 1, you will get a black mirror because you need at least 2 bounces to see something:

1) ray hits a specular surface;
2) secondary ray hits another surface (and it is seen in the first one).

BlendLuxCore may add 1 only to diffuse or total max. depth, I don't remember, B.Y.O.B. can answer to this.

Sincerely, it is impossible to follow all this +1-1+3-4-etc. I suggest you to go to square zero: are you trying to measure the amount of light received by a surface, including caustics ? Not by the camera (like in a normal rendering) but by a (matte) surface :?:
Support LuxCoreRender project with salts and bounties
User avatar
B.Y.O.B.
Developer
Developer
Posts: 4146
Joined: Mon Dec 04, 2017 10:08 pm
Location: Germany
Contact:

Re: Simple SDS caustic investigation

Post by B.Y.O.B. »

Dade wrote: Tue Feb 18, 2020 2:41 pm BlendLuxCore may add 1 only to diffuse or total max. depth, I don't remember, B.Y.O.B. can answer to this.
To everything but specular depth, see https://github.com/LuxCoreRender/BlendL ... ig.py#L274
LuxMarkus
Posts: 5
Joined: Tue Feb 18, 2020 8:21 am

Re: Simple SDS caustic investigation

Post by LuxMarkus »

Again, thank you for your reply!
Dade wrote: Tue Feb 18, 2020 2:41 pm If you set specular max. depth to 1, you will get a black mirror because you need at least 2 bounces to see something:

1) ray hits a specular surface;
2) secondary ray hits another surface (and it is seen in the first one).
I am curious: Why could I not directly be able to see the light source reflected specularly (a fraction of the light anyways, e.g. ca. 4% for near-normal incidence on glass) from an interface? In this case I expect only 1 specular bounce. The path would be: Camera - Interface - Light? Maybe I still have a fundamental misunderstanding of some rendering aspect here?
Dade wrote: Tue Feb 18, 2020 2:41 pm Sincerely, it is impossible to follow all this +1-1+3-4-etc. I suggest you to go to square zero: are you trying to measure the amount of light received by a surface, including caustics ? Not by the camera (like in a normal rendering) but by a (matte) surface :?:
I am trying to qualitatively understand the contributions to the caustic stemming from multiple possible ray paths. The difference between those paths would be a difference in the number of specular interactions with the meniscus (e.g: simple single refraction only ray path, or a ray path traversing the meniscus like a prism before subsequently being refracted by the outer meniscus = 3 specular reflections, or a refraction followed by an internal reflection = 2 specular interactions). It is for this reason that I am interested in the exact count logic.
B.Y.O.B. wrote: Tue Feb 18, 2020 2:59 pm
Dade wrote: Tue Feb 18, 2020 2:41 pm BlendLuxCore may add 1 only to diffuse or total max. depth, I don't remember, B.Y.O.B. can answer to this.
To everything but specular depth, see https://github.com/LuxCoreRender/BlendL ... ig.py#L274
Thank you very much, B.Y.O.B., this is also very helpful! :)
User avatar
Dade
Developer
Developer
Posts: 5672
Joined: Mon Dec 04, 2017 8:36 pm
Location: Italy

Re: Simple SDS caustic investigation

Post by Dade »

LuxMarkus wrote: Tue Feb 18, 2020 3:25 pm I am trying to qualitatively understand the contributions to the caustic stemming from multiple possible ray paths. The difference between those paths would be a difference in the number of specular interactions with the meniscus (e.g: simple single refraction only ray path, or a ray path traversing the meniscus like a prism before subsequently being refracted by the outer meniscus = 3 specular reflections, or a refraction followed by an internal reflection = 2 specular interactions). It is for this reason that I am interested in the exact count logic.
My very first question: are we talking of human cartilage ? Does the meniscus really act as glass material ? It sounds strange.

Light is refracted when traveling between two volumes with different densities. In LuxCore, this typically happens on a surface with a glass material assigned and inner/outer volumes with 2 different index of refraction. Does a meniscus act in the same way ?

Anyway, main problem: you need to account for the total path length (between the light source and the eye). You are working with settings that affect only one side: paths starting from the the eye (path tracing max. depth settings) and paths starting from the light source (PhotonGI max. depth setting).
When the two type of paths are connect, you transport light to the eye and you start to see something however the length of the 2 half paths is variable (you can connect a 2-length eye path with a 3-length light path, etc.).
Support LuxCoreRender project with salts and bounties
LuxMarkus
Posts: 5
Joined: Tue Feb 18, 2020 8:21 am

Re: Simple SDS caustic investigation

Post by LuxMarkus »

Dade wrote: Tue Feb 18, 2020 4:33 pm My very first question: are we talking of human cartilage ? Does the meniscus really act as glass material ? It sounds strange.
I am sorry, I should have made the setup more clear: Meniscus relates to the liquid phenomenon of wetting, so I use the term in this sense (i.e. not in the medical sense): https://en.wikipedia.org/wiki/Meniscus_(liquid)

My only volume is a liquid container (a mesh with a glass material which has exterior volume linked to a clear "air" volume with IOR = 1 and an interior volume linked to a clear volume with IOR = 1.33) with the only specialty of having an upper interface / surface which models the menisci around and inside of an air-bubble floating on water. It looks like this (imagine only one of those bubbles in the center of a cylindrical bowl): https://twitter.com/OSAPublishing/statu ... 8285286401. The shape of the rotationally symmetric air-water interface (liquid volume surface) can be seen in the thumbnail of my article here: https://www.osapublishing.org/ao/abstra ... ao-59-1-45
Dade wrote: Tue Feb 18, 2020 4:33 pm Anyway, main problem: you need to account for the total path length (between the light source and the eye). You are working with settings that affect only one side: paths starting from the the eye (path tracing max. depth settings) and paths starting from the light source (PhotonGI max. depth setting).
My questions so far and the trouble of reconciliation are for my attempts with path tracing (without PhotonGI) only. At least here I would expect, even after now knowing that the values I set for the total path length, the diffuse and glossy are each added by 1 before the actual rendering, that I start to see specular external reflections with total path depth (in pure path tracing starting from the camera) = 1 = specular depth? Similarly, I would expect the caustic to be seen with 2 specular interactions (refractions: ray into volume, ray out of volume, + 1 diffuse at the bottom of the "pool"/container), i.e. for paths camera-S-D-S-light (area light).
Dade wrote: Tue Feb 18, 2020 4:33 pm When the two type of paths are connect, you transport light to the eye and you start to see something however the length of the 2 half paths is variable (you can connect a 2-length eye path with a 3-length light path, etc.).
When I used PhotonGI + path tracing my experience was that I saw the full caustic with path tracing (total depth 2, specular = 1, diffuse = 1, specular = 2) and GI depth = above 3, which was the limit in the UI. Here, again, if I imagine paths connected, I would expect path tracing depth of (total depth 1, specular = 1, diffuse = 1, specular = 1) to reveal the caustic at the "bottom of the pool" as it is stored there in the caustic cache?

Thank you for your continued help!
LuxMarkus
Posts: 5
Joined: Tue Feb 18, 2020 8:21 am

Re: Simple SDS caustic investigation

Post by LuxMarkus »

Attached is a sequence of renderings (path tracing, no PhotonGI) with increasing total + specular depths.

I would still like to understand why I only start to see the SDS caustic with a depth setting (as set in the UI in blender) of (total = 3, diffuse = 1, glossy = 1, specular = 3), whereas I only see tinted (my volume has this color as the absorption color) sprinkles with depth settings in LuxCoreBlend v2.2 (the blender UI) set to (total = 2, diffuse = 1, glossy = 1, specular = 2). As I understood from B.Y.O.B. the former setting amounts to an actual rendering with (total = 4, diffuse = 2, glossy = 2, specular = 3), whereas the latter to (total = 3, diffuse = 2, glossy = 2, specular = 2).

The latter setting should be enough to reveal the caustic (well, half of it: the far side cusp) as it should render camera - specular - diffuse - specular - (area light) paths, at least if neither the camera nor the light nodes are counted as is suggested in the documentations?

Thank you!

P.S.: dispersion works beautifully on this setup with PhotonGI, this is a great feature! thank you!
Attachments
Fig_RayTracing1alt.jpg
Post Reply