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

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

有帮助吗?

解决方案

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

Vertex Shader 也是GPU组件,也使用特定的类似汇编的语言进行编程,像素着色器,但面向场景几何,可以做一些事情,如向对象添加卡通轮廓边等。

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

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

其他提示

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。我还没有使用这些新的,所以不觉得有资格准确描述它们。

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

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

DirectX特定:

<强>着色器:

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

HLSL :(高级着色语言):

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

顶点着色器:

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

像素着色器:

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top