python 如何快速生成大量立方体网格?
In python how do I generate a large amount of cube meshes fast?
我正在尝试生成大量(> 100 万)立方体网格,然后我将不得不在 Blender 中重新处理这些网格。
目前,我通过使用 Python API 在 Blender 中实际生成立方体来做到这一点,就像这样:
bpy.ops.mesh.primitive_cube_add()
但是随着立方体数量的增加,它变得越来越慢。
我可以使用其他方法吗?唯一的要求是我以后可以在 Blender 中导入的文件格式,这应该不是什么限制。
primitive_add_cube
是一个运算符,它会引起场景更新。添加的对象越多,每次添加后需要更新的对象就越多。所以它变得指数级变慢。
您应该使用低级别 API 来避免这种情况。如果您想一次又一次地添加相同的网格(立方体),只需复制该对象即可。如果你不认为这是一个链接副本,也复制网格数据:
import bpy
bpy.ops.mesh.primitive_cube_add()
ob = bpy.context.object
for i in range(-100, 100, 3):
copy = ob.copy()
copy.data = ob.data.copy()
copy.location.x = i
# use this only for blender < 2.9
# bpy.context.scene.objects.link(copy)
bpy.context.collection.objects.link(object)
bpy.context.scene.update() # only once
# Moving
ob.location.z = 5
我正在尝试生成大量(> 100 万)立方体网格,然后我将不得不在 Blender 中重新处理这些网格。
目前,我通过使用 Python API 在 Blender 中实际生成立方体来做到这一点,就像这样:
bpy.ops.mesh.primitive_cube_add()
但是随着立方体数量的增加,它变得越来越慢。
我可以使用其他方法吗?唯一的要求是我以后可以在 Blender 中导入的文件格式,这应该不是什么限制。
primitive_add_cube
是一个运算符,它会引起场景更新。添加的对象越多,每次添加后需要更新的对象就越多。所以它变得指数级变慢。
您应该使用低级别 API 来避免这种情况。如果您想一次又一次地添加相同的网格(立方体),只需复制该对象即可。如果你不认为这是一个链接副本,也复制网格数据:
import bpy
bpy.ops.mesh.primitive_cube_add()
ob = bpy.context.object
for i in range(-100, 100, 3):
copy = ob.copy()
copy.data = ob.data.copy()
copy.location.x = i
# use this only for blender < 2.9
# bpy.context.scene.objects.link(copy)
bpy.context.collection.objects.link(object)
bpy.context.scene.update() # only once
# Moving
ob.location.z = 5