Unity Shader学习
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上运行的
- 有一些特定类型的着色器,如顶点着色器、片元着色器
- 依着色器我们可以控制控制流水线中的渲染细节,例如使用顶掉着色器进行顶点变换以及传递数据,用片元着色器来进行逐像素的渲染