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(圆环)。 - 旋转圆环使其面向前方:按
RX90Enter。 - 调整圆环大小和位置:按
S缩放,按GX将其移动到角色头部的一侧,方便操作。 - 应用变换: 选中圆环,按
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 表情的方法,重点学习了如何使用图像序列、调整材质使其不受光照影响、使用收缩包裹修改器贴合表面,以及通过驱动器和控制器来高效管理和动画化表情切换。这种技术对于制作风格化角色动画非常有用,可以快速赋予角色生动的个性。
你可以进一步扩展这个系统,例如添加更多的表情,或者使用更复杂的控制器来同时控制眼睛、嘴巴等不同部位的表情组合。