shader——着色器
种类
顶点着色器,描述顶点属性(位置、纹理坐标、颜色等)
像素着色器,描述像素的特征(颜色、z深度和alpha值)
统一着色器模型。
二维着色器
二维着色器处理的是数字图像,也叫纹理,着色器可以修改它们的像素。二维着色器也可以参与三维图形的渲染。目前只有“像素着色器”一种二维着色器。
像素着色器
像素着色器(英语:pixel shader)也叫片段着色器(英语:fragment shader),用于计算“片段”的颜色和其它属性,此处的“片段”通常是指单独的像素。最简单的像素着色器只有输出颜色值;复杂的像素着色器可以有多个输入输出[4]。像素着色器既可以永远输出同一个颜色,也可以考虑光照、做凹凸贴图、生成阴影和高光,还可以实现半透明等效果。像素着色器还可以修改片段的深度,也可以为多个渲染目标输出多个颜色。
三维图形学中,单独一个像素着色器并不能实现非常复杂的效果,因为它只能处理单独的像素,没有场景中其它几何体的信息。不过,像素着色器有屏幕坐标信息,如果将屏幕上的内容作为纹理传入,它就可以对当前像素附近的像素进行采样。利用这种方法,可以实现大量二维后期特效,例如模糊和边缘检测。
像素着色器还可以处理管线中间过程中的任何二维图像,包括精灵和纹理。因此,如果需要在栅格化后进行后期处理,像素着色器是唯一选择。
三维着色器
三维着色器处理的是三维模型或者其它几何体,可以访问用来绘制模型的颜色和纹理。顶点着色器是最早的三维着色器;几何着色器可以在着色器中生成新的顶点;细分曲面着色器(英语:tessellation shader)则可以向一组顶点中添加细节。
顶点着色器
顶点着色器是最常见的一种 3D 着色器,对每个交给图形处理器的顶点都运行一次。目的是将每个顶点在虚拟空间中的 3D 坐标变换到在屏幕上显示的 2D 坐标(深度缓冲(Z-Buffer)的深度值也是如此)。顶点着色器可以掌控顶点的位置、颜色和纹理坐标等属性,但无法生成新的顶点。顶点着色器的输出传递到流水线的下一步。如果有之后定义了几何着色器,则几何着色器会处理顶点着色器的输出数据,否则,光栅化器继续流水线任务。
几何着色器
几何着色器在 OpenGL 3.2 和 Direct3D 10 中被引入, 以前可在带扩展的 OpenGL 2.0+ 中使用。改类型的着色器可以生成新的图形基元,比如点,线和三角形。几何着色器可以从多边形网格中增删顶点。它能够执行对 CPU 来说过于繁重的生成几何结构和增加模型细节的工作。Direct3D 10 增加了支持几何着色器的API,成为 Shader Model 4.0 的组成部分。OpenGL 只可通过它的一个插件来使用几何着色器,但极有可能在3.1版本中该功能将会归并。几何着色器的输出连接光栅化器的输入。
曲面细分着色器
曲面细分着色器作为一类新的着色器,在 OpenGL 4.0 和 Direct3D 11 中被引入,并在着色器的模型增加了两个阶段:曲面细分控制着色器(或外壳着色器)和曲面细分评估着色器(或域着色器)。这允许了较简单的网格借由特定函数计算,实时被细分成更细腻的网格。这个函示可以与多种变量相关,包含与视点的距离,因此可以主动调整细节层次,使较接近相机的物体有着较多细节。借由在着色器单元中才加上细节,这还可以大幅降低网格所需的带宽,也不需要降采样存储器中的网格。有些计算方式可以上采样任意的网格,有些则允许“提示”网格所要凸显的顶点和边缘。
图元和网格着色器
大约 2017 年, 图元着色器做为新的着色器阶段被 AMD Vega 微体系结构所支持。类似可以访问必要数据的计算着色器来处理几何体。
光线追踪着色器
光线追踪着色器被微软的 DirectX 光线追踪,Khronos Group 的 Vulkan,GLSL 和 SPIR-V,苹果的 Metal 所支持。
计算着色器
计算着色器并不仅限于图形应用程序,还有使用相同的通用图形处理单元执行资源的程序。它们可能在图形管线中被使用,比如额外的动画阶段或光照算法。 一些渲染 API 允许计算着色器轻松的与图形管线共享数据资源。
- 本文链接:https://archer-lan.github.io/2023/11/20/shader%E2%80%94%E2%80%94%E7%9D%80%E8%89%B2%E5%99%A8/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。