网络游戏中的射线查询方法和场景服务器技术

技术编号:8047006 阅读:270 留言:0更新日期:2012-12-06 16:51
本发明专利技术提供了网络游戏中的射线查询方法和场景服务器。该方法包括:场景服务器针对每一游戏帧执行以下操作:在每一游戏帧开始时,将针对该游戏帧的所有射线查询请求注册到射线查询管理器中;依据注册至该射线查询管理器的射线查询请求数量统计出当前是由CPU还是由图像处理器GPU执行射线查询;如果统计出是由CPU执行射线查询,则由CPU执行射线查询;如果统计出是由GPU执行射线查询,则调度GPU异步执行射线查询,而CPU在GPU执行射线查询期间执行非射线查询任务。

【技术实现步骤摘要】

本专利技术涉及网络游戏技术,特别涉及网络游戏中的射线查询方法和场景服务器
技术介绍
碰撞检测是网络游戏中实现很多游戏效果和技术的基础,其中以射线查询应用最为广泛。所谓射线查询,其主要是使用射线作碰撞检测,查询空间中的射线是否与场景模型相交,如果相交则返回最近的交点等信息。例如《刀剑贰》中的跳跃、寻路、伤害判定等,都需要进行大量射线查询。 通常,网络游戏中用于射线查询的场景模型使用三角形网格表示,有时复杂的场景模型可能使用数十万乃至百万个三角形网格。为了加速计算,常常针对场景模型使用加速结构即kdtree、均匀网格等数据结构,其对空间进行划分,并将三角形划分到其覆盖的各个子空间,检测时只查找射线穿过的子空间,避免不必要的射线与三角形相交测试。但即使使用加速结构,射线查询也需要大量的计算。为了防止欺诈或外挂,更好的维护玩家权益,越来越多的网络游戏将涉及利益的射线查询放在服务器端计算,通常是由场景服务器的(PU执行。但是,场景服务器的CPU负责运行多个场景,包括世界和副本等,支持数以千计的玩家同时在线,毎秒运行数十个游戏帧,而每一游戏帧通常需要处理网络请求、人工智能、伤害判定、寻路、日志等大量任务,如果在额定的时间内不能完成任务,导致服务器延迟,不仅影响玩家体验,还会影响后续游戏帧的处理,导致各种问题。和其它任务相比,射线查询不仅计算密集,而且帧间负载不平衡,在某一游戏帧只有少量的查询,而下ー游戏帧就可能出现数百倍乃至千倍的查询,常常导致服务器延迟。
技术实现思路
本专利技术提供了网络游戏中的射线查询方法和场景服务器,以避免射线查询引起场景服务器的延迟。本专利技术提供的技术方案包括一种网络游戏中的射线查询方法,方法包括场景服务器针对每ー游戏帧执行以下操作在每ー游戏帧开始时,将针对该游戏帧的所有射线查询请求注册到射线查询管理器中;依据注册至该射线查询管理器的射线查询请求数量统计出当前是由CPU还是由图像处理器GPU执行射线查询;如果统计出是由CPU执行射线查询,则由CPU执行射线查询;如果统计出是由GPU执行射线查询,则调度GPU异步执行射线查询,而CPU在GPU执行射线查询期间执行非射线查询任务。一种应用于网络游戏中射线查询的场景服务器,包括注册单元,用于当每一游戏帧开始时,将针对该游戏帧的所有射线查询请求注册到射线查询管理器中;统计单元,用于依据注册至该射线查询管理器的射线查询请求数量统计出当前是由CPU还是由图像处理器GPU执行射线查询;CPU,用于在所述统计单元统计出是由CPU执行射线查询时,执行射线查询;GPU,用于在所述统计单元统计出是由GPU执行射线查询吋,异步执行射线查询,其中,所述CPU在GPU执行射线查询期间执行非射线查询任务。由以上技术方案可以看出,本专利技术中,依据每ー游戏帧开始时注册至该射线查询管理器的该游戏帧的所有射线查询请求数量统计出当前是由CPU还是由图像处理器GPU执行射线查询,如果统计出是由CPU执行射线查询,则由CPU执行射线查询,如果统计出是由GPU执行射线查询,则调度GPU异步执行射线查询,而CPU在GPU执行射线查询期间执行非射线查询任务,这是实现了并非一直由场景服务器的CPU执行射线查询任务,而GPU也可协助执行射线查询任务,这保证了场景服务器的流畅运行,避免射线查询引起场景服务器的 延迟。附图说明图I为GPU效果示意图;图2为本专利技术实施例提供的方法流程图;图3为本专利技术实施例提供的CPU计算时间和数据传输时间测试示意图;图4为本专利技术实施例提供的详细方法流程图;图5为本专利技术实施例提供的数据存储格式示意图;图6为本专利技术实施例提供的GPU执行射线查询流程图;图7为本专利技术实施例提供的查询数据和线程块数据示意图;图8为本专利技术实施例提供的场景服务器结构图。具体实施例方式为了使本专利技术的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本专利技术进行详细描述。随着对图形处理能力的需求不断增长,图形处理器(GPU)得到了飞速发展。该GPU具有大量数据并行处理、计算密集的特点,其与CPU上大部分面积都被缓存占据有所不同,目前,GPU上有大约80%的晶体管用作运算,因此,GPU在密集型计算上比CPU更有优势,拥有更高的浮点计算能力,具体如图I所示。基于此,本专利技术可由GPU作为CPU的协处理器异步执行射线查询,具体见图2所/Jn ο參见图2,图2为本专利技术实施例提供的方法流程图。如图2所示,该流程可包括步骤201,场景服务器针对每ー游戏帧执行步骤202至步骤204。步骤202,在每ー游戏帧开始时,将针对该游戏帧的所有射线查询请求注册到射线查询管理器中;步骤203,依据注册至该射线查询管理器的射线查询请求数量统计出当前是由CPU还是由GPU执行射线查询。步骤204,如果步骤203统计出是由CPU执行射线查询,则由CPU执行射线查询;如果步骤203统计出是由图像处理器GPU执行射线查询,则调度GPU异步执行射线查询,而CPU在GPU执行射线查询期间执行非射线查询任务。至此,完成图2所示方法的描述。其中,步骤203之所以统计出当前是由CPU还是由GPU执行射线查询,主要是因为虽然GPU可异步执行射线查询,但其需要与内存通过PCI-E总线通信,以便从内存复制用于执行射线查询的查询数据到显存(GPU的全局存储),以及还需要从显存复制执行射线查询的结果到内存,这都需要时间,为便于描述,将该时间简称为数据传输时间。根据本申请专利技术人的测试,只有该数据传输时间小于由CPU执行射线查询所需要的时间(简称为CPU计算时间)时,使用GPU执行射线查询才有意义,比如提高射线查询速度。因此,在执行射线查询时就需要从提高射线查询速度角度细分是由CPU还是由GPU执行射线查询。通常,CPU计算时间基本上与射线查询的数量成正比,而数据传输时间虽然随着传输数据大小的增加而增加,不过与传输数据大小并不成正比,增长较慢。本申请专利技术人以 NIVIDA GTX460显卡为例测试数据传输时间与CPU计算时间具体如图3所示。从图3可以看出,从射线查询请求的数量为16开始,CPU计算时间大于数据传输时间,因此可以得到当射线查询请求的数量小于16时使用CPU执行射线查询,而当大于等于16使用GPU异步执行射线查询,这能够保证射线查询速度最快。由于服务器的硬件配置不同,CPU计算时间等于或开始大于上述数据传输时间的射线查询请求数量N不同。为了获取N,本专利技术在场景服务器启动时,载入ー组预先生成的查询数据,取查询数据的数量为2k,从k=2开始依次测试CPU计算时间和数据传输时间,当测试结果为(PU计算时间等于或开始大于上述数据传输时间时,确定当前已使用的查询数据的数量为所述N。另外,根据步骤204的描述可以看出,场景服务器的CPU执行的任务分成如下两类射线查询任务和非射线查询任务。其中,当统计出是由CPU执行射线查询时,则由CPU执行射线查询任务。而当统计出由GPU执行射线查询吋,就调度GPU异步执行射线查询,而CPU在GPU执行射线查询期间执行非射线查询任务,这不仅能提高场景服务器计算射线查询的速度,而且能提高服务器处理任务的呑吐量。下面通过图4对图2所示流程进行详细描述參见图4,图4为本专利技术实施例提供的详细方法流程图。如图4所示,该流程可包括本文档来自技高网...

【技术保护点】
一种网络游戏中的射线查询方法,其特征在于,该方法包括:场景服务器针对每一游戏帧执行以下操作:在每一游戏帧开始时,将针对该游戏帧的所有射线查询请求注册到射线查询管理器中;依据注册至该射线查询管理器的射线查询请求数量统计出当前是由CPU还是由图像处理器GPU执行射线查询;如果统计出是由CPU执行射线查询,则由CPU执行射线查询;如果统计出是由GPU执行射线查询,则调度GPU异步执行射线查询,而CPU在GPU执行射线查询期间执行非射线查询任务。

【技术特征摘要】

【专利技术属性】
技术研发人员:李利国
申请(专利权)人:北京像素软件科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1