【《Unity Shader 入门精要》提炼总结】(二)第二章 · 渲染流水线

本章概括

TODO


渲染流水线的三个阶段:

1.应用阶段(Application Stage)
2.几何阶段(Geometry Stage)
3.光栅化阶段(Rasterizer Stage)
在这里插入图片描述

· 应用阶段(CPU)

最重要的输出是渲染所需的几何信息,即渲染图元(rendering primitives)
我们需要处理3个主要任务:
(1)场景数据(摄像机位置、视锥体、模型、光源等等)
(2)粗粒度剔除
(3)设置每个模型的渲染状态。(渲染状态是什么见下面的叙述)

· 几何阶段(GPU)

和每个渲染图元打交道,进行逐顶点、逐多边形的操作。
(重要任务)把顶点坐标变换成屏幕空间中。
对渲染图元进行多步处理后,输出给下阶段的数据中包含:
屏幕空间中的二维顶点坐标、每个顶点对应的深度值、着色等相关信息。

· 光栅化阶段(GPU)

(主要任务)决定每个渲染图元中的哪些像素应该被绘制到屏幕上。
对上一个阶段的逐顶点数据(例如纹理坐标、顶点颜色等)进行插值,然后再进行逐像素处理。


CPU和GPU之间的通信

1.把数据加载到显存中

渲染所需要的数据的加载过程:硬盘(HDD)–>系统内存(RAM)–>显存(VRAM, 把网格和纹理加载进来)
加载到显存后,原来的数据可以移除。但是有些数据CPU依然需要访问它们(例如,CPU访问网格数据进行碰撞检测),不希望移除,因为从HDD加载数据到RAM的过程很耗时。

2.设置渲染状态

扫描二维码关注公众号,回复: 6782278 查看本文章

通俗描述:定义场景中的网格是怎样被渲染的。(使用哪个vertex shader/fragment shader、光源属性、材质等等)
如果我们没有改变渲染状态,那么所有的网格都将使用同一种渲染状态。

3.调用DrawCall

就是一个命令,发起方CPU,接收方GPU。
它会指向一个需要被渲染的图元列表,不会再包含材质信息(数据已经加载进去,渲染状态也设置了)
CPU通过调用Draw Call来告诉GPU开始进行一个渲染过程。一个Draw Call会指向本次调用需要渲染的图元列表。
在这里插入图片描述


GPU流水线

在这里插入图片描述
上图为GPU的渲染流水线实现。
颜色表示了不同阶段的可配置性或可编程性:绿色表示该流水线阶段是完全可编程控制黄色表示该流水线阶段可以配置但不是可编程蓝色表示该流水线阶段是由GPU固定实现,开发者没有任何控制权实线表示该shader必须由开发者编程实现,虚线表示该Shader是可选的 。


几何概念阶段:

  1. 顶点着色器(Vertex Shader):顶点的空间变换、顶点着色等
  2. 曲面细分着色器(Tessellation Shader):细分图元
  3. 几何着色器(Geometry Shader):执行逐图元着色,或者产生更多图元
  4. 裁剪(Clipping):将不在摄像机视野内的顶点裁减掉,并剔除某些三角图元的面片
  5. 屏幕映射(Screen Mapping):把每个图元的坐标转换到屏幕坐标系中

光栅化概念阶段:

  1. 三角形设置(Triangle Setup)
  2. 三角形遍历(Triangle Traversal)
  3. 片元着色器(Fragment Shader)

猜你喜欢

转载自blog.csdn.net/u013246113/article/details/94902861
今日推荐