# 动态功能对照与逐画定制验收合同

日期：2026-10-23。基线：本地 V0.2 `experience.js`、`motion-core.mjs` 与 `QA.md`；上游比较对象固定为 `xianxie6/qingming-riverside@c575d242194fddafe33ec70dd01b860a75f09686`。这是功能合同，不是“全部已复刻”的声明。后续实现必须逐项补充实际证据，不以本文件的计划文字替代验收。

## V0.4 当前状态

用户拒绝V0.3的自然度，故改为：平面几何不变、角色核心逆向刚体采样与外围羽化、同源缓起/驻留/缓回动作、默认固定相机和全幅适配。移除首页窟门、灯具、反射和重复画片；保留手动特写、导览、昼夜滤色和可选粒子。音乐改为原创84秒稀疏禅意乐段与6.5秒混响，默认静音、可调音量。首页100dvh，设置折叠，保留无限画布同款合作洽谈组件。

19项Node检查、十图真实GPU链接、约19秒固定机位动作采样、暂停像素一致、实际音频输出和多视口几何已验证；不等于物理手机、音乐学、用户视觉验收或腾讯云上线。公开Git只同步白名单源码/权利记录，不附原始壁画扫描、展示副本、本地证据、部署资料或记忆。当前视觉取舍与验收边界详见NATURAL_DESIGN.md、README.md、COPYRIGHT.md。

## V0.3 历史实装（已被用户拒绝自然度，下面不是当前效果）

|能力|本轮已接线/验证|仍缺少|
|---|---|---|
|人物局部|6幅8个局部枢轴/柔权重网格；琵琶头颈、躯干、前臂；固定相机60帧实录中头颈ROI实际变化|alpha人物层、补底、手指拨弦、腿部IK、独立角色行走/复杂遮挡；不等同上游完整人物系统|
|图像定制|10个profile、35个局部材质区、保护区、六类材质运动、不同节奏和导览；十幅实际active且GPU链接成功|十个kind不等于十套独立渲染算法；4幅复杂群像仍不动人物；专家逐像素保护验收未做|
|入窟与镜头|构件按统一时钟错峰装配、推进；长卷停点、拖拽、热点、人物特写|没有可行走街市/洞窟测绘/自由漫游；热点不构成完整剧情因果系统|
|环境/层次|云水、背光、披帛/帷幔、小幅羽化图像层视差；昼夜滤色+灯具；原作全部关闭|非语义抠图遮挡；昼夜不是上游逐窗灯图层；没有四季新画片、雨伞和湿地系统|
|音境/可控|默认静音；手势后AudioContext running；主动关闭；暂停、原作时冻结渲染时钟，暂停两截图逐像素相同|合成音不是上游空间声景，也不是历史乐曲；没有听感/音乐学验收|
|质量/生命周期|390px实测无横溢出、22k预算；十次顺序换图纹理回到3/几何5–9；慢帧反馈降DPR已实现|慢帧强制分支、减少动态、失败/弱网分支、长期热负载、多轮回收与物理手机未测|
|入口/发布|HTTP200；file入口告知与启动脚本已编写；原图完整性重验|file浏览器分支被自动化安全策略禁止，未绕过/未实测；腾讯上传/443证书依旧未完成|

证据：[QA](QA.md)、[V0.3诊断](evidence/v03/checks.json)、[固定相机人物实录](evidence/v03/pipa-live.gif)、[十画截图](evidence/v03/ten-scenes.jpg)。它们只验证本地独立实现，不证明上游已运行、完全复刻或公网已上线。

## 1. 三态和权利边界

- **V0.2 实际有**：基线代码已接线。运行证据只限 `QA.md` 已记载的本机浏览器检查；代码存在不代表所有设备/分支均已验证。
- **V0.3 计划中**：本轮独立重建目标，尚不能宣称完成。即使后续文件已经新增，也需代码接线和真实浏览器验收后才能变更状态。
- **未复刻**：本轮没有交付承诺或缺少必要素材/后端/权利依据。保留差距，不用近似效果冒充。

上游根 LICENSE 未授予一般复制、修改、再分发或商用许可。这里提取的是功能与抽象机制；敦煌版必须独立编写业务代码，不搬运上游插画、人物切片、音频、坐标数据或发布脚本。Three.js MIT 许可仅适用于对应第三方组件。壁画文件的逐文件来源和许可主张见资源清单，不代表敦煌研究院官方授权。

独立实现同类机制不等于像素完全一致、人物数量一致或故事系统完全复刻。当前十幅资源都是完整不透明画片，没有经过核验的独立 alpha 人物层、关节/手指锚点、修补底板和前景遮挡层。因此不得宣称“原画每个人都能独立行走/弹奏/鞠躬”“三维骨骼复原”或“完整数字敦煌”。应标注 **2.5D 动态艺术演绎，非文物三维复原**。

## 2. 上游 → 敦煌能力合同

证据出处：`research/visual-deep-audit.md` 和 `research/systems-deep-audit.md`。上游均为固定源码静态解读，未在本轮执行，不能作为其线上表现正常的证据。上游过场水 Shader 还存在静态签名/依赖不自洽风险，不能原样继承。

| 能力及上游机制 | V0.2 实际有 | V0.3 计划中 | 未复刻/不可夸大的边界 | 升格为完成所需验收 |
|---|---|---|---|---|
| 程序几何与分段装配：`crossing-world` 的桥梁真实构件/实例矩阵按顺序到位 | 柱体、拱圈和地面是真实 Three.js 几何，但柱/拱静态，没有构件装配时间轴 | 用敦煌窟门/回廊/藻井语汇做独立构件组，按叙事进度错峰进入 | 未建窟室测绘模型；不照搬虹桥几何和参数 | 0/25/50/75/100%进度下构件位置/姿态与遮挡确实不同；正常速度连续录屏 |
| 镜头旅程：统一进度驱动透视相机、视线和物体；有限鼠标视差 | 自动往返进度、三阶段、手动 range、横向拖拽、左右键；长卷有横向行程；透视相机与反射 | 每画独立 framing、镜头停点、旅行方向与构图；长卷按故事段落停留，肖像保持面部完整 | 非第一人称自由走动；平面画片背面没有真实内容 | 十画分别检查横/竖屏、端点、反向 seek；无露底/拉伸/切头；相机矩阵变化与像素变化对应 |
| 粒子图像：透明人物逐像素采样、浅层深度、聚合/扰动/鼠标排斥 | 全幅采色点云；GPU 聚散/局部排斥；桌面预算52,000、窄屏22,000点；全画共用一套材质逻辑 | 粒子只作为每画定制的一层，不再是所有画面的唯一主效果；按母题选择轨迹、区域和深度分配 | 当前点云是矩形画幅，不是自动人物抠图；Points 也不等同上游低面球 InstancedMesh | 每画诊断记录 ID/点数/主效果；不输入时有可辨识运动；重聚不丢原作；散开可逆 |
| 局部网格/Shader 动作：手工角色层+二维约束网格，手脚稳定 | 全局粒子 Shader 和独立装饰丝带 Shader；未对原画人物做局部网格动作 | 以逐画 ROI/平滑权重把云气、飘带、纹样等可支持区域做局部动作；脸/手/乐器作为保护区 | 无 alpha 层时不许宣称真实手臂弹奏、鹿奔跑、多人步态或骨骼动作；全图 UV 波浪不算逐人动作 | 显示作用区/保护区；播放与关闭对照；保护区不发生橡皮拉伸；检查 ROI 边界断裂和遮罩泄漏 |
| 分层遮挡：建筑/人物/家具/船舷等按真实绘画关系合成 | 原画平面、浅层点云、前景装饰和反射有三维深度关系；无语义级人物/建筑遮挡 | 为有依据的母题增加局部前后景权重/有限视差，保持原作可读 | 没有人工分层、修补底板时，不能把深度曲面称为精确人物遮挡或完整建筑体积 | 视角变化时遮挡不重影；遮罩边缘无洞；原作对照随时可回到完整画片 |
| 热点与叙事：全景热点进入街市；命中、关注、情节因果 | 十画下拉切换、图库资料卡和原图对照；没有画内热点故事 | 为每画配置少量可键盘访问、与可见母题一致的解读热点；可提示当前作用区/镜头停点 | 不照搬141人/320人等人数；无自由行走 NPC/货运/渡船状态机 | 鼠标/触摸/键盘激活同一热点；点击不被拖拽误触；文本、区域与窟号一致 |
| 环境与昼夜：分阶段雨/伞/湿地、手绘窗灯、不同季节完整画片 | 金色尘点、独立丝带、反射；无昼夜或季节系统 | 主题环境作为演绎层：山川云气、矿彩光感或乐舞节奏，而不是给所有画统一下雨；可切换强度 | 无四季新画片，不宣称真实四季复原；不得让雨/雪掩盖原画故事或凭空增加历史内容 | 开关前后均可读；暂停环境时钟也停；原作模式全部关闭；各画环境不相互串台 |
| 加载状态机：预热、并发准备、ready/error屏障、迟到请求隔离、可重试 | 图片 decode→采样→建图；revision 防止迟到画片覆盖；状态文字和失败提示；无分阶段进度 | 分画特效准备与原画解码分离，明确加载/准备/就绪/失败；重试/换画不留半成品 | 没有“3D过场完成后进入可行走街市”的第二场景；不可把下方图库算成街市交接 | 快速连续切画、慢网/404/解码失败测试；最终画片正确；失败可恢复；加载时不出现过时效果 |
| 输入与时间：输入驱动同一进度，环境时钟与旅程状态区分 | 自动、手动 seek、暂停、继续、重播、散聚、拖拽、键盘；暂停时 scene time 和帧计数曾核验稳定 | 十画共用统一时钟但拥有独立节拍，增加热点/强度/环境开关时保持暂停语义 | 暂停不能仅停进度却继续 Shader 动画；不许以按钮标签变化算通过 | 暂停前后各取两帧，除明确 UI 区域外像素稳定；恢复后再变；切画/重播/seek均无时间跳变 |
| 音频：用户手势解锁、声景、事件声、空间声像、昼夜交叉淡入 | 无音频系统 | 若接入，只用独立合成或有核验许可的音源；主动开启、可静音，并与乐舞节拍协调 | 未复刻上游录音/声景；无许可不搬音频，不承诺自动有声 | 浏览器自动播放限制下首次访问保持静音；手动开启后可关闭；暂停/隐藏页策略一致；无后台残音 |
| 自适应：像素/粒子/反射预算、持续慢帧自动降级 | 按屏幕、DPR、硬件核数初始限额；resize裁减 drawRange；显示采样 fps | 慢帧窗口降级并报告原因；每画局部特效和反射按预算裁减 | 没有 V0.2 持续慢帧反馈降级；本机采样60FPS不代表手机60FPS | 真机记录型号、分辨率、DPR、采样时长与热状态；强制弱预算后参数和 draw call 可回读 |
| 无障碍与降级：减少动态、静音、跳过、焦点恢复、隐藏页面隔离 | reduce-motion默认原作并暂停；键盘播放/seek；WebGL失败明确静态；contextlost可显示错误 | 每画主效果提供关闭，热点键盘访问与状态播报；明确恢复或重试路径 | WebGL失败时不能把静态图叫动态成功；当前减少动态/丢失分支不等于已实测 | 模拟和实际相关分支分别标注；键盘完整走通；减少动态无自动动画；焦点清晰 |
| 生命周期：取消RAF、清监听、资源销毁、异步迟到释放 | AbortController、观察器、RAF、几何/材质/纹理/反射RT释放；页面隐藏/舞台离屏停止渲染 | 新增每画材质、热点、环境和音频同样纳入清理；切换所有权明确 | 代码有 dispose 不等于资源无泄漏；当前没有十次循环稳定性验收 | 十轮切画、离屏/恢复/退出，记录 canvas数、RAF、renderer.info.memory趋势；无旧画回调覆盖 |
| 访问计数：独立Worker/D1请求计数，不驱动动画 | 未新增追踪/后台 | 无默认统计计划；若用户明确要求再单独设计最小化访问计数 | 未复刻 Worker/D1；不可把请求计数称 UV/独立访客或用户行为分析 | 另行授权、隐私说明、失败不影响动画；localhost不发统计；后端接口测试与前端演出分开 |
| 发布与运行入口：上游白名单构建、独立线上静态站 | 本地 HTTP 服务、真实资源清单与来源证据；DNS绑定/443状态另见部署记录 | 仅对当前通过验收的独立实现做发布白名单及 HTTPS 核验 | `file://`直接打开ES模块不是受支持动态入口；DNS正确不等于网站已部署/TLS正确 | HTTP本地入口与最终443域名分别测试；严格证书匹配、资源200/MIME正确、无跨域/模块错误，保留回滚 |

## 3. 十画定制方案：由实际图像决定，不由通用流沙决定

下表是 **V0.3 设计合同，尚未完成**。依据现有十幅联系表和资源描述制定，不声称已经完成精确母题坐标校准。每项实施时仍要在对应原图上复核 ROI；不清晰或没有画出的细节不强行加工。所有画面应保留“原作”模式和原图文件，流沙仅作为可选聚散转场。

| id / 现有资源 | 图像结构与应保护内容 | 适配主效果（独立重建目标） | 可验收的区别；不能冒称的动作 |
|---|---|---|---|
| `deer` / 257窟九色鹿本生 | 极宽单带叙事，人物与树木连续排布；保护鹿、人脸和细线 | 横向故事镜头+沿叙事路径行进的石色光迹；有据的水/云区域局部轻动 | 运动沿长卷发生而不是全幅炸散；鹿未分层前不做“奔跑”承诺 |
| `pipa` / 112窟反弹琵琶·乐舞 | 中央舞者与周围乐队、飘带、乐器密集；保护手部/琴体/面部 | 以舞姿中心为锚的飘带/色带节奏、局部环形脉动；镜头不切掉主舞者 | 节拍和弧形轨迹明显不同于长卷推进；属于乐舞氛围演绎，不是手指真实拨弦 |
| `bodhisattva` / 57窟美人菩萨 | 竖幅近景肖像、头光/冠饰、面部与细密璎珞；原图不足2K | 头光周缘低幅层次光感、慢速绕缘石色颗粒；肖像稳定镜头 | 面部、眼睛、嘴、手不被UV扭动；不造“眨眼/呼吸活人”或AI修复细节 |
| `wutai` / 61窟五台山图 | 山川寺院密布、层层空间，适合阅读路径；原图不足2K | 按山寺分区的有限深度视差、云气缓慢掠过、寺院停点 | 山/寺在小角度镜头中有区分；不生成原图没有的寺院背面或内部 |
| `king` / 275窟毗楞竭梨王本生 | 竖幅红地、中央人物与旁侍、环绕飘带；保护轮廓与面部 | 红地轻弱石色闪烁、沿可见飘带方向的弧线流动、从外圈缓慢靠近 | 动作服从竖幅中央构图，与菩萨静谧光环节奏不同；不凭空增加叙事性肢体动作 |
| `music` / 288窟天宫伎乐 | 现有文件中三龛/主体占显著面积，伎乐在上方狭带；不能按标题误判为满幅乐队特写 | 上沿伎乐带的分段节奏与光点应答，中央主体稳定；镜头可提示上沿局部 | 作用区主要在可见上沿，不让整幅佛像跳舞；没有乐手alpha层不做逐人真实演奏 |
| `tiger` / 428窟萨埵太子本生 | 多层连续叙事与山形分区，不能误标254窟 | 按叙事层带推进的山石深浅、稀疏落叶/风迹或光迹，分段停留 | 多带阅读节奏区别于九色鹿单带；未校准人物前不演“舍身坠落”或虎的独立动作 |
| `sudana` / 428窟须达拏本生 | 多行人物与山形形成重复叙事单元 | 各叙事行相位错开的展开/巡览，淡淡行旅轨迹 | 相位按行区分，不能整张上下摆；角色位置与面部保持，不假称独立NPC行走 |
| `bandits` / 285窟五百强盗成佛 | 极宽叙事带、多事件并置、细节小 | 横向阶段停点、由紧到缓的色迹/尘迹节奏，侧重故事区定位 | 状态可由热点/进度定位不同段；不自动重演暴力/战争或凭空新增人物 |
| `vimalakirti` / 103窟维摩诘经变局部 | 竖幅人物、上方帷幔、坐具和衣纹；保护面部/手与主轮廓 | 上方帷幔区域局部低频拂动、衣纹方向石色流光、缓慢近观 | 帷幔相对主体局部动，主体保持稳定；不宣称人物真实开口辩经或完成骨骼表演 |

最低区分标准：十画必须分别有 profile id、作用区域、运动方向、节奏、镜头规则、受保护区域和说明；至少产生 **长卷叙事、乐舞节奏、肖像光感、山川视差、帷幔轻动** 五类肉眼可辨的机制。仅换颜色、换粒子数量、改按钮名称，不算定制；仅有十条不同参数也不自动代表十种效果已经可见。

## 4. 逐项验收记录模板

每画执行以下记录，结果允许“失败/待验证”，不预填通过：

1. **身份与素材**：画片 ID、窟号、显示图 SHA256、profile ID、原图地址、许可及衍生演绎标签。
2. **独特主动作**：正常速度8–12秒录屏，不做输入也能看到本画特色；与另两幅代表画并排比较，不能全是粒子外飞。
3. **保护与局部性**：同一时刻显示作用区/保护区调试证据；原图人脸/手/器物未因通用波纹产生明显扭曲；边缘无露底。
4. **运行真实性**：实际GPU程序link状态、错误日志、draw call/点数、相机/时间与 profile 回读；录屏中的画面和诊断来自同一版本。
5. **可控性**：暂停两帧差异、恢复、反向seek、重播、原作切换、快速换画、热点键盘路径；原作模式关闭演绎层。
6. **性能与生命周期**：桌面/390px布局分开记录，物理手机另记；十轮切换检查纹理/几何/canvas趋势；不以桌面窄窗口替代真机。
7. **发布**：本地 HTTP 与腾讯云 HTTPS 分开检查。静态 `file://`页面出现，不证明WebGL模块已加载。域名DNS、443监听、证书SAN、首页、模块MIME和图片请求分别核验。

## 5. 当前可据实描述的一句话

V0.2 已有可实测的实时 WebGL 点云、镜头与聚散交互，但十画仍共用效果；上游的角色分层动作、街市行为、天气昼夜和后端等尚未逐项复刻。V0.3 目标是根据每幅真实图像建立可验收的独立效果，而不是把“十张可切换的图”包装成“完整原项目”。
