UNIT 01画面底子约 23 分钟 · 核心线
一帧画面,到底是什么做的?
手机上两指把一张照片一直放大,放到最后,画面会糊成一片。糊的底下是什么?下面这帧是广州片树库里的那棵古榕,用 Blender 的渲染器 Cycles 算出来的,2400 × 1000。先把放大镜的「01 放大」往右拉一点,再在下面押一个答案,然后放大到底。
把这一帧一直放大,放到不能再大,你会看到什么?
- 更细的东西:叶脉、树皮的纹路,一层层冒出来
- 颜色一直连成一片,只是越来越模糊
- 一格一格的小方块,每一格只有一种颜色
- 一组一组红、绿、蓝的小点
现在 01 能一直拉到头了。放大以后可以拖动画面;点一下任何一格,下面读出它的数。
猜「更细的东西」的,想的是电视剧里那句「放大,再放大,增强」;可文件里就这 240 万格,放大只是把每一格画得更大,不会冒出新东西。猜「越来越模糊」的,看到的是看图软件的做法:它在格子之间猜着插进过渡色,抹匀了——把 03 换成「抹平」就是那个样子。猜「红、绿、蓝小点」的,看的是屏幕本身:屏幕上每一格确实是三个小灯(03 换成「三色小灯」),可文件里一格只有一种颜色。
- 来自材料
- 这一帧:广州片电影级树库里的古榕,Blender 的 Cycles 渲的预览(2400 × 1000,2026-09-26)。PNG 文件里 Blender 自己记着:每一格采样 80 次(在这一格里随机算 80 次光再平均,第 7 课讲),渲了 1 分 40 秒。放大镜里的读数,是这张图文件里原样的数。
- 本实验的设定
- 为了网页载入,图转成了无损 WebP(和原 PNG 逐格比对过,一个数不差);低倍时先用一张缩小一半的预览图,放大到每格 8 个屏幕点以上,才按原始的数一格格画。「三色小灯」是示意,真实屏幕上小灯怎么排,各家不一样。
- 它能证明
- 一帧画面在文件里是一张固定的格子表,每格三个数;放大只会把格子画大。
- 它不能证明
- 别的格式里存的也是这样原样的数。JPG、视频会先把数「近似」一遍再存,放大后看到的方块和杂色,一部分是压缩造成的(第 12 课)。
01 · 1放到最大:一格一格
放到最大,看到的是一格一格的方块。每一格叫一个像素(pixel),一格只有一种颜色。这帧横着 2400 格、竖着 1000 格,一共 240 万格。
再看那根气根。它比一格还细,于是它经过的格子既不是树皮色,也不是天空色,而是两者之间的灰:那一格里一部分是根、一部分是天,只能取一个平均的颜色。整帧的细节,就是这 240 万个平均出来的颜色。所以记住一句:放大一张做好的图,只是把每一格画得更大,不会冒出新的细节。
01 · 2电脑里存的,是一张照片吗?
那电脑里存的,是不是一张缩小了的照片,像胶片那样把光直接留在了上面?把 01 拉到最右边:每一格上印着三个数。
电脑只会存数、算数。每一格在文件里就是三个数:红(R)、绿(G)、蓝(B)各有多亮,从 0 到 255。这帧 240 万格,就是 720 万个数。屏幕拿到这串数,按顺序把每一格的三个小灯点到对应的亮度,你就看到了这棵古榕。
三个小灯的光是叠在一起的,越叠越亮:三个都开满是白,都关掉是黑,三个一样亮是灰。
- 红
255, 0, 0 - 绿
0, 255, 0 - 白 = 三个全满
255, 255, 255 - 灰 = 三个一样
128, 128, 128 - 黑 = 全关
0, 0, 0
所以三个数和颜色的对应,跟调颜料不是一回事。试一道:
0 到 255 一共 256 级:每个颜色用 8 个二进制位存(每一位只有 0 和 1 两种,8 位就是 2 × 2 × … × 2 = 2⁸ = 256 种),叫 8 位。256 级在多数地方够用;可在一大片慢慢变亮的天空上,相邻两级之间会露出一道道台阶,叫色带(banding);后期调色(改明暗和颜色)时把一段亮度拉开,台阶更明显。所以广州片的正式帧存成 16 位,每个颜色 2¹⁶ = 65,536 级,给调色留余量 C03。
把放大镜的 02 换成「左边那片天」:几乎每一格都是 255, 255, 255(零星几格是 254)。不是那片天恰好纯白,是亮到了头——再亮的光,这张图也只能记成 255,比它亮多少都分不出来了。第 5 课的过曝,就从这里讲起。
不看上面,用一句话说:一帧画面,在文件里存的是什么?
01 · 3多少格,多少帧
一帧有多少格,叫分辨率(resolution),写成「宽 × 高」。广州片开渲之前你问过:「还没渲染的视频,改成1080p或者2k,能比4k快吗」。方向是对的:格子少,要算的就少。少多少?先猜一下这几个名字之间差几倍。
1080p 是 1920 × 1080,4K 是 3840 × 2160。4K 一帧的格子是 1080p 的几倍?
- 2 倍:宽度翻了一倍
- 4 倍
- 说不准:画面里细节多的地方格子多一些
4 倍。宽翻一倍、高也翻一倍,格子是 2 × 2 = 4 倍。名字不讲究:1080p 按高叫(1080 行),4K 按宽叫(约 4000 列),所以别拿名字里的数去算倍数。猜 2 倍的,只看了宽;猜「细节多的地方格子多」的,把格子当成了按内容分配的——其实格子是一张均匀的网,宽 × 高定死了,画的是天空还是树叶都一样多。
| 名字 | 宽 × 高 | 格子 | 是 1080p 的 |
|---|---|---|---|
| 1080p | 1920 × 1080 | 207 万 | 1 |
| 4K(UHD,超高清电视的标准) | 3840 × 2160 | 829 万 | 4.00 |
| 放大镜里的古榕 | 2400 × 1000 | 240 万 | 1.16 |
| 广州片动态分镜 | 960 × 402 | 39 万 | 0.19 |
| 广州片 1080p | 1920 × 803 | 154 万 | 0.74 |
| 广州片 2K | 2560 × 1071 | 274 万 | 1.32 |
| 广州片 4K | 3840 × 1606 | 617 万 | 2.97 |
广州片那几行为什么高度不整?它是 2.39 : 1 的宽银幕:上下两条黑边是播放时补的,渲染时根本不算。所以它的「1080p」宽 1920、高只有 1920 ÷ 2.39 ≈ 803,比整个 16:9 画面都用上的 1920 × 1080 少约 26% 的格子。这门课里说广州片的 1080p、2K、4K,指的都是这三个宽银幕尺寸,第 8 课的渲染账就按它们算。
格子是空间上的;时间上,画面一张一张地换。一张静止的画面叫一帧(frame),一秒换多少张叫帧率(frame rate,单位 fps)。交给电影院放映的母版,标准是每秒 24 帧。你问过:「所有镜头和所有帧是不同意思吗」——是不同的。镜头(shot)是两个剪切点之间、同一个机位连着的那一段,一个镜头里有几十到几百帧。
把格子和帧乘起来,看看一部片到底有多少个数:
一帧 1080p:1920 × 1080 × 3 ≈ 622 万个数
一秒 24 帧:622 万 × 24 ≈ 1.5 亿个数
100 秒 = 2400 帧:约 149 亿个数
广州片最后那一版 2376 帧,每帧 1920 × 803,合起来约 110 亿个数 C04。每一个都得有程序把它算出来。
01 · 4这 110 亿个数,是从哪来的?
最顺手的想法是:做 3D 就是建模,模型做好了,画面就有了。可模型里一个像素也没有:它的表面是一片片小三角形拼的(第 3 课),存的是每个角在空间里的位置,每个点三个数(第 2 课)。从模型走到那 110 亿个数,中间还隔着好几步。广州片那会儿你问过一句,正好问在这条缝上:「这个渲染是指影响最后生成出来的视频,还是影响我这个建模的模型?如果这个建模模型我后续还要再用,需要再渲染吗」
渲染完以后,模型文件本身变了吗?这个模型拿去做别的——换个机位、放进游戏——还要不要再渲染?
- 变了:渲染把模型「烤」得更精细,存回了模型里;以后直接用,不用再渲
- 没变:渲染只产出画面。要新的画面,就得再算一遍
- 变了:渲染过的模型就定型了,不能再改
没变。渲染只读模型、不写模型:它读进形状、材质、灯光、相机、这一帧的姿势,写出来的只有一格格的数。所以同一个模型能反复用。广州片那座沙面(506 万个三角面,63 棵各不相同的古榕),后来整座导进虚幻引擎,成了游戏《拾光》的底子;在游戏里,它每秒要被重新渲染 60 次 C47。
从模型到那 110 亿个数,按做一帧的先后,大致要过这几环;一帧画面从无到有要依次经过的这几道工序,叫管线(pipeline)。下面八个毛病都出在你自己的片子、游戏里,给每个选一环:
- 来自材料
- 八个毛病、你的原话和当时查到的原因;卡片上的编号就是案例号。
- 本实验的设定
- 先后顺序是做一部片的大致流程,真做时各环常常回头改;每个毛病只标了当时查到的主要一环,有的还牵着别的环(对答案时写了)。
- 它能证明
- 同一帧画面上的毛病,来源可以差得很远:形状、表面、动作、光、计算、声音、规格,各是一环。
- 它不能证明
- 遇到一个新毛病,凭症状一眼就能定环。怎么一步步排除,是第 13 课的事。
注意「渲染」在中间:它前面几环定下「画什么」,它自己决定「怎么算出每一格」,它后面几环决定「怎么交出去」。首页上也有一张管线地图,那张按课的顺序排;这里按做一帧的先后排,每一环的颜色和形状全站都一样。游戏里,动画到后期这几环每一帧都要重走一遍:一秒 60 帧,一帧只有 1000 ÷ 60 ≈ 16.7 毫秒。专门在这么短的时间里把它们跑完的那套系统,是另一环:引擎。
带走一个问题
长卷的网页里,放大到 6 倍能看清茶壶的壶嘴;可你把 1 倍时的截图放大 6 倍,只看到一团色块。都是「放大 6 倍」,差在哪?用这一课的话说:两种放大,格子是从哪来的?
不看上面,写下这一课撞上的几堵墙,再展开对照
- 以为放大会冒出更多细节 → 一帧画面是一张定死的格子表,放大只是把格子画大。
- 以为电脑里存着一张「照片」→ 存的是数:每格红、绿、蓝三个数,0 到 255。
- 以为 4K 只比 1080p 多一倍 → 宽、高各翻一倍,格子是 4 倍;帧和镜头也是两回事。
- 以为模型做好画面就有了、渲染会改模型 → 渲染只读模型、写出画面;从模型到画面还要过材质、动画、灯光相机、渲染、后期几环。