Blender 教程: 使用几何节点创建程序化水晶簇
在本教程中,我们将学习如何使用 Blender 的几何节点(Geometry Nodes)来创建一个程序化的水晶簇生成器。这意味着你将能够基于一个基础形状,通过调整参数来快速生成各种复杂且美观的水晶结构。本教程适合对 Blender 有一定基础,并希望探索几何节点强大功能的用户。
通过本教程,你将学到:
- 如何在 Blender 中创建一个简单的水晶基础模型。
- 如何使用几何节点在模型表面分布点。
- 如何在这些点上实例化对象。
- 如何随机化实例的旋转和缩放。
- 如何使用噪波纹理(Noise Texture)和映射范围(Map Range)节点控制缩放。
- 如何创建多层级的细节,例如在主水晶上生成更小的子水晶。
- 如何为基础模型添加形变效果。
- 如何在 Cycles 渲染器中设置简单的玻璃材质以获得水晶效果。
准备工作
- Blender 3.0 或更高版本。本教程使用 Blender 3.0。
步骤一: 创建基础水晶形状
首先,我们需要一个单独的水晶形状作为我们生成器的基础单元。
- 启动 Blender,如果场景中有默认的立方体、灯光和相机,可以按
A全选,然后按X-> Delete 删除它们,得到一个干净的场景。 - 按下
Shift + A,在弹出的菜单中选择 Mesh -> Cylinder,创建一个圆柱体。 - 在屏幕左下角会弹出一个 Add Cylinder 的操作面板(如果看不到,可以尝试按
F9)。将 Vertices (顶点数) 的值改为8。这将使圆柱体有 8 个边,形成一个更像水晶的八边形基础。 - 选中圆柱体,按下
Tab键进入编辑模式 (Edit Mode)。 - 按下
Ctrl + R激活环切工具 (Loop Cut and Slide)。将鼠标移到圆柱体中部,当出现黄色的预览切线时,单击鼠标左键确认,然后再次单击鼠标左键(或按Enter)将环线放置在中间。 - 按下
Ctrl + B激活倒角工具 (Bevel)。向外拖动鼠标,为刚刚创建的环线添加倒角,形成两条新的环线。可以适当调整宽度。 - 点击视图左上角的面选择模式图标 (Face select),或者按键盘上的
3键切换到面选择模式。 - 选中圆柱体顶部的面。按住
Shift键,同时选中圆柱体底部的面。 - 按下
S键进行缩放 (Scale),然后立即按下Shift + Z,这将约束缩放操作,使其不在 Z 轴上进行。 - 输入数字
0,然后按Enter。这将使顶部和底部的面缩放到中心点,形成尖端。 - 按下
A键全选所有顶点。 - 按下
M键打开合并菜单 (Merge),选择 By Distance。这将合并在同一点上的重复顶点(主要是在尖端处)。在左下角的操作面板中,可以看到移除了多少顶点(例如 "Removed 14 vertices")。 - 再次按下
A键全选所有顶点(如果之前取消了选择)。 - 按下
S键进行缩放,然后立即按下Shift + Z约束缩放。向内拖动鼠标,使水晶整体变得更细长一些。调整到你认为合适的形状。 - 按下
Tab键退出编辑模式,回到对象模式 (Object Mode)。
现在,我们有了一个不错的基础水晶形状。

步骤二: 设置几何节点工作区和视觉效果
接下来,我们将设置几何节点的工作区,并调整一些视口显示选项,以便更好地观察我们的模型。
- 在 Blender 窗口顶部的标签栏中,点击
+号图标,选择 General -> Geometry Nodes,创建一个新的几何节点工作区。 - 为了在实体模式下更清晰地看到模型的边缘,点击 3D 视口右上角的 Viewport Shading 下拉箭头(通常是一个实心球体的图标)。
- 在弹出的菜单中,勾选 Cavity 复选框。在其下方的 Type 选项中,选择 Both。这会给模型的边缘和凹陷处增加一些阴影,使其轮廓更清晰。
- 在该菜单中,点击 MatCap 按钮。从弹出的 MatCap 球体列表中,选择一个你喜欢的,例如一个带有多种颜色的彩虹色 MatCap(通常是右下角的那个),这样可以更容易地区分不同的面。
- 确保你的基础水晶对象被选中。在下方的几何节点编辑器中,点击 + New 按钮。这会为选中的对象添加一个新的几何节点修改器,并在节点编辑器中显示默认的
Group Input和Group Output节点。 - (可选)在几何节点编辑器的右上角,可以点击磁铁图标 (Snapping) 启用对齐到网格,这样节点在拖动时会自动吸附到网格上,使布局更整齐。

步骤三: 创建第一层水晶 (几何节点基础)
现在我们开始使用几何节点来生成水晶簇。
- 分布点:
- 在几何节点编辑器中,按下
Shift + A打开添加节点菜单,然后按S键搜索,输入Distribute Points on Faces,选中并放置该节点。 - 将
Group Input节点的Geometry输出接口(绿色圆点)拖拽连接到Distribute Points on Faces节点的Mesh输入接口。 - 此时,原来的水晶模型会消失,变成一堆点。
- 在几何节点编辑器中,按下
- 在点上实例化基础水晶:
- 按下
Shift + A,搜索并添加Instance on Points节点。 - 将
Distribute Points on Faces节点的Points输出接口连接到Instance on Points节点的Points输入接口。 - 将
Group Input节点的Geometry输出接口(代表原始水晶模型)连接到Instance on Points节点的Instance输入接口。
- 按下
- 合并原始模型与实例 (可选):
- 如果你希望原始的基础水晶也显示在最终结果中,或者希望将实例化的水晶与原始模型结合,可以添加一个
Join Geometry节点。 - 按下
Shift + A,搜索并添加Join Geometry节点。 - 将
Instance on Points节点的Instances输出接口连接到Join Geometry节点的一个Geometry输入接口。 - 将
Group Input节点的Geometry输出接口也连接到Join Geometry节点的另一个Geometry输入接口(点击并拖动到节点上,它会自动创建新的输入槽)。 - 最后,将
Join Geometry节点的Geometry输出接口连接到Group Output节点的Geometry输入接口。
- 如果你希望原始的基础水晶也显示在最终结果中,或者希望将实例化的水晶与原始模型结合,可以添加一个
- 随机化旋转:
- 按下
Shift + A,搜索并添加Random Value节点。 - 在
Random Value节点上,点击数据类型下拉菜单(默认为Float),将其更改为Vector。 - 将
Random Value节点的Value输出接口连接到Instance on Points节点的Rotation输入接口。 - 在
Random Value节点中,设置Min向量的 X, Y, Z 值。为了得到全方位的随机旋转,可以输入-tau(Blender 会自动计算为约 -6.283)。tau代表 2π,即 360 度(以弧度表示)。 - 设置
Max向量的 X, Y, Z 值为tau(约 6.283)。 - 为了更好地控制旋转的强度,添加一个
Vector Math节点。按下Shift + A,搜索并添加Vector Math节点。 - 在
Vector Math节点上,将操作类型从Add改为Scale。 - 将
Random Value节点的Value输出连接到Vector Math节点的顶部Vector输入。 - 将
Vector Math节点的Vector输出连接到Instance on Points节点的Rotation输入接口。 - 现在,
Vector Math节点的Scale滑块可以控制旋转的强度。值为1表示完全随机旋转,值为0表示不旋转。
- 按下

步骤四: 添加噪波控制水晶缩放
我们将使用噪波纹理来随机化每个水晶实例的大小,并添加参数控制。
- 基础噪波缩放:
- 按下
Shift + A,搜索并添加Noise Texture节点。 - 将
Noise Texture节点的Color输出连接到Instance on Points节点的Scale输入接口。(注意:如果连接Fac输出,所有实例的 X, Y, Z 轴会同步缩放;连接Color会使 X, Y, Z 轴独立受噪波影响,产生更多样的形状)。
- 按下
- 统一随机缩放 (可选但推荐):
- 为了让每个水晶实例在保持其原始比例的前提下进行随机大小缩放(而不是 X, Y, Z 轴分别随机导致变形),我们需要进一步处理噪波输出。
- 按下
Shift + A,搜索并添加Separate RGB节点。 - 按下
Shift + A,搜索并添加Map Range节点。 - 按下
Shift + A,搜索并添加Combine XYZ节点。 - 断开
Noise Texture到Instance on Points的Scale连接。 - 连接
Noise Texture节点的Color输出到Separate RGB节点的Image输入。 - 连接
Separate RGB节点的R(或 G, B 均可,我们只需要一个浮点值) 输出到Map Range节点的Value输入。 - 将
Map Range节点的Result输出同时连接到Combine XYZ节点的X,Y, 和Z输入。 - 将
Combine XYZ节点的Vector输出连接到Instance on Points节点的Scale输入接口。 - 调整
Map Range节点的参数:From Min:0.0From Max:1.0To Min:0.2(水晶最小的缩放比例)To Max:0.8(水晶最大的缩放比例)- 勾选
Clamp。
- Z轴独立缩放控制 (可选):
- 如果希望 X/Y 轴的缩放范围与 Z 轴不同(例如,让水晶在高度上变化更大或更小),可以为 Z 轴使用一个单独的
Map Range。 - 复制
Map Range节点 (Shift + D)。 - 将
Separate RGB节点的G(或任何一个通道) 输出连接到这个新的Map Range节点的Value输入。 - 按下
Shift + A,搜索并添加Switch节点。将其数据类型从默认的Geometry改为Float。 - 将第一个
Map Range节点的Result(控制 X/Y) 连接到Switch节点的True输入。 - 将第二个
Map Range节点的Result(将控制 Z) 连接到Switch节点的False输入。 - 将
Switch节点的Output连接到Combine XYZ节点的Z输入 (之前连接到Z的线会自动断开)。 - 现在,通过勾选或取消勾选
Switch节点的Switch复选框,可以在 Z 轴使用与 X/Y 轴相同的缩放映射或独立的缩放映射之间切换。
- 如果希望 X/Y 轴的缩放范围与 Z 轴不同(例如,让水晶在高度上变化更大或更小),可以为 Z 轴使用一个单独的
- 添加外部参数控制:
- 我们可以将一些常用参数暴露到几何节点修改器界面,方便调整。
- 拖动
Group Input节点左侧的空白接口,连接到以下节点的对应输入:Distribute Points on Faces节点的Density输入。在右侧的节点属性面板 (N键打开 ->Group标签页) 中,将这个新输入重命名为Particle Density。Random Value(控制旋转的那个) 节点的Seed输入。重命名为Seed。Noise Texture节点的W输入 (需要先将Noise Texture的模式从3D改为4D)。重命名为Noise W或Noise Seed。Noise Texture节点的Scale输入。重命名为Noise Scale。Vector Math(控制旋转强度的那个) 节点的Scale输入。重命名为Rotation Strength。Switch(控制 Z 轴缩放的那个) 节点的Switch(布尔值) 输入。重命名为Scale Evenly Z。- (如果使用了两个
Map Range节点) 第一个Map Range的To Min和To Max,重命名为Scale Min XY和Scale Max XY。 - 第二个
Map Range的To Min和To Max,重命名为Scale Min Z和Scale Max Z。
步骤五: 创建第二层小水晶 (子颗粒)
我们可以重复利用已有的节点组来创建一层更小的水晶,附着在第一层水晶的表面。
- 实现实例的真实化:
- 在第一组
Instance on Points节点之后,添加一个Realize Instances节点。按下Shift + A,搜索Realize Instances。将其放在第一个Instance on Points和Join Geometry节点之间。这将把实例转换为真实的几何体,使得我们可以在其表面再次分布点。
- 在第一组
- 复制节点组:
- 框选
Distribute Points on Faces,Instance on Points,Random Value(旋转),Vector Math(旋转强度),Noise Texture,Separate RGB,Map Range(一个或两个,取决于你的设置),Combine XYZ, 和Switch(如果使用) 这些用于生成第一层水晶的节点。 - 按下
Shift + D复制这些节点,并将它们放置在右侧。
- 框选
- 连接第二层节点:
- 将
Realize Instances节点的Geometry输出连接到新复制的Distribute Points on Faces节点的Mesh输入。 - 将
Group Input节点的Geometry输出 (原始基础水晶) 连接到新复制的Instance on Points节点的Instance输入。 - 添加 (或复制) 一个
Join Geometry节点。将原有的Join Geometry节点的输出连接到这个新的Join Geometry的一个输入,并将新复制的Instance on Points节点的Instances输出连接到其另一个输入。最后将这个新的Join Geometry的输出连接到Group Output。
- 将
- 连接参数到第二层:
- 将
Group Input节点上对应的参数(如Seed,Noise W,Noise Scale,Rotation Strength,Scale Evenly Z等)连接到新复制的对应节点上。 - 为第二层水晶创建新的控制参数:
- 从
Group Input拖出一个新接口连接到新复制的Distribute Points on Faces节点的Density输入。重命名为Sub Particle Density。 - 为了独立控制子颗粒的大小,在第二组
Combine XYZ节点和Instance on Points的Scale输入之间添加一个新的Vector Math节点,设置为Scale模式。将Combine XYZ的输出连接到此Vector Math的顶部Vector,并将Vector Math的输出连接到Instance on Points的Scale。从Group Input拖出一个新接口到这个新Vector Math节点的Scale输入(浮点值),重命名为Sub Particle Scale。你可以将默认值设为较小的值,如0.2或0.5。
- 从
- 将

步骤六: 为基础水晶添加形变效果
在实例化之前,我们可以对基础水晶形状进行一些扭曲,使其看起来不那么规整。
- 添加 Set Position 节点:
- 在主节点流程中,找到
Group Input节点。在其Geometry输出之后,但在它连接到任何Instance on Points节点的Instance输入之前,添加一个Set Position节点。
- 在主节点流程中,找到
- 使用噪波进行位移:
- 我们需要将噪波纹理的输出乘以法线方向,以使顶点沿其法线方向位移。
- 按下
Shift + A,添加一个Normal节点。 - 按下
Shift + A,添加一个Vector Math节点,将其模式设置为Multiply。 - 连接第一个(主)
Noise Texture节点的Fac(浮点值) 输出到这个Vector Math (Multiply)节点的顶部Vector输入 (Blender 会自动将浮点转换为向量)。 - 连接
Normal节点的Normal输出到Vector Math (Multiply)节点的底部Vector输入。 - 再添加一个
Vector Math节点,将其模式设置为Scale。这是形变强度的控制器。 - 连接
Vector Math (Multiply)节点的Vector输出到Vector Math (Scale)节点的顶部Vector输入。 - 将
Vector Math (Scale)节点的Vector输出连接到Set Position节点的Offset输入。 - 从
Group Input拖出一个新接口到Vector Math (Scale)节点的Scale(浮点值) 输入。重命名为Distortion Strength。将其默认值设为较小的值,如0.1或0.05,然后根据需要调整。
步骤七: 在不同基本体上测试生成器
这个几何节点设置的好处在于它可以应用于任何网格对象。
- 在几何节点修改器面板(通常在 Blender 右侧的属性编辑器中,扳手图标下)中,可以将当前的几何节点组命名,例如,双击 "GeometryNodes" 并输入 "Crystal Generator"。
- 回到 3D 视口的 Layout 工作区(或任何方便操作的视图)。
- 按下
Shift + A,添加一个新的网格对象,例如 Mesh -> Cube。 - 选中这个新的立方体。
- 在修改器属性面板中,点击 Add Modifier,选择 Geometry Nodes。
- 点击几何节点修改器中的下拉菜单(通常显示
+ New的地方),选择你刚刚命名的 "Crystal Generator"。 - 现在,立方体应该被水晶覆盖了。你可以调整之前暴露出来的参数(如
Particle Density,Sub Particle Density,Noise Scale,Rotation Strength,Sub Particle Scale,Distortion Strength等)来改变立方体上水晶的外观。例如,视频中作者将Rotation Strength调得很低 (如0.013),使得立方体的晶体更对方块的原始形状。
步骤八: (可选) 设置水晶材质和渲染
为了得到更好的视觉效果,尤其是透明的水晶,我们需要使用 Cycles 渲染引擎并设置一个玻璃材质。
- 切换到 Cycles 渲染引擎:
- 在属性编辑器的 Render Properties 标签页 (相机图标) 中,将 Render Engine 从
Eevee改为Cycles。 - 如果你的电脑有兼容的 GPU,可以将 Device 改为
GPU Compute以加快渲染速度。
- 在属性编辑器的 Render Properties 标签页 (相机图标) 中,将 Render Engine 从
- 创建玻璃材质:
- 选中你的原始基础水晶对象(不是应用了几何节点的那个,而是几何节点引用的那个)。
- 切换到 Shading 工作区。
- 如果对象还没有材质,点击 + New 按钮创建一个新材质。
- 在材质节点编辑器中,删除默认的
Principled BSDF节点 (选中后按X)。 - 按下
Shift + A,搜索并添加Glass BSDF节点。 - 将
Glass BSDF节点的BSDF输出连接到Material Output节点的Surface输入。
- 调整渲染设置以获得更好的玻璃效果:
- 在 Render Properties 标签页下,找到 Light Paths 面板。
- 增加 Max Bounces -> Total 的值,例如
1024(或更高,但这会增加渲染时间)。 - 显著增加 Max Bounces -> Transmission 的值,例如
30、60或更高。这个值对于透明材质内部的光线反弹至关重要,值太低会导致玻璃内部看起来很暗或有黑色区域。 - 在
Glass BSDF节点上,可以调整以下参数:- Color: 设置玻璃的颜色。
- Roughness: 增加一点粗糙度可以使玻璃看起来不那么完美,更像自然水晶。
- IOR (Index of Refraction - 折射率):
- 值为
1.0时,光线不会折射,看起来像完全透明的空气。 - 默认值
1.450是一般玻璃的折射率。 - 稍微调整这个值,例如
1.030到1.300,可以改变水晶的折射效果。较低的值会使物体看起来不那么扭曲。
- 值为
- 添加光源和背景:
- 回到 Layout 工作区,添加一些光源 (
Shift + A-> Light -> Area 或 Point) 并调整它们的位置和强度,以照亮你的水晶。 - 你也可以在 World Properties (地球图标) 中设置背景颜色或使用 HDRI 环境纹理。
- 回到 Layout 工作区,添加一些光源 (
尝试渲染你的水晶簇,调整几何节点参数和材质设置,直到你得到满意的效果!
总结
在本教程中,我们从一个简单的圆柱体开始,通过 Blender 强大的几何节点系统,逐步构建了一个灵活的程序化水晶生成器。我们学习了如何分布点、实例化对象、随机化变换,并使用噪波和映射范围节点来精细控制生成结果。最后,我们还简要介绍了如何应用基础的玻璃材质并在 Cycles 中进行渲染。希望这个教程能帮助你更好地理解和运用几何节点来创作你自己的程序化内容!