填充率 Fill Rate
什么是填充率
填充率(Fill Rate)是指图形处理器(GPU)每秒钟可以渲染到屏幕上的像素数量,通常以百万像素/秒(MP/s)或十亿像素/秒(GP/s)为单位。它是衡量GPU性能的重要指标,尤其在处理高分辨率渲染和复杂片段着色时。
填充率可以分为**像素填充率**和**纹理填充率**:
- **像素填充率**:GPU每秒能够写入帧缓冲的像素数,取决于光栅化单元(ROP)的数量和频率。
- **纹理填充率**:GPU每秒能够采样的纹理像素(texel)数,取决于纹理单元(TMU)的数量和频率。
填充率的重要性
填充率直接影响渲染性能,当场景需要处理大量像素(如高分辨率、多图层、复杂后处理)时,填充率可能成为瓶颈。如果GPU的填充率不足,帧率会下降,出现卡顿。
移动设备由于屏幕分辨率高但GPU填充率相对较低,对填充率特别敏感。
影响填充率的因素
- **分辨率**:分辨率越高,需要渲染的像素越多,对填充率要求越高。
- **Overdraw**:同一像素被多次绘制会增加填充率压力。
- **片段着色器复杂度**:虽然复杂着色器主要消耗ALU,但每个像素执行多次纹理采样也会占用纹理填充率。
- **混合操作**:Alpha混合需要读取帧缓冲并写入,消耗额外带宽。
- **后处理**:全屏后处理效果(如模糊、泛光)需要多次处理全屏像素,大幅增加填充率需求。
填充率与Overdraw的关系
Overdraw是填充率消耗的主要来源之一。例如,一个像素被绘制3次,就相当于填充率需求增加了3倍。减少Overdraw可以有效降低填充率压力。
如何优化填充率
1. 降低渲染分辨率
使用动态分辨率或降低渲染目标分辨率,例如在移动设备上使用较低的内部分辨率再缩放。
2. 减少Overdraw
- 优化渲染顺序,利用深度测试剔除被遮挡像素。
- 减少透明物体层数。
- 使用遮挡剔除。
3. 简化片段着色器
- 减少纹理采样次数。
- 使用简化光照模型。
- 避免复杂数学函数。
4. 优化后处理
- 合并后处理效果,减少全屏遍历次数。
- 使用降分辨率进行后处理(如半分辨率模糊)。
- 考虑使用Compute Shader异步处理。
5. 使用Mipmap
合理使用Mipmap可以减少纹理采样时的带宽消耗,但可能增加纹理填充率?实际上,Mipmap减少了纹理缓存未命中,提高纹理采样效率。
填充率的测量
GPU规格中通常提供理论填充率,但实际性能受多种因素影响。使用性能分析工具(如GPUView、Nsight)可以测量实际填充率占用。
总结
填充率是GPU渲染像素的能力,高分辨率、过度绘制和复杂后处理会快速消耗填充率。通过优化渲染管线、减少像素处理量,可以提升整体性能。
常见问题
填充率和帧率有什么关系?
填充率不足会导致GPU无法在帧时间内完成所有像素处理,从而降低帧率。提高填充率或减少像素处理需求可以提升帧率。
如何判断填充率是否为瓶颈?
使用GPU性能分析工具查看ROP利用率和像素处理时间。如果降低分辨率后性能显著提升,可能填充率受限。
移动设备为什么对填充率敏感?
移动设备屏幕分辨率高但GPU填充率较低,且带宽受限,高Overdraw和复杂后处理会迅速耗尽填充率,导致发热和降频。
纹理填充率和像素填充率有区别吗?
有。像素填充率是写入像素的能力,纹理填充率是采样纹理的能力。两者可能不同,复杂纹理采样可能使纹理填充率成为瓶颈。
后处理如何影响填充率?
每个后处理效果都需要遍历全屏像素,执行着色器并可能多次采样,多个后处理叠加会成倍增加填充率需求。