IxEngine开发笔记

第四回 关于多线程渲染(续--测试数据)

多线程渲染模块自从写完后就一直放在那,没有用过,当时也没有大规模的场景可以测试.这两天终于把这堆被屏蔽掉的代码又激活了,并在一个规模比较大的场景中测了测.下面是一些测试数据:
测试场景,如下图:

     


这个场景大约使用了2000次左右的DrawCall.大部分模型使用diffusemap+lightmap绘制,少部分有法线贴图和高光贴图.没有很复杂的PixelShader.Render Target大小约1440x900.
测试数据:
  
一些说明:
*.主线程渲染时间: 是指主线程中渲染各个游戏对象所花的时间,其中包括与渲染相关的一些CPU计算,以及大量对D3D API的调用,在不使用多线程渲染的时候,这些调用被直接传递给D3D,在使用多线程渲染的时候,这些调用被转化为多条指令加入到一个队列中.注意这个时间没有包括等待GPU工作完毕的时间.
*.FPS:游戏帧数,只有很简单的逻辑运算,逻辑更新时间几乎可以忽略不计.
*.FPS(40ms逻辑):游戏帧数,人为的在逻辑更新里加入了40ms的计算,用来模拟游戏中逻辑运算负荷比较大的情况.

一些Comment:
*.在调用D3D API时,主线程被阻塞的很严重.
*.红框里的数字体现了使用这套多线程渲染方式的价值,如果仅仅把游戏更新中的渲染部分拿到一个单独的线程中进行的话,是永远达不到36fps的,30fps应该是这种方式的极限.
*.但我不能解释为什么在低配置的电脑上,这两个值的差异不是那么明显,我想可能和GPU的空闲程度有关吧.懒得去思考这个问题了.
*.测试结果还是令人满意的,多年前那一个月的努力还是有点收获啊.

好了,又可以把这堆东西屏蔽掉了,不然调试起来太不方便.

posted on 2010-08-19 23:08 ixnehc 阅读(1463) 评论(2) 编辑 收藏

Feedback

#1楼 2010-08-20 09:16 黑色灵猫      

RingBuffer才是王道。 千万别锁
如果主线程负担不重,多线程性能完全看不出来
我这边的数据:骨骼动画+BumpMap的模型,GF GTS250上FPS差异可以到300到400帧
 回复 引用 查看   

#2楼[楼主] 2010-08-20 19:00 ixnehc      

回楼上,没有锁,所有渲染指令都加到一个队列中去,只在一帧结束时会切换一下,那时候才会锁.  回复 引用 查看   


发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1804027 mUiCK3tuSH0=