DebugViewMode里面的QuadOverdraw计算是否准确?

[Image Removed]最近观察到DebugView的QuadOverdraw模式或者ShaderComplexity & QuadOverdraw模式的可视化结果有些异常。

对比ShaderComplexity和ShaderComplexity & QuadOverdraw的差异,发现只是在一些奇怪的区域会产生类似噪点的像素,而那些区域明显是没有Overdraw的。

如果只是单独使用QuadOverdraw模式,还会发现这些噪点一直在闪烁,不稳定,看起来就很像Bug。

通过RenderDoc和代码分析,发现Overdraw会单独绘制到一张Texture上,最后在可视化阶段,叠加到包含ShaderComplexity的SceneColor贴图上。但是观察这张Overdraw贴图,显然不符合直观的感受,并没有体现Overdraw的区域和程度。

这个问题感觉已经存在很久了,从UE4开始。所以想确认下,这个Overdraw统计是否是准确的。

另外,分析了一下实现逻辑,感觉ShaderComplexity本身是Additive的混合模式,在叠加的过程中是否已经包含了Overdraw的信息(因为Complexity也是通过颜色体现,叠加越多越复杂,颜色越深,也代表Overdraw越严重)。是否还有必要增加一个计算比较复杂的Overdraw统计步骤。

-----------------------

目前发现QuadOverdraw和PixelOverdraw的语义不一样。它是统计一个Quad里面被浪费的像素数,然后对Complexity进行放大(假设一个Quad只包含一个像素,那么有3个像素浪费,Complexity * 4)。然后QuadOverdraw只所以闪烁不稳定的原因,应该是在ComputeQuadCoverage阶段执行了循环,由于Shader执行的乱序和不稳定导致的。

[Attachment Removed]

重现步骤
拖动任意一个多层叠加的Niagara粒子到场景中,然后分别切换Optimization ViewMode的ShaderComplexity、ShaderComplexity & QuadOverdraw或者QuadOverdraw模式。观察可视化结果。

[Attachment Removed]

Hi,

抱歉回复的比较晚,移动端的Shader Complexity的Viewmode一直都是不太准确的,我们一直有Jira追踪(UE-184033),但是到目前位置还没有修复,优先级一直不是很高。通常还是用PC的预览作为参考。

[Attachment Removed]