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

246 lines
4.8 KiB
JSON

{
"Version": 3,
"FileReferences": {
"Moc": "Haru.moc3",
"Textures": [
"Haru.2048/texture_00.png",
"Haru.2048/texture_01.png"
],
"Physics": "Haru.physics3.json",
"Pose": "Haru.pose3.json",
"DisplayInfo": "Haru.cdi3.json",
"Expressions": [
{
"Name": "F01",
"File": "expressions/F01.exp3.json"
},
{
"Name": "F02",
"File": "expressions/F02.exp3.json"
},
{
"Name": "F03",
"File": "expressions/F03.exp3.json"
},
{
"Name": "F04",
"File": "expressions/F04.exp3.json"
},
{
"Name": "F05",
"File": "expressions/F05.exp3.json"
},
{
"Name": "F06",
"File": "expressions/F06.exp3.json"
},
{
"Name": "F07",
"File": "expressions/F07.exp3.json"
},
{
"Name": "F08",
"File": "expressions/F08.exp3.json"
}
],
"Motions": {
"Idle": [
{
"File": "motions/haru_g_idle.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m15.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
}
],
"TapBody": [
{
"File": "motions/haru_g_m26.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3,
"Sound": "sounds/haru_talk_13.wav"
},
{
"File": "motions/haru_g_m06.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3,
"Sound": "sounds/haru_Info_14.wav"
},
{
"File": "motions/haru_g_m20.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3,
"Sound": "sounds/haru_normal_6.wav"
},
{
"File": "motions/haru_g_m09.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
}
],
"Dance": [
{
"File": "motions/haru_g_m01.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m02.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m03.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m04.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m05.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m06.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m07.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m08.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m09.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m10.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m11.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m12.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m13.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m14.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m15.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m16.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m17.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m18.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m19.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m20.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m21.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m22.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m23.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m24.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m25.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
},
{
"File": "motions/haru_g_m26.motion3.json",
"FadeInTime": 0.3,
"FadeOutTime": 0.3
}
]
},
"UserData": "Haru.userdata3.json"
},
"Groups": [
{
"Target": "Parameter",
"Name": "EyeBlink",
"Ids": [
"ParamEyeLOpen",
"ParamEyeROpen"
]
},
{
"Target": "Parameter",
"Name": "LipSync",
"Ids": [
"ParamMouthOpenY"
]
}
],
"HitAreas": [
{
"Id": "HitArea",
"Name": "Head"
},
{
"Id": "HitArea2",
"Name": "Body"
}
]
}