什么是Vertex和Pixel着色器?
他们之间有什么区别?哪一个是最好的?
DirectX 10和OpenGL 3引入了几何着色器作为第三种类型.
在渲染管道订单中 -
顶点着色器 - 采用单点并可以进行调整.可用于计算复杂的**顶点光照计算,作为下一阶段的设置和/或扭曲周围的点(摆动,缩放等).
每个得到的原语都传递给了
几何着色器 - 获取每个变换后的基元(三角形等)并对其执行计算.这可以添加新点,将它们带走或根据需要移动它们.这可以用于从单个基础网格动态添加或移除细节级别,基于点(对于复杂粒子系统)和其他类似任务创建数学网格.
每个得到的图元都会被扫描线转换,并且跨度覆盖的每个像素都会通过
像素着色器(OpenGL中的片段着色器) - 根据顶点着色器传入的内容,绑定纹理和用户添加的数据计算屏幕上像素的颜色.这根本无法读取当前屏幕,只需计算出当前图元的像素应该是什么颜色/透明度.
那些像素然后被放在当前的绘制缓冲区(屏幕,后备缓冲区,渲染到纹理,等等)
所有着色器都可以访问全局数据,例如世界视图矩阵,开发人员可以传递简单的变量,以便用于照明或任何其他目的.着色器以类似汇编语言的方式处理,但现代的DirectX和OpenGL版本内置了高级的类C语言编译器,分别构建在HLSL和GLSL中.NVidia还有一个名为CG的着色器编译器,可以在两个API上运行.
[编辑以反映我之前的错误顺序(几何 - >顶点 - >像素),如评论中所述.
DirectX 11中现在有3个新的着色器用于镶嵌.新的完整着色器顺序为Vertex-> Hull-> Tessellation-> Domain-> Geometry-> Pixel.我还没有使用这些新的,所以不觉得有资格准确描述它们.
甲像素着色器是一个GPU(图形处理单元),其可以被编程以在每像素基础操作和照顾东西一样照明和凹凸映射组件.
甲顶点着色器也GPU组分和使用特定的组件状的语言,如像素着色器也被编程,但被定向到场景的几何形状和可以做的事情,如添加卡通轮廓边到物体等
两者都不比另一个好,它们各自都有其特定的用途.支持DirectX 9或更高版本的大多数现代图形卡都包含这些功能.
网上有多种资源可以更好地了解如何使用这些内容.NVidia和ATI尤其适用于有关此主题的文档.
顶点和像素着色器在图形管道中提供不同的功能.顶点着色器采用并处理与顶点相关的数据(位置,法线,texcoords).
像素(或更准确地说,片段)着色器采用从顶点着色器中处理的值进行插值并生成像素片段.大多数"酷"的东西都是在像素着色器中完成的.这就是纹理查找和照明之类的事情.
DirectX特定:
着色器:
一组程序,它们为未在固定渲染管道中定义的对象实现附加图形功能.因此,我们可以根据自己的需要拥有自己的图形效果 - 即,我们不再局限于预定义的"固定"操作.
HLSL :(高级着色语言):
HLSL是一种类似C++的编程语言,用于实现着色器(像素着色器/顶点着色器).
顶点着色器:
顶点着色器是在图形卡的GPU上执行的程序,其分别在每个顶点上操作.这有助于我们编写自己的自定义算法来处理顶点.
像素着色器:
像素着色器是在每个像素的光栅化处理期间在图形卡的GPU上执行的程序.它为我们提供了直接访问/操作单个像素的工具.这种对像素的直接访问使我们能够实现各种特殊效果,例如多纹理,每像素照明,景深,云模拟,火灾模拟和复杂的阴影技术.
注意:顶点着色器和像素着色器(程序)都应在使用前使用特定版本的编译器进行编译.编译可以像调用具有所需参数的API一样进行,例如文件名,主条目功能等,