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
) 可以将来自不同源的纹理、颜色或数值信息以多种方式(如叠加、相乘、线性光等)组合起来,创造出更丰富的视觉效果。
步骤一: 基础设置与伪体积云搭建
- 创建基础平面:
- 打开 Blender,在3D视图中,按下
Shift + A
组合键,在弹出的菜单中选择Mesh
->Plane
,创建一个新的平面。 - 选中该平面,按下
R
键进入旋转模式,然后按X
键限制沿X轴旋转,输入数字90
,再按Enter
键确认。平面将垂直于地面。
- 打开 Blender,在3D视图中,按下
- UV展开与视图设置:
- 确保平面仍被选中,按下
Tab
键进入编辑模式 (Edit Mode)。 - 按下
U
键打开UV映射菜单,选择Unwrap
。 - 按下小键盘上的
5
键,切换到正交视图 (Orthographic View),方便观察。
- 确保平面仍被选中,按下
- 进入着色器编辑器 (Shader Editor):
- 将界面切换到
Shader Editor
选项卡。通常可以在顶部标签栏找到,或者通过在窗口左下角类型选择器中选择Shader Editor
。 - 选中平面物体,在
Shader Editor
窗口中,点击顶部的New
按钮,为平面创建一个新的材质。 - 默认会创建一个
Principled BSDF
节点和一个Material Output
节点。选中Principled BSDF
节点,按下X
键或Delete
键将其删除。
- 将界面切换到
- 创建基础球形渐变:
- 按下
Shift + A
,在搜索框中输入Gradient Texture
并添加它。 - 选中
Gradient Texture
节点,按下Ctrl + T
(需要已启用 Node Wrangler 插件),Blender 会自动添加Texture Coordinate
和Mapping
节点。 - 将
Gradient Texture
节点的Color
输出端口连接到Material Output
节点的Surface
输入端口。 - 在
Gradient Texture
节点中,将类型从Linear
改为Spherical
。 - 将
Texture Coordinate
节点的Object
输出端口连接到Mapping
节点的Vector
输入端口。 - 在3D视图中,选中平面物体,按下
S
键进入缩放模式,输入10
,按Enter
键确认,将平面放大10倍。
- 按下
- 创建伪体积立方体 (Array Modifier):
- 选中平面物体,在右侧的属性面板中,点击蓝色的扳手图标,进入
Modifier Properties
(修改器属性) 选项卡。 - 点击
Add Modifier
按钮,在Generate
(生成) 类别下选择Array
(阵列) 修改器。 - 在
Array Modifier
的设置中:- 取消勾选
Relative Offset
(相对偏移)。 - 勾选
Constant Offset
(恒定偏移)。 - 将
Distance X
的值设为0 m
。 - 将
Count
(数量) 的值设为10
(这将创建10个平面副本)。 - 将
Distance Z
的值设为0.15 m
(这会在Z轴方向上为每个平面副本创建0.15米的间隔,形成堆叠效果)。
- 取消勾选
- 选中平面物体,在右侧的属性面板中,点击蓝色的扳手图标,进入
- 应用修改器并设置原点:
- 在
Array Modifier
设置面板的右上角,点击下拉小箭头,选择Apply
(应用)。或者在对象模式下,将鼠标悬停在3D视图中的物体上,按Ctrl + A
,选择Visual Geometry to Mesh
。 - 确保物体仍被选中,在3D视图中右键点击,选择
Set Origin
->Origin to Geometry
,将物体的原点设置到其几何中心。
- 在
- 设置透明材质基础:
- 回到
Shader Editor
窗口。 - 添加
Mix Shader
节点 (Shift + A
->Search
->Mix Shader
)。 - 添加
Transparent BSDF
节点 (Shift + A
->Search
->Transparent BSDF
)。 - 添加
Emission
(自发光) 节点 (Shift + A
->Search
->Emission
)。 - 连接节点:
- 将
Transparent BSDF
节点的BSDF
输出连接到Mix Shader
节点的顶部Shader
输入。 - 将
Emission
节点的Emission
输出连接到Mix Shader
节点的底部Shader
输入。 - 将之前创建的
Gradient Texture
(Spherical) 节点的Color
输出连接到Mix Shader
节点的Fac
(因子) 输入。 - 将
Mix Shader
节点的Shader
输出连接到Material Output
节点的Surface
输入。
- 将
- 设置材质透明属性:
- 在右侧的属性面板中,选择红色的球形图标,进入
Material Properties
(材质属性) 选项卡。 - 展开
Settings
(设置) 面板。 - 将
Blend Mode
(混合模式) 从Opaque
(不透明) 改为Alpha Hashed
(Alpha散列)。 - 将
Shadow Mode
(阴影模式) 也改为Alpha Hashed
。 - 此时,3D视图中的平面堆叠应该会根据球形渐变的黑白信息显示出透明效果,黑色区域透明,白色区域不透明。
- 在右侧的属性面板中,选择红色的球形图标,进入
- 回到
步骤二: 添加纹理细节与混合
现在我们的云朵有了一个基础的球形,接下来我们将通过混合多种程序化纹理来增加其形态的复杂性和真实感。
- 引入 Musgrave 纹理:
- 添加
Musgrave Texture
节点 (Shift + A
->Search
->Musgrave Texture
)。 - 选中
Musgrave Texture
节点,按Ctrl + T
添加Texture Coordinate
和Mapping
节点。确保Texture Coordinate
的Object
输出连接到Mapping
节点的Vector
输入,再连接到Musgrave Texture
的Vector
输入。
- 添加
- 复制球形渐变纹理组:
- 选中之前创建的
Gradient Texture
(Spherical) 及其关联的Texture Coordinate
和Mapping
节点,按Shift + D
复制它们。我们将用这个副本来与 Musgrave 纹理混合。
- 选中之前创建的
- 第一次纹理混合 (Linear Light):
- 添加
Mix Color
节点 (Shift + A
->Search
->Mix Color
)。 - 连接节点:
- 将
Musgrave Texture
节点的Height
输出连接到Mix Color
节点的A
输入。 - 将复制出来的
Gradient Texture
(Spherical) 节点的Color
输出连接到Mix Color
节点的B
输入。
- 将
- 在
Mix Color
节点中,将混合模式从Mix
改为Linear Light
。 - 将
Mix Color
节点的Factor
值设置为1.000
。 - (可选) 预览效果:按住
Ctrl + Shift
并左键点击Mix Color
节点,可以在3D视图中预览该节点的输出。你可以通过在编辑模式下隐藏部分平面来观察内部纹理。按Alt + H
可以取消隐藏所有面片。
- 添加
- 使用 Color Ramp 控制对比度:
- 为了更精细地控制纹理的混合,我们在每个纹理源和
Mix Color
节点之间插入Color Ramp
节点。- 在
Musgrave Texture
的Height
输出和Mix Color
节点的A
输入之间添加一个Color Ramp
节点 (Shift + A
->Search
->Color Ramp
)。 - 在复制的
Gradient Texture
的Color
输出和Mix Color
节点的B
输入之间也添加一个Color Ramp
节点。
- 在
- 通过拖动
Color Ramp
上的黑色和白色滑块,可以调整各个纹理的对比度和影响范围。例如,将滑块向中间靠拢会增加对比度。 - 调整
Musgrave Texture
的参数,例如Scale
设为5.9
,Detail
设为2.335
,以获得期望的噪点效果。
- 为了更精细地控制纹理的混合,我们在每个纹理源和
- 引入 Noise 纹理并进行第二次混合:
- 添加
Noise Texture
节点 (Shift + A
->Search
->Noise Texture
)。 - 同样为
Noise Texture
添加Texture Coordinate
和Mapping
节点 (Ctrl + T
),确保连接方式与 Musgrave 纹理类似。 - 添加一个新的
Mix Color
节点,混合模式仍设为Linear Light
。 - 添加一个新的
Color Ramp
节点,将其连接在Noise Texture
的Fac
(或Color
) 输出与新的Mix Color
节点的A
输入之间。 - 将上一个
Mix Color (Linear Light)
节点的Result
输出连接到这个新的Mix Color
节点的B
输入。 - 将这个最终的
Mix Color (Linear Light)
节点的Result
输出连接到Mix Shader
节点的Fac
输入 (替换掉之前Gradient Texture
的连接)。 - 调整
Noise Texture
的参数,例如Scale
设为16
,Detail
设为10
。同时调整其后的Color Ramp
以达到理想的云朵边缘和内部细节。
- 添加
- 整理节点: 选中相关的纹理、Mapping、Color Ramp 和 Mix Color 节点,按
Ctrl + J
将它们组织到一个帧 (Frame) 中。选中帧后,按N
键打开侧边栏,在Node
标签下可以为帧重命名(例如,Procedural Noise
)并设置背景颜色,方便管理。将原始的球形渐变部分也整理成一个名为Spherical
的帧。
步骤三: 添加颜色与基础光照响应
我们的云朵现在有了基本的形状和纹理,接下来将赋予它颜色,并使其能够响应场景中的光照。
- 为云朵上色:
- 在连接到
Mix Shader
节点的Emission
节点的Color
输入端口前,添加一个Color Ramp
节点。 - 将之前
Procedural Noise
帧中最终输出的Mix Color (Linear Light)
节点的Result
连接到这个新的Color Ramp
节点的Fac
输入。 - 调整这个
Color Ramp
的颜色:- 点击左侧滑块下方的颜色条,选择一个作为云朵暗部的颜色 (例如,视频中选择了一个略带灰的浅蓝色,十六进制码近似
#A2B8C6
)。 - 点击右侧滑块下方的颜色条,选择一个作为云朵亮部的颜色 (例如,纯白色
#FFFFFF
)。 - 你可以拖动滑块的位置来调整明暗过渡。
- 点击左侧滑块下方的颜色条,选择一个作为云朵暗部的颜色 (例如,视频中选择了一个略带灰的浅蓝色,十六进制码近似
- 在连接到
- 添加并调整场景光源:
- 切换回3D视图。
- 按下
Shift + A
,选择Light
->Sun
,在场景中添加一个太阳光。 - 按下
R
键旋转太阳光,调整其照射方向,使其能够照亮云朵。
- 使云朵响应光照:
- 返回
Shader Editor
。 - 添加
Diffuse BSDF
节点 (Shift + A
->Search
->Diffuse BSDF
)。 - 添加
Shader to RGB
节点 (Shift + A
->Search
->Shader to RGB
)。 - 连接节点:
- 将
Diffuse BSDF
节点的BSDF
输出连接到Shader to RGB
节点的Shader
输入。 - 将
Shader to RGB
节点的Color
输出连接到控制Emission
颜色的那个Color Ramp
节点的Fac
输入 (替换掉之前从程序化噪点接过来的连接)。
- 将
- 现在,云朵的颜色会根据
Diffuse BSDF
接收到的光照强度(通过Shader to RGB
转换)在Color Ramp
定义的两种颜色间过渡,从而产生明暗变化。调整Color Ramp
的滑块可以进一步控制这种明暗对比。
- 返回
步骤四: 创建程序化法线 (Procedural Normal)
为了让云朵表面看起来更具立体感和细节,我们将用节点创建程序化的法线信息,模拟凹凸效果,而无需使用外部的法线贴图。
- 理解法线信息: 法线贴图通过RGB颜色通道存储表面的方向信息,其中R、G、B通常对应局部坐标系下的X、Y、Z轴的扰动。
- 创建基础法线向量 (模拟切线空间):
- 添加
Separate XYZ
节点。 - 添加
Texture Coordinate
节点,将其UV
输出连接到Separate XYZ
节点的Vector
输入。UV坐标提供了从0到1的二维渐变。 - 添加两个
Map Range
节点,将UV的0-1范围映射到法线常用的-1到1范围:- 第一个
Map Range
:Value
输入连接Separate XYZ
的X
输出。设置From Min
为0
,From Max
为1
,To Min
为-1
,To Max
为1
。 - 第二个
Map Range
:Value
输入连接Separate XYZ
的Y
输出。设置参数同上。
- 第一个
- 添加
Combine XYZ
节点。将第一个Map Range
的Result
连接到X
输入,第二个Map Range
的Result
连接到Y
输入。将Z
输入值设为1
(表示法线主要朝外)。
- 添加
- 添加凹凸细节 (Voronoi Texture):
- 添加
Voronoi Texture
节点。 - 将其
Dimensions
(维度) 设置为4D
(允许通过W
输入控制纹理演化)。 - 将其
Feature
(特征) 输出从F1
改为Smooth F1
。 - 将
Randomness
设为0.000
,Smoothness
设为1.000
(视频中是调整这两个参数以获得想要的基础凹凸单元)。
- 添加
- 混合基础法线与凹凸细节:
- 添加一个
Vector Math
节点,将其模式设置为Subtract
(减法)。 - 将步骤2中
Combine XYZ
节点的Vector
输出 (基础法线方向) 连接到Subtract
节点的第一个Vector
输入。 - 将
Voronoi Texture
节点的Position
输出连接到Subtract
节点的第二个Vector
输入。
- 添加一个
- 控制凹凸的强度与范围:
- 为了更灵活地控制凹凸效果,在
Voronoi Texture
的Position
输出和Subtract
节点的第二个输入之间,插入一个Mix
节点 (Shift + A
->Search
->Mix
,然后将Data Type
改为Vector
)。- 将基础法线方向 (来自步骤2的
Combine XYZ
) 也连接到这个Mix
节点的A
输入。 - 将
Voronoi Texture
的Position
输出连接到Mix
节点的B
输入。 - 这个
Mix
节点的Factor
可以控制凹凸与基础法线的混合程度。视频中将其Factor
设为接近0
,意味着主要使用基础法线,并少量混合Voronoi的扰动。
- 将基础法线方向 (来自步骤2的
- 在
Mix
节点的Result
输出之后,再添加一个Map Range
节点,确保Data Type
仍为Vector
。通过调整其To Min
和To Max
的XYZ值 (例如,都设为-0.4
和0.4
),可以限制法线扰动的整体范围。
- 为了更灵活地控制凹凸效果,在
- 应用法线信息:
- 添加
Normal Map
节点 (Shift + A
->Search
->Normal Map
)。 - 将上一部处理得到的最终向量 (来自
Map Range
节点) 连接到Normal Map
节点的Color
输入。 - 将
Normal Map
节点的Normal
输出连接到场景中Diffuse BSDF
节点的Normal
输入。 - 可以调整
Normal Map
节点的Strength
(强度) 参数来控制凹凸的明显程度。
- 添加
- 整理节点: 将这一系列创建法线的节点组织到一个名为
Procedural Normal
的帧中。
步骤五: 实现动态纹理与边缘细节
为了让云朵更生动,我们将使其纹理能够随着物体本身的移动或旋转而变化,并添加一些边缘细节。
- 使程序化噪点随物体移动而变化:
- 在
Procedural Noise
节点组内,找到控制Musgrave Texture
和Noise Texture
的Mapping
节点。 - 添加
Object Info
节点 (Shift + A
->Search
->Object Info
)。 - 在
Object Info
节点中,点击吸管图标,然后在3D视图中选择我们的云朵平面物体。 - 将
Object Info
节点的Location
输出连接到Procedural Noise
组内各个Mapping
节点的Location
输入。 - 为了减弱物体移动对纹理位置的剧烈影响,可以在
Object Info
的Location
输出和Mapping
节点的Location
输入之间各添加一个Math
节点,模式设为Multiply
(乘法),并将第二个Value
输入设为一个较小的值 (例如0.050
)。
- 在
- 使程序化法线随物体移动而变化:
- 类似地,在
Procedural Normal
节点组内,找到Voronoi Texture
。如果其Vector
输入未连接,可以复制 (Shift+D
) 上一步的Object Info
和Multiply
节点组合,将Multiply
的结果连接到Voronoi Texture
的Vector
输入。或者,如果Voronoi Texture
使用了Mapping
节点,则连接到Mapping
节点的Location
输入。 - 这样,当云朵物体移动时,其法线产生的凹凸细节也会随之变化。
- 类似地,在
步骤六: 添加额外光照细节 (Extra Light)
吉卜力动画中的云朵常常在特定区域有微妙的额外光照,我们可以通过引用一个空物体的位置来模拟这种效果。
- 创建空物体 (Empty Object):
- 返回3D视图,按下
Shift + A
,选择Empty
->Plain Axes
(或任何其他类型的空物体)。 - 使用
G
键移动这个空物体到你希望产生额外光照效果的参考位置。
- 返回3D视图,按下
- 在 Shader Editor 中设置额外光照:
- 复制 (
Shift + D
)Procedural Noise
节点组中那组基础的球形渐变节点 (包含Texture Coordinate
,Mapping
, 和Gradient Texture
)。 - 在复制出来的
Texture Coordinate
节点中,将Object
输入的目标更改为刚刚创建的Empty
物体。 - 添加一个新的
Mix Color
节点。 - 连接:
- 将这个新的、基于
Empty
物体位置的Gradient Texture
(Spherical) 的Color
输出连接到Mix Color
节点的Factor
输入。 - 将之前云朵的基础颜色 (来自
Diffuse BSDF
->Shader to RGB
->Color Ramp
的最终结果) 连接到Mix Color
节点的A
输入。 - 在
Mix Color
节点的B
输入上设置一个更亮的颜色,作为额外光照的颜色 (例如,浅黄色或更亮的白色)。
- 将这个新的、基于
- 将这个
Mix Color
节点的Result
输出连接到主Emission
节点的Color
输入 (替换掉原来的连接)。 - 在连接到
Mix Color
节点B
输入的亮色之前,可以添加一个Hue Saturation Value
节点 (Shift + A
->Search
->Hue Saturation Value
),用它来调整额外光照的色相、饱和度和亮度。 - 调整
Mix Color
节点的混合模式 (例如,尝试Add
或Screen
模式,或者保持Mix
并调整Factor
) 和Factor
值,直到获得满意的额外光照效果。
- 复制 (
- 整理节点: 将这组与额外光照相关的节点组织到一个名为
Extra Light
的帧中。
至此,我们已经构建了一个相当复杂的程序化吉卜力风格云朵着色器!你可以尝试调整各个 Color Ramp
、纹理参数 (Scale
, Detail
, Randomness
等)、Mix Color
节点的 Factor
值以及 Normal Map
的强度,来定制出你独一无二的云朵效果。
总结
在本教程中,我们从零开始,在 Blender 中一步步创建了一个完全程序化的吉卜力风格3D云朵着色器。我们学习了如何利用多层平面和透明度来模拟体积感,如何通过混合多种程序化纹理来塑造云朵的复杂形态和边缘细节,如何创建程序化法线来增加表面质感,并最终让云朵对光照和物体位置产生动态响应。
这个着色器的强大之处在于其完全的程序化特性,意味着你可以轻松调整参数,创造出各式各样的云朵,而无需依赖任何外部图片资源。
下一步探索:
- 性能优化 (EEVEE): 视频中提到,当前在EEVEE渲染器中,由于Alpha Hashed的特性,云朵可能会显得有些噪点。在后续的教程中,可能会探讨如何优化以获得更平滑的效果。
- 更多控制: 可以将关键参数(如各种纹理的Scale、Detail,颜色等)连接到节点组的输入端,从而在修改器属性面板或几何节点中更方便地控制云朵的整体外观。
- 动画: 利用
4D
纹理的W
输入或驱动器 (Drivers) 来让云朵的形态随时间动态变化。
希望本教程能帮助你掌握在 Blender 中创建风格化程序化材质的技巧!不断尝试和探索,你会发现节点编辑的无限可能。