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


Answers:


48

像素着色器是一个GPU(图形处理单元),其可以被编程以在每像素基础操作和照顾东西一样照明和凹凸映射组件。

顶点着色器也GPU组分和使用特定的组件状的语言,如像素着色器也被编程,但被定向到场景的几何形状和可以做的事情,如添加卡通轮廓边到物体等

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

Web上有多种资源,可以更好地了解如何使用这些内容。NVidia和ATI是有关此主题的文档的良好资源。


14
着色器也以更高级别(非汇编)语言编写,例如Cg,HLSL和GLSL。
Walt Ritscher

65

DirectX 10和OpenGL 3引入了Geometry Shader作为第三种类型。

在渲染管道顺序中-

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

每个结果基元都传递给

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

每个生成的图元都会转换为scanline,并且span覆盖的每个像素都将通过

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

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

所有着色器都可以访问诸如世界视图矩阵之类的全局数据,并且开发人员可以传入简单变量以供它们用于照明或任何其他用途。着色器以类似于汇编语言的语言进行处理,但是现代DirectX和OpenGL版本已内置了高级c类语言编译器,分别内置于HLSL和GLSL中。NVidia还具有一个称为CG的着色器编译器,可在两个API上使用。

[编辑以反映评论中指出的我之前的错误顺序(几何->顶点->像素)。]

现在,DirectX 11中使用了3种新的着色器进行细分。新的完整着色器顺序为“顶点”->“外壳”->“镶嵌”->“域”->“几何”->“像素”。我还没有使用过这些新的,所以没有资格准确地描述它们。


2
您的渲染管道是错误的。首先在顶点着色器中处理顶点,然后将它们组成的图元通过几何着色器。我不知道为什么没有人抱怨这个错误的命令。
Christian Rau

2
镶嵌着色器由Hull着色器Domain着色器组成。介于中间的Tessellator阶段是不可编程的。因此,只有两个其他着色器。GL等效项是细分控制细分评估
Christian Rau 2012年

12

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

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


5

DirectX特定:

着色器:

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

HLSL :(高级着色语言):

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

顶点着色器:

顶点着色器是在图形卡的GPU上执行的程序,该程序分别在每个顶点上运行。这有助于我们编写自己的自定义算法以与顶点一起使用。

像素着色器:

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

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


4

在开发方面,像素着色器是一个小程序,可在每个像素上单独运行,类似的是,顶点着色器可在每个顶点上单独运行。

这些可用于创建特殊效果,阴影,照明等。

由于每个像素/顶点都在单独的位置上操作,因此这些着色器适用于现代图形处理器的高度并行架构。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.