CN102810133A - 网络游戏中的射线查询方法和场景服务器 - Google Patents

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

Info

Publication number
CN102810133A
CN102810133A CN2012101504016A CN201210150401A CN102810133A CN 102810133 A CN102810133 A CN 102810133A CN 2012101504016 A CN2012101504016 A CN 2012101504016A CN 201210150401 A CN201210150401 A CN 201210150401A CN 102810133 A CN102810133 A CN 102810133A
Authority
CN
China
Prior art keywords
ray
inquiry
query
thread
scene
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2012101504016A
Other languages
English (en)
Other versions
CN102810133B (zh
Inventor
李利国
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Pixel Software Technology Co Ltd
Original Assignee
Beijing Pixel Software Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Pixel Software Technology Co Ltd filed Critical Beijing Pixel Software Technology Co Ltd
Priority to CN201210150401.6A priority Critical patent/CN102810133B/zh
Publication of CN102810133A publication Critical patent/CN102810133A/zh
Application granted granted Critical
Publication of CN102810133B publication Critical patent/CN102810133B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

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

Description

网络游戏中的射线查询方法和场景服务器
技术领域
本发明涉及网络游戏技术,特别涉及网络游戏中的射线查询方法和场景服务器。
背景技术
碰撞检测是网络游戏中实现很多游戏效果和技术的基础,其中以射线查询应用最为广泛。所谓射线查询,其主要是使用射线作碰撞检测,查询空间中的射线是否与场景模型相交,如果相交则返回最近的交点等信息。例如《刀剑贰》中的跳跃、寻路、伤害判定等,都需要进行大量射线查询。
通常,网络游戏中用于射线查询的场景模型使用三角形网格表示,有时复杂的场景模型可能使用数十万乃至百万个三角形网格。为了加速计算,常常针对场景模型使用加速结构即kdtree、均匀网格等数据结构,其对空间进行划分,并将三角形划分到其覆盖的各个子空间,检测时只查找射线穿过的子空间,避免不必要的射线与三角形相交测试。但即使使用加速结构,射线查询也需要大量的计算。为了防止欺诈或外挂,更好的维护玩家权益,越来越多的网络游戏将涉及利益的射线查询放在服务器端计算,通常是由场景服务器的CPU执行。但是,场景服务器的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也可协助执行射线查询任务,这保证了场景服务器的流畅运行,避免射线查询引起场景服务器的延迟。
附图说明
图1为GPU效果示意图;
图2为本发明实施例提供的方法流程图;
图3为本发明实施例提供的CPU计算时间和数据传输时间测试示意图;
图4为本发明实施例提供的详细方法流程图;
图5为本发明实施例提供的数据存储格式示意图;
图6为本发明实施例提供的GPU执行射线查询流程图;
图7为本发明实施例提供的查询数据和线程块数据示意图;
图8为本发明实施例提供的场景服务器结构图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
随着对图形处理能力的需求不断增长,图形处理器(GPU)得到了飞速发展。该GPU具有大量数据并行处理、计算密集的特点,其与CPU上大部分面积都被缓存占据有所不同,目前,GPU上有大约80%的晶体管用作运算,因此,GPU在密集型计算上比CPU更有优势,拥有更高的浮点计算能力,具体如图1所示。
基于此,本发明可由GPU作为CPU的协处理器异步执行射线查询,具体见图2所示。
参见图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计算时间和数据传输时间,当测试结果为:CPU计算时间等于或开始大于上述数据传输时间时,确定当前已使用的查询数据的数量为所述N。
另外,根据步骤204的描述可以看出,场景服务器的CPU执行的任务分成如下两类:射线查询任务和非射线查询任务。其中,当统计出是由CPU执行射线查询时,则由CPU执行射线查询任务。而当统计出由GPU执行射线查询时,就调度GPU异步执行射线查询,而CPU在GPU执行射线查询期间执行非射线查询任务,这不仅能提高场景服务器计算射线查询的速度,而且能提高服务器处理任务的吞吐量。
下面通过图4对图2所示流程进行详细描述:
参见图4,图4为本发明实施例提供的详细方法流程图。如图4所示,该流程可包括以下步骤:
步骤401,场景服务器启动,载入该场景服务器中所有游戏场景的碰撞模型至显存中,生成各个游戏场景的碰撞模型相关联的加速结构并复制至显存中。
优选地,本发明中,游戏场景的碰撞模型可通过三角形网格表示。
另外,本步骤401中,生成加速结构的方式可与现有技术类似,本申请不具体限定。
步骤402,将每个游戏场景的碰撞模型地址、包围盒、以及加速结构地址复制到GPU的常量内存中。
本步骤402中的数据使用频繁,数量较少,可以通过缓存(Cache)加速访问。
为便于理解,图5示出了步骤401中数据和步骤402中数据的存储格式示意图。
步骤403,载入预生成的查询数据,测试得到使用GPU计算射线查询的最小查询数量N。
步骤404,循环针对各个游戏帧执行以下步骤405至步骤407,直至场景服务器程序退出。
步骤405,在游戏帧开始时,将针对该游戏帧的所有射线查询请求注册到射线查询管理器中。
步骤406,射线查询管理器按游戏场景记录射线查询请求,并统计射线查询请求数量。
其中,射线查询管理器按场景记录射线查询请求具体为:同一游戏场景的射线查询请求记录在一起,不同游戏场景的射线查询请求不记录在一起,目的是便于以后生成线程块数据,具体见下文步骤603描述。
步骤407,如果射线查询请求数量大于N,则调度GPU异步执行射线查询,否则,使用CPU执行射线查询。
优选地,本发明中,在GPU执行射线查询时,CPU可继续处理非射线查询任务。
其中,本发明中,GPU执行射线查询具体可参见图6所示流程。
参见图6,图6为本发明实施例提供的GPU执行射线查询流程图。如图6所示,该流程可包括以下步骤:
步骤601,将查询数据从内存复制到显存中。
本步骤601之所以将查询数据从内存复制到显存,主要是因为GPU不能直接访问内存,但可直接访问显存。
另外,本发明中,所述查询数据至少包含以下分量:射线原点的x坐标、y坐标和z坐标,以及射线方向的x坐标、y坐标和z坐标、以及射线最远距离。在图7a中,该各个分量并非存储在一个数组,而是将各个分量单独存为一个数组,便于多处理器读取数据时,合并访存事务,减少访存次数。
步骤602,划分线程网格为线程块。
本步骤602中,可按照同一线程块执行同一游戏场景的射线查询、且线程块中的一个线程单独执行一个射线查询为原则执行划分操作。
由于每个射线查询使用一个单独的线程计算,因此,如果线程块的线程数量较多,则在某些线程等待射线查询时,可以调度其它线程进行计算,这可以隐藏访存延迟,不过由于执行射线查询时需要占用较多的资源,例如共享内存,因此,线程块内最多只能使用256个线程。
步骤603,生成并复制线程块数据至显存中。
由于每个线程块只处理一个游戏场景的查询,因此,可以保证这样线程块内的所有线程共享线程块数据。
优选地,所述线程块数据具体与其中的线程执行射线查询的信息有关,其大小可为12个int,至少包括:查询数据、游戏场景索引、查询数据起始地址、射线查询结果地址。图7示出了线程块数据与查询数据之间的对应关系。
步骤604,启动GPU的射线查询。
本步骤604具体可为:首先调用每个线程块的前12个线程读取线程块数据到共享内存中,并调用syncthreads()同步线程,使得线程块内的线程等待线程块数据读取完成后再继续执行射线查询。其次,针对该线程块的每一线程,获取该线程块每一线程负责执行射线查询的查询数据在该线程块内的索引。其中,由于本发明使用一维的线程块,所以每个线程获取的系统变量threadIdx.x就是该线程负责执行射线查询的查询数据在该线程块内的索引。如此,每个线程在读取到共享内存中线程块数据的查询数据起始地址的基础上,用该索引进行偏移后得到其负责的查询数据地址,读取查询数据。之后由该线程利用所述查询数据执行射线查询。
其中,基于图7所示的查询数据,以及上面描述的碰撞模型通过三角形网格表示,则由所述线程利用查询数据执行射线查询包括:
判断该查询数据对应的射线是否与游戏场景的包围盒相交,该游戏场景通过该查询数据所处线程块数据中的游戏场景索引确定,如果不相交,通过该线程将用于表示射线查询结果为不相交的第一标识比如False作为射线查询结果写入至共享内存中;
如果相交,则,
遍历该游戏场景的加速结构,寻找该射线与该游戏场景的三角形网格最近的交点,如果未寻找到所述交点,则通过该线程将用于表示射线查询结果为不相交的第一标识比如False作为射线查询结果写入至共享内存中,
如果寻找到所述交点,则通过该线程将用于表示射线查询结果为相交的第二标识、以及所述交点与所述射线原点之间的距离作为射线查询结果写入共享内存中,以便后续CPU处理射线查询结果时可以根据该距离计算出交点。之后再次调用_syncthreads()同步线程,并在等待所有线程完成射线查询结束且并将射线查询结果写入到共享内存后,将共享内存中的射线查询结果写入到全局内存中。
至此,完成本发明提供的方法描述。下面对本发明提供的场景服务器进行描述:
参见图8,图8为本发明实施例提供的场景服务器结构图。如图8所示,该场景服务器包括:
注册单元,用于当每一游戏帧开始时,将针对该游戏帧的所有射线查询请求注册到射线查询管理器中;
统计单元,用于依据注册至该射线查询管理器的射线查询请求数量统计出当前是由CPU还是由图像处理器GPU执行射线查询;
CPU,用于在所述统计单元统计出是由CPU执行射线查询时,执行射线查询;
GPU,用于在所述统计单元统计出是由GPU执行射线查询时,异步执行射线查询,其中,所述CPU在GPU执行射线查询期间执行非射线查询任务。
本发明中,所述统计单元通过以下步骤统计出当前是由CPU还是由GPU执行射线查询包括:
统计出注册至所述射线查询管理器的射线查询请求数量之和;
如果该统计的射线查询请求数量之和大于数值N,则确定由GPU执行射线查询,否则,确定由CPU执行射线查询;
其中,所述N可按照上述方法中描述的如何确定N的方式,其用于保证所述CPU执行射线查询的时间等于或开始大于数据传输时间时的最小射线查询请求数量,所述数据传输时间为GPU从内存中获取用于执行射线查询的查询数据,以及将射线查询的结果复制到内存需要的时间。
另外,本发明中,所述GPU通过以下步骤执行射线查询包括:
将查询数据从内存复制至显存中;优选地,每一查询数据至少包含以下分量:射线原点的x坐标、y坐标和z坐标,以及射线方向的x坐标、y坐标和z坐标、以及射线最远距离;
将线程划分为线程块,生成并复制线程块数据至显存中;其中,每一线程块包含至少一个线程、且每一线程块的线程处理同一个游戏场景的射线查询,每一线程块数据至少包括:查询数据、游戏场景索引、查询数据起始地址、射线查询结果地址;
针对每一线程块执行以下操作:
针对该线程块的每一线程,
获取该线程块每一线程负责执行射线查询的查询数据在该线程块内的索引;
在该线程块的线程块数据中找到查询数据起始地址,在该查询数据起始地址基础上偏移该获取的索引之后得到该线程负责的查询数据地址,从该查询数据地址上读取对应的查询数据;
由该线程利用所述查询数据执行射线查询。
如图8所示,所述场景服务器进一步包括:
复制单元,用于在所述场景服务器启动时,生成各个游戏场景的碰撞模型相关联的加速结构,将该加速结构以及各个游戏场景的碰撞模型复制至显存中,以及将各个游戏场景的包围盒、加速结构地址、以及碰撞模型地址复制至GPU的常量内存中,其中,所述游戏场景的碰撞模型通过三角形网格表示;
基于此,所述线程利用查询数据执行射线查询包括:
判断该查询数据对应的射线是否与游戏场景的包围盒相交,该游戏场景通过该查询数据所处线程块数据中的游戏场景索引确定,如果不相交,通过该线程写入用于表示射线查询结果为不相交的第一标识至共享内存中;
如果相交,则,
遍历该游戏场景的加速结构,寻找该射线与该游戏场景的三角形网格最近的交点,如果未寻找到所述交点,则通过该线程写入用于表示射线查询结果为不相交的第一标识至共享内存中,
如果寻找到所述交点,则通过该线程写入用于表示射线查询结果为相交的第二标识至共享内存中,并将所述交点与所述射线原点之间的距离写入共享内存中。
至此,完成本发明提供的场景服务器结构描述。
下面通过一个测试举例说明本发明达到的效果:
使用硬件配置为Intel Core i5-2300CPU、4G内存、GTX460显卡的场景服务器,载入10个场景近100万个三角形网格,对一组典型的射线查询数据进行测试,测试结果如下表1所示。
Figure BDA00001639991300101
从表1可见,当查询数据的数量大于等于16时,CPU计算时间大于GPU传输时间,应该使用GPU计算,而当查询数据的数量少于64时,GPU总时间(射线查询+数据传输时间)大于CPU计算时间,不过由于GPU异步计算,服务器花费在射线查询的时间仅为GPU数据传输时间;而当查询数据的数量大于64时,GPU总时间少于CPU计算时间。可以看出,当查询数据的数量较多时,使用GPU执行射线查询比CPU快很多,效率提高20多倍。如果在GPU异步执行射线查询期间,CPU处理完非射线查询任务,可能需要等待GPU完成射线查询,不过该等待时间比较短,比如即使当查询数据的数量达到3万多时,GPU总时间也紧13ms左右,完全可以满足服务器需求。总之,使用基于CUDA的技术计算射线查询,极大的提高了场景服务器执行射线查询的速度,能够实现每一游戏帧甚至可以同时处理上千玩家的跳跃请求,保证了场景服务器的流畅运行。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

Claims (10)

1.一种网络游戏中的射线查询方法,其特征在于,该方法包括:
场景服务器针对每一游戏帧执行以下操作:
在每一游戏帧开始时,将针对该游戏帧的所有射线查询请求注册到射线查询管理器中;
依据注册至该射线查询管理器的射线查询请求数量统计出当前是由CPU还是由图像处理器GPU执行射线查询;
如果统计出是由CPU执行射线查询,则由CPU执行射线查询;
如果统计出是由GPU执行射线查询,则调度GPU异步执行射线查询,而CPU在GPU执行射线查询期间执行非射线查询任务。
2.根据权利要求1所述的方法,其特征在于,依据注册至射线查询管理器的射线查询请求数量统计出当前是由CPU还是由GPU执行射线查询包括:
统计出注册至所述射线查询管理器的射线查询请求数量之和;
如果该统计的射线查询请求数量之和大于数值N,则确定由GPU执行射线查询,否则,确定由CPU执行射线查询;
其中,所述N用于保证所述CPU执行射线查询的时间等于或开始大于数据传输时间时的最小射线查询请求数量,所述数据传输时间为GPU从内存中获取用于执行射线查询的查询数据,以及将射线查询的结果复制到内存需要的时间。
3.根据权利要求2所述的方法,其特征在于,所述N通过以下步骤确定:
所述场景服务器在启动时载入预先生成的查询数据;
所述场景服务器使用该生成的查询数据测试CPU执行射线查询的时间和所述数据查询时间,当测试结果为:CPU执行射线查询时间等于或开始大于所述数据传输时间时,确定当前已使用的查询数据的数量为所述N。
4.根据权利要求1至3任一所述的方法,其特征在于,所述GPU执行射线查询包括:
将查询数据从内存复制至显存中;
将线程划分为线程块,生成并复制线程块数据至显存中;其中,每一线程块包含至少一个线程、且每一线程块的线程处理同一个游戏场景的射线查询,每一线程块数据至少包括:查询数据、游戏场景索引、查询数据起始地址、射线查询结果地址;
针对每一线程块执行以下操作:
针对该线程块的每一线程,
获取该线程块每一线程负责执行射线查询的查询数据在该线程块内的索引;
在该线程块的线程块数据中找到查询数据起始地址,在该查询数据起始地址基础上偏移该获取的索引之后得到该线程负责的查询数据地址,从该查询数据地址上读取对应的查询数据;
由该线程利用所述查询数据执行射线查询。
5.根据权利要求4所述的方法,其特征在于,在所述方法执行之前,进一步包括:场景服务器在启动时,生成各个游戏场景的碰撞模型相关联的加速结构,将该加速结构以及各个游戏场景的碰撞模型复制至显存中,以及将各个游戏场景的包围盒、加速结构地址、以及碰撞模型地址复制至GPU的常量内存中。
6.根据权利要求5所述的方法,其特征在于,所述查询数据至少包含以下分量:射线原点的x坐标、y坐标和z坐标,以及射线方向的x坐标、y坐标和z坐标、以及射线最远距离;
所述游戏场景的碰撞模型通过三角形网格表示;
所述线程利用查询数据执行射线查询包括:
判断该查询数据对应的射线是否与游戏场景的包围盒相交,该游戏场景通过该查询数据所处线程块数据中的游戏场景索引确定,如果不相交,通过该线程写入用于表示射线查询结果为不相交的第一标识至共享内存中;
如果相交,则,
遍历该游戏场景的加速结构,寻找该射线与该游戏场景的三角形网格最近的交点,如果未寻找到所述交点,则通过该线程写入用于表示射线查询结果为不相交的第一标识至共享内存中,
如果寻找到所述交点,则通过该线程写入用于表示射线查询结果为相交的第二标识至共享内存中,并将所述交点与所述射线原点之间的距离写入共享内存中。
7.一种应用于网络游戏中射线查询的场景服务器,其特征在于,该场景服务器包括:
注册单元,用于当每一游戏帧开始时,将针对该游戏帧的所有射线查询请求注册到射线查询管理器中;
统计单元,用于依据注册至该射线查询管理器的射线查询请求数量统计出当前是由CPU还是由图像处理器GPU执行射线查询;
CPU,用于在所述统计单元统计出是由CPU执行射线查询时,执行射线查询;
GPU,用于在所述统计单元统计出是由GPU执行射线查询时,异步执行射线查询,其中,所述CPU在GPU执行射线查询期间执行非射线查询任务。
8.根据权利要求7所述的场景服务器,其特征在于,所述统计单元通过以下步骤统计出当前是由CPU还是由GPU执行射线查询包括:
统计出注册至所述射线查询管理器的射线查询请求数量之和;
如果该统计的射线查询请求数量之和大于数值N,则确定由GPU执行射线查询,否则,确定由CPU执行射线查询;
其中,所述N用于保证所述CPU执行射线查询的时间等于或开始大于数据传输时间时的最小射线查询请求数量,所述数据传输时间为GPU从内存中获取用于执行射线查询的查询数据,以及将射线查询的结果复制到内存需要的时间。
9.根据权利要求7或8所述的场景服务器,其特征在于,所述GPU通过以下步骤执行射线查询包括:
将查询数据从内存复制至显存中;
将线程划分为线程块,生成并复制线程块数据至显存中;其中,每一线程块包含至少一个线程、且每一线程块的线程处理同一个游戏场景的射线查询,每一线程块数据至少包括:查询数据、游戏场景索引、查询数据起始地址、射线查询结果地址;
针对每一线程块执行以下操作:
针对该线程块的每一线程,
获取该线程块每一线程负责执行射线查询的查询数据在该线程块内的索引;
在该线程块的线程块数据中找到查询数据起始地址,在该查询数据起始地址基础上偏移该获取的索引之后得到该线程负责的查询数据地址,从该查询数据地址上读取对应的查询数据;
由该线程利用所述查询数据执行射线查询。
10.根据权利要求9所述的场景服务器,其特征在于,所述查询数据至少包含以下分量:射线原点的x坐标、y坐标和z坐标,以及射线方向的x坐标、y坐标和z坐标、以及射线最远距离;
所述场景服务器进一步包括:
复制单元,用于在所述场景服务器启动时,生成各个游戏场景的碰撞模型相关联的加速结构,将该加速结构以及各个游戏场景的碰撞模型复制至显存中,以及将各个游戏场景的包围盒、加速结构地址、以及碰撞模型地址复制至GPU的常量内存中,其中,所述游戏场景的碰撞模型通过三角形网格表示;
所述线程利用查询数据执行射线查询包括:
判断该查询数据对应的射线是否与游戏场景的包围盒相交,该游戏场景通过该查询数据所处线程块数据中的游戏场景索引确定,如果不相交,通过该线程写入用于表示射线查询结果为不相交的第一标识至共享内存中;
如果相交,则,
遍历该游戏场景的加速结构,寻找该射线与该游戏场景的三角形网格最近的交点,如果未寻找到所述交点,则通过该线程写入用于表示射线查询结果为不相交的第一标识至共享内存中,
如果寻找到所述交点,则通过该线程写入用于表示射线查询结果为相交的第二标识至共享内存中,并将所述交点与所述射线原点之间的距离写入共享内存中。
CN201210150401.6A 2012-05-15 2012-05-15 网络游戏中的射线查询方法和场景服务器 Active CN102810133B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210150401.6A CN102810133B (zh) 2012-05-15 2012-05-15 网络游戏中的射线查询方法和场景服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210150401.6A CN102810133B (zh) 2012-05-15 2012-05-15 网络游戏中的射线查询方法和场景服务器

Publications (2)

Publication Number Publication Date
CN102810133A true CN102810133A (zh) 2012-12-05
CN102810133B CN102810133B (zh) 2015-08-12

Family

ID=47233837

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210150401.6A Active CN102810133B (zh) 2012-05-15 2012-05-15 网络游戏中的射线查询方法和场景服务器

Country Status (1)

Country Link
CN (1) CN102810133B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103164839A (zh) * 2013-03-07 2013-06-19 华为技术有限公司 一种绘图方法、装置及终端
CN105677812A (zh) * 2015-12-31 2016-06-15 华为技术有限公司 一种数据查询方法及数据查询装置
CN106021399A (zh) * 2016-05-12 2016-10-12 网易(杭州)网络有限公司 查询请求消息的处理方法及装置
CN110515972A (zh) * 2019-08-27 2019-11-29 陈东升 数据库快速查询系统及数据查询方法
CN114138449A (zh) * 2021-12-14 2022-03-04 河南省儿童医院郑州儿童医院 一种基于虚拟现实的康复训练系统
CN115757784A (zh) * 2022-11-21 2023-03-07 中科世通亨奇(北京)科技有限公司 基于标注模型和标签模板筛选的语料标注方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1655191A (zh) * 2005-02-25 2005-08-17 浙江大学 基于可编程图形硬件的多边形网格模型的快速体素化方法
TW200832280A (en) * 2006-12-28 2008-08-01 Intel Corp Real-time collision detection using clipping
CN101458825A (zh) * 2009-01-04 2009-06-17 腾讯科技(深圳)有限公司 显卡中实现3d骨骼动画模型的碰撞检测方法及显卡、系统
US20100188412A1 (en) * 2009-01-28 2010-07-29 Microsoft Corporation Content based cache for graphics resource management

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1655191A (zh) * 2005-02-25 2005-08-17 浙江大学 基于可编程图形硬件的多边形网格模型的快速体素化方法
TW200832280A (en) * 2006-12-28 2008-08-01 Intel Corp Real-time collision detection using clipping
CN101458825A (zh) * 2009-01-04 2009-06-17 腾讯科技(深圳)有限公司 显卡中实现3d骨骼动画模型的碰撞检测方法及显卡、系统
US20100188412A1 (en) * 2009-01-28 2010-07-29 Microsoft Corporation Content based cache for graphics resource management

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
MARK JOSELLI,ET AL.: "A new Physics Engine with Automatic Process Distribution bwtween GPU-CPU", 《SANDBOX SYMPOSIUM 2008》, 10 August 2008 (2008-08-10) *
MARK JOSELLI,ET AL.: "An architecture with automatic load balancing for real-time simulation and visualization systems", 《JOURNAL OF COMPUTATIONAL INTERDISCIPLINARY SCIENCES》, vol. 1, no. 3, 31 December 2010 (2010-12-31) *
MARK JOSELLI,ET AL.: "Automatic Dynamic Task Distribution between CPU and GPU for Real-Time Systems", 《2008 11TH IEEE INTERNATIONAL CONFERENCE ON COMPUTATIONAL SCIENCE AND ENGINEERING》, 31 December 2008 (2008-12-31) *
卢风顺等: "CPU/GPU协同并行计算研究综述", 《计算机科学》, vol. 38, no. 3, 31 March 2011 (2011-03-31) *
崔雪冰等: "基于通用计算的GPU-CPU协作计算模式研究", 《微电子学与计算机》, vol. 26, no. 8, 31 August 2009 (2009-08-31) *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103164839A (zh) * 2013-03-07 2013-06-19 华为技术有限公司 一种绘图方法、装置及终端
US9430810B2 (en) 2013-03-07 2016-08-30 Huawei Technologies Co., Ltd. Drawing method, apparatus, and terminal
CN103164839B (zh) * 2013-03-07 2019-06-21 华为技术有限公司 一种绘图方法、装置及终端
CN105677812A (zh) * 2015-12-31 2016-06-15 华为技术有限公司 一种数据查询方法及数据查询装置
CN106021399A (zh) * 2016-05-12 2016-10-12 网易(杭州)网络有限公司 查询请求消息的处理方法及装置
CN106021399B (zh) * 2016-05-12 2019-12-06 网易(杭州)网络有限公司 查询请求消息的处理方法及装置
CN110515972A (zh) * 2019-08-27 2019-11-29 陈东升 数据库快速查询系统及数据查询方法
CN114138449A (zh) * 2021-12-14 2022-03-04 河南省儿童医院郑州儿童医院 一种基于虚拟现实的康复训练系统
CN115757784A (zh) * 2022-11-21 2023-03-07 中科世通亨奇(北京)科技有限公司 基于标注模型和标签模板筛选的语料标注方法及装置

Also Published As

Publication number Publication date
CN102810133B (zh) 2015-08-12

Similar Documents

Publication Publication Date Title
CN106991011B (zh) 基于cpu多线程与gpu多粒度并行及协同优化的方法
CN102810133B (zh) 网络游戏中的射线查询方法和场景服务器
US10013731B2 (en) Maximizing parallel processing in graphics processors
KR101705581B1 (ko) 데이터 처리 장치 및 방법
US20080278509A1 (en) Graphics Processing Apparatus
CN110609730B (zh) 一种实现虚拟处理器间中断透传的方法及设备
KR20110015439A (ko) 로컬 및 글로벌 데이터 공유
US10810784B1 (en) Techniques for preloading textures in rendering graphics
US9030480B2 (en) Triggering performance event capture via pipelined state bundles
CN106462395A (zh) 多线程处理器架构中的线程等待
KR102616212B1 (ko) 다수의 컴퓨팅 코어들상의 데이터 드라이브 스케줄러
US11315303B2 (en) Graphics processing
US7999808B1 (en) Parallel processing system, method, and computer program product for executing node traversal or primitive intersection
CN110457238A (zh) 减缓GPU访存请求及指令访问cache时停顿的方法
US8072454B1 (en) Parallel processing system, method, and computer program product for selecting a ray tracing entity from a group of ray tracing entities for processing
CN115640052A (zh) 用于图形处理器中多核多流水线并行执行优化方法
JP6937759B2 (ja) データベース操作方法及び装置
US20130328876A1 (en) Building kd-trees in a depth first manner on heterogeneous computer systems
WO2011058657A1 (ja) 並列計算装置、並列計算方法、および並列計算プログラム
CN116529775A (zh) 用于光线追踪的合并函数调用的方法和装置
US20140331021A1 (en) Memory control apparatus and method
CN105378652A (zh) 线程共享资源分配方法及装置
Jergler et al. Grand challenge: real-time soccer analytics leveraging low-latency complex event processing
CN115994971A (zh) 图像渲染时间的计算方法及装置、存储介质、电子设备
Kim et al. Optimizing seam carving on multi-GPU systems for real-time content-aware image resizing

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant