PPT:https://docs.qq.com/pdf/DRW9rTUhpbGRpZ3Vt
作用
通过一系列处理,将3D模型元素转化成屏幕上的2D图像
整体流程
应用阶段(CPU)
- 粗粒度剔除
- 进行渲染设置
- 准备基本数据
- 输出到几何阶段
应用阶段准备的数据包括
场景物体:变换数据(位置、旋转、缩放)网格数据(顶点位置、UV贴图、法线、切线等)
光源信息:点光源、平行光等的(位置、方向、角度、阴影参数等)
摄像机参数:正交or透视、视口比例/尺寸(位置、方向、裁剪平面)
几何阶段(GPU)
- 顶点着色器(可编程)。顶点光照需要知道光源的位置、朝向以及摄像机的位置、朝向还有当前顶点的世界位置,当前顶点的世界位置又需要知道顶点在模型空间里的位置,以及模型本身的位置、旋转、缩放等等
- 曲面细分(可选步骤)。将现有的顶点来生成更多的顶点,使模型更加平滑。需要知道现有顶点在模型里的信息
- 几何着色器(可选步骤)。需要通过现有的图元来做一些几何方面的操作,生成更多的顶点和图元。比如对现有图元所在的平面生成法线, 那么同样需要知道现有图元的顶点位置
- 顶点裁剪(可配置)。干掉看不见的屏幕以外的顶点
- 屏幕映射。把顶点位置从3D坐标空间转换到2D坐标空间
几何阶段要为光栅化阶段准备数据
光栅化阶段(GPU)
- 三角形(点/线)设置。拿到映射到2D空间里的顶点位置,我们要把它组装成三角形
- 三角形(点/线)遍历。获取三角形包含了哪些2D空间的像素点
- 片段着色器。对像素点使用它们包含的数据来着色,并且为后面的逐片元着色准备数据
抗锯齿MSAA是属于光栅化阶段
逐片元操作(GPU)
- 片元着色(可编程)
- 裁剪测试
- 透明度测试
- 颜色混合-深度测试/模板测试
- 目标缓冲区(FrameBuffer、RenderTexture)
逐片元操作对象是光栅化阶段输出的片元数据,片元可以理解为屏幕上的一个个像素点,对于这些片元我们需要进行一系列的测试,比如透明度测试、深度测试、模板测试,通过测试的我们就保存起来,不通过的丢弃。在2D屏幕坐标系中,同一个位置的像素点可能会对应于多个不同的片元,这时就需要将通过测试的片元的颜色进行混合操作,从而得到该像素点的最终输出颜色
后处理
逐片元操作后,我们就得到一个类似于贴图的数据保存在内存里,然后我们可以对这个数据进行后处理操作,可以理解为图像处理
常见后处理:模糊、景深、高光、边缘检测、径向模糊等
抗锯齿FXAA是属于后处理阶段
- 本文固定链接: http://www.u3d8.com/?p=2324
- 转载请注明: 网虫虫 在 u3d8.com 发表过