Tile based Rendering //后面一段是手机优化建议
https://www.imgtec.com/blog/a-look-at-the-powervr-graphics-architecture-tile-based-rendering/
一种硬件结构

color target 分成tile
减小带宽
提前(fs)用depth做隐藏面消除 earlyz一个意思
减小cache missing 一行短了。。
所以early失效的都不可以 fs 改depth那些操作
比如fs里面discard (mask or alpha test) alpha to coverage
会不走onchip depth而访存拿depth
要clear 不然就少一次往tilebuffer上存上帧内容的操作
========================================
http://aras-p.info/texts/files/FastMobileShaders_siggraph2011.pdf
这段优化策略是2011年的 很多东西变了 比如ETC2 比如
tiled deferred PowerVR
Tiled Mali, Andreno
Immediate Tegra
1) TBDR: Render everything in tiles, shade only visible pixels
2) Tiled: Render everything in tiles
3) Classic: Render everything
因为分tile sample的时候cache missing会比一张大的frame buffer下降
这样mipmap就没那么那么(对性能的影响) 要紧了 但也是好的 (对表现的影响 走样)
贴图资源分平台压缩
PVRTC for PowerVR; DXT for Tegra; ATC for Adreno
ETC2 for Android ogles3.0
TBDR:ipad2
msaa cheaper than immediate
2-4ms 4xmsaa
aniso 3ms
aniso=2
关了mipmap ipad2 2-3ms下降
tegra 跪了
TBDR不存在每个draw call的gpu时间了,这样拿不到GPU时间 不利于做优化
Andero和Tegra还有
一帧的VB太大会被切 导致效率下降(一次处理不了分两次) 1000 thound vertex ipd2
=====================================
减小overdraw of alpha blend
PerfHUD profiler ES
============================
优化示例 tegra
天空盒后画
opaque 从前往后(不太现实 需要polygon粒度的排序排序)
近的大的物体按这个方式排序 远的按照material分 合并批次减少renderstate切换
(太有才了,我之前只考虑到这两点是矛盾的 没有想到可以分远近使用这两种策略)
主角先画 敌人在场景之后画(被遮挡)
因为reject occlude geo在tegra2上cost1ms*(vs) 我们可以设置trigger zone 这里关掉skybox 这样vs也去了
排序opaque带来 15ms提升
------
shader优化
shader指标 cycles/pixel 有静态分析工具 见别的帖子
light in lookup texture--LUT
by tex2d(N.L,N.H) (我之前用过一张beckmann的)
----------
texture 压缩 硬件支持的格式 直接sample了
工具
IOS+PowerVR
unity profiler
Apple Instruments
PowerVR 他家有一套工具 见官网PVRUniSCo shader analyzer 可以看cycle
Android +Tegra
nv PerfHUD ES
每个drawcall的gpu时间
shader cycle
2x2 texture, null view rectangle 这两个排除很好用
虽然作者很喜欢这个,感觉这个东西需要开发工具箱那种实体设备 不太方便的样子
Mali
Andreno 都有他们家自己的工具
抓帧
shader 分析,live editing(这个功能我很喜欢)
我用Snapdragon比较多
最近renderdoc 也出了android版本 还算好用
============================================
shader优化 浮点数精度
float/half/fixed 对应highp/mediump/lowp
不要相信直觉
lowp 8bit -2.0--+2.0
存颜色 归一化的vector 不要缩放拆解 lowp
mediump 16bit uv, 2d vector 不需要高精度的量
highp 24-32bit 看平台
世界坐标,标量,大贴图UV 对精度要求比较高的offset之类
这个精度的事情分平台 有的显卡对精度比较敏感 总之 看操作手册
===============================
Likewise, do not pack 2 UVs into one float4/vec4 varying for PowerVR
float4 uv -----uv.xy ux.zw, povwerVR里面不要这样用
变量和插值
变量开销分平台 看手册
andreno对shader comple没那么敏感
==============
下面一个例子是ios优化
glFInish wait 这个可以看gpu时间 profiler 看cpu wait了多久
后处理 bloom和热扭曲 花了10ms+
浮点数精度 合并热扭曲和bloom 减少一次blit
优化了10ms (这个我也会 我减了两次blit在ppv2 也是10ms+)
它有个到处都用的fire wall shader
判断ALU bound 还是Texture bound
ALU bound
浮点数精度 逐顶点计算 lookup light tex
用工具分析shader PVRUniSCo
减小顶点数量 导致scene split了 3ms(Apple’s Instruments show this)
粒子优化 减小overdraw 简化shader
省出来的budget给了msaa和aniso
======================
tbdr
• Hidden Surface Removal
– For opaque only
– Don’t keep alpha-test enabled all the time(少用,用的时候才开)
– Don’t keep “discard” keyword in shader source, even if it’s not used(没用的discard去掉)
• Group opaque drawcalls together
• Sort on state, not distance
============================
枭龙优化建议
Qualcomm Snapdragon Rendering Tips
• Traditional handling of overdraw (via depth test)
– Cull as much as you can on CPU, to avoid both CPU and GPU cost
– Sort on distance (front to back) to maximize early z-rejection
• The Adreno SIMD is wide
– Check your ALU utilization in the Adreno Profiler and optimize
– Minimize temp register usage
– Use long shaders with a lot of ALU instructions
– Avoid dependent texture fetches (or cover the latency with a lot of ALUs)
==================
FBO和tile 切换很费需要frame buffer存到 memory
Expensive to switch Frame Buffer Object on Tile-based GPUs
– Saves the current FBO to RAM
– Reloads the new FBO from RAM
带宽高
Framebuffer Resolve/Restore
• Clear ALL FBO attachments after new frame/rendertarget
– Clear after eglSwapBuffers / glBindFramebuffer
– Avoids reloading FBO from RAM
– NOTE: Do NOT do unnecessary clears on non-tile-based GPUs (e.g. NVIDIA)
• Discard unused attachments before new frame/rendertarget
– Discard before eglSwapBuffers / glBindFramebuffer
– Avoids saving unused FBO attachments to RAM
– glDiscardFramebufferEXT / glInvalidateFramebuffer
这些都是为了防止 从memory读写framebuffer
=============================================================
https://de45xmedrsdbp.cloudfront.net/Resources/files/GDC2014_Next_Generation_Mobile_Rendering-2033767592.pdf
Tile based Rendering //后面一段是手机优化建议的更多相关文章
- Tile based Rendering 二 tbr and tbdr 优化建议tiled based deferred rendering
http://www.seas.upenn.edu/~pcozzi/OpenGLInsights/OpenGLInsights-TileBasedArchitectures.pdf tbr 和tbdr ...
- OpenGL Insights 阅读有感 - Tile Based架构下的性能调校 翻译
Performance Tunning for Tile-Based Architecture Tile-Based架构下的性能调校 by Bruce Merry GameKnife译 译序 在大概1 ...
- 【OpenCV】【计算机图形学】DIBR: Depth Image Based Rendering/ 3D image warping 中的实现细节
最近在学习DIBR并尝试实现.感觉网上相关资料比较少,大多还是爬虫,决定自己写一个. DIBR就是depth image based rendering问题.输入一个视角下的图像和深度图,要求你输出另 ...
- 华为Mate8手机优化技巧
我的华为Mate8手机手机存储(手机内存)32G, 运行内存3G,2016年买的手机,两样数值都偏小,导致使用手机的时候经常卡顿,一天来回清理垃圾.清理内存很多次,要运行微信.QQ等占用运行内存较多的 ...
- Physically Based Rendering
Microfacet Models for Refraction through Rough Surfaces 这篇论文...名字被我忘记了 找了好久...之前存电脑里的 ggx beckmann 找 ...
- PBR:基于物理的渲染(Physically Based Rendering)+理论相关
一: 关于能量守恒 出射光线的能量永远不能超过入射光线的能量(发光面除外).如图示我们可以看到,随着粗糙度的上升镜面反射区域的会增加,但是镜面反射的亮度却会下降.如果不管反射轮廓的大小而让每个像素的镜 ...
- 安卓手机优化 ROOT自启动管理 + 电量管理
一.KingRoot + 净化大师 KingRoot 主要完成ROOT 和 自启动软件的管理 这里禁止的自启动管理 对于有些软件是不太管用 比如美团 手机百度等 净化大师 主要完成 高电量的软件优化 ...
- 回滚线段树+bitset优化01背包——cf981E
/*首先考虑如何计算一个点的可能凑出的值,这就是一个01可行性背包问题那么再拓展到一段区间[1..n]的点上,每个query都可以看做是一段区间上的点[l,r]加上一个体积为x的物品,转换到01背包上 ...
- 一段sql的优化
优化前代码 select * ,ROW_NUMBER() OVER(order by WrongCount desc) as rowId from(select Quba_IDint,Quba_Num ...
随机推荐
- .net/c#常用框架/中间件简介(不定时更新)
任务调度 Quartz.NET:Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允 许开发人员根据时间间隔 ...
- python webpy 框架环境架设
前几年使用过 webpy做个些小东西,今天有个东西从拾webpy.但是基本上都忘记了,还是那句古话“好记性不如烂笔头”.这里把相应的步骤梳理下. 前提: 操作系统 windows 一.webpy 方面 ...
- 弹出框美化 alert样式美化
引用style.css和ui.js就可以直接用以下接口调用!(文末附完整代码) alert_带标题: mizhu.alert('alert_带标题', '这是alert效果'); alert_带图标: ...
- python+django+vue搭建前后端分离项目
以前一直是做基于PHP或JAVA的前后端分离开发,最近跟着python风搭建了一个基于django的前后端分享项目 准备工作:IDE,[JetBrains PyCharm2018][webpack 3 ...
- 【转】Django中的cookie与session
转自:https://www.cnblogs.com/chenchao1990/p/5283725.html cookie与session的实现原理 HTTP被设计为”无状态”,每次请求都处于相同的空 ...
- Ubuntu下各种环境变量设置
1.用户目录下的 .bashrc 文件在用户主目录下,有一个 .bashrc 文件,编辑该文件:$gedit ~/.bashrc 在最后边加入需要设置变量的shell语句,例如:export PATH ...
- 对PDO的认识
1.PDO(PHP Data Object)扩展为PHP定义了一个访问数据库的轻量.持久的接口.实现PDO接口的每一种数据库驱动都能以正则扩展的形式把各自的特色表现出来. 主要:PDO扩展只是一个抽象 ...
- Codeforces 1099 C. Postcard-字符串处理(Codeforces Round #530 (Div. 2))
C. Postcard time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...
- 解决CDH的web界面使用nginx代理一些静态文件无法加载
vim /opt/cm-/share/cmf/webapp/WEB-INF/spring/mvc-config.xml .... 注释此行 <bean class="com.cloud ...
- 设计模式之State模式
State模式定义: 允许一个对象在状态改变是,改变它的行为.看起来对象似乎修改了它的类. 模式理解(个人): State模式主要解决的事在开发中时常遇到的根据不同状态需要进行不同的处理操作的问题,而 ...