Cycles_path_guiding tests

@Eneen thanks. I looked at it, and this scene triggered a situation (looooong paths with a chain of 100 perfect spec bounces) that we did not test before.
The fix for that will be part of the next OpenPGL release.

8 Likes

Thank you!
Have you also looked into directional light issue? There’s one inside scene to test, just turn off env.

EDIT: my bad here, light named “spot_light” was actually direct, so you need to enable “spot_light” to test.

Easy in most cases but not ideal… Hope that issue can get resolved regardless. Guess park guiding is actually too good at hiding paths through miniscule openings lol

I seem to have a scene that crashes inside OpenPGL using the Aug. 1st build:

ExceptionCode         : EXCEPTION_ACCESS_VIOLATION

Stack trace:
blender.exe         :0x00007FF783B26A40  openpgl::KDTreePartitionBuilder<openpgl::Region<openpgl::ParallaxAwareVonMisesFisherMixture<4,32>,o
blender.exe         :0x00007FF783B19B30  tbb::internal::function_invoker<<lambda_8f79c36ac1c78eba32095d68b6a570b5> >::execute
tbb.dll             :0x00007FFEDD3EF220  tbb::recursive_mutex::scoped_lock::internal_try_acquire
tbb.dll             :0x00007FFEDD3EF220  tbb::recursive_mutex::scoped_lock::internal_try_acquire
blender.exe         :0x00007FF783B26A40  openpgl::KDTreePartitionBuilder<openpgl::Region<openpgl::ParallaxAwareVonMisesFisherMixture<4,32>,o
blender.exe         :0x00007FF783B25BB0  openpgl::KDTreePartitionBuilder<openpgl::Region<openpgl::ParallaxAwareVonMisesFisherMixture<4,32>,o
blender.exe         :0x00007FF783B24DC0  openpgl::Field<openpgl::AdaptiveSplitAndMergeFactory<openpgl::ParallaxAwareVonMisesFisherMixture<4,
blender.exe         :0x00007FF783B251D0  openpgl::SurfaceVolumeField<openpgl::AdaptiveSplitAndMergeFactory<openpgl::ParallaxAwareVonMisesFis
blender.exe         :0x00007FF783B05AC0  pglFieldUpdate
blender.exe         :0x00007FF780CF2130  ccl::PathTrace::guiding_update_structures

Open the following and enable Viewport rendering:
test-light.blend (905.1 KB)

I’m not sure if I do something wrong but I can’t get caustics from spheres, but no problems with flat surfaces. It’s current 3.4 build from 01.08.2022:


Set the filter glossy value to something like 0.10 or 0.20. Path Guiding helps with caustics, but initial paths need to be found before the magic can start.

I will also note that the default distribution scheme (in the current version of OpenPGL) has trouble with difficult effects if they are not discovered right away, the Directional Quadtree distribution meanwhile does not have this problem.

Correction: These problem are caused by a combination of auto smooth shading and shadow terminator and custom split normals data, not path guiding.

3 Likes

Tests with new Build


6 Likes

I downloaded the latest path guiding branch build. Simple test - a U shaped corridor, with a point light at the end of one arm and Suzanne at the end of the other so the light has to bounce around the bend to reach her.

Render set to equal time (60s).

Path Guiding off

Path Guiding on

Path guiding clearly helps in this scenario - much cleaner image in the same amount of time.

6 Likes

Another test - this time a disco ball lit by a spot light - again equal time render (60s).

Path Guiding Off

Path Guiding On.

In this example - there is a slight tradeoff with noise in the spot light as path guiding renders samples slower, so the overall number of samples with path guiding on is lower - but IMO what you do gain (the reflective caustics) more than compensates.

12 Likes

Very nice! I hope Path Guiding will soon land in Master.

2 Likes

Yep - I believe it’s intended for blender 3.4, so hopefully it will land in master very soon.

1 Like

I hope it “lands in Linux” first! :wink:

1 Like

Another test - this time lighting through coloured glass - a point light inside a glass sphere with voronoi noise driving the colour (a bit like a Tiffany lamp or glass mosaic lamp). Again equal render time (60s).

Guiding off

Guiding on

11 Likes

One thing I have noticed - path guiding can be a bit hit and miss. These three scenes were rendered using exactly same settings - I just reset the path guiding training between renders by changing some settings, rendering, then changing them back and re-rendering, sometimes path guiding finds the path better than others. It must be randomly sampling paths and sometimes it just misses.

I noticed it doing something similar a few weeks back on the early builds, but didn’t think anything of it as it was still very early days.

It’s definitely worth bearing this mind if you render a test scene and get a bad result - it may be that it just missed on that render - resetting the guiding training and rendering again may give you a better result second time around.

1 Like

Hm, would it reset between frames? That would cause severe flickering. Can’t wait to see this on gpus.

Not sure - maybe it preserves the guiding training between frames rendered as part of the same rendering batch. It might be worth contacting Brecht to find out.

2 Likes

Another thing it doesn’t seem to like is the default (unassigned) material.

In some of my tests above (especially the bounce one) - I left material on the ground plane and light blocking walls unassigned (which defaults to what looks like a diffuse mid grey material).

However if I assign a diffuse shader to these objects instead - the path guiding result seems to be much better. This won’t affect most scenes as you will likely have materials assigned to all your objects - but just another thing to bear in mind when testing.

2 Likes

Interesting tests and conclusions. Please post it in this thread over at Blender Devtalk. The devs will value your input:

1 Like

That’s a very good question. Some techniques aren’t advisable for animation because of their temporal instability (denoising single frames, photon mapping, etc), I wonder if path guiding is any different ?

1 Like