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.0
From Max
:1.0
To 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 中进行渲染。希望这个教程能帮助你更好地理解和运用几何节点来创作你自己的程序化内容!