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!
Simple SDS caustic investigation
Forum rules
Please upload a testscene that allows developers to reproduce the problem, and attach some images.
Please upload a testscene that allows developers to reproduce the problem, and attach some images.
Simple SDS caustic investigation
- Attachments
-
- BubbleBlenderExtreme3.blend
- (1.65 MiB) Downloaded 173 times
Re: Simple SDS caustic investigation
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.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?
LuxCoreUI executable is included in the standalone version of LuxCoreRender.
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 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?
Yes, dispersion is supported by PhotonGI.
Re: Simple SDS caustic investigation
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.
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.
Re: Simple SDS caustic investigation
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
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
Re: Simple SDS caustic investigation
To everything but specular depth, see https://github.com/LuxCoreRender/BlendL ... ig.py#L274
Re: Simple SDS caustic investigation
Again, thank you for your reply!
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?
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.
Thank you very much, B.Y.O.B., this is also very helpful!B.Y.O.B. wrote: ↑Tue Feb 18, 2020 2:59 pmTo everything but specular depth, see https://github.com/LuxCoreRender/BlendL ... ig.py#L274
Re: Simple SDS caustic investigation
My very first question: are we talking of human cartilage ? Does the meniscus really act as glass material ? It sounds strange.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.
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.).
Re: Simple SDS caustic investigation
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
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 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 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!
Re: Simple SDS caustic investigation
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!
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!