一种大批量节点矩阵标脏与更新的方法及系统技术方案

技术编号:39751626 阅读:11 留言:0更新日期:2023-12-17 23:50
本发明专利技术公开了一种大批量节点矩阵标脏与更新的方法及系统,该方法包括:获取节点对象,在节点对象上设置标脏标识;收集发生矩阵变化的接口处的节点对象,利用标脏标识对可能发生矩阵变化的接口处的节点对象进行标脏处理,得到标脏后的节点对象;构建矩阵的标脏列表,对标脏处理后的节点对象进行去重处理,并将去重后的节点对象加入到矩阵的标脏列表中;收集矩阵频繁变化的节点对象,设置常驻列表,将矩阵频繁变化的节点对象增加到常驻列表中;在渲染开始前,对标脏列表中的节点对象进行遍历更新;待渲染结束后,清空标脏列表

【技术实现步骤摘要】
一种大批量节点矩阵标脏与更新的方法及系统


[0001]本专利技术涉及矩阵更新
,特别地涉及一种大批量节点矩阵标脏与更新的方法及系统


技术介绍

[0002]一般情况下,
3D
引擎更新节点矩阵过程如下:
[0003]1)
从根节点对整颗场景树进行遍历;
[0004]2)
对树中节点的本地矩阵

世界矩阵进行计算更新

[0005]这一操作会带来两个方面的消耗,一个是遍历整棵场景树的消耗,还有就是更新节点本地矩阵

世界矩阵的计算消耗

为了避免在更新节点矩阵环节产生太多消耗,提升性能,
3D
引擎在这个过程中引入了一套的矩阵标脏方法,在一定程度上可以提升更新节点矩阵的效率

但是在大批量节点的场景中,该方法还存在如下缺点:
1)
现有的
3D
引擎缺少对本地矩阵的标脏,控制粒度不够;
2)
引擎内部没有提前在可以导致矩阵变换的接口处埋点标脏,需要用户在外边自行调用,使用起来不是很方便;
3)
触发更新节点矩阵总是从根节点进行完全遍历,会浪费性能


技术实现思路

[0006]有鉴于此,本专利技术提出一种大批量节点矩阵标脏与更新的方法及系统,提升对节点矩阵更新的控制粒度

[0007]本专利技术第一方面提供一种大批量节点矩阵标脏与更新的方法,该方法包括:获取节点对象,在节点对象上设置标脏标识,所述标脏标识用于对节点对象的本地矩阵标脏;收集可能发生矩阵变化的接口处的节点对象,利用所述标脏标识对可能发生矩阵变化的接口处的节点对象进行标脏处理,得到标脏后的节点对象;构建矩阵的标脏列表,对标脏后的节点对象进行去重处理,并将去重后的节点对象加入到所述标脏列表中;在渲染开始前,对所述标脏列表中的节点对象进行遍历更新

[0008]进一步的,所述利用所述标脏标识对可能发生矩阵变化的接口处的节点对象进行标脏处理的步骤包括:获取可能发生矩阵变化的接口处的节点对象;设置所述节点对象的本地矩阵的标脏标识;利用所述标脏标识对所述节点对象进行标脏处理

[0009]进一步的,所述对标脏后的节点对象进行去重的步骤包括:获取标脏后的待进入所述标脏列表的节点对象;将待进入所述标脏列表的节点对象与所述标脏列表中的节点对象进行一次去重检测;将经过一次去重检测后的所述节点对象的父节点与所述标脏列表中的节点对象进行二次去重检测,并将经过二次去重检测后的节点对象,加入到所述标脏列表中;将加入到标脏列表中节点对象的子节点从标脏列表中剔除

[0010]进一步的,所述将待进入所述标脏列表的节点对象与所述标脏列表中的节点对象进行一次去重检测的步骤包括:将待进入所述标脏列表的节点对象与所述标脏列表中的节点对象进行一一对比,判断是否重复;若重复,则将重复的节点对象删除;若不重复,则对所
述节点对象进行二次去重检测

[0011]进一步的,所述经过一次去重检测后的将所述节点对象的父节点与所述标脏列表中的节点对象进行二次去重检测的步骤包括:将经过一次去重检测后的所述节点对象的父节点与所述标脏列表中的节点对象进行一一对比,判断是否重复;若重复,则将重复的节点对象删除;若不重复,则将所述节点对象加入到所述标脏列表中

[0012]进一步的,所述对所述标脏列表中的节点对象进行遍历更新的步骤包括:将所述标脏列表内的所有节点对象进行依次遍历;对遍历后的所述节点对象的矩阵进行更新计算,包括计算更新所述节点对象的本地矩阵和计算更新所述节点对象的世界矩阵

[0013]进一步的,该方法还包括:收集矩阵频繁变化的节点对象,设置常驻列表,将矩阵频繁变化的节点对象增加到所述常驻列表中

[0014]进一步的,该方法还包括:待渲染结束后,清空所述标脏列表

[0015]进一步的,该方法还包括:将所述常驻列表中的节点对象添加到清空后的所述标脏列表中,在下一次渲染开始前,再次对所述标脏列表中的节点对象进行遍历更新,待渲染结束后,再次清空所述标脏列表

[0016]本专利技术第二方面还提供一种大批量节点矩阵标脏与更新的系统,该系统包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现如权上所述大批量节点矩阵标脏与更新的方法的步骤

[0017]上述的大批量节点矩阵标脏与更新的方法及系统,只对需要更新矩阵的节点对象进行更新,并使用标脏列表中节点对象进行遍历而不是从场景根节点进行完全遍历,减少冗余更新,提高更新效率,提升引擎渲染性能

附图说明
[0018]为了说明而非限制的目的,现在将根据本专利技术的优选实施例

特别是参考附图来描述本专利技术,其中:
[0019]图1是本专利技术一实施例提供的一种大批量节点矩阵标脏与更新的方法的流程图;
[0020]图2是本专利技术一实施例提供的对节点对象进行去重处理的流程图;
[0021]图3是本专利技术另一实施例提供的一种大批量节点矩阵标脏与更新的系统的流程图

具体实施方式
[0022]为了能够更清楚地理解本专利技术的上述目的

特征和优点,下面结合附图和具体实施例对本专利技术进行详细描述

需要说明的是,在不冲突的情况下,本专利技术的实施例及实施例中的特征可以相互组合

[0023]在下面的描述中阐述了很多具体细节以便于充分理解本专利技术,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例

基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围

[0024]除非另有定义,本文所使用的所有的技术和科学术语与属于本专利技术的
的技术人员通常理解的含义相同

本文中在本专利技术的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本专利技术

[0025]图1是本专利技术一实施例提供的一种大批量节点矩阵标脏与更新的方法的流程图

下面结合附图对本专利技术的具体实施方式进行详细说明

[0026]请参阅图1,大批量节点矩阵标脏与更新的方法包括以下步骤:
[0027]S100
,获取节点对象,在节点对象上设置标脏标识,该标脏标识用于对节点对象的本地矩阵标脏

[0028]节点矩阵是在节点对象身上,描述该节点对象仿射变换信息的属性
(
平移

旋转和缩放
)
,以矩阵的数学形式表示

通过这个矩阵,可以确定节点在三维空间中的位置和方向

[0029本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种大批量节点矩阵标脏与更新的方法,其特征在于,包括:获取节点对象,在节点对象上设置标脏标识,所述标脏标识用于对节点对象的本地矩阵标脏;收集发生矩阵变化的接口处的节点对象,利用所述标脏标识对发生矩阵变化的接口处的节点对象进行标脏处理,得到标脏后的节点对象;构建矩阵的标脏列表,对标脏后的节点对象进行去重处理,并将去重后的节点对象加入到所述标脏列表中;在渲染开始前,对所述标脏列表中的节点对象进行遍历更新
。2.
根据权利要求1所述的大批量节点矩阵标脏与更新的方法,其特征在于,所述利用所述标脏标识对发生矩阵变化的接口处的节点对象进行标脏处理的步骤包括:获取发生矩阵变化的接口处的节点对象;设置所述节点对象的本地矩阵的标脏标识;利用所述标脏标识对所述节点对象进行标脏处理
。3.
根据权利要求1所述的大批量节点矩阵标脏与更新的方法,其特征在于,所述对标脏后的节点对象进行去重的步骤包括:获取标脏后的待进入所述标脏列表的节点对象;将待进入所述标脏列表的节点对象与所述标脏列表中的节点对象进行一次去重检测;将经过一次去重检测后的所述节点对象的父节点与所述标脏列表中的节点对象进行二次去重检测,并将经过二次去重检测后的节点对象,加入到所述标脏列表中;将加入到标脏列表中节点对象的子节点从标脏列表中剔除
。4.
根据权利要求1所述的大批量节点矩阵标脏与更新的方法,其特征在于,所述将待进入所述标脏列表的节点对象与所述标脏列表中的节点对象进行一次去重检测的步骤包括:将待进入所述标脏列表的节点对象与所述标脏列表中的节点对象进行一一对比,判断是否重复;若重复,则将重复的节点对象删除;若不重复,则对所述节点对象进行二次去重检测
...

【专利技术属性】
技术研发人员:王鑫谢帅吴俊华井刚李鉴陈傲寒吴建松
申请(专利权)人:北京优锘科技股份有限公司
类型:发明
国别省市:

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

1