图形学自问自答3——反走样和纹理过滤

2020-12-28  本文已影响0人  太刀
新长征路上的摇滚

1.多重采样MSAA和超SSAA采样有什么区别?

MSAA 和 SSAA 都是反走样(抗锯齿)的手段,具体实现原理有差别。

1.1 SSAA(Super-Sample Anti-Aliasing)原理:

以一个更大的分辨率来渲染场景,然后再把相邻像素值做一个过滤(比如平均等)得到最终的图像(Resolve)。以2倍SSAA 为例,在以 1024x1024 的像素渲染画面时,会以 2048x2048 的分辨率生成缓冲区,缓冲区中的每一个片元都会执行一遍片元着色器,最后再把原本属于一个片元的4个子片元的颜色进行计算得到实际片元的颜色。

最常用的一种方法是平均取4个点,也有很多其它的算法,包括随机生成等。如图:


子片元生成方法

1.2 MSAA(Multiple-Sample Anti-Aliasing)原理:

和SSAA类似,2倍MSAA为例,每个实际片元也生成4个子采样点,也需要使用一个更大分辨率的缓冲区来存放子采样点的颜色。与 SSAA 的差别在于,并不是每个子采样点都会执行片元着色器。而只有实际片元会执行片元着色器,若子采样点被覆盖,则该子采样点的颜色被设置为实际片元执行片元着色器得到的颜色,同时需要记录每个子采样点是否被覆盖,以及覆盖该子采样点的深度值。最终由硬件将子采样的的颜色值计算得到片元的实际颜色。


多重采样简单过程

2. 纹理的 FilterType 选项是什么意思?

常用的引擎(Unity、Cocos Creator)等,纹理设置都有 FilterType 这个设置,通常的选项是以下几种:

我们知道,屏幕是由若干个像素组成,像素是一个有大小的“格子”。而纹理也是由若干个纹素组成,纹素同样是“格子”。当渲染一张纹理到屏幕时,最理想的情况是,渲染区域分辨率和纹理本身的分辨率一样,也就是说纹素正好和像素一一对应。这种理想情况下,纹理采样时,像素中心的 uv 坐标应该正好落在某一个纹素的中心,可以直接取这个纹素的颜色作为像素的颜色。
然而大部分情况下,纹理和渲染区域不具有相同分辨率,此时像素中心点的uv坐标不会落在纹素的中心,此时该如何确定像素的颜色会得到更好的显示效果呢?

2.1 Point 最近点采样

2.2 Bilinear 双线性过滤

2.3 Trilinear 三线性过滤

三线性过滤示意图
上一篇下一篇

猜你喜欢

热点阅读