Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 【总结】MSAA中黑线问题的出现原因以及解决方案 Reply To: 【总结】MSAA中黑线问题的出现原因以及解决方案

#3590 Score: 0
maajor
Participant
3 pts

怎么吞我回复 是不是不能贴图片引用
—–
谢谢楼主总结,我也查了些资料,这里做个补充

贴一张RTR4的配图

个人理解硬件实现上,是不会把color buffer/depth buffer x4的,但确实per pixel多存了一些样本。需要注意,这些样本可能是相同的。比如配图中的例子,0/2/3处的红色的color/z是相同的。per pixel上并不需要计算sub-pixel的颜色和深度,而仅仅是在通过相交测试的sub-pixel中,保存了同样的color/z。

这也就是MSAA与超采样的区别,MSAA里,每个像素只有一次深度和颜色采样(或说光照计算),而超采样需要per sub-pixel都做颜色和深度采样。体现在代码中,应该是per pixel只有一次getColor和compute_z。

也因此MSAAx2的时间应该小于没有AA的四倍,笔者的例子中,MSAAx2是1.4s,没有AA是0.55s,两倍多一点。
这里可以注意,sub-pixel的样本不需要全屏存,其实只有边缘处是需要的。如果某个pixel的sub-pixel样本全部通过深度测试,那最后resolve阶段我就不用去平均这里sub-pixel的颜色,直接拿color buffer就行。

这也就引申出右侧EQAA,既然样本可能一样,那我维护个表和索引就行。图中这个case,就少存了两个样本。一些当代硬件就是这么实现的,比如Apple的GPU Enhanced MSAA

Attachments:
You must be logged in to view attached files.