I inserted a bunch of timing checks in the view_update() and view_draw() methods in BlendLuxCore.
For testing I only modified the absorption color of the clouds volume, like in the video, and at the end I let it render a bit uninterrupted.
This is a run with the current BlendLuxCore settings:
Code: Select all
Current BlendLuxCore settings:
rtpath.resolutionreduction = 1
rtpath.resolutionreduction.preview = 4
rtpath.resolutionreduction.preview.step = 1
view_update() took 168.1 ms
view_draw() took 142.0 ms
view_update() took 171.5 ms
view_draw() took 141.0 ms
view_update() took 171.1 ms
view_draw() took 138.0 ms
view_update() took 168.0 ms
view_draw() took 141.0 ms
view_update() took 170.1 ms
view_draw() took 136.0 ms
view_draw() took 140.0 ms
view_draw() took 141.0 ms
view_draw() took 139.0 ms
view_draw() took 139.0 ms
view_draw() took 139.0 ms
view_draw() took 140.0 ms
view_draw() took 170.0 ms
view_draw() took 809.8 ms
view_draw() took 835.1 ms
view_draw() took 806.5 ms
view_draw() took 820.3 ms
view_draw() took 801.2 ms
view_draw() took 814.2 ms
view_draw() took 810.6 ms
And this is with Dade's proposed settings:
Code: Select all
Dade's proposed settings:
rtpath.resolutionreduction = 4
rtpath.resolutionreduction.preview = 4
rtpath.resolutionreduction.preview.step = 8
view_update() took 171.0 ms
view_draw() took 141.0 ms
view_update() took 171.0 ms
view_draw() took 137.0 ms
view_update() took 171.0 ms
view_draw() took 136.0 ms
view_update() took 171.0 ms
view_draw() took 152.0 ms
view_draw() took 136.0 ms
view_draw() took 135.0 ms
view_draw() took 136.0 ms
view_update() took 170.0 ms
view_draw() took 135.0 ms
view_update() took 169.0 ms
view_draw() took 138.0 ms
view_update() took 170.0 ms
view_draw() took 138.0 ms
view_update() took 168.0 ms
view_draw() took 136.0 ms
view_update() took 169.0 ms
view_draw() took 137.0 ms
view_draw() took 139.0 ms
view_draw() took 140.0 ms
view_draw() took 136.9 ms
view_draw() took 138.0 ms
view_draw() took 136.0 ms
view_draw() took 136.0 ms
view_draw() took 152.0 ms
view_draw() took 137.0 ms
view_draw() took 135.0 ms
view_draw() took 137.0 ms
view_draw() took 136.0 ms
view_draw() took 135.0 ms
view_draw() took 136.0 ms
view_draw() took 136.0 ms
view_draw() took 136.0 ms
view_draw() took 137.0 ms
view_draw() took 137.0 ms
view_draw() took 137.0 ms
The only difference is the drawing time after the render runs uninterrupted for a while, so I inserted more fine-grained timing checks:
Code: Select all
view_update(): checking for changes took 125.0 ms
view_update(): applying changes took 42.0 ms
view_update() took 167.0 ms
view_draw(): checking for changes took 126.0 ms
view_draw(): session.WaitNewFrame() took 1.0 ms
view_draw(): session.UpdateStats() took 0.0 ms
view_draw(): framebuffer update took 22.0 ms
view_draw(): framebuffer drawing took 1.0 ms
view_draw(): showing stats in UI took 0.0 ms
view_draw() took 151.0 ms
view_update(): checking for changes took 124.0 ms
view_update(): applying changes took 41.0 ms
view_update() took 167.0 ms
view_draw(): checking for changes took 126.0 ms
view_draw(): session.WaitNewFrame() took 1.0 ms
view_draw(): session.UpdateStats() took 0.0 ms
view_draw(): framebuffer update took 7.0 ms
view_draw(): framebuffer drawing took 0.0 ms
view_draw(): showing stats in UI took 0.0 ms
view_draw() took 135.0 ms
"checking for changes" is the biggest chunk, and because I do it both in update and drawing (because some updates only happen during drawing) it hurts double.
The main priority should be to optimize this method in BlendLuxCore.
edit: When I disable update checking, I get the following pattern:
Suddenly, WaitNewFrame() takes 40-100 ms. I guess this is because with updates, the next frame is already getting rendered while the slow update check is running.
Code: Select all
view_draw(): checking for changes took 0.0 ms
view_draw(): session.WaitNewFrame() took 88.1 ms
view_draw(): session.UpdateStats() took 0.0 ms
view_draw(): framebuffer update took 6.0 ms
view_draw(): framebuffer drawing took 0.0 ms
view_draw(): showing stats in UI took 0.0 ms
view_draw() took 97.1 ms
view_draw(): checking for changes took 0.0 ms
view_draw(): session.WaitNewFrame() took 90.1 ms
view_draw(): session.UpdateStats() took 0.0 ms
view_draw(): framebuffer update took 6.0 ms
view_draw(): framebuffer drawing took 1.0 ms
view_draw(): showing stats in UI took 0.0 ms
view_draw() took 97.1 ms
view_draw(): checking for changes took 0.0 ms
view_draw(): session.WaitNewFrame() took 89.1 ms
view_draw(): session.UpdateStats() took 0.0 ms
view_draw(): framebuffer update took 6.0 ms
view_draw(): framebuffer drawing took 0.0 ms
view_draw(): showing stats in UI took 1.0 ms
view_draw() took 96.1 ms
view_draw(): checking for changes took 0.0 ms
view_draw(): session.WaitNewFrame() took 89.0 ms
view_draw(): session.UpdateStats() took 0.0 ms
view_draw(): framebuffer update took 11.0 ms
view_draw(): framebuffer drawing took 0.0 ms
view_draw(): showing stats in UI took 0.0 ms
view_draw() took 100.0 ms
view_draw(): checking for changes took 0.0 ms
view_draw(): session.WaitNewFrame() took 39.0 ms
view_draw(): session.UpdateStats() took 0.0 ms
view_draw(): framebuffer update took 7.0 ms
view_draw(): framebuffer drawing took 0.0 ms
view_draw(): showing stats in UI took 0.0 ms
view_draw() took 46.0 ms
view_draw(): checking for changes took 0.0 ms
view_draw(): session.WaitNewFrame() took 87.0 ms
view_draw(): session.UpdateStats() took 0.0 ms
view_draw(): framebuffer update took 11.0 ms
view_draw(): framebuffer drawing took 0.0 ms
view_draw(): showing stats in UI took 0.0 ms
view_draw() took 98.0 ms
view_draw(): checking for changes took 0.0 ms
view_draw(): session.WaitNewFrame() took 82.0 ms
view_draw(): session.UpdateStats() took 0.0 ms
view_draw(): framebuffer update took 11.0 ms
view_draw(): framebuffer drawing took 0.0 ms
view_draw(): showing stats in UI took 0.0 ms
view_draw() took 94.0 ms
view_draw(): checking for changes took 0.0 ms
view_draw(): session.WaitNewFrame() took 88.0 ms
view_draw(): session.UpdateStats() took 0.0 ms
view_draw(): framebuffer update took 6.0 ms
view_draw(): framebuffer drawing took 0.0 ms
view_draw(): showing stats in UI took 0.0 ms
view_draw() took 95.0 ms