原则
1.以目前计算机的发展阶段而言, 游戏总是CPU Limited.
2.渲染 Batch, Batch, Batch
3.尽力减少图形API调用次数.
4.Minimize data swithing, such as SetStreamSource and SetIndices. Maximize FVF sharing.
认识:
1.DX API消耗Top5: SetPixelShaderConstant() SetPixeShader() SetVertexShaderConstant() SetVertexShader() SetTexture()
经验:
1. 过大过多的纹理造成带宽瓶颈,而顶点数据流量一般不足以产生瓶颈.
2.25k batches/s @ 100% 1GHz CPU, 即在PentiumD 2.8G上,令CPU满负荷运转,要保持30FPS,每帧只能渲染25000 * 2.8 / 30 = 2333个batch.经我测试,这只是在最理想状态下,渲染每个大于1000面的静态物体时的数据. 但若渲染的是小于大约130个面的静态物体,可渲染的batch比这高很多,大约2倍左右甚至更高,此时据文档说是CPU在负责计算顶点. 然后,如果渲染的是生物,按GPU计算骨骼运动的标准,最耗的是CPU骨骼层次矩阵计算和SetVertexShaderConst函数,两者都直接和骨骼数量成正比,即骨骼越多可渲染的batch越少.
3.对MMORPG游戏而言,瓶颈总是在CPU上,总是在骨架动作计算和渲染提交Batch次数上.
25k batches/s @ 100% 1GHz CPU
References:
http://ati.amd.com/developer/gdc/2006/GDC06-Advanced_D3D_Tutorial_Day-Huddy-Optimization.pdfhttp://developer.download.nvidia.com/GPU_Programming_Guide/GPU_Programming_Guide.pdfhttp://developer.nvidia.com/docs/IO/8230/BatchBatchBatch.ppthttp://download.nvidia.com/developer/presentations/GDC_2004/Dx9Optimization.pdfhttp://developer.nvidia.com/object/gdc_d3dperf.html