描述
天际水面反射引擎修复(WREF) 是一个SKSE插件,用于修复《天际》特别版1.6.1170水反射系统中一个特定的所有权漏洞,防止因AddWater无效材质而导致的崩溃。
在某些特定的单元格切换过程中,天际可能会销毁一个水体着色器材质,而一个可复用的反射对象仍保留着其地址。当引擎随后跟踪到这个悬空指针时,它会读取可能已被其他对象占用的内存。这一情况通常不会改变任何水体视觉效果,且通常无害,但偶尔会导致看似随机的崩溃。崩溃日志有时会提及BSWaterShaderProperty(有时不会),并可能被误认为是ENB、显卡驱动或水体模组造成的问题。WREF通过为缓存的材质赋予计数引用来修复所有权错误,使该材质在天际的反射对象仍可访问期间始终保持存活,并在反射对象被销毁时释放该引用。此模组不改变水体视觉、网格、贴图、记录或游戏玩法。
范围
最确凿的崩溃发生在TESWaterSystem::AddWater的AddWater+0x697处,此时天际试图增加一个通过已释放材质访问的对象的引用计数。该机制已被直接捕获并复现。另一种较为罕见的AddWater+0x8B8崩溃类别可能与此相关,但尚未重新测试。部分后续的Direct3D和渲染崩溃也可能源于同一过期材质,但该更长的链条尚未从头到尾完整捕获。因此,WREF应被视为针对已确认引擎缺陷的精准定向修复,而非解决所有水面、ENB、Direct3D或图形崩溃的万能方案。
为什么这是测试版
WREF是一个功能完备的引擎修复方案,而非崩溃规避措施。该修复已通过结构化测试,涵盖游戏加载、正常渲染、反复水体转换、引用所有权,以及泄漏或过度释放引用的检查。在关键测试期间,Water Shader Crash Fix(此前的缓解型模组)保持启用状态,作为独立的检测工具。在游戏内路线上,该模组在WREF启用期间未发现需要拦截的过期材质,而WREF也未报告所有权不匹配或修复失败的情况。有关这些测试的具体细节,请参阅档案(见下方链接或文章选项卡)。
它仍是测试版,因为验证人群依然有限。在1.0版本之前,我们正在寻求:
- 在另一个大型模组列表或独立环境中进行测试
- 更长时间重复的细胞转换会话
- 附加参考平衡校验
- 可修复的稀有AddWater+0x8B8路线复测(如可能)
- 对已完成发布源码的进一步独立审查
迄今为止,大部分游戏内验证都是在
玛拉真言, 一个大Wabbajack模组列表,原始bug可以在其中反复重现。
已知测试版限制 - 2026年7月23日
已报告一个独立的较早的AddWater材质缓存查找崩溃,该问题发生在一个独立环境中,当时WREF被记录为活动状态。该问题不在WREF当前修复的确切反射指针路径范围内。所引用的原始日志正在独立核查中。
技术细节、来源及AI披露
- 根本原因报告书 - 完整调查记录,包括直接捕获、独立复现、强有力支持或仍有推断的内容。
- 水面反射引擎修复 - 当前源码、发布版本、技术说明、构建指南及MIT许可证。
- 水着色器崩溃修复 - 较早缓解插件来源,用于阻止已确认无效的AddWater访问,而无需修复潜在的生存周期漏洞。该插件为可选,且与WREF兼容。
使用了包括OpenAI Codex和Anthropic Claude在内的AI辅助工具,用于分析支持、代码草拟、实现、源码审查、文档编写及质量保证。结论和修复基于可检查的源码、可执行的分析、日志、转储、运行时捕获、独立逆向工程及游戏内测试。调查期间使用的诊断/原型工具存档可应要求提供。欢迎独立审查和建设性反馈。
Beta版反馈与报告
如有问题或崩溃,请包含:
- 涉及的位置或最近的细胞转移路径
- 大致的游戏时长
- WaterReflectionsEngineFix.log
- watershadercrashfix.log,如果已安装WSCF
- 如果生成了完整的Crash Logger文件,请附上该文件。
复制 WaterReflectionsEngineFix.log
重新启动前 天际,因为它在下次启动时会被覆盖。如果未生成崩溃日志,请包含Windows事件查看器中天际应用程序错误条目。权威激活指示符是
武装: WaterReflectionsEngineFix.log 中的一行。仅加载一行并不能证明修复已生效,因为在不受支持的运行时或验证失败后,WREF 仍会安全降级并保持加载状态。如需最终计数器检查点,请在退出前进行游戏内存档。请通过 Nexus 的 bug 或帖子板块,或通过 GitHub 报告问题。
成功的会话是很有价值的数据,尤其是长时间会话、反复的内外场景水环境切换,以及大型或特殊模组配置下的结果。
安装说明- 确认SkyrimSE.exe版本为1.6.1170,并且您已安装对应的SKSE64构建。
- 从此Nexus页面使用Mod Organizer 2(MO2)、Vortex或其他模组管理器安装WREF主文件。
- 安装WSCF可选文件(WREF运行不需要它,但如果你正在积极测试并报告测试版问题,它会很有帮助)。
- 启用模组,并通过SKSE启动天际。
- 请查看 Documents\My Games\Skyrim Special Edition\SKSE\WaterReflectionsEngineFix.log 文件以获取详细信息。 armed: 行。
已安装的文件:
SKSE/Plugins/WaterReflectionsEngineFix.dll
SKSE/Plugins/WaterReflectionsEngineFix.ini
不存在ESP、脚本、存档编辑、资源替换或存档数据。无需开新档或清理存档。仅在《天际》关闭时安装、更新或移除DLL文件。
主要特性- 修复了引擎错误的根本原因。 引擎缓存的水材质在引擎仍引用时不再能被销毁,从而防止了AddWater无效材质导致的崩溃。
- 保守处理引用。 WREF仅释放其记录为成功获取的匹配引用。
- 记录最少的生命值指示。 启用小型摘要计数器,以便测试版报告分析能够发现所有权失败或不平衡问题。
- 无视觉或玩法修改。 水资源记录、着色器、纹理、ENB设置、反射设置和存档均未受影响。可随时添加或移除,安全无忧。
- 可审计的发布版本。 该包内含一份构建清单(BUILD-MANIFEST),其中包含SHA-256文件哈希和符号标识符,以便将报告与确切的DLL匹配。源代码采用MIT许可证。
默认配置文件(INI):
[通用]
EnableReflectionsMaterialRefcount = 1
LogRefcountSummary = 1
SummaryEveryN = 512
大多数用户在测试期间应保持这些默认设置不变。
需求- 天际特别版 1.6.1170
- SKSE64 适用于《上古卷轴5:天际 特别版》1.6.1170
- SKSE插件地址库
喊话阿罗纳维奇 独立的逆向工程师与协作者。他的指令级分析映射了该漏洞背后的关键引擎行为,排除了不安全或不完整的修复方案,为修复提供了关键约束和连接点,并帮助加强了0.9.2版本中引入的逐对象所有权处理。
Bcoop - Scrolls of Schtevie模组列表的开发者兼专职实地测试员,以无限的耐心,在我们众多不断变化的诊断工具中,跑遍了多得离谱的莫萨尔崩溃测试路线。你的牺牲将永远铭刻在水着色器地狱的大厅之中。
塔莉娅 提供了相关CTD证据的现场测试员,帮助确定了受影响崩溃家族中较罕见的分支。
感谢这里的每一个人
模组博德洛 Discord 有人分享了神秘的涉水崩溃,分析了崩溃日志,再次跑过同样的水路,测试了新旧存档,或是在答案仍不完整时忍受了诊断版本。一如既往,感谢
HerrSchtevie 为了这些令人惊叹的模组列表和
桥火者 感谢在我们无数个小时的水体着色器难题中给予的无尽支持与同情。