opengl insight
Exploring Mobile vs. Desktop
OpenGL Performance
Jon McCaffrey
前面那些内容以前看过 应该写在谋篇帖子里了
Fullscreen effect
pp优化的核心在于 减pass 因为这全是system mem sync read modify write…
1.全屏特效 如果不需要 neighboring pixelx 用frame buffer ftech 和base做到一起 带宽可以做到最低
2.particle的bloom去掉 用mask 区分共用一次bloom mask用mrt出
3.ubershader把pp互相挪到一起 参见2014gdc unreal
Offscreen Effect
1.用downsample+bilinear做blur for bloom and environment reflection
2.这种方式每个像素只画一次 就是deferred lighting的优点 利用这一点 减小overdraw
Fragment
优化核心 用profiler测 bound
1.float
2.如果顶点少 考虑逐顶点计算
3.lightmap
4.lookup texture (bandwidth memory 换alu)例如beckmon参数 一维 cache命中率高
5.texture fetch 这里bound ------如果varyings太多 register压力导致不能有更多fragment同时处理 以便把 tsp 或者usse 的开销 通过调度掩盖掉
Vertexshading
2.varyings 数量限制住 太多不但增加memory开销导致并行fragment数量受限
3.顶点带宽 每个tile都会拉一遍 除非已经在cache(下一块tile数据已经在cache)里 vertex用低精度数据 OES vertex half float
4.交错interleaved vertex attribute 这样cache命中高 pos normal uv pos normal uv
5 频繁改变的vertex attribute和static的buffer 分开放 比如每次更新的可能只是pos而 normal uv不变 把这两组数据分开(看起来animation才会有这个问题 scene全部数据都是static
====================================
pp
=============
cover latency
https://developer.qualcomm.com/qfile/28557/80-nu141-1_b_adreno_opengl_es_developer_guide.pdf
https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf
手机扫一扫
移动阅读更方便
你可能感兴趣的文章