固定渲染管线(1)

一•、简介
图形渲染管道被认为是实时图形渲染的核心,简称为管道。管道的主要功能是由给定的虚拟摄像机、三维物体、灯源、光照模型、纹理贴图或其他来产生或渲染一个二维图像。由此可见,渲染管线是实时渲染技术的底层工具。图像中物体的位置及形状是通过它们的几何描述、环境特征、以及该环境中虚拟摄像机的摆放位置来决定的。物体的外观受到了材质属性、灯源、贴图以及渲染模式(sharding modles)的影响。
很多计算机图形学的书籍都把渲染管线分为三个阶段:应用程序阶段、几何阶段、光栅化阶段。

二、固定渲染管线
1. 应用程序阶段(CPU)
应用程序阶段,通过高级编程语言(C、C++、JAVA)进行开发,与CPU、内存打交道,主要任务是识别出潜在可视的网格实例,并把它们及其材质呈交给图形硬件以供渲染。在该阶段的末端将产生几何体数据,包括顶点坐标、法向量、纹理坐标、纹理等,通过数据总线传送到图形硬件以供渲染(时间瓶颈),进行几何阶段。应用程序阶段负责驱动GPU管道,在该阶段有三个角色:
在这里插入图片描述

  1. 可见性判别:仅把可见(或至少潜在可见)的物体提交GPU,以免浪费宝贵的资源去渲染看不见的物体。(裁剪?)
  2. 提交几何图元至GPU以供渲染:像DirectX中的渲染调用接口DrawIndexedPrimitive(),该接口把子网格材质对传送至GPU进行下一步操作,类似的,在OpenGL中的接口glDrawArrays()也有相同功能。另一种提交方法是建立GPU命令表。场景如果需要多步骤渲染,则需要多次提交,所提交的几何图元应有适当地排序以优化性能。
  3. 控制着色器参数以及渲染状态。
    很多经典的算法都是在这个阶段中进行的,诸如碰撞检测、场景图建立、空间八叉树更新、视锥裁剪等。
    1.1 视锥裁剪
    视锥裁剪算法是在应用程序阶段执行的。在把场景中的物体提交给GPU进行下一阶段操作之前,需要把对最后影像没有任何贡献的物体裁剪掉,仅仅把可见的网格数据传送给GPU。这个建立可见网格实例表的过程即为可见性判断。锥体由虚拟摄像机来定义。虚拟摄像机制定了场景对观察者可见的部分,即我们将依据哪部分3D场景来创建2D图像。在世界坐标系中,摄像机有一定的位置和方向属性,定义了可见的空间体积即视锥体。下图展示一个虚拟摄像机的模型:

用几何术语来讲,上述的空间体积是一个平截头体。在平截头体剔除里,三维物体与平截头体有三种位置关系:
1、三维物体完全位于平截头体外。
2、三维物体部分位于平截头体内。
3、三维物体完全位于平截头体内。
对于第一种情况,物体会被排除在渲染表之外。给定一个网格模型,我们可以通过一些简单的判别测试来判断网格模型是否位于平截头体内,这些测试会用到物体的包围体积(包围物体的一个球体)及平截头体的六个平面。把平截头体六个平面同时往里缩进物体包围体积的半径长度,若球体中所有6个修改后的平面的前方,那么物体就是完全位于平截头体内部的(第三种情况),这种情况下三维物体将被保留并进入下一个阶段的处理。对于第二种情况,三维物体的三角形单元将被分为两个部分,位于视域体内部的将被保留,视域体外的哪部分将被剔除。
1.2 场景图
现在的游戏世界能够达到很大的规模,在多数场景中,大部分的几何物体处于上文所说的平截头体之外,如果这些物体的剔除皆使用平截头体,会造成难以想象的时间资源消耗。因此我们希望能够设计一种数据结构来解决大场景的裁剪问题,它能够迅速丢弃大量完全不接近摄像机平截头体的场景部分,这样才能进行更加仔细的平截头体剔除,此数据结构更可以帮助对场景中的几何物体排序。这种数据结构就是场景图。场景图不一定是图,更多可能是某种树:四叉树、八叉树、BSP树、kd树等等。它们的理念在于把三维空间以某种形式划分为区域,使不与平截头体相交的区域尽快丢弃,而无须逐一物体进行平截头体剔除。
1.3 四叉树与八叉树
四叉树使用递归的方式把空间划分成象限,因此四叉树每个节点都有四个孩子节点。象限的划分通常是由轴对称的平面切割而成,所以每个象限是正方形或长方形的,不过也有一些四叉树用任意形状来细分空间。四叉树这种数据结构出现的目的就是加速平截头体的裁剪,那么它是如何办到的呢?我们从根节点往叶子节点遍历,如果某个节点区域若位于平截头体外,则该节点的四个孩子节点区域也是位于平截头体外,所以我们可以停止遍历该分支。
八叉树是四叉树的三维版本,每层递归细分都把八叉树空间划分为8个子区域,子区域通常中正方体或者长方体,不过也可以是任意三维区域。

三、总结
本节我们简单介绍了固定渲染管线,接下来我们将几何阶段的内容,主要为图元配置及深度测试等。

发布了146 篇原创文章 · 获赞 28 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_38498942/article/details/104359306