泡泡网显卡频道 PCPOP首页      /      显卡     /      评测    /    正文

纹理压缩的奇妙之旅 漫谈X800的3Dc

    有了插值运算的基础,我们接下来就不难理解其中压缩的实现方法了。因为我们在记录数据的时候就能够摒弃原来的16个数了,转而使用两个数(最大值和最小值)就能表示了,两个数自然要比16个数占的空间要小,这也就是压缩的意义所在。

    当然,这个过程中还有特别重要的一点就是将原数据和插值后的数据进行比较,从而让计算机知道那些不是最大值也不是最小值的点,究竟应该取这8个数值中的哪一个。

    再举个简单的例子,例如,在这个4×4的块中,其中第2行第3个像素的X项数值为154,经过比较,我们就将它本身的154舍掉,我们用插值中的156来代替它。

    这些信息也同样需要进行记录,而且这些信息占用的空间相对于具体的数据还要大,因为具体的数据仅仅需要记录那两个最大值和最小值就可以了。

    现在的问题就是我们如何来记录每个点的数值应该取插值得来的8个数值中的哪个数呢?最简单的就是用序号表示了。例如前面我们刚刚举的例子,第2行第3个像素采用了156,也就是8个数中的第3个,我们就用“2”来表示(最小的序号用0,最大的序号用7)。

    而表示序号的时候最大不过取到7,所以在存储的时候就大大的减少了占用的空间,仅仅使用一个3bit的二进制空间就能正好放下。

3Dc算法演示

    我们前面讲的仅仅是X项的压缩,Y项的压缩的道理是一样的。

    这个时候该有人起疑问了:X、Y两个分量都压缩了,怎么不提第3个分量——Z轴分量的事儿啊。在这里3Dc技术再次利用了一个非常巧妙的方法,就是根据这个向量是一个仅仅表示方向的向量的特点,将向量的长度取“256”,然后利用公式X2+Y2+Z2=2562,将Z在后期算出。<

0人已赞

关注我们

泡泡网

手机扫码关注