2012-06-19 36 views
2

搅拌机性能问题,当我运行此脚本:与产生紫外线球

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 

为什么会出现这种情况?有更好的方法吗?

我有足够的内存的服务器上运行此,我知道搅拌机可以扩展到使用大部分(它在渲染)。

+0

您是否尝试移动球体,或将它们添加到当前不可见的图层?我大胆猜测是,重绘可以通过添加球体,并重新划分1000个球形也许减缓下跌过程以某种方式触发。 – 9000

+0

这绝对是一个很好的猜测,但我不认为这就是发生了什么。球体只在脚本完成时绘制,并且我看到了选定层和不可见层的相同行为。 – PattimusPrime

回答

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()线。

该解决方案是不是我自己的。荣誉去CoDEmanX了在BlenderArtists这个答案!