
扩展免费插件:WFC 3D 生成器 — Blender 扩展
WFC 3D 生成器插件使用带有约束的波函数折叠算法的简单实现,从对象集合中生成一个新对象。
源集合中的每个对象都可以使用自定义属性来定义允许的邻居。生成器将这些对象随机组合在 3D 网格中,同时遵守邻居约束。网格中允许的位置可以通过网格约束来定义。
快速入门指南
- 安装并启用 WFC 3D Generator 插件
- 使用某些对象创建源集合
- 定义约束:
- 打开 3D 视口:按“N”键> WFC 3D 编辑> WFC 3D 约束编辑器
- 选择源集合
- 向对象添加一些约束
- 创建一个新对象:
- 打开 3D 视口:WFC 3D Gen > WFC 3D 生成器
- 按“生成 WFC 3D 模型”
一些示例可以在 GitHub 上找到。
特征
WFC 3D 生成器扩展实现了波函数折叠算法的一个非常简单的变体。通过巧妙选择的构建块和约束,可以随机创建任何对象,但要考虑到约束,例如艺术品、建筑物、城市、游戏地图,甚至星系。
- 简单的生成器界面 WFC 3D Gen:
- 由于渲染延迟,它允许您观看 WFC 算法的工作。渲染可以随时暂停或取消。
- 切里拣选功能在可调节的延迟后自动开始生成,以更快地生成所需的结果。
- 除了网格大小之外,还可以设置单元格大小以及偶数行和奇数行、列和文件之间的偏移量。
- 方便的约束编辑器 WFC 3D 编辑:
- 所有当前支持的约束都可以轻松地分配给那里的对象。
- 提供同时为一个或多个对象(对象约束)或为整个源集合(集合默认值)定义约束的选项。
- 允许您在 3D 视口或大纲视图中选择对象,并手动或自动传输所选对象
- 自动保存:启用后,每个约束更改都会自动保存为自定义属性
- WFC 3D 验证器:
- 使用构建基块检查源集合,以查看是否应用了变换(缩放、旋转)以及邻居约束中是否存在邻居。
约束概述
- 邻接约束:
- 邻居约束:定义所有可能方向(一次)允许的邻居列表; 优点:容易定义,缺点:难以扩展
- 连接器约束:为任何方向定义与相反方向上具有相同连接器名称的可能邻居的连接器名称匹配的连接器名称; 优点:构建块易于扩展,缺点:并不总是容易定义
- 网格和区域约束:
- 允许您指定对象在栅格中可能位于的位置。
- 概率约束:
- 这些约束会增加或减少随机选择对象的概率。
- 频率限制:
- 定义同一对象或任何其他对象在紧邻附近或 3 轴 XYZ 之一上出现的频率。
- 对称约束:
- 这些约束允许生成镜像对称和/或旋转对称对象。
- 可以将随机转换转移到镜像伙伴,相应地翻转镜像伙伴, 或将其他构建基块定义为镜像伙伴。
- 转换:
- 这些并不是真正的限制。这允许您随机化构建块的位置、大小和旋转。
WFC 3D 生成器算法的工作原理
- 使用允许的构建基块列表初始化网格的每个单元格。将考虑网格和区域约束。
- 找到熵最低的单元格,在本例中为构建块列表最小的单元格。如果有多个,则选择第一个或随机一个。
- 折叠单元格:从构件列表中选择一个随机对象。概率约束和对称约束被传播,匹配的单元格被折叠。
- 将随机选择的构建基块的约束传播到邻域和整个网格。应用频率约束和邻接约束。
- 重复步骤 2-4,直到所有单元格都折叠。
- 按照单元格折叠的顺序渲染网格。应用转换约束。
限制和已知问题
- 要使邻居限制生效,源集合中必须有多个对象。
- 区域约束不适用于所有对称约束变量
统计:每个对象的约束属性
- 相邻约束:28
- 网格约束:4
- 区域约束:3
- 概率约束:3
- 变身:11
- 频率约束:11
- 对称约束:19
- 连接器约束:27
- 总和:106
相邻约束
- 允许在所有方向上限制邻居:面邻居、边邻居 ()、角邻居 (
wfc_en_...wfc_cn_...) - 使用的自定义属性:面邻居:、边邻居:、 角邻居: , ,
wfc_[left|right|front|back|top|bottom]wfc_en_[fl|fr|ft|fb|bl|br|bt|bb|lt|lb|rt|rb]wfc_cn_[fbl|fbr|ftl|ftr|bbl|bbr|btl|btr]wfc_allow_neighbor_constraint_violationswfc_any - 允许的属性值:
- 空字符串 – 允许所有邻居
- 逗号分隔的对象名称列表 – 允许的邻居
- “None” – 不允许所有邻居
栅格约束
拐角约束:
- 使用的自定义属性:
wfc_corners - 允许的属性值:
- 空字符串 – 允许所有角
- “-” – 禁止所有角落
- 逗号分隔的允许角列表:(“F”-前,“B”-后或下在第二个位置,“T”-上,“L”-左,“R”-右)
fbl,fbr,ftl,ftr,bbl,bbr,btl,btr
边缘约束:
- 使用的自定义属性:
wfc_edges - 允许的属性值:
- 空字符串 – 允许所有边
- “-” – 禁止所有边
- 逗号分隔的允许边列表:(“F” – 前面,“B” – 第二位的背面或底部,“T” – 顶部,“L” – 左,“R” – 右)
fb,fl,ft,fr,bb,bl,bt,br,lb,lt,rb,rt
面约束:
- 使用的自定义属性:
wfc_faces - 允许的属性值:
- 空字符串 – 允许所有面
- “-” – 禁止所有面孔
- 逗号分隔的允许人脸列表:
front,back,top,bottom,left,right
内部约束:
- 使用自定义属性:
wfc_inside - 允许的属性值:
- 空字符串 – 允许对象保留在网格内
- “-” – 禁止呆在室内
区域约束
- 使用的自定义属性:
wfc_region_min,wfc_region_max,wfc_region_quadrant - 允许的属性值:
- wfc_region_[min|max]:整数向量
- wfc_region_quadrant:大小为 8 的布尔向量 (fbl,fbr,ftl,ftr,bbl,bbr,btl,btr)
概率约束
- 使用的自定义属性:
wfc_weight,wfc_probability,wfc_auto_weight - 允许的属性值:
- wfc_probability:0 到 1 之间的浮点值
- wfc_weight:空字符串 – 权重为 1,0 – 对象不会被使用,1..n – 增加被选择的几率为 n 倍
- wfc_auto_weight:布尔启用/禁用自动重量确定
转换
- 使用的自定义属性:
wfc_translation_min,wfc_translation_max,wfc_translation_steps,wfc_rotation_min,wfc_rotation_max,wfc_rotation_steps,wfc_scale_min,wfc_scale_max,wfc_scale_steps,wfc_scale_uni,wfc_scale_type - 允许的属性值:
- wfc_translation_min,wfc_translation_max,wfc_translation_steps:浮点向量 (x,y,z)
- wfc_rotation_min,wfc_rotation_max,wfc_rotation_steps:浮点向量 (x,y,z)
- wfc_scale_type:整数值:0 – 无缩放,1 – 均匀缩放,2 – 非均匀缩放
- wfc_scale_uni:用于均匀缩放的浮点向量(min,max,steps)
- wfc_scale_min,wfc_scale_max,wfc_scale_steps:用于非均匀缩放的浮点向量 (x,y,z)
频率约束
- 使用的自定义属性:
wfc_freq_[any_]neighbor[_face|_edge|_corner],wfc_freq_grid,wfc_freq_[any_]axes - 允许的属性值:
- wfc_grid, wfc_freq_[any_]neighbor[_face|_edge|_corner]:整数
- wfc_[_any]_axes:整数向量
对称约束
- 使用的自定义属性:
wfc_sym_mirror,wfc_sym_rotate_axis,wfc_sym_rotate_n,wfc_sym_mirror_axes_[x|y|z|xy|xz|yz|xyz],wfc_sym_mirror_flip_[x|y|z|xy|xz|yz|xyz],wfc_sym_mirror_flip_transl, wfc_sym_mirror_trans - 允许的属性值:
- wfc_sym_mirror:布尔值或整数的向量
- wfc_sym_mirror_axes_[x|y|z|xy|xz|yz|xyz]:指向镜像伙伴对象的指针
- wfc_sym_mirror_flip_[x|y|z|xy|xz|yz|xyz]:允许翻转镜像伙伴的布尔值
- wfc_sym_mirror_flip_transl:一个布尔值,允许镜像伙伴翻转平移转换
- wfc_sym_mirror_trans:一个布尔值,允许将随机变换转移到镜像伙伴
- wfc_sym_rotate_axis:浮点向量
- wfc_sym_rotate_n:整数(旋转次数:n=4 => 90°旋转)
连接器约束
- 使用的自定义属性:
wfc_conn_[any|front|back|left|right|top|bottom|cn_(fbl|fbr|ftl|ftr|bbl|bbr|btl|btr)|en_(fl|fr|ft|fb|bl|br|bt|bb|lt|lb|rt|rb)] - 允许的属性值:带有连接器名称的字符串
即将推出的功能
- 尺寸约束:允许构建块覆盖多个网格单元(XYZ 跨度和对齐方式)
- 向网格添加噪声 (Perlin, Voronoi, … ):从网格中删除对象或将对象添加到网格以更改对象出现的概率。
- 视口约束可视化工具
- 几何约束:匹配边/面
- 也许有各种网格形状:立方体、球形和圆柱形



请先 !