# 审美准则(判例式) 来源:多支宣传片实战返工的判例沉淀(成片模板见 `template/`)。 **使用方式**: - 每条 = 规则(一句可执行的话)+ 判例(用户原话 / 返工经过)+ 自检问题,三要素缺一不可。 - pipeline.md 阶段 7 验收时**逐条过一遍**,输出自检报告,格式:`编号 ✓` 或 `编号 ✗(位置)`(位置 = 镜头名/帧号)。 - 准则可以有意识违反(风格需要时),但每次违反必须写进该项目的说明文档(写明违反了哪条、为什么)。 - 编号体系:R(节奏) / Q(质感·运镜·构图) / S(声音) / C(文案) / P(流程),编号一经发布不重排,新增条目只追加。 ## 目录 - 节奏(R) - 质感、运镜与构图(Q) - 声音(S) - 文案(C) - 流程(P) --- ## 节奏(R) ### R1. 关键信息落定后必须呼吸,品牌字标 hold 满 1 秒 规则:承载信息的元素(字卡/数字/网格全貌)落定后静止 ≥1s 再切镜;呼吸感停顿优先给品牌记忆点(wordmark 落定时刻),不给普通内容卡片。 判例:用户:"第一个标题打出来之后停留一秒"、"不是第一个字卡,我说的是开头和结尾的AI field lab出现的动画,出现后延长停留1秒"。先停错了对象、revert 后重做,定案为开头结尾两处 wordmark 各 hold 满 1 秒。 自检:每个"想让观众记住的画面"是否有完整静止时刻?停顿给的是品牌/关键信息,还是随手给了普通元素? ### R2. 速度感来自加速度,不是匀速快;群体运动挂物理隐喻,收尾留 0.5s 停顿 规则:飞入/滚动一律非线性缓动 + 非均匀错峰,匀速运动读作廉价 PPT;大量同类元素入场用"越来越快"的硬加速节拍,最好绑一个物理隐喻(如牌堆发牌),满板后静止 0.5s 再切下一拍。 判例:用户:"卡片不断往下堆叠时,应该越来越快,scroll的速度也越来越快,并在最后停顿0.5秒"、"最后速度也不够快……卡片自动按顺序飞向自己的位置,归位越来越快"。先做成加速 scroll + 0.5s 停顿,再改成发牌式硬加速——抽象 flood 五轮不收敛、换成发牌隐喻一轮通过。 自检:有没有任何元素在做匀速直线运动?批量入场是否越来越快、末尾有无静止呼吸? ### R3. 节奏宁慢勿快:初版默认放慢一档,主体动作弧 ≥3s,交互演示按真人操作速度 规则:开场主体动作(聚焦→悬浮→归位一条完整弧线)至少 3 秒;模拟真实交互(打字、筛选、点击)按人真实操作的速度走,观众要能跟着做一遍;排时间线时预留 hold/rest 帧预算——第一版几乎总是偏快。 判例:全片六次独立反馈全部指向"放慢/停留",从未有一次"太慢了"的反向反馈。用户:"第一个镜头还是太快了,放慢到3秒"、"进入搜索框打字,然后筛选出卡片的过程太快了,放慢一些"。开场几经放慢到 3s macro opening,交互段落改成不慌不忙的 type-and-filter。 自检:把每个镜头当第一次看:哪里没看清?交互段落自己能不能跟着操作一遍? --- ## 质感·运镜·构图(Q) ### Q1. 复刻既有页面必须真实截图;手搓 UI 限非复刻场景且质量/表达达标;数据按风险口径处理 规则:凡是表现产品既有页面的镜头,第一步就用无头浏览器截真实页面(整页纹理 + 元素级抠图 + 坐标 json),不手搓仿真贴图复刻;非复刻场景(抽象开场/品牌段/页面上不存在的独立展示组件)允许手搓 UI,但质量(出版级质感,对照 Q10 标准)与表达明确性(观众一眼看懂它是什么)是硬门槛,达不到回截图路线。公开演示数据只有在产品简报明确确认后可保留;客户、个人、内部、密钥、实时或其他敏感内容必须先虚构、脱敏或冻结。对手搓素材同样适用该口径。 判例:用户:"我希望的是用真实的页面,然后加入动画"、"不要用真实数据,造一份fake的,不要提到客户名字"。改用真实 dashboard 页面重建,此前一下午手搓纹理复刻版整体作废。修订(2026-07-13 用户裁决):"不一定都要来自真实页面截图,可以手搓UI组件,只是要保证质量和表达的明确性"——判例约束收窄为"不用手搓复刻既有页面"。 自检:每块 UI 素材:它在复刻既有页面吗?是则必须来自截图;手搓件的质感和表达能过 Q10 级审视吗?源数据是否符合已确认的数据口径,且不含未授权的客户、个人、内部或密钥信息? ### Q2. 3D 透视下 UI 纹理按原生尺寸 rasterize 后缩小使用;文字发糊先查纹理分辨率链路 规则:3D 场景里的 UI 纹理按显示尺寸的 2–4 倍原生栅格化、在 3D 里向下采样(放大走布局级 CSS zoom 而非 transform scale);文字模糊先查栅格化路径,别先动相机/DoF。 判例:用户三轮追打:"明显卡片变得模糊了"、"还是不够高清……有像素点的方块"、"第一个镜头的文字清晰度还是没有解决"。先调 DoF 治标无效,改成按原生尺寸 rasterize 拿到真正 4x 锐度,最后把 CSS zoom 推广到全部 3D 页面层根治。 自检:放大/透视镜头逐帧截图看文字边缘:有没有像素方块?纹理源分辨率是否 ≥ 显示尺寸 2 倍? 技法展开(原 hires-rasterize-3d-text 技法卡沉淀于此,参考实现 template/src/aifl/live/PageCam.tsx): - **根因**:Chromium 对 3D 合成层按 1920 布局宽栅格化再 GPU 放大——内容先降采样后放大必糊,与相机/景深参数无关。 - **解法**:放大量不走 `transform: scale(zoom)` 而走 CSS `zoom` 属性(布局级缩放),让 Chromium 按放大后的设备尺寸栅格化,从高清源向下采样。坐标要按 `Tx = 960/zoom − cx` 换算保持与平面模式取景一致(PageCam.tsx:100-114 有完整推导),漏换算会跑焦点。 - **配套**:全页 2x(deviceScaleFactor: 2)、hero 元素单独 4x 元素级截图,推进期 6f 交叉淡入盖住低倍页面纹理(淡入太长会看到两层错位)。 - **排查顺序**:文字糊 → 先查纹理源分辨率链路(截图倍率→栅格化路径→缩放方式),最后才考虑相机。DoF 只做氛围,永远不是清晰度的解法(实证无效)。验证用逐帧截图裁剪放大看字边缘,肉眼看缩略图发现不了。 ### Q3. 镜头要稳:产品宣传片默认不加手持抖动 规则:亮场 UI 宣传片禁用 handheld shake;相机噪声只在暗场氛围片明确追求纪实感时用极小值,且必须自查渲染帧确认无意外抖动。 判例:用户:"镜头视角很差,而且有小抖动不知道怎么回事"。去掉 handheld shake、重新构图后抖动零投诉;另一支暗场氛围片保留 shake=0.02 未被投诉——适用边界由此划定(推测边界)。 自检:逐镜头看渲染帧:有没有任何非叙事意图的相机抖动? ### Q4. 高光/扫光特效宁缺毋滥:不群发,一个镜头最多给主角一次,且必须裁进圆角边界 规则:glint/泛光划过类特效不做群发——批量元素入场靠运动本身而非逐个发光;保留的光效必须被承载元素的 border-radius/overflow 裁剪,光溢出圆角是廉价感的典型来源。光效类技术路径本身不封杀:单点、给主角、实现质量过硬的 sheen/泛光可以做,做完对着渲染帧自问"好看吗"再交。 判例:用户两次否决:"不需要每个卡片都闪烁一下"、"卡片出现时的泛光划过的特效取消,不好看"。据此去掉逐卡 glint、撤掉泛光划过、把 chip 高光扫光裁进圆角边界内。澄清(2026-07-13 用户):否决针对的是"实现的版本不好看","不代表这个技术路径/特效类型就不可行"——群发禁令与圆角裁剪不变,但泛光/扫光类手法可以带着更高实现标准重试。 自检:数一数全片 glint/sweep 出现次数:有没有超过"主角元素一次"?每处光效是否被圆角裁剪?留下的每处光效,正常速度回放自己看过并觉得好看吗? ### Q5. 开场只给一个主角:单主体 + 完整动作弧,胜过群体群舞 规则:开场信息宁少而聚焦——一个主角元素、一条完整弧线(聚光→推近→悬浮→描边光→归位),多元素并舞撑不起第一印象。 判例:用户:"第一个镜头,只需要聚焦在一张卡片,并让它更有质感"。开场一夜推倒六次,单卡结构定型后直到成片未再动结构。 自检:开场镜头有几个"想让观众看"的东西?主角的动作弧是否完整(起-承-落)? ### Q6. 机位服务可读性:信息密集镜头正视,文字特写侧向水平,风格化倾斜逐镜头验证 规则:风格化机位按镜头逐个决定——叙事/情绪镜头可倾斜,列表/堆叠等信息密集镜头保持正视;含文字的卡片特写用侧向水平机位,避免大角度仰拍/俯拍破坏文字可读性;禁止全局一刀切套用某种机位风格。 判例:全片统一倾斜化被用户否决"做的并不好……对于内容列表页(模板片中为论文列表)的改动也不好,回滚",随即单独把列表页 revert 回正视;用户:"聚焦到一个卡片……是从左侧拍摄而不是从下方",改为左侧 hero 机位。 自检:每个倾斜机位镜头:斜的理由是什么?画面里的文字在这个角度还读得清吗? ### Q7. 物件特写四件套:侧面倾斜角 + 可感知高度 + orbit 环绕 + 反差深色材质背景 规则:物件/资产特写镜头做足环境戏——侧面倾斜机位、堆叠出可感知的体积高度、镜头绕主体环绕,背景用与主场景反差的深色材质(如拉丝金属),再用拉远同步过渡回主场景。 判例:用户:"镜头应该是倾斜从侧面拍摄,堆叠的项目应该有一定的高度,然后镜头围着堆叠做旋转。真个场景应该是暗色的金属质感背景。然后在镜头拉远,同时出现dashboard背景"。从 pile 特写 orbit 初版做到定稿——暗色拉丝金属背景 + 更高的堆叠 + 环绕运镜。 自检:特写镜头的主体有没有体积感和环境反差?相机是死机位还是有环绕/拉远? ### Q8. 结尾做成"发布会合影":全片元素四方飞入围住字标,能量推到全片峰值 规则:多功能产品的收尾用"全家福"结构——每个已展示过的功能抽一个代表元素多方向飞入定格;规格匹配全片能量峰值(crane 运镜 + 舞台光 + 粒子),初版收尾几乎总是偏保守,默认加码一档。 判例:用户:"各个页面的核心元素从不同方向飞来……形成一个类似于合影的画面"、"加一些更多的特效、动画、运镜……像一个产品发布"。从合影式组装做到发布会级别——crane 运镜、舞台光、金粉。 自检:结尾是不是全片能量最高点?合影里是否每个已展示的功能都有代表元素? ### Q9. 飞入动画的终点必须是页面布局里的真实槽位,元素不悬浮在页面上方 规则:元素飞入后要"嵌入"页面(归位到真实格位、扩展滚动流),不落地悬浮其上会显得假。 判例:用户:"研究问题的list应该从空中飞入,嵌入dashboard"、"不要让10张项目卡悬浮其上,而是接着往下scroll,然后排到下面去,不要重叠"。据此让行元素飞入并嵌入布局、把网格改成随滚动延展(近整文件重写)。 自检:每个飞入元素落定后,它在页面布局里有真实坐标吗?有没有元素永久浮在页面之上? ### Q10. 文档类镜头的 mock 内容要出版级:原生排版、文字铺满、完整版式入镜 规则:观众会读清屏幕上每个字——文档/报告类镜头的 mock 必须用产品原生排版灌满真实密度的假内容,侧栏/评论栏等版式元素完整入镜;"贴图+标语"级别的假文档整镜头返工。 判例:用户:"周报内容的文字要用和现在排版和风格一致的,只是内容mock,文字内容铺满,且要完整展示左边栏和右边评论栏"(模板片中该镜头为周报页)。初版"贴图+标语"级假文档被整镜头重做,最终版为原生排版全量 mock、双栏完整入镜。 自检:暂停在文档镜头任意一帧:内容读起来像真的吗?版式(侧栏/评论/页眉)完整吗? ### Q11. 要被读的文字有最低有效字高:字幕 ≥5% 帧高,辅助文字 ≥3%;按最终像素量,不按 fontSize 规则:1080p 成片按手机/内嵌小窗播放校准可读性——镜头叙事字幕**有效字高 ≥56px(≥5.2% 帧高,推荐 60px 档)**,副标题/统计/URL 等辅助文字 ≥32px(≥3%);有效字高 = fontSize × 全部祖先 scale × 透视压缩(3D 镜头按 `cos(rotY)` 估算),验收量渲染帧上的实际像素,不看代码里的 fontSize。文字只有两态:**"纹理"**(截图 cutout 里的装饰小字,必须明显虚化/降亮度让观众不去读)或 **"要读"**(达标字号 + 足够对比度,压过浅色背景时配 scrim/投影),不存在"重排了但仍读不清"的中间态——读不到的文字宁可删掉。收尾 URL/行动号召是全片最不该小的一行。 判例:用户(2026-07-25):"里面有几个镜头,你可以发现它配的字很小……现在那些镜头里面的字太小了,根本就看不见"。审查 gallery 介绍片:S1/S2/S4 字幕 38–40px(约 3.5% 帧高)、S6 副句 30px、收尾 URL 25px 全部低于线,其中 S2 面板"为可读性重排"的副标题只给了 19px——重排却没达标即中间态反例;六处统一提到 60/40/34px 档后整改通过。 自检:抽每个含字幕的镜头一帧缩到 480px 宽(模拟手机小窗):每句还读得清吗?逐帧量"要读"文字的实际像素高:字幕 ≥56px、辅助 ≥32px 吗?有没有哪块文字处于"想让人读但读不清"的中间态? --- ## 声音(S) ### S1. 配乐与音效按"片种"选,不按"事件"选:强鼓点电子底 + 电影系 SFX 词汇,禁游戏音包音色(禁音色不禁动作) 规则:产品宣传片 SFX 词汇表 = whoosh(运镜)/impact(落地)/riser(铺垫)/sparkle(光效)/transition(转场),禁用游戏音包音色;BGM 选强鼓点、强节奏的电子底(tech-house 类),候选曲必须垫进成片试听——单听曲子无法判断气质。 判例:用户:"这个配乐和音效都太像游戏了。你帮我找那种鼓点强的,节奏感强的,然后音效要那种典型的产品宣传视频的音效"。用 Mixkit tech-house + whoosh/impact/riser/sparkle 整批替换掉此前引入的全部 Kenney CC0 游戏音;BGM 34 分钟内三易其稿后定稿沿用。 **禁的是音色,不是动作**(易误读,务必分清):本条否掉的是"合成器 pluck/bloop、卡通弹跳、game-over 音阶"这类游戏音包**质感**,不是"不许给点击配声"。画面里真有点击/开关/碎裂,就该配它的拟音——那是 S4 的要求。判别问句:这个音像**真实世界里那个物件发出的声音**(快门、机械开关、玻璃、纸),还是像**游戏引擎里的反馈提示音**?前者用,后者弃。 - 模板片自己就用 `click-camera.mp3` 且给了全片最高 SFX 响度 0.6——真实快门声,不是 UI 提示音。 - **`sfx/ui/` 不是"整目录放行",恰恰是全库最需要逐个试听的一类**:18 个文件里既有真实物件拟音(`switch-light` `switch-tap` `switch-click-quick`,Mixkit 原名就是 light switch),也有一半以上是合成 UI 反馈音(`ui-confirm-bleep` `ui-confirm-tone` `ui-notify-tech` `ui-success-soft` `ui-tone-quick` `ui-popup-dry` `ui-message-pop` 等,原名 tone/bleep/alert/notification)——**后者正是本条要排除的质感**,除非片子刻意要"系统提示"的叙事。名单与取舍见 sound-design 3.3。 - `sfx/glass/` 是真实碎裂材质音(4 个),不在禁列。 自检:闭眼只听音轨:像产品发布会预告,还是像手机游戏?BGM 是在成片里试听后选定的吗?每个 UI 类音效,是真实物件质感还是游戏反馈提示音? ### S2. SFX 逐拍钉帧管理;连发音效做双样本交替 + 音量阶梯递减 + 间隔加速,不同响度复读 规则:SFX 用"帧号 + 音源 + 音量"的声明式表集中管理,逐条注释对应的画面动作,杜绝凭感觉铺音效;同类元素连发时防机枪感靠三招——双样本交替、沿序列音量阶梯递减(如 0.40→0.25 六级)、间隔跟随动画曲线加速,密到糊成一片时让声音淡出成 swoosh(本仓库实证无 playbackRate 变调,防机枪不靠变调)。 判例:用户:"周报左侧栏的每周出现时可以换个音效,能配合每个周的出现的"(模板片中为周报页)。先立起逐拍钉帧的 SFX 帧号表结构(沿用至成片),再做 pluck 双样本交替、间隔 8→3f 加速,最后把 per-week pop 六连发音量做成 0.40→0.25 阶梯递减。 自检:每条 SFX 是否钉在具体帧号并注释了对应动作?连发段落听起来是"数得出来的节奏"还是机械复读? ### S3. 声音在画面锁定后做;时间线一动,SFX 全表重钉 规则:BGM/SFX 排在画面结构基本锁定之后;任何改变镜头时长/顺序的修改,收尾动作固定包含"全表 SFX 帧号重对"——音画错位是交付前必查项。 判例:用户:"改完这些后重新调整音效位置以匹配新的时间线"。据此按新时间线(总长 1085f)重钉全表 SFX;教训链:首版 SFX 钉完 11 小时后画面大改导致全表重钉,三次重钉中两次纯属画面返工的连带成本。 自检:本轮有没有镜头时长/顺序变化?变了的话 SFX 表逐条重对过了吗? ### S4. 拟音优先于装饰音:画面动作配该动作的真实声音,音频裁到与动作严格等长 规则:画面里发生什么动作就配什么声音(打字画面配键盘声、逐条落入配逐个 pop),泛用 swoosh 盖不住有辨识度的画面动作;长样本按画面段落裁剪(Sequence 截断),时长与动作严格等长。 判例:用户:"周报页面内容出现的时候可以配打字音效"(模板片中为周报页)。据此给文档页揭示配打字机音,keyboard.mp3 按语境裁 24f/44f 两个用途。 操作要点(库里的两份特殊名单,见 sound-design 4.1):**>5s 的长样本(21 个)必须显式给 `durationInFrames`**,漏给会拖过动作结束;带长尾混响的 impact 例外,让尾音自然衰减。**峰值 <-12dB 的轻音素材(7 个)**:`volume` 是乘法系数,给到 1.0 也只是原样播放,仍会被 BGM 盖住——首选换素材或预归一化,必要时给 >1 的增益并以渲染产物验峰。 自检:每个有辨识度的画面动作(打字/点击/落地)有没有自己的拟音?音效有没有拖到动作结束之后还在响?每条音效在成片里真的听得见吗(轻音素材音量够不够)? --- ## 文案(C) ### C1. 文案在画面锁定后按最终镜头重写一遍,纯动画段落也配解说 规则:初稿文案只是占位——画面定稿后对照成片逐镜头重写;纯动画镜头配短解说 caption,不留"哑巴段落"(品牌收尾镜头除外,保持干净)。 判例:用户:"你根据我现在完整的视频内容,重新写文案的词,我感觉现在的和视频画面不是很匹配,再就是在动画的部分是不是也加一些解说?"。据此重写标题文案,并给实拍镜头补上 caption 解说。 自检:逐句对照:每句文案和它所在的画面匹配吗?有没有超过 3 秒的无解说动画段落? ### C2. 标语写"团队 + 产品功能名 + 具体收益",抽象隐喻词一律具体化 规则:标语要具体、带产品功能名(Paper Radar / weekly report),避免抽象隐喻词(board/place 类泛化口号);重要功能出场前加一张引导字卡。 判例:用户逐字改稿:"'All your research, one board' 改成'All team's research, one place to go'…'The morning reading'那句改成'Paper Radar, tailored for your morning reading'";"最后文档页展示前,还应该加个文字画面"(模板片中为周报页)。据此三句逐词替换,并加一张文档页 lead-in 引导字卡。 自检:每句标语里有没有具体的功能名/收益词?有没有只靠隐喻撑着的句子? ### C3. 3D 镜头里的注记文字活在同一 3D 空间:page-space、同透视、斜拍,大字 + 荧光笔 highlight 规则:给 3D 场景中的主体配画内注记时,文字必须进同一 3D 空间(页面坐标系、同一台相机透视、translateZ 悬浮 + 落影),平面叠字与场景脱节;样式用大衬线字 + 马克笔 highlight 关键词。 判例:用户:"字在左侧,大一些醒目一下,有highlight,然后字的视角也是3d悬空,并且斜着拍摄的"(第一版平面字卡被否后重做)。改为把 hero-hover 注记放进 3D——页面坐标系斜视、马克笔 highlight。 自检:3D 镜头里的每块文字:它跟着场景相机动吗,还是贴在屏幕玻璃上? --- ## 流程(P) ### P1. 交付前必须自己渲染截帧逐一检查,不把首检交给用户 规则:每轮修改后先自行渲染关键帧截图逐一检查(构图/抖动/文字锐度/穿帮),必要时用像素级工具(裁剪放大/两帧 diff)自证,再交用户。 判例:用户第一次看片即质问:"你自己有截图检查质量吗?镜头视角很差,而且有小抖动不知道怎么回事"。此后管线里长出 crop/diff/measure 自检脚本与 out/qa/ 逐版本静帧归档,双方进入基于帧的评审。 自检:这一版交出去之前,我自己看过哪些帧?关键镜头有没有截图证据? ### P2. 参考素材先逐帧拆解成手法清单,再逐镜头判断适配性,不全局套用 规则:有参考片先抽帧做 motion breakdown(每个动画/转场/特效的实现方式清单)写进 spec,按项目适配性取舍;图片参考描述的是"某一类镜头"的感觉而非全片风格令——落地前逐镜头判断适不适用,改完自查再交。 判例:用户:"从原视频里截取尽可能多的帧……加以复现然后适配到我们的项目,不适合的不用强行适配"——把参考片的 motion breakdown 写进 spec 后连续放行;反例:三张参考图被全局套用为统一倾斜机位,被否"做的并不好……回滚"后逐镜头重做。 自检:参考素材的每个手法有没有"采用/弃用"的显式决定?有没有把一张参考图当成了全片风格令? ### P3. 指代含糊的反馈先确认对象;改错了整 commit 干净 revert,不在错误版本上打补丁 规则:"第一个标题"式模糊反馈先确认所指再动手;落错对象立即整 commit revert 重来;每个改动保持独立 commit 以便干净回滚。 判例:用户:"不是第一个字卡,我说的是开头和结尾的AI field lab出现的动画"。先理解错、hold 了 card1,8 分钟内干净 revert,再对正确对象重做通过。 自检:这条反馈的指代对象我确定吗?当前 commit 粒度出了错能一键回滚吗? ### P4. 先列功能清单逐一对应镜头;一种动画手法全片只当一次主角,重复镜头/信息一律删 规则:开拍前列产品功能清单(dashboard/详情/论文/周报/品牌)逐一映射镜头,核心功能漏拍等于返工;一种手法(飞入/堆叠/翻页)全片只当一次主角;剪辑自查按"这个镜头给了什么新信息"过滤,同一素材/信息全片只出现一次,重复即删。 判例:用户:"其他动画有些同质了。没有充分展示整个网站的特性"、"很不错了,但是没有周报部分的展示?"(模板片中为周报页)——据此补功能镜头;"倒数第二个镜头是重复的项目卡片的镜头,可以去掉了"——据此删掉重复的概览镜头、去重收尾标语。 自检:功能清单每项都有对应镜头吗?有没有两个镜头在用同一种手法当主角、或讲同一件事?