[toc]

# 渲染管线的目的

渲染管线的最终目的是从 3D 场景中生成一张可以显示在屏幕上的二维图片
最常见的渲染流程分为 3 个阶段:应用阶段 (Application Stage)、几何阶段 (Geometry Stage)、光栅化阶段 (Rasterizer Stage)。

# 应用阶段

应用阶段开发者有 3 个主要任务.
- 准备好场景数据 - 摄像机的位置 - 视椎体 - 场景中的模型 - 光源信息 为了提高渲染性能,我们往往需要一个 剔除(culling)阶段 ,即将不可见得物体剔除掉,这一阶段将会输出渲染所需要的信息,即渲染图元 (fragment)。图元可以是点、线、三角面等。这些渲染图元将会传递给下一个阶段。几何阶段

# 几何阶段

几何图元用于处理我们要绘制的几何相关的事情。例如,决定要绘制的图元是什么,怎样绘制他们,这一阶段通常在 GPU 上进行。几何阶段的一个重要的任务就是把顶点坐标变换到屏幕空间中,再交给光栅器进行处理。
输出:屏幕空间下的二维顶点坐标、顶点对应的深度值、着色等相关信息。

# 光栅化阶段

使用几何阶段传递来的数据来产生屏幕上的像素。即渲染出最终的图像。
这个阶段可以
- 选择哪些图元最终会显示在屏幕上 - 对上一阶段得到的逐顶点数据 (如纹理坐标、顶点信息等) 进行插值 (即根据不同点上的颜色信息插值出每个像素点上的颜色信息)

# CPU 与 GPU 通信

渲染流水线的起点是 CPU, 即应用阶段。应用阶段大致分为下面 3 个阶段。
- 把数据加载到显存中 - 设置渲染状态 - 调用 Draw Cell CPU 先将数据加载到 RAM 缓存中,然后 GPU 从 RAM 中取得数据,取得数据之后,这部分数据就可以从 RAM 中删除掉了。 除了一部分仍然需要访问的数据。
为什么那部分数据不删除呢?
因为数据从CPU移到RAM里是非常浪费时间的。 在这之后,CPU 还需要知道 GPU 如何进行渲染工作,即 设置渲染状态 ,如 Alpha 混合等,即一组数据是否允许开启透明颜色混合的模式等。

# Draw Cell

Draw Cell 只是一个命令,发起方是 CPU, 接收方是 GPU。这个命令仅仅会指向一个需要被渲染的图元列表,而不会再包含任何材质信息。
当给定一个 Draw Cell 时,GPU 就会根据渲染状态和所有输入的顶点数据进行计算,最终输出成屏幕上显示的那些漂亮的像素。

# GPU 流水线

GPU 渲染就是 GPU 流水线,对于几何阶段和光栅化阶段,开发者无法拥有绝对的控制权。
渲染流水线接收顶点数据作为输入,这些顶点数据由应用阶段加载到显存中,然后 Draw Cell 指定。 编写着色器必须有:

  • 顶点着色器 Vertex Shader
  • 片元着色器 Triangle Shader
更新于

请我喝[茶]~( ̄▽ ̄)~*

Solvarg 微信支付

微信支付

Solvarg 支付宝

支付宝

Solvarg 贝宝

贝宝