Blender 完全指南: 从零打造吉卜力风格的程序化3D云朵

在本教程中,我们将深入探索如何在 Blender 4.0.2 中完全通过程序化节点来创建令人惊叹的吉卜力风格3D云朵。最终的成果是一个高度可定制的云朵着色器,你不需要任何外部图像纹理,所有效果都将通过 Blender 内置的节点编辑器动态生成。无论你是 Blender 新手还是有一定经验的用户,只要对节点编辑感兴趣,都能从本教程中获益。

通过本教程,你将学到:

  • 理解并运用“伪体积云 (Fake Volumetric)”的概念来创建轻量级的云朵效果。
  • 掌握 Blender着色器节点 (Shader Node) 的核心工作原理,包括各种混合节点 (Mix Node) 的使用。
  • 学习如何通过程序化纹理 (Procedural Textures) 如 Gradient Texture, Musgrave Texture, Noise Texture 来构建复杂的云朵形态。
  • 如何创建和控制程序化法线 (Procedural Normal),为云朵表面增加丰富的凹凸细节。
  • 如何使云朵材质对场景中的光照和物体位置做出动态响应。
  • 如何组织和管理复杂的节点网络,使其更易于理解和修改。

核心概念简介:伪体积云与节点工作方式

在我们开始实际操作之前,先简要了解几个核心概念:

  • 伪体积云 (Fake Volumetric): 真实的体积云渲染通常非常消耗计算资源。本教程采用“伪体积云”的方法,通过在多个堆叠的平面上应用透明度和纹理,来模拟云朵的体积感和深度,从而实现高效且美观的云朵效果。
  • 着色器节点 (Shader Nodes): Blender 的着色器节点系统允许我们通过连接不同的功能模块(节点)来创建复杂的材质。你可以将节点想象成一系列的指令,它们按顺序处理信息,最终决定物体表面的外观。
  • 混合节点 (Mix Nodes): 这是节点编辑中的核心。类似于 Photoshop 或 Procreate 中的图层叠加,混合节点 (如 Mix Color, Math, Vector Math) 可以将来自不同源的纹理、颜色或数值信息以多种方式(如叠加、相乘、线性光等)组合起来,创造出更丰富的视觉效果。

步骤一: 基础设置与伪体积云搭建

  1. 创建基础平面:
    1. 打开 Blender,在3D视图中,按下 Shift + A 组合键,在弹出的菜单中选择 Mesh -> Plane,创建一个新的平面。
    2. 选中该平面,按下 R 键进入旋转模式,然后按 X 键限制沿X轴旋转,输入数字 90,再按 Enter 键确认。平面将垂直于地面。
  2. UV展开与视图设置:
    1. 确保平面仍被选中,按下 Tab 键进入编辑模式 (Edit Mode)。
    2. 按下 U 键打开UV映射菜单,选择 Unwrap
    3. 按下小键盘上的 5 键,切换到正交视图 (Orthographic View),方便观察。
  3. 进入着色器编辑器 (Shader Editor):
    1. 将界面切换到 Shader Editor 选项卡。通常可以在顶部标签栏找到,或者通过在窗口左下角类型选择器中选择 Shader Editor
    2. 选中平面物体,在 Shader Editor 窗口中,点击顶部的 New 按钮,为平面创建一个新的材质。
    3. 默认会创建一个 Principled BSDF 节点和一个 Material Output 节点。选中 Principled BSDF 节点,按下 X 键或 Delete 键将其删除。
  4. 创建基础球形渐变:
    1. 按下 Shift + A,在搜索框中输入 Gradient Texture 并添加它。
    2. 选中 Gradient Texture 节点,按下 Ctrl + T (需要已启用 Node Wrangler 插件),Blender 会自动添加 Texture CoordinateMapping 节点。
    3. Gradient Texture 节点的 Color 输出端口连接到 Material Output 节点的 Surface 输入端口。
    4. Gradient Texture 节点中,将类型从 Linear 改为 Spherical
    5. Texture Coordinate 节点的 Object 输出端口连接到 Mapping 节点的 Vector 输入端口。
    6. 在3D视图中,选中平面物体,按下 S 键进入缩放模式,输入 10,按 Enter 键确认,将平面放大10倍。
  5. 创建伪体积立方体 (Array Modifier):
    1. 选中平面物体,在右侧的属性面板中,点击蓝色的扳手图标,进入 Modifier Properties (修改器属性) 选项卡。
    2. 点击 Add Modifier 按钮,在 Generate (生成) 类别下选择 Array (阵列) 修改器。
    3. Array Modifier 的设置中:
      • 取消勾选 Relative Offset (相对偏移)。
      • 勾选 Constant Offset (恒定偏移)。
      • Distance X 的值设为 0 m
      • Count (数量) 的值设为 10 (这将创建10个平面副本)。
      • Distance Z 的值设为 0.15 m (这会在Z轴方向上为每个平面副本创建0.15米的间隔,形成堆叠效果)。
  6. 应用修改器并设置原点:
    1. Array Modifier 设置面板的右上角,点击下拉小箭头,选择 Apply (应用)。或者在对象模式下,将鼠标悬停在3D视图中的物体上,按 Ctrl + A,选择 Visual Geometry to Mesh
    2. 确保物体仍被选中,在3D视图中右键点击,选择 Set Origin -> Origin to Geometry,将物体的原点设置到其几何中心。
  7. 设置透明材质基础:
    1. 回到 Shader Editor 窗口。
    2. 添加 Mix Shader 节点 (Shift + A -> Search -> Mix Shader)。
    3. 添加 Transparent BSDF 节点 (Shift + A -> Search -> Transparent BSDF)。
    4. 添加 Emission (自发光) 节点 (Shift + A -> Search -> Emission)。
    5. 连接节点:
      • Transparent BSDF 节点的 BSDF 输出连接到 Mix Shader 节点的顶部 Shader 输入。
      • Emission 节点的 Emission 输出连接到 Mix Shader 节点的底部 Shader 输入。
      • 将之前创建的 Gradient Texture (Spherical) 节点的 Color 输出连接到 Mix Shader 节点的 Fac (因子) 输入。
      • Mix Shader 节点的 Shader 输出连接到 Material Output 节点的 Surface 输入。
    6. 设置材质透明属性:
      • 在右侧的属性面板中,选择红色的球形图标,进入 Material Properties (材质属性) 选项卡。
      • 展开 Settings (设置) 面板。
      • Blend Mode (混合模式) 从 Opaque (不透明) 改为 Alpha Hashed (Alpha散列)。
      • Shadow Mode (阴影模式) 也改为 Alpha Hashed
      • 此时,3D视图中的平面堆叠应该会根据球形渐变的黑白信息显示出透明效果,黑色区域透明,白色区域不透明。

步骤二: 添加纹理细节与混合

现在我们的云朵有了一个基础的球形,接下来我们将通过混合多种程序化纹理来增加其形态的复杂性和真实感。

  1. 引入 Musgrave 纹理:
    1. 添加 Musgrave Texture 节点 (Shift + A -> Search -> Musgrave Texture)。
    2. 选中 Musgrave Texture 节点,按 Ctrl + T 添加 Texture CoordinateMapping 节点。确保 Texture CoordinateObject 输出连接到 Mapping 节点的 Vector 输入,再连接到 Musgrave TextureVector 输入。
  2. 复制球形渐变纹理组:
    1. 选中之前创建的 Gradient Texture (Spherical) 及其关联的 Texture CoordinateMapping 节点,按 Shift + D 复制它们。我们将用这个副本来与 Musgrave 纹理混合。
  3. 第一次纹理混合 (Linear Light):
    1. 添加 Mix Color 节点 (Shift + A -> Search -> Mix Color)。
    2. 连接节点:
      • Musgrave Texture 节点的 Height 输出连接到 Mix Color 节点的 A 输入。
      • 将复制出来的 Gradient Texture (Spherical) 节点的 Color 输出连接到 Mix Color 节点的 B 输入。
    3. Mix Color 节点中,将混合模式从 Mix 改为 Linear Light
    4. Mix Color 节点的 Factor 值设置为 1.000
    5. (可选) 预览效果:按住 Ctrl + Shift 并左键点击 Mix Color 节点,可以在3D视图中预览该节点的输出。你可以通过在编辑模式下隐藏部分平面来观察内部纹理。按 Alt + H 可以取消隐藏所有面片。
  4. 使用 Color Ramp 控制对比度:
    1. 为了更精细地控制纹理的混合,我们在每个纹理源和 Mix Color 节点之间插入 Color Ramp 节点。
      • Musgrave TextureHeight 输出和 Mix Color 节点的 A 输入之间添加一个 Color Ramp 节点 (Shift + A -> Search -> Color Ramp)。
      • 在复制的 Gradient TextureColor 输出和 Mix Color 节点的 B 输入之间也添加一个 Color Ramp 节点。
    2. 通过拖动 Color Ramp 上的黑色和白色滑块,可以调整各个纹理的对比度和影响范围。例如,将滑块向中间靠拢会增加对比度。
    3. 调整 Musgrave Texture 的参数,例如 Scale 设为 5.9Detail 设为 2.335,以获得期望的噪点效果。
  5. 引入 Noise 纹理并进行第二次混合:
    1. 添加 Noise Texture 节点 (Shift + A -> Search -> Noise Texture)。
    2. 同样为 Noise Texture 添加 Texture CoordinateMapping 节点 (Ctrl + T),确保连接方式与 Musgrave 纹理类似。
    3. 添加一个新的 Mix Color 节点,混合模式仍设为 Linear Light
    4. 添加一个新的 Color Ramp 节点,将其连接在 Noise TextureFac (或 Color) 输出与新的 Mix Color 节点的 A 输入之间。
    5. 将上一个 Mix Color (Linear Light) 节点的 Result 输出连接到这个新的 Mix Color 节点的 B 输入。
    6. 将这个最终的 Mix Color (Linear Light) 节点的 Result 输出连接到 Mix Shader 节点的 Fac 输入 (替换掉之前 Gradient Texture 的连接)。
    7. 调整 Noise Texture 的参数,例如 Scale 设为 16Detail 设为 10。同时调整其后的 Color Ramp 以达到理想的云朵边缘和内部细节。
  6. 整理节点: 选中相关的纹理、Mapping、Color Ramp 和 Mix Color 节点,按 Ctrl + J 将它们组织到一个帧 (Frame) 中。选中帧后,按 N 键打开侧边栏,在 Node 标签下可以为帧重命名(例如,Procedural Noise)并设置背景颜色,方便管理。将原始的球形渐变部分也整理成一个名为 Spherical 的帧。

步骤三: 添加颜色与基础光照响应

我们的云朵现在有了基本的形状和纹理,接下来将赋予它颜色,并使其能够响应场景中的光照。

  1. 为云朵上色:
    1. 在连接到 Mix Shader 节点的 Emission 节点的 Color 输入端口前,添加一个 Color Ramp 节点。
    2. 将之前 Procedural Noise 帧中最终输出的 Mix Color (Linear Light) 节点的 Result 连接到这个新的 Color Ramp 节点的 Fac 输入。
    3. 调整这个 Color Ramp 的颜色:
      • 点击左侧滑块下方的颜色条,选择一个作为云朵暗部的颜色 (例如,视频中选择了一个略带灰的浅蓝色,十六进制码近似 #A2B8C6)。
      • 点击右侧滑块下方的颜色条,选择一个作为云朵亮部的颜色 (例如,纯白色 #FFFFFF)。
      • 你可以拖动滑块的位置来调整明暗过渡。
  2. 添加并调整场景光源:
    1. 切换回3D视图。
    2. 按下 Shift + A,选择 Light -> Sun,在场景中添加一个太阳光。
    3. 按下 R 键旋转太阳光,调整其照射方向,使其能够照亮云朵。
  3. 使云朵响应光照:
    1. 返回 Shader Editor
    2. 添加 Diffuse BSDF 节点 (Shift + A -> Search -> Diffuse BSDF)。
    3. 添加 Shader to RGB 节点 (Shift + A -> Search -> Shader to RGB)。
    4. 连接节点:
      • Diffuse BSDF 节点的 BSDF 输出连接到 Shader to RGB 节点的 Shader 输入。
      • Shader to RGB 节点的 Color 输出连接到控制 Emission 颜色的那个 Color Ramp 节点的 Fac 输入 (替换掉之前从程序化噪点接过来的连接)。
    5. 现在,云朵的颜色会根据 Diffuse BSDF 接收到的光照强度(通过 Shader to RGB 转换)在 Color Ramp 定义的两种颜色间过渡,从而产生明暗变化。调整 Color Ramp 的滑块可以进一步控制这种明暗对比。

步骤四: 创建程序化法线 (Procedural Normal)

为了让云朵表面看起来更具立体感和细节,我们将用节点创建程序化的法线信息,模拟凹凸效果,而无需使用外部的法线贴图。

  1. 理解法线信息: 法线贴图通过RGB颜色通道存储表面的方向信息,其中R、G、B通常对应局部坐标系下的X、Y、Z轴的扰动。
  2. 创建基础法线向量 (模拟切线空间):
    1. 添加 Separate XYZ 节点。
    2. 添加 Texture Coordinate 节点,将其 UV 输出连接到 Separate XYZ 节点的 Vector 输入。UV坐标提供了从0到1的二维渐变。
    3. 添加两个 Map Range 节点,将UV的0-1范围映射到法线常用的-1到1范围:
      • 第一个 Map Range: Value 输入连接 Separate XYZX 输出。设置 From Min0From Max1To Min-1To Max1
      • 第二个 Map Range: Value 输入连接 Separate XYZY 输出。设置参数同上。
    4. 添加 Combine XYZ 节点。将第一个 Map RangeResult 连接到 X 输入,第二个 Map RangeResult 连接到 Y 输入。将 Z 输入值设为 1 (表示法线主要朝外)。
  3. 添加凹凸细节 (Voronoi Texture):
    1. 添加 Voronoi Texture 节点。
    2. 将其 Dimensions (维度) 设置为 4D (允许通过 W 输入控制纹理演化)。
    3. 将其 Feature (特征) 输出从 F1 改为 Smooth F1
    4. Randomness 设为 0.000Smoothness 设为 1.000 (视频中是调整这两个参数以获得想要的基础凹凸单元)。
  4. 混合基础法线与凹凸细节:
    1. 添加一个 Vector Math 节点,将其模式设置为 Subtract (减法)。
    2. 将步骤2中 Combine XYZ 节点的 Vector 输出 (基础法线方向) 连接到 Subtract 节点的第一个 Vector 输入。
    3. Voronoi Texture 节点的 Position 输出连接到 Subtract 节点的第二个 Vector 输入。
  5. 控制凹凸的强度与范围:
    1. 为了更灵活地控制凹凸效果,在 Voronoi TexturePosition 输出和 Subtract 节点的第二个输入之间,插入一个 Mix 节点 (Shift + A -> Search -> Mix,然后将 Data Type 改为 Vector)。
      • 将基础法线方向 (来自步骤2的 Combine XYZ) 也连接到这个 Mix 节点的 A 输入。
      • Voronoi TexturePosition 输出连接到 Mix 节点的 B 输入。
      • 这个 Mix 节点的 Factor 可以控制凹凸与基础法线的混合程度。视频中将其 Factor 设为接近 0,意味着主要使用基础法线,并少量混合Voronoi的扰动。
    2. Mix 节点的 Result 输出之后,再添加一个 Map Range 节点,确保 Data Type 仍为 Vector。通过调整其 To MinTo Max 的XYZ值 (例如,都设为 -0.40.4),可以限制法线扰动的整体范围。
  6. 应用法线信息:
    1. 添加 Normal Map 节点 (Shift + A -> Search -> Normal Map)。
    2. 将上一部处理得到的最终向量 (来自 Map Range 节点) 连接到 Normal Map 节点的 Color 输入。
    3. Normal Map 节点的 Normal 输出连接到场景中 Diffuse BSDF 节点的 Normal 输入。
    4. 可以调整 Normal Map 节点的 Strength (强度) 参数来控制凹凸的明显程度。
  7. 整理节点: 将这一系列创建法线的节点组织到一个名为 Procedural Normal 的帧中。

步骤五: 实现动态纹理与边缘细节

为了让云朵更生动,我们将使其纹理能够随着物体本身的移动或旋转而变化,并添加一些边缘细节。

  1. 使程序化噪点随物体移动而变化:
    1. Procedural Noise 节点组内,找到控制 Musgrave TextureNoise TextureMapping 节点。
    2. 添加 Object Info 节点 (Shift + A -> Search -> Object Info)。
    3. Object Info 节点中,点击吸管图标,然后在3D视图中选择我们的云朵平面物体。
    4. Object Info 节点的 Location 输出连接到 Procedural Noise 组内各个 Mapping 节点的 Location 输入。
    5. 为了减弱物体移动对纹理位置的剧烈影响,可以在 Object InfoLocation 输出和 Mapping 节点的 Location 输入之间各添加一个 Math 节点,模式设为 Multiply (乘法),并将第二个 Value 输入设为一个较小的值 (例如 0.050)。
  2. 使程序化法线随物体移动而变化:
    1. 类似地,在 Procedural Normal 节点组内,找到 Voronoi Texture。如果其 Vector 输入未连接,可以复制 (Shift+D) 上一步的 Object InfoMultiply 节点组合,将 Multiply 的结果连接到 Voronoi TextureVector 输入。或者,如果 Voronoi Texture 使用了 Mapping 节点,则连接到 Mapping 节点的 Location 输入。
    2. 这样,当云朵物体移动时,其法线产生的凹凸细节也会随之变化。

步骤六: 添加额外光照细节 (Extra Light)

吉卜力动画中的云朵常常在特定区域有微妙的额外光照,我们可以通过引用一个空物体的位置来模拟这种效果。

  1. 创建空物体 (Empty Object):
    1. 返回3D视图,按下 Shift + A,选择 Empty -> Plain Axes (或任何其他类型的空物体)。
    2. 使用 G 键移动这个空物体到你希望产生额外光照效果的参考位置。
  2. 在 Shader Editor 中设置额外光照:
    1. 复制 (Shift + D) Procedural Noise 节点组中那组基础的球形渐变节点 (包含 Texture Coordinate, Mapping, 和 Gradient Texture)。
    2. 在复制出来的 Texture Coordinate 节点中,将 Object 输入的目标更改为刚刚创建的 Empty 物体。
    3. 添加一个新的 Mix Color 节点。
    4. 连接:
      • 将这个新的、基于 Empty 物体位置的 Gradient Texture (Spherical) 的 Color 输出连接到 Mix Color 节点的 Factor 输入。
      • 将之前云朵的基础颜色 (来自 Diffuse BSDF -> Shader to RGB -> Color Ramp 的最终结果) 连接到 Mix Color 节点的 A 输入。
      • Mix Color 节点的 B 输入上设置一个更亮的颜色,作为额外光照的颜色 (例如,浅黄色或更亮的白色)。
    5. 将这个 Mix Color 节点的 Result 输出连接到主 Emission 节点的 Color 输入 (替换掉原来的连接)。
    6. 在连接到 Mix Color 节点 B 输入的亮色之前,可以添加一个 Hue Saturation Value 节点 (Shift + A -> Search -> Hue Saturation Value),用它来调整额外光照的色相、饱和度和亮度。
    7. 调整 Mix Color 节点的混合模式 (例如,尝试 AddScreen 模式,或者保持 Mix 并调整 Factor) 和 Factor 值,直到获得满意的额外光照效果。
  3. 整理节点: 将这组与额外光照相关的节点组织到一个名为 Extra Light 的帧中。

至此,我们已经构建了一个相当复杂的程序化吉卜力风格云朵着色器!你可以尝试调整各个 Color Ramp、纹理参数 (Scale, Detail, Randomness 等)、Mix Color 节点的 Factor 值以及 Normal Map 的强度,来定制出你独一无二的云朵效果。

总结

在本教程中,我们从零开始,在 Blender 中一步步创建了一个完全程序化的吉卜力风格3D云朵着色器。我们学习了如何利用多层平面和透明度来模拟体积感,如何通过混合多种程序化纹理来塑造云朵的复杂形态和边缘细节,如何创建程序化法线来增加表面质感,并最终让云朵对光照和物体位置产生动态响应。

这个着色器的强大之处在于其完全的程序化特性,意味着你可以轻松调整参数,创造出各式各样的云朵,而无需依赖任何外部图片资源。

下一步探索:

  • 性能优化 (EEVEE): 视频中提到,当前在EEVEE渲染器中,由于Alpha Hashed的特性,云朵可能会显得有些噪点。在后续的教程中,可能会探讨如何优化以获得更平滑的效果。
  • 更多控制: 可以将关键参数(如各种纹理的Scale、Detail,颜色等)连接到节点组的输入端,从而在修改器属性面板或几何节点中更方便地控制云朵的整体外观。
  • 动画: 利用 4D 纹理的 W 输入或驱动器 (Drivers) 来让云朵的形态随时间动态变化。

希望本教程能帮助你掌握在 Blender 中创建风格化程序化材质的技巧!不断尝试和探索,你会发现节点编辑的无限可能。