Unity Shader学习

Unity Shader编程


渲染流水线

概念渲染流水线

  1. 应用阶段(CPU)
    CPU准备好场景数据,输出渲染所须要的几何信息,即渲染图元(能够是点、线、面等)给几何阶段
  2. 几何阶段(GPU)
    把顶点坐标转换到屏幕坐标,输出屏幕空间的二维顶点坐标,每一个顶点坐标对应的深度值、着色等相关信息,传递给下一个阶段
  3. 光栅化阶段(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上运行的
  • 有一些特定类型的着色器,如顶点着色器、片元着色器
  • 依着色器咱们能够控制控制流水线中的渲染细节,例如使用顶掉着色器进行顶点变换以及传递数据,用片元着色器来进行逐像素的渲染