一种实例化渲染方法及系统与流程

文档序号:37278822发布日期:2024-03-12 21:15阅读:15来源:国知局
一种实例化渲染方法及系统与流程

本发明涉及实例化渲染领域,尤其涉及一种实例化渲染方法及系统。


背景技术:

1、在3d引擎中对于批量的geometry(几何体)和material(材质)都相同的n个渲染节点,可以使用实例化渲染的手段进行优化。在使用该手段时,通常会向geometry添加instancematrix属性。该属性内部包含了所有需要渲染的相同n个渲染节点的矩阵数据,其中单个渲染节点数组长度为16,因此该属性的总长度为n*16。同时,需要设置instancecount(实例数量)为n。之后修改material的defines属性,使其支持实例化渲染。最后使用修改后的geometry与material生成新的渲染节点进行实例化渲染,此时就将drawcall从n个,减少到了1个,从而提升了性能。

2、但是,目前这样的实例化渲染手段存在性能缺陷,例如:当要修改使用实例化渲染优化的部分节点的显隐时,只能通过修改位于instancematrix中的节点矩阵的缩放分量来实现,而不是通过修改instancecount使得实例化渲染节点不渲染需要隐藏的节点,这极大的浪费了渲染性能。


技术实现思路

1、本发明所要解决的是现有实例化渲染手段难以灵活渲染部分节点的显隐,导致渲染性能浪费的问题,为了解决上述技术问题,本发明提供了一种实例化渲染方法及系统。

2、第一个方面,提供了一种实例化渲染方法,包括:

3、构建实例管理组件,所述实例管理组件用于管理单独物体矩阵位于实例矩阵中的下标,并统计实例数量,为所述实例管理组件设置激活数量接口,所述激活数量接口用于获取实例的激活数量;

4、向所述实例管理组件注册激活数量变化事件,通过所述激活数量变化事件更新实例数量的值为激活数量,根据所述激活数量进行实例渲染。

5、在第一个方面的一种可能实现中,向所述实例管理组件注册激活数量变化事件之前,还包括:

6、构建数据分段上传组件,所述数据分段上传组件用于基于给定的下标设置缓冲区更新范围;

7、使用所述数据分段上传组件对所述缓冲区更新范围内的待渲染数据进行分段上传。

8、在第一个方面的一种可能实现中,还包括:

9、向所述实例管理组件注册下标变化事件,所述下标变化事件用于交换发生变化的下标所指向的所述实例矩阵中的数据;

10、通过所述下标变化事件对所述实例矩阵中的数据进行交换。

11、在第一个方面的一种可能实现中,通过所述下标变化事件对所述实例矩阵中的数据进行交换,具体包括:

12、下标变化事件确定需要交换的数据的源下标和目的下标,根据所述源下标从所述实例矩阵中取出对应的源数据,使用临时变量保存所述源数据;

13、根据所述目的下标从所述实例矩阵中取出对应的目的数据,写入所述实例矩阵中的所述源下标处;

14、将所述临时变量中的所述源数据写入所述实例矩阵中的所述目的下标处,完成数据交换。

15、在第一个方面的一种可能实现中,还包括:

16、为所述实例管理组件设置下标分配接口、释放接口、激活接口和取消激活接口,所述下标分配接口用于为实例矩阵分配下标,所述释放接口用于释放下标,所述激活接口用于激活下标,所述取消激活接口用于取消激活下标。

17、第二个方面,提供了一种实例化渲染系统,包括:

18、第一组件构建单元,用于构建实例管理组件,所述实例管理组件用于管理单独物体矩阵位于实例矩阵中的下标,并统计实例数量,为所述实例管理组件设置激活数量接口,所述激活数量接口用于获取实例的激活数量;

19、第一事件注册单元,用于向所述实例管理组件注册激活数量变化事件,通过所述激活数量变化事件更新实例数量的值为激活数量,根据所述激活数量进行实例渲染。

20、在第二方面的一种可能实现中,还包括:

21、第二组件构建单元,用于构建数据分段上传组件,所述数据分段上传组件用于基于给定的下标设置缓冲区更新范围;

22、分段上传单元,用于使用所述数据分段上传组件对所述缓冲区更新范围内的待渲染数据进行分段上传。

23、在第二方面的一种可能实现中,还包括:

24、第二事件注册单元,用于向所述实例管理组件注册下标变化事件,所述下标变化事件用于交换发生变化的下标所指向的所述实例矩阵中的数据;

25、数据交换单元,用于通过所述下标变化事件对所述实例矩阵中的数据进行交换。

26、在第二方面的一种可能实现中,所述数据交换单具体用于通过下标变化事件确定需要交换的数据的源下标和目的下标,根据所述源下标从所述实例矩阵中取出对应的源数据,使用临时变量保存所述源数据;根据所述目的下标从所述实例矩阵中取出对应的目的数据,写入所述实例矩阵中的所述源下标处;将所述临时变量中的所述源数据写入所述实例矩阵中的所述目的下标处,完成数据交换。

27、在第二方面的一种可能实现中,所述第一组件构建单元还用于为所述实例管理组件设置下标分配接口、释放接口、激活接口和取消激活接口,所述下标分配接口用于为实例矩阵分配下标,所述释放接口用于释放下标,所述激活接口用于激活下标,所述取消激活接口用于取消激活下标。

28、本发明通过修改实例数量来进行实例化物体的显隐控制,当需要隐藏或显示部分实例化物体时,通过增减实例数量的值就可以实现,极大的提升了渲染性能,同时通过事件驱动,提升了实例化渲染的可用性,使得单独物体可以轻松的设置显隐,避免了渲染性能浪费。

29、此外,基于现有实例渲染方法在更新实例矩阵数据时存在冗余上传,原因是数据时当前渲染引擎都是采用全量上传,而不是只上传修改部分的数据,这也会导致渲染性能下降的问题,本发明通过在上传数据时采用分段、按需上传的方式进行优化,节省了上传带宽,提升了渲染效率。

30、本发明附加的方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明实践了解到。



技术特征:

1.一种实例化渲染方法,其特征在于,包括:

2.根据权利要求1所述的实例化渲染方法,其特征在于,向所述实例管理组件注册激活数量变化事件之前,还包括:

3.根据权利要求2所述的实例化渲染方法,其特征在于,还包括:

4.根据权利要求3所述的实例化渲染方法,其特征在于,通过所述下标变化事件对所述实例矩阵中的数据进行交换,具体包括:

5.根据权利要求1所述的实例化渲染方法,其特征在于,还包括:

6.一种实例化渲染系统,其特征在于,包括:

7.根据权利要求6所述的实例化渲染系统,其特征在于,还包括:

8.根据权利要求7所述的实例化渲染系统,其特征在于,还包括:

9.根据权利要求8所述的实例化渲染系统,其特征在于,所述数据交换单具体用于通过下标变化事件确定需要交换的数据的源下标和目的下标,根据所述源下标从所述实例矩阵中取出对应的源数据,使用临时变量保存所述源数据;根据所述目的下标从所述实例矩阵中取出对应的目的数据,写入所述实例矩阵中的所述源下标处;将所述临时变量中的所述源数据写入所述实例矩阵中的所述目的下标处,完成数据交换。

10.根据权利要求6所述的实例化渲染系统,其特征在于,所述第一组件构建单元还用于为所述实例管理组件设置下标分配接口、释放接口、激活接口和取消激活接口,所述下标分配接口用于为实例矩阵分配下标,所述释放接口用于释放下标,所述激活接口用于激活下标,所述取消激活接口用于取消激活下标。


技术总结
本发明公开了一种实例化渲染方法及系统,涉及实例化渲染领域。该方法包括:构建实例管理组件,实例管理组件用于管理单独物体矩阵位于实例矩阵中的下标,并统计实例数量,为实例管理组件设置激活数量接口,激活数量接口用于获取实例的激活数量;向实例管理组件注册激活数量变化事件,通过激活数量变化事件更新实例数量的值为激活数量,根据激活数量进行实例渲染。本发明通过修改实例数量来进行实例化物体的显隐控制,当需要隐藏或显示部分实例化物体时,通过增减实例数量的值就可以实现,极大的提升了渲染性能,同时通过事件驱动,提升了实例化渲染的可用性,使得单独物体可以轻松的设置显隐,避免了渲染性能浪费。

技术研发人员:王鑫,谢帅,井刚,吴俊华,李鉴,芦世鹏
受保护的技术使用者:北京优锘科技股份有限公司
技术研发日:
技术公布日:2024/3/11
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1