Vertex和Pixel着色器是什么?

91

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

它们之间有什么区别?哪个更好?


1
可能是顶点着色器 vs 片段着色器的重复问题。 - BЈовић
相关:https://dev59.com/wmMm5IYBdhLWcg3wMs3R#36211337 - Ciro Santilli OurBigBook.com
6个回答

72

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

在渲染管道顺序中,

顶点着色器 - 获取一个单一的点并进行调整。可用于计算复杂的**顶点照明计算作为下一阶段的设置和/或使点变形(抖动、缩放等)。

每个生成的基元传递到

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

每个生成的基元都会通过扫描线转换,并将跨越的每个像素传递到

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

这些像素然后被放在当前绘制缓冲区(屏幕、后备缓冲区、渲染到纹理等)上。

所有着色器都可以访问全局数据,如世界视图矩阵,并且开发人员可以传递简单的变量供它们用于照明或任何其他目的。着色器以汇编语言的方式进行处理,但现代的DirectX和OpenGL版本内置了名为HLSL和GLSL的高级类c语言编译器。NVIDIA还有一个着色器编译器CG,可以在两个API上工作。

对于细分使用,DirectX 11中现在有3个新的着色器。新的完整着色器顺序是顶点->外壳->细分->域->几何->像素。我还没有使用这些新的着色器,因此不太能准确地描述它们。


3
你的渲染管线有问题。顶点首先在顶点着色器中进行处理,然后由它们组成的基元通过几何着色器。我想知道为什么没有其他人抱怨这个错误的顺序。 - Christian Rau
2
镶嵌着色器由* Hull着色器 Domain着色器 组成。中间的 Tessellator 阶段不可编程。因此,只有两个额外的着色器。 GL等效物将是 Tessellation Control Tessellation Evaluation *。 - Christian Rau

56

像素着色器是GPU(图形处理单元)组件,可以编程按每个像素操作并处理诸如照明和凸起映射等内容。

顶点着色器也是GPU组件,使用类似特定汇编语言的语言进行编程,与像素着色器一样,但其面向场景几何体,可以添加漫画般的轮廓边缘到对象等。

两者都没有优劣之分,它们各有其特定用途。大多数支持DirectX 9或更高版本的现代显卡都包括这些功能。

有多种网络资源可用于了解如何使用这些内容。 NVidia和ATI特别是这个主题的良好资源。


15
着色器也可以用高级语言(非汇编语言)编写,如Cg、HLSL和GLSL。 - Walt Ritscher

14

顶点着色器和像素着色器在图形管线中提供不同的功能。顶点着色器接收和处理与顶点相关的数据(位置、法线、纹理坐标)。

像素(或更准确地说,片段)着色器接收从顶点着色器处理的值进行插值,并生成像素片段。大部分“酷炫”的效果都是在像素着色器中实现的。这是纹理查找和光照等操作发生的地方。


7

DirectX相关:

着色器(Shader):

一组程序,可将额外的图形特效应用于未在固定渲染管线中定义的物体。 因此,我们可以根据需要拥有自己的图形效果 - 也就是说,我们不再受限于预定义的“固定”操作。

HLSL(High-Level Shading Language)高级着色语言:

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

顶点着色器(Vertex Shaders):

顶点着色器是在显卡GPU上执行的程序,可对每个顶点逐个进行操作。这使我们能够编写自己的顶点算法。

像素着色器(Pixel Shaders):

像素着色器是在光栅化过程中针对每个像素在显卡GPU上执行的程序。它使我们能够直接访问/操作单个像素。 这种直接访问像素的方式使我们能够实现各种特殊效果,例如多重纹理、逐像素照明、景深、云模拟、火焰模拟和复杂的阴影技术。

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


4
在开发中,像素着色器是一个作用于每个像素的小程序,类似地,顶点着色器作用于每个顶点。
这些可以用来创建特殊效果、阴影、照明等等。
由于每个像素和顶点都是被单独操作的,这些着色器非常适合现代图形处理器的高度并行结构。

0
曾经有一个Flash演示,展示了从靠近观察者到反射距离的平面曝光。这代表了通过任何其他平面返回到观察者的反射光距离的观察平面。 那些平面上的任何东西都可以直接使用,或者用作参数化数据值来改变返回的光线或颜色。 这是你将要看到的最简单的解释。我希望Flash演示仍然可以执行,但由于安全原因不再可行。 实际上,任何设置沿Z轴显示x个垂直平面与这些平面交互的3D着色器的人都可以很快成名。视图可以以概念视图显示的方式显示在角度上,以便解剖明显。换句话说,视图将是管道看到的和观察者看到的角度截面。 事实上,当这个着色器被用作着色器创建时,开发人员只需将必要的平面插入到Z轴中即可,这可能会让某人赚大钱。侧边的查看窗口将显示渲染结果。 我创造百万富翁。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接