CPU限制
在渲染每一帧中CPU会完成三个任务:确定绘制的物体 —> 为GPU准备命令 —> 发送命令给GPU。
Unity渲染过程中和三类线程相关:主线程,渲染线程和工作线程。主线程用于我们游戏的主要CPU任务,包括一些渲染任务。渲染进程是专门用于发送命令给GPU的。每个工作线程执行一个单独的任务,例如剔除和网格蒙皮。哪些任务执行在哪个线程,取决于我们游戏运行的硬件和游戏的设置。例如,CPU的核心数量越多,就会生成越多的工作线程数。因此,在我们的目标硬件上进行性能分析是十分重要的。在不同的设备上,我们项目的表现可能相差很多
SetPass call:如果CPU限制是由发送命令到GPU引起的,那么降低SetPass的数量通常是最好的改善性能的方式
减少要渲染的对象数量:
1.手动减少场景中物体的数量
2.Occlusion Culling(遮挡剔除)
把所有物体选中,Inspector面板中的static下拉菜单中勾选Occlusion Static 和 Occludee Static。
在Window中选择Occlusion Culling。然后在Occlusion Culling面板中选择Bake,并点击右下角Bake按钮
在Occlusion bake中有三个参数:
Smallest Occluder:设置最小遮挡物的尺寸,当遮挡物的长度或者宽大于设定值时,该物体才能够遮挡住后面的物体。
Smallest Hole:设置最小孔的尺寸,当穿过物体内部的孔或者多个物体堆叠形成的孔的大小小于设定的值时,遮挡剔除烘焙将忽略该孔的存在。
Backface Threshold:设置背面移除阈值,用于优化场景,当该值为100时,摄像机拍摄不到的背面信息也会完整保留;当该值较小时,系统将对背面信息进行优化甚至去掉背景信息。
3.摄像机Clipping Planes
我们可以通过摄像机的Clipping Planes 的Far裁剪远端,从而降低摄像机的绘制范围.
减少渲染对象的渲染次数
1.Lightmap(光照贴图)
场景烘焙:减少实时光
1.被光照到的物体勾选上Lightmap Static
2.把所有光源的Mode设置为Baked
3.选择window ——> Lighting ——> Settings 我们点击右下角的Generate Lighting
2.阴影
- )阴影 (Shadows):此项决定应该使用哪种阴影类型。
硬阴影和软阴影 (Hard and Soft Shadows):硬阴影和软阴影都将得到渲染。
仅硬阴影 (Hard Shadows Only):仅硬阴影 (hard shadows) 将得到渲染。
禁用阴影 (Disable Shadows):没有阴影会被渲染。
- )阴影分辨率 (Shadow resolution):阴影可以按以下几种不同分辨率进行渲染: 低 (Low) 、中 (Medium) 、高 (High) 和很高 (Very High)。分辨率越高,处理开销就越大。
- )阴影投射 (Shadow Projection):从平行光源投射阴影有两种方法。紧密配合 (Close Fit) 渲染分辨率更高的阴影,但是如果摄影机移动,这些阴影有时就会有些许摇晃。稳定配合 (Stable Fit) 渲染分辨率更低的阴影,而阴影不会随摄影机的移动而摇晃。
- )阴影距离 (Shadow Distance):从摄影机处可以看见阴影的最大距离。超出此距离的阴影将不会被渲染。
- )阴影层叠 (Shadow Cascades):阴影层叠 (shadow cascades) 数可设置为零、二或四。层叠数越高质量越好,但这要以处理开销为代价。
合并要渲染的对象的数据
- 动态批处理和静态批处理
静态批处理时,只需要同一个材质且批处理的物体处于静态,同时勾上Static。
2.纹理图集
GPU渲染优化
1.顶点处理。顶点处理是指GPU需要渲染网格中每一个顶点的工作。
顶点处理的消耗受两方面影响:必须渲染的顶点数量,以及在每个顶点上要进行的操作数量。
2.填充率。填充率是指GPU在屏幕上每秒可以渲染的像素数。如果我们的游戏受到填充率的限制,意味着我们的游戏每帧尝试绘制的像素数量超过了GPU的处理能力。
3.显存带宽。显存带宽是指GPU读写其专用内存的速度。如果我们的游戏速度受限于显存带宽,通常可能是我们使用的纹理太大,以至于GPU无法快速处理。
1.纹理压缩(显存)
andriod ETC
ios ASTC 6*6
2.Mipmap(显存)
3.LOD(显存)
LOD Group 组件