本系列文章系学习 唐福幸《Unity ShaderLab 新手宝典》的笔记,包含个人理解,如有错误欢迎批评指出
渲染流水线与Shader概念
2.4 现代GPU渲染流水线
OpenGL渲染流水线:
- 顶点着色器:GPU从CPU处获取到顶点数据后,放入顶点着色器,顶点坐标会从模型空间转变成裁切空间。------顶点着色器许用户通过shader程序配置
- 装配图元:将(顶点着色器输出的)顶点数据装配成图元(点、线、面)
- 光栅化:将几何图元转变成片段的过程(图元像素化)
- 确定屏幕坐标中的哪些整型栅格区域被基本图元占用
- 分配颜色值和深度值到各个区域
- 例:甲方(装配图元)出需求,设计师(光栅化)设计出具体的图纸
- 片段着色器:片段经过视锥体裁切后被传递到片段着色器。片段着色器计算每一个像素的颜色,包括计算光照、阴影、纹理等所有的颜色数据得到像素的颜色------片段着色器允许用户通过shader程序配置
- 测试和混合:所有像素颜色确定下来之后,进入测试和混合阶段。一般处理物体相互遮挡时,该显示的内容
- 检测所有像素的深度值
- 将当前片段的深度值与深度缓存中的数值对比
- 判断这个物体前面是否有物体进行遮挡(决定这个像素是否该被丢弃)
- 帧缓存:用于存储渲染到屏幕上的像素,等待下一步输出到屏幕。
2.5 Shader概念
刚刚上面流水线有两个阶段开放给用户自定义配置:顶点着色器、片段着色器,就是通过Shader程序(他是运行在GPU上的)
Shader语言主要的集中种:
- Windows自家:Direct3D:HLSL
- 全平台移植性性高:OpenGL:GLSL
- CG语言
Shader与材质的关系:Shader+参数设置+贴图 = 材质