d3d11 游戏编程 渲染管线

1、input Assembler(IA) Stage

IA Stage阶段的主要任务是从内存中读取顶点和索引数据,并且把这些顶点和索引数据组装成集合图元。

顶点的组装格式通过指定顶点的图元拓扑(Primitive Topology)来决定。Primitive Topology主要有以下几种:Point List、Line Strip、Line List、Triangle List、Triangle Strip、primitives with adjaceny、Control Point Patch List。

为了解决在图元组装时经常使用重复顶点的问题,我们引入了顶点索引的概念。使用索引而不使用重复顶点的原因为:1、使用顶点会增加内存消耗,而由于索引都是简单的整数,因此与使用 Struct Vertex,显著地减少了内存占用。2、如果使用较好的顶点缓存顺序,则显卡不必经常处理大量的重复顶点。

2、Vertex Shader(VS) Stage

顶点经过第一阶段的图元装配后,被送入顶点着色器(Vertex Shader).顶点着色器类似于一个函数,它对每一个顶点进行处理(例如:变换、光照、位移映射等),然后输出处理之后的顶点。类似于:

for(UINT i = 0;i<numVertices;++i)
outputVertex[i] = VertexShader(inputVertex[i]);

由于上述处理是在GPU中进行的,所以,它的速度是很快的。

3、the Tessellation Stage

Tessellation是指细分一个网格的三角形,生成新的三角形。这些三角形可以便宜到新的位置,以便创建更加精细的网格细节。

Tessellation有以下三个好处:

1、可以实现LOD(level of detail)机制

2、我们可以只保存少量的三角形(low-poly),然后在实际显示时,通过Tessellation,添加额外的三角形,这样,就节省了内存。

3、我们可以在进行动画操作或者物理操作时,使用低密度的网格(low-poly),而在渲染时,使用高密度的网格。

4、Geometry Shader Stage

几何着色器的优点在于可以创建或销毁图元。例如:一个输入图元可以扩展为一个或多个其它图元,也可以根据某种条件选择是否输出一个图元。使用几何着色器的一个例子就是我们可以把一个点或一条线扩展为一个区域。

5、Clipping

在视锥体外面的部分可以完全忽略,而与视锥体相交的部分则需要裁减,只留下视锥体内部的部分。

6、The Rasterization Stage

光栅化阶段的计算三角形中每个像素的颜色。

光栅化阶段有三个部分:适口变换,背面拣选和顶点差值。

7、The Pixel Shader Stage

像素着色器是执行在GPU上的一段程序。像素着色器以顶点的属性作为输入,对每个像素进行计算,最终输出一个颜色值。像素着色器可以简单到只输出一个单一颜色,也可以复杂到实现PPL(per-pixel Light),反射,阴影特效等技术。

8、The Output Merger Stage

像素着色器生成像素片段之后,会将这些像素片移动到渲染管线的OM(Output Merger)阶段.在这个阶段,一些像素片段可能被丢弃(没有通过深度或模板测试),其余部分则写入后缓存。混合(Blending)也是在这个阶段进行的。

时间: 2024-12-06 08:10:13

d3d11 游戏编程 渲染管线的相关文章

(转)【D3D11游戏编程】学习笔记二十三:Cube Mapping进阶之动态环境图

(注:[D3D11游戏编程]学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~) 在前面两篇介绍Cube Mapping的文章中,我们所使用到的Cube Map都是事先制作好的,这样的一个好处就是运行时效率很高,适合于大多数情形.但如果对于即时动态变化的场景来说,依靠静态图来实现反射效果就不再适用了.因为在不同时刻,一个物体周围的场景是不断变化的,想要把这些变化在物表的反射中体现出来,就需要一张动态的环境图. 1.C

(转)【D3D11游戏编程】学习笔记二:XNAMath之XMVECTOR

(注:[D3D11游戏编程]学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~) 一.XNA Math简介 在D3D10及之前的版本中,3D数学库是伴随在D3DX库中的.在D3D11版中,3D数学库被单独隔离出来,为XNA Math库,功能和之前基本一样,但是建立在SIMD指令上,以更好地利用Windows及XBox360上特殊的硬件寄存器(128位,可以同时操作4个32位数). 二.向量类型 在XNA数学库中,核心

(转)【D3D11游戏编程】学习笔记二十四:切线空间(Tangent Space)

(注:[D3D11游戏编程]学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~) 切换空间,同局部空间.世界空间等一样,是3D图形学中众多的坐标系之一.切换空间最重要的用途之一,即法线映射(Normal Mapping).关于法线映射的细节,将在下一篇文章中详细介绍.但在学习法线映射之前,深刻地理解切换空间非常重要.因此借这一篇文章来学习下它,以为后面学习法线映射.视差映射(Parallax Mapping).Dis

(转)【D3D11游戏编程】学习笔记二十一:Cube Mapping及其应用之一:天空盒的实现

(注:[D3D11游戏编程]学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~) 这一节讨论有关纹理映射的进阶内容:Cube Mapping. 1. 简介 单从名字上,就大概可以看出点端倪了,翻译成中文为立方体映射,因此肯定跟立方体有关系.确实,Cube Mapping就是使用六张正方形的图片来进行纹理映射的.这六张图片分别对应了一个立方体中的六个面.由于这个立方体是轴对齐的,因此每个面可以用坐标系中的六个轴方向来惟

(转)固定渲染管线与可编程渲染管线

1.固定渲染管线与可编程渲染管线的区别: 1).固定渲染管线 ——这是标准的几何&光照(T&L)管线,功能是固定的,它控制着世界.视.投影变换及固定光照控制和纹理混合.T&L管线可以被渲染状态控制,矩阵,光照和采制参数. 2).顶点着色器——图形开发人员可以对渲染管线中的顶点运算和像素运算分别进行编程处理了,而无须象以前那样套用一些固定函数,取代设置参数来控制管线,最早出现与DX8,包括PS和VS两部分. 2.为了解决D3D或者OpenGL对不同硬件厂商的支持,解决移植性的问题,可

固定渲染管线与可编程渲染管线的区别

1.固定渲染管线与可编程渲染管线的区别: 1).固定渲染管线 ——这是标准的几何&光照(T&L)管线,功能是固定的,它控制着世界.视.投影变换及固定光照控制和纹理混合.T&L管线可以被渲染状态控制,矩阵,光照和采制参数. 2).顶点着色器——图形开发人员可以对渲染管线中的顶点运算和像素运算分别进行编程处理了,而无须象以前那样套用一些固定函数,取代设置参数来控制管线,最早出现与DX8,包括PS和VS两部分. 2.为了解决D3D或者OpenGL对不同硬件厂商的支持,解决移植性的问题,可

DirectX 11游戏编程学习笔记之7: 第6章Drawing in Direct3D(在Direct3D中绘制)(重点回顾+勘误)

        本文由哈利_蜘蛛侠原创,转载请注明出处!有问题欢迎联系[email protected]         注:我给的电子版是700多页,而实体书是800多页,所以我在提到相关概念的时候,会使用章节号而非页码.同样的情况适合于"龙书"第二版. 上一期的地址: DX 11游戏编程学习笔记之6 这一章应该是本书最长的一章了,可能也是最难的一章,所以大家一定要好好消化,仔细学习!这一章大致相当于"龙书"第二版的第7章和第8章,还添加了一些别的东西. 由于这一

最大的幻术-游戏开发-到底是先学游戏引擎还是先学游戏编程

学习游戏的目的 我们学习游戏制作,游戏开发,游戏编程,游戏XX,我们的目的只有一个,打造一个非常牛逼,非常屌,非常让人开心的虚拟体验.我们用自己的学识让玩家在虚拟世界征战,生活,一步一步的让玩家幸福!那么我们的目的只有一个,让玩家知道自己的幸福在哪里,并且学会追求自己的幸福.当然,每个人对幸福的定义不一样.那么,我们只好让玩家来体验我们所来表达的最通俗的,最普遍的幸福体验,然后慢慢引导玩家去寻找自己的幸福体验.可能,在最后玩家都会离开游戏,离开虚拟世界,(对,这是真的,玩家需要一步一步达到定点,

《逐梦旅程 WINDOWS游戏编程之从零开始》笔记6——Direct3D中的顶点缓存和索引缓存

第12章 Direct3D绘制基础 1. 顶点缓存 计算机所描绘的3D图形是通过多边形网格来构成的,网网格勾勒出轮廓,然后在网格轮廓的表面上贴上相应的图片,这样就构成了一个3D模型.三角形网格是构建物体模型的基本单元,而一个三角形有3个顶点,为了能够使用大量三角形组成三角形网格来描述物体,需要首先定义号三角形的顶点(Vertex),3个顶点确定一个三角形,顶点除了定义每个顶点的坐标位置外,还还含有颜色等其他属性. 在Direct3D中,顶点的具体表现形式是顶点缓存,顶点缓存保存了顶点数据的内存空