(注:【D3D11游戏编程】学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~)
3D图形学研究的基本内容,即给定场景的描述,包括各个物体的材质、纹理、坐标等,照相机的位置及朝向,光源等信息,计算其最终在二维的光栅化显示器上对应的显示结果。从最初的场景描述到最终的显示结果,这整个过程就是在3D渲染管线中完成的。
这里的“管线”即我们通常意义上的流水线,与工业上的生产流水线,或者是CPU指令执行的流水线具有相似的意义。如果对“流水线”概念有所了解,就会明白其直接目的就是提高执行的效率。假如没有流水线,所有的处理都放到单独一个阶段执行,那么一个顶点从开始被处理到最终处理完毕的过程中,后面的顶点只能处于等待状态。假设整个处理过程时间为T,那么系统的吞吐量就相当于1/T。 如果把整个处理过程合理地分成不同的阶段,我们假设平均分成了5个阶段(P1,P2,P3,P4,P5,且每个阶段执行时间为T/5),各个阶段可以互不影响地独立工作,即一个顶点在执行完P1进入P2阶段后下一个顶点马上可以进入P1阶段开始执行。这种情况下在任意时刻,五个阶段就可以同时工作,效率自然会大大提高。此时的吞吐量为5/T这个事实就是证明。当然,真正的管线不同的阶段执行时间一般不可能完全一样的,这时整个管线的效率瓶颈取决于时间最长的那个,假设为Tmax,则整个管线的吞吐量为1/Tmax。
在D3D11中,整个渲染管线可以分成如下几个主要阶段:
从最开始的Input Assembler阶段到最终的Output Merger阶段,每个阶段处理完的输出,传递给下一个阶段,作为其输入。
下面针对各个阶段逐个进行介绍:
1. Input Assembler Stage
这个阶段的主要目的是根据用户提供的顶点及索引信息,构建多边形,主要有点、线段、三角形。给定顶点和索引,构建多边形的方法取决于所使用的基本图元的拓扑类型(Primitive Topology)。D3D11中常见的拓扑类型有以下几种:
1. Point List:定义的每一个顶点作为一个单独的点进行绘制,如图: