CN116721187B - 基于场景切割的动画动态加卸载方法、装置、设备及介质 - Google Patents

基于场景切割的动画动态加卸载方法、装置、设备及介质 Download PDF

Info

Publication number
CN116721187B
CN116721187B CN202310710865.6A CN202310710865A CN116721187B CN 116721187 B CN116721187 B CN 116721187B CN 202310710865 A CN202310710865 A CN 202310710865A CN 116721187 B CN116721187 B CN 116721187B
Authority
CN
China
Prior art keywords
animation
quadtree
loading
scene
clipping
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.)
Active
Application number
CN202310710865.6A
Other languages
English (en)
Other versions
CN116721187A (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.)
Guangzhou Jishang Network Technology Co ltd
Original Assignee
Guangzhou Jishang Network 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 Guangzhou Jishang Network Technology Co ltd filed Critical Guangzhou Jishang Network Technology Co ltd
Priority to CN202310710865.6A priority Critical patent/CN116721187B/zh
Publication of CN116721187A publication Critical patent/CN116721187A/zh
Application granted granted Critical
Publication of CN116721187B publication Critical patent/CN116721187B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T13/00Animation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/005Tree description, e.g. octree, quadtree

Abstract

本发明涉及动画加卸载技术领域,尤其涉及基于场景切割的动画动态加卸载方法、装置、设备及介质,所述方法具体包括:获得动画场景,将动画场景进行切割获得动画场景区块集合,根据四叉树存储所述动画场景区块集合,所述动画场景区块集合包括多个动画场景区块;获取摄像机的视椎体,通过所述四叉树对所述动画场景区块集合中进出所述视椎体内的动画场景区块生成对应的动画加载请求或动画卸载请求。本发明通过使用四叉树结构,可以高效地处理物件和地表的空间位置归属,提高节点检测效率。

Description

基于场景切割的动画动态加卸载方法、装置、设备及介质
技术领域
本发明涉及动画加卸载技术领域,尤其涉及基于场景切割的动画动态加卸载方法、装置、设备及介质。
背景技术
在动画场景加载中,传统的做法往往是一次性加载所有物件到内存中,但是在大场景应用中,这种做法通常会导致内存消耗大,特别是当物件数量庞大且种类繁杂时,会占用大量的系统内存资源,影响整体的性能和稳定性,加载过程会变得非常耗时,影响用户体验和游戏流畅度,还限制了场景的动态性和可扩展性,无法满足在游戏中动态生成、删除或切换物件的需求。同时,在加载所有物件到内存后,需要进行频繁的内存访问和搜索操作,由于所有物件都存储在一起,无法进行有效的空间位置归属和筛选,导致搜索和遍历的效率较低,影响运行时的性能。
发明内容
本发明的目的在于提供基于场景切割的动画动态加卸载方法、装置、设备及介质,通过使用四叉树结构,可以高效地处理物件和地表的空间位置归属,并对不同类型的动画场合区块采用合适的检测手段,提高节点检测效率,以解决上述现有问题的至少之一。
本发明提供了基于场景切割的动画动态加卸载方法,所述方法具体包括:
获得动画场景,将动画场景进行切割获得动画场景区块集合,根据四叉树存储所述动画场景区块集合,所述动画场景区块集合包括多个动画场景区块;
获取摄像机的视椎体,通过所述四叉树对所述动画场景区块集合中进出所述视椎体内的动画场景区块生成对应的动画加载请求或动画卸载请求;
设置动画加载计数器和动画卸载计数器,根据所述动画加载计数器对超过动画加载阈值的动画加载请求通过第一异步消息队列实现延后处理,根据所述动画卸载计数器对超过动画卸载阈值的动画卸载请求通过第二异步消息队列实现延后处理。
进一步的,所述根据四叉树存储所述动画场景区块集合,具体包括:
设置四叉树实体类,在所述四叉树实体类中根据构造函数接收第一参数和第二参数,创建根节点,所述第一参数为所述动画场景或动画场景区块的边界范围参数,所述第二参数为所述动画场景或动画场景区块的容量阈值参数;
在所述四叉树实体类中根据划分函数划分所述根节点,获得四个子节点;
根据所述构造函数接收四个子节点的所述第一参数和所述第二参数,基于所述第一参数和所述第二参数通过所述划分函数对四个子节点进行递归划分,直到达到最细粒度的子节点;
在所述四叉树实体类中根据插入函数将所述动画场景区块集合中每个动画场景区块基于二维坐标关系插入到对应的子节点中。
进一步的,所述获取摄像机的视椎体,通过所述四叉树对所述动画场景区块集合中进出所述视椎体内的动画场景区块生成对应的动画加载请求或动画卸载请求,具体包括:
获取摄像机的视锥体参数,基于所述视椎体参数通过投影矩阵获得所述摄像机的视椎体;
从所述四叉树的根节点开始检测所述四叉树的根节点及根节点之下的每个子节点是否处于所述摄像机的视椎体内,从而确定进入所述视椎体的动画场景区块和离开所述视椎体的动画场景区块;
当所述四叉树的子节点对应的动画场景区块为平面时,通过包围盒相交测试或包围球相交测试确定所述四叉树的子节点对应的动画场景区块是否处于所述视椎体内;
当所述四叉树的子节点对应的动画场景区块为像素点时,基于所述投影矩阵获得所述视椎体的六个裁剪面的平面参数,通过所述平面参数确定六个裁剪面的位置关系公式,再根据所述位置关系公式确定所述四叉树的子节点对应的动画场景区块是否处于所述视椎体内;
对进入所述视椎体的动画场景区块生成动画加载请求,对离开所述视椎体的动画场景区块生成动画卸载请求。
更进一步的,所述基于所述投影矩阵获得所述视椎体的六个裁剪面的平面参数,通过所述平面参数确定六个裁剪面的位置关系公式,再根据所述位置关系公式确定所述四叉树的子节点对应的动画场景区块是否处于所述视椎体内,具体包括:
根据所述投影矩阵获得所述视椎体的近裁剪面、远裁剪面、左裁剪面、右裁剪面、上裁剪面和下裁剪面的平面参数;
根据所述视椎体的近裁剪面、远裁剪面、左裁剪面、右裁剪面、上裁剪面和下裁剪面的平面参数分别获得第一位置关系公式、第二位置关系公式、第三位置关系公式、第四位置关系公式、第五位置关系公式和第六位置关系公式;
所述第一位置关系公式满足A1=P[3][1]+P[4][1],B1=P[3][2]+P[4][2],C1=P[3][3]+P[4][3],D1=P[3][4]+P[4][4],其中,d1表示四叉树的节点到近裁剪面的距离,A1、B1、C1和D1表示近裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第二位置关系公式满足A2=P[3][1]-P[4][1],B2=P[3][2]-P[4][2],C2=P[3][3]-P[4][3],D2=P[3][4]-P[4][4],其中,d2表示四叉树的节点到远裁剪面的距离,A2、B2、C2和D2表示远裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第三位置关系公式满足A3=P[4][1]+P[1][1],B3=P[4][2]+P[1][2],C3=P[4][3]+P[1][3],D3=P[4][4]+P[1][4],其中,d3表示四叉树的节点到左裁剪面的距离,A3、B3、C3和D3表示左裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第四位置关系公式满足A4=P[4][1]-P[1][1],B4=P[4][2]-P[1][2],C4=P[4][3]-P[1][3],D4=P[4][4]-P[1][4],其中,d4表示四叉树的节点到右裁剪面的距离,A4、B4、C4和D4表示右裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第五位置关系公式满足A5=P[4][1]+P[2][1],B5=P[4][2]+P[2][2],C5=P[4][3]+P[2][3],D5=P[4][4]+P[2][4],其中,d5表示四叉树的节点到上裁剪面的距离,A5、B5、C5和D5表示上裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第六位置关系公式满足A6=P[4][1]-P[2][1],B6=P[4][2]-P[2][2],C6=P[4][3]-P[2][3],D6=P[4][4]-P[2][4],其中,d6表示四叉树的节点到下裁剪面的距离,A6、B6、C6和D6表示下裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
根据d1、d2、d3、d4、d5和d6的结果确定进入所述视椎体的动画场景区块和离开所述视椎体的动画场景区块。
更进一步的,所述根据d1、d2、d3、d4、d5和d6的结果确定进入所述视椎体的动画场景区块和离开所述视椎体的动画场景区块,具体包括:
当d1、d2、d3、d4、d5和d6同时大于0时,则确定四叉树的子节点对应的动画场景区块位于所述视椎体内;
当d1、d2、d3、d4、d5和d6中任一小于0时,则确定四叉树的子节点对应的动画场景区块位于所述视椎体外;
当d1、d2、d3、d4、d5和d6中任一等于0时,则确定四叉树的子节点对应的动画场景区块位于所述视椎体的任一裁剪面上,根据场景效果信息确定位于所述视椎体的任一裁剪面上的节点对应的动画场景区块是否进行动画加载。
更进一步的,所述根据场景效果信息确定位于所述视椎体的任一裁剪面上的节点对应的动画场景区块是否进行动画加载,具体包括:
当场景效果信息为远景场景动画时,判断位于所述视椎体的任一裁剪面上的第一节点对应的动画场景区块是否属于远景场景动画,若判断为是,则不对所述第一节点对应的动画场景区块进行动画加载,否则进行动画加载;
当场景效果信息为简化渲染动画时,判断位于所述视椎体的任一裁剪面上的第二节点对应的动画场景区块是否属于简化渲染动画,若判断为是,则不对所述第二节点对应的动画场景区块进行动画加载,否则进行动画加载;
当场景效果信息为模拟镜面反射动画时,判断位于所述视椎体的任一裁剪面上的第三节点对应的动画场景区块是否属于模拟镜面反射动画,若判断为是,则对所述第三节点对应的动画场景区块进行动画加载,否则不进行动画加载;
当场景效果信息为立体渲染动画时,判断位于所述视椎体的任一裁剪面上的第四节点对应的动画场景区块是否属于立体渲染动画,若判断为是,则对所述第四节点对应的动画场景区块进行动画加载,否则不进行动画加载。
进一步的,所述根据所述动画加载计数器对超过动画加载阈值的动画加载请求通过第一异步消息队列实现延后处理,根据所述动画卸载计数器对超过动画卸载阈值的动画卸载请求通过第二异步消息队列实现延后处理,具体包括:
根据asyncio.Queue函数创建第一异步消息队列和第二异步消息队列;
根据所述动画加载计数器确记录动画加载请求的数量,当所述动画加载请求的数量超过动画加载阈值时,将多余的动画加载请求封装为第一异步消息并根据Queue.put()函数添加到所述第一异步消息队列;
根据所述动画卸载计数器确记录动画卸载请求的数量,当所述动画卸载请求的数量超过动画卸载阈值时,将多余的动画卸载请求封装为第二异步消息并根据Queue.put()函数添加到所述第二异步消息队列;
当所述动画加载请求的数量低于动画加载阈值时,根据Queue.get()函数从所述第一异步消息队列中获取所述第一异步消息中的动画加载请求并进行动画加载;
当所述动画卸载请求的数量低于动画卸载阈值时,根据Queue.get()函数从所述第二异步消息队列中获取所述第二异步消息中的动画卸载请求并进行动画卸载。
本发明还提供了基于场景切割的动画动态加卸载装置,所述装置具体包括:
场景切割模块,用于获得动画场景,将动画场景进行切割获得动画场景区块集合,根据四叉树存储所述动画场景区块集合,所述动画场景区块集合包括多个动画场景区块;
第一处理模块,用于获取摄像机的视椎体,通过所述四叉树对所述动画场景区块集合中进出所述视椎体内的动画场景区块生成对应的动画加载请求或动画卸载请求;
第二处理模块,用于设置动画加载计数器和动画卸载计数器,根据所述动画加载计数器对超过动画加载阈值的动画加载请求通过第一异步消息队列实现延后处理,根据所述动画卸载计数器对超过动画卸载阈值的动画卸载请求通过第二异步消息队列实现延后处理。
本发明还提供了一种计算机设备,包括:存储器和处理器及存储在存储器上的计算机程序,当所述计算机程序在处理器上被执行时,实现如上述方法中任一项所述的基于场景切割的动画动态加卸载方法。
本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,实现如上述方法中任一项所述的基于场景切割的动画动态加卸载方法。
与现有技术相比,本发明具有以下技术效果的至少之一:
1、通过使用四叉树结构,可以高效地处理物件和地表的空间位置归属。通过逐层细分场景,并将物件和地表按照其位置归属到对应的叶子节点中,可以有效减少搜索和遍历的时间复杂度,提高处理效率,节省内存。
2、通过判断查询当前节点与裁剪面的关系,在查询过程中可以有效地跳过位于视椎体之外的节点,减少不必要的计算和遍历,提高检测的效率。
3、利用异步消息队列实现对超出处理请求阈值的动态加载和动态卸载的延后处理,提高系统的并发处理能力。
附图说明
是为了更清楚地说明本申请实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的基于场景切割的动画动态加卸载方法的流程示意图;
图2是本发明实施例提供的基于场景切割的动画动态加卸载装置的结构示意图;
图3是本发明实施例提供的一种计算机设备。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本申请说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
在动画场景加载中,传统的做法往往是一次性加载所有物件到内存中,但是在大场景应用中,这种做法通常会导致内存消耗大,特别是当物件数量庞大且种类繁杂时,会占用大量的系统内存资源,影响整体的性能和稳定性,加载过程会变得非常耗时,影响用户体验和游戏流畅度,还限制了场景的动态性和可扩展性,无法满足在游戏中动态生成、删除或切换物件的需求。同时,在加载所有物件到内存后,需要进行频繁的内存访问和搜索操作,由于所有物件都存储在一起,无法进行有效的空间位置归属和筛选,导致搜索和遍历的效率较低,影响运行时的性能。
参照图1,本发明实施例提供了基于场景切割的动画动态加卸载方法,所述方法具体包括:
S101:获得动画场景,将动画场景进行切割获得动画场景区块集合,根据四叉树存储所述动画场景区块集合,所述动画场景区块集合包括多个动画场景区块。
该实施例中,所有所述动画场景区块组成所述动画场景。
在一些实施例中,所述根据四叉树存储所述动画场景区块集合,具体包括:
设置四叉树实体类,在所述四叉树实体类中根据构造函数接收第一参数和第二参数,创建根节点,所述第一参数为所述动画场景或动画场景区块的边界范围参数,所述第二参数为所述动画场景或动画场景区块的容量阈值参数;
在所述四叉树实体类中根据划分函数划分所述根节点,获得四个子节点;
根据所述构造函数接收四个子节点的所述第一参数和所述第二参数,基于所述第一参数和所述第二参数通过所述划分函数对四个子节点进行递归划分,直到达到最细粒度的子节点;
在所述四叉树实体类中根据插入函数将所述动画场景区块集合中每个动画场景区块基于二维坐标关系插入到对应的子节点中。
该实施例中,首先将整个动画场景作为四叉树的一个根节点,根节点包含整个场景的范围,然后再把根节点划分为四个子节点,每个子节点代表一个动画场景区块,通过将场景逐层细分,对每个子节点进行递归划分,直到达到最细粒度的叶子节点,该最细粒度的叶子节点可以对应像素级别的动画场景区块,最后将动画场景中的物件和地标根据其空间位置归属到对应的四叉树叶子节点中。
第一参数为所述动画场景或动画场景区块的边界范围参数,通过确定第一参数的范围,可以根据当前节点的第一参数确定下级四个子节点的边界划分范围;所述第二参数为所述动画场景或动画场景区块的容量阈值参数,第二参数用于判断当前节点的容量是否超过阈值,若判断为是,则继续细分。
S102:获取摄像机的视椎体,通过所述四叉树对所述动画场景区块集合中进出所述视椎体内的动画场景区块生成对应的动画加载请求或动画卸载请求。
该实施例中,通过所述四叉树对所述动画场景区块集合中进入所述视椎体内的动画场景区块生成对应的动画加载请求,通过所述四叉树对所述动画场景区块集合中退出所述视椎体内的动画场景区块生成对应的动画卸载请求。
在一些实施例中,所述获取摄像机的视椎体,通过所述四叉树对所述动画场景区块集合中进出所述视椎体内的动画场景区块生成对应的动画加载请求或动画卸载请求,具体包括:
获取摄像机的视锥体参数,基于所述视椎体参数通过投影矩阵获得所述摄像机的视椎体;
从所述四叉树的根节点开始检测所述四叉树的根节点及根节点之下的每个子节点是否处于所述摄像机的视椎体内,从而确定进入所述视椎体的动画场景区块和离开所述视椎体的动画场景区块;
当所述四叉树的子节点对应的动画场景区块为平面时,通过包围盒相交测试或包围球相交测试确定所述四叉树的子节点对应的动画场景区块是否处于所述视椎体内;
当所述四叉树的子节点对应的动画场景区块为像素点时,基于所述投影矩阵获得所述视椎体的六个裁剪面的平面参数,通过所述平面参数确定六个裁剪面的位置关系公式,再根据所述位置关系公式确定所述四叉树的子节点对应的动画场景区块是否处于所述视椎体内;
对进入所述视椎体的动画场景区块生成动画加载请求,对离开所述视椎体的动画场景区块生成动画卸载请求。
该实施例中,四叉树的最小叶子节点存储作为像素点的动画场景区块,四叉树的最小叶子节点之外的节点存储作为平面的动画场景区块,在存储平面的四叉树的节点内,可以使用包围盒相交测试或包围球相交测试判断当前节点是否位于视椎体内且相交,如果当前节点位于视椎体内且相交,则还需要往下级节点继续检测,以确定当前节点位于视椎体内的部分以及不位于视椎体内的部分;如果当前节点位于视椎体内且不相交,则不需要往下级节点继续检测;如果当前节点完全不位于视椎体内,则认为是不可见的,可以抛弃,不需要往下级节点继续检测。
当一直往下级节点检测,直到四叉树的最小叶子节点时,则需要确定视椎体的六个裁剪面和最小叶子节点之间的位置关系,从而判断该最小叶子结点是否处于视椎体内。
在一些实施例中,所述基于所述投影矩阵获得所述视椎体的六个裁剪面的平面参数,通过所述平面参数确定六个裁剪面的位置关系公式,再根据所述位置关系公式确定所述四叉树的子节点对应的动画场景区块是否处于所述视椎体内,具体包括:
根据所述投影矩阵获得所述视椎体的近裁剪面、远裁剪面、左裁剪面、右裁剪面、上裁剪面和下裁剪面的平面参数;
根据所述视椎体的近裁剪面、远裁剪面、左裁剪面、右裁剪面、上裁剪面和下裁剪面的平面参数分别获得第一位置关系公式、第二位置关系公式、第三位置关系公式、第四位置关系公式、第五位置关系公式和第六位置关系公式;
所述第一位置关系公式满足A1=P[3][1]+P[4][1],B1=P[3][2]+P[4][2],C1=P[3][3]+P[4][3],D1=P[3][4]+P[4][4],其中,d1表示四叉树的节点到近裁剪面的距离,A1、B1、C1和D1表示近裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第二位置关系公式满足A2=P[3][1]-P[4][1],B2=P[3][2]-P[4][2],C2=P[3][3]-P[4][3],D2=P[3][4]-P[4][4],其中,d2表示四叉树的节点到远裁剪面的距离,A2、B2、C2和D2表示远裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第三位置关系公式满足A3=P[4][1]+P[1][1],B3=P[4][2]+P[1][2],C3=P[4][3]+P[1][3],D3=P[4][4]+P[1][4],其中,d3表示四叉树的节点到左裁剪面的距离,A3、B3、C3和D3表示左裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第四位置关系公式满足A4=P[4][1]-P[1][1],B4=P[4][2]-P[1][2],C4=P[4][3]-P[1][3],D4=P[4][4]-P[1][4],其中,d4表示四叉树的节点到右裁剪面的距离,A4、B4、C4和D4表示右裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第五位置关系公式满足A5=P[4][1]+P[2][1],B5=P[4][2]+P[2][2],C5=P[4][3]+P[2][3],D5=P[4][4]+P[2][4],其中,d5表示四叉树的节点到上裁剪面的距离,A5、B5、C5和D5表示上裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第六位置关系公式满足A6=P[4][1]-P[2][1],B6=P[4][2]-P[2][2],C6=P[4][3]-P[2][3],D6=P[4][4]-P[2][4],其中,d6表示四叉树的节点到下裁剪面的距离,A6、B6、C6和D6表示下裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
根据d1、d2、d3、d4、d5和d6的结果确定进入所述视椎体的动画场景区块和离开所述视椎体的动画场景区块。
具体的,所述根据d1、d2、d3、d4、d5和d6的结果确定进入所述视椎体的动画场景区块和离开所述视椎体的动画场景区块,具体包括:
当d1、d2、d3、d4、d5和d6同时大于0时,则确定四叉树的子节点对应的动画场景区块位于所述视椎体内;
当d1、d2、d3、d4、d5和d6中任一小于0时,则确定四叉树的子节点对应的动画场景区块位于所述视椎体外;
当d1、d2、d3、d4、d5和d6中任一等于0时,则确定四叉树的子节点对应的动画场景区块位于所述视椎体的任一裁剪面上,根据场景效果信息确定位于所述视椎体的任一裁剪面上的节点对应的动画场景区块是否进行动画加载。
该实施例中,六个位置关系公式都对应最原始的位置关系公式其中,六个裁剪面的A、B、C和D平面参数均不同,需要通过其与投影矩阵的关系获得,/>则是每个裁剪面的参数向量的长度,通过将平面公式以及参数向量的长度两者相除,可以确保得到标准化后的参数向量。
当将最小叶子节点的像素坐标代入计算时,如果d>0,则说明该最小叶子节点在某个裁剪面的正面,如果d<0,则说明该最小叶子节点在某个裁剪面的背面,如果d=0,则说明该最小叶子节点在某个裁剪面上。
因此,当d1、d2、d3、d4、d5和d6同时大于0时,说明该最小叶子节点位于视椎体的六个裁剪面的正面,可以确定其完全处于视椎体内;当d1、d2、d3、d4、d5和d6中任一小于0时,即该最小叶子节点处于任一裁剪面的背面时,说明其不位于视椎体内;当d1、d2、d3、d4、d5和d6中任一等于0时,即该最小叶子结点处于任一裁剪面上时,则需要根据具体的应用场景来确定是否需要对其进行动画加载。
在一些实施例中,所述根据场景效果信息确定位于所述视椎体的任一裁剪面上的节点对应的动画场景区块是否进行动画加载,具体包括:
当场景效果信息为远景场景动画时,判断位于所述视椎体的任一裁剪面上的第一节点对应的动画场景区块是否属于远景场景动画,若判断为是,则不对所述第一节点对应的动画场景区块进行动画加载,否则进行动画加载;
当场景效果信息为简化渲染动画时,判断位于所述视椎体的任一裁剪面上的第二节点对应的动画场景区块是否属于简化渲染动画,若判断为是,则不对所述第二节点对应的动画场景区块进行动画加载,否则进行动画加载;
当场景效果信息为模拟镜面反射动画时,判断位于所述视椎体的任一裁剪面上的第三节点对应的动画场景区块是否属于模拟镜面反射动画,若判断为是,则对所述第三节点对应的动画场景区块进行动画加载,否则不进行动画加载;
当场景效果信息为立体渲染动画时,判断位于所述视椎体的任一裁剪面上的第四节点对应的动画场景区块是否属于立体渲染动画,若判断为是,则对所述第四节点对应的动画场景区块进行动画加载,否则不进行动画加载。
该实施例中,当位于任一裁剪面上的最小叶子节点属于远景场景的一部分时,在视觉上为了呈现给观察者一种远景真实感,因此可以选择不加载这些像素,以节省渲染资源。当位于任一裁剪面上的最小叶子节点属于简化渲染动画的一部分时,这种动画风格对细节和真实性的要求较低,更注重表达主题或情感,因此可以简化渲染过程,不加载该最小叶子节点。当位于任一裁剪面上的最小叶子节点属于模拟镜面反射动画的一部分时,比如镜面或水面等动画场景的动画加载中,可以加载最小叶子节点来实现反射效果,甚至在水面场景通过动画加载该最小叶子节点以实现水的透明和波纹效果。当位于任一裁剪面上的最小叶子节点属于立体渲染动画的一部分时,可以通过加载该最小叶子节点来提供深度感,使动画场景看起来更真实且具有立体感,比如在一个飞行游戏中,该最小叶子节点为地面上的像素,可以通过加载该最小叶子节点来让玩家感受到地形的高度和远近关系。
S103:设置动画加载计数器和动画卸载计数器,根据所述动画加载计数器对超过动画加载阈值的动画加载请求通过第一异步消息队列实现延后处理,根据所述动画卸载计数器对超过动画卸载阈值的动画卸载请求通过第二异步消息队列实现延后处理。
在一些实施例中,所述根据所述动画加载计数器对超过动画加载阈值的动画加载请求通过第一异步消息队列实现延后处理,根据所述动画卸载计数器对超过动画卸载阈值的动画卸载请求通过第二异步消息队列实现延后处理,具体包括:
根据asyncio.Queue函数创建第一异步消息队列和第二异步消息队列;
根据所述动画加载计数器确记录动画加载请求的数量,当所述动画加载请求的数量超过动画加载阈值时,将多余的动画加载请求封装为第一异步消息并根据Queue.put()函数添加到所述第一异步消息队列;
根据所述动画卸载计数器确记录动画卸载请求的数量,当所述动画卸载请求的数量超过动画卸载阈值时,将多余的动画卸载请求封装为第二异步消息并根据Queue.put()函数添加到所述第二异步消息队列;
当所述动画加载请求的数量低于动画加载阈值时,根据Queue.get()函数从所述第一异步消息队列中获取所述第一异步消息中的动画加载请求并进行动画加载;
当所述动画卸载请求的数量低于动画卸载阈值时,根据Queue.get()函数从所述第二异步消息队列中获取所述第二异步消息中的动画卸载请求并进行动画卸载。
该实施例中,动画加载阈值和动画卸载阈值可以根据游戏类型与所加载的物件的复杂度来进行设置,在设置动画加载计数器和动画卸载计数器时,比如可以分别设置一个Int(loadCount)和Int(unloadCount),每加载一个动画场景区块就loadCount+1,每卸载一个动画场景区块就unloadCount+1,当超过阈值时则封装为异步消息放到异步消息队列中,等到出现空闲位置时又从异步消息队列中取出来进行动画加载或动画卸载。通过上述设置,以避免在动画加载或动画卸载的过程中,同时动画加载或动画卸载过多物件而导致卡顿。
参照图2,本发明实施例还提供了基于场景切割的动画动态加卸载装置2,所述装置2具体包括:
场景切割模块201,用于获得动画场景,将动画场景进行切割获得动画场景区块集合,根据四叉树存储所述动画场景区块集合,所述动画场景区块集合包括多个动画场景区块;
第一处理模块202,用于获取摄像机的视椎体,通过所述四叉树对所述动画场景区块集合中进出所述视椎体内的动画场景区块生成对应的动画加载请求或动画卸载请求;
第二处理模块203,用于设置动画加载计数器和动画卸载计数器,根据所述动画加载计数器对超过动画加载阈值的动画加载请求通过第一异步消息队列实现延后处理,根据所述动画卸载计数器对超过动画卸载阈值的动画卸载请求通过第二异步消息队列实现延后处理。
可以理解的是,如图1所示的基于场景切割的动画动态加卸载方法实施例中的内容均适用于本基于场景切割的动画动态加卸载装置实施例中,本基于场景切割的动画动态加卸载装置实施例所具体实现的功能与如图1所示的基于场景切割的动画动态加卸载方法实施例相同,并且达到的有益效果与如图1所示的基于场景切割的动画动态加卸载方法实施例所达到的有益效果也相同。
需要说明的是,上述装置之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
参照图3,本发明实施例还提供了一种计算机设备3,包括:存储器302和处理器301及存储在存储器302上的计算机程序303,当所述计算机程序303在处理器301上被执行时,实现如上述方法中任一项所述的基于场景切割的动画动态加卸载方法。
所述计算机设备3可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该计算机设备3可包括,但不仅限于,处理器301、存储器302。本领域技术人员可以理解,图3仅仅是计算机设备3的举例,并不构成对计算机设备3的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
所称处理器301可以是中央处理单元(Central Processing Unit,CPU),该处理器301还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器302在一些实施例中可以是所述计算机设备3的内部存储单元,例如计算机设备3的硬盘或内存。所述存储器302在另一些实施例中也可以是所述计算机设备3的外部存储设备,例如所述计算机设备3上配备的插接式硬盘,智能存储卡(Smart MediaCard,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器302还可以既包括所述计算机设备3的内部存储单元也包括外部存储设备。所述存储器302用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器302还可以用于暂时地存储已经输出或者将要输出的数据。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,实现如上述方法中任一项所述的基于场景切割的动画动态加卸载方法。
该实施例中,所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所公开的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

Claims (9)

1.基于场景切割的动画动态加卸载方法,其特征在于,所述方法具体包括:
获得动画场景,将动画场景进行切割获得动画场景区块集合,根据四叉树存储所述动画场景区块集合,所述动画场景区块集合包括多个动画场景区块;
获取摄像机的视椎体,通过所述四叉树对所述动画场景区块集合中进出所述视椎体内的动画场景区块生成对应的动画加载请求或动画卸载请求;
其中,所述获取摄像机的视椎体,通过所述四叉树对所述动画场景区块集合中进出所述视椎体内的动画场景区块生成对应的动画加载请求或动画卸载请求,具体包括:
获取摄像机的视锥体参数,基于所述视椎体参数通过投影矩阵获得所述摄像机的视椎体;
从所述四叉树的根节点开始检测所述四叉树的根节点及根节点之下的每个子节点是否处于所述摄像机的视椎体内,从而确定进入所述视椎体的动画场景区块和离开所述视椎体的动画场景区块;
当所述四叉树的子节点对应的动画场景区块为平面时,通过包围盒相交测试或包围球相交测试确定所述四叉树的子节点对应的动画场景区块是否处于所述视椎体内;
当所述四叉树的子节点对应的动画场景区块为像素点时,基于所述投影矩阵获得所述视椎体的六个裁剪面的平面参数,通过所述平面参数确定六个裁剪面的位置关系公式,再根据所述位置关系公式确定所述四叉树的子节点对应的动画场景区块是否处于所述视椎体内;
对进入所述视椎体的动画场景区块生成动画加载请求,对离开所述视椎体的动画场景区块生成动画卸载请求;
其中,所述基于所述投影矩阵获得所述视椎体的六个裁剪面的平面参数,通过所述平面参数确定六个裁剪面的位置关系公式,再根据所述位置关系公式确定所述四叉树的子节点对应的动画场景区块是否处于所述视椎体内,具体包括:
根据所述投影矩阵获得所述视椎体的近裁剪面、远裁剪面、左裁剪面、右裁剪面、上裁剪面和下裁剪面的平面参数;
根据所述视椎体的近裁剪面、远裁剪面、左裁剪面、右裁剪面、上裁剪面和下裁剪面的平面参数分别获得第一位置关系公式、第二位置关系公式、第三位置关系公式、第四位置关系公式、第五位置关系公式和第六位置关系公式;
设置动画加载计数器和动画卸载计数器,根据所述动画加载计数器对超过动画加载阈值的动画加载请求通过第一异步消息队列实现延后处理,根据所述动画卸载计数器对超过动画卸载阈值的动画卸载请求通过第二异步消息队列实现延后处理。
2.根据权利要求1所述的方法,其特征在于,所述根据四叉树存储所述动画场景区块集合,具体包括:
设置四叉树实体类,在所述四叉树实体类中根据构造函数接收第一参数和第二参数,创建根节点,所述第一参数为所述动画场景或动画场景区块的边界范围参数,所述第二参数为所述动画场景或动画场景区块的容量阈值参数;
在所述四叉树实体类中根据划分函数划分所述根节点,获得四个子节点;
根据所述构造函数接收四个子节点的所述第一参数和所述第二参数,基于所述第一参数和所述第二参数通过所述划分函数对四个子节点进行递归划分,直到达到最细粒度的子节点;
在所述四叉树实体类中根据插入函数将所述动画场景区块集合中每个动画场景区块基于二维坐标关系插入到对应的子节点中。
3.根据权利要求1所述的方法,其特征在于,
所述第一位置关系公式满足
A1=P[3][1]+P[4][1],B1=P[3][2]+P[4][2],C1=P[3][3]+P[4][3],D1=P[3][4]+P[4][4],其中,
d1表示四叉树的节点到近裁剪面的距离,A1、B1、C1和D1表示近裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第二位置关系公式满足
A2=P[3][1]-P[4][1],B2=P[3][2]-P[4][2],C2=P[3][3]-P[4][3],D2=P[3][4]-P[4][4],其中,
d2表示四叉树的节点到远裁剪面的距离,A2、B2、C2和D2表示远裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第三位置关系公式满足
A3=P[4][1]+P[1][1],B3=P[4][2]+P[1][2],C3=P[4][3]+P[1][3],D3=P[4][4]+P[1][4],其中,
d3表示四叉树的节点到左裁剪面的距离,A3、B3、C3和D3表示左裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第四位置关系公式满足A4=P[4][1]-P[1][1],B4=P[4][2]-P[1][2],C4=P[4][3]-P[1][3],D4=P[4][4]-P[1][4],其中,d4表示四叉树的节点到右裁剪面的距离,A4、B4、C4和D4表示右裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第五位置关系公式满足A5=P[4][1]+P[2][1],B5=P[4][2]+P[2][2],C5=P[4][3]+P[2][3],D5=P[4][4]+P[2][4],其中,d5表示四叉树的节点到上裁剪面的距离,A5、B5、C5和D5表示上裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
所述第六位置关系公式满足A6=P[4][1]-P[2][1],B6=P[4][2]-P[2][2],C6=P[4][3]-P[2][3],D6=P[4][4]-P[2][4],其中,d6表示四叉树的节点到下裁剪面的距离,A6、B6、C6和D6表示下裁剪面的平面参数,x、y和z表示四叉树的子节点的像素坐标,P表示投影矩阵,P[i][j]表示投影矩阵的第i行第j列;
根据d1、d2、d3、d4、d5和d6的结果确定进入所述视椎体的动画场景区块和离开所述视椎体的动画场景区块。
4.根据权利要求3所述的方法,其特征在于,所述根据d1、d2、d3、d4、d5和d6的结果确定进入所述视椎体的动画场景区块和离开所述视椎体的动画场景区块,具体包括:
当d1、d2、d3、d4、d5和d6同时大于0时,则确定四叉树的子节点对应的动画场景区块位于所述视椎体内;
当d1、d2、d3、d4、d5和d6中任一小于0时,则确定四叉树的子节点对应的动画场景区块位于所述视椎体外;
当d1、d2、d3、d4、d5和d6中任一等于0时,则确定四叉树的子节点对应的动画场景区块位于所述视椎体的任一裁剪面上,根据场景效果信息确定位于所述视椎体的任一裁剪面上的节点对应的动画场景区块是否进行动画加载。
5.根据权利要求4所述的方法,其特征在于,所述根据场景效果信息确定位于所述视椎体的任一裁剪面上的节点对应的动画场景区块是否进行动画加载,具体包括:
当场景效果信息为远景场景动画时,判断位于所述视椎体的任一裁剪面上的第一节点对应的动画场景区块是否属于远景场景动画,若判断为是,则不对所述第一节点对应的动画场景区块进行动画加载,否则进行动画加载;
当场景效果信息为简化渲染动画时,判断位于所述视椎体的任一裁剪面上的第二节点对应的动画场景区块是否属于简化渲染动画,若判断为是,则不对所述第二节点对应的动画场景区块进行动画加载,否则进行动画加载;
当场景效果信息为模拟镜面反射动画时,判断位于所述视椎体的任一裁剪面上的第三节点对应的动画场景区块是否属于模拟镜面反射动画,若判断为是,则对所述第三节点对应的动画场景区块进行动画加载,否则不进行动画加载;
当场景效果信息为立体渲染动画时,判断位于所述视椎体的任一裁剪面上的第四节点对应的动画场景区块是否属于立体渲染动画,若判断为是,则对所述第四节点对应的动画场景区块进行动画加载,否则不进行动画加载。
6.根据权利要求1所述的方法,其特征在于,所述根据所述动画加载计数器对超过动画加载阈值的动画加载请求通过第一异步消息队列实现延后处理,根据所述动画卸载计数器对超过动画卸载阈值的动画卸载请求通过第二异步消息队列实现延后处理,具体包括:
根据asyncio.Queue函数创建第一异步消息队列和第二异步消息队列;
根据所述动画加载计数器记录动画加载请求的数量,当所述动画加载请求的数量超过动画加载阈值时,将多余的动画加载请求封装为第一异步消息并根据Queue.put()函数添加到所述第一异步消息队列;
根据所述动画卸载计数器记录动画卸载请求的数量,当所述动画卸载请求的数量超过动画卸载阈值时,将多余的动画卸载请求封装为第二异步消息并根据Queue.put()函数添加到所述第二异步消息队列;
当所述动画加载请求的数量低于动画加载阈值时,根据Queue.get()函数从所述第一异步消息队列中获取所述第一异步消息中的动画加载请求并进行动画加载;
当所述动画卸载请求的数量低于动画卸载阈值时,根据Queue.get()函数从所述第二异步消息队列中获取所述第二异步消息中的动画卸载请求并进行动画卸载。
7.基于场景切割的动画动态加卸载装置,其特征在于,所述装置具体包括:
场景切割模块,用于获得动画场景,将动画场景进行切割获得动画场景区块集合,根据四叉树存储所述动画场景区块集合,所述动画场景区块集合包括多个动画场景区块;
第一处理模块,用于获取摄像机的视椎体,通过所述四叉树对所述动画场景区块集合中进出所述视椎体内的动画场景区块生成对应的动画加载请求或动画卸载请求;
其中,所述获取摄像机的视椎体,通过所述四叉树对所述动画场景区块集合中进出所述视椎体内的动画场景区块生成对应的动画加载请求或动画卸载请求,具体包括:
获取摄像机的视锥体参数,基于所述视椎体参数通过投影矩阵获得所述摄像机的视椎体;
从所述四叉树的根节点开始检测所述四叉树的根节点及根节点之下的每个子节点是否处于所述摄像机的视椎体内,从而确定进入所述视椎体的动画场景区块和离开所述视椎体的动画场景区块;
当所述四叉树的子节点对应的动画场景区块为平面时,通过包围盒相交测试或包围球相交测试确定所述四叉树的子节点对应的动画场景区块是否处于所述视椎体内;
当所述四叉树的子节点对应的动画场景区块为像素点时,基于所述投影矩阵获得所述视椎体的六个裁剪面的平面参数,通过所述平面参数确定六个裁剪面的位置关系公式,再根据所述位置关系公式确定所述四叉树的子节点对应的动画场景区块是否处于所述视椎体内;
对进入所述视椎体的动画场景区块生成动画加载请求,对离开所述视椎体的动画场景区块生成动画卸载请求;
其中,所述基于所述投影矩阵获得所述视椎体的六个裁剪面的平面参数,通过所述平面参数确定六个裁剪面的位置关系公式,再根据所述位置关系公式确定所述四叉树的子节点对应的动画场景区块是否处于所述视椎体内,具体包括:
根据所述投影矩阵获得所述视椎体的近裁剪面、远裁剪面、左裁剪面、右裁剪面、上裁剪面和下裁剪面的平面参数;
根据所述视椎体的近裁剪面、远裁剪面、左裁剪面、右裁剪面、上裁剪面和下裁剪面的平面参数分别获得第一位置关系公式、第二位置关系公式、第三位置关系公式、第四位置关系公式、第五位置关系公式和第六位置关系公式;
第二处理模块,用于设置动画加载计数器和动画卸载计数器,根据所述动画加载计数器对超过动画加载阈值的动画加载请求通过第一异步消息队列实现延后处理,根据所述动画卸载计数器对超过动画卸载阈值的动画卸载请求通过第二异步消息队列实现延后处理。
8.一种计算机设备,其特征在于,包括:存储器和处理器及存储在存储器上的计算机程序,当所述计算机程序在处理器上被执行时,实现如权利要求1至6中任一项所述的基于场景切割的动画动态加卸载方法。
9.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述计算机程序被处理器运行时,实现如权利要求1至6中任一项所述的基于场景切割的动画动态加卸载方法。
CN202310710865.6A 2023-06-15 2023-06-15 基于场景切割的动画动态加卸载方法、装置、设备及介质 Active CN116721187B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310710865.6A CN116721187B (zh) 2023-06-15 2023-06-15 基于场景切割的动画动态加卸载方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310710865.6A CN116721187B (zh) 2023-06-15 2023-06-15 基于场景切割的动画动态加卸载方法、装置、设备及介质

Publications (2)

Publication Number Publication Date
CN116721187A CN116721187A (zh) 2023-09-08
CN116721187B true CN116721187B (zh) 2024-01-30

Family

ID=87864262

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310710865.6A Active CN116721187B (zh) 2023-06-15 2023-06-15 基于场景切割的动画动态加卸载方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN116721187B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110368693A (zh) * 2019-07-22 2019-10-25 珠海金山网络游戏科技有限公司 一种基于多四叉树的mmo游戏元素裁减方法及其装置
CN111127615A (zh) * 2019-12-26 2020-05-08 四川航天神坤科技有限公司 一种三维模型的数据调度方法、装置及电子设备
WO2022121525A1 (zh) * 2020-12-11 2022-06-16 中兴通讯股份有限公司 三维场景数据的渲染方法及装置、存储介质、电子装置
CN115002495A (zh) * 2022-05-23 2022-09-02 上海哔哩哔哩科技有限公司 动画处理方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110368693A (zh) * 2019-07-22 2019-10-25 珠海金山网络游戏科技有限公司 一种基于多四叉树的mmo游戏元素裁减方法及其装置
CN111127615A (zh) * 2019-12-26 2020-05-08 四川航天神坤科技有限公司 一种三维模型的数据调度方法、装置及电子设备
WO2022121525A1 (zh) * 2020-12-11 2022-06-16 中兴通讯股份有限公司 三维场景数据的渲染方法及装置、存储介质、电子装置
CN115002495A (zh) * 2022-05-23 2022-09-02 上海哔哩哔哩科技有限公司 动画处理方法及装置

Also Published As

Publication number Publication date
CN116721187A (zh) 2023-09-08

Similar Documents

Publication Publication Date Title
US9569885B2 (en) Technique for pre-computing ambient obscurance
WO2020098531A1 (zh) 对象的加载方法和装置、存储介质、电子装置
US8248416B2 (en) Efficient ray tracing without acceleration data structure
EP1559074B1 (en) Three dimensional image processing
US20160232693A1 (en) Conservative cell and portal graph generation
CN111815755A (zh) 虚拟物体被遮挡的区域确定方法、装置及终端设备
US20010012018A1 (en) Occlusion culling for complex transparent scenes in computer generated graphics
Ernst et al. Early split clipping for bounding volume hierarchies
Brabec et al. Shadow volumes on programmable graphics hardware
CN110163831B (zh) 三维虚拟沙盘的物体动态展示方法、装置及终端设备
CN111145329B (zh) 模型渲染方法、系统及电子装置
CN116721187B (zh) 基于场景切割的动画动态加卸载方法、装置、设备及介质
CN114119939A (zh) 数据轻量化处理方法、装置、存储介质及电子设备
KR100693134B1 (ko) 3차원 이미지 처리
CN113240720B (zh) 一种三维表面重建方法、装置、服务器以及可读存储介质
US20190005736A1 (en) Method and apparatus for calculating a 3d density map associated with a 3d scene
CN114596195A (zh) 一种地形数据处理方法、系统、装置及计算机存储介质
US20130271489A1 (en) System, method, and computer program product for adding computer-generated scene elements into a representation of a real-world scene, using path tracing
US6624810B2 (en) Tightened bounding volumes for BSP-trees
US20090231330A1 (en) Method and system for rendering a three-dimensional scene using a dynamic graphics platform
Koltun et al. Selecting Effective Occluders for Visibility Culling.
CN116340671A (zh) 一种地图显示方法、装置、终端设备及可读存储介质
CN117729365A (zh) 一种弹幕处理方法、装置、电子设备及存储介质
CN113769382A (zh) 游戏场景中模型的剔除方法、装置、设备及存储介质
CN118052924A (zh) 显示渲染方法及相关装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant