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

5.9 KiB
Raw Blame History

自动选择交付与运行时

本文件是媒体格式选择的唯一事实源。选择分为三个正交问题,必须依次处理:

  1. background_owner 决定背景是否烧入媒体。
  2. 参数空间、访问方式和资源预算决定媒体格式。
  3. time_control 决定运行时控制器。

不要用媒体格式推断播放方式,也不要用滚动或分页布局推断 scrub。

1. 背景归属

  • video:背景与主体在同一视频中生成,选择 baked-video,不抠色。
  • page:主体必须透明复用。关键帧直接生成真实 Alpha;需要视频模型时才从透明源合成色键输入,再在 alpha-atlas 与 chroma-video 中预算。

--background-owner 没有默认值。合同未锁定时停止,不得因为参数缺失静默选择透明或色键路线。

2. 执行预算

生成素材前用 Brief 的计划帧数(目标帧率 × 时长)运行一次,帧准备完成后再用实际帧数复核:

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”得到最低单格尺寸,再计算单张图集容量:

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。预算使用探测到的实际 像素尺寸,通过 --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,按新目标重新验收;不得只改预算数值而仍在更大的容器中显示。

后续路由