« GameCube架构 (index)

GameCube架构

Chapter 4: 图形


目录

  1. 架构设计
    1. 数据库
    2. 几何
    3. 纹理
    4. 渲染
  2. 交互式比较
    1. 升级
    2. 更新
  3. 创造力
  4. 视频输出系统
  5. 连接

这是这款游戏机最关键的部分之一,它基本上让GameCube成为了GameCube

这款游戏机GPU的历史有一些有趣的联系: N64的SoC(RCP)的开发主管Wei Yen后来成立了ArtX公司,并与任天堂签订了开发下一代芯片的合同:Flipper

Image
超级马里奥阳光(Super Mario Sunshine)(2002)

与上一代产品相比,ArtX 有了很多改进,例如,子系统被严格简化为单核(但功能强大)。

在开发过程中,ArtX被ATI收购,六年后ATI又被AMD收购。 因此,你会在游戏机壳子正面看到ATI的贴纸。

架构设计

Flipper是一个处理多种服务的复杂单元,所以现在让我们把重点放在图形组件上(因为它负责让我们的几何图形栩栩如生)。 我们将这一区域称为GPU图形引擎,如果你一直在阅读N64的文章,我只是想告诉你,这个核心现在已经可以正常工作了,所以程序员无需担心要注入代码才能让它工作。 不过,还有一些有趣的部分可以定制。

Image
Flipper的GPU部分的流水线设计

与往常一样,为了在屏幕上绘制一帧图像,我们的数据将通过GPU的流水线传输。 数据会经过许多不同的组件,我们可以将其分为四个阶段:

数据库

Image
数据库阶段示意图

CPU和GPU通过主RAM中固定长度的FIFO缓冲区相互通信,这是CPU编写绘图命令的预留部分,GPU将读取(并最终显示)这些命令,CPU和GPU本身都支持这一功能。

此外,CPU和GPU不必同时指向同一个FIFO,因此CPU可以在GPU读取第一个FIFO的同时填充另一个 FIFO。 这样可以避免空转。

在复杂的场景中,发出单个命令来构建我们的几何图形会变得非常繁琐,因此官方库中包含了一些工具,可以从游戏资产中生成所需的显示列表(预编译的FIFO命令集),只需将这部分复制到RAM中,GPU就能有效地显示它们。

GPU包含一个命令处理器,负责从FIFO中获取命令。

几何

Image
使用间接模式的顶点阶段示意图。

在这里,基元会根据所需的场景进行相应的形状转换,并为光栅化做好准备。 引擎使用专用的顶点单元(Vertex unit,"VU")来完成这项工作。

有两种顶点模式可用于处理通过FIFO发送的基元:

加载完成后,可以对基元进行变换剪切光照(每个顶点都有一个RGB值,该值还可以进行内插,用于高洛德着色(Gouraud Shading)),最后进行投影

纹理

Image
使用默认设置的纹理阶段示意图

现在是为模型应用纹理和特效的时候了,为此GPU包含多个处理像素的单元。 现在,这是一个非常精密(但也相当复杂)的程序,如果你觉得难以理解,就把它想象成一条处理像素的大流水线吧。 因此,有三组单元可供选择:

所有这一切都得益于1 MB的纹理内存(1T-SRAM 类型),该内存可分为高速缓存和Scratchpad内存(快速 RAM)。 此外,还提供SRTC(S3纹理压缩)纹理实时硬件解压缩功能,可在1 MB 内存中容纳更多纹理。

渲染

Image
渲染阶段示意图

渲染流程的最后阶段包括对场景进行一些可选但有用的润色:

生成的帧最终会写入嵌入式1T-SRAM中的帧缓冲区,但它仍被锁定在 Flipper 内部(该区域被称为"嵌入式帧缓冲区"(Embedded Frame Buffer,"EFB"),虽然它也包括Z缓冲区)。 因此,要在电视上显示它,我们必须将其复制到外部帧缓冲区(External Frame Buffer,"XFB"),这可以通过视频接口(Video Interface,"VI")来获取。 此外,复制过程还可以应用抗锯齿(减少块状边缘)、去闪烁(平滑亮度的突然变化)、RGB到YUV转换(类似格式,占用内存空间更少)和Y缩放(垂直缩放帧)等效果。

值得一提的是,XFB区域也可由CPU操作,这使它能将先前渲染的位图与我们最近渲染的帧结合起来;或者当某些游戏需要渲染色彩非常丰富的帧时,EFB无法容纳这些帧,因此它们被分块渲染,之后由CPU进行合并(始终与VI保持同步)。

交互式比较

是时候将这一切纳入视野了,看看程序员们是如何利用这台游戏机的新图形功能,对以前的游戏设计进行进化的。 别忘了,这些例子都是互动的!

升级

上一代游戏机中,由于多边形数量的限制,马里奥的模型不得不缩减,而在这一代游戏中,马里奥的模型被完全重新设计,请仔细看看马里奥的模型是如何从素面朝天演变成皱巴巴的袖子的。

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

3D model 3D model 3D model
"现代版本"中可用的互动模型
NGC的任天堂明星大乱斗DX(Super Smash Bros. Melee)(2001)
4718个三角形

在短短两年时间里,我们获得了如此多的细节,真是令人印象深刻,不是吗?

更新

在这种情况下,Sonic Team已经为其独特的游戏机设计了索尼克模型,但在将游戏移植到GameCube之后,他们发现自己可以在模型上添加更多的多边形,从而获得更好的细节。

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

3D model 3D model 3D model
"现代版本"中可用的互动模型
NGC的索尼克大冒险DX(Sonic DX)(2003)
1993个三角形

创造力

从这条流水线的内部工作原理可以看出,图形技术一直在不断发展,现在程序员可以控制渲染过程中的某些功能。

Image
塞尔达传说: 风之杖(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进行重新采样,以适应电视屏幕,从而尽力显示帧。

连接

游戏机包含的视频输出接口不是一个,而是两个:

Image
机子背面的A/V端口。


Previous: 3. 中央处理器 (CPU)

Next: 5. 音频


Rodrigo Copetti © 2026 RSS Feed

切换至现代版

主页 · 文章 · 支持 · 关于作者 · 关于此网站