PlayStation 2 GS 模拟 - Vulkan 计算模拟的最终前沿 - Maister 的图形冒险

主要观点:

  • 作者于 2020 年编写 paraLLEl-RDP,旨在 Vulkan 计算中实现 N64 RDP,现又着手为 PlayStation 2(PS2)做类似计算着色器光栅化工作,名为 paraLLEl-GS。
  • 介绍 PS2 的 GS(Graphics Synthesizer)相关特性,如像素推动能力强、像素流水线简单但奇特(包括混合超出 1.0、目标 Alpha 测试、条件混合、Alpha 校正、部分丢弃、AA1 等)、遵循 D3D9 式光栅规则、有顶点队列、特殊的格式(如 swizzling 格式)、帧缓冲区和纹理缓存、纹理处理(包括两种特殊寻址模式、mip-mapping 等)、CLUT 等。
  • 详细阐述 paraLLEl-GS 的实现细节,包括渲染流水线(各阶段同步及常见危险情况)、页面追踪(细分 VRAM 为页进行状态追踪)、批量更新 CLUT、从 VRAM 解压缩纹理、三角形设置与分箱、超采样(处理超采样伪影)等。
  • 通过实际示例展示 paraLLEl-GS 在处理不同情况(如 up-sampling、处理特殊游戏案例等)的效果,与 PCSX2 对比,说明其优势。

关键信息:

  • paraLLEl-GS 基于已有通用计算着色器光栅化项目,同事 Runar Heyer 提供了很多帮助。
  • GS 特性多样,如填充率高、流水线特殊等,传统图形 API 实现部分部分较困难,而 compute 可绕过。
  • 实现细节方面,渲染流水线需注意各种危险情况,页面追踪要细分 VRAM 页并处理多种状态,批量更新 CLUT 等操作也有特定方式。
  • 超采样能改善渲染效果,同时要处理超采样带来的伪影,不同游戏案例有不同处理方式。

重要细节:

  • PS2 GS 对精度要求高,硬件加速较难,软件和图形渲染器都有问题,如软件渲染器不支持 up-scaling 等。
  • 实现中要考虑各种特殊情况,如纹理的 POT 大小、REGION_CLAMP 等的处理,以及不同模式下的优化。
  • 超采样时要处理多个 VRAM 副本,超采样能避免 UI 元素与 3D 物体分辨率差异大的问题。
  • 目前测试 paraLLEl-GS 主要通过 GS dumps 和 PCSX2 的 hack-patch,仍有大量 bugs 待发现和修复。
阅读 12
0 条评论