Unity Shader编程
渲染流水线
概念渲染流水线
- 应用阶段(CPU)
CPU准备好场景数据,输出渲染所须要的几何信息,即渲染图元(能够是点、线、面等)给几何阶段
- 几何阶段(GPU)
把顶点坐标转换到屏幕坐标,输出屏幕空间的二维顶点坐标,每一个顶点坐标对应的深度值、着色等相关信息,传递给下一个阶段
- 光栅化阶段(GPU)
根据几何阶段传递的数据,产生屏幕上的像素,并渲染出最后的图像
GPU渲染流水线
GPU渲染流水线对应概念流水线的最后两个阶段,即几何阶段和光栅化阶段 编程
几何阶段
- 顶点着色器(Vertex Shader)是彻底可编程的,它一般用于实现顶点的空间变换、顶点着色等功能
- 曲面细分着色器(Tessellation Shader)是一个可选的着色器,它用于细分图元
- 几何着色器(Gemetry Shader)是一个可选的着色器,用于执行图元的着色操做,或者被用于产生更多的图元
- 裁剪(Clipping)将那些不在摄影机视野内的顶点剪裁掉,并剔除某些三角图元的面片(可配置)
- 屏幕映射(Screen Mapping)把每一个图元的坐标转换到屏幕坐标(不可配置不可编程)
光栅化阶段
- 三角形设置(Triangle Setup)阶段是固定函数的阶段
- 三角形遍历(Triangle Traversal)阶段是固定函数的阶段
- 片元着色器(Fragment Shader)是彻底可编程的,它用于实现逐片元的着色操做
- 逐片元操做(Per-Fragme Opreations)阶段负责执行不少重要的操做,例如修改颜色、深度缓存、进行混合等,他不是可编程的,可是具备很高的可配置性
Draw Call
CPU调用图像编程接口缓存
什么是shader?
- GPU流水线上一些可高度编程的阶段,而由着色器编译出来的最终代码是会在GPU上运行的
- 有一些特定类型的着色器,如顶点着色器、片元着色器
- 依着色器咱们能够控制控制流水线中的渲染细节,例如使用顶掉着色器进行顶点变换以及传递数据,用片元着色器来进行逐像素的渲染