一帧画面是怎么来的

UNIT 13整条管线约 16 分钟 · 核心线

看到一个毛病,先查哪一环?

回头看你给过的反馈,头一句几乎都在问同一件事:「是渲染过程中的问题,还是编码过程中的问题?」C14「你是用光栅还是光追的?……还是说这是材质贴图导致的bug」C20。眼睛早就看出毛病了,卡住的是下一步:它出在哪一环。这一课和后面两课,把前面十二课倒过来用。这一课讲方法:从一个毛病出发,一步步把它逼到某一环里,再写成一句别人拿去就能执行的话;第 14、15 课是九张真实的案例卡,拿这个方法一张张查。

13 · 1凭第一感觉修,猜错一环修半天

《拾光》第一版能走的沙面,窗户两边一排排黑色的细三角,树冠也发黑 C31。

《拾光》游戏画面:主角走在沙面的街上,左边粉色楼房的窗户两侧有一排排黑色的尖三角;画面中间有一行黄色的引擎提示文字。
《拾光》第一版,走在沙面。游戏模式里截的原图(2026-09-28)。左边粉色楼的窗户两边,是一排排黑色的尖三角。
同一张图左上角放大四倍:窗户两边本该是长方形的百叶窗,成了尖尖的黑三角。
同一张图左上角,放大 4 倍。

只看这张图,你的第一反应:毛病出在哪一环?

  1. 灯光相机:影子算错了
  2. 建模:多边形拆成三角形时拆坏了
  3. 材质:贴图画错了
  4. 引擎:游戏里多做或少做了什么

当时的第一判断是「拆三角形拆坏了」:症状里有「三角」两个字,原因里也有,看起来天衣无缝。于是在从 Blender 导出之前自己把模型拆好三角形,再导进虚幻 5(UE5,拾光用的游戏引擎):106 个模型全部重新导出,花了半个多小时。黑三角还在。

真正的原因在引擎,下一节查出来。先记住这堵墙:凭感觉猜,一次只检验一条嫌疑,代价却是一整轮修改;猜错了,除了「不是这个」什么也没学到。症状的名字和原因的名字对得上,往往正是陷阱。

13 · 2排除法:每一步只改一样东西

换个做法:先别修,把嫌疑列出来——灯光、三角化、导出的文件、贴图、引擎;然后找只改一样东西、其余全不动的检查,比较改之前和改之后两种情况。结果只有两种,各划掉一批:

好的检查,不管看到哪种结果都能划掉好几条,而且便宜。

不到两分钟的导览:把黑三角从头查一遍,中间停下来让你猜一次。它会驱动下面的看板,你随时可以接手。

第一步:关掉光照,只看物体本身的颜色。黑三角会怎样?

  1. 消失:它们是影子
  2. 还在:形状本身就坏了
  3. 变成别的颜色

还在。两种情况都有毛病,灯光就不是原因。而且看清了:百叶窗和窗玻璃从长方形变成了尖三角,是形状坏了。代价只是切一个视图模式。剩下的几步,在下面的看板上自己走:每一步先猜,再看。

看板 C-1排除法:墙上的黑三角
来自材料
嫌疑、每一步做了什么、看到了什么、「半个多小时」「106 个模型」「44 个材质」「35 → 82」都来自拾光文章和 C31。
本看板的设定
每一步能划掉哪几条,是按「这一步两边一样的东西不可能是原因」推出来的;除第一步外,每一步的代价只有文章里的说法,没有计时。
它能证明
按不同的顺序查,走的步数不一样;一步好检查能一次划掉好几条。
它不能证明
缺标记为什么会让百叶窗变成尖三角:文章说游戏「退回了一个事先准备好的简化版」,日志原文说的是「改用默认材质」,两者对不上,中间这一步存疑。可以确定的只有:补上标记,三角就没了。

Nanite 是虚幻 5 处理海量三角形的系统(第 10 课),用在它身上的材质要带一个「会被 Nanite 使用」的标记。编辑器(做游戏时用的那个软件界面)会当场替你补上;游戏模式(在编辑器里按「开始」跑起来)和打包版(发给玩家的程序)不补。再看一眼第一张坏帧:画面中间那行黄字就写着「Non-Nanite」。线索从一开始就印在画面上,只是没人把它当证据。读日志、读屏幕上的每一个字,是最便宜的一步,该最先做。

这套做法叫排除法:列嫌疑,每一步只改一个变量,用结果划掉嫌疑,便宜的先做。注意,这是查的规矩;查清楚以后,修可以几样一起改,因为你已经知道每一样为什么要改。

便宜的检查还有一种:先出草稿。《拾光》预告片正式录 4K 之前,先用低分辨率预跑一遍、每个镜头抽 4 帧拼成一张图,一眼扫过去,抓到了相机钻进地底、航拍穿进楼里 C39。可草稿省掉的东西,它就看不见:广州片的动态分镜(最粗的草稿版)没开运动模糊,陈家祠屋脊特写会被拖糊这件事,就藏在草稿里,直到正式档测速才发现 C06。

13 · 3把判断写成一句能执行的话

查到了哪一环,还差最后一步:让别人(AI 也好,专业的人也好)拿去就能改、改完能验。你说过:「40-46秒之间是不是过曝了,一片亮」C23。这句话已经有了时间和症状,但做的人还得猜:哪一环?改到什么程度算好?别的能不能动?一句能执行的话,要有四样:

环节哪一环、哪个设置。说不准就说查到哪一步了。
症状在哪几秒、哪个镜头、画面上哪一块、看到什么。
指标改完怎么判断好了:能看、能量的标准。
约束什么不能动,时间、预算、只重渲哪一段。

改写红魔 v4 的 40–46 秒,背面镜头里机身和背景大片发白,查下来在灯光:背光和红色背景板太亮,摆给金属映的反射卡也被机身映了出来。改成真正的逆光剪影(光从背后打来,机身只剩一圈亮边):改完机身正面不再出现整片死白,只保留那圈亮边,背景仍看得出是红色;只动灯光,不动动画和机位,只重渲 40–46 秒这一段。

当年实际的改法:前光降到 15%,反射卡隐藏,2000 W 的背光设成金属映不出来,背景板亮度降到 0.42 C23。这些数字不用写进指令里:指令给的是目标和边界,怎么调是做的人的事。

反过来,读别人(或 AI)交回来的汇报,也找四样:测的是什么、在什么条件下测的、和什么比、还有什么没验证。缺哪样,就追问哪样。

带走一个问题

《拾光》的预告片里,满街的路人远看一身浅色,像全都穿着白衣服 C51。截图自查的时候谁都没看出来。按这一课的方法:你的嫌疑名单上有哪几条?第一步查什么、为什么它便宜又能划掉最多?写下你会发给 AI 的那句话。

不看上面,写下这一课撞上的几堵墙,再展开对照
  1. 凭第一感觉修 → 一次只检验一条嫌疑,代价是一整轮修改;症状的名字像原因,往往是陷阱。
  2. 列嫌疑,每一步只改一样东西 → 两边一样的都不是原因,一步能划掉好几条;便宜的先做,日志和屏幕上的字最便宜。
  3. 先查、后修 → 查的时候一次只动一样;查清楚了,修可以几样一起改。
  4. 草稿省掉的东西,草稿就看不见 → 低清预演抓机位和穿帮,抓不到只在正式档出现的拖影。
  5. 一句能执行的话 = 环节 + 症状 + 指标 + 约束;给目标和边界,不替做的人拍数字。