TA学习之路——1.1渲染流水线

整体流程

应用阶段
几何阶段
光栅化阶段
逐片元操作
后处理
CUP
GPU

1.应用阶段(Application)

描述:由CPU控制,比如说从磁盘或者内存上读取模型或者贴图数据,然后加载到应用程序里。

1.1 准备场景数据

描述:场景里的物体(模型、摄像机、光源)的位置、旋转、缩放,若该物体是模型的话及其里边的每一个顶点的位置,法线,切线等等。
1.1.1 物体变换数据
a.位置
b.旋转
c.缩放
1.1.2 物体网格数据
a.顶点位置
b.UV贴图
1.1.3摄像机数据
a.位置、方向、远近裁剪平面
b.正交/透视(FOV)
c.视口比例/尺寸
1.1.4光源及阴影数据
方向光
a.颜色
b.方向

点光源
a.颜色
b.位置
c.范围

聚光灯
a .颜色
b.位置
c.方向
d.内外圆锥角

是否需要阴影
判断该光源可见范围内是否有可投射阴影的物体

阴影参数
对应光源序号
阴影强度
级联参数
深度偏移(优化相关
近平面偏移(优化相关

逐光源绘制阴影贴图
A.近平面偏移
B.逐级联
a.计算当前光源+级联对应的观察矩阵、投影矩阵、以及对应到阴影贴图里的视口区域
b.绘制到阴影贴图

1.1.5其他全局数据

1.2 加速算法,粗粒度剔除(culling)

描述:为了提高渲染性能,把屏幕中那些看不见的物体剔除,比如一个物体会被另一个物体挡到后面,那么被挡住的物体就不需要显示了,也不需要提交到后面的管线去处理。

1.2.1 加速算法
碰撞检测
加速算法

1.2.2 可见光裁剪

1.2.3 可见场景物体裁剪
a.八叉树
b.BSP树
c.K-D树
d.BVH
e.其他算法

1.3 将数据加载到显存

描述:把渲染所需要的数据(如纹理、网格、位置、法线、UV)从内存中加载到显存,因为显存一般不能直接从内存中获取数据。

1.4 设置渲染状态

描述:材质、shader、纹理、光源等使用和属性设置。
1.4.1 绘制设置
a.使用着色器
b.合批方式

1.4.2 绘制物体的顺序
a.相对摄像机的距离
b.材质RenderQueue
c.UICanvas
d.其他方式

1.4.3 渲染目标(输出对象)
a.FrameBuffer
b.RenderTexture

1.4.3 渲染模式
a.向前渲染
b.延迟渲染

1.5 调用call draw

描述:就是CPU告诉GPU,要求渲染某个模型(过度到几何阶段),而这个模型可以理解为一个图元列表(图元即为 点、线、三角面(通常由3个点的位置确定))。

1.5.1 顶点数据
a .位置
b.颜色
c.法线
d.纹理UV坐标
e.其他顶点数据

1.5.2 其他数据
a .MVP变换矩阵
b.纹理贴图
c.其他数据

2.几何阶段(Geometry Processing)

描述:通过对输入的渲染图元进行多步处理后,这一阶段将会输出屏幕空间的二维顶点坐标、深度值等信息,并传递给下一阶段。

2.1 顶点着色 Vertex Shading (可编程)

a .视图变换
b.顶点着色

2.2 曲面细分(可选)

a.外壳着色器 Hull Shader
b.曲面细分 tesselator
c.域着色器 domain shader

2.3几何着色器(可选)

a.基于图元的操作

2.4投影 Projection

a.正交
b.透视

2.5 裁剪 Clipping

a.CVV
b.正面或背面剔除(可配置)

2.6屏幕映射 Screen Mapping

a.从连续到离散
b.坐标系差异(OpenGL/D3D)

3.光栅化阶段(Rasterization)

描述:三角形(点/线)设置,三角形(点/线)遍历,片段着色器。

3.1 GPU
3.1.1三角形设置 Triangle Setup

计算微分、边方程和其他三角形数据

3.1.2.三角形遍历 Triangle Traversal
3.2 抗锯齿(MSAA)

3.2.1 SSAA
a.渲染到 一个分辨率放大n倍的buffer
b.对放大n倍的buffer下采样

3.2.2 MSAA
a.在光栅化阶段
b.计算多个覆盖样本

3.2.3 FXAA/TXAA
后处理技术

4.逐片元操作(Pixel Processing)

描述:裁剪测试,透明度测试,深度测试,模板测试,混合

4.1GPU

4.1.1 片元着色 Fragment Shader
4.1.2 颜色混合 Color Blending
a.透明度测试 Alpha test
b.模板测试 stencil test
c.深度测试 depth test
d.混合 blending
4.1.2 目标缓冲区 FrameBuffer

x.后处理(Posting)

x.1 Bloom
x.2 HDR
x.3 FXAA
x.4 Depth of View
x.5 边缘检测
x.6 径向模糊

问题

1.后三个阶段为什么要交给GPU处理?
GPU的特点是并行性比较好,一个物体可能有很多个顶点都需要做光照或者着色计算,而且这些顶点只是数据不同,但是他们的光照、着色模型、几何运算方式都是一样的,那么就可以把他们分配到GPU的不同工作单元上同时执行,这样的话速度很快。

猜你喜欢

转载自blog.csdn.net/weixin_45724919/article/details/125102182
今日推荐