产生UV球的搅拌器性能问题

时间:2012-06-19 22:52:22

标签: python python-3.x blender blender-2.61

当我运行此脚本时:

import bpy, time
t0 = time.time()

for i in range(1000):
    bpy.ops.mesh.primitive_uv_sphere_add()

    if i % 100 == 0:
        print(time.time()-t0)
        t0 = time.time()

这是输出(指数增长与时间的关系):

1.1920928955078125e-05
0.44658803939819336
0.46373510360717773
0.5661759376525879
0.7258329391479492
0.9994637966156006
1.381392002105713
1.8257861137390137
2.4634311199188232
3.2817111015319824

为什么会这样?有更好的方法吗?

我在具有充足内存的服务器上运行它,我知道Blender可以扩展使用它的大部分(它在渲染中)。

1 个答案:

答案 0 :(得分:1)

快速回答:

bpy.ops.object.select_all(action='DESELECT')
bpy.ops.mesh.primitive_uv_sphere_add()
sphere = bpy.context.object

for i in range(1000):
    ob = sphere.copy()
    ob.data = sphere.data.copy()
    bpy.context.scene.objects.link(ob)
bpy.context.scene.update()

说明:

bpy.ops.*中的任何内容都会导致每次调用都重绘一个场景。你想避免在循环中调用这些。上面的脚本调用低级copy()方法,这些方法不会重绘。如果您想要链接重复项,可以删除sphere.data.copy()行。

这个解决方案不是我自己的。 Kudos在BlenderArtists点击CoDEmanX获取此答案!