剖析虚幻渲染体系:移动端专题(渲染优化)
(2024-05-13 13:27:02)
标签:
it |
分类: 技术 |
12.6.1 渲染管线优化
12.6.1.1 使用新特性
Variable Rate Shading
Variable Rate
Shading(VRS,可变率着色)允许像素着色器一次着色一个或多个像素,这样一个着色计算可以代表一个像素或一组像素。VRS是反锯齿技术的逆解。抗锯齿技术通过平滑高变化的内容,更频繁地采样每个像素,以避免走样(aliasing)和锯齿(jagged)边缘。然而,如果要渲染的表面没有高的颜色变化或将在随后的通道上被模糊(例如,运动模糊),在每个像素都一个着色计算的操作通常是低效的。
VRS允许开发者指定着色率,其中只对一个像素执行一个着色器计算,结果操作应用于指定的像素组配置。如果使用得当,应该不会导致视觉质量下降,同时显著减轻GPU渲染的负担,从而节省功耗并提高性能。
VRS示意图。画面根据颜色变化频率采用不同的着色率,变化高的采用高着色率(如汽车),反之用低着色率(如左下和右下路面)。
VRS支持的常见着色率和运行机制。其中黄点是着色坐标,绿点是直接复用黄点的着色结果。
VRS在渲染管线的工作机制。VRS在光栅化阶段采用指定着色率执行光栅化,进入PS之后再放大。
UE可以给每个材质设定1个着色率,在材质属性模板中:
VRS优化的核心思想在于减少计算次数并复用周边计算点的结果,从而达到提升渲染效率的目的。适合使用VRS的情形:
颜色变化率低的物体。
处于运动模糊区域的物体。
景深范围之外的物体。
使用移动端的VRS需要依赖不同图形API的扩展:
// ------ OpenGLES ------
// Qualcomm
QCOM_shading_rate
GL_SHADING_RATE_1X1_PIXELS_QCOM
GL_SHADING_RATE_1X2_PIXELS_QCOM
......
// Arm / Imagination Tech
(不支持)
// ------ Vulkan ------
VK_KHR_fragment_shading_rate