我阅读了一些有关Cg的教程,但有一件事对我来说不太清楚。顶点着色器和片元着色器之间到底有什么区别?在哪些情况下,一个比另一个更适合使用?
我阅读了一些有关Cg的教程,但有一件事对我来说不太清楚。顶点着色器和片元着色器之间到底有什么区别?在哪些情况下,一个比另一个更适合使用?
片段着色器(Fragment Shader)与像素着色器(Pixel Shader)是相同的。
主要区别在于顶点着色器(Vertex Shader)可以操作顶点的属性,这些属性是多边形角点的坐标。
而片段着色器则负责处理两个顶点之间的像素颜色。它们会按照特定的规则插值生成定义好的顶点间的颜色过渡效果。
例如: 如果想让多边形完全呈现红色,需要将所有的顶点坐标设置为红色。如果想实现特殊的效果如渐变,就需要通过片段着色器来实现。
换言之:
顶点着色器是图形渲染管线中的早期阶段之一,在模型坐标变换和多边形裁剪之间执行。此时还没有进行任何真正的处理。
然而,片段/像素着色器是光栅化步骤的一部分,用于计算图像并填充或“着色”顶点之间的像素。
如果想了解有关图形渲染管线的更多信息,请参阅以下链接: http://en.wikipedia.org/wiki/Graphics_pipeline
顶点着色器(Vertex shader)在每个顶点上执行,而片元着色器(Fragment shader)在每个像素上执行。片元着色器在顶点着色器之后应用。有关GPU管道的更多信息,请参见链接文字。
顶点变换是图形硬件流水线中的第一个处理阶段。它对每个顶点执行一系列数学操作,包括将顶点位置转换为屏幕位置以供光栅化使用、生成纹理坐标进行纹理映射以及为了确定其颜色而对顶点进行光照。
光栅化的结果是一组像素位置和一组片元。一个基元(primitive)所产生的片元数量与其顶点数量之间没有关系。例如,由三个顶点组成的三角形可能覆盖整个屏幕,从而生成数百万个片元!
前面我们告诉你,如果你不知道什么是片元,可以将其看作像素。但是在这一点上,片元和像素之间的区别变得重要起来。像素表示帧缓冲区中特定位置的内容,如该位置的颜色、深度和任何其他值。片元是更新特定像素可能需要的状态。
之所以称之为“片元”,是因为光栅化将每个几何基元(例如三角形)分成覆盖该基元的每个像素大小的片元。一个片元有一个关联的像素位置、深度值以及一组插值参数,例如颜色、次要(高光)颜色和一个或多个纹理坐标集。这些插值参数由构成生成片元的特定几何基元的变换后的顶点导出。可以将片元看作是“潜在像素”。如果片元通过各种光栅测试(在光栅操作阶段中描述),则该片元会更新帧缓冲区中的像素。