Render Optimization through CPU-Only Geometry BVH Updating
For complex OptiX scenes with tens-of-thousands of unique objects, the time spent updating geometry BVH can get to a point where it cannot be ignored.
However, the lengthy time spent updating geometry BVH is only present when rendering with a GPU or a CPU/GPU combo. When rendering in OptiX with only a CPU, the build times for updating geometry BVH is near instant. If it wasn't already obvious, it is not advantageous to render complex scenes with only a CPU.
Following this line of thought, my proposal is having an option to utilize the CPU to only update the BVH geometry before handing the rendering entirely to the GPU. This would save an enormous amount of time for complex projects that have thousands of frames.
In the attached video, there is a simplistic scene containing a few thousand non-instanced cubes. When rendering OptiX with only a GPU, the updating of BVH geometry takes about a minute whereas the CPU-only version has the BVH geometry updating near instantaneously.
Do keep in mind, the scene in the video is meant to represent an environment where instancing objects is not feasible. With all that being said, please excuse my naivety regarding the capabilities of the OptiX acceleration structure. I am not fully versed on the limits of what the software can achieve.
2 Comments
Isn't the cpu render faster here because you just built the BVH in the previous render with no update in-between?
Just had to double check.
Even with a new scene (no prior renders) the CPU render will still instantly begin rendering without needing to update geometry BVH. As soon as the GPU is enabled in the settings, it suddenly has the need to update the geometry BVH for every single non-instanced object. Furthermore, even with back-to-back GPU renders, each frame needs to update the geometry BVH despite nothing in the scene changing