管线绘制

概念流水线

管线绘制_第1张图片

应用阶段

把数据加载到显存:把顶点、纹理、法线等数据准备好。

设置渲染状态:使用哪些着色器、光源属性、材质等。

调用DrawCall:告诉GPU开始渲染工作。

几何阶段

顶点着色器把顶点坐标从模型空间转换成齐次裁剪空间。

硬件做透视除法,得到归一化的设备坐标(NDC)。

屏幕映射转换成屏幕坐标系。

光栅化阶段

管线绘制_第2张图片

说明

几何阶段 + 光栅化阶段 = GPU流水线。

简化的GPU流水线

管线绘制_第3张图片

1. 逐顶点操作

使用顶点着色器操作顶点,比如进行坐标变换、顶点光照、生成纹理坐标

2. 图元装配

将顶点连成相应的图形

3. 光栅化

找到图元覆盖的像素点,并对属性值进行插值

(片元 = 像素 + 属性)

4. 片元处理

使用片元着色器来操作片元

5. 逐片段操作

该阶段也叫输出合并阶段

决定每个片元的可见性:深度测试、模板测试等。

将通过测试的片元与颜色缓冲区的颜色进行混合。

(源颜色指片元着色器得到的颜色,目标颜色指已存在于颜色缓冲区的颜色)

其他:提前测试

在逐片段操作阶段,可能会把辛辛苦苦计算出来的片元直接丢弃,十分浪费,因此有时候会使用Early-Z技术把深度测试提前执行。但是只有在片元着色器与提前测试没有冲突时才会执行,如果片元着色器进行了丢弃片元等操作,则不能提前测试。(所以透明度测试会导致性能下降)

总述

前一个阶段的输出是下一个阶段的输入,因此管线的速度取决于最慢的那个阶段。因为采用的是流水线的工作方式,因此某个阶段完成当前的任务后,可以接手下一个渲染的任务。

作者:Kaima_Chen

链接:https://www.jianshu.com/p/4911763b626d

來源:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(管线绘制)