0x01 第六步:贴图(Texture Mapping)与 4KB 料桶的物理诅咒
紧接上一期的 Windows 画图程序思维模型。现在,我们的画布上已经躺着一个被油漆桶涂满了纯红色、或者是被顶点着色渲染出了内插渐变色的实心三角形。
但在 3D 游戏的世界里,如果多边形表面只能刷纯色和渐变,我们根本无法领略《马里奥64》里城堡墙壁和草地的细腻质感。现在,我们在画图程序里玩个更高级的:我们要把一张精美的砖墙照片,完美“贴”在这个三角形的表面。
这个动作,在计算机图形学里被称为 纹理贴图(Texture Mapping)。
想象你手里拿着一张带有图案的弹性胶皮,用剪刀沿着多边形的边界剪下来,然后用四个图钉(U、V 纹理坐标指针),精准地把图案的四个角“按死”在 3D 顶点的绝对坐标上,让图案随着多边形一起缩放和扭曲。
然而,当你在 N64 的物理主板上想要执行这个“贴胶皮”的动作时,你会瞬间撞上一堵由 SGI 工程师亲手焊死的、全书最冷酷的硬件绝对死线—— 4KB TMEM(纹理缓存)。

如果在 Windows 画图程序里,即便你的电脑硬盘(卡带 ROM)里存着 100KB 的精美砖墙贴图,如果系统发给你的油漆桶每次只允许你装 4KB 大小的颜料,你要怎么把整面巨大的城堡墙壁刷满?
这正是当年所有 N64 程序员每天睁开眼就要面对的窒息规格:
- 物理铁牢:一线粉刷匠 RDP 芯片内部专门用来缓存当前贴图的 SRAM 空间,物理上限被死死锁死在了 4096 字节(4 KB)。
- 面积的清算:在 90 年代,为了展现稍微好看一点的色彩,游戏通常采用 16 位色深(每个像素占 2 字节)。这意味着,N64 硬件能一次性一口吃下的贴图面积,最大被卡死在了极其可怜的 64x32 像素(
64 * 32 * 2 = 4096 字节)!
在 64x32 这么一块指甲盖大小的马赛克贴图限制下,你如何去渲染一望无际的旷野和宏大的背景?
0x02 破局算法:在主存废墟上的“切片与平铺(Tiling)”交响乐
为了在电视上展现出宏大的宏大场景,程序员被逼在 C 代码层成了最精密的“磁砖拼图师”。他们必须利用 Libdragon SDK 背后隐藏的 平铺算法(Tiling)与镜像(Mirroring)机制 去逆天改命:
1. 手术刀切片
既然大图进不去 4KB 的料桶,程序员就必须在主存里用代码把一张大贴图强行用手术刀切成无数个小于 4KB 的微型色块(Tiles)。
2. 疯狂的 DMA 饱和冲刷
在游戏运行的 16.6 毫秒内,主 CPU 配合图形芯片下达高频指令,通过 UMA 总线管道,像疯了一样将这些小于 4KB 的小磁砖,一勺一勺地交替、覆盖、搬运进那块窄小的 TMEM 缓存里。
3. 平铺与无缝拼接
当第一块 4KB 贴图刚搬进 TMEM,RDP 芯片立刻疯狂光栅化,把这块像素刷到帧缓冲区的对应区域;紧接着,下一块 4KB 贴图通过 DMA 瞬间覆盖 TMEM,RDP 立刻无缝去刷紧挨着的下一块区域。通过设置纹理边界的 G_TX_WRAP(循环平铺)或 G_TX_MIRROR(镜像翻转)属性,让这堆极小的马赛克在主存的显存区里像贴瓷砖一样,无缝平铺成了大面积的城堡墙面。
你在 N64 游戏里看到的任何宏大表面,在底层,其实都是芯片在 16.6ms 内利用 4KB 的料桶,高频擦写、覆盖、无缝拼图出来的视觉魔术!
0x03 图形学考古:为什么 N64 的 3D 世界永远带着一层洗不掉的模糊?
聊到这里,我们就能彻底解开复古游戏界最大的一个历史悬案:为什么同时代的索尼 PS1 画面虽然贴图高频跳动扭曲,但感觉很锐利;而任天堂 64 的画面虽然平滑稳固,却永远带着一层毛玻璃般、洗不掉的标志性“模糊感”?
这正是 4KB 纹理枷锁与 SGI 顶级工程师之间的物理遮丑博弈:
- 马赛克的诅咒:由于贴图被死死限制在 4KB(64x32 像素)以内,当玩家操作马里奥走近墙壁时,这块极小的贴图会被硬件放得极大。如果没有干预,电视机屏幕上会出现极其丑陋、巨大无比的马赛克大方块点阵。
- 焊死在门电路上的双线性过滤 (Bilinear Filtering):为了消灭这些让 SGI 工程师无法容忍的马赛克方块,他们在 RDP 芯片的硬件管线里,直接通过物理门电路强行焊死了一套实时双线性像素过滤机制。当 4KB 贴图被放大时,硬件会自动抓取周围的 4 个像素,通过线性插值算法,强行把方块的边缘彻底“晕染、揉碎、模糊化”。
- 双重反模糊的代价:再加上 N64 为了压制多边形边缘的锯齿,在视频输出接口(VI)阶段又强行塞入了一层硬件级抗锯齿模糊滤镜(Anti-aliasing Filter)。
这两层由物理芯片直接触发的强力“磨皮”滤镜重叠在一起,虽然彻底消灭了 PS1 那种狗牙满布的颗粒感,但也无情地将原本就只有 4KB 精度的微弱贴图细节彻底稀释、融化了。你以为的复古朦胧美,在计算机体系架构的真相里,其实是硬件为了掩盖 4KB 纹理料桶的极度贫瘠,而在总线最末端拉起的一场长达 30 年的硬件级华丽遮丑布。
0x04 结语:在极限之内的精密拼杀
通过 Windows 画图程序的拼图模型,我们终于看清了 3D 外皮在芯片内部的流转实相。SGI 的顶尖设计师用极其傲慢但也极其聪明的 4KB TMEM 限制了晶体管规模,逼迫全世界的程序员在窄窄的总线管道里用 DMA 玩起了微秒级的瓷砖拼图。
而为了不让这场拼图露出马赛克的破绽,硬件在最末端施加的模糊艺术,最终铸就了那个让我们魂牵梦绕、带有独特朦胧质感的 64 位金盘时代。
现在,画面的点、线、面、遮挡、以及外皮贴图的物理原理已经全部在你的大脑里清算完毕。
下一期,我们将迎来【中篇:肉体渲染思维模型】的最终闭环。我们将去解剖这个 3D 舞台上最后一个让多边形真正活过来的部件——看看当年的程序员是如何在没有现代骨骼系统的蛮荒时代,像搭积木一样去拼装马里奥那具分段式身体的!
📢 下期预告:重置1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
画面有了皮囊,那如何让它优雅地动起来?
下一期,我们将彻底拆解 90 年代中期生物动画的进化断层。我们将带你看清,为什么当年的主 CPU 和协处理器 RSP 面临复杂的现代“顶点权重骨骼形变(Matrix Skinning)”时会遭遇算力的毁灭性坍缩?而大厂程序员又是如何用极其原始的“分段式积木拼装车(Segmented Models)”,在马里奥的关节处留下肉眼可见的物理裂缝并逆天完成 3D 动作革命的!
不要走开,下一章我们积木关节见!
232

被折叠的 条评论
为什么被折叠?



