本申请涉及信息处理技术领域,特别是涉及大规模相同物件渲染的方法、系统、电子装置和存储介质。
背景技术:
在互联网游戏中,游戏场景能够给用户带来不同的体验效果。其中,游戏地表的多种多样的植被能够使得游戏更加具有生机。但是,若不采用实例化(instance)技术,则大量的植被在进行渲染时,例如,渲染森林之类的场景时,只能一棵树、一棵树的渲染,导致drawcall过多,渲染效率低。
目前针对相关技术中不采用instance技术时,drawcall过多,渲染效率低的问题,尚未提出有效的解决方案。
技术实现要素:
本申请实施例提供了一种大规模相同物件渲染的方法、系统、电子装置和存储介质,以至少解决相关技术中不采用instance技术时,drawcall过多,渲染效率低的问题。
第一方面,本申请实施例提供了一种大规模相同物件渲染的方法,所述方法包括:
获取待渲染场景,统计所述待渲染场景中的物件种类总数,对所述物件用预设数目的同一种类物件合成新模型;
利用四叉树对所述待渲染场景进行划分,得到待渲染信息,将所述四叉树节点包含的所述物件参数信息保存成第一矩阵,将所述第一矩阵组保存到文件中,其中,所述新模型包括所述预设数目的所述第一矩阵,为第一矩阵组;
对所述待渲染信息进行可见性检测,根据所述可见性检测结果得到可见四叉树节点,根据所述可见四叉树节点得到可见物件种类,所述可见物件种类对应的所述第一矩阵组为第二矩阵组;
获取所需渲染的所述新模型为待渲染模型,将所述待渲染模型对应的所述第二矩阵组写到顶点着色器中,对所述待渲染模型生成一次绘制指令。
在其中一些实施例中,获取所需渲染的所述新模型为待渲染模型之后,所述方法还包括:判断所述待渲染模型中所需渲染的所述物件的个数是否小于所述预设数目,若为小于,则将第二矩阵组空余部分的第二矩阵置零,所述置零后的所述第二矩阵组为第三矩阵组,将所述第三矩阵组写到顶点着色器中,对所述待渲染模型生成一次绘制指令。
在其中一些实施例中,对所述待渲染模型生成一次绘制指令之后,所述方法包括:获取所述待渲染模型的模型顶点流元素,用所述模型顶点流元素索引所述顶点着色器,得到所述第二矩阵组,将所述待渲染模型的顶点和对应的所述第二矩阵相乘,得到输出顶点矩阵,根据所述输出顶点矩阵对所述待渲染模型进行渲染。
在其中一些实施例中,对所述待渲染模型生成一次绘制指令之后,所述方法包括:判断生成所述绘制指令的次数是否小于所述可见物件种类总数,若为小于,则跳转到获取所需渲染的所述新模型为待渲染模型步骤。
在其中一些实施例中,将所述待渲染模型对应的所述第二矩阵组写到顶点着色器中之前,所述方法包括:遍历删除缓冲区,判断所述第二矩阵是否在所述删除缓冲区中,若为是,则将所述第二矩阵设置为零矩阵。
在其中一些实施例中,对所述待渲染模型生成一次绘制指令之后,所述方法包括:遍历添加缓冲区,将所述添加缓冲区中的所述第二矩阵写到所述顶点着色器中,对所述第二矩阵对应的所述新模型生成一次绘制指令。
在其中一些实施例中,所述物件种类包括植被种类,所述物件参数信息包括物件的种类、数量,位置和方向信息。
第二方面,本申请实施例提供了一种大规模相同物件渲染的系统,所述系统包括合成模块、划分模块、检测模块和绘制指令模块,
所述合成模块,用于获取待渲染场景,统计所述待渲染场景中的物件种类总数,对所述物件用预设数目的同一种类物件合成新模型;
所述划分模块,用于利用四叉树对所述待渲染场景进行划分,得到待渲染信息,将所述四叉树节点包含的所述物件参数信息保存成第一矩阵,将所述第一矩阵组保存到文件中,其中,所述新模型包括所述预设数目的所述第一矩阵,为第一矩阵组;
所述检测模块,用于对所述待渲染信息进行可见性检测,根据所述可见性检测结果得到可见四叉树节点,根据所述可见四叉树节点得到可见物件种类,所述可见物件种类对应的所述第一矩阵组为第二矩阵组;
所述绘制指令模块,用于获取所需渲染的所述新模型为待渲染模型,将所述待渲染模型对应的所述第二矩阵组写到顶点着色器中,对所述待渲染模型生成一次绘制指令。
第三方面,本申请实施例提供了一种电子装置,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述第一方面所述的大规模相同物件渲染的方法。
第四方面,本申请实施例提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述第一方面所述的大规模相同物件渲染的方法。
相比于相关技术,本申请实施例提供的大规模相同物件渲染的方法,通过获取待渲染场景,统计该待渲染场景中的物件种类总数,对每种物件种类用预设数目的同一种类物件合成新模型,利用四叉树对该待渲染场景进行划分,得到待渲染信息,将该四叉树节点包含的该物件参数信息保存成第一矩阵,将第一矩阵组保存到文件中,其中,新模型包括预设数目的第一矩阵,为第一矩阵组,对该待渲染信息进行可见性检测,根据该可见性检测结果得到可见四叉树节点,根据该可见四叉树节点得到可见物件种类,该可见物件种类对应的第一矩阵组为第二矩阵组,获取所需渲染的该新模型为待渲染模型,将该待渲染模型对应的该第二矩阵组写到顶点着色器中,对该待渲染模型生成一次绘制指令,解决了不采用instance技术时,drawcall过多,渲染效率低的问题,提高了大规模相同物件的渲染效率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的大规模相同物件渲染的方法的流程图;
图2是根据本申请实施例的大规模相同物件渲染的方法的示意图;
图3是根据本申请实施例的另一种大规模相同物件渲染的方法的示意图;
图4是根据本申请实施例的大规模相同物件渲染的系统的结构框图;
图5是根据本申请实施例的电子设备的内部结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行描述和说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。基于本申请提供的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。此外,还可以理解的是,虽然这种开发过程中所作出的努力可能是复杂并且冗长的,然而对于与本申请公开的内容相关的本领域的普通技术人员而言,在本申请揭露的技术内容的基础上进行的一些设计,制造或者生产等变更只是常规的技术手段,不应当理解为本申请公开的内容不充分。
在本申请中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域普通技术人员显式地和隐式地理解的是,本申请所描述的实施例在不冲突的情况下,可以与其它实施例相结合。
除非另作定义,本申请所涉及的技术术语或者科学术语应当为本申请所属技术领域内具有一般技能的人士所理解的通常意义。本申请所涉及的“一”、“一个”、“一种”、“该”等类似词语并不表示数量限制,可表示单数或复数。本申请所涉及的术语“包括”、“包含”、“具有”以及它们任何变形,意图在于覆盖不排他的包含;例如包含了一系列步骤或模块(单元)的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可以还包括没有列出的步骤或单元,或可以还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。本申请所涉及的“连接”、“相连”、“耦接”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电气的连接,不管是直接的还是间接的。本申请所涉及的“多个”是指大于或者等于两个。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。本申请所涉及的术语“第一”、“第二”、“第三”等仅仅是区别类似的对象,不代表针对对象的特定排序。
本实施例提供了一种大规模相同物件渲染的方法,图1是根据本申请实施例的大规模相同物件渲染的方法的流程图,如图1所示,该流程包括如下步骤:
步骤s101,获取待渲染场景,统计该待渲染场景中的物件种类总数,对该物件用预设数目的同一种类物件合成新模型;本实施例中,预设数目的大小为顶点着色器的常量缓冲区个数,若常量缓冲区的个数为30个,则对每种物件种类用30个同一种类物件合成新模型,即该新模型的个数为物件种类总数,每个新模型包括30个同一种类物件;
步骤s102,利用四叉树对该待渲染场景进行划分,得到待渲染信息,将该四叉树节点包含的该物件参数信息保存成第一矩阵,将该第一矩阵组保存到文件中,其中,新模型包括预设数目的第一矩阵,为第一矩阵组;本实施例中,四叉树又称四元树,是一种树状数据结构,在每一个节点上会有四个子区块,四叉树常应用于二维空间数据的分析与分类,四叉树将数据区分成为四个象限,数据范围可以是方形或矩形或其他任意形状,对待渲染场景做四叉树处理,计算出每个四叉树节点包含的物件参数信息,将该物件参数信息保存到矩阵中为第一矩阵,每个物件参数信息保存为一个第一矩阵,因此新模型包括预测数目的第一矩阵,称为第一矩阵组,第一矩阵组的个数为物件种类总数,将多个第一矩阵组保存到文件中。
步骤s103,对该待渲染信息进行可见性检测,根据该可见性检测结果得到可见四叉树节点,根据该可见四叉树节点得到可见物件种类,该可见物件种类对应的该第一矩阵组为第二矩阵组;本实施里中,可见性检测为视椎剔除,视锥剔除是一个图形渲染前的步骤,用于剔除掉不需要绘制的部分,进行视锥剔除后,得到视野可见的四叉树节点,将视野可见的四叉树节点包含的物件的种类称为可见物件种类,该可见物件种类对应的第一矩阵组称为第二矩阵组,即存在多种物件种类,但只需渲染视野可见的物件种类,称为可见物件种类,将每一种可见物件种类的第一矩阵组称为第二矩阵组;
步骤s104,获取所需渲染的新模型为待渲染模型,将该待渲染模型对应的该第二矩阵组写到顶点着色器中,对该待渲染模型生成一次绘制指令;本实施例中,将多种新模型中所需要渲染的新模型称为待渲染模型,将待渲染模型对应的第二矩阵组写到顶点着色器的常量缓冲区后,向gpu发送画图命令,即对该待渲染模型生成一次绘制指令,以一次绘制指令画预设数目同一种类物件,若预设数目为30,对待渲染模型生成一次绘制指令时,可以一次画30个同一种类物件,减少了绘制指令(drawcall)的次数。
通过上述步骤s101至步骤s104,相对于相关技术中不采用instance技术时,drawcall过多,渲染效率低的问题,该系统用预设数目的同一种类物件合成新模型,再利用四叉树对待渲染场景进行划分,获取四叉树每个节点的物件参数信息保存成矩阵,再将矩阵保存到文件中,进行视椎剔除后,获取所需渲染何种种类的新模型为待渲染模型,再将待渲染模型包含的预设数目的同一物种对应的矩阵写到顶点着色器的常量缓冲区中,再对该待渲染模型生成一次绘制指令,则以一次绘制指令渲染预设数目的物件,减少drawcall次数,提高渲染效率,也解决了为了减少drawcall,采用引擎合则所需内存大的问题。
在其中一些实施例中,获取所需渲染的该新模型为待渲染模型之后,判断待渲染模型中所需渲染的物件的个数是否小于该预设数目,若为小于,则将第二矩阵组空余部分的第二矩阵置零,该置零后的该第二矩阵组为第三矩阵组,将该第三矩阵组写到顶点着色器中,对该待渲染模型生成一次绘制指令。本实施例中,待渲染模型包含预设数目的同一种类的物件,则以一次绘制指令即可渲染预设数目的物件,若所需渲染的物件个数小于预测数目,则需将第二矩阵组空余部分的第二矩阵置零,该置零后的第二矩阵组为第三矩阵组,例如,预设数目为30,而所需渲染的物件个数为28个,需将2个第二矩阵设置为零矩阵,则第三矩阵组包括2个零矩阵和28个第二矩阵,再将该第三矩阵组写到顶点着色器中,此时,对待渲染模型生成一次绘制指令即可一次画出28个物件,实现了减少drawcall次数且对一次drawcall画多少个物件能够动态设定。
在其中一些实施例中,对该待渲染模型生成一次绘制指令之后,获取该待渲染模型的模型顶点流元素,用该模型顶点流元素索引顶点着色器,得到该第二矩阵组,将该待渲染模型的顶点和对应的该第二矩阵相乘,得到输出顶点矩阵,根据该输出顶点矩阵对该待渲染模型进行渲染。
例如,物件由1000个顶点组成,则待渲染模型的模型顶点流元素(boneindex)每隔物件顶点数递增一次,若预设数目为3,则待渲染模型由3个同一种类的物件合成,那么待渲染模型第0-999个顶点的boneindex为0,第1000-1999个顶点的boneindex为1,第2000-2999个顶点的boneindex为2,用boneindex索引顶点着色器的常量缓冲区,即可得到写到常量缓冲区中的第二矩阵组,用待渲染模型的顶点和对应的第二矩阵相乘,得到输出顶点矩阵,根据该输出顶点矩阵可对待渲染模型进行渲染,若第二矩阵为零,则输出顶点矩阵也为零,说明该物件不存在,则在屏幕中不显示。
在其中一些实施例中,对该待渲染模型生成一次绘制指令之后,该方法包括:判断生成该绘制指令的次数是否小于该可见物件种类总数,若为小于,则跳转到获取所需渲染的新模型为待渲染模型步骤。图2是根据本申请实施例的大规模相同物件渲染的方法的示意图,如图2所示,该流程包括如下步骤:
步骤s104,获取待渲染模型,将该待渲染模型的第二矩阵组写到顶点着色器中,对该待渲染模型生成一次绘制指令;
步骤s201,判断生成该绘制指令的次数是否小于该可见物件种类总数,若为小于,则说明还没渲染完视野可见的物件,跳转到获取所需渲染的新模型为待渲染模型步骤,继续获取下一个待渲染模型;
步骤s202,生成绘制指令的次数等于可见物件种类总数,即渲染完视野可见的物件,则循环结束。例如,可见物种种类的数量有5种,生成绘制指令的次数为1次,则跳转到获取所需渲染的新模型为待渲染模型步骤,即获得第二个待渲染模型,将第二个待渲染模型对应的第二矩阵组写到顶点着色器中,对第二个待渲染模型进行渲染。
在其中一些实施例中,将该待渲染模型对应的该第二矩阵组写到顶点着色器中之后,该方法包括:遍历删除缓冲区,判断该第二矩阵是否在该删除缓冲区中,若为是,则将该第二矩阵设置为零矩阵,对该待渲染模型生成一次绘制指令。本实施例中,图3是根据本申请实施例的另一种大规模相同物件渲染的方法的示意图,如图3所示,该流程包括如下步骤:
步骤s301,将待渲染模型对应的第二矩阵组写到顶点着色器中之后,如果要删除某个物件,则将该物件的矩阵数据放到删除缓冲区中;
步骤s302,遍历删除缓冲区,遍历删除缓冲区,判断该第二矩阵是否在该删除缓冲区中,若为是,则将该第二矩阵设置为零矩阵,即判断删除缓冲区矩阵数据和顶点着色器中的第二矩阵是否相同,若为是,则将该第二矩阵设置为零矩阵;
步骤s303,将所需删除的物件对应的第二矩阵设置为零矩阵后,对该待渲染模型生成一次绘制指令,即可动态删除该物件,解决了为了减少drawcall,采用美术手动合则不能动态删除物件的问题。
在其中一些实施例中,对该待渲染模型生成一次绘制指令之后,该方法包括:遍历添加缓冲区,将添加缓冲区中的第二矩阵写到该顶点着色器中,对该第二矩阵对应的物件生成一次绘制指令。本实施例中,如果要添加某个或多个物件,则将物件的矩阵数据放到添加缓冲区中,遍历添加缓冲区,将添加缓冲区中的矩阵写到顶点着色器的常量缓冲区中,若预设数目为30,而添加缓冲区中的矩阵个数不足30,则以零矩阵补齐,再向gpu发送画图命令,则可动态添加物件,若添加缓冲区中的矩阵个数超过30,则先对30个矩阵对应的物件进行渲染,渲染完后再将剩余的矩阵写到顶点着色器的常量缓冲区中,再向gpu发送画图命令,解决了为了减少drawcall,采用美术手动合则不能动态添加物件的问题。
在其中一些实施例中,该物件种类包括植被种类,该物件参数信息包括物件的种类、数量,位置和方向信息。本实施例中,物件种类包括植被种类,例如森林和草地等,而物件参数信息包括物件的种类、数量,位置和方向信息,将物件参数信息保存为矩阵,知道物件的矩阵即可知道物件的位置和方向等信息。
需要说明的是,在上述流程中或者附图的流程图中示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本实施例还提供了一种大规模相同物件渲染的系统,该系统用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”、“单元”、“子单元”等可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图4是根据本申请实施例的大规模相同物件渲染的系统的结构框图,如图4所示,该系统包括合成模块41、划分模块42、检测模块43和绘制指令模块44,
合成模块41,用于获取待渲染场景,统计该待渲染场景中的物件种类总数,对该每种物件种类用预设数目的同一种类物件合成新模型;划分模块42,用于利用四叉树对该待渲染场景进行划分,得到待渲染信息,将该四叉树节点包含的该物件参数信息保存成第一矩阵,将多个该第一矩阵保存到文件中;检测模块43,用于对该待渲染信息进行可见性检测,根据该可见性检测结果得到可见四叉树节点,根据该可见四叉树节点得到可见物件种类,该可见物件种类对应的多个该第一矩阵为第二矩阵组;绘制指令模块44,用于获取所需渲染的该新模型为待渲染模型,将该待渲染模型对应的该第二矩阵组写到顶点着色器中,对该待渲染模型生成一次绘制指令。本实施例通过合成模块41用预设数目的同一种类物件合成新模型,划分模块42利用四叉树对该待渲染场景进行划分,并将四叉树节点包含的第一矩阵保存到文件中,检测模块43进行视椎剔除,得到视野可见的四叉树节点,绘制指令模块44计算所需要渲染的新模型,将新模型对应的预设数目的矩阵写到顶点着色器中,再对该新模型生成一次绘制指令,即可一次画出预设数目的物件,解决了drawcall过多,渲染效率低的问题,提高了渲染效率。
需要说明的是,上述各个模块可以是功能模块也可以是程序模块,既可以通过软件来实现,也可以通过硬件来实现。对于通过硬件来实现的模块而言,上述各个模块可以位于同一处理器中;或者上述各个模块还可以按照任意组合的形式分别位于不同的处理器中。
本实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
s1,获取待渲染场景,统计该待渲染场景中的物件种类总数,对该物件用预设数目的同一种类物件合成新模型。
s2,利用四叉树对该待渲染场景进行划分,得到待渲染信息,将该四叉树节点包含的该物件参数信息保存成第一矩阵,将该第一矩阵组保存到文件中,其中,新模型包括预设数目的第一矩阵,为第一矩阵组。
s3,对该待渲染信息进行可见性检测,根据该可见性检测结果得到可见四叉树节点,根据该可见四叉树节点得到可见物件种类,该可见物件种类对应的该第一矩阵组为第二矩阵组。
s4,获取所需渲染的新模型为待渲染模型,将该待渲染模型对应的该第二矩阵组写到顶点着色器中,对该待渲染模型生成一次绘制指令。
需要说明的是,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
另外,结合上述实施例中的大规模相同物件渲染的方法,本申请实施例可提供一种存储介质来实现。该存储介质上存储有计算机程序;该计算机程序被处理器执行时实现上述实施例中的任意一种大规模相同物件渲染的方法。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种大规模相同物件渲染的方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
在一个实施例中,图5是根据本申请实施例的电子设备的内部结构示意图,如图5所示,提供了一种电子设备,该电子设备可以是服务器,其内部结构图可以如图5所示。该电子设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的数据库用于存储数据。该电子设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种大规模相同物件渲染的方法。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
本领域的技术人员应该明白,以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
1.一种大规模相同物件渲染的方法,其特征在于,所述方法包括:
获取待渲染场景,统计所述待渲染场景中的物件种类总数,对所述物件用预设数目的同一种类物件合成新模型;
利用四叉树对所述待渲染场景进行划分,得到待渲染信息,将所述四叉树节点包含的所述物件参数信息保存成第一矩阵,将所述第一矩阵组保存到文件中,其中,所述新模型包括所述预设数目的所述第一矩阵,为第一矩阵组;
对所述待渲染信息进行可见性检测,根据所述可见性检测结果得到可见四叉树节点,根据所述可见四叉树节点得到可见物件种类,所述可见物件种类对应的所述第一矩阵组为第二矩阵组;
获取所需渲染的所述新模型为待渲染模型,将所述待渲染模型对应的所述第二矩阵组写到顶点着色器中,对所述待渲染模型生成一次绘制指令。
2.根据权利要求1所述的方法,其特征在于,获取所需渲染的所述新模型为待渲染模型之后,所述方法还包括:判断所述待渲染模型中所需渲染的所述物件的个数是否小于所述预设数目,若为小于,则将第二矩阵组空余部分的第二矩阵置零,所述置零后的所述第二矩阵组为第三矩阵组,将所述第三矩阵组写到顶点着色器中,对所述待渲染模型生成一次绘制指令。
3.根据权利要求1所述的方法,其特征在于,对所述待渲染模型生成一次绘制指令之后,所述方法包括:获取所述待渲染模型的模型顶点流元素,用所述模型顶点流元素索引所述顶点着色器,得到所述第二矩阵组,将所述待渲染模型的顶点和对应的所述第二矩阵相乘,得到输出顶点矩阵,根据所述输出顶点矩阵对所述待渲染模型进行渲染。
4.根据权利要求1所述的方法,其特征在于,对所述待渲染模型生成一次绘制指令之后,所述方法包括:判断生成所述绘制指令的次数是否小于所述可见物件种类总数,若为小于,则跳转到获取所需渲染的所述新模型为待渲染模型步骤。
5.根据权利要求1所述的方法,其特征在于,将所述待渲染模型对应的所述第二矩阵组写到顶点着色器中之后,所述方法包括:遍历删除缓冲区,判断所述第二矩阵是否在所述删除缓冲区中,若为是,则将所述第二矩阵设置为零矩阵,对所述待渲染模型生成一次绘制指令。
6.根据权利要求1所述的方法,其特征在于,对所述待渲染模型生成一次绘制指令之后,所述方法包括:遍历添加缓冲区,将所述添加缓冲区中的所述第二矩阵写到所述顶点着色器中,对所述第二矩阵对应的所述新模型生成一次绘制指令。
7.根据权利要求1所述的方法,其特征在于,所述物件种类包括植被种类,所述物件参数信息包括物件的种类、数量,位置和方向信息。
8.一种大规模相同物件渲染的系统,其特征在于,所述系统包括合成模块、划分模块、检测模块和绘制指令模块,
所述合成模块,用于获取待渲染场景,统计所述待渲染场景中的物件种类总数,对所述物件用预设数目的同一种类物件合成新模型;
所述划分模块,用于利用四叉树对所述待渲染场景进行划分,得到待渲染信息,将所述四叉树节点包含的所述物件参数信息保存成第一矩阵,将所述第一矩阵组保存到文件中,其中,所述新模型包括所述预设数目的所述第一矩阵,为第一矩阵组;
所述检测模块,用于对所述待渲染信息进行可见性检测,根据所述可见性检测结果得到可见四叉树节点,根据所述可见四叉树节点得到可见物件种类,所述可见物件种类对应的所述第一矩阵组为第二矩阵组;
所述绘制指令模块,用于获取所需渲染的所述新模型为待渲染模型,将所述待渲染模型对应的所述第二矩阵组写到顶点着色器中,对所述待渲染模型生成一次绘制指令。
9.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行权利要求1至7中任一项所述的大规模相同物件渲染的方法。
10.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1至7中任一项所述的大规模相同物件渲染的方法。
技术总结