« 超级任天堂的架构 (index)

超级任天堂的架构

Chapter 4: 图形


目录

  1. 设计
    1. 芯片组
    2. 显示模式
  2. 硬件组织
  3. 构造画面(frame)
    1. 图块
    2. 背景
    3. 模式
    4. 精灵
    5. 结果
  4. 那个特点
  5. 帧数下降的原因
  6. 方便的视频输出

说了这么多,让我告诉你们,这款游戏机的图形子系统是真正的工程杰作。 在CPU如此有限的情况下,我们可以想象,SNES绝不可能与采用"32位"摩托罗拉68000的竞争对手相提并论。 然而,任天堂和理光的工程师们设法找到了巧妙的技巧,利用CRT显示器的行为方式,从而在不需要昂贵的先进组件的情况下扩展了这款游戏机的功能

无论如何,在我们深入探讨之前,我强烈建议您先阅读NES的文章,因为它介绍了一些有用的概念,我们将在这里重新讨论这些概念。

设计

与同时代的其他游戏机一样,超级任天堂使用2D图块(8 x 8像素)绘制图形。 NES 最初是通过捆绑标志性的"图像处理单元"(PPU)来实现这一功能的,该单元与CRT屏幕同步传输图像。 超级任天堂紧随其后,但它现在采用了更复杂的技术,以获得更丰富的效果。

芯片组

超级任天堂内置两块不同的PPU芯片,构成图形子系统,合并后称为超级PPU或"S-PPU"。

Image
这两个PPU芯片

这两个PPU被设计用于实现不同的功能:

从编程角度看,这种分离是多余的,因为两个芯片实际上被视为一体。

显示模式

系统以~60 Hz(NTSC)[9]输出256x224像素的标准分辨率。 欧洲PAL制式则以约~50 Hz的频率输出256×240像素(以符合 PAL 制式规格)。 尽管如此,大多数游戏并不使用额外的像素,而是显示"letterbox"(黑线)。

现在,棘手的问题来了,传统电视的宽高比是 4:3。 但如果你算一下,会发现超级任天堂的输出分辨率长宽比为8:7。 因此,将图像传输到电视上后,它看起来会被水平拉伸,就好像是一个292x224像素的画面(NTSC制式) 。 换一种说法,可以说超级任天堂上的像素长宽比是8:7,而不是 "完美的正方形"。

Image
分辨率为256x224像素的渲染帧。 这就是游戏机发送到电视上的图像。

Image
从电视机上看到的拉伸画面(分辨率明显为292x224像素)

星之卡比3(Kirby's Dream Land 3) (1997)

任天堂选择偏离标准屏幕比例的根本原因在于成本。 通过分析可见,S-PPU芯片虽然功能丰富,但其渲染速度却跟不上CRT显像管的电子束扫描速率。 为此,任天堂并未选择增加电路板元器件,而是通过缩短可视画面长度,将节省出的时间用于水平消隐周期。

值得注意的是,像时空之轮(Chrono Trigger)等少数游戏专门对此进行了优化——开发者刻意将画面元素设计为压缩状态,经电视机拉伸后即显示正常比例。 但这只是一个特例,因为大多数游戏都没有采取额外的措施来考虑这一因素。

硬件组织

Image
S-PPU的内存架构.

由于成本和性能原因,图形数据分布在三个内存区域:

构造画面(frame)

现在让我们看看如何在游戏机上渲染画面,然后在电视上显示。 我们将以超级马里奥世界为例进行演示。

图块

Image
一些在 VRAM 中找到的16x16 图块.

与前代产品一样,S-PPU使用图块来构建复杂的图形。 不过,与最初的PPU相比,S-PPU有了重大改进:

背景

Image
背景图层 1 (BG1)。

Image
背景图层2 (BG2)。

Image
背景图层3 (BG3)。

VRAM中的背景映射

Image
渲染背景图层 1 (BG1)。

Image
渲染背景图层 2 (BG2)。

Image
渲染背景图层 3 (BG3)。

Image
渲染背景图层的组合。

应用选区和透明度后渲染的背景图层

超级任天堂可以生成多达四个不同的背景层。 通过使用8x8或16x16图块,区块由32x32像素(2x2 图块)构成。 尽管如此,每个背景图层的大小最多可达到1024x1024像素(32x32的图块)。 VRAM 中配置这些图层的区域称为 图块映射区(Tilemap) 并且这一部分的结构是表格(内存中的连续数值)。

Tilemap 中的每个条目都包含下列属性:

一如既往,这些平面是可滚动的,但可用功能的数量(颜色、层数、独立滚动区域和选区大小)将取决于S-PPU上激活的背景模式,这就引出了下一部分...

模式

S-PPU提供了许多背景操作,但这些操作不能任意选择。 相反,有八种背景模式可供选择,每种模式提供不同的功能:

如您所见,程序员现在可以选择所选区域的颜色、层数、效果或分辨率的优先级。

精灵

Image
渲染的Sprite图层。

内存中一个名为对象属性内存(OAM)的区域存储了一个表,其中最多可引用128个具有这些属性的精灵:

S-PPU每扫描线最多可绘制32个精灵,如果溢出,S-PPU只会丢弃优先级最低的精灵。

结果

Image
嗒哒——!

S-PPU在绘制每条扫描线时,首先处理每一层的相应部分,然后将它们混合在一起。

NES游戏的主要限制之一是只能在垂直消隐(V-Blank)期间更新图形。 显像管的光束从起点返回的那一刻提供了一个合理的时间帧,可以在不破坏图像的情况下重新调整一些图块。

现在,得益于SNES的新功能,这一限制有了不同的意义。

因为新的DMA/HDMA单元现在可以让程序员在不等待垂直扫描(V-Scan)的情况下执行内存传输,游戏现在可以更新图块、颜色和寄存器,而无需等待整个画面绘制完成。 事实上,我们可以做得更多: 由于游戏现在可以在帧中改变S-PPU设置,这就意味着可以在同一帧的不同阶段激活不同的背景模式,为新颖的游戏设计打开了大门!

那个特点

说实话,我还没有提到这个控制台最重要的特性...

Image
已渲染的背景层

Image
已分配的背景图

Image
屏幕上显示的已渲染的一帧
扫描线的第一部分使用另一种模式来模拟距离,模式7则从第二部分开始(这要归功于HDMA)。

零式赛车(F-Zero)(1990).

介绍一下模式7,这是另一种背景模式,但这次的工作方式完全不同。 虽然它只能渲染一个8bpp的背景层,但却能在该平面上应用以下仿射变换

S-PPU由旋转矩阵控制,以改变该模式的参数。 这里就不多讲线性代数了,但根据所需的效果,CPU必须执行一些三角函数(正弦和余弦),以相应地填充该表的条目。 对于65C816来说,即使使用定点精度,这也是非常昂贵的。 因此,理光在5A22中增加了乘法和除法寄存器,以卸载一些周期。

顺便提一下,请注意变换列表中没有提到透视,而这正是您在示例游戏(F-Zero)中所看到的。 这是通过在每次调用HDMA时改变旋转矩阵来实现的,在此过程中产生了伪三维效果。 这应该能让你对S-PPU的实用性有所了解!

最后,由于需要进行大量计算,内存映射发生了变化,以优化两个PPU的流水线,第一个PPU处理图块映射(图块被引用处),而另一个PPU则获取图块集(图块被存储处)。

帧数下降的原因

还有一个话题,你有没有想过游戏卡顿的原因? 当调用垂直消隐中断允许图形更新时,有时游戏仍在执行一些繁重的代码,并跳过了垂直消隐窗口,直到下一次调用垂直消隐时图形才能更新,由于帧没有更新,这就表现为帧速率下降。

这种情况也可能反过来发生,垂直消隐期间的大量处理将使PPU无法输出视频信号(因为总线被阻塞)。 因此,在扫描过程中会出现黑线,不过由于帧每秒更新50或60次,这种情况几乎不会引起注意。

方便的视频输出

如果游戏机不能通过双方都能理解的媒介将图像传送到电视上,那么上述所有进步都将是徒劳的。 随着超级任天堂的推出,该公司首次推出了一种名为"多路输出"通用但专有的连接方式,它可以同时传输多种类型的信号,包括复合信号S-VideoRGB

任天堂随游戏机附赠了一条"多路输出转复合接口"电缆,因为这在当时几乎是电视机的通用规格。 但在欧洲,SCART端口也非常流行,因为许多机顶盒和录像机都依赖它。 SCART端口的一大优点是可以传输多种类型的信号,这使得AV设备可以使用最理想的信号类型,而不会遇到兼容性问题。 据我所知,当时只有法国消费者获得了官方提供的SCART电缆,该电缆利用了超级任天堂的RGB针脚。

尽管如此,任天堂还是修改了其PAL制式游戏机的引脚布局,以符合SCART协议,并将 "复合同步" 引脚换成了12V引脚(告诉电视机设置4:3宽高比)。 因此,尽管多路输出是"通用"的,但由此产生的RGB电缆(如果有的话)却是因地区而异的。

我认为,多路输出的真正优势是在当代开始显现的,因为它允许用户在修改游戏机内部结构的情况下,向最先进的电视机输出RGB信号。 不过,与复合视频和S-Video不同,RGB需要额外的"同步"信号。 为此,可以将电缆连接起来,从复合端口或S-Video捕捉同步信号;或者使用称为 "复合同 "的专用同步线,以获得最佳效果。 但如上段所述,只有NTSC制式游戏机才使用后者。


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

Next: 5. 音频


Rodrigo Copetti © 2026 RSS Feed

切换至现代版

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