我从我很久之前保留的资料中找到这么一句话:Shaders drive the programmable graphics pipeline, and define the final surface properties of an object. 这句话是对shader最精炼和到位的描述,shader的用途、目的与工作方式都包含了在内。
我们知道针对3D硬件的两大API,OpenGL和Direct3D都有它们固定的渲染管线,即pipeline,我们把顶点位置、法线、纹理坐标等数据参数提供出来,然后再定义光源,我们就可以得到一幅渲染出来的图像。在这个具体的渲染过程中游戏和程序的设计者是没办法具体实施控制的。
下面的部分大家都比较熟悉了,从DX8和OpenGL扩展开始将可编程特性引入到渲染管线中来,这样使游戏开发者通过自己编写一段小程序运行于显卡硬件来 自己控制具体的渲染过程,在微软的DirectX中就称这段程序代码shader,在OpenGL中就叫Program,译成中文就是“程序”(还是 OpenGL厚道……)。所以说,shader更多的是表现一种可编程控制的概念。 所以,我想了半天,也找不到一个很合适的名字加给shader,所以还是索性叫shader好了,反正大家都明白。 如果一定要给shader加一个中文名字的话,我希望是“渲染器”。
在pipeline实施渲染过程中引入了可编程特性是对实时渲染进行的一场革命,这样提供给了游戏开发者更大的创作自由度,从而可以创造出更好的效果。 (秩名) |