Direct X 12 – Blending 融合

参考下图,我们在绘制每一帧的画面时,首先绘制地形,之后是木箱,之后地形和木箱的像素就会记录在back buffer中。接着,我们使用blending将水面的像素绘制到back buffer,这样水面的像素就会与地形和木箱的像素在back buffer中进行融合,通过这一系列的步骤,就能模拟出地形和木箱位于水面下的效果。在本章节中,我们将学习blending(融合)的技术,其能将我们正在光栅化的像素(就是所谓的起始像素)与之前已经光栅化至back buffer的像素(就是所谓的终点像素)相融合/结合。该技术让我们可以绘制那些半透明的物体,例如水和玻璃等等。

考虑到便于大家理解,作者默认Blending技术将会绘制到back buffer而不是render target。然而,在之后的章节我们将会学习,将物体绘制到“与显示不相关”的render target中。而对于该类型的render target的融合技术,其实与back buffer大同小异,只不过融合的对象并不是back buffer中的像素,而是其他render target中的像素。

目标:

1. 理解blending的工作原理以及如何使用DX12实现该效果。

2. 学会DX12所支持的不同类型的blend。

3. 学会如何使用颜色向量中的α通道控制图元的透明度。

4. 学会如何不将像素绘制到back buffer中,除了之前提到的HLSL中的函数clip。

10.1 Blending 等式

Csrc表示像素着色器输出的第ij个像素的颜色,且正被光栅化(起始像素),同时Cdst表示在back buffer中的第ij个像素(终点像素)的颜色。如果没有blending,那么Csrc可能会直接覆盖Cdst(假设Csrc通过了depth/stencil test)。但是,如果使用blending技术,那么Csrc和Cdst互相融合之后将得到一个新的颜色C,其会覆盖Cdst(假设C将被绘制到back buffer的第ij个像素)。DX将使用以下blending等式将起始像素和终点像素进行融合:

颜色向量Fsrc和Fdst分别表示起始融合因子和终点融合因子,这两个变量使我们能够以不同的方法来修正起始像素和终点像素,以达到不同的效果。而等式中的运算符“x”表示颜色向量的乘法,运算符“+”则表示某一种运算方式(我们将在下一小节中介绍)。

而上述等式只涉及颜色向量的RGB通道的运算。而α通道则有另一个相似的运算式:

虽然上述两个等式相同但在运算时我们可以让两个融合因子和“+”的运算方式不同。在运算时将RGB和α分离意味着我们可以分别处理这两组变量并实现更多的效果。

一般来说我们只会融合RGB通道而不是α。这是因为我们并不在乎back buffer中像素的α值。只有当你需要涉及α算法时,我们才考虑α的融合。

留下评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据