« PlayStation Portable(PSP)架构 (index)

PlayStation Portable(PSP)架构

Chapter 5: 图形


目录

  1. 显示
  2. Graphics Engine介绍
  3. Graphics Engine架构
  4. 硬件组织
  5. 功能
    1. 指令
    2. 矢量处理
    3. 光栅化
    4. 纹理
    5. 像素操作
    6. 观察
  6. 交互模型
  7. 视频输出

首先,让我们来看看主机的物理屏幕,这是用户可以欣赏到本节将要讨论的所有内容的地方。

显示

PSP 配备了4.3 英寸 TFT 液晶屏。 分辨率为480x272 (作为参考,像素数量相当于任天堂 DS 的 2.6 倍),最多可显示 16,777,216 种颜色。 色彩深度为 24 位(即所谓的 "真彩色")。

长宽比为几乎16:9,这种比例在当时正逐渐成为家用电视机的标准。 请注意,更大的视野范围也为游戏设计师提供了改进游戏体验的机会(尤其是在第一人称射击类游戏中)。

Graphics Engine介绍

现在我们来谈谈负责生成像素的组件-Graphics Engine (GE)。 该引擎位于"系统组"中,因此可以将其视为 "组中组"。 下面是它取得的一些成果:

Image
王国之心:梦中诞生(2010)

Image
蜘蛛侠3(2007)

Image
侠盗猎车手:罪恶都市传奇(2006)

Image
模拟人生2(2005)

Image
OutRun 2006:海岸至海岸(2006)

Image
乐克乐克(2006)

PSP 游戏示例。 全部以最大分辨率(480x272 )显示。

GE 负责绘制带有多种特性的 3D 图形(多边形),包括纹理映射、光照等,稍后您将看到这些特性。

Graphics Engine架构

GE子系统有许多有趣的特点值得一提,所以这部分会非常复杂。 别害怕! 为了避免混淆,我会尽量一步一步来。

首先,GE 由三个部分组成:

采用这种设计的原因是主 CPU 和图形核心都可以访问这 2 MB 的 eDRAM。 因此,为防止拥塞,GE 内部的流量会通过另一条名为本地总线的高级高性能总线(AHB)(从 GE 的角度看是"本地")。 这允许图形核心执行其功能时无需系统总线来移动数据,防止系统其他部分阻塞。

Image
Graphics Engine架构

本地总线与系统总线(128 位)一样宽,如果这还不够,图形核心还通过 512 位总线(由两条单向 256 位总线组成)直接连接 eDRAM。 在下一节中,您将看到它的必要性。

CPU 和 GE 之间如何通信? 如前所述,CPU 和图形核心都可以读取 eDRAM。 此外,图形核心还可以访问系统总线,从任何其他组件(包括主 RAM)获取数据。 这一切并不是凭空发生的。

简而言之,两个总线矩阵重新配置了本地总线和系统总线之间的连接。 每当有组件要访问"外部"总线时,总线矩阵就会对通信进行配置,使其中一个单元成为两条总线的主控单元,而不会出现其他重叠,这种情况会持续到指定的单元完成内存传输。

这种行为让我想起了众所周知的总线控制技术,即主导组件是"总线主控",完全控制总线,其余组件是"从属",等待命令。 不过,我不确定索尼工程师试图复制的是哪种协议/标准。 根据我的理解,我认为它可能与 I²C 有些类似,它是一种用于串行通信的协议(尤其适用于嵌入式系统),也执行总线控制。

硬件组织

现在,我们已经了解了各个组件及其相互之间的交互方式,让我们来看看有哪些与图形相关的信息可以存入内存。

GE 最终将向三个内存位置提取或填充数据:

功能

与 PSP 的家用表亲一样,PSP 的图形系统侧重于光栅化。 不过,PSP 的 VRAM 只有 PS2 的一半大,总线速度也没有 PS2 快。 作为补偿,PSP的图形引擎采用了矢量处理器!

Image
Graphics Engine管线设计
跳过了复杂的接口部分

图形管线与 PS2 非常相似,只是增加了矢量处理阶段。 图形核心分为两个部分:表面引擎,负责矢量处理;渲染引擎,顾名思义,负责光栅化和效果处理。

虽然过去 已对其功能进行过解释,但图形管线本身的细节尚未说明。 事实上,程序员并不依赖这些信息来制作游戏。 不过,为了进行分析,我自己推导出了一个模型。

另外,我决定让这篇文章比以前的文章更具技术性。 我认为这是学习新概念和拓宽对计算机图形学视野的好机会。 说到这里,我强烈建议大家在继续阅读之前先了解一下 PS1PS2 图形系统。

指令

Image
指令处理阶段

Graphics Engine通过存储在主内存中的传统"显示列表"(display lists)进行控制。 CPU 构建它们,GPU 通过 DMA 读取。 显示列表告诉GPU要绘制什么、如何绘制以及在哪里绘制。 对于 PSP 而言,显示列表不仅限于渲染任务,还可以包括矢量转换。

为了确保 CPU 和 GPU 能够并行工作而不相互阻塞,处理列表的策略至关重要。 我们希望GPU加速操作,而不是成为负担。 因此,CPU 和 GPU 支持延迟渲染(deferred rendering),这种技术允许 CPU 在 GPU 处理前一组显示列表时构建下一组显示列表。 GE 通过指定显示列表在内存中的起始位置(基地址)和终止位置(停滞地址)来配置。 因此,有两种分配列表的方式:

此外,索尼还表示 GPU 的 DMA 单元不仅仅是一个 "傻瓜式内存复制器",它还能理解传输的数据 。 因此,显示列表可以包括 jumpreturn命令,以触发 DMA 分支并从其他地方获取数据。 这样,CPU 就不必在显示列表中嵌入模型、纹理等大型资源,减少了内存复制和带宽消耗。 这个系统继承自 PS2。

最后,DMA 还可以解释边界数据:结合存储在 GE 中的信息,DMA 将跳过不在显示区域内的绘制命令。 也可以在其他边界框内声明边界框,不过这个话题留到以后再说吧!

矢量处理

Image
矢量处理阶段

图形引擎首次具备了操作矢量的能力,这有助于减轻 CPU 的负担。 索尼公司使用它来加速过去经常由 PS2 的 VPU(矢量处理单元)通过微码 执行的任务。 虽然 GE 不如 VPU 灵活(GE 是一个固定功能单元),但它确实简化了许多编码工作(考虑到微码的学习曲线)。 GE 的矢量处理器被称为表面引擎(surface engine)。

表面引擎承担三种任务。 首先是对参数曲面的操作 。 还记得"无限世界"(Infinite Worlds)章节吗? 索尼公司解释说,虽然 PS2 有能力实现,但最终只有少数游戏使用了这个功能。 可能的原因包括多边形性能,以及设计和实现的难度。

为了解决这个问题,表面引擎实现了两种参数曲线:

两者都支持细节层次(levels of detail),这意味着开发人员可以设置任意值来改变细分级别,以影响生成模型的质量。

第二项任务称为顶点混合(vertex blending),这是一种用于动画的技术。 表面引擎提供了两种类型:

需要指出的是,CPU 可能仍需要计算动画来处理游戏逻辑(如碰撞检测),因此它无法分担 CPU 上的所有工作。

最后,曲面引擎还提供剪切功能,即丢弃视口/矩形区域外的顶点。

光栅化

Image
光栅化阶段

图形生成的下一阶段在渲染引擎(rendering engine)中进行(跳过指令处理器)。 在这里,矢量数据被转化为像素,与市面上的其他 GPU 基本一致。

引擎可绘制多种类型的图元,包括点、线、线段、三角形、三角形条、三角扇形,以及由二维矩形组成的精灵。 它还包含一个名为"数字差分分析器"(digital differential analyse)的单元,用于在光栅化和纹理映射过程中对数值进行插值。

开发人员可以提供一个投影矩阵来应用透视变换。 这将把他们的 3D 世界发送到 2D 空间(这样你就能在屏幕上看到它),并使用虚拟摄像头作为模型。

索尼并没有提供太多关于光栅工作原理的具体信息,因此也不清楚每个周期能够处理多少像素。 亚像素精度等现代功能被认为已经实现(否则,用户就会立即发现其缺失)。

纹理

Image
纹理映射阶段

对于一些人来说,这可能是最感兴趣的话题。 已是像素的多边形上可以绘制纹理。 在这一阶段,纹理贴图从内存中获取,并通过多种功能进行处理。 这一过程被称为纹理映射

渲染引擎有三种映射模式,换句话说,有三种处理纹理贴图的方法:

纹理可使用颜色查找表(CLUTs,Colour Lookup Tables)。 此外,该引擎还应用透视校正双线性或三线性过滤进行插值。

另外,GE 中有 8 KB 纹理缓存,以节省带宽。 它采用"最近最少使用"(Lru)的方式管理。

最后,虽然该管线不可编程,但开发人员可以发送额外的颜色与纹理混合。 此外,还有颜色加倍(将颜色的 RGB 值翻倍)、颜色添加(将主要颜色与次要颜色结合)和雾化 (在远处的多边形上添加雾效果)。

像素操作

Image
像素操作阶段

我们即将到达管线的尽头。 最初的几何图形已经转化为丰富多彩的像素,是时候决定如何处理它们了。

有些像素可能对应于本帧不需要的几何图形(它可能被遮挡、遮罩等)。 为了过滤掉这些像素,GE可以执行以下测试:

之后,像素还会通过以下可选的模块进行进一步的效果处理:

抗锯齿 这样的复杂功能是通过上述功能策略性组合实现的。 最后,输出的像素被写入帧缓冲区,然后再发送显示。

观察

事实证明,PSP 继承了 PS2 的各种功能。 但与提供许多需要手动配置的通用可编程单元相比,现在的功能都被硬编码在芯片上。 我推测这样做有两个原因:一是为了减少晶体管的数量,这样它就能装入 Tachyon 并保持主板的"便携性",二是为了方便将 PS2 代码移植到新的主机上。

交互模型

为了说明该系统对模型设计的影响,并将其与 PS2Nintendo DS 进行比较,以下是两个为 PSP 设计的模型示例。 别忘了,查看器是可互动的!

3D model 3D model 3D model
"现代版本"中可用的互动模型
合金装备:掌上行动 加强版(2006)
1,383个三角形

3D model 3D model 3D model
"现代版本"中可用的互动模型
Daxter(2006).
1,374个三角形

视频输出

该控制台的第一个型号(1000)在左下角(音频插孔旁边)有一个名为远程端口(remote port)的专有视频端口。

Image
PSP(3000 型)右下角的专有"视频输出"接口

远程端口使用 RS-232 协议 ,这是一种古老的串行数据传输标准。 尽管这个协议没有公开给开发者,也没有文档记录,但市场上还是出现了几款带有控制按钮的音频耳机。 显然,它们使用串行端口向主机发送播放、暂停等命令。

在后来的型号(2000 和 3000)中,远程端口增加了一个额外的 YCbCr 引脚。 索尼提供了三种视频线缆(component、S-Video 和composite),用户可以通过该接口在电视上看到 PSP 屏幕上的内容。

视频电缆将以逐行或隔行扫描模式发送分辨率为720x480(NTSC)或 720x576(PAL)的图像(后一种仅适用于 3000 型)。 由于 PSP 的分辨率为 480x272 像素,游戏将显示黑边以校正宽高比。 不过,当控制台运行"XMB"可视化界面时,黑边将不会显示,该界面原生支持根据视频线缆调整其分辨率。


Previous: 4. 多媒体 CPU

Next: 6. 音频


Rodrigo Copetti © 2026 RSS Feed

切换至现代版

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