前天把阴影添加进来了,但是瞬间世界观崩坏了的感觉,FPS降到了接近极限60。(我的CPU是奔腾B960的,未迈入I系列。)
虽然我的电脑配置较低,但是毕竟跟着哥驰骋沙场5、6年了,是我五姑娘的最佳搭档...这样卡掉的状态着实大杀自信心,不能忍!于是为了给五姑娘出头,进行了各种“蹩脚”的优化。目前看起来收效都非常微小。传下作品图吧:
上图是优化之前的截图。
进行了优化之后的图如下:
虽然FPS提高了一点点,但是能明显感觉到帧率稳定了下来,变化比较平缓,不像之前在120到60之间跳跃。
然后,昨天突发灵感想到了一个优化方案,就是用空间换时间,事先将纹理存储到显存中,然后物体绘制时仅需要传递一个纹理ID就可以了。然后我对这个想法进行了测试。
首先注释掉物体绘制中的纹理绑定语句,然后在所有物体绘制前进行了绑定。(这只是粗略的测试方法,并不能精确说明结果)
注释掉绑定纹理语句。
在main函数内部进行一次预绑定。然后效率有了一些提升:
当然这个数据只是我挑选出来的平均水平,在某些情况下,视口中一次性出现的顶点数较多时,依然会卡顿,但是情况有了很明显的改善,FPS最低在69左右。
*******************************************************************
小结
这个方法有很大局限性,通过大略翻查资料,发现显存结构与内存结构有很大不同,HLSL语法中对动态内存的支持不够好,数组下标只能是常数。也就是说在效果文件中需要实现定义好所有可能的图片ID,每个场景中的图片与效果文件中的图片ID都需要事先进行设定,是件非常麻烦的事,与软件设计的原则有点相悖了。
FPS的影响因素不止这么一点,提升效率最靠谱的还是对模型进行优化。同时大量的测试时必不可少的。优化想关内容就暂时告一段落吧,继续往下走。最后再进行相关优化。