什么是Shader
Shader就是我们常听到的着色器,专门用来渲染图形的一种技术,在Unity中的所有材质都属于Shader的范畴。
图像渲染管线
应用阶段 CPU
- 准备场景数据
- 粗颗粒剔除
- 设置模型的渲染状态
- 输出渲染图元(点、线、三角面)
- CPU向GPU发送渲染命令
- 数据加载到显存:硬盘HDD=》内存RAM=》显存VRAM
- 设置渲染状态:纹理设置、混合设置、透明设置、顶点着⾊器设置、⽚元着⾊器设置等等
- 调⽤DrawCall
批处理减少DrawCall
几何阶段 GPU
- GPU绘制
- 输出屏幕空间的顶点信息
- GPU流⽔线
- 输⼊:顶点数据
- 顶点着⾊器
- 空间变换
运算过程:模型空间(模型的中心为原点)=》世界空间(世界的中心为原点)=》观察空间(摄像机为原点)=》裁剪空间(将遮挡部分裁剪不显示)=》屏幕空间(模型的xy坐标对应屏幕上的2D像素坐标) - 顶点着⾊
- 空间变换
- 曲⾯细分着⾊器:可选着⾊器,细分图元
- ⼏何着⾊器:可选着⾊器,逐图元着⾊or产⽣更多图元
- 裁剪:裁剪看不到(被遮挡或内部的)的图元
- 屏幕映射:图元转换到屏幕坐标系(根据屏幕大小自适应)
光栅化阶段 GPU
- ⽣成像素
- 渲染最终图像
- GPU流⽔线
- 三⻆形设置:根据顶点画出三角形
- 三角形遍历:根据三角形的顶点坐标计算出那些像素需要被渲染
- ⽚元着⾊器:逐⽚元的着⾊操作
- 逐⽚元操作:修改颜⾊、深度缓冲、混合操作
- 输出:屏幕图像:根据像素的位置、深度、贴图坐标、法线、切线、颜⾊等输出每个像素的颜⾊、透明度
DX和OpenGL
DirectX :Direct eXtension简称DX,是由微软公司创建的多媒体编程接口。包含图形, 声音, 输入, 网络等模块。
OpenGL :OPENGL是SGI开发的一套三维图形软件包。只是图形函数库。
单就图形而论, DirectX 的图形库性能不如 OpenGL
OpenGL稳定,可跨平台使用。但 OpenGL 多需要显卡支持.