使用集合使用Blender创建随机建筑物



我的想法是创建一个幻想城市,为了避免一遍又一遍地拥有相同的房子,但不必手动创建数百个房屋,我正在考虑创建"窗户"、"门"、"屋顶"等集合,然后创建将顶点分配给具有相同名称的特定组的对象("窗口"顶点组, "门"顶点组等),然后让搅拌机为房屋的每个实例选择一个随机窗口,为组中的每个顶点选择,门、屋顶等也是如此。

有没有办法做到这一点?(在网上找不到任何内容),还是我需要创建自定义插件?如果是这样,有什么好的参考或起点可以完成与此接近的事情吗?

我想到了粒子系统或子对象,但找不到一种方法将集合的随机部分附加到顶点。也想到了布尔值,但它没有附加到特定顶点的选项,也没有使用集合的选项。所以我不知道如何处理这个问题。

我的想法:

创建基本形状,并将顶点分配给"窗口"顶点组: https://i.stack.imgur.com/ir4Cg.png

然后将"Windows"集合中的随机对象附加到这些顶点,作为粒子或修饰符:

https://i.stack.imgur.com/OlphR.png

感谢您的任何帮助:)

好的,我找到了一种方法。

我使用了 3 个粒子系统(门、屋顶和窗户),每个粒子系统都使用顶点作为发射器,并使用矢量组来定义显示每个不同选项之一的位置。

为了避免粒子发射器在每个顶点放置多个对象,我创建了一个小脚本来计算每个顶点组的顶点数,并相应地更新每个粒子系统的发射数。

import bpy
o = bpy.data.objects["buildings"]
groups = ["windows", "doors", "roofs"]
for group in groups:
vid = o.vertex_groups.find(group)
vectors = [ v for v in o.data.vertices if vid in [ vg.group for vg in v.groups ] ]
bpy.data.particles[group].count = len(vectors)

我已经使用堆栈溢出中的某人的代码来计算向量组中的向量数量,但无法再次找到指向特定问题的链接,所以如果您在此处看到您的代码,请发表评论,我会用适当的信用更新我的答案。

最新更新