【问题标题】:Blender performance issues with generating UV spheres生成 UV 球体的搅拌机性能问题
【发布时间】:2012-06-22 01:29:35
【问题描述】:

当我运行这个脚本时:

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

【问题讨论】:

  • 您是否尝试移动您的球体,或者将它们添加到当前不可见的图层中?我的疯狂猜测是,可能会通过添加球体以某种方式触发重绘,而重绘 1000 个球体可能会减慢进程。
  • 这绝对是一个很好的猜测,但我不认为这是正在发生的事情。球体仅在脚本完成时绘制,我看到选定图层和不可见图层的行为相同。

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


【解决方案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() 行。

这个解决方案不是我自己的。感谢 BlenderArtists CoDEmanX 的回答!

【讨论】:

    猜你喜欢
    • 2012-08-07
    • 2020-04-29
    • 2017-12-31
    • 2022-06-22
    • 1970-01-01
    • 2011-12-09
    • 2020-01-06
    • 2015-06-23
    • 2015-06-28
    相关资源
    最近更新 更多