[功能请求]: 可选择在放大时使用双线性或 xBR 过滤 2D 图像 (上传图像、原生帧、2D 纹理)
描述: 当运行高于原生分辨率的游戏时,PCSX2 中的许多 2D 素材仍然以重复的像素块显示: FMV、预先渲染的背景、HUD 图标、菜单、游戏以平面精灵形式绘制的任何内容。我一直在研究原因,结果是硬件渲染器中的三条独立路径,其中没有一个默认进行任何过滤处理: 1. CPU 直接写入内存的图像,纹理缓存将其作为渲染目标跟踪(GSTextureCache::Target::Update 将它们以最近邻法扩展到升采样的目标中)。此操作在 2b49614df 之前一直是双线性的,直到 2023 年将其移动到"双线性脏升采样"硬件修复后,因此今天您只能通过启用手动硬件修复来恢复此功能。 2. Native Scaling 保持在原分辨率的帧(《龙之谷 VIII》、《巨人之影》和 GameDB 中的 nativeScaling 为 true 的其他所有内容)。它们要么被双线性地回上升采样,要么以原样呈现。 3. 最常见的一种: 用于平面 2D 绘制的纹理。一个 512x448 的 FMV 帧作为一个完整的屏幕精灵绘制,一个 64x64 的 HUD 图标等,都是以游戏所请求的分辨率采样的纹理,通常是最近邻法。"双线性(强制)"有点帮助,但它是全或空,并且还会影响 3D。 我希望在"图形 > 渲染"中有一个单个选项"过滤 2D 图像",具有三个值: 关闭(默认,与今天的行为完全一致)、双线性和 xBR。它应该单独工作,不依赖"双线性脏升采样"修复,并且只会影响 2D: - 双线性: (1) 中的上传被双线性扩展(通常是 16/24/32bpp 矩形,4/8bpp 上传通常是被移动的索引数据,因此被放在一边)。平面 2D 绘制(精灵类或具有常量 Z 的三角形)即使游戏要求最近邻法,也被双线性采样。 - xBR: 相同,但使用 Hyllian 的 xBR。上传暂存纹理先被 xBR 升采样一次,然后按矩形复制,因此写入掩码和 RTA 的 alpha 校正保持不变,原生分辨率的目标回到升采样大小,原生帧到达显示器时也得到相同的处理,而平面 2D 绘制所使用的纹理哈希缓存则被懒得创建的 xBR 升采样副本(最多 6 倍,每个纹理受限),并被双线性采样。 - 从未被触及: 3D 几何体、渲染目标源、GPU 调色板(索引)纹理、深度、纹理调整、高清纹理替换。非整数升采样因素回退到双线性,用于上传部分。 我将所有这些功能放在我的分支中,作为当前 master 上的一项单独提交: https://GitHub.com/Forgottenshadow89/pcsx2/tree/filter2d。其中有一个 FILTER2D_NOTES.md 文件,解释了每个被触及的文件以及原因。着色器是 Hyllian 的 xBR (MIT),添加为 D3D11/12、OpenGL、Vulkan 和 Metal 的新 ShaderConvert 项;它不需要常量缓冲,因为它从纹理坐标导数中衍生出缩放比例。 关于为什么要这样做…
内容来源: PCSX2/pcsx2