解决《穿越火线》在windows10上的模糊问题

大三亿鼠标的枪战梦想已经消逝,但仍有朝圣者耕耘在先人曾踌躇的大地上

前言

更换新电脑后,我第一件事就是把《穿越火线》下载回来。但在游戏里调整为1920*1080时,字体和界面都变得很模糊,不像是这个分辨率下应该有的画质。于是我开始寻找解决办法,发现这不仅仅是一个游戏的问题,更是 Windows 10 系统对于所有使用老开发技术的软件的优化问题。

AMD?Intel?


起初我觉得是 AMD 的问题。因为使用 i3 9100f ,GTX 1065 的 Windows 7 并没有出现模糊的问题。但是我使用的这台 lenovo region r9000x 是有独显直连功能的,开启以后 AMD 的 Radeon 核显会被屏蔽。

然后,依然很模糊。

难不成是针对图灵架构的显卡也没有优化?当然不可能。AMD 可能会有兼容性问题,但 NVIDIA 不可能会有的。(当然,事实证明这是我对 AMD 根深蒂固的偏见罢了,其实根本和硬件没关系)

封顶

首先尝试在游戏里修改多个分辨率,排除分辨率修改本身出问题的可能。

结果发现调节 4:3 下 800*600 ,画质会变得异常模糊,(题外话:判断《穿越火线》分辨率的一个简单办法是看游戏内的字体。低分辨率下游戏的字体会退化成点阵字体,这也是当年 M bug 的来源;高分辨率下则会变成标准的宋体字)证明调低分辨率是有效的。

也就是说,更像是分辨率的向上调整撞上了“墙”,使得这些操作完全无效。

WeGame 自带的修复就不说了,不可能解决任何问题的东西。

主程序

难道是兼容性出了问题?找到桌面图标对应的本地源 Win32 文件,发现这个名为"client.exe"的文件只是一个客户端。于是只能启动游戏用任务管理器找到主程序文件是"crossfire.exe",使用兼容性疑难解答调整其为“Windows 8”。

问题依然没有解决。而且可以确定,这个问题在 Windows 8 时代就已经出现了。

125➡️124

在找解决办法的同时,我也在网上找相关的资料。不过,毕竟游戏年代久远,相关的解决办法少之又少,靠谱的我想一个也没有。但当我把搜索范围扩大,将“穿越火线”替换成“所有软件”的模糊问题时。一个解决办法出现了:

把Windows10的缩放比例调整为 124%。(默认是 125%)

确实有用。

不过毕竟不能为了一个软件更改系统的规则。不过我已经积累了足够的信息了,而我与真正的解决办法之间,只有一座山的距离。

真相

解决办法:

  1. 在 "D:\WeGameApps\穿越火线" 下找到crossfire.exe,右键属性,
  2. 选择“兼容性”-“更改高 DPI 设置”,
  3. 在下面的“高DPI缩放替代”-“缩放执行”选择“应用程序”

原理

在 Windows 8 的时代,微软就意识到随着 Windows 设备屏幕分辨率的不断增大,Windows 组件也需要不断增大防止高分屏下组件过小。于是,微软在系统中加入了“缩放比例”直接放大组件,而不是开发多个适配不同分辨率的组件。对于第三方软件,微软也提供了一系列与原来不冲突的 API 方便适配。当然,像穿越火线这样的软件肯定是不会适配的。

这就带来了几个问题:

  1. 主界面直接按照原来的像素放大,变模糊。
  2. 更严重的是,软件内部分辨率调节和屏幕的分辨率永远会有“缩放比例”的缩放。

以穿越火线为例。我的电脑是 1920 *1080 的,对于 125% 的放大,游戏内能调节的最大纵向分辨率就是 1080/1.25=864 ,超过 864 的调节都是无效的。甚至调不到 1600x900。

那怎么办呢?很简单,这种 bug 出现的原因就是系统接管了应用程序的缩放调节,把缩放调节的权利还给应用程序不就可以了?就是我刚才的操作。

能否将所有应用程序的缩放权利都还给应用自己呢?目前看来是不太现实。一方面,淘汰过去的软件本身就是一种趋势,在兼容性上做最大限度的保证和恶化体验加速淘汰并不冲突;另一方面,微软似乎觉得自己有能力解决这个问题。

题外话

在我查阅相关资料的时候,我也在联想社区里看到类似的问题。不过评论区都是冷嘲热讽:

cf老掉牙的游戏还要玩?

为什么不去玩CSGO呢?

这就像是我写一段c代码出现问题发到 CSDN 上,结果一堆人讽刺我为什么不用 Python 一样。我一直觉得有 bug 就要解决,说风凉话的人可能连基本的原理都不清楚,nt一样。

赞赏