掌桥专利:专业的专利平台
掌桥专利
首页

一种优化大批量节点数据上传的方法及系统

文献发布时间:2024-04-18 19:59:31


一种优化大批量节点数据上传的方法及系统

技术领域

本发明涉及数据传输技术领域,具体涉及一种优化大批量节点数据上传的方法及系统。

背景技术

在进行图形渲染时,往往在一帧之内进行多次CPU到GPU的通信,将数据从内存上传到显存以供GPU进行渲染。但这种数据传输操作对性能消耗很大,因此在渲染时,渲染引擎都尽可能减少不必要的CPU到GPU的数据传输操作,以提升性能。

现有的节点数据长传方法是在渲染时,根据当前节点使用的着色器程序(WebGLProgram)、节点材质(Material)以及相机(Camera)与上一个渲染节点使用的相比是否发生了变化来减少冗余的数据上传操作。这种更新策略,缓存判断粒度还是较大,比如切换着色器程序不一定要刷新灯光数据、相机数据;同时没有对数据进行详细的分类,导致数据更新时会有牵一发而动全身的冗余数据更新,在轮询中这样的冗余操作多了之后,对性能造成了严重的影响。此外,由于只依据与上一个节点的比较结果判断是否重新上传,在一些情况下会导致更新策略失效。例如,当场景中只有两类着色器程序在交替渲染,在这种更新策略下,每次渲染都会进行数据上传的操作,更新策略就失效了,渲染性能就会严重下降。

因此,现有技术还存在更新策略粒度过大,只依据与上一个节点的比较结果,来判断是否更新,易导致更新策略失效,及渲染数据分类太过笼统的问题。

发明内容

有鉴于此,本发明提出一种优化大批量节点数据上传的方法及系统,按照数据更新频率细化了渲染数据的分类,配合优化之后的更新策略,减少了每帧之内的冗余数据更新,CPU到GPU的数据传输操作,提高了渲染性能。

本发明第一方面提出的一种优化大批量节点数据上传的方法,该方法包括:渲染前,根据数据更新频率和数据相关度,分类收集渲染相关数据,其中,所述渲染相关数据包括场景数据、相机数据和灯光数据;渲染时,获取当前渲染的节点使用的着色器程序所使用的渲染数据,基于收集到的所述渲染相关数据,更新当前渲染的节点使用的着色器程序所使用的渲染数据,并将更新后的渲染数据重新上传。

进一步的,所述根据数据更新频率和数据相关度,分类收集渲染相关数据包括:根据数据更新频率和数据相关度,分别从场景中、相机中以及场景中的所有灯光对象中对场景数据、相机数据和灯光数据进行单独提取和整理,并分别标记场景数据、相机数据和灯光数据的版本号。

进一步的,所述场景数据是从场景中提取、整理出的锚点矩阵、采样设置、对数深度设置、雾效及全局反射图设置、剪裁面设置的渲染相关数据及设置的数据集合。

进一步的,所述相机数据是从相机中提取、整理出的相机远近平面设置、对数深度设置、投影矩阵数据、视图矩阵数据、相机位置数据、视口设置的渲染相关数据及设置的数据集合。

进一步的,所述灯光数据是从场景中的所有灯光对象中提取、整理出的环境光设置、平行光设置、点光源设置、聚光灯设置的渲染相关数据及设置的数据集合。

进一步的,所述渲染时,获取当前渲染的节点使用的着色器程序所使用的渲染数据,基于收集到的所述渲染相关数据,更新当前渲染的节点使用的着色器程序所使用的渲染数据包括:渲染时,获取并记录当前渲染的节点使用的着色器程序所使用的渲染数据,包括灯光数据、相机数据及场景数据;基于收集到的渲染相关数据及标记的版本号,判断当前渲染的节点使用的着色器程序所使用的渲染数据是否为收集到的渲染相关数据,若不是,则更新当前渲染的节点使用的着色器程序所使用的渲染数据;或者,判断当前渲染的节点使用的着色器程序所使用的渲染数据版本是否发生了变化,若渲染数据版本发生了变化,则更新当前渲染的节点使用的着色器程序所使用的渲染数据。

进一步的,所述判断当前渲染的节点使用的着色器程序所使用的渲染数据是否为收集到的渲染相关数据包括:根据当前渲染的节点使用的着色器程序所使用的灯光数据和收集到的渲染相关数据中的灯光数据,判断当前渲染的节点使用的着色器程序所使用的灯光数据是否为收集到的渲染相关数据中的灯光数据;若当前渲染的节点使用的着色器程序所使用的灯光数据不是收集到的渲染相关数据中的灯光数据,则对灯光数据进行更新;根据当前渲染的节点使用的着色器程序所使用的相机数据和收集到的渲染相关数据中的相机数据,判断当前渲染的节点使用的着色器程序所使用的相机数据是否为收集到的渲染相关数据中的相机数据;若当前渲染的节点使用的着色器程序所使用的相机数据不是收集到的渲染相关数据中的相机数据,则对相机数据进行更新;根据当前渲染的节点使用的着色器程序所使用的场景数据和收集到的渲染相关数据中的场景数据,判断当前渲染的节点使用的着色器程序所使用的场景数据是否为收集到的渲染相关数据中的场景数据;若当前渲染的节点使用的着色器程序所使用的场景数据不是收集到的渲染相关数据中的场景数据,则对场景数据进行更新。

进一步的,所述判断当前渲染的节点使用的着色器程序所使用的渲染数据版本是否发生了变化包括:将当前渲染的节点使用的着色器程序所使用的灯光数据版本号与收集到的渲染相关数据中的灯光数据版本号进行对比,判断当前渲染的节点使用的着色器程序所使用的灯光数据版本有无更新;若当前渲染的节点使用的着色器程序所使用的灯光数据版本有更新,则对灯光数据进行更新;将当前渲染的节点使用的着色器程序所使用的相机数据版本号与收集到的渲染相关数据中的相机数据版本号进行对比,判断当前渲染的节点使用的着色器程序所使用的相机数据版本有无更新;若当前渲染的节点使用的着色器程序所使用的相机数据版本有更新,则对相机数据进行更新;将当前渲染的节点使用的着色器程序所使用的场景数据版本号与收集到的渲染相关数据中的场景数据版本号进行对比,判断当前渲染的节点使用的着色器程序所使用的场景数据版本有无更新;若当前渲染的节点使用的着色器程序所使用的场景数据版本有更新,则对场景数据进行更新。

进一步的,该方法还包括:对材质数据进行分类;获取当前渲染的节点的材质数据,判断当前渲染的节点的材质数据与上一节点的材质数据相比是否发生改变;若发生改变,则按分类结果依次更新材质数据,并按分类结果重新上传更新后的材质数据。

本发明第二方面提供一种优化大批量节点数据上传的系统,该系统包括:处理器和存储器;所述存储器上存储有可被所述处理器执行的计算机可读程序;所述处理器执行所述计算机可读程序时实现如上所述的优化大批量节点数据上传的方法中的步骤。

上述的优化大批量节点数据上传的方法及系统,对着色器程序使用的灯光、相机、场景数据进行了记录,并使用版本号控制对渲染数据进行了标脏,只有当着色器程序改变了使用过的灯光、相机、场景数据或者数据版本发生了变化,本实施例才会进行相关更新,以解决一切换着色器程序就会大范围更新的问题。

附图说明

为了说明而非限制的目的,现在将根据本发明的优选实施例、特别是参考附图来描述本发明,其中:

图1是本发明实施例提供的一种优化大批量节点数据上传的方法的流程图;

图2是本发明实施例提供的分类收集渲染相关数据的流程图;

图3是本发明实施例提供的更新当前渲染的节点使用的着色器程序所使用的渲染数据的流程图。

具体实施方式

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

在下面的描述中阐述了很多具体细节以便于充分理解本发明,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。

图1是本发明实施例提出的一种优化大批量节点数据上传的方法的流程图。下面结合附图,对本发明实施例提出的一种优化大批量节点数据上传的方法进行详细说明。

请参阅图1,该优化大批量节点数据上传的方法包括以下步骤:

S100,渲染前,根据数据更新频率和数据相关度,分类收集渲染相关数据,其中,渲染相关数据包括场景数据、相机数据和灯光数据。

本实施例中,在渲染开始前,收集整理渲染相关数据,该渲染相关数据包括场景数据(SceneData)、相机数据(CameraData)、灯光数据(LightData)这三大类数据。根据数据更新频率以及数据相关度分别从场景中、相机中以及场景中的所有灯光对象中对场景数据、相机数据和灯光数据进行单独提取和整理。这三类数据都属于全局设置,是对所有的渲染节点生效的,故其更新频率较低,只需要每帧渲染前更新上传至少一次即可。当然也会有其中某部分数据根据当前渲染的节点材质的设置调整更新和上传的策略,但只涉及到其中的部分数据(例如:在渲染一些设置了不接受光照的节点材质时,就不需要更新上传灯光数据),所以本实施例根据数据相关性进行的二次分类很好的限制了数据的影响范围。

图2是本发明实施例提供的分类收集渲染相关数据的流程图。请参阅图2,本实施例中,分类收集渲染相关数据的具体实现方式如下:

S110,从场景中提取和整理场景数据,并标记场景数据版本号。

本实施例中,场景数据(SceneData)是从场景(Scene)中提取、整理出的锚点矩阵、采样设置、对数深度设置、雾效及全局反射图设置、剪裁面设置的渲染相关数据及设置的数据集合,同时标记场景数据版本号,使用版本号标记该场景数据的更新。

S120,从相机中提取和整理相机数据,并标记相机数据版本号。

本实施例中,相机数据(CameraData)是从相机(Camera)中提取、整理出的相机远近平面设置、对数深度设置、投影矩阵数据、视图矩阵数据、相机位置数据、视口设置的渲染相关数据及设置的数据集合,同时标记相机数据版本号,使用版本号标记该相机数据的更新。

S130,从场景中的所有灯光对象中提取和整理灯光数据,并标记灯光数据版本号。

本实施例中,灯光数据(LightData)是从场景中的所有灯光对象中提取、整理出的环境光设置、平行光设置、点光源设置、聚光灯设置的渲染相关数据及设置的数据集合,同时标记灯光数据版本号,使用版本号标记该灯光数据的更新。

本实施例,在渲染开始前,分类收集整理场景数据、相机数据、灯光数据,以便于渲染是判断着色器程序是否改变了使用过的灯光、相机、场景数据,更新变化后的相关数据,解决了更新策略粒度过大,着色器程序大范围更新的问题。

为了解决渲染数据分类太过笼统的问题,并配合上面细分的更新策略,本实施例对渲染数据在原来的基础上根据更新频率,进行了更进一步的细分,细化了更新数据。

S200,渲染时,获取当前渲染的节点使用的着色器程序所使用的渲染数据,基于收集到的渲染相关数据,更新当前渲染的节点使用的着色器程序所使用的渲染数据,并将更新后的渲染数据重新上传。

本实施例中,渲染时,获取并记录当前渲染的节点使用的着色器程序所使用的渲染数据,包括灯光数据、相机数据及场景数据;然后,基于收集到的渲染相关数据,判断当前渲染的节点使用的着色器程序所使用的渲染数据是否为收集到的渲染相关数据,若不是,则更新当前渲染的节点使用的着色器程序所使用的渲染数据,并将更新后的渲染数据重新上传。

图3是本发明实施例提供的更新当前渲染的节点使用的着色器程序所使用的渲染数据的流程图。请参阅图3,基于收集到的渲染相关数据,更新当前渲染的节点使用的着色器程序所使用的渲染数据的具体实现方式如下:

S210,判断当前渲染的节点使用的着色器程序所使用的灯光数据或者灯光数据版本是否发生了变化,若当前渲染的节点使用的着色器程序所使用的灯光数据或者灯光数据版本发生了变化,则对灯光数据进行更新,并将更新后的灯光数据重新上传。

本实施例中,首先,根据当前渲染的节点使用的着色器程序所使用的灯光数据和收集到的渲染相关数据中的灯光数据,判断当前渲染的节点使用的着色器程序所使用的灯光数据是否为收集到的渲染相关数据中的灯光数据,或者判断当前渲染的节点使用的着色器程序所使用的灯光数据版本有无更新;若当前渲染的节点使用的着色器程序所使用的灯光数据不是收集到的渲染相关数据中的灯光数据,或者当前渲染的节点使用的着色器程序所使用的灯光数据版本有更新,则对灯光数据进行更新,并将重新向GPU上传灯光数据。

本实施例中,当前渲染的节点使用的着色器程序所使用的灯光数据不是收集到的渲染相关数据中的灯光数据时,对灯光数据进行更新的实现方式为:

将收集到的渲染相关数据中的灯光数据更新为当前渲染的节点使用的着色器程序所使用的灯光数据。从而使得当前渲染的节点使用的着色器程序使用的是收集到的渲染相关数据中的灯光数据。

本实施例中,当前渲染的节点使用的着色器程序所使用的灯光数据版本有更新,对灯光数据进行更新的实现方式为:

将收集到的渲染相关数据中的灯光数据更新为当前渲染的节点使用的着色器程序所使用的灯光数据,并将收集到的渲染相关数据中的灯光数据版本作为当前渲染的节点使用的着色器程序所使用的灯光数据版本。使用收集到的渲染相关数据中的灯光数据版本号标记当前渲染的节点使用的着色器程序使用的灯光数据的更新。

S220,判断当前渲染的节点使用的着色器程序所使用的相机数据或者相机数据版本是否发生了变化,若当前渲染的节点使用的着色器程序所使用的相机数据或者相机数据版本发生了变化,则对灯光数据进行更新,并将更新后的相机数据重新上传。

本实施例中,根据当前渲染的节点使用的着色器程序所使用的相机数据和收集到的渲染相关数据中的相机数据,判断当前渲染的节点使用的着色器程序所使用的相机数据是否为收集到的渲染相关数据中的相机数据,或者判断当前渲染的节点使用的着色器程序所使用的相机数据版本有无更新;若当前渲染的节点使用的着色器程序所使用的相机数据不是收集到的渲染相关数据中的相机数据,或者当前渲染的节点使用的着色器程序所使用的相机数据版本有更新,则对相机数据进行更新,并将重新向GPU上传相机数据。

本实施例中,当前渲染的节点使用的着色器程序所使用的相机数据不是收集到的渲染相关数据中的相机数据时,对相机数据进行更新的实现方式为:

将收集到的渲染相关数据中的相机数据更新为当前渲染的节点使用的着色器程序所使用的相机数据。从而使得当前渲染的节点使用的着色器程序使用的是收集到的渲染相关数据中的相机数据。

本实施例中,当前渲染的节点使用的着色器程序所使用的相机数据版本有更新,对相机数据进行更新的实现方式为:

将收集到的渲染相关数据中的相机数据更新为当前渲染的节点使用的着色器程序所使用的相机数据,并将收集到的渲染相关数据中的相机数据版本作为当前渲染的节点使用的着色器程序所使用的相机数据版本。使用收集到的渲染相关数据中的相机数据版本号标记当前渲染的节点使用的着色器程序使用的相机数据的更新。

S230,判断当前渲染的节点使用的着色器程序所使用的场景数据或者场景数据版本是否发生了变化,若当前渲染的节点使用的着色器程序所使用的场景数据或者场景数据版本发生了变化,则对场景数据进行更新,并将更新后的场景数据重新上传。

本实施例中,根据当前渲染的节点使用的着色器程序所使用的场景数据和收集到的渲染相关数据中的场景数据,判断当前渲染的节点使用的着色器程序所使用的场景数据是否为收集到的渲染相关数据中的场景数据,或者判断当前渲染的节点使用的着色器程序所使用的场景数据版本有无更新;若当前渲染的节点使用的着色器程序所使用的场景数据不是收集到的渲染相关数据中的场景数据,或者当前渲染的节点使用的着色器程序所使用的场景数据版本有更新,则对场景数据进行更新,并将重新向GPU上传场景数据。

本实施例中,当前渲染的节点使用的着色器程序所使用的场景数据不是收集到的渲染相关数据中的场景数据时,对场景数据进行更新的实现方式为:

将收集到的渲染相关数据中的场景数据更新为当前渲染的节点使用的着色器程序所使用的场景数据。从而使得当前渲染的节点使用的着色器程序使用的是收集到的渲染相关数据中的场景数据。

本实施例中,当前渲染的节点使用的着色器程序所使用的场景数据版本有更新,对场景数据进行更新的实现方式为:

将收集到的渲染相关数据中的场景数据更新为当前渲染的节点使用的着色器程序所使用的场景数据,并将收集到的渲染相关数据中的场景数据版本作为当前渲染的节点使用的着色器程序所使用的场景数据版本。使用收集到的渲染相关数据中的场景数据版本号标记当前渲染的节点使用的着色器程序使用的场景数据的更新。

为了解决更新策略粒度过大、只依据与上一个节点的比较结果,判断是否更新所带来的问题,本发明实施例对着色器程序使用的灯光、相机、场景数据进行了记录,并使用版本号控制对渲染数据进行了标脏,只有当着色器程序改变了使用过的灯光、相机、场景数据或者数据版本发生了变化,本实施例才会进行相关更新,以解决一切换着色器程序就会大范围更新的问题。

本实施例中,在渲染时,对着色器程序使用的灯光数据、相机、数据场景数据进行了记录,并使用版本号标记着色器程序使用的灯光数据、相机、数据场景数据的更新。

S240,根据当前渲染的节点的材质数据和上一节点的材质数据,更新材质数据并重新分类上传。

本实施例中,将材质数据进行了分类,包括用户自定义的数据、节点的世界矩阵、材质的内置数据、以及其他内置数据。首先,获取当前渲染的节点的材质数据,判断当前渲染的节点材质数据与上一节点的材质数据相比是否发生改变,若发生改变,则按分类结果依次更新材质数据,并将按分类结果重新向GPU上传材质数据。

本发明实施例提出的优化大批量节点数据上传的方法,优化了渲染数据的更新策略,对着色器程序使用过的灯光数据、相机数据、场景数据进行了记录,并使用版本号控制对灯光数据、相机数据、场景数据进行了标记,只有当着色器程序改变了使用过的灯光数据、相机数据、场景数据或者数据版本发生了变化,才会进行相对应数据的更新,而不是只依据与上一个节点的比较结果进行整体更新,解决了一切换着色器程序,就会大范围更新的问题。

本发明实施例提出的优化大批量节点数据上传的方法,按照数据更新频率细化了渲染数据的分类,配合优化之后的更新策略,减少了每帧之内的冗余数据更新,CPU到GPU的数据传输操作,提高了渲染性能。

本申请实施例还提供一种优化大批量节点数据上传的系统,该系统包括:处理器和存储器;所述存储器上存储有可被所述处理器执行的计算机可读程序;所述处理器执行所述计算机可读程序时实现如上述技术方案中任一项所述的优化大批量节点数据上传的方法中的步骤。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

技术分类

06120116521788