Blender 教程: 使用几何节点创建程序化水晶簇

Blender 教程: 使用几何节点创建程序化水晶簇

在本教程中,我们将学习如何使用 Blender 的几何节点(Geometry Nodes)来创建一个程序化的水晶簇生成器。这意味着你将能够基于一个基础形状,通过调整参数来快速生成各种复杂且美观的水晶结构。本教程适合对 Blender 有一定基础,并希望探索几何节点强大功能的用户。

通过本教程,你将学到:

  • 如何在 Blender 中创建一个简单的水晶基础模型。
  • 如何使用几何节点在模型表面分布点。
  • 如何在这些点上实例化对象。
  • 如何随机化实例的旋转和缩放。
  • 如何使用噪波纹理(Noise Texture)和映射范围(Map Range)节点控制缩放。
  • 如何创建多层级的细节,例如在主水晶上生成更小的子水晶。
  • 如何为基础模型添加形变效果。
  • 如何在 Cycles 渲染器中设置简单的玻璃材质以获得水晶效果。

准备工作

  • Blender 3.0 或更高版本。本教程使用 Blender 3.0。

步骤一: 创建基础水晶形状

首先,我们需要一个单独的水晶形状作为我们生成器的基础单元。

  1. 启动 Blender,如果场景中有默认的立方体、灯光和相机,可以按 A 全选,然后按 X -> Delete 删除它们,得到一个干净的场景。
  2. 按下 Shift + A,在弹出的菜单中选择 Mesh -> Cylinder,创建一个圆柱体。
  3. 在屏幕左下角会弹出一个 Add Cylinder 的操作面板(如果看不到,可以尝试按 F9)。将 Vertices (顶点数) 的值改为 8。这将使圆柱体有 8 个边,形成一个更像水晶的八边形基础。
  4. 选中圆柱体,按下 Tab键进入编辑模式 (Edit Mode)。
  5. 按下 Ctrl + R 激活环切工具 (Loop Cut and Slide)。将鼠标移到圆柱体中部,当出现黄色的预览切线时,单击鼠标左键确认,然后再次单击鼠标左键(或按 Enter)将环线放置在中间。
  6. 按下 Ctrl + B 激活倒角工具 (Bevel)。向外拖动鼠标,为刚刚创建的环线添加倒角,形成两条新的环线。可以适当调整宽度。
  7. 点击视图左上角的面选择模式图标 (Face select),或者按键盘上的 3 键切换到面选择模式。
  8. 选中圆柱体顶部的面。按住 Shift 键,同时选中圆柱体底部的面。
  9. 按下 S 键进行缩放 (Scale),然后立即按下 Shift + Z,这将约束缩放操作,使其不在 Z 轴上进行。
  10. 输入数字 0,然后按 Enter。这将使顶部和底部的面缩放到中心点,形成尖端。
  11. 按下 A 键全选所有顶点。
  12. 按下 M 键打开合并菜单 (Merge),选择 By Distance。这将合并在同一点上的重复顶点(主要是在尖端处)。在左下角的操作面板中,可以看到移除了多少顶点(例如 "Removed 14 vertices")。
  13. 再次按下 A 键全选所有顶点(如果之前取消了选择)。
  14. 按下 S 键进行缩放,然后立即按下 Shift + Z 约束缩放。向内拖动鼠标,使水晶整体变得更细长一些。调整到你认为合适的形状。
  15. 按下 Tab 键退出编辑模式,回到对象模式 (Object Mode)。

现在,我们有了一个不错的基础水晶形状。

步骤二: 设置几何节点工作区和视觉效果

接下来,我们将设置几何节点的工作区,并调整一些视口显示选项,以便更好地观察我们的模型。

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

步骤三: 创建第一层水晶 (几何节点基础)

现在我们开始使用几何节点来生成水晶簇。

  1. 分布点:
    • 在几何节点编辑器中,按下 Shift + A 打开添加节点菜单,然后按 S 键搜索,输入 Distribute Points on Faces,选中并放置该节点。
    • Group Input 节点的 Geometry 输出接口(绿色圆点)拖拽连接到 Distribute Points on Faces 节点的 Mesh 输入接口。
    • 此时,原来的水晶模型会消失,变成一堆点。
  2. 在点上实例化基础水晶:
    • 按下 Shift + A,搜索并添加 Instance on Points 节点。
    • Distribute Points on Faces 节点的 Points 输出接口连接到 Instance on Points 节点的 Points 输入接口。
    • Group Input 节点的 Geometry 输出接口(代表原始水晶模型)连接到 Instance on Points 节点的 Instance 输入接口。
  3. 合并原始模型与实例 (可选):
    • 如果你希望原始的基础水晶也显示在最终结果中,或者希望将实例化的水晶与原始模型结合,可以添加一个 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 输入接口。
  4. 随机化旋转:
    • 按下 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 表示不旋转。

步骤四: 添加噪波控制水晶缩放

我们将使用噪波纹理来随机化每个水晶实例的大小,并添加参数控制。

  1. 基础噪波缩放:
    • 按下 Shift + A,搜索并添加 Noise Texture 节点。
    • Noise Texture 节点的 Color 输出连接到 Instance on Points 节点的 Scale 输入接口。(注意:如果连接 Fac 输出,所有实例的 X, Y, Z 轴会同步缩放;连接 Color 会使 X, Y, Z 轴独立受噪波影响,产生更多样的形状)。
  2. 统一随机缩放 (可选但推荐):
    • 为了让每个水晶实例在保持其原始比例的前提下进行随机大小缩放(而不是 X, Y, Z 轴分别随机导致变形),我们需要进一步处理噪波输出。
    • 按下 Shift + A,搜索并添加 Separate RGB 节点。
    • 按下 Shift + A,搜索并添加 Map Range 节点。
    • 按下 Shift + A,搜索并添加 Combine XYZ 节点。
    • 断开 Noise TextureInstance on PointsScale 连接。
    • 连接 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
  3. 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 轴相同的缩放映射或独立的缩放映射之间切换。
  4. 添加外部参数控制:
    • 我们可以将一些常用参数暴露到几何节点修改器界面,方便调整。
    • 拖动 Group Input 节点左侧的空白接口,连接到以下节点的对应输入:
      • Distribute Points on Faces 节点的 Density 输入。在右侧的节点属性面板 (N键打开 -> Group 标签页) 中,将这个新输入重命名为 Particle Density
      • Random Value (控制旋转的那个) 节点的 Seed 输入。重命名为 Seed
      • Noise Texture 节点的 W 输入 (需要先将 Noise Texture 的模式从 3D 改为 4D)。重命名为 Noise WNoise Seed
      • Noise Texture 节点的 Scale 输入。重命名为 Noise Scale
      • Vector Math (控制旋转强度的那个) 节点的 Scale 输入。重命名为 Rotation Strength
      • Switch (控制 Z 轴缩放的那个) 节点的 Switch (布尔值) 输入。重命名为 Scale Evenly Z
      • (如果使用了两个 Map Range 节点) 第一个 Map RangeTo MinTo Max,重命名为 Scale Min XYScale Max XY
      • 第二个 Map RangeTo MinTo Max,重命名为 Scale Min ZScale Max Z

步骤五: 创建第二层小水晶 (子颗粒)

我们可以重复利用已有的节点组来创建一层更小的水晶,附着在第一层水晶的表面。

  1. 实现实例的真实化:
    • 在第一组 Instance on Points 节点之后,添加一个 Realize Instances 节点。按下 Shift + A,搜索 Realize Instances。将其放在第一个 Instance on PointsJoin Geometry 节点之间。这将把实例转换为真实的几何体,使得我们可以在其表面再次分布点。
  2. 复制节点组:
    • 框选 Distribute Points on Faces, Instance on Points, Random Value (旋转), Vector Math (旋转强度), Noise Texture, Separate RGB, Map Range (一个或两个,取决于你的设置), Combine XYZ, 和 Switch (如果使用) 这些用于生成第一层水晶的节点。
    • 按下 Shift + D 复制这些节点,并将它们放置在右侧。
  3. 连接第二层节点:
    • 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
  4. 连接参数到第二层:
    • 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 PointsScale 输入之间添加一个新的 Vector Math 节点,设置为 Scale 模式。将 Combine XYZ 的输出连接到此 Vector Math 的顶部 Vector,并将 Vector Math 的输出连接到 Instance on PointsScale。从 Group Input 拖出一个新接口到这个新 Vector Math 节点的 Scale 输入(浮点值),重命名为 Sub Particle Scale。你可以将默认值设为较小的值,如 0.20.5

步骤六: 为基础水晶添加形变效果

在实例化之前,我们可以对基础水晶形状进行一些扭曲,使其看起来不那么规整。

  1. 添加 Set Position 节点:
    • 在主节点流程中,找到 Group Input 节点。在其 Geometry 输出之后,但在它连接到任何 Instance on Points 节点的 Instance 输入之前,添加一个 Set Position 节点。
  2. 使用噪波进行位移:
    • 我们需要将噪波纹理的输出乘以法线方向,以使顶点沿其法线方向位移。
    • 按下 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.10.05,然后根据需要调整。

步骤七: 在不同基本体上测试生成器

这个几何节点设置的好处在于它可以应用于任何网格对象。

  1. 在几何节点修改器面板(通常在 Blender 右侧的属性编辑器中,扳手图标下)中,可以将当前的几何节点组命名,例如,双击 "GeometryNodes" 并输入 "Crystal Generator"。
  2. 回到 3D 视口的 Layout 工作区(或任何方便操作的视图)。
  3. 按下 Shift + A,添加一个新的网格对象,例如 Mesh -> Cube
  4. 选中这个新的立方体。
  5. 在修改器属性面板中,点击 Add Modifier,选择 Geometry Nodes
  6. 点击几何节点修改器中的下拉菜单(通常显示 + New 的地方),选择你刚刚命名的 "Crystal Generator"。
  7. 现在,立方体应该被水晶覆盖了。你可以调整之前暴露出来的参数(如 Particle Density, Sub Particle Density, Noise Scale, Rotation Strength, Sub Particle Scale, Distortion Strength 等)来改变立方体上水晶的外观。例如,视频中作者将 Rotation Strength 调得很低 (如 0.013),使得立方体的晶体更对方块的原始形状。

步骤八: (可选) 设置水晶材质和渲染

为了得到更好的视觉效果,尤其是透明的水晶,我们需要使用 Cycles 渲染引擎并设置一个玻璃材质。

  1. 切换到 Cycles 渲染引擎:
    • 在属性编辑器的 Render Properties 标签页 (相机图标) 中,将 Render EngineEevee 改为 Cycles
    • 如果你的电脑有兼容的 GPU,可以将 Device 改为 GPU Compute 以加快渲染速度。
  2. 创建玻璃材质:
    • 选中你的原始基础水晶对象(不是应用了几何节点的那个,而是几何节点引用的那个)。
    • 切换到 Shading 工作区。
    • 如果对象还没有材质,点击 + New 按钮创建一个新材质。
    • 在材质节点编辑器中,删除默认的 Principled BSDF 节点 (选中后按 X)。
    • 按下 Shift + A,搜索并添加 Glass BSDF 节点。
    • Glass BSDF 节点的 BSDF 输出连接到 Material Output 节点的 Surface 输入。
  3. 调整渲染设置以获得更好的玻璃效果:
    • Render Properties 标签页下,找到 Light Paths 面板。
    • 增加 Max Bounces -> Total 的值,例如 1024 (或更高,但这会增加渲染时间)。
    • 显著增加 Max Bounces -> Transmission 的值,例如 3060 或更高。这个值对于透明材质内部的光线反弹至关重要,值太低会导致玻璃内部看起来很暗或有黑色区域。
    • Glass BSDF 节点上,可以调整以下参数:
      • Color: 设置玻璃的颜色。
      • Roughness: 增加一点粗糙度可以使玻璃看起来不那么完美,更像自然水晶。
      • IOR (Index of Refraction - 折射率):
        • 值为 1.0 时,光线不会折射,看起来像完全透明的空气。
        • 默认值 1.450 是一般玻璃的折射率。
        • 稍微调整这个值,例如 1.0301.300,可以改变水晶的折射效果。较低的值会使物体看起来不那么扭曲。
  4. 添加光源和背景:
    • 回到 Layout 工作区,添加一些光源 (Shift + A -> Light -> AreaPoint) 并调整它们的位置和强度,以照亮你的水晶。
    • 你也可以在 World Properties (地球图标) 中设置背景颜色或使用 HDRI 环境纹理。

尝试渲染你的水晶簇,调整几何节点参数和材质设置,直到你得到满意的效果!

总结

在本教程中,我们从一个简单的圆柱体开始,通过 Blender 强大的几何节点系统,逐步构建了一个灵活的程序化水晶生成器。我们学习了如何分布点、实例化对象、随机化变换,并使用噪波和映射范围节点来精细控制生成结果。最后,我们还简要介绍了如何应用基础的玻璃材质并在 Cycles 中进行渲染。希望这个教程能帮助你更好地理解和运用几何节点来创作你自己的程序化内容!