测试1. 渲染1008个Wow的Cat动画模型,每个Cat有346个面,28根骨骼,只需1次Batch.
OpenGL | DirectX | |
P4 2.8G Geforce7950GT | 36 | 30 |
Core2 1.8G ATI1650XT | 33 | 40 |
AMD64 1.8G Geforce6150 | 19 | 11 |
测试2 渲染175个Wow的Orc动画模型,每个Orc有1260个面,53根骨骼,需要分10次Batch,但使用同一个顶点Buffer,顶点数 2728 , 面数分别为 726, 22, 8, 66, 16, 13, 116, 34, 114, 142. 兽人模型体现了真实的游戏需求, Cat模型过于理想化.
OpenGL | DirectX | |
P4 2.8G Geforce7950GT | 27 | 30 |
Core2 1.8G ATI650XT | 36 | 56 |
AMD64 1.8G Geforce6150 | 23 | 16.5 |
/**********************************************************************************************
1.HLSL下1008个cat的例子,使用float3x4 M*V比float4x3 V * M 慢2帧.
2.矩阵从4x4改为4x3后,帧率只提高了1帧,可能GPU不是瓶颈,传送4x4和传送4x3矩阵到寄存器效率相差不多.
3.OpenGL的实现在7950GT下目前有严重问题,竟然比DX低了8-10帧,WHY! 在N卡上OpenGL实现绝对要比DirectX快, 查SwapBuffers不明消耗15ms,未决! TNND,原来是Fraps对OpenGL测帧不准,反而拖慢了SwapBuffers,实际测试后OpenGL比DirectX高出6,7帧,这才正常.
4.ATI显卡对OpenGL支持得差是出名的, 在ATI显卡上DirectX比OpenGL快很正常,OpenGL主要慢在Shader计算上,而且其GLSL的代码和HLSL一模一样, M$和ATI有黑幕.
5.对兽人渲染排序材质后,DirectX提高2帧,OpenGL不变.
6.使用GPUPerfStudio在ATI 1650下做测试,发现OpenGL实现时呈现GPU瓶颈,而DirectX实现时呈现CPU瓶颈. 两者的逻辑层实现是统一的,OpenGL的GPU瓶颈在Vertex processing上,但是简化Skin Vertex Shader处理后未见效率提升,似乎瓶颈不是在Vertex shader上.这样只可能在顶点数量上,但顶点数仅有308,且DirectX模式一样的顶点却高出10帧,OpenGL下Vertex cache有问题,或者每次渲染都传送更新了顶点流?VBO有问题?未决!
7.优化了数次后,没有达到预期目标,感觉相当沮丧.
**********************************************************************************************/
http://linghuye.googlepages.com/RenderCraftPerf.7z
References:
http://developer.nvidia.com/object/multi-thread-gdc-2006.html
http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=235486#Post235486
http://ati.amd.com/developer/gdc/PerformanceTuning.pdf