围炉Go

游戏怀旧灌水,风渡平生友

Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!

冒险等级 >
lv4:骁勇善斗的战士
moli3976.5公会排位:26排位公会授予36位冒险者A级手册与特权
- 职业专精 -
吟游诗人

吟游诗人

投币

|投币:0回|获赏:0回

书接上文

大部分DOS游戏的图像分辨率为320x200,因为很多DOS游戏的图形部分使用了VGA标准下的Mode 13h模式制作。320x200(16:10)的图像,是如何最终在当时主流的4:3的显示器展现出来的呢?

Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图1-围炉Go网站Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图2-围炉Go网站
DOSBox下原始比例画面(左)和纠正宽高比后的画面(右)

大部分人看到16:10和4:3这两种比例,会直觉得会认为这两者有冲突,是因为先入为主得默认了每个像素的长宽比为1:1。在LCD(液晶)显示器上确实如此,而在DOS游戏时代普遍使用的CRT(显像管)显示器上却并不是这样。
Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图3-围炉Go网站Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图4-围炉Go网站
屏幕后面有个大屁股,是CRT显示器的明显特征,而LCD显示器则轻薄许多

LCD 显示器

简单来说,LCD显示器的屏幕由一个个小格子组成,每个小格子包含红绿蓝三色光源,通过改变每个小格子的电压控制光源发出不同的光,从而组合出各种颜色。
Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图5-围炉Go网站

一个典型的Full HD显示器的分辨率为1920x1080(即显示器原生分辨率),可以简单得理解为屏幕上有1920x1080=2'073'600个小格子,每个格子长宽比1:1,整个屏幕的长宽比16:9。

假设电脑里的一张分辨率1920x1080的图片,这张图片有2'073'600个像素点(Pixel),每个像素点的色彩信息经由电脑/显卡传给显示器,显示器接受到每一个像素点的信息,调整屏幕每个小格子的电压,将对应的色彩显示在屏幕上。

如果电脑里图片的分辨率大于或小于1920x1080,这张图片又要全屏显示在分辨率为1920x1080的屏幕上,那么电脑就要在把图片信息传输给显示器前,对图片进行一定的缩小或放大。在这个意义上,将游戏的分辨率设定为显示器的原生分辨率,将会取得最佳的显示效果。

通常60帧的刷新率下,屏幕上每秒显示60幅画面(共约一亿两千四百四十一万个像素点信息),120帧就是每秒120幅。不难想象,在LCD显示器上所显示的每一个画面,背后都是庞大的数据信息,所以在不断发展的传输协议中,数据传输能力的提高是一个重要的指标(HDMI1.0 3.96Gbit/s -> HDMI2.1 42.0Gbit/s)。

CRT 显示器

回合来到CRT显示器这边,CRT显示器的运行方式与LCD完完全全不同。

电脑最初出现在军事、工业领域,能接触和使用电脑的都是专家中的专家。真男人编程在白纸上手写0&1这种都市传说毕竟不可考,但打孔卡确实某种意义上算是那时的“显示设备”。

Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图6-围炉Go网站

当个人家庭用途的电脑出现时,确实需要一个普通人就能理解的显示设备作为人机交流的中介。

唔...在一块可以发光的屏幕上显示活动的文字甚至画面,听起来有点耳熟...这不就是电视嘛。

最早的个人电脑,比如1976年上市的Apple I,就可以外接电视作为显示设备。电视早在1920年左右就已经诞生,远早于电脑显示器,从诞生之初便一直延用4:3的标准显示比例,直到被高清标准取代。而电视之所以采用4:3的显示比例,又很大程度上源自当时电影的画面比例,至于电影和电视这两块屏幕之间的相爱相杀,则又是另外的故事了。
Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图7-围炉Go网站
苹果 Apple I 电脑

1981年随着IBM单色MDA显卡上市的IBM 5151单色显示器,可以看作最早的个人电脑专用显示器。在经过70年代使用电视作为电脑显示设备的铺垫后,采用4:3的显示比例作为最初电脑显示器的显示比例,似乎也顺理成章。至于之后经过十几年间MDA-CGA-EGA-VGA-SVGA-XVGA一系列迭代,这4:3的比例一直没有改变,直到CRT被LCD取代。
Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图8-围炉Go网站

 

(早期MDA、CGA显示器与后期VGA显示器工作原理略有不同,以下只以VGA显示器为例)
CRT显示器尾端(大屁股里)有红绿蓝三支电子枪,打出三色电子束,经由磁场偏转射向屏幕上的不同位置,激活屏幕上对应颜色的荧光粉。通过改变电压,影响电子束的强度,对应激活荧光粉不同的颜色,最终展现在屏幕上。为了确保电子束准确命中屏幕上既定的位置,在屏幕内侧有一块布满小孔的金属板(后期SONY特丽珑技术使用栅格取代金属板),电子束穿过小孔落在屏幕上。
Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图9-围炉Go网站Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图10-围炉Go网站

小孔之间的距离即孔距(dot pitch)越小,在同样尺寸屏幕上能呈现的像素点越多,画面约细腻,显示器分辨率上限越大。

在LCD显示器上,虽然控制电压改变每个小格子的颜色也是按照一定的顺序进行的,但电子本身的移动速度接近光速,可以近似理解为所有的小格子的状态在同一时刻改变,一幅画面上所有的像素点同时展现在屏幕上。

而在CRT显示器上,图像则是由电子束一个点一个点打在屏幕上,按照从左到右,从上到下的顺序“画”出来的。
Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图11-围炉Go网站

 

假设电脑中运行着一个使用VGA标准下Mode 13h模式制作的DOS游戏,游戏原生分辨率320x200的画面需要在屏幕上呈现出来,电子枪要做的,就是均匀地在屏幕上打出每行320个 x 200行,一共64000个像素点,最终呈现在屏幕上的画面的长宽比由屏幕本身的长宽比决定,与游戏画面的原生像素比例无关,呈现在屏幕上的画面被“拉高”了。

Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图12-围炉Go网站 Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图13-围炉Go网站

一个并不一定准确,但常常用来检验显示分辨率是否正确的方法,看游戏中的圆是否正确显示为圆
左图原生320x200(16:10),右图拉伸至320x240(4:3)

如果想在LCD屏幕上把一个320x200(16:10)的图像拉伸成320x240(4:3),需要通过软件算法人为添加320x40=12800个像素点,因为每个像素点的长宽比必须是1:1。
而在CRT屏幕上,把320x200(16:10)的图像拉伸成4:3的显示比例,只需要拉长每一行之间的间隔距离即可。于是,野生的扫描线(scanline)出现了。

Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图14-围炉Go网站

在LCD屏幕上,如果相邻的两个小格子显示的像素点是完全一致,那么这两个小格子的色彩和亮度也会完全一致,两个小格子之间不会有明显的界限。
在CRT屏幕上,显示的每个像素点色彩和亮度来自电子枪激活的荧光粉,其物理特性决定了,像素点中心最亮,往四周亮度逐渐降低,直至消失。

Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图15-围炉Go网站Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图16-围炉Go网站
左:边缘也清晰的LCD像素点
右:边缘模糊的CRT像素点

如果像素点之间的间隔过大,像素点之间低亮度区域会组成一条条的黑线,出现在屏幕上。因为人眼对垂直方向上像素密度更敏感,所以在相同像素密度的情况下,垂直方向上的低像素密度造成的横向扫描线更容易被注意到。这个画面呈现效果显然强差人意。(同时期的主机游戏上也有扫描线的问题,但与电脑游戏不同,如今在不少怀旧玩家眼中,扫描线就是原汁原味主机游戏画面的一部分,没有扫描线的画面没有灵魂)

Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图17-围炉Go网站 Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图18-围炉Go网站
主机游戏上的经典灵魂拷问,选哪个?

开发人员A:这扫描线看着有点辣眼睛,用户意见很大啊
开发人员B:像素密度低会出现扫描线影响显示效果,那么提高像素密度不就行了
开发人员A:那帮做游戏的就做了320x200=64000个像素点,哪里去找更多像素?
做游戏的:我倒是想做更大的图,你们做电脑的就给了64k内存啊
开发人员B:还蹬鼻子上眼了,给你4G内存你用得上吗
DOS Exender / VESA:在做了,在做了......
VBE / DOS/4GW:还有5秒到达战场
开发人员B:没有额外的像素点,把现有的再重复一遍不就行了
开发人员A:人才.......

倍线插值(DoubleScan)被广泛的使用在Mode 13h下320x200的DOS游戏上。每一行的像素点从320个翻倍重复成640个,200行被翻倍重复成400行。640x400=128000个像素点被电子枪均匀的画在屏幕上。
Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图19-围炉Go网站
Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图20-围炉Go网站Yesterday Once More - 玩转DOSBox - 图形篇 之二 4:3!-图21-围炉Go网站
左:DOSBox模拟扫描线,关闭倍线插值
右:DOSBox打开倍线插值

CRT显示器的另一个重要性能指标,就是每秒能在屏幕上画出多少行,被称为水平刷新率(Horizontal scan rate),单位千赫兹kHz。

早期的VGA显示器只能工作在恒定的水平刷新率下,通常为31.5kHz。这意味着每秒只能画31500行。如果在屏幕上展示的画面有400行,那每秒就可以画78.75次完整的400行。

实际中因为画完一行后,电子枪要从当前行末重新指向下一行首,最后一行画完后,电子枪要从屏幕右下角最后行末重新指向屏幕左上角第一行首,电子枪调整指向会使用掉额外的时间。

一台工作在31.5kHz下的早期标准VGA显示器,显示VGA Mode13h模式下游戏,每秒能在屏幕上画出70幅完整的画面,即垂直刷新率( Vertical scan rate)=70赫兹(Hz)。

320x200x256色画面,倍线插值到640x400x256色,以固定每秒70幅的速度,在4:3的CRT屏幕上,构造出一个个迷人的世界。

to be continued

本篇由 NashG 发布-围炉Go

40
0
来留下评论交流吧!x