【问题标题】:quickly adding large numbers of mesh primitives in blender在搅拌机中快速添加大量网格图元
【发布时间】:2018-02-17 13:05:58
【问题描述】:

我正在尝试使用其 Python 接口将数以万计的网格图元添加到 Blender 中的场景。我一直在使用一些东西来达到以下效果:

for i in range(10000):
    bpy.ops.mesh.primitive_cube_add(radius=1, location=(i, i, i))

不过,这种方法需要很多时间。有没有更有效的方法来做到这一点?

【问题讨论】:

  • This answer 比较不同方式创建多个立方体的时间。我的第一个建议是使用 bmesh 将多维数据集创建为一个对象,但这取决于您想要做什么,如果它们保持静态然后将其保留为一个对象,您只需要将它们分成多个对象,如果您想使用它们在模拟中。如果它们是一个网格对象,则有多种方法可以为它们设置动画。

标签: python blender


【解决方案1】:
import bpy
from mathutils import Vector;

n = "cube";
bpy.ops.mesh.primitive_cube_add(radius=1);
orig_cube = bpy.context.active_object;

for i in range(10000):
    m = orig_cube.data.copy();
    o = bpy.data.objects.new(n, m);
    o.location = Vector((i, i, i));
    bpy.context.scene.objects.link(o);

bpy.ops.object.delete();

在我的机器上大约需要 15 秒。如果您不需要唯一的立方体(即不打算单独修改它们的几何图形),那么您可以将相同的网格附加到多个对象。可能有更快的方法,例如创建单个网格和点云以及使用 dupliverts(在点云的每个顶点上复制子对象)。

仅包含点和复制品的示例(正如预期的那样,它很快就完成了,但当然不是一回事):

import bpy;
import bmesh;
from mathutils import Vector;

bpy.ops.mesh.primitive_cube_add(radius=1);
orig_cube = bpy.context.active_object;

bpy.ops.mesh.primitive_plane_add();
o = bpy.context.active_object;
me = o.data;
bm = bmesh.new();
for i in range(10000):
    bm.verts.new().co=Vector((i, i, i));
bm.to_mesh(me);
o.dupli_type = 'VERTS';
orig_cube.parent = o;

【讨论】:

  • 您能否补充一些关于如何快速创建点云的内容?
  • @paleto-fuera-de-madrid 我在一个示例中进行了编辑。与 blender 捆绑的脚本通常也是很好的例子。
  • 你能为每个立方体设置不同的颜色吗?
猜你喜欢
  • 2012-08-07
  • 2015-10-30
  • 2021-06-19
  • 2017-07-08
  • 2021-08-18
  • 2016-04-22
  • 2020-01-06
  • 2016-04-15
  • 2013-03-14
相关资源
最近更新 更多