第二章 渲染流水线
2.1节
实际上Shader 仅仅是渲染流水线中的一个环节,
什么是渲染流水线?
渲染流水线 的主要工作是在于 有一个三维场景出发 生成(或者说渲染) 一张 二位图像,换句话说 计算机需要从一系列的顶点数据,文理等信息出发。这这些信息最终转换成一张人眼可以看到的图像。 而这个工作通常是由CPU 和GUP 共同完成的!
渲染流程可以分为 3个阶段:
1, 应用阶段:这一个阶段 最重要的是输出 ,以及粗略的剔除 ,渲染状态, 渲染所需要的几何信息 ,即 渲染图元 渲染图源可以使 顶点, 线, 三角面 等等。(也就是给协议阶段准备资源)
2,几何阶段: 这一阶段主要处理所以和我们要绘制的几何相关的事情 通常是在GPU上的。几何阶段负责和每个渲染图元打交道, 进行逐顶点,逐多边形的操作。这个极端可以细化成跟小的流水线。几何渲染的重要任务是: 把顶点坐标变换到屏幕空间的二位顶点坐标。再把每个顶点的相关信息传递给下一个阶段 ,
3,光栅化阶段:这一阶段是将上一阶段传递来的数据传输屏幕上的像素。 并且渲染出最终的图像, 这一阶段也是在 GPU上运行的。光栅化的主要任务是决定每个渲染图元中的那些像素应该被绘制到屏幕上。 它还需要对上一阶段得到的逐顶点数据 (例如, 屋里坐标,顶点颜色 )进行差值。然后在进行逐像素处理
2.2节 CPU和GPU 之间的 通信
渲染流水线的起点是CPU,即 应用阶段。 应用阶段大致可以分为 下面3个阶段:
1,把数据加载到显存中。
所需要渲染的的数据从硬盘(hard disk drive ,HDD)加载到 内存(random access memory, RAW)中。 然后 又被加载到显存(video random access memory, ARAW)中. 通常 显卡不能直接访问内存。之后开发者还需要通过CUP 来设置渲染状态 来指导 GUP 进行渲染工作
2,设置渲染状态
什么是渲染状态? 这些状态定义了场景中的网格是怎么样 被渲染的。 例如: 使用的是哪 顶点着色漆(Vertex Shader)/片元着色器(Fragment Shader), 光源属性, 材质等。
在准备好上述操作后。 CPU就需要 调用一个指令来告诉 GUP :"嘿 老弟 我们帮你准备好数据了, 你可以按照我的设置来开始渲染了!" 而这条命令就是 一个Draw Call。
3,调用Draw Call
其实Draw Call 就是一个命令。 他的发起方 是 CPU 接收方是 GUP。这一个命令仅仅会指向 一个所需要被渲染的图元列表!。 当给定一个Draw Call, GUP 就会根据这个渲染状态(材质, 文理, 着色器)和所以输入的顶点数据来进行计算。最终输出到屏幕是哪个显示的那些漂亮的像素。而这个过程就是 下一届 GPU 流水线!
2.3节 GPU 流水线
当GPU 从CPU 哪里得到渲染吗命令后, 就会进行一系列的 流水线操作了。即 GPU的渲染过程就是 GPU 得流水线。
对于概念阶段的后两个阶段。几何阶段 和 光栅化阶段 开发者是无法拥有绝对的控制权的。其实实现渲染的载体是GPU!。 GPU通过实现流水线 大大加快了渲染速度。虽然我们无法完全控制 这两个阶段的具体实现细节! 但是GPU 向 开发者开放了很多控制权 可编程 或者是 可配置。
2017年1月5号23点37 (后续更新 中...)
2017