Page 1 of 1

LuxCore bidirectional caustics quality

PostPosted: Thu Jan 11, 2018 12:31 am
by Philstix
I've always used LuxRender Classic API with the default bidirectional render mode, but I've read that users should transition to LuxCore.

I tried doing a very simple render - a Glass2 sphere above a white plane, lit by the 'Sun and Sky' environmental light - and the quality of the caustics produced by the LuxCore bidirectional renderer was very poor compared to the Classic API with the default bidirectional renderer.

Is there something I need to change to get LuxCore bidirectional to work?

I expect there is something obvious I'm overlooking, but so far it's eluding me.

I'm using Blender 2.79 with LuxRender version 'lux-opencl_linux64_18-12-2017', but I got the same result when I repeated the renders with 'lux-v1.6-x86_64-sse2-OpenCL'.

My OS is Xubuntu 16.04, running on an i7-4790K CPU @ 4.00GHz with 32 Gb of RAM.

Classic API in LuxCore bidirectional mode:
luxrender_classic_luxcorebidir_metropolis.png


LuxCore API in LuxCore bidirectional mode:
luxrender_luxcore-api_luxcorebidir_metropolis.png


Classic API in default bidirectional mode (The render time displayed is incorrect, because I didn't close the LuxRender window immediately. It actually took about 14 minutes):
luxrender_classic_bidir_metropolis.png


The .blend file:
2018-01-11_11-54-08.blend
(1.06 MiB) Downloaded 46 times

Re: LuxCore bidirectional caustics quality

PostPosted: Thu Jan 11, 2018 2:55 am
by Dade
A quite strange problem, it tooks some time to understand where it was.

It is a numerical precision problem. You are rendering 10cm sphere over 20x20m planes. It is the size of the plane (i.e. the scene bounding sphere) to trigger the problem. If you resize the plane from 20x20m to, for instance, 0.5x0.5m the problem goes away.

Infinite light sources (like sun, sky, etc.) includes the square of the radius of the scene bounding sphere in some computation and it is clearly triggering a numerical precision problem here (i.e. you run out of FP32 resolution). I'm checking the code to track exactly what is going wrong.

P.S. in your test, LuxCore is about 8-10 times faster than classic Lux. It isn't exactly a small detail.

Re: LuxCore bidirectional caustics quality

PostPosted: Thu Jan 11, 2018 6:45 am
by Dade
I have spent a lot of time digging in MIS computation of bidirectional path tracing code looking for an error ... and the problem was in the scene bounding sphere computation :roll:
Long story short: your already problematic "10cm in 20x20m" was rendered like "10cm in 200x200m" causing the problem I described above I should have fixed the problem:

bidir.jpg


Note: reducing the 20x20m plane is still useful and helps to reduce the noise.

P.S. I can send you the information to access the fixed code if you want.

Re: LuxCore bidirectional caustics quality

PostPosted: Thu Jan 11, 2018 2:03 pm
by Philstix
I'm impressed with how quickly you found the problem. 8-)

It shouldn't be an issue for me because I don't usually render scenes like that - I started with a large plane because I was going to create a test scene with meshes using Blender's default object size of a metre, but I then decided to test the caustics instead with a small sphere, and I just left the plane as it was. Now that I know what caused the problem it will be easy to avoid in future.

And yes, the speed of the LuxCore renderer is a wonderful improvement. The main thing that's prevented from using LuxCore is the lack of support for network rendering, which I use regularly. Perhaps I need to find some other way of sharing the render load across multiple machines.

I don't have my system set up for development, so I'll just persist with the latest binaries for now.

Thanks for your help.

Re: LuxCore bidirectional caustics quality

PostPosted: Thu Jan 11, 2018 9:11 pm
by Philstix
Philstix wrote:The main thing that's prevented from using LuxCore is the lack of support for network rendering.


Doh! I just checked and LuxCore Bidirectional in Classic API supports network rendering! My bad. (I could have sworn I checked that previously... I must be going senile...)

Re: LuxCore bidirectional caustics quality

PostPosted: Sun Jan 28, 2018 6:41 am
by Meelis
Was the scene bounding sphere computation bug also in BIDIRVMCPU with classic LuxRender?

About that FP32, is there speed penalty rendering object with polygons below 0,1mm in 50m diameter scene?

The "bidirvm.startradius.scale = 0.0084"
Works it like 0.0084 x 50m = 0.42m (is this good or bad starting point)?