AR-Test-Demo/AI驱动虚拟形象渲染方案_v5.1.md
zyc 72e7df09cd Initial commit: AR avatar prototype
包含三个子项目:
- avatar-h5-renderer: Live2D Cubism 4 H5 渲染器 (Vite + TS)
- avatar_flutter_app: Flutter 容器 App (打包 H5 进 WebView)
- gif-export: puppeteer 导出 32 个动作的透明 GIF (供 ESP32 圆屏播放)

模型资源: Haru, Natori (含贴图、moc3、motions, expressions)
设计文档: AI驱动虚拟形象渲染方案_v5.1.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 11:14:10 +08:00

33 KiB
Raw Blame History

AI 驱动虚拟形象渲染方案 v5.1

跨产品形态统一架构调研

项目 内容
产品形态 ① 罐子Unity 3D + RK + 全息光仓,洛天依形象在跑)
② 洛天依 APP独立 APPUnity
③ 小型硬件统一 APP多设备入口统一流量与用户
④ ESP32-S3 小硬件(序列帧形态)
⑤ 未来 Live2D 形态 / 虚拟明星 / 写实数字人
当前底座 火山 RTC AIGC 全平台已跑通(手机 / 罐子 / ESP32-S3
整套 ASR + LLM + TTS 在云端打包,端到端延迟 < 2s
当前痛点 形象层 3D 建模 + 手 K 动画,美术资产成本高,新对话/新场景都要手 K 衔接
调研目标 用 AI 驱动取代手 K复用 RTC 已有底座,覆盖跨产品形态
调研日期 2026-05-09
适用主体 杰森气元科技 / 气元科技
优先级 P0 - 立即启动

阅读指引

本文是给彭铭聪 / 张业昌 / 张文琦 review 的方案文档。Air 主导方向,实操细节由你们决定

核心思路RTC AIGC 已经原生下发字幕、AI 状态、情绪、Function Calling 等信号Unity 端 / 各端在已有 RTC 回调里多解析这些事件,就能把动作衔接、表情切换、嘴型驱动从"手 K"切换到"AI 驱动"。

罐子的洛天依 3D 模型、Animator、shader 全部保留,不动;只在事件消费层加东西。

文档结构:

  • 第一~二章:架构主线,先看
  • 第三章:罐子(洛天依)的具体落地路径,彭铭聪重点看
  • 第四~六章:其他产品形态参考,未来要做时再翻
  • 第七章:风险和待验证项
  • 第八章P0 行动清单
  • 第九章:未来技术栈迁移路径(中长期成长方向,彭铭聪也建议看)

一、关键结论

核心架构:协议层复用 RTC 信令,渲染层按形态分化。

火山 RTC AIGC 已经把 ASR + LLM + TTS 整套打包跑在云端TTS 输出的字幕Subtitle、AI 对话状态、情绪标签、Function Calling 事件通过 RTC 房间内的标准消息回调下发到端侧——跟音频流走同一条链路,天然时间对齐。

各端Unity / 手机 / RK / ESP32-S3已有的 RTC SDK 已经具备接收这些消息的能力。不需要自建 WebSocket 协议,不需要新连接管理——只在已有 RTC 回调里加一层事件解析。

1.1 三件事必须分开讨论

很多技术争议来自把这三件事混在一起:

# 概念 跑在哪 我们的方案
1 AI 推理LLM/TTS/ASR 云端 火山 RTC AIGC已跑通
2 驱动信号下发 云端 → 端侧 RTC 信令 复用 RTC 已有通道
3 形象渲染(每帧画面) 端侧本地 Unity / Cubism / 序列帧

「AI 驱动」指 #1 输出的语义信号通过 #2 送到端侧,驱动 #3 自动渲染。渲染本身仍在端侧本地跑——跟所有 VTuber 软件、SEKAI、明日方舟一样的架构。

1.2 火山官方"数字人"功能 ≠ 我们要的方案,明确排除

维度 火山数字人 我们的需求
渲染位置 云端渲染,推 H264 视频流到端 端侧自渲染
形象库 火山预制 2D 真人 / 3D 超写实 / 3D 卡通 自建 3D洛天依/ 未来 Live2D / 序列帧
计费 按并发独立计费(付费资源) 不需要,省钱
灵活度 形象由火山管 形象、动画、风格我们完全控制
商务限制 文档明确"提交工单咨询售前" 标准 RTC AIGC 不需要额外谈判

判定依据:火山数字人文档明确"SubtitleConfig.SubtitleMode 必须设置为 1不对齐时间戳"——启用云端数字人时字幕只是显示用、不携带音频对齐信息(因为云端已经把口型烧进视频流了)。我们要的恰恰是 SubtitleMode=0对齐音频时间戳——给端侧自渲染用的字时间戳信号。

判断技巧:凡是火山文档里需要"独立计费 / 提交工单咨询 / 数字人 AppId / 并发限制"的能力——是云端付费功能。凡是 RTC AIGC 已经原生支持的能力字幕、AI 状态、情绪、Function Calling——是 RTC 标准能力,已经在订阅里。

设计原则:只用 RTC 标准能力,不依赖任何独立付费资源

1.3 各产品形态可行性

形态 渲染技术 硬件 状态
罐子(洛天依) Unity 3D + BlendShape + Animator + 全息光仓 RK3566 / RK3588S 已在跑,下一步加 AI 驱动事件层
洛天依 APP(独立) Unity与罐子同一份工程 iOS / Android 已有 demo与罐子同步加 AI 驱动
小型硬件统一 APP Flutter + 多渲染层(按设备角色卡热加载) iOS / Android 待立项,不用 Unity
ESP32-S3 小硬件 LVGL + sprite sheet 状态机 ESP32-S3 方案已定,未来按 RTC 信令驱动
未来 Live2D 形态 Cubism Native SDK 待定 储备方案
未来虚拟明星 / 写实数字人 Unity 或 Cocos / VRM 标准 高端硬件 / 手机 储备方案,见第九章

1.4 立即启动的 P0 工作

这是现在就要开始做的事

  1. 服务端在 RTC AIGC 配置里启用 SubtitleConfigSubtitleMode 设为 0对齐音频时间戳
  2. Unity 端打印 subtitle 消息 JSON验证时间戳精度决定后续嘴型驱动算法
  3. Unity 端最小可用 demo罐子上洛天依 AI 对话时嘴型自动同步(取代当前手 K

详见第八章。总工时 3-4 人天,本周可全部完成


二、修订后的数据流

sequenceDiagram
    participant U as 用户
    participant App as 端侧 App<br/>(Unity罐子/手机/RK/ESP32)
    participant R as 本地渲染引擎<br/>(Unity / Cubism / LVGL)
    participant RTC as 火山 RTC<br/>(全平台 SDK)
    participant AIGC as 火山 AIGC 云<br/>(ASR+LLM+TTS)

    Note over App,R: 模型/资产端侧本地常驻

    U->>App: 说话
    App->>RTC: 音频上行
    RTC->>AIGC: 路由到 AIGC 服务
    AIGC->>AIGC: ASR → LLM(豆包) → TTS

    par 同一条 RTC 房间链路
        AIGC-->>RTC: TTS 音频流
        RTC-->>App: 订阅音频流
    and
        AIGC-->>RTC: Subtitle 字幕(对齐时间戳)
        RTC-->>App: onRoomMessageReceived
    and
        AIGC-->>RTC: AI 状态事件 / 情绪 / Function Call
        RTC-->>App: onUserMessageReceived
    end

    App->>App: 扬声器播放音频
    App->>R: 字时间戳 → 嘴型参数
    App->>R: 情绪 → 切换 expression
    App->>R: Function Call → 触发 motion
    R-->>U: 屏幕渲染

关键点:所有 AI 输出走的是同一条 RTC 房间链路,跟音频流天然时间对齐。无独立 WebSocket无独立连接管理无新协议设计。

2.1 RTC AIGC 能用的信号(重要:直接对接列表)

信号类型 来源 用途
字幕Subtitle TTS 流式输出 驱动嘴型(最关键)
AI 状态事件 对话状态机 触发 idle / listening / thinking / speaking 状态切换
AI 对话任务事件 任务级回调 错误处理、对话开始/结束
情绪识别与生成 情绪模型输出 触发 expression 切换
Function Calling 结果 LLM 工具调用 触发预设 motion / 业务动作
自定义 Message LLM 通过结构化输出 LLM 主动插入 motion tag

这些能力已经在你们的 demo 里跑通的 RTC SDK 里——不需要任何新连接。

2.2 端侧通用消费模式

每个端的 RTC SDK 都有这两类回调:

onRoomMessageReceived(msg)         // 房间广播消息(字幕通常走这里)
onUserMessageReceived(uid, msg)    // 点对点消息AI 状态事件通常走这里)

端侧实现 = 在这两个回调里加一层 JSON 解析 → 写入时间轴消费器 → 驱动渲染层。

2.3 端侧时间轴示例

gantt
    title 端侧 1 秒内的渲染时间轴:「今天天气真好」
    dateFormat  X
    axisFormat %Lms

    section 音频播放
    PCM 解码播放                :a1, 0, 1000

    section 嘴型 (字 → viseme)
    今 (j-in)                   :p1, 0, 200
    天 (t-ian)                  :p2, 200, 400
    是 (sh-i)                   :p3, 400, 600
    好 (h-ao)                   :p4, 600, 1000

    section 表情
    expression= happy           :e1, 0, 1000

    section 动作
    motion= idle.smile          :m1, 0, 1000

端侧只是一个时间轴消费器:音频播放线程独立、嘴型按字时间戳改 BlendShape、表情按 emotion 区间切换、motion 按 Function Call 触发。

2.4 「渲染跑在端侧」是工业标准

需要向团队说明的一件事——这不是新架构,是行业惯例:

  • 全球所有 VTuber 直播软件VTube Studio、PrprLive、Animaze都是端侧本地跑
  • Project SEKAI、明日方舟、原神信箱里的角色端侧本地渲染
  • Unity 跑在 Android RK 板上是产业标准做法(车载、零售、家电常见)

「AI 驱动虚拟人」的新意不在「跑在云端」,而在驱动信号源

传统形象渲染 AI 驱动
主播说话 LLM 输出文本
主播按表情按钮 LLM 输出 emotion tag
摄像头面捕跟踪嘴型 TTS 输出字时间戳
主播按动作快捷键 LLM 输出 Function Call
动画师手 K 衔接 RTC AI 状态事件驱动状态机

三、罐子(洛天依)落地路径

这是 P0 的核心工作。彭铭聪重点看本章。

3.1 当前状态梳理

  • Unity 工程已有洛天依 3D 模型(手动建模)
  • 动画师做了多套动作,彭铭聪在 Unity 里做动作衔接
  • 已经加了"张嘴"——但应该不是真正的 viseme 嘴型,是简化版张/合Q 版卡通形象上够用)
  • RTC + AI 对话已经跑通

3.2 不变的部分

  • 3D 建模 保留
  • BlendShape / 骨骼绑定 保留
  • 现有 Animator 和动作衔接 保留
  • shader 和全息光仓适配 保留
  • RTC 集成 保留

3.3 要加的部分

在 Unity 工程里加一个事件消费层:

[业务逻辑层]  ← 纯 C# 逻辑,不绑 Unity API可移植
  ├─ RTCMessageParser.cs        // RTC 消息 JSON 解析
  ├─ TimelineConsumer.cs        // 事件队列 + 时间轴消费
  └─ CharacterStateMachine.cs   // 角色状态抽象idle/listening/speaking...
       ↓ 通过接口调用
[渲染适配层]  ← 绑 Unity未来换技术栈时只重写这一层
  └─ UnityCharacterRenderer.cs  // BlendShape / Animator 写入
       ↓
[已有 Unity 资产]  ← 完全不动
  ├─ 洛天依 3D 模型
  ├─ Animator 状态机
  └─ shader / 全息光仓适配

关键设计原则:业务逻辑层和渲染适配层解耦。具体做法:

  • 业务逻辑层不直接调 Animator.SetTrigger()SkinnedMeshRenderer.SetBlendShapeWeight()
  • 改成调一个接口 ICharacterRenderer,方法是 SetMouthOpen(float v) / PlayMotion(string name) / SwitchExpression(string name) 这种语义化 API
  • Unity 实现 UnityCharacterRenderer : ICharacterRenderer
  • 未来想换 Cocos / Three.js / 其他,只重写一个 Renderer 实现,业务逻辑零改动

这个分层在当下不显眼,未来换技术栈时值千金。详见第九章「未来技术栈迁移路径」。

完整 Unity 工程结构:

[Unity 主线程]
  ├─ RTCEngine已有
  │   └─ OnRoomMessageReceived / OnUserMessageReceived  ← 转发给 RTCMessageParser
  ├─ 业务逻辑层(新增,纯 C#
  │   ├─ RTCMessageParser
  │   ├─ TimelineConsumer
  │   └─ CharacterStateMachine
  ├─ 渲染适配层(新增)
  │   └─ UnityCharacterRenderer : ICharacterRenderer
  └─ AudioPlayback已有作为时间基准

改动量很小3D 资产和现有动画状态机一行不动。

3.4 全息光仓适配

LCD 拆背光后,黑色像素 = 透明(光不发出去),亮色像素 = 发光。渲染要求:

  • 纯黑背景(不要天空盒,不要环境光)
  • 角色用发光材质emission map + Bloom 后处理强化
  • 避免大面积低亮度区域(在光仓里看不见,会显得角色少了一块)
  • 轮廓光强化rim light 让角色边缘更清晰
  • 慎用半透明alpha blend 在拆背光后效果难预测,先做实验
  • 色彩偏向高饱和、亮色调(青色/紫色/品红在全息感下最强)

这些规则彭铭聪应该已经在做了,列在这里供未来其他人参考。

3.5 RK 性能预期

板子 屏幕 单角色 PBR Unity URP 全息 shader
RK3566 Mali-G52 2EE 720p 30fps顶点 < 30k URP 简化版 简单 Bloom
RK3588S Mali-G610 1080p 60fps 轻松 URP 完整 Bloom + 体积光可选

RK3566 优化注意点

  • 顶点数严控(< 30k骨骼 < 50
  • shader 不要用复杂 PBR半 Lambert + matcap + 发光通道即可
  • URP 关闭 SSR / SSAO / DOFBloom 用低质量档
  • 720p 是合理目标,强求 1080p 会掉帧

3.6 关于嘴型精度的讨论

Air 提到:"洛天依现在嘴型只是张/合,不是真嘴型,对 Q 版卡通形象其实够用。但未来做虚拟明星、真人写实数字人时,真嘴型才比较重要。"

这个判断对:

形象类型 嘴型精度要求 实现路径
Q 版卡通(洛天依) 张/合 + 表情即可 字时间戳 → 1 个 BlendShape 开合度,足够
写实/半写实虚拟艺人 6 visemeA/I/U/E/O/sil 字 → viseme → 5+ 个 BlendShape 加权
顶级写实数字人 15 viseme + 协同发音 接 NVIDIA Audio2Face 或类似方案

当前阶段(洛天依罐子)做最简实现就够:字时间戳到了 → BlendShape 开合度 = 1讲话中字时间戳间隙 → 开合度 = 0用 LERP 平滑过渡。一个 BlendShape 解决问题。

未来做虚拟明星CYBER STAR 那条线)时,再升级到完整 viseme 集,那时候方案不变,只是 CharacterController 里多写几行映射代码

3.7 AI 驱动的真正价值不只在嘴型

这里要纠正一个可能的认知偏差:洛天依嘴型确实不重要,但这不等于 AI 驱动方案对洛天依不重要。

AI 驱动信令的真正价值在动作 / 表情 / 状态切换

  • 不再手 K 每段对话的动作衔接
  • AI 说话内容触发情绪 → 自动切表情
  • LLM 输出 Function Call → 自动播预制动作(挥手、点头、托腮、唱歌起手...
  • idle / listening / thinking / speaking 状态机由 RTC AI 状态信号驱动

美术资产成本无限堆高的核心问题,是动作和动画,不是嘴型。彭铭聪现在每加一段新对话就要手 K 衔接的痛点AI 驱动信令解决的就是这个。

罐子上最容易出效果的不是嘴型,是:

  1. AI 在思考时(状态 = thinking→ 自动播"歪头思考"动作
  2. AI 在听用户说话时(状态 = listening→ 自动播"侧耳倾听"动作
  3. AI 说到开心内容时(情绪 = happy→ 自动切笑脸 + 播"拍手"动作
  4. 用户问"你会唱歌吗"LLM 触发 Function Call play_song → 播预录的唱歌动画

这些都是预制好的 motion clipAI 只是按语义触发——美术做一次,无限复用。


四、其他产品形态参考

这一章是知识储备。当前不需要立即用,但未来做新产品时直接拿来用,不用重新调研。

4.1 当前手机 APP 架构

两个 APP 分立

APP 形态 当前技术栈 维护人
洛天依 APP(独立) 单 IP 独立产品3D 形象 Unity(与罐子同一份工程) 彭铭聪
小型硬件统一 APP 多产品入口,承载 ESP32-S3 等小硬件 原生Flutter / 待定) TBD

为什么分立

  • 洛天依是单一 IP 产品沉浸式体验Unity 重资产合理
  • 小型硬件整合成一个 APP 是为了统一流量入口和用户管理,调性轻快,不适合塞 Unity 这种重容器

4.2 小型硬件统一 APP 的渲染方案

按硬件对应的形象类型APP 内嵌不同渲染层:

[小型硬件统一 APPFlutter 推荐)]
  ├─ 用户中心 / 流量入口 / 统一登录
  ├─ 设备管理 / 配网 / 固件升级
  ├─ 多产品入口(卡皮巴拉、桌面机器人...
  └─ 形象渲染层(按设备角色卡热加载)
       ├─ Cubism Native如果设备角色是 Live2D
       ├─ WebView + three.js + three-vrm如果是 VRM 3D 形象)
       └─ SpriteRenderer如果是序列帧形象与 ESP32-S3 资产一致)
  └─ 火山 RTC Flutter SDK已有

关键决策:小型硬件 APP 不用 Unity——理由:

  • APP 体积要小,启动要快(用户用完即走的轻量场景)
  • 形象层多样化,要能热切换不同渲染方案
  • Unity 编出的 APP 包大、启动慢,跟"流量入口 + 用户管理"调性不符

4.3 洛天依 APP 的演进

当前 Unity 工程在跑,下一步同步加 AI 驱动事件层(与罐子代码尽量复用)。

未来可能的演进方向:

  • 短期2026保持 Unity专注 AI 驱动改造
  • 中长期:见第九章「未来技术栈迁移路径」

4.4 Live2D 形态(未来)

如果未来某个产品定位需要 Live2D2D Q 版陪伴角色、复古二次元风格):

  • 渲染Cubism Native SDK Android Java / iOS Objective-C++
  • 嘴型驱动:字时间戳 → ParamMouthOpenY / ParamMouthForm
  • 资产生产:外包 Live2D 师5k-3w/形象2 头身偏便宜)
  • 商用授权:见第六章

4.5 3D / VRM 路径(未来虚拟明星 / 写实数字人)

适用场景:未来立项的独立 IP 产品(如 CYBER STAR 虚拟艺人)、批量生产的标准化 3D 形象、jalab.ai 网页端展示。不替代罐子/洛天依 APP 现有 Unity 路径。

如果未来要做:

  • 全身 / 360°视角的形象
  • 多角色复用VRoid Studio 出 VRMpixiv 标准)
  • 跨产品形象互通

三条集成路径

路径 出活速度 性能 推荐场景
A. WebView + three.js + three-vrm 1-2 周) 手机 60fps 默认起步,可嵌入小型硬件统一 APP
B. Unity as a Library + UniVRM 4-6 周搭基建) 最好 3D 是核心体验、独立 APP
C. Filamentthermion 2027 年再看

Path A = three-vrm 是 pixiv 官方维护VRM 标准 blend shape / SpringBone / LookAt 全部内置。这条路径与第 4.2 节的小型硬件统一 APP 渲染层兼容——VRM 形象可以通过 WebView 容器嵌进去。

重要澄清

  • 洛天依不需要切到 VRM——Unity 自建模型已经在跑,继续用
  • VRM 是给未来批量生产 3D 形象时用的标准,不是替代当前路径

4.6 序列帧ESP32-S3

ESP32-S3 没有 GLES 跑不了 Live2D / 3D。方案

  • 云端按形象 ID 预渲染 sprite sheetemotion × 4-8 帧 + motion × 多个)
  • 端侧 LVGL 状态机消费 emotion / motion frame
  • 忽略字时间戳精度(用音频包络替代驱动嘴型 3 档:闭/半开/全开)
  • 简化下行带宽

关键简化:火山 RTC ESP32-S3 SDK 已经把信令回调暴露出来——不需要自写 mbedTLS WebSocket Client直接挂回调即可。预估 C 代码量 < 200 行。


五、目标硬件能力参考

项目 CPU GPU NPU 含义
RK3566 4× A55 @2.0GHz Mali-G52 2EE 1 TOPS 跑单 Unity 3D 角色 + 简单 UI 可720p 30fps
RK3568 4× A55 @2.0GHz Mali-G52 2EE同 3566 0.8 TOPS 工业版,外设丰富,渲染等价
RK3588S 4× A76 + 4× A55 Mali-G610 MC4 6 TOPS 1080p 60fps 轻松,可叠加端侧 ASR/VAD
中端手机 骁龙 6/7 系或天玑 7/8 系 Adreno 6xx / Mali-G68+ >2 TOPS 性能远超需求

命名澄清Rockchip 没有「RK3568S」型号。RK3566 是消费级RK3568 是工业级,两者 GPU 同款Mali-G52 2EE 双核)。


六、Live2D 商用授权评估(未来用得上时再翻)

当前不立即用,但 Live2D 做商业产品需要提前 6 个月走法务流程。储备信息。

Cubism SDK 商用必须签 Publication License Agreement。

6.1 企业规模分级(按年销售额)

分级 年销售门槛(日元) 约合人民币
General User个人 < 1000 万 < 50 万 RMB
Small小企业 < 1000 万 免授权费(部分 AI App 除外)
Middle中企业 1000 万 ~ 1 亿 50 万 ~ 500 万 RMB
Large大企业 ≥ 1 亿 ≥ 500 万 RMB

⚠️ 杰森气元和火山 1000 万 CNY/年 框架已签,按汇率约合 2 亿日元,已达 Large-Scale。需要法务介入正式评估。

6.2 AI / Chatbot 应用Expandable Application 特殊审核

Live2D 官方明确:「使用 Cubism SDK 作为 AI 或 chatbot 接口的内容」需要走 Expandable Application 流程,需要 Live2D Inc. 单独审核批准并签订专属 Publication License。情感陪伴 Agent / 虚拟伴侣类产品不能套用普通 plan

6.3 费用结构参考Running Royalty Plan

  • Large-Scale:初始费 30 万日元/Region月费 10 万日元/平台/RegioniOS / Android / HarmonyOS / Web 各算一个平台)
  • Middle-Scale:初始费 5 万日元/Region月费 2 万日元/平台/Region
  • 显示 Live2D logo + Showcase 列出可享折扣价

建议PoC 阶段不走商用 license先确认技术路径和形象效果。商业化前 6 个月让法务联系 Live2D 中国区代理,按 Expandable Application 流程提交方案。


七、风险与待验证项

修订后剩下的不确定项收敛到很少:

7.1 必须 PoC 验证的(决定算法选型)

SubtitleMode=0 实际下发的时间戳精度

  • 是字级(每个字带 begin_ms / end_ms还是只到句级
  • 时间戳与音频流的实际对齐误差(理想 < 50ms

验证方法(半天工作量):

  1. 服务端启用 SubtitleMode=0 调用 StartVoiceChat
  2. 端侧打印每个 subtitle 消息的完整 JSON
  3. 同时录音频流
  4. 用 Audacity 对比字幕时间戳与音频实际发声时间

结果分支

  • 结果 A字级对齐(最佳)→ 直接驱动嘴型,精度满足 lip sync
  • 结果 B只到句级 → 端侧加音量包络辅助:句级时间戳确定开始/结束,音量包络驱动开合度
  • 结果 C完全不返回时间戳 → 退回纯音量驱动(精度仍够洛天依的 Q 版张合用)

无论哪种结果,整体架构都不变,只是端侧驱动算法层换实现。

7.2 实操中需要彭铭聪 / 业昌 / 文琦决定的

  • 现有 Animator state 能否被 RTC AI 状态事件直接驱动?(需要 review 现有状态机设计)
  • Function Calling 触发预制 motion 的工程实现路径(在 Unity 端怎么 dispatch
  • 第 3.3 节 ICharacterRenderer 接口的具体方法集和签名(这是未来跨引擎可移植性的关键)
  • 全息光仓 shader 在 RK3566 上的实测帧率和热表现

7.3 已被消除的不确定项(不再需要验证)

  • 豆包 TTS 是否独立返回 phoneme 时间戳 → RTC AIGC 把 TTS 包了,我们用 Subtitle
  • 自建 WebSocket 协议设计 → 不需要,复用 RTC 信令
  • 端侧自管理连接、心跳、重连 → RTC SDK 已处理
  • phoneme 编码 → IPA 映射表 → Subtitle 直接出可读文本

7.4 长期风险

  • Live2D Expandable Application 审核结果不确定(未来用 Live2D 时再面对)
  • Live2D license 费用对中型企业较高(同上)
  • Open-LLM-VTuber license 变更(如果未来参考其架构需要注意 v1.2 之前是 MIT
  • Unity 中国长期不确定性(详见第九章)——这是 1-3 年维度的战略风险,当下通过分层架构防御

八、P0 行动清单

8.1 本周启动5 月 12 日 ~ 5 月 16 日)

# 任务 负责人 工时 交付
P0-1 服务端 RTC AIGC 启用 SubtitleConfigSubtitleMode=0 罐子组 / 业昌 0.5 天 StartVoiceChat 配置就绪
P0-2 Unity 端打印 subtitle 消息 JSON验证时间戳精度 罐子组 0.5 天 时间戳精度报告5 测试句对齐误差)
P0-3 Unity 端 TimelineConsumer + BlendShape 嘴型驱动 demo 彭铭聪 1-2 天 罐子上洛天依 AI 对话时嘴型自动同步
P0-4 Unity 端 RTC AI 状态事件 → Animator state 桥接 彭铭聪 1 天 listening/thinking/speaking 自动切动作

总工时3-4 人天,本周内可全部完成。

P0 完成后的可见效果:罐子上现有洛天依 3D 模型AI 对话时嘴型自动驱动 + 状态自动切动作,无需任何手 K 嘴型/动作衔接。这就是从"美术资产成本无限堆高"切换到"AI 驱动"的关键拐点。

8.2 P1 - 2 周内

  • 情绪事件接入RTC AIGC 情绪信号 → Animator BlendTreehappy/sad/surprised...
  • Function Calling 触发预设 motion定义第一批工具挥手、点头、托腮、唱歌起手
  • 洛天依 APP 同步获得 AI 驱动能力(与罐子是同一份 Unity 工程,自动获益)
  • 全息光仓适配在 RK3566 / RK3588S 上量化帧率

8.3 P2 - 1 个月内

  • 端侧 SDK 抽象把事件消费层封装成可复用模块Unity Package / 各端 lib
  • 形象资产规范motion 命名 / expression 集合 / BlendShape 标准化(为未来批量产形象做准备)
  • ESP32-S3 sprite sheet 云端预渲染管线设计

8.4 未来项(按需启动)

  • Live2D 商用授权流程启动(决定要做 Live2D 产品时提前 6 个月)
  • VRM 标准接入(决定要批量 3D 形象时)
  • 虚拟明星形象的高精度 viseme 升级CYBER STAR 立项时)
  • 端侧 Whisper + VAD 打断RK3588S 高端方案,提升交互自然度)

九、未来技术栈迁移路径

本章是给彭铭聪等核心开发者的中长期成长方向。Air 与彭铭聪已就此有过深谈:核心开发者要跟着团队成长,不能永远只做 Unity。本章把可能的迁移方向和触发条件写清楚,作为长期参考。

9.1 为什么要考虑迁移

Unity 当下是最优解,但 1-3 年维度有几个不确定项:

  • Unity 中国(团结引擎)独立运营路径不明朗——版本分裂、定价模型、政策影响、海外版功能同步存在变数
  • Unity 商业模式变化历史2023 年的 Runtime Fee 风波说明商业政策可能突变
  • 国产引擎政策导向:信创、国产替代趋势可能影响 ToB 产品选型
  • Web 化与跨端化趋势Three.js / 小程序 3D / 浏览器 WebGPU 在变强,移动端原生不再是唯一答案

我们不需要现在就换,但需要现在就让架构能换

9.2 触发迁移的信号

出现以下任一情况,启动迁移评估:

  1. Unity 中国版收费模式或政策对我们形成实质成本/合规压力
  2. 跨端复用需求超出 Unity 能力边界小程序、Web、HarmonyOS NEXT 等)
  3. 国产化要求ToB 项目、政府采购场景)明确排除海外引擎
  4. 团队增长后多人维护 Unity 工程的协作成本超过迁移成本
  5. 出现某个新形象类型Unity 不是最优解(如 Live2D / VRM 标准 / 复杂 Web 场景)

9.3 候选技术栈对比

候选 适配场景 优势 劣势 切换难度
Cocos Creator 4 主推备选 国产、政策最稳;团队已有 Cocos 能力Avatar Social 在用3D 能力够用 3D 生态不如 Unity 成熟shader / 物理 / 后处理需重写 中(资产可部分复用,逻辑层完全可移植)
Three.js + three-vrm 走 Web / 跨端轻量化 跨平台、Web 化、VRM 标准化、生态活跃 性能不如原生;复杂角色掉帧;需要 WebView 容器 低(如果走 VRM 标准)
Godot 4 完全开源场景 MIT 开源、免费、跨平台 国内生态弱、找开发者难、3D 工具链一般
Unreal Engine 顶级画质场景 顶级 PBR / 物理 / 影视级渲染 包体大、移动端 / 嵌入式不友好;学习曲线陡
自研 + Three.js / Filament 完全可控 100% 自主 投入巨大,不适合现阶段 不考虑

主推备选是 Cocos Creator 4

  • Avatar Social 项目团队已经在用,能力沉淀可复用
  • 国产引擎政策最稳
  • 资产工作流(建模 → 导入 → 动画)和 Unity 接近,迁移学习曲线低
  • 嵌入式(罐子 RK 板)和手机都能跑

Three.js / three-vrm 是另一类备选

  • 不是替代 Unity 做主力,而是补充
  • 跨端 Web 容器 / 小程序 / VRM 标准角色 用它最合适
  • 未来如果做 jalab.ai 网页端虚拟艺人展示,必然走 Three.js

9.4 迁移成本估算(以 Cocos 为例)

按"洛天依完整迁移到 Cocos"测算:

工作量 备注
3D 资产重新导入 + 材质适配 1-2 周 FBX 可直接导入shader 要重写
Animator 状态机重建 1 周 Cocos animation system 不同
全息光仓 shader 重写 1 周 后处理管线不同
业务逻辑层接入 0.5 天 如果做了第 3.3 节的分层,这一步几乎零成本
RTC SDK 适配 0.5 天 火山 RTC Cocos 集成已有
联调与优化 1-2 周 性能调优、bug 修
总计 4-6 周 一个工程师全职

关键洞察业务逻辑层RTC 解析、TimelineConsumer、CharacterStateMachine的迁移成本几乎为零——因为它们是纯 C# 逻辑,不绑 Unity API。前提是第 3.3 节的分层设计严格执行

9.5 给彭铭聪的成长方向

短期2026 年):

  • 把洛天依 Unity 工程做深做透
  • AI 驱动事件层是这一年的核心 milestone
  • 通过分层设计积累"引擎无关"的工程思维

中期2027 年):

  • 学习 Cocos Creator 4参与 Avatar Social 等 Cocos 项目交叉协作
  • 评估某个新产品形态用 Cocos 实现的可能性
  • 主导一次小规模技术栈迁移试点(不动洛天依,从新立项的小产品开始)

长期2-3 年后):

  • 成为"形象渲染层"的技术决策者,能根据产品需求选最合适的引擎
  • 不被 Unity 这一个工具锁死,技能围绕"3D / 实时渲染 / 角色驱动"这个领域而非"Unity 这个引擎"

这是一个工程师从"工具使用者"到"领域专家"的转变路径

9.6 当下要做的事

  1. 架构上做防御:第 3.3 节的分层设计严格执行
  2. 业务逻辑不绑引擎 API:所有渲染调用走 ICharacterRenderer 接口
  3. ⚠️ 不要现在迁移:当前痛点是美术资产成本,不是引擎选型,先做完 P0 AI 驱动改造
  4. ⚠️ 不要在两个引擎间来回切:决定迁移时一次切换到位,不要并行维护两套

附录 A参考项目链接

核心参考(直接对接)

反例(已排除,仅作判断依据)

储备方案参考


附录 B术语速查

  • BlendShape / Morph Target3D 模型的形变权重,控制嘴型 / 表情 / 五官变化
  • Animator / MecanimUnity 的状态机动画系统
  • Viseme视位:发音对应的视觉嘴型,多对一映射音素
  • Subtitle:火山 RTC AIGC 下发的字幕事件,包含字内容和时间戳
  • SubtitleMode:火山 RTC 配置项0 = 对齐音频时间戳端侧渲染用1 = 不对齐(云端数字人用)
  • Function CallingLLM 调用工具/函数的能力,可被业务端解析触发动作
  • CubismLive2D 公司的 SDK 品牌
  • VRM:基于 glTF 的 3D 角色文件标准pixiv 主导
  • 全息光仓LCD 拆背光后的伪全息显示形态,黑像素=透明,亮像素=发光
  • Expandable ApplicationLive2D 官方对 AI/Chatbot 类应用的特殊分类,需单独审核签约