● 原子构成物质,像素构成色彩
我们在日常生活中所看到的一切景物都具有自己独特的颜色,将这些颜色反映到计算机程序中并加以定义的最小单元就是像素。颜色不仅能够影响透视感的正确表达,更能将真实的物体信息传达给我们。
如果说多边形影响了物体的精细程度,那像素所影响的就是物体的真实感了。
举个例子,我们在日常生活中自己捏一块橡皮泥、削一块方木,或者折一个纸盒子,这些东西的表面细节不会非常丰富。即便透过多边形操作没有还原他们的全部几何细节,相对来说人们也可以接受。但由于自然界丰富的光线和颜色关系,低颜色细节的自然场景几乎是不存在的,如果表达他们的颜色出现了问题,我们一眼就能发现其中的错误并且产生很自然的不真实感。这就是像素处理的意义,像素处理的作用就在于维护图形颜色的自然和真实。
关于像素表达的方式我们已经在先前的文章《曝你不知道的DX11 解析GPU通用计算妙》中进行了讨论,实际上对像素的表达通常都是由预制烘焙纹理和shader操作共同实现的。使用预制纹理虽然操作简便,但受限于开发者本身的水平界限,这种方式几乎永远不可能表达全部正确的效果。而使用shader对颜色和光线关系进行实时的运算则可以在最大限度上满足高互动性和高自由度的游戏环境下对图形真实性表达的需求,同时大幅降低预制烘焙材质的数量要求。所以,NVIDIA选择了shader而不是纹理作为未来的方向,力求配合业界在最大限度上保证用户能够拥有正确而又真实的游戏体验。
这个选择几乎是致命的。除了最初的成功之外,它险些将NVIDIA的诸代构架都逼上绝路。这个选择又是勇敢的,因为联系后面的真相,我发现它代表了坚定的为用户提供最佳游戏体验的信念,以及阻止图形业界因为任何外来原因出现倒退的信念。
在DirectX 10之前,由于shader格式和结构的严格规范性以及限制性,对shader的处理效率主要依赖于吞吐能力和寄存器的数量。只要寄存器资源达到要求并且不发生溢出,决定体系shader性能的就只有ALU的频率。而当API发展DirectX 10之后,微软通过开放底层ALU和逐步解放shader结构的方式开始了shader效率的提升之路 。在新API的环境下,想要更加灵活和高效的执行shader,硬件必须具备良好的执行能力和优秀的缓冲能力,影响硬件执行性能的因素也变得更多了。
比如说,缓冲存储体系。