3.5 Pixel Operation
Pixel operation虽然只有短短的两行字,但其实包含了很多的操作在里面。也许读者们曾经听过这样的说法:近年来的3D绘图发展,以Pixel Shader的发展为主。是的,这个Stage的能耐的确在这四五年来有长足的进展。所谓的Shader,我们会在之后有很大篇幅的讨论,但是和这里的Pixel operation稍有不同。
Pixel operation最后的目的只有一件事:算出Pixel color,但是这中间包含了很多种计算颜色的方法以及技术。在目前介绍的固定式管线(Fixed pipeline)中,Pixel operation包含了哪些事呢?1. Texture operation 纹理操作,也就是根据Pixel的纹理坐标,查询相应的纹理(Texture),来计算Pixel该有的颜色。 . 2. Blending 混色,根据目前已经画好的颜色,与现在正在算的颜色的透明度(Alpha),混合两种颜色,当作新的颜色输出。 . 3. Filtering 将正在算的颜色经过某种滤镜(Filtering)后输出。关于filtering的理论牵涉到数字讯号学,请暂时理解为,经过一种数学运算之后变成了新的颜色。 诸如此类的操作,都是属于Pixel operation的范围。但是我们还有一件事没提到,那就是,像是纹理坐标(Texture coordinate)或是现有的颜色、透明度之类的数据是怎么来的呢?像素的 X,Y 坐标是经由Rasterizing产生的,那 Z 坐标呢?
答案是内插法(interpolation)。记得我们提过在Vertex上包含了许多信息吧?这些信息经过内插后变成了Pixel的数据。举个例子,先来考虑一维,也就是只有X坐标的情况
两个Vertex的X坐标分别是 1.8 、 4.5,而Rasterize后的Pixel 有三个:2 3 4。假设1.8的Vertex,其RGBA颜色向量是(1.0 ,0.0 ,0.5 ,1.0) 4.5的Vertex,其RGBA颜色向量是(0.0 ,0.8 ,0.5 ,1.0)。那么 3这个Pixel的RGBA颜色向量,就是这两者的线性内插值。以红色(R)来说就是
1.0*(4.5-3) + 0.0*(3-1.8) ----------------------------- = 0.55555.... (4.5 - 1.8) 这个方法推广到二维的X,Y坐标上,则称作双线性内插(Bi-linear interpolation)
实际上,在硬件上的双线性内插是透过Plane Equation来完成的,在Triangle Setup的阶段,就对Vertex上需要做内插的每个Attribute都建立一个Plane equation。之后的线性内插就只是将Pixel坐标代入所需Attribute的Plane equation的过程。这部份相关的数学我说得很简略(深入浅出嘛),总之,因为在Pixel operation中,有大量的线性内插需求,所以在硬件上有专门的电路来处理快速内插的需求。
|