优化相关知识01

本文探讨了移动平台如PowerVR、高通和英伟达芯片的渲染架构,以及如何影响游戏性能。CPU优化关键在于减少DrawCall,GPU优化则涉及顶点处理、片元管理和内存宽带。Unity中的渲染统计窗口提供了性能监控指标。优化策略包括批处理技术、LOD、遮挡剔除、控制绘制顺序和减少光照计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抄书笔记:UnityShader入门精要 冯乐乐
移动平台的特点:
为了尽可能一处那些隐藏的表面,减少overdraw(一个像素被多次绘制),PowerVr芯片使用了基于瓦片的延迟渲染架构,把所有的渲染图像装进一个tile中(瓦片中),再由硬件找到可见的片元,而只有这些可见的片元才会执行片元着色器;
另一些基于瓦片的GPU架构,例如果高通的芯片,ARM的芯片,则会使用Early_z或者相似的技术进行一个低精度的深度检测,来剔除那些不需要的渲染的片元。
还有一些GPU例如英伟达的芯片,则使用了传统的架构,因此在这设备上,overDraw可能造成性能的瓶颈;

由于这些芯片的架构造成的不同,一些游戏往往需要针对不同的芯片发布不同的版本,以便于对每个芯片进行更有针对性的优化。尤其是在andriod平台上,不同设备使用的硬件,例如图形芯片、屏幕分辨率差别很大。这对图形优化提出了更高的挑战。相比Android平台,ios平台的硬件条件相对统一。

影响性能的因素:
影响游戏性能的因素,对于一个游戏来说,它主要需要使用两种计算资源GPU和CPU。他们互相合作,让游戏在预期的帧率和分辨率下工作。
CPU主要负责保证帧率,GPU负责分辨率相关的一些处理;
CPU:
1)过多的DrawCall
2)复杂的脚本或者物理模拟;
GPU:
1)顶点处理过多;
2)过多的逐顶点计算;
3)过多的片元(即可能是由于分辨率造成的,也有可能是overdraw造成的);
4)过多的逐片元计算;
宽带:
使用了尺寸很大且未压缩的纹理;
分辨率过高的帧缓存;

对于CPU来说,限制他的主要是每一帧中drawCall数目。
CPU在每次通知GPU进行渲染之前,都需要提前准备好顶点数据(例如位置、法线、颜色、纹理坐标等),然后调用一系列的API把他们放进GPU可以访问的制定位置,最后调用一个绘制命令,告诉Gpu进行渲染;过多的drawcall会造成CPU的性能瓶颈。这是因为每次调用DrawCall的使坏,CPU往往需要改变很多渲染的状态的设置,这些操作非常耗时!如果一帧中的DrawCall数目过多的话,就会导致CPU把大部分时间都花费在提交DrawCall上了。当然,其他原因可能造成DrawCall瓶颈,例如物理、布料模拟、蒙皮、例子模拟等;这些计算量都很大;
对于GPU来说,他负责整个渲染流水线。他从处理CPU传递过来的模型数据开始,进行顶点着色器、片元着色器等一系列的工作,最后输出屏幕上的每个像素。因此GPU性能瓶颈和处理的顶点数目、屏幕分辨率、显存等因素有关;
CPU优化:
使用批处理技术,减少drawcall的数目;
GPU优化:
优化几何体,使用模型的LOD(level of detail) 技术;
使用遮挡剔除技术;
减少需要处理的片元数目:
控制绘制顺序
警惕透明物体;
减少实时光照;
减少计算复杂程度:
使用Shader的 LOD(level of Detail) 技术;
代码方面的优化
节省内存宽带:
减少纹理大小;
利用分辨率进行缩放;
——————————————————————————
Unity中的渲染统计窗口:
每帧的时间和FPS 在Graphics的右侧显示,给出了处理和渲染一帧所需的时间,以及FPS数目;
Batches 一帧中需要进行批处理的数目;
Saved by bathcing 合并的批处理数目,这个数字表明了批处理为我们节省了多少DrawCall
Tris和Verts 需要绘制的三角形和顶点数目;
Screen 屏幕的大小,以及它占用的内存;
SetPass 渲染使用的Pass数目,每个Pass都需要Unity的runtime来绑定一个新的shader,这可能造成CPU的瓶颈;
Visible Skinned Meshes 渲染的蒙皮网格的数目;
Animaitions 播放的动画数目

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值