一、问题(本轮实测)
`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` 挪回原处即可。
5.9 KiB
自动选择交付与运行时
本文件是媒体格式选择的唯一事实源。选择分为三个正交问题,必须依次处理:
background_owner决定背景是否烧入媒体。- 参数空间、访问方式和资源预算决定媒体格式。
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. 固定决策顺序:媒体格式
background_owner=video:选择baked-video。parameter_space=2d:选择alpha-atlas;超预算时降低采样或拆分轴后重新预算。parameter_space=discrete:每个独立状态或转场分别预算,不把无序状态拼成线性视频。- 随机访问且单图集与解码内存均在预算内:选择
alpha-atlas。 - 一维顺序访问且达到视频帧数门槛:选择
chroma-video。 - 一维图集超过纹理或解码内存预算:选择
chroma-video。 - 其余小型透明资源:选择
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,按新目标重新验收;不得只改预算数值而仍在更大的容器中显示。
后续路由
alpha-atlas:读 alpha-atlas.md。chroma-video:读 chroma-video.md。baked-video:读 baked-video.md。- 控制器实现:读 runtime.md。