书海阁
书架 邀请 登录

第544章 简单的优化,5倍的性能提升

作者:哈娜欧菲手字数:3.7千字更新时间:2026-09-26 10:59:26
第544章 简单的优化,5倍的性能提升

雾,现代电子游戏必备技术。

只不过在如今这个90年代,大家还没有意识到雾效的重要性。

原因无他,在8位时代,想要运行一个稍大点的地图,就需要可怜的内存不断进行数据交换。

几KB的内存,完全不足以创造出庞大的世界。

哪怕是到了16位时代,大世界也仍然还是一个伪命题。

几MB的内存容量,虽然已经可以支撑那些瓦片式的大规模地图,但也就仅此而已了。

但《战地风云》不一样。

它是一个真正3D大战场。

这意味着整个世界不可能像以前那样,仅仅保存一点儿瓦片数据。

【x:0-y:1-tile:0】

以往的时候,只需要这样三个参数,就能完整保存下一整格的信息。

客户端在尝试渲染时,可以直接从内存里拉取对应的瓦片,拍在坐标所对应的位置。

当然还要加上一点位移变换和视野剔除。

这一招在2D的时代屡试不爽,尤其是在有了显卡这样一个天生擅长批量并行处理的硬件之后,瓦片的性能更是呈几何倍数上升。

如果用现在这个规格的硬件去开发《超级马力欧》,瓦片的密度甚至能翻几个倍,同时还能确保帧数稳定。

3D时代,地图的渲染逻辑完全改变了。

这也是林立新很确信3DO注定失败的原因。

3DO的赛璐璐叠画法看起来似乎很巧妙,似乎是个绕开三角形计算限制的巧思。

但真正深入到几何空间之中就不难看出,这条路绝对是走不通的。

或许在未来,等到AI技术高速发展,补帧、帧生成技术趋于完善之后,它还会重新被提起来。

但至少在短期内,在未来几十年内,三角形都是3D计算的绝对主流。

计算机理解3D空间,靠的是……顶点。

除了x和y的坐标点外,又多了一层z轴。

它们互相配合,就足以在计算机中构建一个真正包含深度的3D空间。

那么问题来了,这么多的顶点,计算机怎么知道要如何把它们渲染出来?

难道就直接无脑地连接所有点,然后糊一层蒙皮上去吗?

这群追求完美的极客们自然不会选择这么绿皮的方法。

对于不熟悉图形学的圈外人,其实在面对这个问题的时候,经常会出现一个疑问。

为什么是三角形?

如果是矩形的话,渲染起来不是会更方便吗?像瓦片那样把地图割成一块一块的,既方便又好理解。

答案就出在3D上。

在立体几何中,如果存在四个顶点,它们不一定会在同一个平面。

别说是显卡不知道怎么画出来了,哪怕是让真人来,把四个不在同一平面的点画成一个面,那也根本是无稽之谈。

怕是只有高维生物或是在非欧空间里才有可能达成吧。

但是三角形就不一样了。

图形学跟数学本质是相生的,在几何学中,三个点必定共面,四个点不一定共面。

三个非共线点可以唯一确定一个平面。

这就是3D加速显卡的立足之本了。

只要有三个点,靠索引规定如何连接它们,显卡就能轻松地为其填充像素。

想要矩形?简单,四个顶点拼两个三角形不就完了吗?

谁也没规定说一个顶点只能对应一个平面。

这么一来,不难发现3D空间的渲染便一下子豁然开朗了起来。

游戏只需要不断地绘制三角形,各种角度各种形状的三角形,当它们靠着共线不断拼接,最终就能围成一整个完整闭合的模型。

沙漠是无数个三角形,坦克是无数个三角形,枪也是,人物也是,一切的一切。

3D空间中的任何东西,都可以靠着足够多的三角形呈现出来。

不过这又产生了新的问题。

就像以前研究视差滚动动画时的经验那样。

人是通过二维的图像来理解3D空间的。

这意味着一个大活人实际上是根本不可能看到模型背面的内容的。

就算能看到,显示器到底也是个平面呐。

图形学家们自然也早早地发现了这一点,早在初代的Quake引擎中,其实林立新他们就已经大量地使用过遮挡剔除的方案。

凡是看不到的,一律不渲染。

这个思想非常重要。

它能让显卡节约大部分渲染压力,还不会影响玩家的视觉效果。

一直到后世,《Minecraft我的世界》,其实也用的这套方案。

玩得多的玩家或许经常碰到一个诡异的情况。

如果服务器很卡,或者自己因为某种BUG卡进了方块里。

自己会直接透视整个世界,看到地下乱七八糟的洞穴和隐藏的岩浆湖。

老老年间甚至在民间论坛上还流传着一套靠矿车把自己强行卡出这种状态,方便寻找矿洞的技巧。

这其实就是很经典的遮挡剔除。

MC在渲染世界的过程中,除了区块化地有限动态加载之外还会做‘面剔除’。

整个世界虽然全部由方块构成,却并不是真正以方块为单位渲染的。

每一个方块,都只会显示自己能看得到的那一面。

假设整个区块是一大片草原。

这么一剔除,绝大部分的草方块就只剩下了顶面需要渲染,直接爆省5个面的渲染开支。

当然在日后模组社群的高速发展之下,还诞生了‘遮挡剔除’之类的看不见就不渲染的方案。

不过那就是另一条路线了。

总而言之,在理解了3D渲染的基本原理之后,‘雾效’的存在,就不是什么难理解的东西了。

3D的世界需要雾。

如果300米开外起了雾,那300米以后的东西显卡就都不用渲染了。

简单粗暴。

“所以是一种……软性的视距限制?”

卡马克点了点头。

如果说雾效这个概念还有些陌生的话,说起视距限制,那就到了他的舒适圈了。

《德军总部3D》中,其实就大量进行过刻意的视距控制。

每个地图都是大量的小房间,横平竖直,到处都是墙壁。

为的就是尽可能节约视角。

雾只不过是把这些东西挪到了3D里面去。

“对,更重要的是它很自然,很多玩家甚至玩完都不会注意到有雾效的存在。”

林立新笑着说道。

沙漠比起其他地方,有一个得天独厚的优势。

“我们可以把雾效做成……沙尘暴。”

雾效只是一个抽象的笼统的概念,雾气是雾效,雾霾是雾效,云雾也可以是雾效。

区别只在于设计师如何去呈现而已。

在这方面玩的特别厉害的专家,其实是沟槽的科乐美。

不得不承认,科乐美虽然十分操蛋,但它的旗下一直都有很多有能力也有想法的制作人。

放眼整个游戏史,第一个把雾效玩出花了的,其实是科乐美的《寂静岭》。

PS1的时代,大家都知道可以做3D了,但也都知道PS1的机能实在有限。

一旦涉及到包含远景的3D空间,PS1就傻眼了。

处理器和显卡一起罢工。

你就算去吧,一秒能跑完一帧都算尽力了。

于是《寂静岭》的制作组灵机一动,想到了一招。

远景不好渲染,那就不让玩家看到远景不就完了?

直接让距离玩家几十米以外的地方起雾。

这可不是渲染完了再盖一层雾这种纯粹浪费性能的氛围渲染技巧。

而是实打实的只有一层雾,雾后面啥也没有,什么都不渲染。

结果这玩意儿偏偏还真就运行得非常不错。

玩家非但不感觉恼怒,反倒是对此赞不绝口。

寂静岭的镇子就该是这样啊!

浓雾弥漫、能见度低下、怪物徘徊……

真他妈绝了!

大概这就是优化的艺术吧。

不但不会引发玩家的反感,反倒还能成为游戏的特色,成为烘托氛围的工具。

“热霾效应让远处的模型被LOD降精度,沙尘暴可以降低远处的能见度,进一步限制视距。”

重新梳理一下整个优化思路,整个项目一下子就明朗了起来。

大地图做不做得了?

“好像……还真的有机会?”

身边的东西用高模,远了换低模,再远直接变成贴图,再远的话就被沙尘暴整个吞掉。

一来一回,不管是处理器还是显卡,在性能上都是彻底的释放。

卡马克在脑内估测了一下,得出了一个吓人的结论。

光是处理器的性能提升,大概就能怼到接近……3倍……

显卡这个主要受益者更是夸张,整体甚至能达到近5倍的提升。

这特么……简直就是魔法!

代码的魔法!

硬件?

只有见到困难就软脚的软脚虾才会被硬件的限制吓退。

我们可是GAMENOVA!

GAMENOVA从来不会输,也从来不会被这种事情限制住。

做到极致!

做到硬件的极致,做到算法的极致,做到优化的极致!

榨干硬件里的每一滴机能,不让任何一个晶体管闲下来。

这才是一位伟大的开发者该有的思想!

硬件不够用了?

先问问自己到底有没有把优化做到极致吧。

坐在靠后一些位置的迈克尔·阿布拉什目光灼灼地盯着还在滔滔不绝讲述优化思想的林立新。

他忽然理解了为什么林立新这么执着于组建一个真正的优化团队。

为此不惜开高价到处挖角。

他想要做的东西实在是太多了。

硬件的发展又不可能以一人之力就疯狂加速。

唯有优化,才是解决问题的真正出路。

此章为VIP章节,需要订阅后才能继续阅读

  • 价格:0屋币(1元=100屋币)
  • 购买
设置
作品详情 加书架
章节进度
评论 (0条)
评论加载中...
美利坚:游戏制作教父封面 正序
目录加载中...
加书架
上一章 目录 下一章

设置