第四回 关于多线程渲染(续--测试数据)
多线程渲染模块自从写完后就一直放在那,没有用过,当时也没有大规模的场景可以测试.这两天终于把这堆被屏蔽掉的代码又激活了,并在一个规模比较大的场景中测了测.下面是一些测试数据:
测试场景,如下图:
这个场景大约使用了2000次左右的DrawCall.大部分模型使用diffusemap+lightmap绘制,少部分有法线贴图和高光贴图.没有很复杂的PixelShader.Render Target大小约1440x900.
测试数据:
一些说明:
*.主线程渲染时间: 是指主线程中渲染各个游戏对象所花的时间,其中包括与渲染相关的一些CPU计算,以及大量对D3D API的调用,在不使用多线程渲染的时候,这些调用被直接传递给D3D,在使用多线程渲染的时候,这些调用被转化为多条指令加入到一个队列中.注意这个时间没有包括等待GPU工作完毕的时间.
*.FPS:游戏帧数,只有很简单的逻辑运算,逻辑更新时间几乎可以忽略不计.
*.FPS(40ms逻辑):游戏帧数,人为的在逻辑更新里加入了40ms的计算,用来模拟游戏中逻辑运算负荷比较大的情况.
一些Comment:
*.在调用D3D API时,主线程被阻塞的很严重.
*.红框里的数字体现了使用这套多线程渲染方式的价值,如果仅仅把游戏更新中的渲染部分拿到一个单独的线程中进行的话,是永远达不到36fps的,30fps应该是这种方式的极限.
*.但我不能解释为什么在低配置的电脑上,这两个值的差异不是那么明显,我想可能和GPU的空闲程度有关吧.懒得去思考这个问题了.
*.测试结果还是令人满意的,多年前那一个月的努力还是有点收获啊.
好了,又可以把这堆东西屏蔽掉了,不然调试起来太不方便.