3D引擎方法

2024-07-26

3D引擎方法(通用7篇)

3D引擎方法 篇1

Quest3D是由Act-3D公司开发的三维虚拟快速开发平台, 使用Quest3D可以建构出属于自己的实时3D互动世界。在Quest3D中有着丰富的预设channel, 每个channel都有特定的功能, 在Quest3d的channel编辑器中拉入和连接相关的通道, 即能构建具备复杂功能的仿真应用程序。同时Quest3D能在实时编辑环境中与对象互动, 并具有高效界面、通道式的程序创建方式、先进的工作流程、方便地发布作品的特点。因而选择Quest3D设计船舶机舱漫游系统。

1 简述Quest3D程序的开发过程

Quest3D程序的开发过程主要分为四步:首先利用三维软件3D Max创建场景中所需要的模型;其次将这些模型从3D Max中导出.X类型的文件并导入到Quest3D中;然后在Quest3D中选取相应的channel进行相机、尺寸、灯光以及逻辑控制的编辑, 以达到场景漫游、人机交互控制等功能;最后将编辑完成的文件发布成应用程序 (*EXE) 。

2 船舶机舱漫游场景效果

船舶机舱的漫游效果如图1所示。由于我们可以随意行走在场景中并可对机器设备进行模拟操纵, 因而可以达到身临其境的感觉。

2.1 船舶机舱漫游的实现

场景的漫游主要是利用漫游相机即Walkthrough Camera实现的。漫游相机也称“行走”相机, 它的作用是以观察者的视角在虚拟场景中进行漫游。用户可以控制行走的方向和目的地。

首先在场景中拉入一个漫游相机。漫游相机的通道主要包括两个部分:Camera Logic (摄像机逻辑) 和摄像机通道结构本身。分别将Walkthrough Camera模块连接到Render通道上, 而Camera Logic通道连接到Start3Dscene通道上。这样漫游相机就连接在主程序中了。但是此时我们并不能正常的行走在已经导入的机舱场景中, 为了达到漫游的目的还要进行以下设置和编辑:

1) 设置碰撞物体:设置碰撞后的物体可以防止相机穿过, 在机舱漫游场景中碰撞物体即为机舱及其它各种机器设备。将要设置碰撞的物体创建快捷方式然后连接到漫游相机Fast Collision Response (碰撞反应) 通道结构下面的Collision Object上即可。

2) 编辑相机的各种参数使其达到最舒适值:在摄像机本身通道结构中找到相应的重力 (Gravity Value) 、速度 (Speed) 、以及其他相应参数的通道, 双击通道即可更改其数值。

此时漫游相机已经可以正常的运行, 但是在机舱漫游过程中由于要进行交互式的操作即用鼠标对相应的开关或者阀门进行控制, 而漫游过程中视野的方向也是由鼠标控制的, 因而当要进行阀门或者开关控制的时候, 视野也会跟着鼠标位置的改变而变化和晃动, 这不仅会使交互过程不顺畅也会让视野不能很好的对准操作部件。因此要进行如下编辑:在摄像机本身通道结构中找到控制相机旋转的模块Rotation Vector并打开, 此时可看到控制相机旋转的两个模块Mouse d X和Mouse d Y。我们要控制这两个模块达到当我们双击鼠标左键的时候它们会失效, 当再次双击左键的时候它们又恢复功能。依次拉入一个值算子Value Operator (选中Toggle/Flip Flop triggered (value) ) 、一个channel switch (基本类型设置为value) 和一个Use Input (设置为Left Mouse Double Click) 最后将它们按如图2连接起来即可达到控制的效果。

2.2 控制系统的制作

若要实现机舱场景的虚拟仿真, 控制系统的加入是必不可少的。只有在漫游过程中可以实现轻松、便捷的对模型设备的操作, 所开发的软件的价值才能够最大化的体现出来。

船舶机舱虚拟仿真场景里的操作多种多样, 从机舱门的开关、按钮的按下和弹起、阀门的开启和关闭到操作台的模拟操作、汽轮机转子的启动、声音系统等全都需要以编程的方式来实现对设备的控制和操作。

下面就以球阀和车钟的控制为例, 简要介绍控制的实现过程。

2.2.1 阀门开关控制

在船舶机舱中有着各种系统:滑油系统、燃油系统、冷却水系统等等, 这些系统都离不开阀门的控制, 因而实现对阀门的控制对于机舱交互有着很重要的作用。

对于阀门的控制我们以球阀为例。球阀的动作位置只有两个, 一个是手柄和管系平行位置, 即打开位置;一个是手柄与管系垂直位置, 即关闭的位置。我们要达到:当鼠标左键点击球阀的阀门手柄时, 阀门打开, 当鼠标右键再次点击阀门手柄时, 阀门关闭。编程主要分为手柄动画编辑、鼠标检测逻辑编辑和控制逻辑编辑三个过程。

1) 手柄动画编辑:在Quest3D中, 大部分物体的运动是由一个基类型为Matrix (矩阵) 的Motion (运动) 通道决定的。连接到Motion通道上的是三个Vectors (矢量) 通道, 它们分别定义了物体在3D空间的Positio (位置) 、Rotation (旋转) 、和Size (尺寸) 。这三个矢量通道中又分别包含了三个数值通道, 我们通常使用Envelopes通道来替换这些数值通道, 使物体的运动数据随时间发生变化, 从而创建动画效果。

因此对于阀门手柄的动作可在Rotation (旋转) 的Envelopes通道中进行编辑。我们通过添加关键点的方法设置在0到10帧使得阀柄能够顺时针转动, 在10到20帧的过程中控制阀柄逆时针转回来。

2) 鼠标检测逻辑:对于球阀的打开操作是鼠标接触阀柄并且点击左键, 这就需要Use Input和Detect mouse collision两个模块来分别检测鼠标的左键点击和鼠标与阀柄的碰撞。

其中:

®Detect Mouse Collision通道:用于检测鼠标指针是否在指定的物体上, 当在时值为1, 否则为0;

®User Input通道:默认设置为检测鼠标左键是否按下, 当按下时值为1, 否则为0。

只有当这两个条件同时满足即都为1时, 才能执行阀门手柄的旋转动作。其具体连接为:依次拖动一个Expression Value连接在if通道下, 拖动一个Detect Mouse Collision和User Input连接在Expression Value (表达式) 通道上, 最后将阀门手柄的快捷方式连接到Detect Mouse Collision通道下, 并将表达式A&B输入Expression Value通道中。其中表达式A&B表示两个子通道值都为1时值为真。

3) 控制逻辑:控制部分用到的通道是Timer Value (时间器) Timer Command (时间器命令) 。Timer Value通道主要用于输出时间即时间数值, 作为Envelopes通道的时间输入, 而Timer Command则以程序的方式控制选择时间器的播放。当If模块判断鼠标检测逻辑满足条件的时候, 则Timer Command执行相应的播放命令即手柄的打开和关闭。最终的通道连接如图3和图4所示:

2.2.2 车钟控制

车钟可以控制船舶主机转速和转向, 对于车钟控制我们所要达到的效果是:当我们用鼠标接触车钟手柄点击鼠标左键并前后推动的时候, 车钟手柄会随着鼠标的前后移动而移动, 同时控制主机正反转。

为此首先要创建鼠标检测逻辑即判断鼠标是否接触车钟手柄并且点击了鼠标左键。其创建方式与上述阀门手柄的检测逻辑相似, 在此不再赘述。

其次:创建车钟手柄跟随逻辑。要实现车钟手柄跟随鼠标的滑动主要利用的是Value Operator通道中的Limit relative value (value (start) , value (end) , value (relative) ) 选项来限制手柄在X方向上的位置范围。此处需要用到的通道还有Use Input (设置为Mouse Detect Pos Y Absolute) , 两个Value通道以及一个Expression Value表达式通道。将它们按照如图5所示连接并设置好参数即可实现对车钟手柄的控制。

此时车钟手柄可以跟随鼠标前后滑动, 但是我们还要控制主机曲轴的正反转。这个动作的实现是利用车钟手柄Xposition的范围作为主机曲轴动作的判断条件, 当手柄Xposition位于正转位置范围时曲轴正转, 手柄位于Stop位置时, 曲轴停止转动;而手柄位于反转位置范围时则曲轴反转。要实现该动作需要用到表达式通道判断触发条件是否满足, 接着使用If else模块来触发曲轴的动作, 最后用Timer Command控制动作的执行时间帧。将它们按照如图6所示连接即可实现曲轴正反转。

3 结论

船舶机舱漫游系统的实现可以使学员行走在与真实机舱相似的三维场景中, 对机舱设备进行近距离的观察, 以达到熟悉设备分布, 管路走向以及了解船舶概况的效果。同时交互功能的实现可使学员对主机启动、应急设备操作, 以及故障的处理都有了更进一步的认识和了解。随着虚拟现实技术在船舶模拟器中应运的不断增加, 其在今后的海员培训中将会越来越重要, 越来越成熟并逐渐取代第二代模拟器。

摘要:在现代海员培训中, 以虚拟现实模型取代实物模型进行培训, 可以达到节约成本、提高培训效率的目的。该文简要介绍了使用Quest3D为虚拟引擎, 设计海船船舶交互式虚拟机舱的方法;以海船机舱漫游、阀门开关操作以及船舶车钟对主机的控制为重点, 简述了Quest3D场景漫游的制作以及对机构控制的基本操作方法。

关键词:Quest3D,船舶机舱漫游系统,控制系统

参考文献

[1]路朝龙.Quest3D从入门到精通[M].北京:中国铁道出版社, 2012.

[2]靳少杉, 郑华耀.Quest3D虚拟现实技术在轮机模拟器开发中的应用[J].船海工程, 2011 (2) .

3D引擎方法 篇2

国外对三维游戏引擎的研究主要集中在几个大公司,如3DRealms,Id Software,Valve等等,它们研究开发了一批优秀的三维引擎,如QuakeⅠ,QuakeⅡ,QuakeⅢ,Half-Life等。是它们推动了三维游戏引擎的发展。

在国内,北京航空航天大学计算机系是国内最早进行VR(Virtual Reality,虚拟现实)研究、最有权威的单位之一,它们首先进行了一些基础知识方面的研究,并着重研究了虚拟环境中物体物理特性的表示与处理;针对虚拟现实中的视觉接口,开发出了部分硬件接口并提出了有关算法及实现方法;实现了分布式虚拟环境网络设计,建立了网上虚拟现实研究论坛,可以提供实时三维动态数据库,提供虚拟现实演示环境,提供用于飞行员训练的虚拟现实系统,提供开发虚拟现实应用系统的开发平台,并将要实现与有关单位的远程连接。北京航空航天大学虚拟现实与可视化新技术研究室开发了虚拟北航校园项目,并设计实现了虚拟环境漫游引擎。在配置VOODOO2图形加速卡的Pll266微机平台上,漫游引擎驱动了一个由10万个三角形构成的北航校园模型,其交互仿真率保持在25帧/秒以上。为了验证漫游引擎的通用性,还先后将漫游引擎用于房地产项目虚拟恒昌花园及虚拟珠穆琅玛峰等漫游应用中。

浙江大学CAD&CG国家重点实验室开发出了一套桌面型虚拟建筑环境实时漫游系统。该系统采用了层面迭加的绘制技术和预消隐技术,实现了立体视觉,同时还提供了方便的交互工具,使整个系统的实时性和画面的真实感都达到了较高的水平。另外,它们还研制出了在虚拟环境中一种新的快速漫游算法和一种递进网格的快速生成算法。浙江大学开发的虚拟紫禁城项目就是虚拟环境漫游的研究成果。

四川大学计算机学院开发了一套基于OpenGL的三维图形引擎Object-3D。该系统在微机上使用Visua1C++5.0语言实现,其主要特征是:采用面向对象机制;与建模工具如3DMAX、Mutagen相结合,对用户屏蔽一些底层图形操作;支持常用三维图形显示技术如LOD等;支持动态剪裁技术;保持高效率渲染。

中国地质大学分析了基于微机的三维应用程序的结构特点,提出了一个基于OpenGL和Direct3D两种3DAPI(应用程序编程接口)的三维图形引擎结构框架。该框架己经成功应用到其开发的系统“三维城市景观浏览器Map3DViewer中”,收到了较好的效果。

2003年,国家863计划正式将游戏引擎的研发纳入了国家高科技发展计划,并将研发的任务交给了金山公司。据金山负责人说,他们已经开发了一套较为完整的引擎,并将使用于新开发的游戏中。另外据报道一个成都的大学生彭海涛与三个志同道合的朋友,历时两年研发出了国内第一款真正意义上的原创3D网络游戏《传说online》。这是一款有完全自主知识产权的3D游戏。

2 研究内容及工具

2.1 研究内容

本文研究的主要内容是游戏引擎的架构,以RPG类型为例,研究如何为一个游戏合理设计各个模块(不考虑网络应用)。系统所应具有的模块如下:

1)渲染子系统(Graphics Sub-System):渲染、光影等。

2)输入子系统(Input Sub-System):把需要的各种不同输入装置(键盘、鼠标、游戏板,游戏手柄)的输入触发做统一的控制接收处理(透明处理)。

3)声音子系统(Sound System):负责载入、播放声音。

4)时间系统(Time)。

5)支持系统(Support System):数学成分(点,面,矩阵等),(内)存储管理器,文件载入器,数据容器等。

6)脚本系统(这里只预留实现接口)

7)物理系统:碰撞检测等

2.2 工具

考虑DirectX只能使用在Windows中,程序开发使用Microsoft Visual Studio 2005,本次使用的DirectX开发包为Dxsdk_aug2007,为最新的Direct9开发包,使用的显卡为ATI9550/128b/128M。

3 Direct 3D概述

Direct 3D是一种低层图形API(Application Programming Interface,应用程序接口),它能让我们利用3D硬件加速来渲染3D世界。可以把Direct3D看作是应用程序和图形设备(3D硬件)之间的中介。通过利用Direct3D API编程,能够屏蔽许多底层实现的技术细节,缩短开发周期。

图1显示了Direct3D、HAL(Hardware Abstraction Layer,硬件抽象层)及硬件之间的关系。其中HAL即硬件抽象层,是一组指示设备执行某种操作的特殊设备代码的集合,由设备制造商实现,Direct3D不能直接作用于图形设备,通过使用HAL与硬件图形设备协同工作。

如图1所示,Direct3D应用程序最终通过图形卡的设备驱动程序访问图形硬件。由于HAL存在,Direct3D将可以不需要了解某个设备的具体硬件特性,使它能够独立于硬件设备。Direct3D提供了相应的方法在运行时检查设备是否能执行某项操作。

4 Direct3D重要概念

4.1 顶点

一个场景是多个物体或模型的集合。一个物体可以用三角形网格来近似表示,3D世界中最基本的图元就是三角形,一个多边形的两边相交的点叫做顶点。为了描述一个三角形,我们通常指定三个点的位置来对应三角形的三个顶点,这样我们就能够很明确的表示出这个三角形。3D物体中的三角形经常会有许多共用顶点。为了解决复杂精细场景重复顶点占用更多的渲染带宽,我们在创建一个顶点列表的同时也创建一个索引列表。顶点列表包含所有不重复的顶点,索引列表中则用顶点列表中定义的值来表示每一个三角形的构造方式。通常每个顶点都包含如下信息:x,y,z坐标值、颜色值、用于计算灯光的法线和纹理坐标(u,v)。

4.2 表面

是一个像素点阵,主要用来存储3D图形数据。表面数据就像一个矩阵,像素数据实际上是存储在线性数组里面。

Direct3D里面的IDirect3DSurface9接口用来描述表面,这个接口提供一些方法来直接操作表面数据:

LockRect方法:可以获得一个指向表面内存的指针,通过此指针可以对表面上任一个像素点进行读、写操作;

UnlockRect方法:给表面解锁;

GetDesc方法:通过填充D3DSURFACE_DESC结构来返回表面的描述信息。

4.3 多重采样(Multisampling)

由于使用像素来表示图像,在显示时会出现锯齿状。Multisampling就是使图像变得平滑的技术。它的最普通的用法就是全屏抗锯齿。D3DMULTISAMPLE_TYPE枚举类型能使我们制定全屏抗锯齿的质量等级。

4.4 交换链和页面交换

Direct3D通常建立2~3个页面组成一个集合,即为交换链,通常由IDirect3DSwapChain接口来表示。交换链和页面交换技巧被用在使两帧动画之间过渡更加平滑。通常由Direct3D自己去管理。

4.5 深度缓冲

深度缓冲是一个表面,但它不是用来存储图像数据而是用来记录像素的深度信息。深度缓冲为每一个像素计算深度值,并进行深度测试。通过深度测试我们可以知道哪个像素离摄像机近从而把它画出来。这样就可以只绘制最靠近摄像机的像素,被遮住的像素就不会被画出来。

4.6 顶点处理

顶点是3D图形学的基础,它能够通过两种不同的方法来处理,第一种:软件顶点处理(software Vertex Processing),第二种:硬件顶点处理(Hardware Vertex Processing)。前者总是被支持而且永久可用,后者要显卡硬件支持顶点处理才可用。使用硬件顶点处理总是首选,因为它比软件方式更快,而且不占用CPU资源。如果一块显卡支持硬件顶点处理的话,也就是说它支持硬件几何变换和光照计算。

4.7 设备能力

Direct3D支持的每一种特性都对应于D3DCAPS9结构的一个数据成员,初始化一个D3DCAPS9实例应该以用户的设备实际支持的特性为基础。因此,在我们的应用程序里,我们能够通过检测D3DCAPS9结构中相对应的某一成员来检测设备是否支持这一特性。

5 Direct3D初始化

初始化步骤:

1)获得IDirect3D9接口指针。

2)检查设备的技术特性,确定显卡是否支持硬件顶点处理。

3)初始化一个D3DPRESENT_PARAMETE结构实例,这个结构包含了许多数据成员,它允许我们指定将要创建IDirect3DDevice9接口的特性。

4)创建一个基于己经初始化好了的D3DPRESENT_PARAME-TER结构的IDirect3DDevice9对象。

6 游戏引擎架构

3D游戏引擎通常由以下几个部分组成:图形处理、染器、碰撞检测、声音处理、网络连接以及必要的游戏逻辑,因为引擎基于Direct9.O,故大部分底层实现需要Direct3D支持,具体架构如图2所示。

3D游戏引擎架构其中的游戏逻辑模块主要起着衔接引擎各模块工作、引导控制流数据流的作用,它加载游戏中的模型文件,接受并处理用户在游戏过程中输入控制请求,处理用户设定的游戏参数,将各种操作指令送到相应模块进行处理并将最后显示结果送至渲染管线。通常图像的渲染处理、光栅化在显卡的GPU(Graphic Processing Unit,图像处理单元)中实现。

7 游戏主程序

7.1 游戏主程序的流程

一个典型的3D游戏主程序的伪代码如下:

Direct3D初始化:

初始化游戏中所需要的设备;

处理消息;

while(1)

{

处理用户的输入;

更新物体的位置;

渲染处理;

}

}

其中更新物体位置信息的伪代码如下:

保存物体的当前位置;

根据控制输入或者已有逻辑计算新的位置;

if(新位置不可用或者发生碰撞)

将新位置设置当前位置;

}

}

7.2 框架模块

Windows是一个消息(Message)驱动系统。Windows的消息提供了应用程序之间、应用程序与Windows系统之间进行通信的手段。应用程序想要实现的功能由消息来触发,并且靠对消息的响应和处理来完成。由于游戏编程对处理速度的要求,在D3D编程中通常不使用Windows提供的消息,也就是说忽略Windows的消息(窗口关闭的消息通常会处理),针对这一特点,几乎所有的游戏的窗口的创建具有共性,因此设计一个用于创建窗口的类CGameEngine_app,其声明如下:

8 结束语

本文论述了基于Directx9对3D游戏引擎开发的过程,对图形渲染管线,资源管理等方面进行了深入的研究,设计并实现了一个简单的3D游戏引擎的主要部分

参考文献

[1]刘祎玮,张引,叶修梓.3D游戏引擎渲染内核架构及其技术[J].计算机应用研究,20006(8).

[2]樊翠,王丽芳.基于D3D的三维游戏引擎的设计与实现[J].科学技术与工程,2006(10).

[3]惠志,李春富,刘心雄.一个基于3D游戏引擎的虚拟展示方案[J].微机发展,2005(4).

[4]刘小丹,付丽梅.一种个性化人脸游戏引擎设计[J].辽宁师范大学学报(自然科学版),2007(1).

[5]曹阳,梁华,蔡宣平.基于DirectX的音频视频无线传输系统设计与实现[J].现代电子技术,2007(15).

[6]岳望,李根,王钲旋,等.教学用三维游戏引擎的层次结构分析与初步实现[J].大连民族学院学报,2007(5).

[7]周新春,昂海松,罗东明.基于DirectX的微型飞行器飞行仿真系统[J].系统工程与电子技术,2007(7).

3D引擎方法 篇3

关键词:AI引擎,3D,角色游戏,场景设计

i Phone平台游戏、Android平台游戏及网页游戏等在近些年迅猛发展, 并逐渐成为对发展游戏具有带动作用的新生力量。但是, 当今很多游戏都处于宣传攻势重于游戏内容品质的境况, 而且玩家在游戏体验过程中, 会逐渐提升对游戏操控性与沉浸感需求。基于这种现象, 使得3D游戏逐渐成为国内游戏主要发展方向。

1 游戏场景的设计

在开发游戏时, 贴图和模型的合理搭建能够将炫丽的游戏场景提供给玩家, 以此提升游戏本身意境, 并将游戏主题突出出来。所以, 怎样快速搭建贴图和模型, 确保游戏运行畅通是在设计游戏过程中亟待研究与解决的重要问题。

1.1 搭建游戏场景规范

一般通过Unity3D技术对场景中像地形、草木等基本对象进行直接搭建, 但对于游戏中装饰性物品与主要角色等, 必须从3D建模软件中导入。对游戏场景进行搭建时, 首先要对游戏环境予以创建, 然后放置物品或者角色。Unity3D在默认状态下的单位为1, 一般会通过修改应用程序以与该比例相匹配, 由此在资源放置时就会比较简单。

本游戏通过Maya建模, 面片数要保证为32500个Polygon面片, 若大于该数量, 那么物体就无法显现, 所以应该对模型与多边形数量进行合理分布。在制作完成一个三维模型后, 其内容主要包括单位、场景尺寸、节点编辑、命名、纹理、模型归类、纹理格式及尺寸、坐标及材质等一定要与相关制作规范相符。

1.2 优化游戏贴图

作为游戏开发平台, Unity3D模型材质通常会有很多特殊性需求, 并非Maya中所有材质球Unity3D都支持, Unity3D只支持像Lambet、Blin等标准材质, 且还要保证贴图尺寸为2n, 贴图尺寸最大值要在1024×1024以内, 烘焙过程中, 对TGA格式纹理贴图进行设置。渲染优化时, 应该对遮挡剔除技术进行选用, 也就是说, 如果其它物体遮挡该物体, 且在摄像机镜头外, 那么不会对其实施渲染。运行遮挡剔除是用虚拟摄像机在场景中将物体潜在可视状态创建出来, 以此进一步提升游戏运行质量。

2 基于3D角色游戏中AI引擎的设计研究

2.1 构建游戏AI引擎框架

2.1.1 游戏中非玩家角色的动作控制

非玩家角色在游戏中的主要行为包括巡逻、待机、逃跑及攻击等, 每个行为下的动画表现都有所不同, 以程序的方式对游戏角色动作进行控制。依照游戏引擎本身特性, 于游戏角色模型中绑定角色动作。此外, 角色模型导出设置中, 对游戏动画选项进行设置后, 再在3D引擎中导入, 在一定条件下, 采用程序控制的方式对动画剪辑进行播放, 以此控制角色动作。

2.1.2 状态机反应机制

首先对AI引擎智能进行分析:在一定范围内, 游戏AI角色巡逻, 对周边环境进行扫视, 以观察周边有玩家入侵与否, 有时可立于原地, 若无外界条件触发则为空闲待机状态, 但若在其可视范围内有玩家, 则会主动攻击, 围攻玩家, 以此对玩家造成伤害, 如果其生命力比较低, 则会自动逃跑。根据AI角色表现, 能够获得AI角色的状态及其相互转换。

Idle状态:该状态为空闲状态, 在平静状况下的基本状态。如果无条件触发, AI角色在一段时间后就会自动转入Idle状态。

Attack状态:该状态为攻击状态, 具体是攻击出现在其视野中的玩家, 对其造成伤害。如果AI角色生命力比较低, 就会自动向Escape状态 (即:逃跑状态) 转换, 如果玩家在其可视范围外, 则会自动向Patrol状态 (即:巡逻状态) 转换。

2.2 基于3D角色游戏的AI引擎寻路算法

通过特定寻路算法帮助游戏角色寻路, 也就是说, 根据某种规则对从起始点到终点的路径进行计算。本文主要分析Way Point寻路算法, 并具体应用于角色游戏中。该寻路算法具体是将若干个路径点 (waypoint) 进行标记, 采用矢量线连接各路径点, 确保游戏AI角色可以在某种规律下沿路径线自动寻路。可手工设置这些路径点, 也可程序自动生成。路径点寻路时, 游戏场景中, 需要获取任意两点路径, 可以从目标点与起始点各取一个路径点, 对这两个路径点最短距离进行计算, 以此将目标点与起始点最优路径计算出来, 这就是角色行走路径。游戏角色在到达目标点后, 必须在其视野中可看到下一最优路径点, 由此就能够在最优路径中进行自由活动。

3 总结

本研究分析与探讨了基于3D角色游戏的游戏场景布置与AI引擎的设计与优化。采用三维建模软件实施建模后, 对游戏场景于Unity3D中进行优化, 结合AI引擎关键技术、制作过程及游戏半身, 确保能够在游戏中将游戏玩家与职能角色对抗效果充分体现出来, 整个游戏主线是任务关卡形式, 因此要合理设计游戏非玩家角色, 必须通过程序对个性化敌人进行设计, 以确保游戏具有真实性、挑战性以及可玩性, 这对3D角色游戏的设计与实现极具重要参考价值。

参考文献

[1]JACOBS, S.Game programming gems7[M].北京:人民邮电出版社, 2010:191-151.

[2]MARK DELOURA.Game programming gems1[M].北京:人民邮电出版社, 2010:208-219.

[3]倪乐波, 戚鹏, 遇丽娜等.Unity3d产品虚拟展示技术的研究与应用[J].数字技术与应用, 2010 (9) :54-55.

3D引擎方法 篇4

1 基本思想

根据楼层地形的不同, 组织路网点, 并在路网数据文件中记录路网点的位置坐标信息以及连通信息。 搜索路径时最多只有两个辅路网点参与, 大大减少了搜索路网点的数量。

2 路网构建与寻路方法

前面介绍了同层寻路的基本思想, 下面将介绍室内同层寻路的路网构建方法与寻路方法。

2.1 室内同层寻路的路网构建

(1) 构建主路网点数据列表, 主路网点数据列表每行表示一个主路网点, 以 “v” 开头, 后面跟着点的地平面X、 Z坐标, 以 “M” 结束, 表示为主路网点。

(2) 构建辅路网点数据列表, 辅路网点数据列表每行表示一个辅路网点, 以 “v” 开头, 后面跟着点的地平面X、 Z坐标, 以 “F” 结束, 表示为辅路网点。

(3) 构建连通性信息列表, 连通性信息列表每行表示一条连通性信息, 以 “p” 开头, 后面跟着词条连通性信息相关的两个路网点标号, 中间用 “—” 相连, 每行最后的数值为此条信息相关的两个路网点之间的距离权值。

2.2 室内同层寻路

(1) 将指定楼层的主路网点都放到一个集合A中。

(2) 首先根据起点终点的坐标确定与起点、 终点距离最近的路网点, 找到的路网点既可能是主路网点也可能是辅路网点。

(3) 若起点路网点是主路网点则跳过此步骤, 若起点是辅路网点则将辅路网点添加到集合A中。

(4) 若终点路网点是主路网点则跳过此步骤, 若终点是辅路网点则将辅路网点添加到集合A中。

(5) 在集合A所表述的含有所有本楼层主路网点和仅含有相关辅路网点的路网中搜索从起点路网点到终点路网点的路径。

(6) 在路径的开始增加从起点到起点路网点的直通路径。

(7) 在路径的最后增加从终点路网点到终点的直通路径。

(8) 将f, e, g合成为最终路径。

所述路网点包括主路网点和辅路网点; 主路网点连通至少两个其他路网点, 辅路网点仅仅连通一个其他路网点。 路网为两个路网点的路径, 记录着两个路网点标号和路网点之间的距离权值。

所述搜索依据路网点之间的距离权值取最小值, 大量辅路网点中每次最多有两个辅路网点参与路网搜索。

3 具体实施方式

下面结合附图和实施案例做进一步说明。 楼层地图和最终路径图如图1, 图2 所示。

层内数据文件组织以行为单位进行存储, 一个示例如下:

上述文件第一部分为主路网点列表, 每行表示一个主路网点, 以 “v” 开头, 后面跟着点的XZ坐标, 最后的 “M” 表示为主路网点; 第二部分为辅路网点列表, 每行表示一个辅路网点, 以 “v” 开头, 后面跟着点的XZ坐标, 最后的 “F”表示为辅路网点; 第三部分为联通性信息列表, 每行表示一条联通性信息, 以 “p” 开头, 后面跟着此条联通性信息相关的两个路网点编号, 中间用 “-” 相连, 每行最后的数值为此条信息相关的两个路网点之间的距离权值。

从图1 可以看出此次路网搜索的起点和终点都位于同一个楼层, 则执行层内搜索。 执行层内搜索时步骤如下:

(1) 将指定楼层的主路网点 ( 图1 中小矩形节点) 都放到一个集合A中。

(2) 首先根据图2 中起点终点的坐标确定与起点、 终点距离最近的路网点, 本次搜索找到的与起点终点最近的路网点都是辅路网点。

(3) 本次搜索起点路网点是辅路网点, 将其添加到集合A中。

(4) 本次搜索终点路网点是辅路网点, 将其添加到集合A中。

(5) 在集合A所表述的含有所有本楼层主路网点和仅含有相关辅路网点的路网中搜索从起点路网点到终点路网点的路径, 搜索结果为路径1。

(6) 在路径的开始增加从起点到起点路网点的直通路径3。

(7) 在路径的最后增加从终点路网点到终点的直通路径2。

(8) 将路径3, 路径1, 路径2合成为最终路径, 如图2粗线标注。

4 结语

将路网中仅仅连通一个其他路网点的路网点标识为辅路网点, 大量辅路网点中每次最多有两个辅路网点参与路网搜索, 求解的搜索空间大大缩小, 因此比传统的所有路网点都参与搜索的方法效率有很大提高。

摘要:介绍了一种室内同层寻路的路网构建和寻路方法, 尤其是一种应用在移动终端的室内同层寻路的路网构建和寻路方法。该方法缩减了层内每次搜索中的无关路网点数量, 大大提高了层内搜索的效率。

关键词:室内同层寻路,路网构建

参考文献

[1]【美】Thomas H.Cormen, 【美】Charles E.Leiserson.算法导论.北京:机械工业出版社, 2014.

[2]【美】Ronald L.Graham, 【美】Oren Patashik.具体数学.北京:人民邮电出版社, 2013.

3D引擎方法 篇5

我们将事先准备好的游戏人物模型拖拽到Project的Assets文件夹下, 然后将人物的静止状态模型拖入场景中。

然后在人物脚下Create Cube作为地面, 取消Mesh Renderer选项, 并给人物加上Rigidbody (注意Constrains中的Rotation选项, 这会使物体碰撞后产生自由旋转) 以及Capsule Collider。以实现人物的正常移动, 调节胶囊碰撞器参数, 使其包裹人物。

下面, 我们使用编辑脚本实现人物的移动的控制。

在脚本中, 使用f l o a t H=I n p u t.Get Axis (“Horizontal”) , 实行对人物水平方向移动的监听, 当在键盘上按下A或者D键时, 会返回正或者负数值, 以此值判断人物的左右的移动方向。float V=Input.Get Axis (“Vertical”) 与前者类似, 不过是通过W和S键判断人物的前后移动。我们将它们放在update函式中, 这样系统每针都会不停的监听人物的移动变化。我们使用if (Mathf.Abs (H) >0.01f||Mathf.Abs (V) >0.01f) 来判断人物是否移动, 如果移动, 赋予人物速度, 控制人物面向方向, Get Component<Rigidbody> () .velocity=new Vector3 (velocity*h, this.Get Component<Rigidbody> () .velocity.y, velocity*v) , 此处, 我们利用之前为人物添加的刚体组件, 实现人物的速度控制, 因为人物是在水平方向移动, 所以使用this.Get Component<Rigidbody> () .velocity.y, 作为Y轴速度, 也就是Y轴速度不变。使用transform.Look At (new Vector3 (h, 0, v) +transform.position) 实现人物面向方向的改变。接下来, 我们在Assets下Create一个Animator Controller, 并把它添加到人物的Animator中, 作为人物播放的动画控制器。

在Window中打开Animator, 将导入的人物站立和移动的动画拖拽到里面, 使用bool值控制两者的转换, 实现站立 (Take0010) 向跑步动画 (Take001) 的转换时, 我们将bool设置为true, 当由跑步转换为站立时, 设置为false。我们将anim.Set Bool (“Move”, true) 放在前面提到的判断语句后 (这里, anim是Animator对象) 就是当键盘控制人物移动时, 将人物状态有站立设置为奔跑。当人物静止时, 我们要实现人物的速度归零, 并由奔跑转为静止状态。因此, 在if后面添加else语句, 并添加Get Component<Rigidbody> () .velocity=new Vector3 (0, this.Get Component<Rigidbody> () , 0) 与anim.Set Bool (“Move”, false) 前者实现速度归零后者设置人物状态为站立。如图1所示。

接着, 我们调整摄像机位置, 使摄像机跟随人物移动。选择合适视角, 选中Main Camera, 选择Game Object下的Align With View, 使摄像机与当前视野保持一致。然后将人物的Tag设置为Player并为摄像机添加控制脚本, 使用Game Object.Find Game Object With Tag (“Player”) 找到跟随的人物, 用transform.position设置摄像机的跟随位置。

2. 下面介绍人物攻击动画的实现

因为一些攻击动画是有一连串的攻击实现的, 所以这里我们先实现攻击动画的拆分。首先选中攻击模型, 右侧Inspector中点击Edit。这里我们使用的攻击效果由两个攻击动作完成, 所以我们将动画拆成两部分, 点击加号根据第一个动画完成的时间, 在Start和End位置添加参数, 动画确定后, 点击Apply。如图2所示。

添加完成后会在原动画后面出现拆分后的动画。

完成拆分后, 选择Animator, 添加新Layer, 覆盖之前实现人物站立、跑动的Layer, 并添加一个Empty State (处于Emty State时, 之前设定的人物站立于跑动的效果就会起作用) , 然后将拆分的两个动画拖入到Animator中, 使用Trigger作为3个状态之间的转换方式。这里没有使用之前的Bool是因为, 一旦使用Bool值作为转换条件, 当触发第一次攻击时, Boll设置为True, 那么第二个攻击效果就会自动出现, 失去了拆分的意义。由攻击效果转换为Empty时, 不需要额外设置, 当攻击结束时会自动转换为Empty。如图3所示。

这里还有一点要注意, 在设置动作之间的转换时间的时候要注意选择合适的时间间隔, 使当连续触发时, 能够实现连击的效果。我们还是用脚本控制人物的攻击。在新的脚本中, 首先在start () 中调用this.Get Component<Animator> () 获得加在人物身上的Animator。然后, 这里我们添加简单的条件判断, 实现动作的触发。在update中添加if (Input.Get Key (“space”) ) , 这样, 每帧都会进行按键检测。如果检测到按下按键, 则调用之前在Animator中设置的Set Trigger (“Attack”) 方法, 这里Attack就是之前设置的Trriger参数的名字。

同时我们也可以为攻击添加声音效果, 可以选择直接把声音添加在特效上, 选中特效, 点击Add Component, 选择Audio Source, 将想要加入的音效拖入到Audio Clip中。

我们也可以在脚本中添加音效, 首先, Creat Empty, 再为它添加Audio Source, 新建音效控制脚本, 在脚本中获得Audio Source对象, 然后调用Audio Source.Play One Shot (Sound Name) 即可。这里我们可以把控制脚本设计成单例模式, 本例中, 声音控制脚本命名为s Manager, 首先定义s Manager对象instance, 然后在Awake () 中为其赋值:instance=this。这样做的好处是使得instance成为s Manager在系统中的唯一实例, 节省了时间和资源。

摘要:Unity3D作为一款更加专注作品的快速实现和平台推广以及3D渲染效果的游戏开发引擎, 跟随移动平台和Web平台的迅速发展, 抢占了大量市场份额。Unity3D不止限于单机平台, 还可以借助Photon等游戏引擎, 实现Unity3D单机游戏的网络化。本文所涉及的内容, 就是使用Unity3D实现游戏中人物基本行为的控制。碰撞体 (Collider) 与刚体 (Rigidbody) 结合使用可以实现Unity中的物理特性。刚体 (Rigidbody) 使对象可以受物理控制, 而碰撞体 (Collider) 使对象可以相互碰撞。Animator可以将编辑动画的控制, 管理不同动画之间的关联。

关键词:Unity3D,游戏人物控制,人物攻击

参考文献

[1]王洪源, 等.Unity3D人工智能编程精粹[M].北京:清华大学出版社, 2014.

3D引擎方法 篇6

本文提出了基于开源代码的Web3D引擎,开发交互式产品展示系统的方法,并以陶瓷产品为例,开发了一款基于开源Web3D引擎idx3D,具有交互功能的三维陶瓷产品展示系统,该系统的运行无需下载特定的插件。

1 开发步骤

根据Web3D引擎idx3D中经修改后的各类的属性和方法,总结了以下的开发步骤:

(1)为所开发的系统建模。系统需要先建立模型,才能对相应对象进行交互式处理。由于idx3D引擎中没有建模的功能,需要借助其他建模工具实现建模。

(2)构造场景。系统中,摄像机、光源以及物体等各类对象都要置于场景中予以管理和操作,因此首先要构造场景。

(3)加入材质和灯光。在场景中需要加入相应的材质和灯光。

(4)将模型文件导入程序中。导入的物体模型添加到场景中。

(5)重构场景,以及场景规格化。由于场景中添加了材质、灯光以及物体模型等内容,需要将这些对象重构成新的场景,并对场景进行规格化操作。

(6)初始化渲染状态。对重构后的场景进行渲染,此时是静止状态,并没有交互式的操作。

(7)设置旋转和缩放矩阵,实现旋转和缩放。对步骤(6)的场景进行旋转和缩放的交互式操作的实现。

(8)进行渲染得到具有三维效果的交互式系统。将步骤(7)所完成的能缩放和旋转的场景进行渲染最终实现交互式三维展示系统。

2 应用案例开发

2.1开发系统的简介

应用基于JAVA技术的Web3D开源引擎idx3D,开发了一款陶瓷产品———茶壶的三维展示系统。所开发系统的功能如下: (1) 可以根据用户的需求建立茶壶的模型; (2) 可以自由设置茶壶的花纹和材质; (3) 通过鼠标的移动,可以实现对茶壶对象的旋转操作; (4) 通过键盘的操作,可以实现对茶壶对象的缩放操作。具体来说,按动键盘上‘w’字符,茶壶对象会放大,按动键盘上‘s’字符,茶壶对象会缩小。

2.2具体实现

2.2.1 3D建模

用Autodesk的3D’s Max工具,为茶壶进行建模,再进行贴图建模和贴图完成时的截图如图1所示。建模完成后,生成.max文件。由于Web3D引擎idx3D的要求,需要导出一个.3ds文件,和一个用于贴图的.png图像文件。

2.2.2代码的实现

本节中主要介绍开发流程的实现,以及主要部分的方法调用等内容,代码的流程如图2所示。主要介绍了4个函数:init()、update()、mouseDrag()和keyDown()。从功能上看init()函数主要实现了对整个系统的构建,update()函数实现对场景的渲染以及描画到显示器的相应窗口即applet中mouseDrag()函数主要实现了鼠标操作的功能即对物体旋转的操作,keyDown()函数主要实现了键盘操作的功能即缩放功能。

在public void init()中,主要进行了该系统的初始化处理,即3中介绍的开发步骤的具体实现,包括:

(1)构建场景:用new idx3d_Scene()语句创建场景对象,参数为场景的大小尺寸。

(2)为场景添加材质和灯光: (1) 调用addMaterial()方法,为场景添加材质。根据材质的不同指定不同的参数; (2) 调用setAmbient()和setBackgroundColor()这两个方法,为场景添加灯光和背景颜色。

(3)导入建好模型的.3ds文件:用new idx3d_3ds_Importer().importFromURL()语句创建导入文件对象,参数为所建模型.3ds文件的路径和场景的对象。

(4)重构场景和场景的规格化: (1) 重构场景时,场景对象scene调用rebuild()方法,将材质(Material)和对象(Object)生成对象数组; (2) 对场景规格化时,场景对象scene调用normalize()方法来实现规格化。

(5)重置场景矩阵:由于场景和对象都在本地空间下建模,在规格化之后需要将场景和对象在本地空间下的坐标转化为世界空间下的坐标,进行重置场景矩阵的计算,具体实现通过语句scene.matrix.reset()。

(6)设置摄像机的位置,建立视图空间:将摄像机的位置设为点(0,0,-100),设置摄像机位置的语句为场景对象scene调用相应方法,scene.defaultCamera.setPos(0,0, -100) 。

修饰类型为public、无返回值的同步方法update,其参数为Graphics类型的对象g,即public synchronized void update(Graphics g)中,进行两个操作:

(1)将连同对象在内的整个场景渲染到一张图片中,场景对象scene调用render()方法。render()中是调用了renderPipeline中的render(this.defaultCamera)方法,参数为默认摄像机。

这一部分是将连同三维图形在内的三维场景,转化为具有三维效果的二维图像,下一步是将这个图像描画在applet上。

(2)将渲染好的图片画到屏幕上,此处实例化Graphics对象g,调用drawImage()方法在applet上进行描画。

在public boolean mouseDrag (Event evt, int x, int y) 中,场景对象scene调用rotate()方法,进行旋转处理。rotate()方法在Scene.java继承自的CoreObject.java中定义,rotate()方法实现旋转的具体思路为:分别计算绕x轴,y轴和z轴旋转时的变换矩阵,再相乘而得到一个变换矩阵,再进行渲染。

在public boolean keyDown(Event evt,int key)中,场景对象scene调用scale()方法,进行缩放处理。scale()的参数分别是zoomIn()方法和zoomOut(),放大时参数为zoomIn()方法,缩小时参数为zoomOut()方法。zoomIn()与zoomOut()的作用类似,都是用来计算缩放比例的方法,zoomIn()用来计算大于1的比例,zoomOut()则用来计算小于1的比例。scale()方法实现缩放的具体思路是:通过zoomIn()方法或zoomOut()方法计算出来的缩放比例计算相应的变换矩阵,再进行渲染。

图3是这个三维展示系统的运行结果,若需要将该系统在浏览器上运行,只需将该applet加载在HTML网页上即可。图4是用鼠标对三维图形进行旋转操作的截图,图5是按键盘的‘w’键对三维图形进行放大操作的截图,图6是按键盘的‘s’键对三维图形进行缩小操作的截图。

3 结束语

本文在对比了几种3D技术的基础上,介绍了开源Web3D引擎idx3D的具体实现,以及对原引擎的优化。在此基础上,明确了基于开源Web3D引擎开发系统的流程,以及具体开发方法。最后,提供了一个茶壶展示系统的开发实例,该实例的运行无需下载特定插件。

摘要:应用Web3D引擎开发的计算机仿真系统或虚拟现实系统均需在Web浏览器上运行, 需要其能快速下载和运行, 并且尽量不需下载特定插件。采用基于JAVA技术的开源Web3D引擎开发的三维系统可以满足上述要求, 开发的展示系统可以实现三维图形的旋转、缩放等交互功能。此外, 在系统开发过程中对引擎中不完善的部分进行了必要的修正。

关键词:计算机应用,Web3D引擎,三维系统,交互,JAVA技术

参考文献

[1]罗立宏, 谭夏.几种Web3D技术及比较[J].甘肃科技, 2007 (5) .

[2]朱珊虹, 李彦.几种Web3d技术的比较研究[J].内江科技, 2010 (4) .

[3]罗立宏, 谭夏梅.基于ShockWave3D的Web虚拟现实技术研究[J].科技资讯, 2007 (4) ,

[4][美]Frank D.luna.DirectX 9.0 3D游戏开发编程基础[M].北京:清华大学出版社, 2007.

[5]李春雨.计算机图形学及实用编程技术[M].北京:北京航空航天大学出版社, 2009.

[6]姚继权, 李晓豁.计算机图形学人机交互中三维拾取方法的研究[J].工程设计学报, 2006 (2) .

常见搜索引擎评价方法分析 篇7

搜索引擎是目前Web环境中最常见的工具之一,但一个搜索引擎是否能在上线后完成原有设计目标,不能靠感觉或目测,需要有一定的方法进行系统评估。即使是成功上线后,也需要继续监测,以便于调整其性能,更好地适应用户的需求,从而取得更大的市场竞争力。

1 常见搜索引擎评价方法分析

搜索引擎评价应能估计在给定条件下检索算法的有效性,并在相同情况下与另外的检索算法的有效性进行比较,或者预测这种算法在不同情况下的有效性。对于评价方法,一般要满足如下条件:

(1)能表示检索算法预期目标。

(2)量化多大程度实现了预期目标

(3)采用准确、精确且经济的度量技术。

(4)能度量误差。

1.1 效果和效率

效果衡量的是搜索引擎返回正确的搜索答案的能力,即搜索引擎的实际排序结果与人工排序结果的吻合度。

效率衡量的是搜索引擎的搜索响应速度,即搜索引擎采用的排序算法所消耗的时间和空间复杂度。

搜索引擎的这两项指标相互关联,相互制衡。通常而言,由于引擎的主要用途是为用户反馈查询的结果,所以效果评价更受重视。在评价某搜索引擎能取得有效查询结果的前提下,才将评价重点转到效率评价。

1.2 效果评价

1.2.1 召回率与准确率

效果评价中最常用的两种方式是召回率(Recall)和准确率(Precision),用于总结和比较搜索结果。召回率衡量的是搜索引擎找到所有相关文档的能力,准确率则衡量搜索引擎排除不相关文档的能力。这两种方式倾向于检索尽可能多的相关文档,且使检索到的不相关文档数量尽量最少。

对于任一个给定的查询,将会产生被检索到的文档集和未被检索到的文档集。假定A是相关文档集合,是不相关文档的集合;B是被检索到的文档集合,是未被检索到的文档集合。则召回率和准确率可以表示如下:

由上可见,召回率是相关文档被检索到的比率,准确率是检索出的文档中有多少相关文档的比率。

这两种方式,都要基于检出的经过排序的文档。当一个查询有许多个相关文档,或者相关文档较零散地分布在排序中,通常用三种方法来计算召回率和准确率。

(1)在预定义的排序位置上计算,通常计算出准确率即可。如果一个排序位置p的准确率比另一个排序高,那么相应的召回率也就高,这被称为位置p的准确率。

(2)当召回率从0到1.0每增加0.1跨度时,计算准确率的相应变化。这种方法适用于所有排序结果中的相关文档,而不仅是那些排序靠前的文档。

(3)计算当一个额外的相关文档被检出时(即召回率增加),准确率的平均值。平均准确率只有用单一的数值对所有相关文档的排序结果进行衡量,但这个值很大程序取决于排序位置较靠前的相关文档。

在实际评价中,还有第四种方法,即计算F值将召回率和准确率进行综合。F值被定义为召回率(R)和准确率(P)的加权调和平均数,其优点是用单一的数值即可评价搜索引擎的性能,表示如下:

其中α是权重,用于表示侧重召回率或者是准确率。

1.2.2 平均化与插值

1.2.1中的评价方法主要针对一个查询,为对搜索引擎进行全面的评价,必须选择多个查询进行测试,此时,会采用平均化技术,即通过某个查询集来总结某个排序算法的排序性能。

使用1.2.1中的平均准确率,可得到每个查询的相关排序结果的评价数值,要对多个查询总结该排序算法性能,可把这些数值再平均。因为基于平均准确率,所以表示对每个查询,用户都倾向于找到更多的相关文档。为了简化平均化过程,每个查询的召回率-准确率值被转化为标准召回率等级上的准确率值,即将标准召回率等级上的准确率值进行平均,可评价排序算法的效果。

标准召回率等级是0到1.0,以0.1为单位增量。为获得每个查询在这些召回率等级下的准确率,必须进行插值。即要基于这些数据点定义函数,使其在每个召回率等级处都产生值。现在最常用的函数表示如下:

其中,S是观测点(R,P)的集合。在任意的召回率等级处,该插值定义准确率为在较高的召回率等级处,召回率-准确率点中能观测到的最大准确率。

任何搜索引擎的搜索结果都包含一些不相关的文档,所以随着召回率升高,通常准确率趋于下降。这一点在上述插值方法中得以体现,因为这个函数值是单调下降的。

1.2.3 排序靠前的文档

尽管许多搜索的结果有许多个文档,但用户往往只关注排序在前的相关文档,在Web环境下,通常是结果的前1-3页。有时还有这种情况,搜索仅需要一个单独的相关文档,这时,召回率评价就不再起作用,而相关文档是否靠前才最重要。

在1.2.1中提到的位置p的准确率的评价通过平均多个查询的评价结果来评价搜索引擎,但不足之处在于:对于给定数量的相关文档,不能很好地区分不同的排序。因此选用排序倒数评价方法更为合适。它返回第一个相关文档位置的倒数,与其相关的平均排序倒数是针对一组查询的排序倒数平均值。

实际评价中,当高相关性的文档比边缘相关的文档有用得多,一般采用折扣累积增益法(Discounted Cumulative Gain)。这种方法从排序靠前的结果开始计算,在靠后的排序位置上开始打折,表示如下:

其中,reli搜索返回的文档中排序为i的文档的相关性等级,分母log2i是损失因子。通过变化公式中的对数的基数,损失可能变得更陡峭或者趋于平滑。

DCG评价首先对每个查询的位置p上的DCG进行计算,再进行平均。但不同的查询,会返回不同数量的相关文档,为了便于平均不同查询的评价值,可通过将每个排序位置上的DCG值与该查询的最优排序的DCG值进行比较,得出归一化的值。

1.3 效率评价

最常用的效率评价方法是基于查询流量的方法,记录每秒处理的查询数量,这是个单一数值的评价。通常,两个搜索引擎应在同一个测试集、同一个查询集合、同样的硬件环境下进行评价。搜索引擎提供方希望借助于流量数据来估计系统容量,从而决定是否还需要投入硬件资源来满足大量的用户查询。

主要的效率评价方法如下:

(1)索引时间开销:用于评价在一个特定系统上建立文档索引所需的时间。

(2)索引处理器时间开销:用于评价建立文档索引所需的时间,与索引时间开销相似,但不包括I/O等待时间或者系统并行获得的速度。

(3)查询流量:每秒钟处理查询的数量。

(4)查询延迟:用户提交一个查询后,在获得返回结果之前需要等待的时间,以毫秒计算。用中值或者百分比表示。

(5)临时索引空间:创建索引所使用的临时磁盘空间的数量。

(6)索引大小:用于存储索引文件的存储空间的大小。

但如仅用流量数据来评价,就会忽略延迟因素的影响。延迟和查询流量并不是正交关系,通常可以通过增加延迟来改进流量。

与效果评价中的召回率与准确率一样,低延迟和高流量都代表搜索引擎的高性能,但这两项指标却是相互冲突的,不可能同时达到峰值。在一个搜索引擎中,查询流量是基本需求,因为系统需要处理用户提交的每一个查询,延迟和硬件资源则相对是动态的。

查询流量和延迟是最有效的效率评价方法,但同时也应将索引的代价考虑其中。假设给定足够的时间和空间,存储每个可能长度的查询,那查询流量和延迟有可能达到各自的峰值,但这时的索引代价极其巨大。所以需要衡量索引结构的大小,以及创建索引所消耗的时间。

2 结论

对于搜索引擎的评价方法有许多,但并没有哪一个就能全面评价搜索引擎的性能。所以实际评价过程中,通常是综合运用多种评价方法,力求从不同的角度验证搜索引擎的工作性能。常用的组合包括召回率准确率、平均值、关注靠前文档等。

摘要:搜索引擎是网络环境中普通用户获取信息的重要工具,其性能优劣需要靠科学的评价方法来测定。文中分析了常用的搜索引擎评价方法及其各自的应用特征。重点分析的是效果评价中的三种方法以及适用的环境。实际评价中,以多种评价方法的综合为宜。

关键词:搜索引擎,评价,效果,效率,查询算法

参考文献

[1]魏蕾如.基于搜索引擎的网络中文信息检索工具评价[J].数字技术与应用,2011(06):187-188.

[2]Stefan Buttcher.信息检索实现和评价搜索引擎[M].北京:机械工业出版社,2012:279-323.

[3]苏君华.搜索引擎评价研究综述[J].情报杂志,2011(04):28-63.

[4]黄盛.浅议信息检索的相关特性及效果评价[J].全国商情(理论研究),2010(13):111-112.

上一篇:开放性病房综合护理下一篇:音乐之声敲开心灵之门