D3D 9和D3D 11绘制流水线对比

来源:互联网 发布:string.valueof源码 编辑:程序博客网 时间:2024/06/03 19:37

绘制流水线(pipline)是图形学编程中属于各种图形学框架的骨架。Windows平台下3D游戏开发几乎都会用到D3D来进行游戏引擎的设计。D3D 9是使用比较广泛的一个版本,D3D 9 中比较核心的就是固定渲染管线(Fixed Function Pipline)。下图是从官方的SDK中翻译的,从这个图中就可以比较清晰的看到D3D 9的绘制流水线。


这里写图片描述
D3D 9 的绘制流水线

从图中标有颜色的部分可以看到,固定渲染管线中的坐标变换和光照(Transform & Light)是在渲染中有着相当重要的作用。使用固定渲染管线时,需要在程序代码中进行设置。这部分内容可以使用顶点着色器(编写HLSL脚本)来替代这部分的工作。那么使用顶点着色器和T&L谁更具有优势呢?

  • HLSL脚本是由GPU执行的,最早是使用汇编语言进行编写。估计是汇编语言编写可读写不如高级语言,还是就是学习难度的原因,所以设计了HLSL语言。在OpenGL中也有类似的GLSL脚本。相比在程序中编写,由CPU解释执行,从这角度来看脚本语言确实有其很大的优势。但是如果考虑脚本的加载、解释和执行呢?
  • 脚本是独立于代码执行的,那也就是说一个游戏中如果想改变游戏场景中的坐标系或者改变一下光照等等,使用脚本的话是完全不用再去改动程序代码的。因为直接修改脚本,脚本又是程序在运行的时候加载的。这样看来,脚本确实极大的方便的设计。

从上面的两点可以看到,固定渲染管线相比着色器确实少了很多的灵活性,这可能也是导致D3D后面版本中重点发展着色器(shader)的原因。
那么就再看看D3D 11的绘制流水线。乍一看,D3D 11 的流水线要清晰好多,它是由比较对称的各个Stage组成的。然后里面就是让人眼花缭乱的Shader。


这里写图片描述
D3D 11 的绘制流水线

对比可以发现,D3D 9支持可编程管线,但是它还是侧重于固定渲染管线。毕竟可编程管线在D3D9中处于起步的阶段,使用的并不广泛。然而在D3D 11中的不再支持固定渲染管线,统一采用可编程管线。虽然仅仅是版本上的更新,可以看出D3D9和D3D11是几乎完全不同的。
即便是这样,它们最终使用的原理还是没有任何的差异,都是基于计算机图形学,空间几何等理论基础的。不同的实现方式,也仅仅是使用不同的方法来对理论知识进行表示。

原创粉丝点击