Speaking of HiDPI
Last updated on January 20, 2024 pm
前天买的 type-C 转 dp 的线终于是到了,连上我刚买的 AOC 的 Q27G3XMN(2K,180Hz,miniLED 两千以内性价比还是不错),大屏看着就是爽。
紧接着就发现不对劲,字体怎么不细腻了,仿佛在用 Windows 一般… 进而了解到 Apple 自家的 HiDPI 技术,通过 2-3 小时的摸索,我对这技术也有了进一步的了解,记录一下。
What is HiDPI
HiDPI, or High Dots Per Inch, refers to displays that have a higher pixel density compared to standard displays. In other words, HiDPI displays have more pixels per inch, resulting in sharper and clearer images. This technology is particularly beneficial on smaller screens, such as those found in laptops, tablets, and smartphones, where the increased pixel density improves the visual quality and allows for crisper text and graphics.
以上是 ChatGPT 给我的答案。顾名思义,HiDPI 指的就是相同面积上有更多的像素点,也就意味着相比于不使用这一技术的屏幕,文字会更加细腻清晰。
HiDPI 渲染并不是由屏幕提供的,而是在操作系统中实现的,这需要计算机在输出给显示器之前就把一切文字图标等采用多倍的像素渲染成更细腻的样子。当然,这样的渲染会消耗更多的 CPU 与 GPU 运算,也就会消耗更多的能源,再加上 Retina 屏设备本身还要要承担 4 倍数量的像素显示,续航的维持必然成为一项不小的挑战。有时我们感觉苹果相继推出 Retina 屏产品只是顺应趋势的必然行为,但工程师在处理器功耗与性能的平衡取舍、屏幕材料的选择与工艺设计、电池技术的革新、操作系统的优化等等方面所付出的辛苦和努力是我们难以想象的。
在我买的这个 AOC 显示器中,系统 Displays 选项中最高显示 HiDPI 的分辨率只有 1280×720。看起来仿佛是那个 13 英寸 macbookpro 的等比例放大,显示内容太少(这里有文章说 AppleSilicon 系列不支持 4K 以下显示器中有 HiDPI 选项,但这台 AOC 是有的)。我们知道 2K 的物理分辨率是 2560×1440,这里就是原本 1280×720 的显示效果下,通过横纵像素点各增加一倍来显示内容,并刚好契合当前显示器所支持的最大分辨率,也就是说 HiDPI 仅在硬件所支持的最大分辨率内进行放大。那按理来说,只要是小于 2K 的分辨率都可以通过 HiDPI 技术放大至 2K,比如在 1920×1080 下显示内容和比例在 27 英寸中是比较合适的,由 1920×1080 到 2560×1440,只需要横纵×1.3 不就行了嘛。但是需要注意的是 Apple 的 HiDPI 仅支持 2 倍关系。这也好理解,因为物理像素点自然是整数的,而二倍的提升效果也足矣。由于显示器的面积是固定的,HiDPI 的工作原理可以形象地理解为:在原本的物理像素点的基础上横纵增加一倍,从而细节得以增加,再面积整体等比例缩小四倍,从而重新呈现在显示器上。也就是说,1920×1080 就是这些像素点,1920×1080 (HiDPI)则有 4K 的像素点。对于 HiDPI 来说,分辨率(即 num×num)只是显示器显示内容多少的度量。
How to make HiDPI available
通过前面的介绍,我们知道调节分辨率的结果不过是调节比例,限制高分辨率下的 HiDPI 就是硬件本身的最高物理分辨率(比如我不能让这个 2K 屏幕显示 4K 比例),同时也与 macbook 的渲染能力有关。于我而言,在 27 英寸下显示 1920×1080 比例的效果正合适。那怎么操作呢?联想到 HiDPI 的工作原理,我只需要让 Apple 认为我这是一块 4K 像素的显示屏不就行了。
网上查询可知,在 /System/Library/Displays/Contents/Resources 中添加一个 override 文件,形式为 plist,内容即为虚拟比例,可以在这个网站制作。值得注意的是,由于之前提到的 SSV,Catalina 之后 System 文件夹为 read-only,可以通过外挂至 /Library/Displays/Contents/Resources 中同样生效。
嫌麻烦的可以直接使用比较新的 BetterDisplay,据说是 BetterDummy 的更新版,具体操作有 wiki 指导。对于我这个 AOC,就是下载软件后输入想 HiDPI-fy 的分辨率,即 1920×1080,apply 之后重启,在系统 Displays 选项中就可以选择了。实现原理也是在 /Library 中新建一个 Displays 文件夹进行更改。
开启 1920×1080(HiDPI)后,文字变得细腻多了。但是离屏幕近点又会有颗粒感。这里不得不提到一个叫 PPI 的东西。
因此在实际使用时,不能完全按照最佳观看距离计算结果去判断。显示器的最佳视距最多只能与胳膊长度保持一致,也就是 70 厘米左右。这与 27 英寸显示器的最佳视距基本保持一致。所以,27 英寸以下可按照先前计算结果,27 英寸以上显示器按照 107PPI 为最终结果。
由此,把计算结果进行修正后得到的视网膜级别屏幕 PPI 最低标准的最终结果是:
1080p 分辨率下,21.5 英寸的显示器最符合视网膜级别屏幕的要求。
2K 分辨率下,27 英寸以下的显示器符合视网膜级别屏幕的要求。
4K 分辨率下,屏幕尺寸在 41 英寸以下,均符合视网膜级别屏幕的要求,且尺寸越小,成像越细腻。
这里改后 AOC 的 PPI 就是 $\frac{\sqrt{(2×1920)^2+(2×1080)^2}}{27}=164$。如果在 1920×1080(HiDPI)和 1920×1080 模式下分别截图,需要在 PPI ≥164 的设备才能看出明显差别。