Appearance
Capture 与 ModelDriver 双框架
设计 CaptureFramework 和 ModelDriverFramework 架构,将面捕采集与模型驱动解耦,实现引擎可插拔、驱动可迭代。
背景
B 站虚拟直播涉及多个面捕引擎(Mediapipe、小K、伏羲、ARKit、商汤)和多种模型格式(VRM、Live2D、AR 头套)。每个项目都在代码里硬编码面捕接入和模型驱动逻辑,不同项目间无法复用。我和踏浪一起设计了 CaptureFramework + ModelDriverFramework 双框架方案。
问题
- 面捕引擎紧耦合:切换面捕引擎需要改业务代码
- 模型驱动重复造轮子:VRM 驱动在 3D 虚拟开播和 Z-star 中各写一遍
- 无法扩展:新增一种模型格式就需要一个项目全部重新接入面捕
方案
CaptureFramework(面捕采集层)
CaptureInterface(抽象接口)
├── MediapipeCapture → 自研引擎
├── XiaokCapture → 小K SDK
├── ARKitCapture → iOS 面捕
└── ShangtangCapture → 商汤引擎每个 Capture 实现统一接口:
StartCapture()→ 启动面捕GetFaceData()→ 返回标准化的面部数据(CompatibleFaceData 协议)StopCapture()→ 停止面捕
ModelDriverFramework(模型驱动层)
DriverInterface(抽象接口)
├── VRMDriver → VRM 模型驱动
├── Live2DDriver → Live2D 模型驱动
├── ARHeadsetDriver → AR 头套驱动
└── GenericDriver → 通用 BS 驱动每个 Driver 消费 CompatibleFaceData,将面捕数据映射到具体模型上。
关键设计
- 数据协议标准化:Capture 和 Driver 之间通过 CompatibleFaceData 通信,彻底解耦
- 统一 BS 命名:ARKit 的
jawOpen和 VRM 的A通过协议层互转 - 项目接入成本:新项目只需选择 Capture + Driver 组合,不写面捕/驱动代码
成果
- 支撑 3D 虚拟开播、Z-star、小K 等多个项目
- 新增模型格式只要实现 DriverInterface
- 相关专利:CaptureFramework / ModelDriverFramework 已申请
架构图说明
Capture 侧(数据采集与标准化)
NativeARkitAdaptorUPM 和 NativeMediapipeAdaptorUPM 分别通过 ARkitMgr::ICapturerMgr、MediapipeMgr::ICapturerMgr 接入原生采集能力,再通过 ARkitFaceDataAdaptor::IFaceCapturer、MediapipeFaceDataAdaptor::IFaceCapturer 把原始面捕数据转成框架可用的数据结构。
Driver 侧(标准化数据消费与模型驱动)
ModelDriverFrameWork 提供核心接口 IModelDriver:Init、SetCompatibleBSData、SetCaptureSettings、SetCaptureModelSettings、HandleCalibrate、Drive、LateDrive。Live2DDriverUPM 和 VRMDriverUPM 分别实现 Live2D 和 VRM 的具体驱动——表情参数、眼睛、嘴巴、头部/身体摆动、自动眨眼、校准参数。
协作方式
Capture 输出 CompatibleBS / 面捕结构和设置数据 → Driver 根据 InstanceID、ClassID/ClassGUID 找到目标模型 → 映射到 Live2D 或 VRM 的驱动函数。
移动端整体五层架构
- 采集适配层:封装 ARKit 和 Mediapipe 原生采集能力
- Capture 框架层:统一采集生命周期(
Init、Update、LateUpdate、SetModel等) - 标准数据层:
IFaceCapturer、IMotionCapturer、CompatibleBS、ModelInfo等,打通不同采集源和驱动模型 - Driver 框架层:抽象模型驱动流程,统一初始化、校准、驱动步骤
- 具体驱动层:
Live2DDriverUPM和VRMDriverUPM