mcpField
B
blender-facial-shapekeys

blender-facial-shapekeys

github.com/el4cteo创意与媒体56996 次安装2 周前更新
代码仓库

关于 blender-facial-shapekeys

面向 Blender 创作者的面部绑定与形态键工作指南,涵盖 ARKit、viseme、修正形态和导出注意事项,适用于多种面部动画流程。

主要功能

  1. 01创建 ARKit 52 和 Oculus viseme 键
  2. 02拆分与镜像形态键
  3. 03检查未完成形态键
  4. 04可选控制器属性与驱动器
  5. 05制作修正形态和组合形态
  6. 06提供引擎导出说明

适用场景

  1. 01为游戏或 VTuber 制作面部表情
  2. 02为动作捕捉流程制作 blendshape
  3. 03在 Blender 中构建电影风格面部绑定

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/el4cteo/blender-skills --skill blender-facial-shapekeys

安装后在 Claude Code 中输入/blender-facial-shapekeys确认已加载。

附带文件scripts/_bpyx.pyscripts/shapekeys.py

详细介绍

面部绑定与形状键

执行模型位于 blender-core。身体绑定位于 blender-character-rigging。

选择方案

方案用途备注
Blendshapes(ARKit 52)游戏、VTuber、动作捕捉(iPhone / Live Link Face)、Web / VRM行业通用的交换集;每个形状都需要雕刻
骨骼(下颌、眼睛、眼睑、眉毛、嘴唇)风格化作品、低内存占用、移动端下颌和眼睛几乎总是适合用骨骼控制
混合方案大多数商业游戏头部下颌 / 眼睛 / 舌头使用骨骼,其余柔性部位使用形状键
Rigify 面部绑定(human 元骨架)在 Blender 内进行电影风格的关键帧动画100 多根面部骨骼,对引擎而言负担较重

操作步骤(blendshape)

  1. 头部网格需要在眼睛和嘴部周围布置整齐的边线(blender-retopology-uv);眼睛、牙齿和舌头应作为独立对象,父级绑定或权重绑定到骨骼。
  2. scripts/shapekeys.py -- --mesh Head --create arkit(或使用 --create visemes 创建 15 个 Oculus 视素)会创建空的、命名正确的键。
  3. 雕刻每个键(实时操作:在活动键上使用雕刻模式,use_shape_key_edit_mode)。对称表情可以只雕刻一次,然后用 --split eyeBlink 生成 eyeBlinkLeft/Right,并在 X=0 处进行柔和混合(--falloff m)。
  4. --mirror browDownLeft 会生成 browDownRight(不依赖拓扑的镜像)。
  5. --report 会列出尚未雕刻的键、每个键的最大偏移量,以及缺少的 ARKit 名称。只有在每个键都产生变化且没有遗漏时,形状才算完成。
  6. 可选:--drivers FaceCtrl 会添加一个控制器,其中的 0–1 自定义属性可驱动每个键,供 Blender 中的关键帧动画使用。
  7. 使用 look 检查极限状态和组合(jawOpen + mouthSmile、eyeBlink + eyeSquint)。发现问题时,用由两个键值乘积驱动的组合修正键进行调整。

形状键规则

  • 形状是相对于 Basis 的差值。创建键后,切勿更改 Basis 的拓扑(添加或删除顶点会破坏所有键)。
  • 每个键只负责一个动作。面部键中不要包含头部或颈部运动(这些由骨骼控制)。眼睑应沿眼球表面滑动,而不是穿过眼球(使用 blender-asset-qa 检查眼睑 / 眼球上的 z-fighting)。
  • 范围为 0–1。可以提高 slider_max 来增强效果,但引擎会将数值限制在 0–1。
  • 只有相对键(use_relative=True,默认值)可以导出。
  • 名称必须严格符合规范(区分大小写):eyeBlinkLeft,而不是 EyeBlink_L。引擎会根据名称进行映射。
  • 对带有 Subdivision 的网格使用形状键时,应在 0 级细分下雕刻,并将细分修改器放在形状键之后(无论如何,形状键都会先计算)。
  • 对带有形状键的网格应用修改器会失败。对变形修改器使用 modifier_apply_as_shapekey,或在创建形状键前应用修改器。

修正形状与组合形状

  • 骨骼姿势的修正形状:在摆好姿势的状态下雕刻,然后使用 TRANSFORMS 变量驱动(ROT_X、LOCAL_SPACE,映射到 0–1)。
  • 组合形状:创建键 jawOpen_mouthSmile,并用 SCRIPTED 驱动表达式 a*b,取值来自两个键(SINGLE_PROP key_blocks["jawOpen"].value)。简单表达式不需要启用 Python 自动运行。

引擎说明

  • Unity:使用 FBX blendshape。在 Model 导入器中,将 Blend Shape Normals 设为 Calculate(若导出时已包含平滑信息,也可设为 Import)。ARKit 名称会映射到 AR Foundation 的面部追踪示例。
  • Unreal:使用形态目标("Import Morph Targets")。Live Link Face / MetaHuman Animator 使用 ARKit 名称,Pose Asset 会映射这些曲线。不要添加叶骨骼。
  • Roblox 动态头部:使用基于 FACS 的姿势和 Roblox 专用名称,并将其制作成头部绑定上的动画帧(Creator Hub "Dynamic heads" 规范)。使用官方 Blender 模板制作。ARKit 雕刻可通过重命名 / 映射重复利用。头部不得超过 4,000 个三角面。
  • VRM / Web(three-vrm、ReadyPlayerMe 风格):将 ARKit 52 + 视素作为 glTF 形态目标导出(export_morph=True)。仅在着色需要时启用形态法线导出(会使体积翻倍)。
  • 导出前删除未使用的键。每个键都会按顶点占用内存(glTF 稀疏访问器有助于节省空间)。

注意事项

  • ob.shape_key_add(from_mix=False) 会复制 Basis。from_mix=True 会烘焙当前混合结果(适用于组合效果,但意外使用会很危险)。
  • shape_key_mirror(use_topology=False) 要求网格在 X 轴上对称。在活动形态键上运行(脚本会处理这一点)。
  • 形态键的驱动器变量使用 Key ID(ob.data.shape_keys),而不是网格:fc = kb.driver_add("value")。

评论

支持 Markdown