Skip to main content
 首页 » 编程设计

python之生成 UV 球体的 blender 性能问题

2025年05月04日11小虾米

当我运行这个脚本时:

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 可以扩展以使用大部分内存(它在渲染中使用)。

请您参考如下方法:

快速回答:

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对于这个答案!