雾,现代电子游戏必备技术。
只不过在如今这个90年代,大家还没有意识到雾效的重要性。
原因无他,在8位时代,想要运行一个稍大点的地图,就需要可怜的内存不断进行数据交换。
几kb的内存,完全不足以创造出庞大的世界。
哪怕是到了16位时代,大世界也仍然还是一个伪命题。
几b的内存容量,虽然已经可以支撑那些瓦片式的大规模地图,但也就仅此而已了。
但《战地风云》不一样。
它是一个真正3d大战场。
这意味着整个世界不可能象以前那样,仅仅保存一点儿瓦片数据。
【x:0-y:1-tile:0】
以往的时候,只需要这样三个参数,就能完整保存下一整格的信息。
客户端在尝试喧染时,可以直接从内存里拉取映射的瓦片,拍在坐标所映射的位置。 当然还要加之一点位移变换和视野剔除。
这一招在2d的时代屡试不爽,尤其是在有了显卡这样一个天生擅长批量并行处理的硬件之后,瓦片的性能更是呈几何倍数上升。
如果用现在这个规格的硬件去开发《超级马力欧》,瓦片的密度甚至能翻几个倍,同时还能确保帧数稳定。
3d时代,地图的喧染逻辑完全改变了。
这也是林立新很确信3do注定失败的原因。
3do的赛璐璐叠画法看起来似乎很巧妙,似乎是个绕开三角形计算限制的巧思。
但真正深入到几何空间之中就不难看出,这条路绝对是走不通的。
或许在未来,等到ai技术高速发展,补帧、帧生成技术趋于完善之后,它还会重新被提起来。
但至少在短期内,在未来几十年内,三角形都是3d计算的绝对主流。
计算机理解3d空间,靠的是顶点。
除了x和y的坐标点外,又多了一层z轴。
它们互相配合,就足以在计算机中构建一个真正包含深度的3d空间。 那么问题来了,这么多的顶点,计算机怎么知道要如何把它们喧染出来?
难道就直接无脑地连接所有点,然后糊一层蒙皮上去吗?
这群追求完美的极客们自然不会选择这么绿皮的方法。
对于不熟悉图形学的圈外人,其实在面对这个问题的时候,经常会出现一个疑问。
为什么是三角形?
如果是矩形的话,喧染起来不是会更方便吗?像瓦片那样把地图割成一块一块的,既方便又好理解。
答案就出在3d上。
在立体几何中,如果存在四个顶点,它们不一定会在同一个平面。
别说是显卡不知道怎么画出来了,哪怕是让真人来,把四个不在同一平面的点画成一个面,那也根本是无稽之谈。
怕是只有高维生物或是在非欧空间里才有可能达成吧。
但是三角形就不一样了。
图形学跟数学本质是相生的,在几何学中,三个点必定共面,四个点不一定共面。 三个非共线点可以唯一确定一个平面。
这就是3d加速显卡的立足之本了。
只要有三个点,靠索引规定如何连接它们,显卡就能轻松地为其填充象素。
想要矩形?简单,四个顶点拼两个三角形不就完了吗?
谁也没规定说一个顶点只能映射一个平面。
这么一来,不难发现3d空间的喧染便一下子壑然开朗了起来。
游戏只需要不断地绘制三角形,各种角度各种型状的三角形,当它们靠着共线不断拼接,最终就能围成一整个完整闭合的模型。
沙漠是无数个三角形,坦克是无数个三角形,枪也是,人物也是,一切的一切。
3d空间中的任何东西,都可以靠着足够多的三角形呈现出来。
不过这又产生了新的问题。
就象以前研究视差滚动动画时的经验那样。
人是通过二维的图象来理解3d空间的。 这意味着一个大活人实际上是根本不可能看到模型背面的内容的。
就算能看到,显示器到底也是个平面呐。
图形学家们自然也早早地发现了这一点,早在初代的quake引擎中,其实林立新他们就已经大量地使用过遮挡剔除的方案。
凡是看不到的,一律不喧染。
这个思想非常重要。
它能让显卡节约大部分喧染压力,还不会影响玩家的视觉效果。
一直到后世,《ecraft我的世界》,其实也用的这套方案。