为什么延迟渲染无法使用多重采样抗锯齿(MSAA)?

您所在的位置:网站首页 msaa怎么开 为什么延迟渲染无法使用多重采样抗锯齿(MSAA)?

为什么延迟渲染无法使用多重采样抗锯齿(MSAA)?

2023-09-07 18:38| 来源: 网络整理| 查看: 265

最近几年做管理分了很多心,现在想静下心来沉淀技术。今天去面试了腾讯的岗位,很多问题被问及原理,感觉都略懂却答不出个所以,一定是平时下的功夫不够深,一知半解就动手敲码了。所以从现在开始通过博客好好作记录,平时一些问题都以文章的形式呈现,反复雕琢自己的思考过程,也希望文章能被大牛看到,顺便指点一二。 首先什么是延迟渲染,下面这篇扫盲贴说的比较清楚了。

传送门:http://tieba.baidu.com/p/4674526619?see_lz=1 https://www.jianshu.com/p/8d8471d759da 这篇很详细

平时使用延迟渲染的时候,会发现摄像机 在这里插入图片描述 出现MSAA无法使用的警告。一些文章的说法是:

延迟渲染依赖于每个片段存储的数据,这是通过纹理来完成的。这与多重采样抗锯齿不兼容,因为抗锯齿技术依赖于子像素数据。

通过纹理来完成?还是不能清晰的知其原因。那下面我们就开始剖析下MSAA是如何工作的:

首先简单讲一下什么是MSAA。MSAA就是把每个pixel(或者说fragment)细分为多个sub-pixel,比如分为4个、8个、16个甚至32个sub-pixel,分别对应MSAA4, MSAA8, MSAA16, MSAA32。我们知道,图形学里,每个piexl占据屏幕上的一小块矩形网格。比如对于19201280的显示器,就有19201280个小的矩形网格,每个网格都是一个pixel。而MSAA则把每个小的矩形网格再进行细分。比如MSAA4/MSAA8分别把每个piexl再分为4个或者8个sub-pixel,其中每一个sub-pixel称为一个sample。而正常pipeline里的所有per-pixel(per-fragment)的操作,打开MSAA后,理论上都可以per-sample来处理。这样,每个pixel里的多个sample, 都可以独立进行插值、独立执行fragment shader,计算出独立的颜色值、深度值。然后求出同一个pixel的所有sample的算术平均值(也就是resolve to single sample),就得出这个pixel的最终颜色。通过这种方式,图形边缘的绘制会更精细更平滑。当然,对于19201280的网格,MSAA4相当于在处理19201280*4个网格,计算量(以及显存里某些变量的存储空间)也是成倍增加。

找了许多资料,这个说法比较简明易懂,之前看的《计算机图形学:原理、算法及实践》里也有阐明类似的定义。 这里我自己画个图便于理解: 在这里插入图片描述 拿左上角的像素点来说,要渲染的三角形只占了该像素点的四分之一大小,那如果整个像素点都填充三角形的颜色,当然就会有锯齿,细品,慢慢品。网上一说法是每个像素点有四个sample,有几个simple在三角形区域里面,就用多少个像素点的颜色做差值,得出最终的颜色。

说到这,那为什么延迟渲染里不支持呢?再次搜索发现这篇帖子:

https://www.zhihu.com/question/366668747

上面解释的很详细了,不是技术上不行,是采用msaa每张图x4 (四张图采样)负载过大,吐血,好吧,终贴。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3