zoukankan      html  css  js  c++  java
  • DX10引擎计划20150309

      前天把阴影添加进来了,但是瞬间世界观崩坏了的感觉,FPS降到了接近极限60。(我的CPU是奔腾B960的,未迈入I系列。)

      虽然我的电脑配置较低,但是毕竟跟着哥驰骋沙场5、6年了,是我五姑娘的最佳搭档...这样卡掉的状态着实大杀自信心,不能忍!于是为了给五姑娘出头,进行了各种“蹩脚”的优化。目前看起来收效都非常微小。传下作品图吧:

    上图是优化之前的截图。

    进行了优化之后的图如下:

    虽然FPS提高了一点点,但是能明显感觉到帧率稳定了下来,变化比较平缓,不像之前在120到60之间跳跃。

    然后,昨天突发灵感想到了一个优化方案,就是用空间换时间,事先将纹理存储到显存中,然后物体绘制时仅需要传递一个纹理ID就可以了。然后我对这个想法进行了测试。

    首先注释掉物体绘制中的纹理绑定语句,然后在所有物体绘制前进行了绑定。(这只是粗略的测试方法,并不能精确说明结果)

    注释掉绑定纹理语句。

    在main函数内部进行一次预绑定。然后效率有了一些提升:

     

    当然这个数据只是我挑选出来的平均水平,在某些情况下,视口中一次性出现的顶点数较多时,依然会卡顿,但是情况有了很明显的改善,FPS最低在69左右。

    *******************************************************************

    小结

      这个方法有很大局限性,通过大略翻查资料,发现显存结构与内存结构有很大不同,HLSL语法中对动态内存的支持不够好,数组下标只能是常数。也就是说在效果文件中需要实现定义好所有可能的图片ID,每个场景中的图片与效果文件中的图片ID都需要事先进行设定,是件非常麻烦的事,与软件设计的原则有点相悖了。

      FPS的影响因素不止这么一点,提升效率最靠谱的还是对模型进行优化。同时大量的测试时必不可少的。优化想关内容就暂时告一段落吧,继续往下走。最后再进行相关优化。

  • 相关阅读:
    Memcached 测试
    Task WaitAll的用法
    Linux Memcached 安装
    开发常用的一些插件
    转:浅析VO、DTO、DO、PO的概念、区别和用处
    转:数据库的快照隔离级别(Snapshot Isolation)
    转:nolock的替代方案-提交读快照隔离[行版本控制]
    转:介绍一个好用的抓取dump的工具-ProcDump
    把sqlserver查询结果复制到Excel出现数据记录遗漏
    ASP.NET_SessionId 不相同导致验证码出错
  • 原文地址:https://www.cnblogs.com/SecretMan001/p/4323797.html
Copyright © 2011-2022 走看看