Building BVH is killing render time (Cycles, Eevee, and Redshift Maya Compared)

Why does building the scene (building BVH) take SO long in Blender? I’m posting this because I think Cycles/Eevee could absolutely crush the competition if this was fixed.

I’ve attached the scene so you can look for yourself. I realize I’m working with a ton of geometry in this scene, but I need the pegs subdivided to appear smooth in the render. I’m using the same amount of subdivisions within Maya for my test. (camera angles are a little off)

I tried adaptive subdivision in Blender, but the render times were even more of a joke! After optimizations (limiting subdivisions) I got the render time down to just over two minutes per frame.

1st:Cycles
2nd:Eevee
3rd:RedShift

Cycles: 1m 14s
Eevee: 54s
RedShift Maya: 38s

Building BVH for the scene in Blender is killing render times! (Even in Eevee).

If Blender built the scene as fast as Maya, those render times would be closer to 10s for Cycles, and 2s for Eevee. (Granted I’m much more experienced optimizing render time in Blender than I am in Maya!)

Maya builds everything and starts rendering in under 3 seconds.

I have 2,552 frames for this animation, so this is a big deal! I thought I could save time trying things in Eevee, but I’m shocked at how slow this is!

Blender File: (note, I’m using 2.81 for the denoising. If you want to open in 2.80 just disconnect denoiser in compositor).

Computer specs:
intel 18 core i9 gold
2x GTX1080ti
64GB ram

Cycles isn’t slow at all. I had a quick look at your scene and this is a typical case that screams “instances” to me. In your scene every single peg is made of its own polygon mesh while all the simple cylindrical pegs could easily be replaced by a single mesh that gets instanced.
I just deleted all your geometry (except for one peg and one building), added a simple plane with a particle system that instances the peg (with a building on top of each peg for added fun) thousands of times, many many more pegs than in your scene plus a building on every single one of it.

Of course it’s not an exact lookalike copy of your scene but I’d just like to give you an idea how instancing could massively help you.

File size went from 270MB to a mere 13MB, render preparation (BVH building etc.) takes under a second now and memory consumption during render is 90MB max.

Instead of dumb particles you can also use vertices or faces of a mesh to set the locations of the instances.

2 Likes

Why didn’t I think of that!!

Would copying the pegs over with “alt D” accomplish the same thing? Might take some time to set up the scene, but this is encouraging. I’d really love to be able to use Blender on this one.

I think building Spatial splits calculation is not multi threaded.

From my experience “Alt D” is not as good as pure duplis

spacial splits are not enabled.

Well you have subdivision on which has to be done before render. Applying the subdivision can help quite a bit, You also have a normal map node plugged in to the orange pillars which has to calculate tangents (Calculating tangents is horribly slow in cycles)

But here check out this 13 second render

1 Like

I have the same problem in a project right now. Eevee renders in seconds in viewport but when I hit render it takes minutes to complete the frame and most of the time is preparing for render (building BVH etc). This must be a bug of some sort.
My solution for this animation project is to set blender in fullscreen mode and take a screenshots of every frame.(automated with a script)
Now I have fullHD renders in Eevee with 5 sec a frame instead of 1.5 minutes.

This is excellent. Thank you!

Instancing was the answer here. It took about 2 hours to set up, but the render time is now down to 36s.

Thank you again! I’ve learned my lesson with the need to instance…

1 Like