修改 d3d9.dll 以强制对所有纹理进行 AF
Posted
技术标签:
【中文标题】修改 d3d9.dll 以强制对所有纹理进行 AF【英文标题】:Modifying d3d9.dll to force AF to all textures 【发布时间】:2020-06-22 18:58:21 【问题描述】:所以我想使用修改后的 d3d9.dll 使旧游戏在更新的视频驱动程序上看起来更好,该 d3d9.dll 将位于主游戏父目录中。
随着 400 系列 nvidia 卡的出现(也许是 amd,尽管我尚未确认),驱动程序发生了一些变化,否则默认情况下会使旧游戏看起来更糟。这些变化是(从通过 PM 在 nvidia 论坛上提供的信息解释):
从 400 系列 Geforce 卡和相关的 nvidia 驱动程序开始,当旧 DirectX 9 游戏中的场景运动时,某些纹理上会出现过度像素化。
对于低于基于 Fermi 的卡(400 系列之前),驱动程序读取以下选项: QUALITY_ENHANCEMENTS(纹理过滤 - 质量) PS_TEXFILTER_DISABLE_TRILIN_SLOPE(纹理过滤 - 三线性优化) PS_TEXFILTER_BILINEAR_IN_ANISO(纹理过滤 - 各向异性过滤优化) PS_TEXFILTER_ANISO_OPTS2(纹理过滤 - 各向异性样本优化) PS_TEXFILTER_NO_NEG_LODBIAS(纹理过滤 - 负 LOD 偏差)
其中以下内容现在在较新的驱动程序中被忽略: PS_TEXFILTER_BILINEAR_IN_ANISO(纹理过滤 - 各向异性过滤优化) PS_TEXFILTER_NO_NEG_LODBIAS(纹理过滤 - 负 LOD 偏差)
英文版,3期:
各向异性过滤不适用于某些纹理。
各向异性过滤不适用于使用负 LOD 的纹理。 设置“纹理过滤 - 质量” - “高质量”应该将 AF 应用于具有负 LOD 的纹理,但此选项部分损坏,因此不会执行此操作。只有 32 位 DX9 驱动程序损坏(即所有 32 位 DX9 游戏,大多数都是 32 位)。
设置“纹理过滤 - 负 LOD 偏差” - “钳位”已完全从驱动程序中移除,但仍作为安慰剂存在于控制面板中。
虽然我能够在 Windows 7 上找到解决此问题的方法(尽管我没有机会进行广泛测试以确认它),但需要修改的相关 dll 与 win XP 不兼容。
我的想法是,如果我可以在游戏主目录中插入一个修改后的 d3d9.dll 来解决这些问题,它将更加模块化且独立于操作系统要求。
我能够获取一个经过十六进制编辑的 d3d9.dll,以忽略来自游戏的自定义 lod 调用(进而将 LOD 强制为 0),但强制 AF 将是一个不错的补充。我发现相关的调用函数是 SetSamplerState。
那么如何为 d3d9.dll 制作一个包装器呢?我不知道从哪里开始......
干杯
【问题讨论】:
【参考方案1】:我找到了一个解决方案,基本上是具有修改 directX9 文件的内部知识的人向我提供了一组相关文件,d3d9.dll、d3d9x_24 和 d3d9x_25.dll,它们强制 AF x 16 到 DX9 游戏中的所有纹理(重新- 启用游戏构思时看到的视觉效果)。
【讨论】:
很确定您可以在 NVIDIA 控制面板或 AMD Catalyst 中强制启用所有这些功能。它具有强制图形功能和覆盖游戏中通常可用的图形设置的选项。无需编程。这可用于改善游戏的图形或性能。 (即,如果你想同时运行十几个 EVE Online 客户端,你可以在那里进行一些疯狂的调整,让这一切顺利进行,并在不支持的游戏中启用抗锯齿等)。 我试过了,但无济于事。这是因为,如问题中所述,现在在较新的驱动程序中完全忽略了以下位:PS_TEXFILTER_BILINEAR_IN_ANISO(纹理过滤 - 各向异性过滤器优化) PS_TEXFILTER_NO_NEG_LODBIAS(纹理过滤 - 负 LOD 偏差)以上是关于修改 d3d9.dll 以强制对所有纹理进行 AF的主要内容,如果未能解决你的问题,请参考以下文章