Page MenuHome

Severe rendering delay in scene data preparation when using an array modifier
Closed, ResolvedPublic

Description

System Information
Linux copperhead 4.12.13-1-ARCH #1 SMP PREEMPT Fri Sep 15 06:36:43 UTC 2017 x86_64 GNU/Linux

OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Sandybridge Mobile
OpenGL core profile version string: 3.3 (Core Profile) Mesa 17.2.0
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 17.2.0
OpenGL shading language version string: 1.30

Blender Version
Broken: 2.79 8ef39d5c882

See attached system-info.txt:

Short description of error

Using an array modifier to create ~70 instances of a 12k triangle model results in an enormous delay
before rendering. Blender appears to be "Preparing scene data" but tile rendering still hasn't started
after about ten minutes of waiting.

I use array modifiers heavily in all of my projects and haven't seen any problem like this prior to today, and I very recently upgraded to 2.79, so I suspect an issue may have been introduced there.

Exact steps for others to reproduce the error

Please see "array_append.blend" in the repository at https://github.com/io7m/blender-perf-20170918

Just click render.

Event Timeline

Sergey Sharybin (sergey) claimed this task.
Sergey Sharybin (sergey) triaged this task as Confirmed, Medium priority.

Caused by some O(N^2) complexity in tangent space calculation. Will check if it's possible to speed up something.

Workaround would be to remove degenerated faces, by, i.e., removing doubles in edit mode.

Ouch!

I have no idea how these degenerate faces found their way into the mesh. Is there any way to show where they are in the viewport? Removing doubles eliminates over a thousand vertices, and that's just insane... Something clearly went very wrong when the chair was joined.

Eliminating a O(N^2) time complexity still sounds like a good idea, though.

Thanks for the impressively quick response, as ever!