d3d11 游戏编程 渲染管线

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)也是在这个阶段进行的。

 

以上是关于d3d11 游戏编程 渲染管线的主要内容,如果未能解决你的问题,请参考以下文章

[Unity Shader] 渲染管线流程

D3D11游戏编程学习笔记九:编译Effect的方法

Directx11教程(14) D3D11管线

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

Unity教程:URP渲染管线实战教程系列

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