什么是顶点和像素着色器?
它们之间有什么区别?哪一个是最好的?
什么是顶点和像素着色器?
它们之间有什么区别?哪一个是最好的?
Answers:
DirectX 10和OpenGL 3引入了Geometry Shader作为第三种类型。
在渲染管道顺序中-
顶点着色器-取得一个点并可以对其进行调整。可以用于计算复杂的**顶点照明计算,作为下一阶段的设置和/或扭曲周围的点(摆动,缩放等)。
每个结果基元都传递给
几何着色器-获取每个变换后的图元(三角形等),并可以对其进行计算。这可以添加新点,将其移除或根据需要移动它们。这可用于在单个基础网格中动态添加或删除细节级别,基于一个点(对于复杂粒子系统)和其他类似任务创建数学网格。
每个生成的图元都会转换为scanline,并且span覆盖的每个像素都将通过
像素着色器(OpenGL中的“片段着色器”)-根据顶点着色器传入的内容,绑定的纹理和用户添加的数据计算屏幕上像素的颜色。这根本无法读取当前屏幕,只是确定当前原始图元的像素应具有的颜色/透明度。
然后将这些像素放到当前的绘制缓冲区(屏幕,后缓冲区,渲染到纹理等)上
所有着色器都可以访问诸如世界视图矩阵之类的全局数据,并且开发人员可以传入简单变量以供它们用于照明或任何其他用途。着色器以类似于汇编语言的语言进行处理,但是现代DirectX和OpenGL版本已内置了高级c类语言编译器,分别内置于HLSL和GLSL中。NVidia还具有一个称为CG的着色器编译器,可在两个API上使用。
[编辑以反映评论中指出的我之前的错误顺序(几何->顶点->像素)。]
现在,DirectX 11中使用了3种新的着色器进行细分。新的完整着色器顺序为“顶点”->“外壳”->“镶嵌”->“域”->“几何”->“像素”。我还没有使用过这些新的,所以没有资格准确地描述它们。
DirectX特定:
着色器:
对固定渲染管道中未定义的对象实施附加图形功能的一组程序。因此,我们可以根据需要拥有自己的图形效果-即,我们不再局限于预定义的“固定”操作。
HLSL :(高级着色语言):
HLSL是一种类似于C ++的编程语言,用于实现着色器(像素着色器/顶点着色器)。
顶点着色器:
顶点着色器是在图形卡的GPU上执行的程序,该程序分别在每个顶点上运行。这有助于我们编写自己的自定义算法以与顶点一起使用。
像素着色器:
像素着色器是在光栅化过程中为每个像素在图形卡的GPU上执行的程序。它为我们提供了直接访问/操纵单个像素的功能。对像素的直接访问使我们能够实现多种特殊效果,例如多纹理,每像素照明,景深,云模拟,火灾模拟和复杂的阴影技术。
注意:顶点着色器和像素着色器(程序)都应在使用之前使用特定版本的编译器进行编译。可以像调用具有所需参数(例如文件名,主入口函数等)的API一样进行编译,