[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]