打造一台1997年的Quake PC:对GLquake进行基准测试

Fabien Sanglard 新闻

摘要

一位开发者讲述了他组装一台配备3dfx Voodoo显卡的复古PC,并对GLQuake进行基准测试的过程,同时讨论了硬件的小问题和性能印象。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/05/16 03:33

# 构建一台雷神之锤PC:GLQuake 来源:https://fabiensanglard.net/quake_pc/glquake/index.html 构建一台雷神之锤PC:GLQuake --- 为了玩GLQuake,我想入手那张被John Caramak称为“衡量其他一切性能的基准”的显卡\[\[1\]](https://fabiensanglard.net/quake_pc/glquake/index.html#footnote_1)。我在eBay上找到了一块“已测试”的Orchid Righteous 3Dfx Voodoo,价格贵得几乎跟它的重量相当的钻石。 [](https://fabiensanglard.net/quake_pc/glquake/3dfx_righteous.webp)这些是最早的消费级3D加速卡。它们身上有很多“手工匠人”般的细节。例如,它们完全通过一根直通线接管VGA输出,不支持窗口模式。Orchid Righteous带有机械继电器(后期版本移除了),当3Dfx卡接管或释放信号时,会发出非常响亮的“咔哒”声! 我怀疑这些机械部件是容易老化的元件。在使用期间,我一直担心这卡随时会挂掉。 所有版本的Quake都使用不同的截图格式。quake.exe用PCX,vquake.exe生成BMP,而glquale.exe用的是TGA! 第一印象 --- 我安装了最新的3DFX Voodoo Orchid Righteous驱动v3.00.00(https://www.philscomputerlab.com/drivers-for-voodoo.html)(现在理解了VxD,看驱动文件倒是挺有意思)。启动`glquake.exe`后,游戏并没有立刻开始。它先生成了一个调色板翻译文件(`15to8.pal`)。 [](https://fabiensanglard.net/quake_pc/glquake/palette.png)然后它对所有alias模型进行“网格化”。这一步将所有mdl文件转换成由`GL_TRIANGLE_FAN`/`GL_TRIANGLE_STRIP`组成的结构,并缓存到ms2(https://www.celephais.net/board/view_thread.php?id=61319)文件中。 [](https://fabiensanglard.net/quake_pc/glquake/meshing.png)我对GLQuake的第一印象很糟糕。这种感觉来自一些小麻烦和一些大问题。小问题方面,我觉得菜单比VQuake模糊。 https://fabiensanglard.net/quake_pc/glquake/menu.png而且运行时无法改变分辨率。考虑到其他版本的Quake(quake.exe、winquake.exe和vquake.exe)都支持,这个提示你通过命令行设置的分辨率画面相当烦人。 [](https://fabiensanglard.net/quake_pc/glquake/vmodes.png)如果用户把参数调成了不兼容的配置,就会看到一个粗糙的错误信息,缺乏打磨。而且,列表里的大多数模式都不支持,需要反复试错才能找出哪些可用。 [](https://fabiensanglard.net/quake_pc/glquake/crude_glquake_error.png)最终发现,在我的配置下只有640x480和512x384能用。可惜没有400x300——我本以为这是玩vquake.exe时的最佳分辨率。 情况更糟了! --- 当我开始新游戏时,印象更差了。爆炸效果看起来不错,但颜色却显得褪色。 [](https://fabiensanglard.net/quake_pc/glquake/explosion6.png)经过研究,发现不止我一个人有这种印象。只是当年的人用了更生动的说法。 > GLQuake看起来像屎。我知道有些人可能会反驳,但老实说,面对现实吧——它看起来糟透了,尤其是在NVIDIA卡上。——@Frib,《非官方GLQuake & QW指南》\[[2\]](https://fabiensanglard.net/quake_pc/glquake/index.html#footnote_2) 在quakeaddicted(https://www.quaddicted.com/engines/software_vs_glquake)上有一个关于quake.exe和glquake.exe区别的酷炫列表(纹理过滤、超亮、全亮、非方形像素、alias模型的仿射纹理映射)。 还部分解释了颜色差异的原因。 > 原版Quake(软件)引擎使用了超亮光照,这意味着光照贴图的亮度可达200%。因此,light.exe创建的BSP文件中的光照贴图亮度可达200%。而在glquake中[...]没有超亮光照,所以光照贴图中超过100%的部分都会被压平为100%。这就是为什么GLQuake在较暗的房间里看起来还行,但在明亮的区域光照就显得非常平淡。——quakeaddicted\[[3\]](https://fabiensanglard.net/quake_pc/glquake/index.html#footnote_3) 第二印象 --- 我必须理解的是,GLQuake的工作方式不同于VQuake。VQuake是为单个芯片v1000量身定制的,几乎无需调整参数就能“开箱即用”。而另一方面,GLQuake需要通过OpenGL标准来适应各种硬件,需要用户针对自己的显卡进行调优。GLQuake是自选菜单式的。 而且GLQuake的菜单上有很多选项。有些是3DFX特定的环境变量,有些是游戏引擎的cvar。John Bye(又名Gestalt666)整理了一个很棒的网站\[[4\]](https://fabiensanglard.net/quake_pc/glquake/index.html#footnote_4)\[[5\]](https://fabiensanglard.net/quake_pc/glquake/index.html#footnote_5),总结了所有内容,甚至提供了一个glquake.bat(https://fabiensanglard.net/quake_pc/glquake/glquake.bat)和一个glquake.cfg(https://fabiensanglard.net/quake_pc/glquake/glquake.cfg)(放在id1文件夹下)。 环境变量从生活质量改善(如`FX_GLIDE_NO_SPLASH`跳过3dfx启动画面)到深度修改(如从50MHz超频到56MHz `SST_GRXCLK=56`)。对我来说最大的改进是修复了颜色:`SST_GAMMA=1.2`。 `` SET SST_SCREENREFRESH=72 SET SST_SWAP_EN_WAIT_ON_VSYNC=0 SET SST_VIDEO_24BPP=1 SET SST_GAMMA=1.2 SET FX_GLIDE_NO_SPLASH=1 SET FX_GLIDE_SWAPINTERVAL=0 SET SST_FASTMEM=1 SET SST_FASTPCIRD=1 SET SST_GRXCLK=56 `` 我不确定是否推荐超频到56MHz。这显卡跑得*非常*热! [](https://fabiensanglard.net/quake_pc/glquake/explosion3_gamma.png)颜色也可以通过诸如IdGamma\[[6\]](https://fabiensanglard.net/quake_pc/glquake/index.html#footnote_6)这样的程序来修复,它会重载调色板。 环境变量控制3dfx芯片,而Quake的cvar配置引擎。我最喜欢的选项之一是禁用双线性过滤,从而看到那些可爱的像素。 [](https://fabiensanglard.net/quake_pc/glquake/GL_LINEAR.png)得益于存储纹理的四路交错VRAM,3dfx上的双线性纹理过滤几乎不消耗性能。与v1000卡不同,GL_LINEAR/GL_NEAREST不影响帧率。 有很多cvar提供了性能与视觉效果的权衡。1997年令人印象深刻的一个功能是Quake能够绘制真正的投影(https://github.com/id-Software/Quake/blob/bf4ac424ce754894ac8f1dae6a3981954bc9852d/WinQuake/gl_rmain.c#L579)阴影。不过看起来这是一项实验性功能(默认禁用),因为我看到了一些彼得潘式的阴影。 [](https://fabiensanglard.net/quake_pc/glquake/shadow.png)另一个很酷的权衡是闪光配置。GLQuake可以重新生成表面以根据动态光源照明(慢,涉及CPU)。或者,它也可以利用3dfx的填充率,通过混合(https://github.com/id-Software/Quake/blob/bf4ac424ce754894ac8f1dae6a3981954bc9852d/WinQuake/gl_rmain.c#L718)一个爆炸球体来实现。后者默认启用,看起来相当不错。 [](https://fabiensanglard.net/quake_pc/glquake/gl_flashblend.png)似乎有水的alpha透明度支持,但我发现它相当有bug。此外,Quake地图必须重新处理,以便PVS包含那些在软件渲染器中本应不透明的表面。 [](https://fabiensanglard.net/quake_pc/glquake/water.png)*这本来应该是水的。*GLQuake必须找到一种方法来模拟“调色板偏移”,即拾取道具时整个屏幕短暂变黄,或受伤时变红。这在glquake中会消耗大量填充率,因为它是在整个屏幕上混合一个四边形来实现的。这被确定为性能瓶颈,可以禁用。 [](https://fabiensanglard.net/quake_pc/glquake/particles.png)在这个功能与参数的海洋中,我最终选择了较少视觉修饰、接近软件渲染器的设置,以换取高帧率。 `` r_drawviewmodel 1 // 启用/禁用绘制玩家手持的武器。 r_mirroralpha 0 // 将某些表面变成镜子。参见 readme.glquake。 r_shadows 0 // 让alias模型投射阴影。很酷。 r_wateralpha 1 // 有bug。水的alpha混合,但地图支持差。必须设为1。 gl_texturemode GL_LINEAR // 模糊或像素化纹理。 gl_flashblend 1 // 用混合模拟爆炸,而不是重新生成表面。 gl_polyblend 1 // 用GL_QUAD覆盖屏幕来模拟调色板偏移。 gl_ztrick 1 // 避免清除深度缓冲区的技巧。 gl_keeptjunctions 0 // 重新加载关卡时移除共线顶点。 gl_subdivide_size 256 // 设置天空笔刷的细分值。 `` GLQuake 规则 --- 经过所有调校,我对GLQuake改变了看法。它超酷,帧率在640x480下简直是梦想。我很喜欢。是时候跑一些基准测试了。 基准测试 --- Orchid Righteous 3dfx 基本上只支持640x480。512x384确实能用,但会显示奇怪且令人不快的垂直“条纹”。 MMX 233 MHz | MMX 200 MHz | MMX 166 MHz | MMX 133 MHz --- | --- | --- | --- quake.exe | 27.8 | 27.0 | 27.2 | 26.9 gl_quake.bat | 33.8 | 33.4 | 33.6 | 29.4 CPU频率对帧率的影响如此之小,这相当令人印象深刻。这意味着帧率主要受光栅化和像素推送到显卡的过程影响,而在glquake中,这并非由CPU完成。但由于所有的投影和裁剪都是在Glide驱动中的CPU上完成的,这可能意味着Gary的团队可能拥有id没有的王牌。毕竟,他们早在1995年就知道了后来出现在雷神之锤III(1999年)中的InvSqrt\[[7\]](https://fabiensanglard.net/quake_pc/glquake/index.html#footnote_7)。我认为可以相当肯定地说,InvSqrt\[[8\]](https://fabiensanglard.net/quake_pc/glquake/index.html#footnote_8)技巧帮助推动了3dfx 1的发挥。 为了达到极致,可以下载GLQPlus(http://ftp.oldskool.org/pub/drivers/3dfx/voodoo1/game_patches/),据说可以将帧率提升5-10+帧\[[9\]](https://fabiensanglard.net/quake_pc/glquake/index.html#footnote_9)。我不想让老家伙太累,所以没尝试。 K5 --- 和v1000一样,我想看看3dfx 1能在多大程度上让K5/6x86玩Quake。我用AMD K5 PR166做了一个基本测试。这台机器在640x480下达到了可玩的帧率:26.3fps\[[10\]](https://fabiensanglard.net/quake_pc/glquake/index.html#footnote_10)。 走向Voodoo2 --- 在Pentium 1平台上使用3Dfx Voodoo2意义不大。但这张卡我超爱,我们永远不能分开。Voodoo2体现了卓越\[[11\]](https://fabiensanglard.net/quake_pc/glquake/index.html#footnote_11)。我甚至觉得它的PCB很美。在那个年代,这张卡主宰了消费级3D,没有其他产品能挑战它的性能。我直到现在才拥有一张。尽管有时空错乱感(Voodoo2于1998年2月发布,在雷神之锤II之后),我还是决定用它。 大部分环境变量都变了(全部参见mdgx.com(https://www.mdgx.com/3dfx.htm)),所以我制作了两个启动脚本:3dfx2\_640\_480.bat(https://fabiensanglard.net/quake_pc/glquake/3dfx2_640_480.bat)和3dfx2\_800\_600.bat(https://fabiensanglard.net/quake_pc/glquake/3dfx2_800_600.bat)。glquake.cfg(https://fabiensanglard.net/quake_pc/glquake/glquake.cfg)脚本保持不变。 [](https://fabiensanglard.net/quake_pc/glquake/voodoo2.webp)Creative Voodoo2没有机械继电器。切换到3D渲染时安静得令人安心。 640x480下的基准测试。 MMX 233 MHz | MMX 200 MHz | MMX 166 MHz | MMX 133 MHz --- | --- | --- | --- quake.exe | 58.5 | 57.2 | 55.1 | 51.9 gl_quake.bat | 78.3 | 72.9 | 64.8 | 57.8 800x600下的基准测试。 MMX 233 MHz | MMX 200 MHz | MMX 166 MHz | MMX 133 MHz --- | --- | --- | --- quake.exe | 46.9 | 46.5 | 45.9 | 44.8 gl_quake.bat | 46.8 | 60.1 | 57.7 | 54.2 数字说明一切。更多基准测试请参见Voodoo2支持指南和FAQ(https://groups.google.com/g/3dfx.products.voodoo2/c/5BFm3u-je6U)。 下一步 --- 尾声(https://fabiensanglard.net/quake_pc/disclaimer/)。 参考文献 --- ^(回到顶部) \[ 1\]John Carmack的.plan文件,1998年2月12日(https://fabiensanglard.net/fd_proxy/doom3/pdfs/johnc-plan_1998.pdf) ^(回到顶部) \[ 2\]《非官方GLQuake & QW指南》(https://web.archive.org/web/20190805025615/https://www.quakewiki.net/archives/frib/glquake.htm#:~:text=Glquake%20looks%20like%20shit.) ^(回到顶部) \[ 3\]软件渲染版Quake与GLQuake的区别(https://www.quaddicted.com/engines/software_vs_glquake) ^(回到顶部) \[ 4\]GLQuake常见问题解答(https://www.oocities.org/gestalt666/faquake4.html#2) ^(回到顶部) \[ 5\]GLQuake故障排除常见问题解答(https://www.oocities.org/gestalt666/faquake5.html) ^(回到顶部) \[ 6\]idGamma与工具网页(https://www.quaketerminus.com/exe.shtml) ^(回到顶部) \[ 7\]雷神之锤3快速InvSqrt()的起源(https://web.archive.org/web/20070104021541/https://www.beyond3d.com/articles/fastinvsqrt/) ^(回到顶部) \[ 8\]快速平方根倒数(https://en.wikipedia.org/wiki/Fast_inverse_square_root) ^(回到顶部) \[ 9\]使用Voodoo与Voodoo 2 3D显卡在GLQuake中的帧率对比(https://www.soldcentralfl.com/quakecoop/compare1.htm) ^(回到顶部) \[10\]项目:无MMX的高端Win95电脑!(https://dosreloaded.de/forum/thread/2123-projekt-highend-win95-rechner-ohne-mmx/) ^(回到顶部) \[11\]3dfx Voodoo1的故事(https://fabiensanglard.net/3dfx_sst1) ---

相似文章

打造一台1997年的Quake PC!

Fabien Sanglard

作者记录了打造一台1997-1998年古董PC的过程,用于运行所有版本的Quake,涵盖了硬件选择,如Pentium MMX、3dfx Voodoo2和Socket 7主板。

像1997年那样编译Quake!

Fabien Sanglard

一份详细的指南,介绍如何重现使用Windows NT 4和Visual C++ 6等老式工具编译Quake的win32二进制文件的过程(就像1997年所做的那样)。

WinQuake 存在的原因及其工作原理

Fabien Sanglard

深入探讨创建 WinQuake(Quake 的 Windows 原生版本)的历史原因,以及它如何在 Windows 95 和 NT 上实现接近 DOS 版本的性能。