游戏是怎么优化的?

作者:jcmp      发布时间:2021-04-24      浏览量:0
简单通俗地回答的话,就和收纳是一样的。收

简单通俗地回答的话,就和收纳是一样的。

收纳就是将尽可能多的物品放入到一个固定大小的空间当中。

网上有很多收纳高手的视频。收纳技巧也是五花八门,但是都离不开一个基础:对于收纳空间以及要被收纳的物品的仔细观察与精确把握。然后就是在这方面动脑筋想办法。

我们大部分人是怎样的呢?没有规划,不知道空间的具体尺寸,也没有统计过物品的数量和大小。抓到啥,哪里塞得进去就往哪里塞,哪里方便就往哪里放,不动脑筋。

1、说穿了,就是懒。

游戏开发同样。写代码的时候想到啥是啥,要用就malloc,不用了就free,甚至这些都不想做,全部交给GC自动处理。程序写完了也不知道到底用了多少object,顺序是否合理。总之它works,那就行了。

遇到问题首先想到的是有没有库可以调,有没有现成的代码可以抄,不到万不得已不会去主动了解具体实现的细节,对所使用的库的资源需求和性能开销一无所知。一切都是以方便舒服为上。

优化,就是自己不断挑战自己,用人脑去执行程序,了解当中的每个细节,评价是否是必要的,有没有更好的做法。

2、————————

3、具体到《GTA5》

《GTA5》是很大的一个游戏,但是再大的游戏,在某个特定时刻,你只能看到一屏幕的画面。

《GTA5》是以城市为背景的。城市里面其实主要就是道路和建筑、行人和车辆,还有少量绿化,垃圾桶、消防栓这些点缀品。

城市场景有一个很大的好处:没有大量的绿植,特别是大片的草。建筑物在地面水平视野的时候,也是很好的视线遮蔽物。(而在高空俯瞰的时候,可以忽略很多细节)。

所以,渲染这样的场景,OC(对象遮挡剔除)很重要。这方面的算法要高效。

建筑物因为一般都比较方正,顶点数并不是很多。通过一些建模技巧,比如整栋建筑的窗户采用一大块玻璃,可以进一步减少顶点数。窗户内室内的景象,在要求不高时可以用一张贴图通过视差采样模拟,而不是建模。

建筑的材质一般比较简单,表面粗糙没有明显高光反射,没有强烈平面反射,没有各向异性,无需SSS(子表面散射),负荷一般不高。

《GTA5》的内存分配大致是RT 200MB,几十MB的Shader,剩下的基本都给Texture streaming用。内存小就少streaming一点,多就多streaming一些(通过切LOD)。

《GTA5》其实技术上最NB的我觉得还是它的物理系统。其它都当然也很优秀,但是并非是最顶尖的。

当然别误会,R☆水平是很高的。《GTA5》是好多年前的游戏了。《RDR2》在渲染方面的水平就很高了。