« 世嘉土星硬件架构 (index)

世嘉土星硬件架构

Chapter 4: 图形


目录

  1. 世嘉拿出来的东西
    1. VDP1
    2. VDP2
  2. 明确问题
  3. 作为强大的2D游戏机
    1. 精灵图
    2. 背景
    3. 结果
  4. 作为具有挑战性的3D游戏机
    1. 3D建模
    2. 像素处理
  5. 新的设计
  6. 可见性问题简介
  7. 透明度问题

由于土星是本系列(译注:世嘉的行星计划)的第一个"3D游戏机",让我们首先回顾一下新一代3D图形的基本设计变化:

世嘉拿出来的东西

该游戏机包括两个专有GPU,每个GPU在同时工作时服务于不同的目的。 有些人可能会争辩说,新的GPU是经典VDP的演变,而另一些人可能会说这是完全重新设计...... 我认为两者都有点对。

说完了这些,我们再来看看两款芯片。

VDP1

Image
VDP1 架构。

视频显示处理器1(VDP1)是一款使用几何变换绘制精灵图的芯片。 结果被写入帧缓冲区,帧缓冲区又被流式传输到VDP2进行显示。

该芯片通过向其发送"绘图命令"进行编程。 因此,为程序员提供了512 KB的专用RAM来存储这些绘图命令和所需的材料(纹理/图块、颜色查找表等)。

因此,VDP1 被设计为使用 四边形作为基本图元,这意味着它只能使用 4 顶点多边形(精灵图)来构成模型。 该芯片应用 正向纹理映射 将纹理点连接到四边形上,沿着那个方向。 它不附带任何滤波/插值技术,因此计算容易出现混淆现象

VDP1还提供了以下效果选择:

两个256 KB帧缓冲芯片可用于同时绘制游戏的新场景,而不会破坏当前显示的场景。 当辅助缓冲区绘制完成时,VDP1(视频显示处理器1)开始广播这个缓冲区,这一过程称为页面翻转。然后这个继续循环进行。

VDP2

Image
VDP2 结构。

视频显示处理器2(VDP2)专门渲染大的(4096×4096像素)平面,并对其应用变换(旋转、缩放和平移)。

更重要的是,VDP2的工作方式是在运行时即时渲染(没有帧缓冲区),就像之前的基于图块的引擎一样。 它可以显示多达1670万颜色(24位)。 该芯片还负责显示VDP1的缓冲区,也可以转换和/或与VDP2的层混合。 VDP2 的「画面」由最多四个 2D 平面和一个 3D 平面组成;或者两个 3D 平面。

这个芯片依赖于 图块地图来构成平面,并为 3D 纹理映射执行透视校正,这是一种更为复杂的方法,它考虑到深度值来计算旋转。

可用的效果包括多纹理(每个多边形映射多个纹理)和阴影。 对于后者,在VDP2接收到VDP1产生的精灵图后,它可以降低它们的亮度并将它们与半透明混合。 尽管如此,VDP2仅从VDP1接收精灵图流(与CRT光束同步),因此此功能在编码和操作上往往很棘手。

该芯片还包含4 KB的颜色RAM(CRAM),用于将VDP1的自定义颜色值(索引颜色)转换为24位RGB颜色。

最后,即使VDP2仅限于两个3D平面,也没有什么可以阻止CPU使用其VRAM作为帧缓冲区在软件中绘制额外的2D或3D图形。

如果本节引起您的注意,我建议您查看来源(在文章末尾),因为VDP有更多超出本文范围的怪癖。

明确问题

正如你所见,图形子系统的架构相当复杂,因此根据不同的需求会有不同的解释:

作为强大的2D游戏机

Mega DriveSNES相比,土星绘制2D场景的能力是巨大的,尽管这并不是这款游戏机的主要卖点。

精灵图

Image
洛克人 X4 (1997).
VDP1 的精灵图版

在这种情况下,VDP1的任务是绘制传统精图灵,而不应用任何3D失真。

CPU通过写入其寄存器并用命令和图块填充其VRAM来设置VDP1。 由于DMA控制器,该过程也可以加速。

背景

Image
2D平面1。

Image
2D平面2。

Image
2D平面3。

洛克人 X4 (1997)。 VDP2的背景平面。

然后指示VDP2绘制背景平面。 这些与精灵图层一起自动混合以形成全彩色场景。

命令部分与VDP1基本相似:程序员有寄存器和VRAM进行相应的设置。

VDP2的一些功能可以用来创建更逼真的风景,例如缩放以模拟热浪(参见"2D平面2")。

结果

Image
洛克人 X4 (1997)。 混合平面(塔达!)。

没有太多神秘之处,VDP2负责将处理后的信号发送到视频编码器的最后一步。

VDP2与CRT光束同步运行,这意味着它的计算对应于将在下一条扫描线上显示的像素。

作为具有挑战性的3D游戏机

这才是土星同时闪耀和挣扎的地方。 虽然这个游戏机有八个处理器可以利用,但这一切都受制于:

出于这个原因,大多数游戏最终在质量上差异很大,因为每个工作室都想出了自己独特的解决方案。

3D建模

Image
Vr战士 Remix(1995)。
没有纹理或背景的角色3D模型。 请注意用于构建模型的基本图元。

到目前为止,我们一直在使用单个正则四边形来形成精灵图和/或背景层。 但是如果我们将多个不规则图元分组并将它们排列成一个更复杂的图形呢? 这就是3D模型如何实现的。

简单来说,像超级任天堂这样的经典2D游戏机将它们的图形(背景和精灵图)排列在准矩形区域。 在某些情况下,例如使用Mode 7,程序员可以提供一个旋转矩阵来对其中一些区域应用转换。 相比之下,土星允许定义四边形的4点,边缘之间有任意角度(世嘉称之为"扭曲精灵图")。 然后,VDP的纹理映射功能用纹理绘制四边形的区域,后者被缩放以符合多边形的形状。

就3D游戏所需的操作而言,CPU和SCU被分配来制定3D世界并将其投影到2D空间中。 然后,命令两个VDP渲染它,应用效果,最后在电视上播放。

像素处理

Image
Vr战士 Remix(1995)。
使用3D模型和背景渲染场景。

VDP可以绘制这个新的(投影的)3D空间并标记纹理和效果。 现在,每个游戏中"负责"的芯片各不相同。

一些人优先考虑VDP1来绘制最近的多边形,并让VDP2处理远处的风景,另一些人找到了有趣的变通方法来让VDP2绘制更接近的多边形(从而降低输入VDP1的几何数量负载)。 而挑战在于设计一个高效的引擎,它可以显示令人印象深刻的图形,同时还能保持可接受的帧率。

新的设计

这些是为这个游戏机重新设计的角色的一些示例,模型是交互式的,所以请尝试调试它们!

3D model 3D model 3D model
"现代版本"中可用的互动模型
索尼克在索尼克竞速(1997)。
185四边形。

3D model 3D model 3D model
"现代版本"中可用的互动模型
泰尔斯在索尼克竞速(1997)。
254四边形。

虽然土星只能绘制四边形,但你很快就会注意到,在"线框"模式下,这些模型展示了两个三角形,而不是一个四边形。 这是因为用于编码此模型的格式(glTF,一种现代 3D 建模的开放标准)在撰写本文时,并不支持四边形,所以你的现代设备无法渲染它。 因此,我建议切换到"表面"模式来观察这些四边形。

从某种意义上说,这告诉了我们当今的图形技术在重现其约 30 年前的前辈时可能会遇到的困难!

可见性问题简介

当3D多边形投影到2D空间时,确定哪些多边形从相机位置可见,哪些是要隐藏的 是一个至关重要的问题。 否则,模型将不能被正确地绘制,像透明这样的效果会显得"破损",并且最终会浪费硬件资源。 这个过程被广泛称为可见表面确定或"VSD",它是计算机图形学领域的一个基本问题。 有关这个问题已经有很多发表了的论文,描述了在图形管道的不同阶段解决这个问题的算法。 其中一些给出了非常准确的结果,而另一些则以精度换取更好的性能。

不过,与学术/专业设备不同,消费硬件非常有限,因此算法的选择范围缩小到只有几个...或者什么都没有。

Image
Project Z-Treme(2019,Homebrew)。
该引擎放弃了Z-sor,转而采用二进制空间分区(BSP)方法,修复了故障。

我认为世嘉土星的方法是一个"半解决"的案例。 VDP1没有实现任何VSD功能:你必须按照正确的顺序输入几何数据,否则就会得到一团乱麻的结果。 然而,世嘉提供了一个名为"SGL"的图形库,该库实现了一个名为Z轴排序画家算法 的解决方案,该解决方案通过软件执行多边形排序

本质上,SGL分配一个缓冲区来根据与相机的距离(从最远到最近)对多边形进行排序,然后按该顺序向VDP1发出显示命令。

使用3D空间进行Z轴排序的问题之一是其距离值(Z轴顺序)是近似的,因此仍然可能出现图形故障。 为此,程序员可以跳过SGL,转而实现自己的算法。

在后面的文章中,您将看到替代方法。 有些仍然依赖软件,而有些则由硬件加速。

透明度问题

世嘉土星能够绘制半透明图形,换句话说,混合重叠的颜色层(混合),给我们一种可以看穿它们的错觉。 不幸的是,两个VDP并不像人们期望的那样协调,因此当在不同的VDP中发现这些层时,这种效果将无法正常工作。

作为一种解决方法,游戏可以激活纹理上的"网格"属性。 使用"网格"纹理,VDP1将奇数X/Y纹理坐标设置为"透明"(空)。 使得使用透明像素混合其他层成为可能。 奇怪的是,如果游戏机使用复合视频信号(当时除了射频之外,这几乎是标准)连接到电视上,网格会显得模糊不清,从而导致一种偶然但有效的方式来实现半透明。

正如你怀疑的那样,这对一些游戏来说是不起效的,所以最终,这些游戏别无选择,只能完全放弃半透明... 虽然一些工作室发现了巧妙的修复手段,可以看看这两个案例:

Video
Video - 世嘉的梦游美国(1993)。

Video
Video - Traveller's Tales的索尼克竞速(1997).

两款游戏都命令VDP1绘制前景物体和背景风景。 反过来,VDP2渲染远景图像和3D模型前面的统计数据。 因此,具有半透明的VDP1模型不会折射VDP2的景观,因为VDP1不知道VDP2的帧缓冲区。

除了我糟糕的游戏技巧之外,你会注意到第一个游戏的背景是从无到有突然出现的(没有半透明效果),而第二个游戏不仅实现了半透明,还实现了渐隐效果:Traveller's Tales找到了一个解决方法,通过改变VDP2的"混合比例"寄存器(用于定义纹理的alpha值)并结合随着角色靠近时切换光照级别。


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

Next: 5. 音频


Rodrigo Copetti © 2026 RSS Feed

切换至现代版

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