什么是Vertex和Pixel着色器?

时间:2009-05-07 01:41:34

标签: graphics shader terminology

什么是顶点和像素着色器?

他们之间有什么区别?哪一个最好?

6 个答案:

答案 0 :(得分:61)

DirectX 10和OpenGL 3引入了几何着色器作为第三种类型。

在渲染管道订单中 -

顶点着色器 - 采用单点并可以进行调整。可用于计算复杂的**顶点光照计算,作为下一阶段的设置和/或扭曲周围的点(摆动,缩放等)。

每个生成的基元都会传递给

几何着色器 - 获取每个变换后的基元(三角形等)并对其执行计算。这可以添加新点,将它们带走或根据需要移动它们。这可以用于从单个基础网格动态添加或删除细节级别,基于点(对于复杂粒子系统)和其他类似任务创建数学网格。

每个生成的图元都会转换扫描线,并且跨度覆盖的每个像素都会通过

传递

像素着色器(OpenGL中的片段着色器) - 根据顶点着色器传入的内容,绑定纹理和用户添加的数据计算屏幕上像素的颜色。这根本无法读取当前屏幕,只需确定当前图元的像素应该是什么颜色/透明度。

然后将这些像素放在当前的绘制缓冲区(屏幕,后备缓冲区,渲染到纹理,等等)

所有着色器都可以访问全局数据,例如世界视图矩阵,开发人员可以传递简单的变量,以便用于照明或任何其他目的。着色器以类似汇编语言的方式处理,但现代的DirectX和OpenGL版本内置了高级的类C语言编译器,分别构建在HLSL和GLSL中。 NVidia还有一个名为CG的着色器编译器,可以在两个API上运行。

[编辑以反映我之前的错误顺序(Geometry-> Vertex-> Pixel),如评论中所述。]

DirectX 11中现在有3个新着色器用于镶嵌细分。新的完整着色器顺序是Vertex-> Hull-> Tessellation-> Domain-> Geometry-> Pixel。我还没有使用这些新的,所以不觉得有资格准确描述它们。

答案 1 :(得分:43)

Pixel Shader是一个GPU(图形处理单元)组件,可以编程为基于每个像素进行操作,并处理照明和凹凸贴图等内容。

Vertex Shader也是GPU组件,并且也使用特定的类似于程序集的语言进行编程,如像素着色器,但是面向场景几何体,可以执行诸如向对象添加卡通轮廓边等操作。

两者都不比另一种更好,它们各自都有其特定的用途。支持DirectX 9或更高版本的大多数现代图形卡都包含这些功能。

网络上有多种资源可以更好地了解如何使用这些内容。 NVidia和ATI尤其适用于有关此主题的文档。

答案 2 :(得分:11)

Vertex和Pixel着色器在图形管道中提供不同的功能。顶点着色器采用并处理与顶点相关的数据(位置,法线,texcoords)。

像素(或更准确地说,片段)着色器采用从顶点着色器中处理的值进行插值并生成像素片段。大多数“酷”的东西都是在像素着色器中完成的。这就是纹理查找和照明之类的事情。

答案 3 :(得分:5)

DirectX特定:

<强>着色器:

为未在固定渲染管道中定义的对象实现附加图形功能的程序集。 因此,我们可以根据自己的需要拥有自己的图形效果 - 即,我们不再局限于预定义的“固定” 操作

HLSL :(高级着色语言):

HLSL是一种类似C ++的编程语言,用于实现着色器(像素着色器/顶点着色器)。

顶点着色器:

顶点着色器是在图形卡的GPU上执行的程序 分别对每个顶点进行操作。这有助于我们编写自己的自定义算法来处理顶点。

像素着色器:

像素着色器是在图形卡的GPU上执行的程序 每个像素的光栅化过程。它为我们提供了直接访问/操作单个像素的工具。 这种对像素的直接访问使我们能够实现各种特殊效果,例如多纹理,每像素照明,景深,云模拟,火灾模拟和复杂的阴影技术。

注意:顶点着色器和像素着色器(程序)都应该在使用前使用特定版本的编译器进行编译。编译可以像调用具有所需参数的API一样完成,例如文件名,主条目功能等,

答案 4 :(得分:3)

在开发方面,Pixel着色器是一个小程序,可以单独对每个像素进行操作,类似地,Vertex着色器可以单独对每个顶点进行操作。

这些可用于创建特效,阴影,灯光等......

由于每个Pixel / Vertex都是单独操作的,因此这些着色器适合现代图形处理器的高度并行架构。

答案 5 :(得分:0)

过去曾经有一个Flash演示,它显示了从靠近观察者的位置到反射距离的曝光平面。这代表反射光距离的观察平面,该反射平面通过任何其他平面返回观察者的距离。 这些平面上的任何东西都可以按原样使用,也可以在参数化的数据值中用于更改返回的光或颜色。 这是您将要看到的最简单的解释。我希望Flash演示仍然可以执行,但由于安全原因不能再执行了。 实际上,任何设置3d着色器(沿Z轴显示x个垂直平面,显示与这些平面的相互作用)的物体都可以很快得到名声。该视图可以以与概念视图的显示方式相同的角度显示,以使解剖清晰可见。换句话说,该视图将是管道看到的内容和观看者看到的内容的角度横截面。 事实上,当使用此着色器作为着色器创建者(开发人员只需将必要的平面插入到Z轴临时对象中)时,这可以使某人获得真正的高薪。侧面的查看窗口将显示渲染结果。 我赚了百万富翁。