杨卫平,张子頔
(山东科技大学电气信息系,济南 250031)
一种三维模型文件设计及其在光线跟踪中应用
杨卫平,张子頔
(山东科技大学电气信息系,济南250031)
随着次世代游戏的发展,三维游戏画面进入了高品质、高特效的时代。开发人员为了能够表现更加丰富逼真的三维场景,往往会使用更大规模和更先进复杂的模型。然而,大规模复杂模型对网络传输和数据处理提出了更高要求。提高网络传输和数据处理效率无法长期满足先进三维程序制作的要求。因此,需要一种能够自然表达大规模复杂模型、占用空间小且适合于读取的模型文件格式。
现有的文件类型在表达大规模复杂模型时显得力不从心,对于不同的三维应用开发人员通常需要进行数据转换以兼容不同的工作场景。主流3D模型文件格式的5个特征:1.文件格式和运行时例程库的可扩展性;2.连续LOD能力;3.基于刚体和骨架的动画;4.压缩;5.渐进流传输[1]。在现有的主流文件格式中,并不能满足未来的要求。这在性能要求更为苛刻的嵌入式设备上更为突出,如Android平台。
通用三维模型文件主要用于建模软件与目标使用程序之间进行信息共享,因此,文件源数据由建模软件提供。一个3D模型都是由顶点、边、面3种图形元素构成的[1]。现代模型还包括场景位置信息、纹理材质、动画信息等。因此,需要一种合理的描述性结构,自然地表达出数据之间的关系。
现代三维程序常常要处理数以万计的顶点信息。通过元数据与面向对象的编程模式相结合,可以高效地管理这些数据。当用户进行再次开发时,仅需要继承、重构原有的数据类型并新增数据字段即可,保证了文件格式的可扩展性。之后,文件格式使用对象序列化将数据存储。
图1 文件数据交换方法
现代三维程序要求文件格式能够自然表达数据之间的关系以方便程序开发和维护。因此使用面向对象的程序设计思想组织元数据格式和数据结构。这样,程序如果需要修改,只需继承基类即可在不更改程序的情况下增加功能。
本文件结构为保证文件格式的可扩展性、压缩以及能够流式传输,因此使用对象序列化设计。C++Boost开发库实现对象序列化。本文件使用Android移动平台进行测试,以保证文件在严格条件下良好运行。
2.1ZZDObj物体描述
ZZDObj是用于描述三维场景中的物体对象的。每一个三维物体都是由多边形构成的。假设有一正方体,如果将它用三角形表示:
那么,通过三角形表示将会有12个三角形,而正方体有8个顶点,这样会有很多顶点重复存储,浪费了存储空间。因此,应将顶点数据与多边形表示独立抽象出来。
进一步,大规模复杂模型通常由很多独立的子模型构成,使用子模型构建模型不仅方便建模还有利于数据存储。因此,将每一个子模型抽象成网格对象,这样就可以在每个网格对象中保存相应的信息,如:模型矩阵、骨骼信息。
包含了两个线性表对象,分别用于存储组成该物体的网格对象和动画信息。
另外,它还包含了用于boost访问的友元声明,以及boost序列化方法,这些信息将在序列化时使用。
2.2ZZDMesh网络描述
ZZDMesh类用于描述组成物体的子物体网格信息,同样,它包括了boost访问信息以及对象序列化方法。
在三角形网格中,每个三角形都和其他三角形共享边,因此,三角形网格ZZDMesh类需要存储三类信息,顶点、边、面。
图2 模型结构表示
通常,相邻的三角形可以共享连接的顶点,使用索引信息就可以减少用于保存三角形信息的存储空间。
图3 索引三角形
因此,它的数据成员包括了用于组成网格对象的顶点集合以及面片索引信息,以及用于描述网格相对位置的矩阵信息。线性表face将保存三角形顶点列表的索引及其他信息。因为,三角形顶点列表索引保存的顺序有“顺时针”和“逆时针”的区别,不同的保存方式会影响三角形的“正面”和“反面”,因此,使用一个标志位记录保存顺序。
2.3顶点、纹理、面片
每个网格对象都是由多个图元组成的,图元信息包括顶点位置、纹理坐标等信息。在索引三角网格中,每个顶点包含了一个三维位置坐标。
Vertex类是用于描述顶点的类。它包括了用于描述顶点的位置坐标信息、法线信息、顶点颜色、纹理坐标等。
Texture类是用于描述纹理信息的类,它描述了纹理文件的文件名、路径等信息。
Face类包含了用以描述每个三角形面片的信息,它包含了该三角形所用到的顶点索引,面片的纹理信息,
首先声明用于写入的存档类型,它包括text_ oarchive、binary_oarchive和xml_oarchive。它们分别把数据输出为文本类型、二进制类型和XML类型。当使用文本类型或XML类型时,读取信息要将数据从字符串类型转换为对象类型,这样会消耗大量的时间,尤其是规模庞大的模型文件。同时,模型文件加载要求很高的效率,使用耗时低二进制文件类型则是最佳选择。
模型文件的导出使用了3ds Max SDK用于制作开发模型导出插件,在使用其他文件格式转换工具时,只需要转换成兼容格式文件即可使用。
现代建模程序使用场景树管理场景对象,遍历场景树并选出想要导出的模型。当得到想要导出的模型信息后,需要对其进行如下处理:
为了能够清晰的描述子模型对象,还需要导出模型矩阵信息。在三维应用中,子模型对象矩阵信息将用以物体重组。使用如下算法,将模型顶点位移至正确位置:
其中,pk是每一个坐标顶点,它们分别乘以子模型矩阵,xmat、ymatzmat、1为子模型偏移向量以及归一化参数,最终,pfinal为转换后的正确位置。
在Android手机上使用zzd模型文件时文件,应在光线跟踪器初始化之前载入程序。zzd模型文件载入后进行反序列化操作。之后,对模型文件进行数据结构构建,光线跟踪器将会追踪每一条发射自屏幕的反向光线并与场景中每一个物体进行相交测试,通过跟踪测试可以得到每一个像素点颜色。核心算法如下:
创建文件流并反序列化装配模型对象
for each屏幕像素
从像素中心向模型对象投射一条光线
图4 光线跟踪下的zzd格式模型
计算光线与模型对象的碰撞点
if(光线与某一模型对象发生碰撞)
由模型对象材质和光照信息计算像素的颜色值else
将像素的颜色值设定为背景色
5.1数据压缩机数据库管理
在大规模复杂三维场景中,采用分离式文件存储模式会带来诸多问题。首先,分离存储每一个模型将会使程序模型文件变多,在修改有相互关系的模型时会带来很大的不便。其次,程序打开、关闭每一个模型文件都需要分配、释放相应的内存句柄,这会带来一定的性能损耗。
因此,不仅会导致数据难以维护还会降低运行速率。然而,使用单一模型文件则会大大降低程序可靠性,如果某个模型数据损坏,则整个模型文件将会无法使用。
使用SQLite对模型资源进行管理可以降低程序耦合性又可将多个模型文件统一管理,并且能够保证数据的可靠存储和高效的性能[3]。
5.2DOD和网络加速
在三维场景中,较多的三角形会影响三维应用的运行速度,应用细节层次LOD技术可减少模型三角形面,同时又能保证模型视觉效果。LOD技术通过动态确定物体与人眼(三维程序通常为视平面)的距离来连续的使用不同优化级别的网格模型,不仅保证了速度,还不降低视觉效果。
统一栅格是一种空间数据结构,当遍历时这种数据结构仅有非常小的数据交互,统一栅格由轴对齐包围盒体对象构成,其中盒体又被细分为多个尺寸的栅格单元,每一个栅格单元亦是一个轴对齐包围盒体。与栅格碰撞的某一光线将穿越其中的栅格单元,且只与这一类栅格单元内的对象进行相交测试。栅格单元将进行遍历,光线首次碰撞的物体为最近碰撞对象,该光线也将在此处停止。
创建栅格对象需要按照如下步骤进行:
(对于含有三角形Ti的场景)
①计算包含三角形Ti包围盒体单元(b1,b2)
②对三角形包围盒进行相交测试
③如果包围盒相交测试为真,记录此包围盒引用
图5 加速效果对比(采样点230)
由图5可以看出,使用栅格+LOD加速可以大大提高系统运行速度。提高运行速度在10倍以上,这主要是因为栅格加速可以在每次光线相交运算中,消减大量的多余面片,对于计算量庞大的三角面片模型计算此项加速技术显得尤为重要。
通过实验表明,本文件格式在Android移动三维程序中表现良好,可以自然的描述场景与模型的关系,通过优化手段,文件处理时间大大缩短,使其拥有优秀的加载读取速率。同时,这种平台无关的文件格式可以轻松部署到各种主流平台,也可作为移动手机游戏模型文件。
[1]谢晓竹,吕丽刚,张申.基于弹药库视频监控的背景提取及阈值获取[J].系统仿真学报,2006,18:400-402.DOI:10.3969/j.issn. 1004-731X.2006.z2.114.
[2]周莉,苏鸿根.通用3D模型文件格式和算法的研究及其OpenGL实现[J].计算机工程与设计,2009,30(2):433-436.
[3]杨卫平,张子頔.基于SQLite的3D游戏引擎资源管理系统设计[J].现代计算机:专业版,2014,(19):57-61.DOI:10.3969/j.issn.1007-1423.2014.19.015.
[4]焦卫东,卢朝阳,黄瑾.图像描述中Delaunay三角形网格的快速生成方法[J].西安电子科技大学学报,2007,34(3):348-353.DOI: 10.3969/j.issn.1001-2400.2007.03.003.
Three-Dimensional Model;File Format;Ray Tracing;Android
Design of a Three-Dimensional Model File and Its Application in Ray Tracing
YANG Wei-ping,ZHANG Zi-di
(Department of Electrical Engineering and Information Technology,Shandong University of Science and Technology,Jinan 250031)
1007-1423(2015)29-0061-05
10.3969/j.issn.1007-1423.2015.29.015
杨卫平(1960-),女,山东菏泽人,硕士,教授,研究方向为计算机图像处理
2015-09-22
2015-09-29
现代三维程序能够表现逼真复杂的场景,智能手机系统针对这方面的需求越来越明显,而现有三维模型文件格式难以满足目前及未来智能手机端更复杂的大规模三维程序的要求。给出一种新型的三维模型文件格式(zzd),这种新型文件格式具有可靠的结构,能够确保大规模复杂模型的存储,同时具备良好的可扩展性、耦合性,能够高效的读取载入,并进行模型压缩和流式传输。经采用光线跟踪算法对其在Android平台下进行实验应用。实验表明,该文件格式能够适应三维场景应用需求。
三维模型;文件格式;光线跟踪;Android
张子頔(1992-),男,山东济南人,本科
The modern three-dimensional programsare capable of showing realistic and complex scenes,the needs of this area for the smart phone system become more and more insufficient.Nevertheless,the existing three-dimensional model file format is difficult to satisfy current and future requirements of a complex and large-scale three-dimensional application in smart phone.Presents a novel three-dimensional model file format(zzd),this new file format has a reliable structure satisfy the requirements of the large-scale storage of complex models.It has good scalability,coupling,can efficiently read loads,and model compression and streaming.The file format and the application is experimented by using ray tracing algorithm on the Android platform.Experiments indicate that the file format can accommodate three-dimensional scene application requirements.