一般情况下我们想要在Blender里铺设一条鹅卵石道路,你会怎么构思呢?是不是先做几颗鹅卵石,然后再做地面,然后利用粒子系统让石头作为毛发?
这个方法虽然理论上可行,但存在几个问题,第一是粒子系统有比较严重的实例重叠,也就是石头与石头之间会存在穿模问题,第二是我们没有办法复用这套系统,比如我像让我刚做好的房子也摇身一变成石头房,就只能重新做一套粒子系统,而且大概率还会出问题。而解决的方法也很简单,那就是用几何节点来自动生成“鹅卵石”!
第一步:打破物体原有网格布局
以鹅卵石铺设的道路为例,它们最大的特点就是几乎没有摆放的规则,以无序的组合构建了一个有序的物体,所以我们要做的第一件事就是打破物体的既有网格布局,在这里我们就用最简单的“栅格”为例,新建任意物体进入几何节点编辑器,用“栅格”连接“组输出”,我们默认会得到一个3×3总计9个顶点的平面,在这里我们稍事调整一下数据,可以比如3m×3m以及X/Y方向各20个顶点,接下来要做的,就是让这些一个个的小格子都变化出不同的形状并向上挤出,以获得满地“鹅卵石”的视觉效果。
紧接着我们要用三角化和对偶网格来让这些小格子都变成菱形状,并且我们需要使用“随机值”的“布尔”来控制“三角化”的范围,具体设置可以参考图1。
图1
这样做就是为了让这些小格子有更多的随机属性,但显然这幅度并不够,因此我们还需要让“栅格”的每个顶点位置发生一些偏移,这就需要用到咱们非常熟悉的套路——使用“噪波纹理”和“矢量相减”“矢量缩放”“矢量相乘”和“设置位置”来让“栅格”的顶点在X/Y方向产生随机位移,就能获得如图2的效果了,这样看上去是不是就有点像鹅卵石路面了呢?
图2
第二步:分块挤出并圆滑“鹅卵石”表面
通过第一步我们已经得到了一个个的小方格,那么问题来了,该怎样让它们一个个分开来向上挤出呢?首先,我们需要使用“拆分边”来让每颗“鹅卵石”都成为独立的个体,这里也可以用“随机值”的“布尔”来进行选择,这样有的石头会明显更大,有的更小。
然后再使用“缩放元素”来控制它们每一个的大小,这里可以用一个“随机值”来让每个“鹅卵石”的缩放都有所差异,接下来就是最重要的一步:“挤出网格”,这是Blender 3.1之后才有的功能,也是为什么我们建议大家一定要用最新版本的原因,挤出的“偏移比例”我们同样需要用一个“随机值”来赋值,毕竟没有完全平整的鹅卵石道路嘛,而且记得取消勾选“各面”,这样我们刚刚在“拆分边”做的石块大小区分才能正确显示,这一步的节点可以参考图3。
图3
最后,也是最关键的一步,让我们的每一颗“鹅卵石”都变得更圆滑,毕竟我们刚得到的是一个个的棱角分明的“石柱”,这里就需要用到“表面细分”,“鹅卵石”的形状立马就呈现出来了,这时候可以适当调整“折痕”值以获得更真实的效果。
此时我们还可以更进一步,因为即便是鹅卵石,但表面依然还是有一定粗糙度的,所以我们还可以继续利用“噪波纹理”和“矢量相减”“矢量缩放”“矢量相乘”和“设置位置”这个组合来让“鹅卵石”在Z轴方向让所有的顶点进行随机偏移,最后再加一个“设置着色平滑”,进而获得如图4的效果。
图4
本文所用几何节点编辑器一览
本章小结:看似复杂,其实很基础
这个设计最妙的是可以直接套用到任何模型上,而且我们可以关键功能,比如细分精度等连接到“组输入”,这样一来哪怕不进入节点编辑器,也能在修改器标签里进行数据的调整,非常方便。事实上本期的内容虽然节点比较多,但从逻辑上来说并不复杂,只是需要大家牢牢理解并运用各个节点的基本功能,算是一个基础练习的好案例吧。