Hacker News 中文摘要

RSS订阅

我为何如此热爱软件渲染 -- I Love Software Rendering

热爱软件渲染。很久以来最好的磁盘操作系统(DOS)体验是雷神之锤(Quake)在其软件渲染器下以800×600、锁定60fps运行在我的戴尔(Dell)OptiPlex 380上,这是见过DOS游戏表现出的最好画面之一。多数人对这些游戏的记忆并非如此。90年代,你要么在低分辨率下用软件运行,要么买3D卡玩加速版。如今还有第三种选择:在足够快的机器上运行软件渲染器,把它推到当年没人能用的分辨率。

正文

我喜欢软件渲染。很长一段时间以来,我最棒的 DOS 体验就是在 800×600 分辨率下用 Quake 的软件渲染器,在我的 Dell OptiPlex 380 上锁定 60fps 运行。这是 DOS 游戏画面里最好看的表现之一。

这和大家记忆中这些游戏的样子不太一样。在 90 年代,你要么用软件渲染在很低的分辨率下跑,要么买一块 3D 卡玩加速版本。现在还有第三种选择:在一台足够快的机器上跑软件渲染器,把它推到当年根本没人能用的分辨率上。

软件渲染是什么

在软件渲染的游戏里,CPU 负责绘制每一个像素。没有 3D 卡参与:游戏用自己的代码算出每一帧,然后直接写进显存。Doom、Duke Nukem 3D、Blood 和最初的 Quake 都是这么工作的。

3D 卡出现后,很多游戏都有了加速版本。GLQuake 在 Quake 之后推出,Blood 和 Tomb Raider 也加入了 3dfx 模式。这些版本把绘制工作交给显卡,画面看起来也不一样。

我为什么喜欢这种画面

它很锐利。 软件渲染器通常逐个像素地采样纹理,所以每个纹理像素都保持清晰的方块。早期的 3D 卡用双线性过滤来平滑纹理,这在 1997 年看起来很惊艳,但在我现在的眼里,它让一切都变得柔和、模糊。

墙上的 Quake 符文,每个纹理像素都是清晰的方块

它很有颗粒感。 这些游戏大多运行在 256 色下,光照通过查找表映射到那个调色板里。阴影是以可见的台阶式衰减,而不是平滑的渐变。严格来说这是色彩断层,是一种局限。但实际上,它给了这些游戏一种粗糙、肮脏的质感,我很喜欢,而硬件渲染会把这种质感抹平。

Quake 中熔岩透过肮脏石墙的开口发光

Quake 中一只拿着链锯的食人魔站在熔岩池上方的岩架上

它符合这些游戏的制作方式。 Quake 最初发布时就带着软件渲染器,GLQuake 是后来才有的。Doom 和 Build 引擎的游戏从一开始就是围绕软件渲染器设计的。

软件渲染并不总是更好的选择。当我让一块 Voodoo 2 在现代 PC 上跑起来时,Blood 在 3dfx 模式下跑得很快,但 VESA 软件模式的画面其实更好看。Tomb Raider 则相反:它的水下部分在硬件加速下比 DOS 软件渲染器明显更好看。所以这只是偏好,不是铁律。但对于我关心的大多数游戏,我还是会选软件渲染器。

这也不只是怀旧。Ion Fury 是 2019 年的一款 Build 引擎游戏,它仍然附带软件渲染器。

问题在于:它需要一台很快的 PC

软件渲染的开销随 CPU 走。多出来的每一个像素都是处理器的活儿,所以很多晚期 DOS 游戏提供的高 VESA 分辨率,在当年的硬件上根本跑不动。

现代硬件能扛下大部分情况。在 OptiPlex 380 上,Quake 跑 800×600 能锁定 60fps。但最吃力的游戏仍然会让非常快的机器也感到压力。在 Rasteri 关于 Portwell RUBY-9719 的视频里,他展示了 Build 引擎游戏在高分辨率下需要高得多的性能,甚至一块 3.3GHz 四核 Xeon “都不足以在完整的 1600×1200 下运行 Shadow Warrior”。

所以,如果你想看到这些游戏最好的样子,你就需要一台尽可能快、同时还能运行它们的机器。

为什么它需要原生 DOS

在现代 PC 上也有别的办法实现软件渲染。Doom 和 Quake 的开源移植版能在 Windows 上跑软件渲染器,Ion Fury 本身也在 Windows 上原生运行。它们都很好。

我想要的是原始 DOS 版本在真实硬件上以最初发布的方式运行。DOSBox 是现成的替代方案,但有些 DOS 游戏在 DOSBox 里会出问题,而在真实硬件上它们的行为完全符合预期。

这还留下一个问题:声音。一台跑原生 DOS 的快机器需要一块游戏能识别的声卡,而现代 PC 并没有。那就是另一个故事了。

值得一试的游戏

  • Quake,用软件渲染,分辨率 800×600 或更高
  • Duke Nukem 3D 和 Blood,这两款 Build 引擎游戏,用高 VESA 分辨率
  • Screamer

Duke Nukem 3D 第一关的一条城市街道

Duke Nukem 3D 商店里的一只猪警察

评论

讨论气氛是怀旧与技术考据交织:多数人借文章怀念未过滤的低分辨率像素纹理,并把它归功于软件渲染,但高赞评论指出这其实只是关闭抗锯齿或纹理过滤的结果,与现代 GPU 或软件渲染的优劣关系不大。真正的分歧在于,这种像素锐利美学究竟是软件渲染独有的优势,还是任何现代管线都能关掉的一个滤镜选项,以及当年的 CRT 与怀旧滤镜如何放大了它的吸引力。

认为像素化只是关闭了抗锯齿,并非软件渲染独有

  • 高赞评论澄清,作者喜欢的锐利画面其实可以通过在现代 GPU 上关闭空间抗锯齿或纹理过滤来实现,并不是软件渲染的专利;软件渲染当年被淘汰也不是因为画面糊,而是 CPU 还要负责游戏逻辑等任务,线性代数运算被移交给了 GPU 着色器,而现代软件渲染器(如 UE5 Nanite、LLVMpipe)本身既不像素化也不要求回到 DOS。(高赞) > 这根本不是软件渲染,只是关掉了空间抗锯齿,现代游戏里照样能关;软件渲染被淘汰是因为 CPU 还要干别的事(@deltapdelta_x)

怀念未过滤纹理的锐利颗粒感,反感早期 GPU 的双线性模糊

  • 许多读者共鸣于作者的审美,喜欢低分辨率纹理那种像素分明、无插值模糊的颗粒感,觉得 Voodoo 等早期 3D 卡带来的平滑带有一种廉价感;即便后来习惯了彩色光照,他们依然百分百怀念未过滤的老画面。(较多人) > 我至今仍百分百怀念未经过滤的低分辨率纹理,当年在 Voodoo2 上看到双线性过滤的模糊效果时立刻就反感了(@Pxtl)

认为软件渲染的真正价值在于调试透明、无驱动负担与多核/离线渲染

  • 撇开画面风格,不少人看重软件渲染带来的确定性:没有驱动怪异、可在调试器里逐像素验证,且早年通用 CPU 能靠软件实现任意像素效果,比固定管线 GPU 更灵活,也让 Doom 这类游戏能跑在各种设备上;如今在桌面应用和 VFX 里,软件渲染不占用 GPU 资源、更稳定且能处理超大场景,现代多核实验(如在 Plan 9 上跑 Quake 2)甚至开始探索分布式软件渲染。(较多人) > 写软件光栅化器最棒的就是能在调试器里单步走完整个管线,没有驱动怪异或着色器编译问题,像素错就是你的数学错(@coppercrisp62)

认为像素复古感其实是 CRT 与怀旧滤镜的错觉

  • 少数人提醒,当年的显示设备是 CRT,现在看到的锐利像素在当年实际会显得更柔和、更模糊;也有人认为这种复古外观本身并不真的吸引人,只是人们借它怀念责任更少、生活更轻松的年轻时光。(少数人) > 那时候我们愿意为今天的图形而死,现在这种复古外观被欣赏,其实它总体并不那么吸引人,没什么能免于怀旧(@zoeysmithe)

承认现代图形体验更好,老美学只是怀旧的一种

  • 有从初代 DOOM 一路玩到赛博朋克 2077 的老玩家指出,实时光追、4K/60、动态光照与反射大幅增强了游戏体验,pre-Voodoo 的老 DOOM 美学虽然不错,但 Voodoo 那种平滑确实显得廉价;他们欣赏老画面,却并不想回到只有软件渲染的时代。(少数人) > 作为从初代 DOOM 玩到赛博朋克 2077 的老玩家,实时光追 4K/60 的动态光照和反射大大提升了体验,不过 pre-Voodoo 的老 DOOM 美学确实也不错(@dekhn)

有价值的补充

  • 早期游戏为避开昂贵的线性代数运算想出过各种 hack:比如 Marathon 允许上下看,其实并没有真的倾斜相机,而是对视野做畸变再垂直滚动渲染目标,类似一直看竖屏中间的三分之一,所以游戏根本不允许你直直地往上看或往下看,否则梯形变换就会露馅。(@shadowgovt)
  • 现代多核 CPU 让软件渲染有了新玩法:在 Plan 9 衍生系统 9front 上,由于没有 GPU 支持,Quake 2 靠引擎内软件渲染全帧再交给 devdraw 显示,甚至有人通过 rcpu 在远程多核机器上渲染、把画面传回笔记本,探索多核并发 3D 软件渲染与分布式游戏。(@MisterTea)
  • Unreal Tournament 当年也带软件渲染器,并且有一种有趣的抖动效果。(@IshKebab)
  • DOS 时代多核毫无用武之地:文章提到四核 Xeon 都跑不满 Shadow Warrior,但其实在 DOS 下另外三个核根本没事干,这一吐槽点破了那个单线程时代的性能瓶颈。(@ale42)