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

时间:2019-04-26 10:05:36

标签: blender

我有一个创建幻想城市的想法,避免一遍又一遍地拥有同一所房子,但不必手动创建数百个我正在考虑创建诸如“窗户”,“门”,“屋顶”之类的房子的房子等),然后创建具有相同名称(指定给具有相同名称的特定组(“窗口”顶点组,“门”顶点组等)的对象的对象,然后让搅拌器为房屋的每个实例选择一个随机的窗口组中顶点的数量,与门,屋顶等相同。

有没有办法做到这一点? (无法在线找到任何内容),还是需要创建自定义插件?如果是这样,那么有什么好的参考或起点可以完成此工作?

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

我的想法:

创建基本形状,并将顶点分配给“ windows”顶点组: https://i.imgur.com/DAkgDR3.png

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

https://i.imgur.com/rl5BDQL.png

感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

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

我正在使用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)

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