苹果新设备的机内渲染分辨率不匹配屏幕物理分辨率

起因

从 iPhone 4 开始,苹果开始推行 Retina 显示屏的概念,即:内容尺寸不变,以四倍的精度(2x 长度)来渲染。此举掀起了苹果设备屏幕革新的革命,Retina 显示屏从 iPhone 逐渐被搬到到 iPad、iPod、MacBook 和 iMac上。

在 2012 年苹果发布配有 Retina 显示屏的 MacBook Pro 之前,旧型号的 MacBook Pro(肥 Pro)一般允许用户在购机时选择不同的屏幕分辨率,例如 15 寸的肥 Pro 就有 1440×900 和 1680×1050 两种选择。更大的分辨率会让屏幕上显示更多的内容,当然也会让屏幕上的内容变小。

在 Retina 时代,苹果取消了“同尺寸多分辨率”的配置,转而在系统内通过软件缩放的方式来变相实现多种分辨率的效果。当原本四个像素当一个像素用时,尤其当正常距离下人类已经分不清单个像素的时候,屏幕显示更多的内容就不会造成内容的缺失。以下是 15 英寸 MacBook Pro Retina 所提供的缩放等级:

渲染分辨率 等效分辨率
2048×1280 1024×640
2560×1600 1280×800
2880×1800(原始) 1440×900
3360×2100 1680×1050
3840×2400 1920×1200

当设置分辨率高于物理分辨率时,依然会以 2x 的方式渲染,再缩放到屏幕上。

苹果第一次默认采用这种策略是在 iPhone 6 Plus 上。iPhone 6 和 6 Plus 的发布打破了传统的四倍精度模式。在 iPhone 6 上,苹果依然坚守传统的 2x 渲染方式,其 Retina HD 显示屏的物理分辨率很拗口(1334×750)。但是在 iPhone 6 Plus 却选用了一个很传统的分辨率:全高清(1920×1080)。

不像大部分无良 Android 厂商,当苹果把设备屏幕做大时,不会简单地把屏幕上的内容放大变成老人机,而是会让屏幕上显示更多的东西——不止如此,它还要保证在不同尺寸的屏幕上,同样大小的按钮实际上看起来也要一样大。全高清的分辨率如果依然按照传统的 2x 渲染,会让屏幕上的内容变得过大,而 3x 又会过小。因此苹果选择了一个折衷方案:让设备以 3x(736×414) 的分辨率(其结果为 2208×1242)渲染屏幕上的内容,再缩小到 1920×1080 的屏幕上。

这样的好处是:
1. 简化开发者的工作,使其只需要以 3x 缩放来准备位图资源,而非使用 2.61x 这个真实但是蹩脚的缩放比例;
2. 让屏幕上的内容看起来不会过大也不会过小;
3. 在播放全高清的视频资源时可以通过软件处理来实现点对点显示;
4. 大部分人看不出来显示并非点对点,反而因为 ppi 的提高让人觉得屏幕更清晰。

弊端也显而易见:
1. 几乎所有内容都不会点对点显示,因此如果特别仔细看的话,状态栏上的电池图标下边缘会有些模糊;
2. 提高机内渲染分辨率也会随之提高 GPU 的压力,因此搭配史上最烂的 iOS 8 就导致 iPhone 6 Plus 在日常运行时也时常卡顿;

结果

自从在 iPhone 6 Plus 上尝到甜头以后,iPhone 6s Plus 和 iPhone 7 Plus 也保持了这个优良传统。而随着 GPU 性能的不断跃进,性能的问题得到了解决后,苹果决定在 MacBook 上如法炮制,于是就有了:

产品 物理分辨率 默认渲染分辨率
iPhone 6 Plus 1080×1920 1242×2208
MacBook (12 inch) 2304×1440 2560×1600
MacBook Pro 2016 (13 inch) 2560×1600 2880×1800
MacBook Pro 2016 (15 inch) 2880×1800 3360×2100

上述四种产品的出厂渲染分辨率和物理分辨率都不匹配,再加上苹果从硬件上实现了更窄的屏幕边框,就做到了“屏幕分辨率不提升的情况下提升屏幕分辨率”这种看似 bug 实则合理的事。

对用户的影响

对于一般用户来说,除非特别说明,根本不会意识到问题的存在。由于“单个像素已经无法被视网膜识别”,理论上屏幕上的内容物论如何放大缩小,对内容的精度都不会产生影响。这在非 Retina 时代是不可能实现的。

对于强迫症用户,在 Mac 上可以随时通过系统设置将渲染分辨率与物理分辨率进行匹配,甚至是在旧机型上也可以效仿这样的做法来扩大屏幕空间。但是需要注意的是由于前几代 MacBook Pro Retina 的核心显卡性能一般,这样做会损失一定的性能比降低电池续航时间。

iPhone Plus 用户可以在系统设置中开启“放大视图”来让 iPhone 以 4.7 寸机型的有效分辨率(3x)来渲染屏幕内容,这样会将屏幕上的内容放大。

发布者:王跃琨

Digital Asshat

%d 博主赞过: