(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
3D程序的性能消耗发生在:
-
顶点相关数据和纹理数据加载入内存
把大量的模型数据顶点相关数据和纹理数据从磁盘或网络加载到内存中,3D程序中,这块的数据量是相当大的,可能会有上GBytes的数据需要加载到内存中。 -
显示数据从内存传输到显卡中
显卡提供了接口,传输framebuffer, 传输texture, 传输shader, 把加载到的内存中数据传递给显卡。 -
显卡渲染pipeline执行,执行相关顶点、像素等shader处理
针对这3项,通常我们优化的方向有:
-
针对数据量,减少加载的数据量
a. 通过lod,对数据的加载,提供层次简模,减少同一时刻需要加载的数据数量
b. 3D模型中一般图片占资源总大小比例很高,可以通过纹理简化DDS-DXT,RGB565纹理,
c. 顶点索引相关数据简化,例如,索引使用ushort;也可以考虑顶点合并,三角形简化等各类思路 -
针对向显卡传送渲染数据,数据量减少的前提下,同样的渲染数据量情况下,减少接口调用次数
a. 顶点相关数据减少批次数量:通过合并批次,提高交互的效率,减少显卡接口调用的次数
b. 纹理合并,减少传递纹理的次数 -
shader程序优化,精简shader中无用的逻辑
a. shader逻辑精简,减少查询纹理相关复杂操作的次数
b. 可以在顶点shader中做的,优于在像素shader中做
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)