跳至主要內容

游戏内特效贴图变成一根线(已修复)


问题原因

这是因为你的新 Intel CPU 新核显,新版本 Intel 核显的驱动程序,对非想天则这个旧游戏有 Bug

如:灵梦 JA 的黄色护符特效变成一根线,早苗 C 弹星星变成一根线等
如:灵梦 JA 的黄色护符特效变成一根线,早苗 C 弹星星变成一根线等

解决办法

感谢 Hagb 大佬提供的补丁,修复了新设备 Intel CPU 核显+高版本驱动导致的非想天则特效变成一根线的问题,目前处于测试阶段,有什么问题可以加作者QQ 571499084 反馈

点下方链接可下载修复补丁
修复非想天则特效变成一根线 BUG 的补丁 - d3d9_0.4.2 wined3d_9.4-staging【2024-3-10】.zipopen in new window

补丁使用方法

把压缩包内 th123 文件夹里的 3 个 dll 文件,放到你的游戏文件夹内,和 th123.exe 同目录

d3d9.dll
d3d9_custom.dll
wined3d.dll
th123.exe

这四个文件处于同一个文件夹内,即可

已知BUG

1、使用补丁后,OBS“游戏源”录制非想天则时会出现问题,换成“窗口采集”即可正常录制

2、没有这个特效变成一根线 BUG 的电脑最好不要安装这个补丁,否则可能会打不开游戏,删掉d3d9_custom.dll就可以打开了

3、使用补丁后无法使用Rep转mp4功能

一些技术解释 - 修复非想天则特效变成一根线BUG的补丁

虽然在某些较新的 Intel 集显驱动下非想天则有特效缺失,但使用其他第三方 DirectX 实现(如 WineD3D、DXVK)能够绕过这个问题。

补丁包文件:

一些细节

由于不明原因,在较新的 Intel 集显及其驱动上,微软提供的 DirectX 实现会将某些图像素材错误地渲染成一根(一些)细线。根据一些用户所说,DXVK 可以把它们正确地渲染出来open in new window

DXVK 一般在 Wine 上使用(这是一个用于在类 unix 系统上运行 Windows 程序的兼容层)。在 Wine 中,我们一般用 WineD3D 或者 DXVK 而非微软的来作为 DirectX 的实现。它们也都是兼容层,即它们自己提供 DirectX API 被应用调用,而后它们会把这些 DirectX 形式的调用“翻译”成其他类型的 API 并调用之。DXVK 基于 Vulkan,WineD3D 则基于 OpenGL。(即,应用程序把 DXVK 作为 DirectX 接口调用,而 DXVK 则调用 Vulkan 来完成和对应 DirectX 调用等价的事情;WineD3D 同理。)

这些兼容层虽然是为 Wine 提供的,但实际上也是基于 Windows API 编写,理论上来说保留了对 Windows 的兼容性,因此是有可能用在 Windows 上的。于是我分别尝试了 DXVK 和 WineD3D,发现它们都能在我的 N 卡上良好运行,因此我把它们发给受 DirectX 渲染问题困扰的用户让他们测试(直接把它们在系统层面应用是有风险的,所以要配合专门为此进行了修改的非想天则 mod 加载器,来单独给非想天则加载这些库)。

DXVK 和 WineD3D 两种方案默认配置下的测试结果

可用性

  • WineD3D:在 Wine 上是默认选择;而在所有我所知的受 DirectX 图像缺失问题的设备上,基于 WineD3D 的方案也都能在 Windows 开箱即用,然后问题也确实消失了。此外,WineD3D 也能在多显卡的环境(比如集显+独显)下,遵循用户手动指定的显卡。不过有的 AMD 集显用户反映使用了之后游戏无法正常启动。(不过问题不大,这个解决方案本来也不是面向他们的。)
  • DXVK:在 Wine 社区中被普遍认为是性能更好的选择,因此许多 Wine 发行版会把 DXVK 作为默认的 DirectX 实现。支持 Vulkan 的硬件和驱动没有那么多,因此 DXVK 的支持范围自然也小一些。有用户反馈他的设备(使用 Intel 集显)无法直接使用 DXVK。

性能

大家普遍认为 DXVK 性能比 WineD3D 的好,但这点至少在我们这里的目标用户那儿没有体现出来:我询问了几个用户,结果都是 WineD3D 的 GPU 占用率和 DXVK 基本相当,而 DXVK 占用的内存却比 WineD3D 大不少。

关于性能相当的可能的解释是:Intel 对 OpenGL 的实现较好,达到了比较好的性能。(事实上,我的 N 卡上结果中,性能从好到坏依次为 DXVK、微软的实现、WineD3D,在数值上有较为明显的差别。)

关于内存占用的可能的解释是:在测试中,DXVK 趋向于将素材放到显存中,而 WineD3D 则并不是这样,同时前者在“显存”中消耗的体积比后者在内存中消耗的体积更大。在集显的“显存”中分配,实际上也是动态分配并使用了内存,从而从结果来说 DXVK 占用总内存更大。

上次编辑于:
贡献者: ChocoFleece