Blender 教程: 为角色制作可动画的 2D 表情贴图

在本教程中,我们将指导你如何在 Blender 中为一个 3D 角色头部模型制作一个可动画的 2D 表情系统。我们将使用一系列 PNG 图片作为不同的面部表情,并将它们投射到头部模型上。最终,你将能够通过控制一个简单的圆形对象来轻松切换角色的表情。
本教程适合对 Blender 有一定基础,并希望学习角色表情绑定和动画技巧的用户。
通过本教程,你将学到:
- 如何在 Blender 中导入并使用“图像作为平面” (Images as Planes)。
- 如何配置图像序列以实现动画效果。
- 如何调整材质节点,使 2D 表情贴图不受光照影响并正确显示透明度。
- 如何使用“收缩包裹” (Shrinkwrap) 修改器将平面贴合物体表面。
- 如何使用驱动器 (Drivers) 将一个对象的属性链接到另一个对象的属性,以创建控制器。
- 如何使用约束 (Constraints) 来限制控制器的运动范围。
- 基本的动画关键帧设置。
准备工作
- Blender: 教程中使用版本 4.4.0。
- 一个头部 3D 模型: 你需要一个基础的头部模型用于投射表情。教程中已有一个名为
Head
的对象。 - 表情图片序列: 一套 PNG 格式的图片,每张图片代表一种表情,并已处理好透明背景。文件名应按序列命名 (例如
001.png
,002.png
, ...,007.png
)。教程中使用了7张表情图片。
步骤一: 导入并设置表情平面
- 在 Blender 的 3D 视图中,确保你的头部模型(教程中为
Head
对象)已准备好。 - 按下
Shift + A
打开添加菜单,选择Image
->Images as Planes
。 - 在弹出的文件浏览器中,导航到你的表情图片序列所在的文件夹,选择第一张表情图片 (例如
001.png
),然后点击右下角的 "Import Images as Planes" 按钮。 - 选中刚导入的平面。为了让它正对前方,我们需要旋转它:
- 按下
R
(旋转),然后按X
(沿X轴),输入90
,然后按Enter
。此时平面应该竖立起来。
- 按下
- 将平面稍微向前移动,使其位于头部模型的前方,但不要穿透模型:
- 按下
G
(移动),然后按Y
(沿Y轴),向前拖动鼠标,或输入一个小的正值,然后点击确认。
- 按下
- 切换到 正交前视图 (Front Orthographic View) (通常按数字键盘
1
) 以便更好地观察。
步骤二: 设置渲染背景透明
为了在最终渲染时只看到角色和表情,而背景是透明的,我们需要调整渲染设置。
- 在右侧的属性面板中,找到 渲染属性 (Render Properties)(图标通常是一个小相机)。
- 将
Render Engine
从默认的Eevee
更改为Cycles
。 - 在其下方的
Device
选项中,选择GPU Compute
(如果你的电脑支持 GPU 计算,这会更快)。 - 向下滚动找到
Film
(胶片)部分,展开它。 - 勾选
Transparent
复选框。现在,如果你切换到渲染预览模式(按Z
键选择Rendered
),背景应该会变成棋盘格,表示透明。
步骤三: 配置图像序列着色器
现在我们需要告诉 Blender 我们使用的是一个图片序列,而不是单张图片。
- 保持表情平面被选中。
- 切换到 Blender 顶部的
Shading
(着色)工作区。 - 在底部的着色器节点编辑器中,你会看到一个
Image Texture
(图像纹理) 节点(当前显示的是你导入的第一张图片,如001.png
)连接到一个Principled BSDF
节点。 - 在
Image Texture
节点上:- 找到
Source
(源) 属性,当前默认为Single Image
(单个图像)。点击它,从下拉菜单中选择Image Sequence
(图像序列)。 - 点击节点上文件名旁边的小文件夹图标,重新打开文件浏览器。
- 按
A
全选文件夹中所有的表情图片 (001.png
到007.png
),然后点击 "Open Image"。 - 现在,
Image Texture
节点会显示序列的第一张图片,并且Frames
(帧数) 属性会更新为你图片序列的总数量(教程中是 7)。 - 确保
Cyclic
(循环) 和Auto Refresh
(自动刷新) 复选框都被勾选。
- 找到
步骤四: 使表情材质不受光照影响且透明
为了让 2D 表情看起来像是卡通贴图,而不是受场景光照影响的 3D 物体,我们需要修改其材质。
- 调整光线可见性 (Ray Visibility):
- 在右侧的属性面板中,找到 对象属性 (Object Properties)(图标是一个橙色方块)。
- 向下滚动找到
Visibility
(可见性) 部分,展开它。 - 在
Ray Visibility
(光线可见性) 子部分中,取消勾选以下所有选项:Diffuse
,Glossy
,Transmission
,Volume Scatter
, 和Shadow
。这样做可以确保该平面不会接收或投射阴影,也不受复杂光照计算的影响。
- 修改着色器节点:现在,表情贴图应该是自发光的,并且其透明部分能够正确显示。
- 回到
Shading
工作区的节点编辑器。 - 选中并删除 (
X
键) 默认的Principled BSDF
着色器节点。 - 按下
Shift + A
打开添加菜单,搜索并添加Emission
(自发光) 着色器节点。 - 再次按下
Shift + A
,搜索并添加Transparent BSDF
(透明 BSDF) 着色器节点。 - 最后,按下
Shift + A
,搜索并添加Mix Shader
(混合着色器) 节点。 - 现在连接节点:
- 将
Image Texture
节点的Color
输出 (黄色圆点) 连接到Emission
节点的Color
输入。 - 将
Emission
节点的Emission
输出连接到Mix Shader
节点的底部Shader
输入。 - 将
Transparent BSDF
节点的BSDF
输出连接到Mix Shader
节点的顶部Shader
输入。 - 将
Image Texture
节点的Alpha
输出 (灰色圆点) 连接到Mix Shader
节点的Fac
(系数) 输入。 - 将
Mix Shader
节点的Shader
输出连接到Material Output
(材质输出) 节点的Surface
(表面) 输入。
- 将
- 回到
步骤五: 将表情平面贴合到头部模型
为了让 2D 表情能够随着 3D 头部的曲面变形,我们需要细分平面并使用“收缩包裹”修改器。
- 切换回 Blender 顶部的
Layout
(布局) 工作区。 - 选中表情平面。
- 按
Tab
键进入 编辑模式 (Edit Mode)。 - 确保所有顶点都被选中 (如果没有,按
A
全选)。 - 右键点击,选择
Subdivide
(细分)。 - 在 3D 视图左下角弹出的
Subdivide
操作框中,将Number of Cuts
(切割次数) 多次增加,直到平面有足够多的细分以适应头部的曲面(增加到10
)。 - 再次右键点击并选择
Subdivide
,这次将Number of Cuts
设为1
(或根据需要调整,以获得更平滑的细分)。 - 按
Tab
键返回 物体模式 (Object Mode)。 - 在右侧的属性面板中,选择 修改器属性 (Modifier Properties)(图标是一个扳手)。
- 点击
Add Modifier
(添加修改器),在Deform
(形变)类别中找到并选择Shrinkwrap
(收缩包裹)。 - 在
Shrinkwrap
修改器设置中:- 点击
Target
(目标) 旁边的吸管图标,然后在 3D 视图中点击你的头部模型(Head
对象)。或者,直接从下拉列表中选择头部模型。 - 调整
Offset
(偏移) 值,例如设置为0.01m
。这个值会使表情平面稍微离开头部表面一点点,以防止穿插。
- 点击
现在,表情平面应该已经贴合在头部模型的表面了。
步骤六: 创建表情控制器并用驱动器链接
我们将创建一个简单的圆形对象作为控制器,通过移动这个控制器来切换不同的表情。
方法一:直接关键帧 Offset (简单但不灵活)
你可以直接在 Shading
工作区,选中表情平面的 Image Texture
节点,在 Offset
属性上设置关键帧来切换表情。在时间轴上移动到不同帧,更改 Offset
值(0 代表第一张图,1 代表第二张,以此类推,因为我们有7张图,所以有效值是0-6),然后对 Offset
属性按 I
键插入关键帧。为了实现表情的瞬间切换,可以在时间轴编辑器中选中所有关键帧,右键点击选择 Interpolation Mode
-> Constant
。
方法二:使用驱动器 (推荐)
这种方法更强大且易于管理。
- 创建控制器对象:
- 确保处于 物体模式 (Object Mode)。
- 按下
Shift + A
,选择Mesh
->Circle
(圆环)。 - 旋转圆环使其面向前方:按
R
X
90
Enter
。 - 调整圆环大小和位置:按
S
缩放,按G
X
将其移动到角色头部的一侧,方便操作。 - 应用变换: 选中圆环,按
Ctrl + A
,选择Rotation
(旋转)。再次按Ctrl + A
,选择Scale
(缩放)。这会将旋转和缩放的当前状态设为默认值。
- 设置驱动器:
- 选中创建的圆环控制器。在右侧属性面板的 对象属性 (Object Properties) 中,找到
Transform
(变换) ->Location
(位置)。 - 右键点击
Z
坐标值,选择Copy as New Driver
(复制为新驱动器)。 - 选中表情平面。切换到
Shading
工作区。 - 在
Image Texture
节点的Offset
属性上右键点击,选择Paste Driver
(粘贴驱动器)。此时Offset
属性会变成紫色,表示它由驱动器控制。
- 选中创建的圆环控制器。在右侧属性面板的 对象属性 (Object Properties) 中,找到
- 配置驱动器:
- 在 Blender 界面任意一个编辑器窗口的左上角,点击编辑器类型图标(例如,如果当前是 3D 视图,图标可能是个小方格),从下拉菜单中选择
Drivers
(驱动器)。 - 在驱动器编辑器的左侧列表中,展开表情平面的对象 (如
001
) ->Shader Nodetree
->Image Texture
(或者你为图片纹理节点命名的名称) ->Offset (Image User)
。点击它。 - 在驱动器编辑器的右侧(通常按
N
键调出属性栏,如果未显示),找到Drivers
标签页。 - 在
Variables
(变量) 部分,你会看到一个名为var
(或类似名称) 的变量,它代表了我们复制的圆环Z轴位置。将这个变量的名称更改为更有意义的词,例如Emotion
。 - 将
Type
(类型) 从Averaged Value
(平均值) 改为Scripted Expression
(脚本表达式)。 - 在
Expression
(表达式) 输入框中,输入round(Emotion * 10)
。这里的Emotion
就是你上一步重命名的变量名。乘以10
是为了让控制器在 Z 轴上移动较小的距离(如0.1米)就能使Offset
改变1(即切换到下一张图)。round()
函数用于取整,确保我们得到整数帧号。- 注意: 教程中最初的表情帧数是 7 (Offset 0-6)。如果控制器Z轴移动 0.1m 对应 Offset 变化 1,那么控制器从Z=0移动到Z=0.6m就能遍历所有表情。
- 重要:在驱动器编辑器中,展开
Shader Nodetree
->Image Texture
下的Offset (Image User)
时,下方会显示出该 Image Texture 节点的属性。找到Frames
属性(注意,这不是指图片序列的总帧数,而是指动画播放时,每一帧图像序列自身前进多少帧)。将其值从默认的7(或你的图片总数)改为1
。这确保了驱动器直接控制Offset
时,Offset 值的改变就是图像序列帧号的改变。
- 在 Blender 界面任意一个编辑器窗口的左上角,点击编辑器类型图标(例如,如果当前是 3D 视图,图标可能是个小方格),从下拉菜单中选择
- 约束控制器运动:
- 选中圆环控制器。
- 在右侧属性面板中,选择 对象约束属性 (Object Constraint Properties)(图标是一个链条)。
- 点击
Add Object Constraint
(添加对象约束),选择Limit Location
(限制位置)。 - 勾选
Minimum Z
和Maximum Z
。- 将
Minimum Z
设为0m
。 - 由于我们有7个表情 (Offset 0到6),并且驱动器表达式是
Emotion * 10
,所以当控制器Z轴位置 (Emotion) 为0.6
时,Offset 会是6
。因此,将Maximum Z
设为0.6m
。
- 将
- 勾选下方的
Affect Transform
复选框。
- 父子化对象:
- 首先选中表情平面 (例如
001
)。 - 按住
Shift
键,加选圆环控制器。 - 再按住
Shift
键,加选头部模型 (Head
)。确保头部模型是最后选中的,高亮边框颜色不同。 - 按下
Ctrl + P
,选择Object (Keep Transform)
。现在,移动或旋转头部模型时,表情平面和控制器都会跟随。
- 首先选中表情平面 (例如
步骤七: 动画化表情
现在你可以通过移动圆环控制器来改变角色的表情了。
- 选中圆环控制器。
- 在时间轴 (Timeline) 编辑器中(如果底部没有,可以将某个窗口切换到 Timeline 编辑器)。
- 移动到时间轴的某一帧,例如第 1 帧。
- 在 3D 视图中,按下
G
然后Z
,向上或向下移动圆环控制器。观察角色头上的表情变化。- 当圆环 Z 轴位置为 0m 时,显示 Offset 0 的表情 (第一张图)。
- 当圆环 Z 轴位置为 0.1m 时,显示 Offset 1 的表情 (第二张图)。
- ...
- 当圆环 Z 轴位置为 0.6m 时,显示 Offset 6 的表情 (第七张图)。
- 确定好某一帧的表情后,在圆环控制器的
Location Z
属性上(位于对象属性面板)右键点击,选择Insert Single Keyframe
(插入单个关键帧),或者直接将鼠标悬停在 3D 视图中按I
然后选择Location
。 - 移动到时间轴的另一帧,再次调整圆环控制器的 Z 轴位置以选择不同表情,然后再次插入关键帧。
- 为了让表情瞬间切换,而不是平滑过渡:
- 在时间轴编辑器中,确保选中了你设置的所有关键帧。
- 右键点击,选择
Interpolation Mode
(插值模式) ->Constant
(恒定)。
现在播放动画,你应该能看到角色的表情根据你设置的关键帧进行切换了。
总结
通过本教程,你学会了两种在 Blender 中为角色创建和动画化 2D 表情的方法,重点学习了如何使用图像序列、调整材质使其不受光照影响、使用收缩包裹修改器贴合表面,以及通过驱动器和控制器来高效管理和动画化表情切换。这种技术对于制作风格化角色动画非常有用,可以快速赋予角色生动的个性。
你可以进一步扩展这个系统,例如添加更多的表情,或者使用更复杂的控制器来同时控制眼睛、嘴巴等不同部位的表情组合。