打造一台1997年的Quake PC:对GLquake进行基准测试
摘要
一位开发者讲述了他组装一台配备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年玩《雷神之锤》的PC:VQuake性能基准测试
一篇详细的回顾文章,讲述如何组装一台1997年时代的《雷神之锤》PC,并对硬件加速版VQuake进行基准测试,重点介绍Rendition Verite 1000显卡及其独特功能,包括双线性过滤和全亮度支持。
打造一台1997年雷神之锤PC:雷神之锤基准测试
针对各种1990年代CPU和配置下雷神之锤性能的详细技术分析,比较英特尔、Cyrix、AMD芯片以及DOS和Windows 95下的内存类型。
打造一台1997年的Quake PC!
作者记录了打造一台1997-1998年古董PC的过程,用于运行所有版本的Quake,涵盖了硬件选择,如Pentium MMX、3dfx Voodoo2和Socket 7主板。
像1997年那样编译Quake!
一份详细的指南,介绍如何重现使用Windows NT 4和Visual C++ 6等老式工具编译Quake的win32二进制文件的过程(就像1997年所做的那样)。
WinQuake 存在的原因及其工作原理
深入探讨创建 WinQuake(Quake 的 Windows 原生版本)的历史原因,以及它如何在 Windows 95 和 NT 上实现接近 DOS 版本的性能。