什么是顶点和像素着色器?
他们之间有什么区别?哪一个最好?
答案 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轴临时对象中)时,这可以使某人获得真正的高薪。侧面的查看窗口将显示渲染结果。 我赚了百万富翁。