feat: 3D 化身服务端预渲染(Node 渲染器 + 帧轮播 + 降级)

- Node 渲染器(three r162 + headless-gl + pngjs):gen-templates 程序化生成简化人体 GLB(6 脸 × 6 体 × 5 肤色),render.js 绕 Y 轴 36 帧 256x512 白底渲染
- agent/render.go:RenderAvatarFrames 帧目录缓存复用 + GLB 缺失自动生成 + 15 分钟超时;render.enabled/node_bin 配置,node_bin 路径缺失回退 PATH
- Build 异步化:写库 processing → goroutine 渲染 → done+frames_url / failed+error(客户端降级静态占位);修 BodyMeasurement 无记录时 Build 报错
- avatar_model 容错 ALTER 加 frames_url 列;AvatarGetRes 透传 frames_url
- TDD:renderJob 状态机测试(成功 done / 失败 failed 降级)
- 客户端 avatar_viewer 帧轮播(120ms × 36 帧,errorBuilder 降级占位),avatar_provider 解析 frames_url
- Dockerfile 双阶段:node:20-alpine 编译 gl 原生模块 + 运行时带 nodejs/libglvnd
This commit is contained in:
2026-07-31 15:37:02 +08:00
parent 775995f3e8
commit fd13efb9c0
14 changed files with 1249 additions and 33 deletions
+12
View File
@@ -0,0 +1,12 @@
{
"name": "avatar-render",
"version": "1.0.0",
"private": true,
"description": "服务端 3D 化身预渲染:GLB -> 36 帧旋转 PNGthree.js + headless-gl + pngjs",
"type": "module",
"dependencies": {
"gl": "^9.0.0-rc.10",
"pngjs": "^7.0.0",
"three": "0.162.0"
}
}