实时渲染引擎架构.docx
《实时渲染引擎架构.docx》由会员分享,可在线阅读,更多相关《实时渲染引擎架构.docx(13页珍藏版)》请在三一办公上搜索。
1、实时渲染引擎架构作者:张忆楠严正姚莉来源:中兴通讯技术2013年第03期摘要:文章主要分析了实时渲染引擎所要解决的几个关键问题一一图形API、特效管理、 空间分割、场景图结构以及粒子系统等,并根据需求给出了实时渲染引擎的一个参考模型。该 参考模型可实现跨平台的图形渲染、其特效框架可编写和重用图形特效,并且架构中的每个模 块都易于定制和扩展。关键词:实时;渲染引擎;架构Abstract: This paper describes some key problems in real-time rendering engines. These problems are related to grap
2、hics application programming interface(API),handling effects, spatial partitioning, scene graph, and particle system. Taking into account these requirements and the designs of some mainstream rendering engines, we provide a reference model for a real-time rendering engine. The model guarantees cross
3、-platform rendering and provides and easily customizable and extendable framework that can help write and reuse visual effects.Key words: real-time; rendering engine; architecture三维图形技术在建筑虚拟、城市规划、场景漫游、场景制作、展馆展示、古迹复原、交通 线路设计、3D游戏等各方面都有了广泛的实际应用。随着硬件技术的逐步提高,游戏引擎从 架构和实现效果上也逐步实现精确细致和高效,并取得了丰富的成果。作为整个游戏引擎
4、最关键的图形子系统,实时渲染模块负责图形数据的实时计算和输出, 生成高效逼真的3D游戏场景,同时硬件和图形技术的快速变化,使实时渲染引擎框架的需求 越来越迫切。然而图形渲染引擎的框架研究和设计工作却刚刚起步,目前全球范围与之相关的 研究工作较少。如何构建通用的实时渲染框架满足游戏引擎图形渲染的要求,同时保证新的图 形技术产生后很容易添加到框架中是目前迫切需要解决的问题。文章分析了实时渲染引擎需要解决的关键问题,并给出了通用的实时渲染引擎框架参考模 型,介绍引擎对各个关键问题的解决方案。同时提供了可扩展的机制,使得引擎框架内的具体 算法可以实现用户自行定义、随意拆卸等,从而保证最新的学术研究成果
5、可以自如地运用于实 际工程之中。1实时渲染引擎的关键问题1.1图形API实时渲染引擎需要完成图形的渲染操作,就需要实现中央处理器(CPU)和图形处理器 (GPU)的交互,并对图形应用程序编程接口(API)进行封装和3D优化加速。目前使用最 广泛的两种图形API分别是DirectX和OpenGL。1.1.1 OpenGLOpenGL是Silicon Graphics(SGI)公司在1992年时提出的开放标准图形库。它发展自 SGI早起的Iris API。由于Irish API的协议问题,它并不是开放的。SGI公司希望开放一套完 整的图形API标准,来留住使用他们硬件的用户,并保持对市场的占有。因
6、此基于Irish重新 设计了一套OpenGL API1(Mark Segal,1994)。从此每个厂商只要遵守OpenGL标准开发 自己的图形硬件驱动即可。因此,OpenGL已经被绝大部分的操作系统支持,成为了真正的跨 平台图形应用程序编程接口。1.1.2 DirectX 3DDirectX是Microsoft在 Window上平台上的图形API。Windows 95推出时,MS公司陆续 推出了 DirectX 1.0、DirectX 2.0、DirectX 3.0 3个版本。前两个版本都被认为是半成品, DirectX 3.0被认为是DirectX第一套完整的版本。1996年的Westwoo
7、d公司基于DirectX 3.0开 发的红色警戒大卖1 200万份,从此DirectX名声鹊起。2002年微软的DirectX 9提出了全 新的Shader绘图功能以及高阶着色语言(HLSL), OpenGL霸主地位开始被瓦解。目前最新 的发行版本是DirectX 11。1.2特效管理图形渲染引擎应该能方便快速地对市面上最新的特效技术进行支持和管理,同时为开发人 员提供一套清晰的API进行相应的工作。Matthias Bauchinger认为,所谓对新的特效进行支 持,并不是说开发时就假定这些特效是什么,例如不应该假定只需支持顶点着色器和片源着色 器,而应该能对渲染流程的每一个过程都进行支持。
8、第一种解决方案是由John ORorke于2004年提出,他把每一个着色器程序都写在一个 文件中,每个文件可能是顶点着色器或者片源着色器,且只用于一个渲染通道,这样引擎只要 知道程序的位置和入口函数即可。这种方案很容易添加或者删除一个着色器文件,但是单纯的 一些着色器文件可能不足以完成一个新特效的渲染,因为他们难以与系统的渲染状态相关联和 交互。如果不同的物体在渲染时需要用到不同的渲染通道,而渲染通道又与渲染状态相关联, 那么就必须对每一个不同的状态重写一遍着色代码。另一种可行的解决方案是使用特效文件,这些特效文件的格式是确定的,例如Microsoft 的特效框架4(MSEF),NVIDIA的
9、CgFX框架(CgFX)5。这种解决方案中,顶点着色器 和片源着色器也都被放在一个文件中,但是在特效文件中声明并使用。特效文件同时可以声明 每一个渲染通道的渲染状态。这样的解决方案方便于实现多通道的渲染。1.3资源管理引擎为其应用程序提供一个高效的资源管理模式是十分必要的,尤其是在三维场景渲染 中,为了实现较好的视觉效果,大量的资源将从外部导入或者在内部生成。防止资源的冗余, 提供高效的资源导入、查找、创建、使用和销毁是一项繁琐而重要的工作。清晰的资源控制流 将帮助开发人员和用户对程序进行管理。资源的类型包括:纹理资源、着色器资源、字体资 源、模型与动画。1.3.1纹理资源纹理资源是三维渲染程
10、序最重要的资源之一,包括一维、二维纹理和三维纹理,纹理资源 的应用使得GPU能以贴图等方式更加真实地渲染物体。引擎应该支持不同的纹理贴图格式, 向上层提供统一的纹理使用接口。1.3.2着色器资源着色器资源直接与图形特效相关。一般着色器资源分为顶点着色器和片源着色器,在Shader Model 4.0中引进了几何着色器,而在Shader Model 5.0又引入了镶嵌。这些着色器程序 一般都会写在一个文件中,如果按照Effect Framework的方式进行管理,那么他们就与特效文 件相关联。着色器因语言的不同,作用的底层图形API也有所不同,引擎应能够兼容OpenGL 着色语言(简称GLSL)
11、、高级着色器语言(HLSL)和Cg等多种着色语言。1.3.3字体资源字体可以出现在很多应用场景中。Billboard、GUI和贴图等都可能使用到字体。三维渲染 程序需要对字体资源进行合理的定义、加载以及使用。1.3.4模型与动画模型和动画都是引擎呈现的两个重要单元。好的引擎应该兼容不同的模型格式和动画格 式,同时屏蔽文件格式的不同,给上层用户提供统一的使用接口。1.4粒子系统三维应用程序中常常有一些特效难以用传统的渲染技术进行实现,特别是一些典型的模糊 现象,例如火、爆炸、烟、水流、火花、落叶、云、雾、雪、尘、流星尾迹等。这些特效是与 物理相关的、抽象的。一个比较好的图形引擎应该有自己的、高效
12、的粒子系统。通常粒子系统在三维空间中的位置与运动是由发射器控制的7。发射器主要由一组粒子 行为参数以及在三维空间中的位置所表示。粒子行为参数可以包括粒子生成速度(即单位时间 粒子生成的数目)、粒子初始速度向量(例如什么时候向什么方向运动)、粒子寿命(经过多 长时间粒子湮灭)、粒子颜色、在粒子生命周期中的变化以及其他参数等等。使用大概值而不 是绝对值的模糊参数占据全部或者绝大部分是很正常的,一些参数定义了中心值以及一些允许 的变化。1.5空间分割策略把空间进行分割的初衷是为了减少不必要的GPU运算工作,例如我们不需要渲染位于身 后的物体。寻找某种特殊的数据结构描述场景中物体的空间关系,以便根据视
13、角锥体把空间中 不可见的部分裁剪掉,可以大大提高引擎的工作效率。常见的空间分割八叉树、KD树和BSP 树。1.5.1八叉树八叉树6把任何一个空间看成8个象限的组合,每一个空间节点有8个子节点。如图1所 示,左边是想象中的空间分割,右边是对应的八叉树。每个节点中都存有渲染对象的信息,这 些渲染对象或者完全处在该节点中,或者部分处于其中。这种空间分割的缺陷是:当物体很稀疏时,大部分的节点可能都不含有渲染对象,从而对 树的遍历操作实际是很浪费的。1.5.2 KD 树KD树7是每个节点都为k维点的二叉树。如图2所示,所有非叶子节点可以视作一个超 平面,把空间分割成两部分。在超平面左边的点代表节点的左子
14、树,在超平面右边的点代表节 点的右子树。超平面的方向可以用下述方法来选择:每个节点都与k维中垂直于超平面的那一 维有关。因此,如果选择按照x轴划分,所有x值小于指定值的节点都会出现在左子树,所有 x值大于指定值的节点都会出现在右子树。这样以来,超平面可以用该x值来确定。1.5.3 BSP 树BSP树8即二进制空间分割树,是一类二叉树结构,它采用任意位置、方向的分割面递 归地将空间划分为多个子空间对。对于n维空间,其分割面则为n -1维超平面,如图3所示。 不同的分割策略会导致不同的结果和不同的运行效率。BSP树的构建或部分更新过程一般都比 较耗时,因此很少在运行期内对其进行构造或者更新。BSP
15、树多用于存储静态场景几何数据。1.6场景图场景图是一幅数学上的图,它把渲染场景相关的对象以一种层次结构组织起来。与空间分 割一节中所描述的内容不同的是,场景图关注的不仅仅是空间渲染中的几何对象,而是与渲染 相关的一切内容。它可能包括如下的内容:渲染的纹理、材质、空间变换、摄像机、光源、动 画、模型、着色器等等。每次渲染过程中,场景图都必须被遍历一遍。遍历过程中通常需要知道渲染系统的渲染状 体。这个渲染状态对于场景图中的每个节点都是可见的,以便在遍历到任何一个节点时,都可 以根据渲染状态对自身选项进行更新改变,自身选项的改变,又可能影响到系统的渲染状态。 在图4所示的例子中,场景图画得恰好是一棵
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实时 渲染 引擎 架构

链接地址:https://www.31ppt.com/p-5174634.html