渲染对象的材质替换方法和材质替换装置与流程

文档序号:11135368阅读:406来源:国知局
渲染对象的材质替换方法和材质替换装置与制造工艺

本发明涉及三维显示技术领域,具体而言,涉及一种渲染对象的材质替换方法和一种渲染对象的材质替换装置。



背景技术:

临时改模型中渲染对象的材质是三维显示引擎最基本的功能。在三维BIM(Building Information Modeling,建筑信息模型)应用中,全专业模型包含大量的构件,构件之间存在互相遮挡的情况。在模型中包含大量的渲染对象,渲染对象之间存在互相遮挡的情况。为了便于查看模型,经常需要按照楼层、专业、渲染对象类别、分类编码等条件把一些渲染对象临时设置为半透明,在某个条件下又恢复渲染对象原来的材质。

在相关技术中,临时设置模型的材质普遍的做法是在模型上或其他地方临时保存渲染对象原有的材质,然后再替换渲染对象的材质。当需要恢复渲染对象的材质的时候,从临时保存的材质列表中恢复渲染对象的材质。在三维显示引擎生成渲染对象的时候直接使用模型上的材质作为渲染对象最终显示的材质。

上述修改渲染对象的材质的方案具有如下缺点:1)需要遍历所有的渲染对象才能查找到满足替换材质条件的渲染对象,在计算性能比较低的环境,如Web浏览器中,这样可能会引起Web浏览器停止响应;2)为了能够恢复渲染对象原始的材质,需要额外的空间维护原始的材质。

因此,如何优化渲染对象进行材质替换时的性能,同时避免占用额外的空间来维护渲染对象原始的材质成为亟待解决的技术问题。



技术实现要素:

本发明正是基于上述问题,提出了一种新的技术方案,可以优化渲染对象进行材质替换时的性能,同时避免占用额外的空间来维护渲染对象原始的材质。

有鉴于此,本发明的第一方面提出了一种渲染对象的材质替换方法,包括:为多个渲染对象中的每个渲染对象定义扩展属性;根据对所述多个渲染对象进行材质替换的条件和所述每个渲染对象的所述扩展属性,生成至少一个材质替换器;在接收到替换所述多个渲染对象中的任一渲染对象的材质的信号时,根据所述至少一个材质替换器和所述任一渲染对象的所述扩展属性,对所述任一渲染对象的材质进行替换。

在该技术方案中,首先,上述方案适用于在内存资源受限的环境下模型的部分加载和动态管理,如计算性能比较低的Web浏览器和移动终端,由于不需要遍历所有的渲染对象来进行材质替换,从而降低了Web浏览器或移动终端停止响应的次数,优化渲染对象进行材质替换时的性能。其次,本方案不需要额外的空间来保存新的材质。最后,通过定义渲染对象的扩展属性,方便用户增加自定义属性,并把自定义属性与过滤条件结合,因此具有很高的可扩展性。

在上述技术方案中,优选地,所述扩展属性包括属性名字和属性值。

在上述任一技术方案中,优选地,所述根据所述至少一个材质替换器和所述任一渲染对象的所述扩展属性,对所述任一渲染对象的材质进行替换的步骤,具体包括:判断所述任一渲染对象的属性名字和属性值是否满足预设条件,其中,所述预设条件为:所述任一渲染对象的属性名字在所述至少一个材质替换器中的任一材质替换器中,所述任一渲染对象的属性值在所述任一材质替换器的值集合中;若所述任一渲染对象的属性名字和属性值均满足所述预设条件,则将所述任一渲染对象的材质替换为所述任一材质替换器中的材质;若所述任一渲染对象的属性名字或者属性值不满足所述预设条件,则保持所述任一渲染对象的材质不变。

在该技术方案中,通过比较任一渲染对象的属性名字是否存在至少一个材质替换器中,若任一渲染对象的属性名字在任一材质替换器中,比较任一渲染对象的属性值是否在任一材质替换器的值集合中,若存在,则将任一渲染对象的材质替换为任一材质替换器中的材质。通过上述技术方案,避免遍历所有的渲染对象来替换渲染对象的材质,从而优化渲染对象进行材质替换时的性能。

在上述任一技术方案中,优选地,还包括:使用哈希表存储所述扩展属性的属性名字和属性值。

在该技术方案中,使用哈希表存储属性名字和属性值,查找的时间复杂度为0(1),从而有效地提高了扩展属性的查找速度。

在上述任一技术方案中,优选地,所述任一渲染对象为所述多个渲染对象中的未被视锥剔除的渲染对象。

在该技术方案中,在渲染对象进行视锥剔除之后,对未被视锥剔除的渲染对象进行材质替换,可见,参与过滤的渲染对象并不是所有的渲染对象,从而有效地提高了渲染对象进行材质替换的速度。尤其在查看模型局部的时候,材质替换的速度提高的非常明显。

本发明的第二方面提出了一种渲染对象的材质替换装置,包括:定义单元,用于为多个渲染对象中的每个渲染对象定义扩展属性;生成单元,用于根据对所述多个渲染对象进行材质替换的条件和所述每个渲染对象的所述扩展属性,生成至少一个材质替换器;材质替换单元,用于在接收到替换所述多个渲染对象中的任一渲染对象的材质的信号时,根据所述至少一个材质替换器和所述任一渲染对象的所述扩展属性,对所述任一渲染对象的材质进行替换。

在该技术方案中,首先,上述方案适用于在内存资源受限的环境下模型的部分加载和动态管理,如计算性能比较低的Web浏览器和移动终端,由于不需要遍历所有的渲染对象来进行材质替换,从而降低了Web浏览器或移动终端停止响应的次数,优化渲染对象进行材质替换时的性能。其次,本方案不需要额外的空间来保存新的材质。最后,通过定义渲染对象的扩展属性,方便用户增加自定义属性,并把自定义属性与过滤条件结合,因此具有很高的可扩展性。

在上述任一技术方案中,优选地,所述扩展属性包括属性名字和属性值。

在上述任一技术方案中,优选地,所述材质替换单元包括:判断子单元,用于判断所述任一渲染对象的属性名字和属性值是否满足预设条件,其中,所述预设条件为:所述任一渲染对象的属性名字在所述至少一个材质替换器中的任一材质替换器中,所述任一渲染对象的属性值在所述任一材质替换器的值集合中;替换子单元,用于在所述判断子单元判定所述任一渲染对象的属性名字和属性值均满足所述预设条件的情况下,将所述任一渲染对象的材质替换为所述任一材质替换器中的材质;所述替换子单元还用于,在所述任一渲染对象的属性名字或者属性值不满足所述预设条件的情况下,保持所述任一渲染对象的材质不变。

在该技术方案中,通过比较任一渲染对象的属性名字是否存在至少一个材质替换器中,若任一渲染对象的属性名字在任一材质替换器中,比较任一渲染对象的属性值是否在任一材质替换器的值集合中,若存在,则将任一渲染对象的材质替换为任一材质替换器中的材质。通过上述技术方案,避免遍历所有的渲染对象来替换渲染对象的材质,从而优化渲染对象进行材质替换时的性能。

在上述任一技术方案中,优选地,还包括:存储单元,用于使用哈希表存储所述扩展属性的属性名字和属性值。

在该技术方案中,使用哈希表存储属性名字和属性值,查找的时间复杂度为0(1),从而有效地提高了扩展属性的查找速度。

在上述任一技术方案中,优选地,所述任一渲染对象为所述多个渲染对象中的未被视锥剔除的渲染对象。

在该技术方案中,在渲染对象进行视锥剔除之后,对未被视锥剔除的渲染对象进行材质替换,可见,参与过滤的渲染对象并不是所有的渲染对象,从而有效地提高了渲染对象进行材质替换的速度。尤其在查看模型局部的时候,材质替换的速度提高的非常明显。

通过本发明的技术方案,可以优化渲染对象进行材质替换时的性能,同时避免占用额外的空间来维护渲染对象原始的材质。

附图说明

图1示出了根据本发明的实施例的渲染对象的材质替换方法的流程示意图;

图2示出了根据本发明的实施例的渲染对象的材质替换装置的结构示意图。

具体实施方式

为了可以更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。

图1示出了根据本发明的实施例的渲染对象的材质替换方法的流程示意图。

如图1所示,根据本发明的实施例的渲染对象的材质替换方法,包括:

步骤102,为多个渲染对象中的每个渲染对象定义扩展属性。

扩展属性:添加在渲染对象上的自定义属性,一个渲染对象上可以添加若干条不重名的扩展属性。

渲染对象:在三维显示引擎中模型在空间中以空间节点保存,在绘制的时候会根据模型的矩阵变换、材质构造可以被渲染引擎渲染的对象。

扩展属性的个数根据业务需要动态增加,可以在模型轻量化的过程中为渲染对象设置扩展属性,序列化到场景文件中。

步骤104,根据对所述多个渲染对象进行材质替换的条件和所述每个渲染对象的所述扩展属性,生成至少一个材质替换器。

对多个渲染对象进行材质替换的条件是用户定义。

步骤106,在接收到替换所述多个渲染对象中的任一渲染对象的材质的信号时,根据所述至少一个材质替换器和所述任一渲染对象的所述扩展属性,对所述任一渲染对象的材质进行替换。

渲染对象的材质:用来描述模型外观显示效果的材质,比如颜色、光照效果等。

在该技术方案中,首先,上述方案适用于在内存资源受限的环境下模型的部分加载和动态管理,如计算性能比较低的Web浏览器和移动终端,由于不需要遍历所有的渲染对象来进行材质替换,从而降低了Web浏览器或移动终端停止响应的次数,优化渲染对象进行材质替换时的性能。其次,本方案不需要额外的空间来保存新的材质。最后,通过定义渲染对象的扩展属性,方便用户增加自定义属性,并把自定义属性与过滤条件结合,因此具有很高的可扩展性。

在上述技术方案中,优选地,所述扩展属性包括属性名字和属性值。

在该技术方案中,扩展属性的属性名字不重复,属性值使用字符串类型,每个渲染对象可以有一个或多个扩展属性,扩展属性的个数可以根据业务需求动态增加,可以在模型轻量化的过程中为渲染对象设置扩展属性,序列化到场景文件中。

例如,使用JSON格式描述的渲染对象Id为10000的扩展属性。该渲染对象有LevelId、CategoryId和FileId三个扩展属性:

材质替换器由替换材质ID、属性名字和属性值的集合组成。比如新增一个同时替换1和2楼的模型的材质替换器可以用JavaScript这样定义:

var overriders={};

overriders[“LevelId”]={}

overriders[“LevelId”][“L1”]=newMaterialId;

overriders[“LevelId”][“L2”]=newMaterialId;

使用扩展属性的名字作为材质替换器的属性名字,使用扩展属性的值作为属性的属性名字。

在上述任一技术方案中,优选地,所述根据所述至少一个材质替换器和所述任一渲染对象的所述扩展属性,对所述任一渲染对象的材质进行替换的步骤,具体包括:判断所述任一渲染对象的属性名字和属性值是否满足预设条件,其中,所述预设条件为:所述任一渲染对象的属性名字在所述至少一个材质替换器中的任一材质替换器中,所述任一渲染对象的属性值在所述任一材质替换器的值集合中;若所述任一渲染对象的属性名字和属性值均满足所述预设条件,则将所述任一渲染对象的材质替换为所述任一材质替换器中的材质;若所述任一渲染对象的属性名字或者属性值不满足所述预设条件,则保持所述任一渲染对象的材质不变。

在该技术方案中,在渲染对象添加到渲染队列之前,通过比较任一渲染对象的属性名字是否存在至少一个材质替换器中,若任一渲染对象的属性名字在任一材质替换器中,比较任一渲染对象的属性值是否在任一材质替换器的值集合中,若存在,则将任一渲染对象的材质替换为任一材质替换器中的材质。通过上述技术方案,避免遍历所有的渲染对象来替换渲染对象的材质,从而优化渲染对象进行材质替换时的性能。

渲染队列:显示引擎中需要渲染对象的列表,只有在渲染队列中的渲染对象才能够被绘制。

在上述任一技术方案中,优选地,还包括:使用哈希表存储所述扩展属性的属性名字和属性值。

在该技术方案中,使用哈希表存储属性名字和属性值,查找的时间复杂度为0(1),从而有效地提高了扩展属性的查找速度。

在上述任一技术方案中,优选地,所述任一渲染对象为所述多个渲染对象中的未被视锥剔除的渲染对象。

在该技术方案中,在渲染对象进行视锥剔除之后,对未被视锥剔除的渲染对象进行材质替换,可见,参与过滤的渲染对象并不是所有的渲染对象,从而有效地提高了渲染对象进行材质替换的速度。尤其在查看模型局部的时候,材质替换的速度提高的非常明显。

下面对视锥剔除进行解释。在相机界面中有近裁界面、远裁界面以及上、下、左、右四个界面,由该六个界面组成了视锥体,将视锥体内不可见的渲染对象剔除掉,视锥体内可见的渲染对象保留,保留的渲染对象即为未被视锥剔除的渲染对象。

图2示出了根据本发明的实施例的渲染对象的材质替换装置的结构示意图。

如图2所示,根据本发明的实施例的渲染对象的材质替换装置200,包括:定义单元202、生成单元204和材质替换单元206。

定义单元202,用于为多个渲染对象中的每个渲染对象定义扩展属性;生成单元204,用于根据对所述多个渲染对象进行材质替换的条件和所述每个渲染对象的所述扩展属性,生成至少一个材质替换器;材质替换单元206,用于在接收到替换所述多个渲染对象中的任一渲染对象的材质的信号时,根据所述至少一个材质替换器和所述任一渲染对象的所述扩展属性,对所述任一渲染对象的材质进行替换。

在该技术方案中,首先,上述方案适用于在内存资源受限的环境下模型的部分加载和动态管理,如计算性能比较低的Web浏览器和移动终端,由于不需要遍历所有的渲染对象来进行材质替换,从而降低了Web浏览器或移动终端停止响应的次数,优化渲染对象进行材质替换时的性能。其次,本方案不需要额外的空间来保存新的材质。最后,通过定义渲染对象的扩展属性,方便用户增加自定义属性,并把自定义属性与过滤条件结合,因此具有很高的可扩展性。

在上述任一技术方案中,优选地,所述扩展属性包括属性名字和属性值。

在上述任一技术方案中,优选地,所述材质替换单元206包括:判断子单元2062,用于判断所述任一渲染对象的属性名字和属性值是否满足预设条件,其中,所述预设条件为:所述任一渲染对象的属性名字在所述至少一个材质替换器中的任一材质替换器中,所述任一渲染对象的属性值在所述任一材质替换器的值集合中;替换子单元2064,用于在所述判断子单元2062判定所述任一渲染对象的属性名字和属性值均满足所述预设条件的情况下,将所述任一渲染对象的材质替换为所述任一材质替换器中的材质;所述替换子单元2064还用于,在所述任一渲染对象的属性名字或者属性值不满足所述预设条件的情况下,保持所述任一渲染对象的材质不变。

在该技术方案中,通过比较任一渲染对象的属性名字是否存在至少一个材质替换器中,若任一渲染对象的属性名字在任一材质替换器中,比较任一渲染对象的属性值是否在任一材质替换器的值集合中,若存在,则将任一渲染对象的材质替换为任一材质替换器中的材质。通过上述技术方案,避免遍历所有的渲染对象来替换渲染对象的材质,从而优化渲染对象进行材质替换时的性能。

在上述任一技术方案中,优选地,渲染对象的材质替换装置200还包括:存储单元208,用于使用哈希表存储所述扩展属性的属性名字和属性值。

在该技术方案中,使用哈希表存储属性名字和属性值,查找的时间复杂度为0(1),从而有效地提高了扩展属性的查找速度。

在上述任一技术方案中,优选地,所述任一渲染对象为所述多个渲染对象中的未被视锥剔除的渲染对象。

在该技术方案中,在渲染对象进行视锥剔除之后,对未被视锥剔除的渲染对象进行材质替换,可见,参与过滤的渲染对象并不是所有的渲染对象,从而有效地提高了渲染对象进行材质替换的速度。尤其在查看模型局部的时候,材质替换的速度提高的非常明显。

在本发明中,术语“第一”、“第二”仅用于描述的目的,而不能理解为指示或暗示相对重要性;术语“多个”表示两个或两个以上。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。

以上结合附图详细说明了本发明的技术方案,通过本发明的技术方案,可以优化渲染对象进行材质替换时的性能,同时避免占用额外的空间来维护渲染对象原始的材质。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1