整个系统是一项奇特的工程产物。 从外观上看,它就像一个安装在两脚架上的笨重的VR头显。 玩家必须将头靠近目镜,才能看到游戏中的动作。

这是我能达到的同时拍摄显示屏和机箱照片的极限。 实际上,游戏看起来非常清晰,而且是全尺寸!
内部则完全不同(而且非常复杂)。 因此,我认为最好先解释一下这台游戏机是如何显示图像的,然后再介绍内部硬件。
投影图像
打开Virtual Boy后,你将通过目镜看到两幅单色红色图像(每只眼睛一幅)。 到目前为止还不错吧? 有趣的地方来了: 这台游戏机没有屏幕,所以你看到的更多是一种"错觉"——让我们深入了解一下这到底是怎么回事。
解释这部分内容所涉及的主题(光学、视觉现象等)一开始可能会让人感觉困难,但我制作了一些互动动画,让这部分内容更有身临其境的感觉。
扫描仪

游戏机鸟瞰图。
第一个开关是"对焦滑块",下面是"IPD刻度盘"。
这台游戏机的大体积可以归功于扫描仪,它占去了游戏机的很大一部分。 扫描仪是Virtual Boy显示图像的区域。 它由两个显示单元组成,每个单元独立投射一帧图像(总共两帧,每只眼睛一帧)。
显示单元是所有"魔法"发生的地方,由以下部件组成:
- LED单元: 包含224个垂直堆叠的红色LED以及控制每个LED的必要电路。
- 透镜: 折射LED发出的光线。
- Virtual Boy 的外壳顶部有一个对焦滑块,用于将镜头移近或移远LED。 这样,用户就可以根据自己的焦距调整游戏机(防止图像模糊)
- 一面镜子: 反射来自透镜的光线,并将其照射到用户的眼睛上。 此外,由于连接了一个音圈电机,该组件将不断摆动。 该电机由伺服控制装置管理,伺服控制装置是一块独立的电路板,能以50Hz的频率发送电脉冲。
- 总之,这是游戏机中一个非常复杂和脆弱的区域,因此安装了一个光中断器(photo interrupter,一种光传感器)。 它将从反光镜观察到的振荡情况报告给伺服控制装置,伺服控制装置则反过来监测振荡情况并进行必要的修正。
聚焦滑块旁边有一个IPD刻度盘(旋钮状开关),用于调整两个显示单元之间的距离。 这样做是为了使显示器适应用户的瞳距。
机械原理

Animation available in the modern edition
摆动镜角度随时间变化的基本表示(以非常缓慢的动作)。
左侧和右侧 LED 灯分别在红色和蓝色时段工作(激活)。
在灰色时段,没有 LED 工作(空闲)。
为简单起见,这里表示的角速度是恒定的(但实际情况并非如此)。
现在,我们已经识别了每个组件,让我们来看看Virtual Boy是如何向我们的眼睛显示图像的。
如果你之前没有注意到,这里没有任何点阵显示器,那么为什么我们能从目镜中看到二维图像呢? 与显像管(CRT)显示器的功能类似,显示装置也在改变我们感知图像的方式:
- 事实上,镜面的摆动可以使一列LED在我们的视野中水平移动。 镜子的角度经过精心设计,可将 LED 灯放置在384个不同的"列位"上,这些柱位分布在我们的视野中。
- 人的视觉是对数的,而镜子的振荡频率为50Hz(每个周期为20ms)。 由于速度太快,我们最终会感觉到384列LED同时发光(视觉暂留效应),直到镜子停止摆动。
- 所有这一切都与LED控制器完全同步,每当镜子轻微移动时,控制器就会更新每个LED灯。 这样,我们就能从目镜中看到一幅完整的画面。
在实际操作中,所有这些原理都需要满足一些条件:
- 只有当反射镜的角速度保持稳定时,LED灯才会工作(换句话说,当反射镜改变方向时,LED灯不会工作)。 这可以看作是CRT显示器的活动状态。
- 关于前一点,镜面的角速度不能保持恒定(因为镜面不能瞬间改变方向,被视为 "稳定 "的时间段会受到扰乱其速度的力)。 为了解决这个问题,Virtual Boy在内存中存储了一个名为"列位表"(Column Table)的数值列表,用于指示每个列的间隔时间,以平衡"LED列"曝光时间的过长和过短。
- 别忘了,由于我们有两个显示单元(每只眼睛一个),因此整个过程必须进行两次。 不幸的是,两个显示单元不能同时获取能量和数据,因此每个显示单元在不同的显示时段工作(不同步,相差10ms)。 我们并没有注意到这一点(又一个错觉!)。
显示

Animation available in the modern edition
第一个LED单元在特定时间段内工作的简化示意图。 请注意LED灯在活动期间如何开始显示帧缓冲区的每一列。
与以前以CRT显示器为模型的视频芯片(即PPU和VGP)相反,Virtual Boy上的图形不是即时渲染的。 游戏机上的图形芯片将处理过的帧发送到内存中的帧缓冲器,然后将帧的每一列发送到LED阵列进行显示。
一旦伺服电路板检测到显示时间到了,图形芯片就会开始将帧缓冲器中的像素列逐一发送到那224个垂直堆叠的LED上,并巧妙地保持同步,这样LED在显示期间就会显示384列。 因此,游戏机的"屏幕分辨率"为384x224像素。
此外,我们还需要存储两个帧缓冲器,因为每个帧缓冲器都将用于不同的显示单元。 图形子系统还采用了双缓冲和其他特技(稍后将在"图形"部分提及)。 因此,现在只需记住数字帧是如何发送到LED的。
活动期

Animation available in the modern edition
另一个简化动画,这次展示了镜子的摆动如何使LED灯的光线偏向使用户最终看到正确的的画面。
因此,这种设计会有一些活动显示期:
- 活动显示:在此期间,LED从帧缓冲器中提取图像,没有任何东西可以干扰它。
- 活动显示2:与之前相同,但现在另一个显示单元正在工作。
- 绘制空闲:LED灯都不工作,镜面角速度不稳定。
这个周期每秒重复50次(因此刷新率为50Hz)。 这意味着每帧画面,CPU和GPU大约有10ms的时间来更新用户看到的画面。 实际上,任天堂的工程师们实现了更复杂的功能。 我将在"图形"部分再次深入解释这一点。 但现在,我希望您能很好地理解Virtual Boy是如何巧妙地利用廉价硬件生成图像的。
一些评论
以上是对光学如何将一条垂直线变成一幅图像的简要说明。 如果您拥有或以前读过有关Virtual Boy的文章,您可能会想知道3D图像是什么时候出现的。 我只想说明一点,前面的解释都与这种效果无关。 我之所以提到这一点,是因为过去我曾在很多地方看到有人认为振荡镜是产生"深度感知"的原因,但根据我在这项研究中收集到的所有信息,我认为这种说法并不准确。
既然如此,我认为是时候讨论一下3D现象了......
创造三维视觉
在Virtual Boy的市场推广过程中,人们对这款游戏机可以投射出"三维世界"这一事实大肆宣传。 我指的不是显示3D多边形的图像(如其他第五代 游戏机),而是实际的深度感知。
简而言之,Virtual Boy依靠立体图像来实现这种错觉 。 因此,这套系统不仅能玩弄我们的视觉,投射出完整的图像,还能让我们认为某些图画离其他图画更近或更远!
马里奥网球(Mario's Tennis)(1995)这种技术非常简单: 在显示的两个画面中(每只眼睛一个画面),有些元素会在水平方向上略微偏移,因此当我们试图用两只眼睛去看这些元素时,大脑会认为它们比其他元素更近。 这取决于元素移动的方向。
向眼睛中心移动的物体(在左视框中向右移动,在右视框中向左移动)会显得更近,而远离眼睛中心的物体则会显得更远。 最后,没有移动的物体会出现在两个画面之间。 这种方法被称为立体视差。
立体视差的缺点之一是眼睛疲劳。 游戏提供了"自动暂停"系统,提醒用户每30分钟休息一次,从而缓解了这一问题。 任天堂还在包装和文档中写下了各种警告信息,以防止出现严重情况。 无论如何,3D效果是无法关闭的。


