图片稍后补上
Optimizing the Graphics Pipeline
首先:遇到瓶颈肿么破:定位,解决(降低出现瓶颈部分的工作量,增加没有瓶颈部分的工作量)
那怎么定位呢:这就需要偶们对真个渲染流程有一定的了解…其实最重要是渲染管线啦啦啦啦啦
上图就是可爱的渲染流程 + 哪里可能出现瓶颈(AGP先别管:这货貌似被淘汰了)
一般而言,我们将在光栅化之前出现的瓶颈叫“transform bound”,将triangle setup(生成三角面)之后出现的瓶颈叫“fill bound”
判断瓶颈位置的方法:fps出现明显变化,由渲染管线尾部往头部判断、
注意:
1、硬件不同,瓶颈不同
2、debug和release的表现不同
3、观察fps时不能开启垂直同步
第一步:帧传输带宽限制(frame buffer b/w limited)
Frame buffer:用于GPU到显示设备中间的缓存
判断方法:改变色深(16位->32位)
原因:
1、过多的对帧缓冲区的读写
解决方案:
1、关闭Z write:一开始就Z write,后面的pass可以关闭无用的Zwrite
2、对于alpha混合的直接关闭Zwrite
3、不要仅仅对某些颜色通道进行mask off操作
GPU必须在写这些masked channel之前,先在帧缓冲区进行读取、
4、使用alphatest(除非你全部都mask off了)
5、尽量不要用浮点帧缓冲区???
6、如果不用stencil,尽量用16bit的Z-depth缓存
7、减少RenderTextureToTarget的使用和尺寸
CubeMap和shadowMap都可以再16bit或者低分辨率下呈现很好的效果
处理反射时使用hemisphereMap代替CubeMap:
文件尺寸会更小,效果差不多
更小的renderTarget转换
重用RenderTargetTexture减少内存覆盖、