屏幕空间阴影与反射修复

屏幕空间阴影与反射修复

V2.0 更新!将渲染图像扩展到显示边界之外,以修复视口边缘的屏幕空间效果伪影。仅有两个效果,对性能影响极小。完全保持原版风格/美学不变,除此之外无任何改动。

杂项

一个简单的ReShade过度渲染与裁剪问题修复方案

将渲染图像放大至超出显示边界,消除视口边缘大部分最严重的屏幕空间特效伪影仅包含两个特效(V1.0版本为单一特效),因此对性能的影响极小除消除伪影外,对原版风格/美学完全无改动

V2.0 模组更新是一次巨大的改进。详情见下方,并查看展示V2.0游戏内效果的新视频。

如有任何问题,或需要安装和设置方面的帮助,只需在上方的帖子标签中请求协助,我会尽快回复

缩写: TL:DR

RDR2中,屏幕空间阴影和反射在屏幕边缘突然终止的问题处理得很差,这是因为它们的来源(产生这些阴影/反射的元素)落到了屏幕空间之外,整体效果相当糟糕。

这个ReShade预设通过简单地将渲染图像稍微放大,将这些伪像推出屏幕外,从而消除了大多数这类屏幕空间伪像。本质上,这是一种标准的过度渲染并裁剪实现方式。

V2.0 完全在用户界面之下运行,因此能够大幅缩放和裁剪渲染图像(而不影响用户界面),从而有效消除屏幕边缘几乎所有最显眼的水平屏幕空间伪影。

V2.0 运行在用户界面之下,意味着几乎所有其他模组现在都应该100%兼容,即使它们添加了UI元素。

V2.0 包含一个单一的锐化效果,用于有效补偿因图像放大而产生的轻微模糊,此外还包含一个用于放大图像的显示模组效果。之所以选择METEOR NVsharpen效果,是因为它既有高性能又无可见伪影,且其图像质量与放大前的图像质量极为接近。最终结果是,尽管放大图像会对画质产生轻微影响,但适度的锐化效果完全弥补了这一缺陷,使最终图像仅比原始图像略微锐利一些。

V2.0兼容 DX12。我希望能在 Vulkan 中实现,但目前 ReShade 的 REST 插件无法在 RDR2 的 Vulkan 界面下方注入效果。 有哪位图形程序员愿意深入研究 REST 插件的源代码,帮助使其在 Vulkan 中工作?

V2.0 与DLAA/DLSS/FSR不兼容。 它与游戏的分辨率缩放设置配合良好,在性能相近的情况下,能提供比DLSS更优的画质。因此,如果你需要DLSS来提升性能,我建议改用游戏的分辨率缩放,并设置为0.8x或0.75x。Mod V1.0可以与DLAA/DLSS/FSR正常兼容。

V1.0将保持可用,且V1.0可以与Vulkan一起使用,但缺乏对步行速度控制和自动行走模组的UI支持(该模组由Taki7o7制作)(在V2.0中已替换为完整的游戏UI支持)。但此时我强烈推荐使用DX12(搭配此模组的V2.0版本)而非Vulkan

安装

非常详细的说明,尽管实际上它很简单(嗯,V1.0 确实很简单,但 V2.0 需要稍微多设置一下,不过值得)。如果你已经为《荒野大镖客:救赎2》安装了 ReShade(带附加组件支持),你只需下载这个附加组件的最新版本:ReShadeEffectShaderToggler(.addon64 文件放入游戏根目录,.fx 文件放入 Red Dead Redemption 2\reshade-shaders\Shaders\REST 目录)。然后将本模组的文件解压到游戏根目录。记得在 ReShade 中设置一个切换热键来启用/禁用效果,因为你偶尔可能需要关闭这个修复(V2.0 几乎不需要关闭,但仍建议设置热键作为备选选项)。

关于 V2.0 的重要说明:

  • 如果你之前为了V1.0版本在游戏显示设置中将"UI安全区域"设置为90%,现在可以将其改回100%(或你偏好的任何值),因为V2.0不再需要任何特定的UI安全区域设置。
  • V2.0 应完全运行在游戏界面之下(全屏地图除外)。
  • V2.0版本中游戏UI的唯一问题是打开全尺寸地图时,该预设无法正常工作——因此我提供了AutoHotkey脚本(支持AutoHotkey V1.1+和AutoHotkey V2+),可在打开全尺寸地图时自动禁用此模组效果,关闭全尺寸地图时重新启用。具体AHK信息请参见下文。
  • V2.0 目前仅支持DX12。如使用Vulkan,请使用V1.0。

关于 V1.0 的重要说明:

一定要进入游戏显示设置,将"UI安全区域"调整为水平90%和垂直90% (V2.0版本无需此操作)

一步步安装指南:

这些说明适用于mod版本1.0和2.0。 以"针对mod版本1.0" "针对mod版本2.0" 开头的步骤仅适用于特定版本,如果你安装的是其他版本,则应跳过

  1. 将此模组的zip文件内容解压到RDR2游戏目录中
  2. 如果你使用的是带有Vulkan的V1.0版本,请从游戏目录中删除ReshadeEffectShaderToggler.ini文件(该文件在上述步骤1中放置在那里)
  3. 下载最新版本的ReShade(请确保选择支持插件的版本)
  4. 安装 RDR2 的 ReShade 程序(ReShade for RDR2.exe),并选择 Vulkan 选项(即使你使用的是此模组的 V2.0 版本且运行于 DX12 模式下也要这样做,因为为 Vulkan 安装 ReShade 可以让 ReShade 同时兼容 DX12 和 Vulkan;而如果为 DX10/11/12 安装 ReShade,则仅能在 RDR2 的 DX12 模式下生效,无法在 Vulkan 模式下运行。因此,对于 RDR2 来说,通常推荐选择 ReShade 的 Vulkan 安装选项)。
  5. 在ReShade安装过程中的效果选择步骤要么先关闭再打开“选择所有效果”选项,以安装所有ReShade效果要么在底部输入你已放入游戏目录的该模组ReShadeRDR2fix.ini文件的路径,并选择仅下载该预设所需的效果
  6. 在ReShade安装的附加组件选择步骤中,请确保至少选择4lex4nder 开发的ReShade效果着色器切换器(通常简称为REST
  7. 对于模组版本 2.0,你还需要安装 AutoHotkey (AHK)(如果尚未安装)。下载 v2.0 或 v1.1 版本均可(我建议使用 v2.0,但我已为两个版本都提供了脚本,因此任意版本都能正常工作)。最好将 AHK 安装到默认位置,否则 AHK 的某些功能可能无法正常运行。
  8. 模组版本 2.0 中,在《荒野大镖客2》游戏根目录下,找到与你安装/首选的AutoHotkey版本匹配的.ahk脚本文件。若使用AutoHotkey v1.1版本,则选用ReShade_RDR2fix_Map_AHKv11.ahk;若使用AutoHotkey v2.0版本,则选用ReShade_RDR2fix_Map_AHKv2.ahk。根据你的AHK版本选择这两个脚本文件之一,并在你平时用于启动《荒野大镖客2》的快捷方式旁,为其创建一个快捷方式。
  9. 针对模组版本 2.0双击你刚刚创建的快捷方式以启动脚本,你可能会看到一个用户账户控制提示,要求你确认,这是脚本正常运行所需的(出于安全考虑,请查看下方关于AHK脚本的详细信息)。
  10. 安装ReShade后(以及此模组2.0版本的AutoHotkey),启动游戏(首次运行时ReShade可能需要花时间编译着色器),接着在《荒野大镖客:救赎2》的开场标题菜单中,按下Home键以打开ReShade覆盖层,然后完成或跳过教程,接着选择ReShade中的设置选项卡,在顶部附近指定一个切换效果的热键(我推荐使用PgUpEnd)。
  11. 对于模组版本2.0,您很少需要使用该热键禁用所有特效,但您可能更愿意在游戏内浏览目录时使用该热键禁用特效(请参阅下面的兼容性信息)。
  12. 模组版本 1.0 需偶尔使用切换效果热键,以便临时禁用所有ReShade效果。例如在开始菜单、设置界面、地图画面时,由于可点击选项/航点的有效区域无法与缩放后的图像完美对齐(无需担心,准星及屏幕中心元素会完美对齐。考虑到键盘/手柄UI导航不受影响,实际游戏中绝大多数活动都不会出现问题)。
  13. 离开 ReShade 的设置选项卡前,建议开启 仅加载已启用的效果 选项,以提升速度和性能。接着点击 ReShade 界面顶部的 首页 选项卡,在首页选项卡顶部两个箭头 < > 旁会显示当前加载的预设。如果此处未显示 ReShadeRDR2fix,请使用箭头切换至 ReShadeRDR2fix 预设。
  14. 针对于模组版本2.0,右键点击ReShadeRDR2fix会出现一个设置快捷键的方框,点击该方框,然后按下[键(左方括号),接着使用<;>;箭头切换到ReShadeRDR2fixOff预设,右键点击预设名称,设置快捷键时点击方框,这次使用]键(右方括号)。然后使用箭头切换回ReShadeRDR2fix预设。针对于模组版本2.0,您必须在ReShade中为这两个预设分别设置这些特定快捷键,以便AHK脚本在游戏中自动打开地图时能有效禁用效果。
  15. 确保 ReShadeRDR2fix 为当前激活的预设,并在右下角启用 性能模式,然后按 home 键关闭ReShade覆盖层(如需编辑单个效果设置,需先禁用 性能模式
  16. 对应模组版本1.0,在进入设置 > 显示 > 安全区域并将水平和垂直安全区域均设为90%(最小值)之前,使用你在步骤10中定义的热键关闭特效。
  17. 开始故事情节模式
  18. 针对模组版本2.0,加载至游戏后,随时按下你的切换效果快捷键即可禁用此模组,再次按下则重新启用(游戏启动时模组将自动启用)。只需记住首次启动游戏前务必运行那个.ahk脚本快捷方式(该脚本可在游戏期间保持后台运行,仅针对RDR2窗口且不会造成性能影响;若偏好退出,可在系统托盘找到AHK图标右键退出,但游玩RDR2时需确保其处于运行状态)。
  19. 模组版本1.0加载至游戏后,按下切换特效热键即可启用本模组,再次按下可将其禁用。模组在启动游戏时会自动生效,但建议在初始菜单界面使用热键将其关闭,待进入故事模式后再启用。一般情况下,UI安全区域会自动适配游戏中的图像缩放,但在菜单界面、开启狂暴训练器时以及全尺寸地图中,建议优先使用键盘/手柄导航操作,或直接关闭特效。
  20. 完成(该效果从现在起每次启动游戏时都会启用,需要时可通过快捷键禁用)。

兼容性

版本 2.0 兼容性信息

尚无控制器支持。我目前仅使用键盘和鼠标,但会尽快尝试添加控制器支持(如有可能)。您可以通过编辑其中一个AutoHotkey脚本文件,自行添加对您控制器的支持。请参阅置顶帖中的详细说明。

全尺寸地图仅能通过默认的 "m" 键快捷键打开。你也可以按 Esc 键,然后从主菜单选择地图菜单选项进入地图,但目前该模组还无法处理这种情况,所以请直接使用 "m" 键。如果你想将其重新映射到其他键盘按键,我可以帮你编辑 AutoHotkey 脚本以设置你偏好的按键。如果你使用的是手柄——这正是当前模组缺乏手柄支持的原因(参见前文)。

应与几乎所有内容兼容,因为附带的ReshadeEffectShaderToggler.ini用于Reshade插件ReshadeEffectShaderToggler(REST),这使得ReShade能够将此模组的效果完全注入到游戏UI之下。

对于狂暴训练师,对齐/布局问题已在此模组的 V2.0 中修复,并且在狂暴训练师的设置中有调整屏幕上位置的选项。

在游戏中浏览目录时,尝试用鼠标点击目录项会出现对齐问题(因为目录是3D对象而非UI元素)。建议在浏览目录时使用快捷键禁用ReShade效果,或者直接使用方向键和回车键选择项目。

全尺寸地图会被此模组摧毁。请使用附带的AutoHotkey脚本之一完全解决此问题,或者在打开全尺寸地图前用热键禁用ReShade特效。如果关闭地图时ReShade特效处于启用状态,特效会重新编译,这很烦人,且(极少情况下)会导致游戏崩溃。再次提醒,只需确保在打开地图前禁用特效,并在地图关闭后过一秒再重新启用特效。*或者更理想的做法是,直接使用附带的AHK脚本之一实现全自动修复,这样您就无需再为此操心。

包含的 AHK 脚本需要 AutoHotkey,这是一个很棒的实用工具,每个人都应该至少掌握一点基础知识。

关于AutoHotkey安全与防护的简要说明

我强烈建议,除非你首先在文本编辑器中查看从不可信来源下载的 AHK 脚本,并确认它们没有进行任何恶意操作,或者没有超出自己的理解范围,否则永远不要运行这些脚本。因此,我不认为自己是一个可信的来源,所以你在运行我的脚本之前,务必将它们作为文本查看。只需右键点击我提供的 .ahk 文件,选择“编辑”或“用记事本打开”,或者更好的是“用 Notepad++ 打开”,然后自己浏览脚本。这里有两个 .ahk 文件,一个适用于 AHK v1.1,另一个适用于 AHK v2.0。它们都是非常简单的热键脚本,并且附有详细的注释,解释每一步的作用。AutoHotkey 在安装时也包含了广泛的文档,因此如果你对我的脚本中的任何函数感到好奇,都可以在帮助文档中轻松查找。

即使你不是编码者、脚本编写者或AHK专家,也能轻易看出这些脚本并未进行任何可疑操作。它们需要以管理员权限运行才能向《荒野大镖客2》发送指令,因此设计为首次启动时请求管理员权限,需要用户确认UAC弹窗——这确实无法绕过,因为RDR2是受保护进程...严格来说,使用AHK v2脚本时,以UI访问权限运行(而非管理员权限)也能生效,但稳定性较差(若想尝试,请在ReShade_RDR2fix_Map_AHKv2.ahk文件中注释掉管理员权限部分,取消注释UI访问部分)。无论如何,欢迎各位自行实验,如有任何建议请不吝赐教——毕竟我对AHK完全是新手。能让这些基础至极的AHK脚本成功服务于本模组,连我自己都感到惊喜与激动。虽然本应是更基础的脚本,但RDR2嘛...总有些状况,哈哈。

版本 1.0 兼容性信息

为避免破坏游戏界面,需通过游戏内显示设置将"安全区域"配置为水平和垂直90%。若有人知道如何通过游戏配置文件将"安全区域"设置为低于90%,请告知我。编辑:我找到了进一步调低安全区域的方法,但无法在不编写.asi脚本模块的情况下轻松修改——这超出了我的能力范围。如果大家感兴趣,或许我会为Vulkan用户提供DIY细节.*已在V2.0版本中为DX12修复,该版本无需调整UI安全区域,因为模块运行在UI层之下

版本1.0还包含一个ReshadeEffectShaderToggler.ini文件,用于配合模组步行速度控制与自动行走,目的是避免该模组的步行速度UI元素被挤出屏幕,我认为这是一个必备模组。仅适用于DX12模式,因为ReShade Vulkan支持的REST附加组件在RDR2中完全无法正常工作。*在2.0版本中(针对DX12),ReshadeEffectShaderToggler.ini已扩展为包含游戏完整UI支持,修复了与原版UI的兼容性,同时兼容大多数其他添加UI元素的模组。

大多数非ReShade的模组应该能正常工作。那些在游戏原有UI框架之外添加屏幕UI元素、且不遵循UI安全区域(通常仅限部分脚本模组)的模组,其UI元素可能会被本模组推向屏幕外。若使用Rampage Trainer模组,其UI仍可正常运作但布局存在轻微错位,建议在操作Rampage UI时通过快捷键禁用本模组。*V2.0版本在DX12环境下修复了几乎所有模组的兼容性问题(Rampage Trainer仅需在V2版设置中调整其屏幕显示位置即可完全修复对齐问题,其余模组基本无影响)

我希望能让ReShadeEffectShaderToggler与游戏的着色器更好地配合,这样我就能将特效完全应用在UI之下。但即便这是可行的(该插件对DX12和Vulkan的支持有限),我也没能搞明白。无论我为当前着色器组配置了什么设置,只要我选择任何实际相关的着色器,它通常都会导致游戏崩溃。我试过几乎所有版本的插件,以及多个版本的ReShade。在DX12的V2.0版本中已修复,该版本通过REST将特效注入游戏UI之下,但我仍然无法让REST在Vulkan中正常工作。 如果有人能帮助解决ReShadeEffectShaderToggler的问题,请务必联系我

完整故事

屏幕空间阴影和屏幕空间反射无法由屏幕外的元素生成,因此屏幕边缘周围的某些阴影/反射会突然截断。尤其在倾斜摄像机时,物体以不平行于屏幕边缘的角度被截断会特别明显。这是屏幕空间效果公认的局限性,大多数游戏(除《荒野大镖客2》外)都会对此进行一定程度的补偿。

行业标准修复

  1. 过度渲染与裁剪 减少屏幕空间效果最明显伪影的首要标准方法,是超量渲染(渲染比视口尺寸更大的区域),并在输出显示图像前进行裁剪。这样,略微位于视口外的元素仍会被渲染,并影响屏幕空间效果。超量渲染会带来比实际显示所需更大的图像渲染性能损耗,必须通过控制超量渲染程度,在图像保真度提升与性能损耗之间取得平衡。进行超量渲染和裁剪时,必须妥善处理UI元素。
  2. Alpha遮罩/淡入淡出 在过度渲染和裁剪之后,仍然可能存在一些屏幕空间反射/阴影投射元素落在渲染图像区域之外,导致其可见的反射/阴影突然被切断。这些残留的伪影应通过添加边缘处的 Alpha 遮罩来柔化,或通过淡化效果而非生硬截断来减少视觉上的突兀感。

RDR2 有些特殊之处

这款游戏显然没有采用上述两种方法来弥补屏幕上大量使用的空间阴影和反射的明显缺陷。不过,说实话,我认为《荒野大镖客2》实际上在一定程度上同时采用了这两种方法,在垂直轴上屏幕空间效果看起来并不差,但水平轴上似乎出了问题。

理想情况下,Rockstar 应发布补丁修复这些效果经常出现的显示异常问题。当然,屏幕空间效果并不完美,也永远不会完美,但它们也不该看起来像垃圾。作为行业标杆的三A级开发商,理应提供标准的解决方案来弥补这些缺陷。

次优方案就是让一些有经验的模组作者来解决这些问题——他们可以设计一种方法,让《荒野大镖客:救赎2》从内部进行过渲染和裁剪,同时对屏幕空间效果(至少在水平轴上更有效地)应用alpha遮罩/淡化边缘。我坚信RDR2的底层代码中确实包含这些功能。我认为它甚至已经进行了某种程度的过渲染,但之后却进行了缩放而非裁剪之类的幼稚操作(即使禁用了分辨率缩放和DLSS/FSR)。遗憾的是,要用一个合适的RDR2模组处理这个问题,完全超出了我的能力范围。

因此,次 次 好的办法... 这个在你面前的ReShade临时解决方案修复。不过,这个方法实际上应该应用在UI元素之下(在V2.0中...确实如此),而由 *4lex4nder *制作的ReShade插件 ReShadeEffectShaderToggler (本预设仅有限使用该插件以实现与行走速度控制和自动行走的兼容性(在V1.0中,以及在V2.0中用于其他所有功能)**),应该能够处理此问题(确实可以,且在V2.0中已针对DX12修复)**,但我一直无法在不导致游戏崩溃的情况下让它有效运行 但我一直无法让REST在《荒野大镖客:救赎2》的Vulkan模式下正常工作。因此,任何帮助解决与之一致问题的协助都将不胜感激。