美利坚:游戏制作教父 第661节
加州这破地方,一年到头的都是那么热,尤其是南加州,大太阳直接烤在地上,很容易就能看到那些热霾现象。
“你是说……把远处的东西模糊化?”
“没错。”
林立新哈哈一笑,伸手在白板上写下了第一行字。
【Levels Of Detail—— LOD】
LOD技术并不是什么新鲜概念了,早在1976年,LOD就已经在计算机图形学领域有过一定的应用。
只不过在电子游戏上使用,那还的确是头一回儿。
它的思想非常简单,每个模型都有多种精度的版本,根据玩家的距离动态切换。
离得越近,模型精度越高,细节越丰富,反之亦然。
将那些本来在远距离就难以观察到的东西全部抹去,仅保留一个极粗的低模,这就足够了。
“除此之外,我们还可以加入一个东西,跟它打配合。”
林立新再度抬起手,写下了第二行。
【Distance Fog(雾效)】
? 第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》中,其实就大量进行过刻意的视距控制。
上一篇:娱乐圈最严厉的父亲!
下一篇:太太请安分
