这是这款游戏机最关键的部分之一,它基本上让GameCube成为了GameCube。
这款游戏机GPU的历史有一些有趣的联系: N64的SoC(RCP)的开发主管Wei Yen后来成立了ArtX公司,并与任天堂签订了开发下一代芯片的合同:Flipper。

超级马里奥阳光(Super Mario Sunshine)(2002)
与上一代产品相比,ArtX 有了很多改进,例如,子系统被严格简化为单核(但功能强大)。
在开发过程中,ArtX被ATI收购,六年后ATI又被AMD收购。 因此,你会在游戏机壳子正面看到ATI的贴纸。
架构设计
Flipper是一个处理多种服务的复杂单元,所以现在让我们把重点放在图形组件上(因为它负责让我们的几何图形栩栩如生)。 我们将这一区域称为GPU或图形引擎,如果你一直在阅读N64的文章,我只是想告诉你,这个核心现在已经可以正常工作了,所以程序员无需担心要注入代码才能让它工作。 不过,还有一些有趣的部分可以定制。
与往常一样,为了在屏幕上绘制一帧图像,我们的数据将通过GPU的流水线传输。 数据会经过许多不同的组件,我们可以将其分为四个阶段:
数据库
CPU和GPU通过主RAM中固定长度的FIFO缓冲区相互通信,这是CPU编写绘图命令的预留部分,GPU将读取(并最终显示)这些命令,CPU和GPU本身都支持这一功能。
此外,CPU和GPU不必同时指向同一个FIFO,因此CPU可以在GPU读取第一个FIFO的同时填充另一个 FIFO。 这样可以避免空转。
在复杂的场景中,发出单个命令来构建我们的几何图形会变得非常繁琐,因此官方库中包含了一些工具,可以从游戏资产中生成所需的显示列表(预编译的FIFO命令集),只需将这部分复制到RAM中,GPU就能有效地显示它们。
GPU包含一个命令处理器,负责从FIFO中获取命令。
几何
在这里,基元会根据所需的场景进行相应的形状转换,并为光栅化做好准备。 引擎使用专用的顶点单元(Vertex unit,"VU")来完成这项工作。
有两种顶点模式可用于处理通过FIFO发送的基元:
- 直接模式:CPU 会向每个FIFO条目发送所有需要的属性(位置、法线、颜色、纹理坐标或矩阵索引)。 在数据已缓存的情况下非常有用。
- 间接模式:FIFO条目包含一个索引值,用于指定属性信息在RAM中的位置,因此顶点单元需要自行查找。。 这些数据的结构是一个数组,因此顶点单元要遍历这些数据,每个顶点条目都必须指定数组的起始位置(基指针)、每个条目的长度(步长)以及顶点所在的位置(索引)
加载完成后,可以对基元进行变换、剪切、光照(每个顶点都有一个RGB值,该值还可以进行内插,用于高洛德着色(Gouraud Shading)),最后进行投影。
纹理
现在是为模型应用纹理和特效的时候了,为此GPU包含多个处理像素的单元。 现在,这是一个非常精密(但也相当复杂)的程序,如果你觉得难以理解,就把它想象成一条处理像素的大流水线吧。 因此,有三组单元可供选择:
- 四个并行像素单元(也称为"像素流水线"): 栅格化我们的基元(将其转换为像素)。 有四个单元可用,每个周期最多可传输2x2像素。
- 每个像素单元的末端有一个纹理映射单元(共四个): 它们在每个循环中为我们的基元(现在只是像素)处理多达八个纹理。
- 纹理环境单元(Texture Environment unit,"TEV"): 这是一个功能强大、可编程的16级色彩混合器。 它基本上结合了多个纹理元素(texels)(光照、纹理和常量)来实现大量纹理效果,这些效果将应用到我们的多边形上。
- 该单元的工作原理是接收四个像素,然后根据要求的操作对其进行处理。 之后,它可以将得到的像素作为新的输入,这样在下一阶段/周期,该单元就可以对之前的结果执行不同类型的操作。 这种"循环"最多可持续15次迭代。
- 每个阶段有24种操作可供选择,考虑到结果可以在下一阶段重新处理,因此有~5.64×10511种可能的排列组合!
- 程序员可以在运行时设置 TEV(这意味着它可以随时更改),这一点至关重要,因为它为大量原创素材和效果打开了大门。
所有这一切都得益于1 MB的纹理内存(1T-SRAM 类型),该内存可分为高速缓存和Scratchpad内存(快速 RAM)。 此外,还提供SRTC(S3纹理压缩)纹理实时硬件解压缩功能,可在1 MB 内存中容纳更多纹理。
渲染
渲染流程的最后阶段包括对场景进行一些可选但有用的润色:
- 雾:将TEV中的最后一种颜色与雾常量颜色混合,以有效模拟多雾环境。
- Z-比较:后期阶段的Z缓冲。 引擎将使用2 MB的嵌入式1T-SRAM进行Z缓冲计算。
- 混合:将当前帧的颜色与上一帧缓冲区的颜色相结合。
- 抖动:顾名思义,对帧进行抖动处理。
生成的帧最终会写入嵌入式1T-SRAM中的帧缓冲区,但它仍被锁定在 Flipper 内部(该区域被称为"嵌入式帧缓冲区"(Embedded Frame Buffer,"EFB"),虽然它也包括Z缓冲区)。 因此,要在电视上显示它,我们必须将其复制到外部帧缓冲区(External Frame Buffer,"XFB"),这可以通过视频接口(Video Interface,"VI")来获取。 此外,复制过程还可以应用抗锯齿(减少块状边缘)、去闪烁(平滑亮度的突然变化)、RGB到YUV转换(类似格式,占用内存空间更少)和Y缩放(垂直缩放帧)等效果。
值得一提的是,XFB区域也可由CPU操作,这使它能将先前渲染的位图与我们最近渲染的帧结合起来;或者当某些游戏需要渲染色彩非常丰富的帧时,EFB无法容纳这些帧,因此它们被分块渲染,之后由CPU进行合并(始终与VI保持同步)。
交互式比较
是时候将这一切纳入视野了,看看程序员们是如何利用这台游戏机的新图形功能,对以前的游戏设计进行进化的。 别忘了,这些例子都是互动的!
升级
在上一代游戏机中,由于多边形数量的限制,马里奥的模型不得不缩减,而在这一代游戏中,马里奥的模型被完全重新设计,请仔细看看马里奥的模型是如何从素面朝天演变成皱巴巴的袖子的。

"现代版本"中可用的互动模型
N64的任天堂明星大乱斗(Super Smash Bros)(1999)
320个三角形

"现代版本"中可用的互动模型
NGC的任天堂明星大乱斗DX(Super Smash Bros. Melee)(2001)
4718个三角形
在短短两年时间里,我们获得了如此多的细节,真是令人印象深刻,不是吗?
更新
在这种情况下,Sonic Team已经为其独特的游戏机设计了索尼克模型,但在将游戏移植到GameCube之后,他们发现自己可以在模型上添加更多的多边形,从而获得更好的细节。

"现代版本"中可用的互动模型
Dreamcast的索尼克大冒险(Sonic Adventure)(1999)
1001个三角形

"现代版本"中可用的互动模型
NGC的索尼克大冒险DX(Sonic DX)(2003)
1993个三角形
创造力
从这条流水线的内部工作原理可以看出,图形技术一直在不断发展,现在程序员可以控制渲染过程中的某些功能。

塞尔达传说: 风之杖(The Legend of Zelda: Wind Waker)(2003)
在同一时期,PC显卡开始放弃固定功能的流水线,转而使用着色器核心(运行定义像素操作方式的小程序的单元)。 尽管Flipper仍然包含一个固定功能的GPU,但通过加入TEV单元等组件,可以说任天堂提供了自己的类似着色器的解决方案。
我觉得塞尔达传说:风之杖(The Legend of Zelda: Wind Waker)是利用这种新功能的最佳游戏之一,它采用了一种称为卡通渲染/三渲二(Cel Shading)的独特色彩/光照技术,使纹理看起来很卡通。
视频输出系统
视频信号输出分辨率可达640x480像素(PAL制式为768×576像素),色彩高达1670万种(24位色深)。 此外,该系统还能以逐行模式播放信号(图像更清晰,但当时并非所有电视都支持这种模式)。
XFB可以有多种尺寸,因此出于兼容性的考虑,视频接口会根据区域对XFB进行重新采样,以适应电视屏幕,从而尽力显示帧。
连接
游戏机包含的视频输出接口不是一个,而是两个:
- 其中一个名为模拟A/V输出,实际上就是古老的多路输出。 这是最常用的一种。
- 该游戏机的PAL版本不带 S-Video,NTSC版本不提供RGB(无奈!)。
- 另一种称为数字A/V的电缆以数字形式发送音频和视频(类似于现在的HDMI,但使用的是完全不同的协议!)。
- 任天堂发布了一套分量电缆,可以连接到这个插座。 同一个插头包含一个视频DAC和编码器,用于将数字信号转换为YPbPr(最佳质量)。
- 该电缆作为额外配件出售,现在已被视为某种遗物!





