了解一下渲染管线的主要流程
CPU应用阶段
1、剔除Culling
视锥剔除(Frustum Culling)
层级剔除(Layer Culling Mask)、遮挡剔除(Occlusion Culling)等等
2、渲染顺序
渲染队列 RenderQueue
不透明队列(RenderQueue<2500)
按摄像机距离从前到后排序
透明队列(RenderQueue>2500)
按摄像机距离从后到前排序
3、绘制draw call
打包数据Batch
模型信息:顶点坐标、法线、UV、切线、顶点色、索引列表
变换矩阵:世界变换矩阵、VP矩阵:根据摄像机位置和fov等参数设置
灯光、材质参数:Shader、材质参数、灯光参数
GPU应用阶段
1、顶点处理(MVP处理)
模型空间(Model Space)—[Model Matrix]—> 世界空间(World Space)—[View Matrix]—> 视角空间(View Space)–-[Project Matrix]—> 裁剪空间(Clip Space)
2、图元装配及光栅化
裁剪操作(View Frustum Clipping) ----> NDC(标准设备坐标)---->背面剔除(Back Face Culling) —视口转换—> 屏幕坐标 ----> 图元装配(Primitive Assembly) ----> 光栅化(Rasterzation)----> 片元
3、片元处理
纹理技术
纹理采样、纹理过滤机制、Mipmap、纹理寻址模式、纹理压缩模式
光照计算
光照组成:直接光照、间接光照
光照模型:Phong光照模型、基本框架(直接光漫反射+直接光镜面反射+间接光漫反射+间接光镜面反射等)
4、输出合并
最重要的任务:处理遮挡关系、处理半透明混合
通俗地讲:片元通过重重考验到达像素点位置的过程 (片元数据 Color,Depth—>Alpha测试—>模板测试 Stencil Test—>深度测试 Depth Test—>混合 Blending—>帧缓冲区 Color,Depth,Stencil)
其中,
帧缓冲区 FrameBuffer
颜色缓冲区 Color Buffer
深度缓冲区 Depth Buffer
模板缓冲区 Stencil Buffer
深度测试 Depth Test
ZWrite 深度写入
ZTest 深度测试
混合 Blending
从后到前
关闭ZWrite
Blend SrcAlpha OneMinusSrcAlpha
Alpha Blend = SrcColor * SrcAlpha + DestColor * (1.0 - SrcAlpha)
Blend SrcAlpha One
Soft Additive = SrcColor * SrcAlpha + DestColor * 1.0