Files
workbuddy_skills/oil-motion/references/delivery-selection.md
T
admin 237a09a5b0 修:draw-ui / oil-motion 原被当子模块指针收录 ⇒ 改为正常文件入库(两份内容原先对别人是空的)
一、问题(本轮实测)
`draw-ui` 与 `oil-motion` 目录里**各自带一个内嵌 `.git`** ⇒ 上一次提交把它们记成了 **gitlink(子模块指针)**
⇒ 仓库里只存了一个不属于任何远端的 commit id,**别人克隆下来这两份是空的** ✗(`git status` 显示 ` m draw-ui` / ` m oil-motion` = 子模块内容有改动)。

二、处置(可回退)
· 把两处的 `.git` **挪走**(⛔ 不是删除)⇒ `归档/内嵌git-20261008/{draw-ui,oil-motion}.git`;
· `git rm --cached` 掉那两个 gitlink,再 `git add` 两个目录 ⇒ **按正常文件入库**(内容才真的进仓库)。

三、副作用(如实记)
挪走 `.git` 后,这两个技能**不能再原地 `git pull` 取上游更新**(要更新得重新拉一份覆盖);
如需恢复其本地仓库,把 `归档/内嵌git-20261008/` 里的 `.git` 挪回原处即可。
2026-10-08 22:29:52 +08:00

123 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 自动选择交付与运行时
本文件是媒体格式选择的唯一事实源。选择分为三个正交问题,必须依次处理:
1. `background_owner` 决定背景是否烧入媒体。
2. 参数空间、访问方式和资源预算决定媒体格式。
3. `time_control` 决定运行时控制器。
不要用媒体格式推断播放方式,也不要用滚动或分页布局推断 scrub。
## 1. 背景归属
- `video`:背景与主体在同一视频中生成,选择 `baked-video`,不抠色。
- `page`:主体必须透明复用。关键帧直接生成真实 Alpha;需要视频模型时才从透明源合成色键输入,再在 `alpha-atlas` 与 `chroma-video` 中预算。
`--background-owner` 没有默认值。合同未锁定时停止,不得因为参数缺失静默选择透明或色键路线。
## 2. 执行预算
生成素材前用 Brief 的计划帧数(目标帧率 × 时长)运行一次,帧准备完成后再用实际帧数复核:
```bash
python3 "$OIL_MOTION/scripts/motion_budget.py" \
--frames "$FRAME_COUNT" \
--display "$DISPLAY_SIZE" \
--dpr "$TARGET_DPR" \
--driver "$DRIVER" \
--time-control "$TIME_CONTROL" \
--parameter-space "$PARAMETER_SPACE" \
--background-owner "$BACKGROUND_OWNER" \
--report build/motion-budget.json \
--strict \
--json
```
只有 `driver=scroll` 且 `time_control=scrub` 时才额外传 `--scroll-pages`,用于检查滚动采样密度。分段播放按成片帧率验收,不把页面数量换算成 scrub 帧数。
读取以下结果:
- `delivery.selected`:唯一主媒体格式。
- `delivery.reasonCodes`:选择依据。
- `runtime.renderer`:对应渲染器。
- `runtime.controller`:对应时间控制器。
- `failures` 与 `passes`:阻断项。
## 3. 固定决策顺序:媒体格式
1. `background_owner=video`:选择 `baked-video`。
2. `parameter_space=2d`:选择 `alpha-atlas`;超预算时降低采样或拆分轴后重新预算。
3. `parameter_space=discrete`:每个独立状态或转场分别预算,不把无序状态拼成线性视频。
4. 随机访问且单图集与解码内存均在预算内:选择 `alpha-atlas`。
5. 一维顺序访问且达到视频帧数门槛:选择 `chroma-video`。
6. 一维图集超过纹理或解码内存预算:选择 `chroma-video`。
7. 其余小型透明资源:选择 `alpha-atlas`。
`background_owner=video` 遇到二维或无序离散参数时,拆成多条独立烘焙片段分别预算;不能压成一条时间轴。
## 纹理上限怎么计算
`--max-texture=4096` 限制的是单张纹理的宽和高,不直接限制帧数。预算必须使用
“最大 CSS 显示尺寸 × 目标 DPR”得到最低单格尺寸,再计算单张图集容量:
```text
columns = floor(max_texture / cell_width)
rows = floor(max_texture / cell_height)
capacity = columns * rows
```
例如 48 帧、最低单格 640×640 px 时,4096 纹理只能容纳 6×6=36 帧,不能做成
一张图集。改成 7×7 时单格最多约 585×585 px;使用 576 px 只有在实际显示尺寸
乘 DPR 不超过 576 时才成立,不能为了塞进一张图而牺牲已确认的清晰度。
同理,16×14 排列能否放进一张图只取决于单格尺寸:宽最多 256 px,高最多约
292 px。帧数很多的图集能放进一张图,靠的是更小的单格,不是绕过了浏览器纹理上限。
当前运行时只接受一张主图集。圆环或一维时间轴超出单图集预算时自动选择
`chroma-video`;真正的二维参数仍需要 `alpha-atlas`,超预算时降低参数采样密度、
拆分独立状态或拆分参数轴后重新预算。不要自行实现未经过预算和预加载验收的多图集切换。
## 4. 控制器选择
控制器只由合同中的 `time_control` 决定:
| `time_control` | `runtime.controller` |
|---|---|
| `scrub` | `frame-scrub` |
| `segment-play` | `segment-playback` |
| `autonomous` | `autonomous-playback` |
`delivery.selected` 可以与任一合理控制器组合。例如视频既可以逐帧 scrub,也可以按片段正常播放;图集也可以按时间自动播放。
## 超预算处理
- `alpha-atlas` 超预算:降低采样密度、拆分独立状态,或在用户已确认的显示范围内重新预算;不得偷降清晰度。
- `chroma-video` 被选中:只保留 QA 帧和静态 Alpha 降级,不再生成大型 Alpha 图集。
- `baked-video` 被选中:不得加入抠色、色键 Shader 或页面背景合成。
- 源素材低于最大 CSS 尺寸乘 DPR:重新生成或调整已确认的显示目标,不从低清网页资产反向放大。
任何调整后都重新运行预算,旧报告失效。
### 母版像素不足时的显示预算
视频的可用分辨率见 [prompting.md](prompting.md#分辨率和时长)。预算使用探测到的实际
像素尺寸,通过 `--source WIDTHxHEIGHT` 传入;不能把分辨率标签或放大后的尺寸当作源尺寸。
同时核对宽高与最终裁切,目标 DPR 不得超过
`min(源宽 / CSS 宽, 源高 / CSS 高)`。
例如只有 `1344×768` 母版、最大显示为 `1280×720` CSS px 时,把原先的高 DPR 目标下调为
`--display 1280x720 --dpr 1.05 --source 1344x768`,所需像素为 `1344×756`,
再按上面的预算命令运行 `--strict` 并重写 `build/motion-budget.json`。若保留 DPR `2`,
则把 16:9 显示目标缩小到最多 `672×378` CSS px。编译资源宽度不得超过母版可用宽度。
降低目标 DPR 是素材清晰度取舍,不改变设备的真实 DPR,也不代表在高 DPR 屏幕上达到
原来的清晰度。将调整同步到合同的 `destination` 与 Brief 的 `quality_target`、
`pixel_dimensions`,按新目标重新验收;不得只改预算数值而仍在更大的容器中显示。
## 后续路由
- `alpha-atlas`:读 [alpha-atlas.md](alpha-atlas.md)。
- `chroma-video`:读 [chroma-video.md](chroma-video.md)。
- `baked-video`:读 [baked-video.md](baked-video.md)。
- 控制器实现:读 [runtime.md](runtime.md)。