我正在模仿旧客户端,大多数纹理都是128x128。据我所知,切换纹理和渲染调用很昂贵,我可以在运行时使用,创建一个非常大的纹理图集。
然后从那里,我可以绑定大纹理并通过着色器渲染地图集中的纹理偏移吗?这会带来什么样的性能影响? 我的第二个问题涉及排序。级别文件被分解为BSP树的一小部分。它们非常小,每层通常有数千个。当前的方式,肯定是慢的是我在每个BSP叶子中呈现我的截头体和PVS(Quake 3样式)中的每组纹理。对此有什么想法?
我是否想要浏览每个区域(从前到后)我可以看到,并按纹理对所有可见三角形进行分组,然后立即渲染所有三角形。出于某种原因,我总觉得这可能会慢一点。首先排序并一次渲染所有内容或者一次跳过排序和渲染每个区域更有意义吗?
答案 0 :(得分:1)
是的,应该可以将纹理填充到纹理图集中。需要仔细考虑诸如纹理是否被平铺以及您希望通过mip-maps和过滤发生什么等问题。
我可能会建议你不要这么做,直到你把几何图形整理出去 - 减少绘制调用数量就可以了解你需要做的事情。在现代硬件上,更改纹理的成本不一定 。
至于渲染关卡,在现代硬件上,更常见的是从前到后渲染,而不是从前到后渲染,以便利用z缓冲区和早期剔除(即如果你的墙前有一面墙)相机,你首先启用z缓冲,硬件相当擅长拒绝你然后尝试绘制它的东西)。
一种可能的方法是将BSP重新处理为更粗糙的结构,例如简单网格(或者可能是四边形或八字形树)。你甚至不需要整齐地分割多边形,只是在它们周围有一堆带有边界框的扇区,然后是平截头体,然后松散地排序(从前到后)框。您也可以使用这种方法保留PVS,但是当渲染块变得更大和更粗糙时,它的有用性可能会下降。
然而,在做这些之前,我肯定建议设置一些基准测试并记录性能信息。除非您实际分析性能,否则您无法确定自己是否做了正确的事情。如果你能确切地确定你正在做的最糟糕的表现是什么,你只需要解决它。