
引言
我是 Erindale,一名技术总监,专精 Blender 里的程序化工作流。虽然我们没有 Houdini 那样显赫的地位,但大家不该忽视 Blender 能做的事。如果你想了解更多,可以看看我的 YouTube 频道、在线课程或者 Discord 服务器。
作为 Nodevember(面向程序化艺术家、为期一个月的年度创作挑战)的一部分,我想真正把 Blender 的程序化建模系统 Geometry Nodes 用到极限。第 8 天的题目是「Bejewelled」(缀满珠宝),于是我选择做一套极其华丽、覆满金色缠丝与宝石的仪仗板甲。
这个模型依赖四项进阶技术:双轨放样(bi-rAIl loft)、卷曲噪波(curl noise)、变形到曲线、变形到曲面。其余部分都只是简单的选择与实例化。
铠甲
双轨放样让我们可以让一条轮廓曲线沿着一对轨道曲线滑动,从而生成网格片。轨道之间靠近或远离时,轮廓曲线会随之缩放。我为此写了一个自定义节点组,它还支持多条轮廓曲线,让它们沿着放样方向插值。
这个方法让我们对腰部、胸部、颈部这些相当复杂曲面的轮廓有了很细致的控制。手臂就简单得多,只是锥化的圆柱体;肩部是一连串挤出;领口是一个圆沿着单条曲线放样;而锁子甲的基础网格则是两个 icosphere。

胸甲用一对由较短的曲线段组成的轨道,加上四条沿放样插值的轮廓曲线做成。借助 Blender 5.0 新的 Closure 系统,我们可以往 Bi-Rail Loft 节点组里注入一条自定义的浮点曲线,用来调整各条轮廓混入的位置。

卷曲噪波
我们可以在噪波场中挤出一条边,把噪波的输出当作挤出方向,从而做出装饰性的卷曲几何。如果在不同位置放一堆点分别挤出,就能把噪波场可视化出来;但另一种做法,是在同一个位置放多个点,让它们各自采样略微不同的噪波——通过改变缩放或随机种子都能实现。这样会得到漂亮的簇,可以网格化成叶片装饰。
从基础网格上选出成条的几何之后,我们就能在更大的区域上铺满卷曲噪波,比如肩部这里。卷曲噪波的方向,是噪波纹理与表面法线的叉积。这让卷曲沿着表面生长。任何超出边缘的部分,会直接从挤出的布尔运算里移除,于是它就停止生长了。

当我们从单点出发、加上一点噪波偏移生成曲线时,就能做出非常有装饰感的东西;镜像之后,看起来更刻意、更精致。胸针上的额外装饰与花纹,用的就是这个流程。

要做出这个效果,节点可以这样搭:

变形到曲线
有时候我们不只是想把一个物体沿着曲线做实例化,而是想要更复杂的弯曲——让物体变形,去跟随曲线的切线方向与法线。就我们这里而言,既然费了这么大功夫放样出这些复杂曲面,那么让大的装饰件顺着这个形体走、而不是跟它对着干,就顺理成章。比如钢制甲片边缘那一圈金色卷曲噪波,就是沿着从主体几何提取出的曲线生长的:

金色本身只是一小段被镜像过的卷曲噪波,然后沿着直线做实例化。这一条金色再变形到从基础网格提取出的曲线上。
那我们怎么把东西变形到曲线上?如果把几何体想象成存在于 XYZ 三条线性轴构成的标准 3D 空间里,我们要做的,是把它转换到曲线的 U 轴(沿曲线方向)、法线轴与副法线轴上。
在 Geometry Nodes 里,这个转换相当简单。用一个包围盒,我们可以把几何体的 3D 坐标归一化到每个轴 0–1 的范围。然后,用 Sample Curve 节点,按我们原本的某一根轴去采样曲线上的位置。
这会把所有几何体移到沿曲线的那条线上。接着我们需要把它重新「撑开」:把另外两根轴上的量,分别按法线与副法线方向缩放后加上去。节点可能长这样:

变形到曲面
比曲线变形再高一层的,是曲面变形,也就是网格包裹(Mesh Wrapping)。这种情况下,我们有一些铺在二维平面上的几何,想把它包裹到某个三维曲面上。当我们有一个更容易平着做的复杂图案,又有一个用简单几何更容易搭出来的三维形体时,这非常有用。这里的例子是我们的绗缝护颈:

这种情况下,做绗缝设计、加上缝线,在 XY 平面上平着做要容易得多;但要做出像套在脖子上的东西,用 Curve to Mesh 节点沿样条控制圆的半径则容易得多。
我们护颈的基础网格正是后者。而只要我们懂得怎么把平面图案弯到三维曲面上,就能同时利用这两种便利之处。为此,我们要「滥用」一下 UV 坐标。
如果我们主要在 XY 平面上工作,那把手上任何坐标重新映射到每个轴 0–1 的空间里就很合理。这样,把这些几何映射到三维物体的 UV 上就变得容易。我们的几何虽然平铺,但仍有一定厚度,所以需要用 Z 分量作为表面法线的标量把它撑起来。
这样我们就能把几何拉伸到 UV 曲面上,再朝着正确的方向加厚。我们平铺的护颈几何长这样:

如果我们用 Sample UV Surface 节点去采样基础网格的位置以及法线,就能把这部分几何摆到正确的位置:

对于布料,我们还可以加一些折痕与皱褶。这我更倾向于就位之后再去做,免得噪波纹理明显跟着形变走。我用一层基于 UV 贴图的噪波来跟随表面,另一层基于世界坐标位置的噪波来做整体变形。

想更深入地了解完整的建模流程,可以看这里的延时视频:
结语
你也可以在 Patreon 上免费下载这个项目文件。自从 Geometry Nodes 在 2020 年 11 月作为 Blender 2.91 Beta 的实验性功能出现以来,我几乎每天都在用它。每一个版本的进步都让我惊叹——无论是性能,还是新增、乃至仍在持续加入的节点范围。
我承认,这套铠甲如果用混合的做法、而不是纯节点,可以做得更高效、更写实;但那就不是 Nodevember 的精神了。
更多程序化建模的思路可以查看本站 案例教程 分类;
想找 Blender 几何节点的现成资产,可以看 Smart Mesh Blend 2:Blender 几何节点法线与材质混合资产,程序化材质库则可以参考 Sanctus Library v3.4.16:Blender 程序化材质与资产库。


评论(0)