原生FXAA

原生FXAA

为星露谷渲染管线添加原生GPU FXAA抗锯齿。

[center][img]https://i.imgur.com/23AHcco.png[/img][/center]

[center][url=https://smapi.io][img]https://img.shields.io/badge/SMAPI-4.0.0+-brightgreen.svg[/img][/url] [url=https://www.nexusmods.com/stardewvalley/mods/5098][img]https://img.shields.io/badge/GMCM-Compatible-purple.svg[/img][/url] [img]https://img.shields.io/badge/Stardew%20Valley-1.6+-orange.svg[/img][/center]

[center]为星露谷物语提供原生 GPU 抗锯齿。无需 ReShade,无需注入器,无需纹理替换,无需 CPU 端图像处理。[/center]

[center] [/center]

[center][img]https://i.imgur.com/5qBZ9dU.png[/img][/center]

功能简介

星露谷物语在绘制最终帧之前,会先将其世界渲染到一个内部的 MonoGame 目标上。原生 FXAA 会在该目标上运行一个全屏 FXAA 着色器,并将结果复制回来,整个过程都在 GPU 上完成,CPU 完全不参与。

FXAA 会查找成品图像中的高对比度边缘,并混合可见的锯齿。它不会改动精灵、纹理或游戏文件,因此可以与原版画面以及大多数内容模组配合使用,无需任何额外设置。

它挂钩到 SMAPI 的公共渲染事件,因此不涉及 Harmony、DLL 注入、ReShade 或任何其他外部后处理软件。GPU 渲染目标会创建一次并在多个帧之间复用,而不是每帧都重新分配。如果某个渲染过程抛出错误,原生 FXAA 只会在本次会话的剩余时间内自行关闭,而不会让游戏随之崩溃。

预设

像素保留是默认预设,并且可能是大多数人应该保持不动的预设:它只平滑最强的边缘,并保持亚像素混合最小化,从而保留像素艺术的特色。平衡进一步推动平滑,同时仍保留相当数量的精灵细节。平滑则全力运行,具有更灵敏的边缘检测和更强的混合,呈现更柔和、更传统的 FXAA 效果。自定义将使用您在高级 GMCM 页面或 config.json 中设置的任何值。

处理目标

仅世界是默认目标。它会在星露谷绘制其 HUD、菜单、文本和光标之前处理游戏世界,因此这些元素会保持清晰。不过,少数原版效果和指示器会直接绘制在世界图层上,因此无论如何它们都会被平滑处理。全帧会处理所有内容,包括世界和 UI,也包括标题画面,因此文本和菜单也会被平滑。如果您想要清晰的 HUD 和像素字体,请使用仅世界

安装

  • 安装 SMAPI 4.0.0 或更新版本。
  • 下载 Native FXAA,并将 NativeFxaa 文件夹解压到您的 Stardew Valley/Mods 文件夹中。
  • 通过 SMAPI 启动游戏。
  • (可选)安装 Generic Mod Config Menu 以获取游戏内设置和实时的原版/FXAA 对比。

配置

  • 启用 FXAA: 打开或关闭效果。默认开启。
  • 预设: 像素保留、平衡、平滑或自定义。默认为像素保留。
  • 处理目标: 仅世界或全帧。默认为仅世界。
  • 边缘阈值: 仅限自定义预设。数值越高,捕获的边缘越少,保留的细节越多。
  • 最小边缘阈值: 仅限自定义预设。数值越高,忽略越细微的对比度。
  • 亚像素质量: 仅限自定义预设。数值越高,对精细细节的平滑处理越激进,这可能会使图像变柔和。

使用 Generic Mod Config Menu,您可以在调整设置时获得实时对比,并且它会即时更新。保存或保存并关闭会将您的选择应用到实际游戏中,并写入 config.json。GMCM 是可选的。没有它,SMAPI 只会在您首次启动后使用默认设置创建一个 config.json。

兼容性

原生 FXAA 需要星露谷物语 1.6 或更新版本以及 SMAPI 4.0.0 或更新版本。它基于 1.6.15 和 SMAPI 4.5.2 构建和测试。由于它处理的是最终渲染的世界,而不是单个资源,因此它与 Content Patcher 包、重新着色、自定义地图、建筑、NPC、肖像、Fashion Sense、Alternative Textures 以及大多数精灵替换模组都能良好配合,无需为其中任何一个提供特定的补丁。它只涉及公开的 SMAPI 和 MonoGame 渲染 API,不涉及 Harmony,并且完全在本地运行,因此在多人游戏中无需同步任何内容。

性能

每个处理过的渲染目标需要一个全屏 FXAA 通道和一次 GPU 复制,且这些操作都不会回到 CPU。临时渲染目标不会每帧重新分配,只有在某些因素强制要求时(如分辨率更改、图形设备重置或内容丢失)才会重新分配。仅世界通常需要一个临时目标;全帧通常需要第二个用于 UI 图层。一个 RGBA 临时目标在 1920x1080 分辨率下约为 7.9 MiB,在 2560x1440 分辨率下约为 14.1 MiB——实际成本取决于您的分辨率和硬件。

重要说明

  • 这是抗锯齿,不是放大。它不会增加纹理分辨率,也不会凭空创造缺失的精灵细节。
  • 全帧会故意平滑文本和界面元素。如果您想要清晰的 HUD 和像素字体,请使用仅世界
  • 世界和 UI 图层是分开处理的,因此 FXAA 无法捕捉到仅存在于两个独立渲染图层重叠处的边缘。
  • 大地图截图渲染路径被有意跳过,但普通的 Steam 和操作系统截图仍会捕获屏幕上的任何 FXAA 结果。
  • 同时运行多个帧缓冲或后处理模组并不是一个好主意。根据渲染事件的顺序,另一个模组的覆盖层可能进入或不会进入 FXAA 通道。
  • 如果渲染过程失败,原生 FXAA 会在本次会话的剩余时间内自行关闭,以便游戏继续正常渲染。
  • 分屏模式遵循 SMAPI 的每个实例渲染路径。我还没有机会在其中全面测试其效果,所以如果您尝试了,我真的很想了解情况如何。

故障排除

  • 图像变黑、缩放错误或其他损坏?先尝试禁用其他帧缓冲或后处理模组。
  • 全帧让菜单或文本看起来太柔和?切换到仅世界
  • 从模组文件夹中删除 config.json 以恢复默认设置。
  • 提交错误报告?请附上您的 SMAPI 日志以及您的分辨率、窗口模式、预设和处理目标。这些通常足以让我弄清楚出了什么问题。

为星露谷物语社区制作:xzqute

ko-fi