本发明一般涉及光源管理系统,尤其是涉及一种次世代游戏渲染引擎的光源管理系统、装置及其方法。
背景技术:
:一般的次世代游戏引擎,当使用逐像素光照时批数明显增多,这是由于这个技术的实现方式引起的。这个算法要渲染一遍环境,其目的是为这帧应用全局环境项和建立深度缓冲区。还必须对每个光源求出两个值:阴影项和光照贡献值。一般采用延伸模板体或阴影映射来计算阴影项,这两者对每个物体都至少要渲染一个批。阴影项求出后,为了应用光照的贡献,必须再次渲染光源影响到的各个物体(包含某些在阴影中已经被适当地标出的物体)。许多次世代逐像素光照的游戏,均是试图批化场景并进行有效地渲染。结果,由于场景中的光源数,这种新技术所需的批数使早先的问题显得更加严重,以致更加难以有效渲染,使得渲染效率大大降低。技术实现要素:为了克服上述技术缺陷,本发明的目的在于提供一种次世代游戏渲染引擎的光源管理系统,其可以实现快速且有效地渲染,渲染效率大大地增加。为了实现上述技术优点,本发明采用如下技术方案:一种次世代游戏渲染引擎的光源管理系统的方法,包括以下步骤:a、确定可见性,根据实际情况,考虑场景的观察者和场景的每一个光源来确定可见性;b、根据步骤a得到的可见性来确定必须渲染的批数;c、利用逐像素光照的方法,对根据步骤b得到的批数进行渲染。作为上述技术方案的一种改进,其中,所述步骤a包括:a1、通过确定可见性的使用和借助集合的逻辑来确定可见性集合。作为上述技术方案的一种改进,其中,所述步骤a1包括:s1、在场景中,找出可见的物体,并将从摄像机的视点中可见的所有物体组成可见集合;s2、从每个可见光源的视点创建一个能够看见物体的光源集合;s3、根据s1和s2步骤分别得到的可见集合和光源集合,确定所需照明的物体的照明集合,照明集合既包含于可见集合,也包含于光源集合;s4、通过剔除开销和渲染的物体数,确定由能够向可见区域投射阴影的物体组成的阴影集合。作为上述技术方案的一种改进,其中,所述步骤b包括:根据所得到的阴影集合,对阴影集合中的阴影项来确定所需渲染的批数。作为上述技术方案的一种改进,其中,所述步骤c:根据确定的批数,对确定的阴影项进行渲染。作为上述技术方案的一种改进,其中,包括:可见性集合模块,用于利用可见性的使用和借助集合的逻辑来定义计算可见性;批数定义模块,用于利用可见性减少必须渲染的批数,从而改善性能;应用模块,用于渲染。作为上述技术方案的一种改进,其中,所述可见性集合模块包括:可见集合模块,用于定义可见集合;光源集合模块,用于确定光源集合;照明集合模块,用于确定照明集合;阴影集合模块,用于确定阴影集合。本发明提供一种次世代游戏渲染引擎的光源管理装置,其特征在于,包括:第一装置,用于通过确定可见性的使用和借助集合的逻辑来确定可见性集合;第二装置,用于通过根据所得到的阴影集合,对阴影集合中的阴影项来确定所需渲染的批数;第三装置,用于根据确定的批数,对确定的阴影项进行渲染。本发明的有益效果是:本发明提供的次世代游戏渲染引擎的光源管理系统,其可以实现快速且有效地渲染,渲染效率大大地增加。附图说明以下和其他优点和特征将从以下参考附图的实施例的详细描述中得到更充分的理解,附图必须以说明性和非限制性的方式来考虑,其中:图1为本发明的次世代游戏渲染引擎的光源管理系统的方法流程图;图2为本发明的在不可见的集合中的物体可以影响渲染的场景;图3为在不可见集合中的物体处在视角范围内的场景。具体实施方式以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。需要说明的是,如无特殊说明,当某一特征被称为“固定”、“连接”在另一个特征,它可以直接固定、连接在另一个特征上,也可以间接地固定、连接在另一个特征上。此外,本发明中所使用的上、下、左、右等描述仅仅是相对于附图中本发明各组成部分的相互位置关系来说的。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。此外,除非另有定义,本文所使用的所有的技术和科学术语与本
技术领域:
的技术人员通常理解的含义相同。本文说明书中所使用的术语只是为了描述具体的实施例,而不是为了限制本发明。本文所使用的术语“和/或”包括一个或多个相关的所列项目的任意的组合。应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种元件,但这些元件不应限于这些术语。这些术语仅用来将同一类型的元件彼此区分开。例如,在不脱离本公开范围的情况下,第一元件也可以被称为第二元件,类似地,第二元件也可以被称为第一元件。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”。本发明的申请文件针对现有技术的缺陷,对一般游戏渲染引擎光源管理系统实现的现状与造成的原因加以深入分析,分析光源管理系统有哪些流程上的特点,以及有哪些小粒度可重用的组件,总结了一套次世代游戏渲染引擎的光源管理系统,以达到大大提高游戏引擎的渲染效率,增强代码可维护性与可重用性,增强游戏的体验和表现。本发明研究可见性在渲染逐像素光照场景中所起的作用,具体应用在游戏领域,包括单机游戏、手机游戏和页面游戏等。在这里,主要考虑如何使用可见性来减少必须渲染的批数,从而改善渲染的性能。要尽量减少进入图形卡的批数,以避免变成受限于cpu的应用程序。本申请的技术方案中“批”是指任何一组多边形,把它送到图形卡时未通过状态变化打碎过它。例如,在direct3d中一个drawprimitive调用就代表一个批。从前批的减少就很重要,而对最新的gpu就更加重要了。gpu处理批越来越快,即在一个批里能够更快地处理多边形。但是把批送到图形处理器的速率却增加得非常缓慢。目前逐像素光照的趋势更使问题加剧,因为这会大量地增加渲染场景所要求的批数。逐像素的照明需要大量的批数和极高的填充率,所以要减少渲染的物体数和它们影响的屏幕面积。使用本申请的技术方案中所述的标准可见性算法和技术,可以充分地改善运行性能。不管在gpu上使用多少技巧和优化,最快的多边形仍然是没有渲染的那个。这意味着如果减少所渲染的批数,就可以在场景中加入更多的物体,或对物体使用更复杂的几何体和技术。如图1所示,本发明提供的次世代游戏渲染引擎的光源管理系统的方法,其包括以下步骤:a、确定可见性,根据实际情况,根据场景的观察者和场景的每一个光源来确定可见性;b、确定必须渲染的批数,根据步骤a得到的可见性来得到必须渲染的批数;c、对根据步骤b得到的批数进行渲染,利用逐像素光照的方法对得到的批数进行渲染。在本发明的一个实施例,优选地,其中,所述步骤a包括:a1、通过确定可见性的使用和借助集合的逻辑来确定可见性集合。为了使用可见性减少批数,先确定可见性的使用和借助集合的逻辑来定义运算可见性集合。然后介绍如何计算这些集合。可见性不只是考虑场景的观察者,而且也考虑场景的每个光源,因为如果光源不能够看见到一个物体,那个物体就不需要在光照中渲染。在本发明的一个实施例,优选地,其中,所述步骤a1包括:s1、在场景中,找出可见的物体,并将从摄像机的视点中可见的所有物体组成可见集合;s2、从每个可见光源的视点创建一个能够看见物体的光源集合;s3、根据s1和s2步骤分别得到的可见集合和光源集合,确定所需照明的物体的照明集合,照明集合既存在于可见集合,也存在于光源集合;s4、通过剔除开销和渲染的物体数,确定由能够向可见区域投射阴影的物体组成的阴影集合。首先需要确定的是可见集合,操作人员通过从摄像机的视点观察到的可见的所有物体定义为可见集合。每个渲染应用都可以确定各自的可见集合,以英文字母v来标记。具体地,需要光源和视口才能产生一个可见集合。可见集合要紧密到什么程度,确定这些集合应该花费多少处理时间,这取决于所开发的应用程序类型。至少确定可见性的算法应该执行锥体级的裁剪,和具有一定量物体级的遮挡。这种要求只是尺度问题。例如,如果标准的可见集合包含锥体中的10个物体,而30%的物体被遮挡,那么可以剔除3个物体。因为是针对场景中的光源使用可见性,所以看与光源相关的因素。如果每个光源的遮挡统计数相似,那么在真实场景中,就能够每帧少渲染数十个或甚至数百个物体。因此确定逐像素光照渲染的可见性系统时,应该考虑在锥体里的遮挡程度。由此可见,决定最佳的cpu时间对遮挡之比是一个平衡问题。其次需要确定光源集合。除了在场景中发现哪个物体是可见的,还需要在可见物体集合中进一步地确定光源集合。对于每个可见光源,必须从光源的视点创建另一个可见集合。英文字母l表示从光源的视点可以看见的物体集合,即光源集合l。大多数情况下,逐像素光照的解每次只使用一个光源,简单地在帧缓冲区进行累积结果。于是光源之间通常不存在相关性,所以对当前正在渲染的光源,每次只存在一个光源的可见集合。这个技术可以避免每次把所有的光源集合都存储在存储器中;但是通过简单地把结果累积进单个的照明集合内的方法,这个方法可扩展为在单个编程中渲染多个光源。在具体的操作中,对光源集合和可见集合的确定是相同的。点光源有一个完整的球形视域,因此不能简单地映射到平面上,而许多可见性算法是依赖于对平面的投射。解决这个问题的一个方案是把一个立方体放在光源周围,然后从光源的视点开始,对于立方体的每个面都执行可见性测试。因为需要对每个面做一次可见性检测,因此共做6次可见性检测;如果一个物体从多个面都可见,则不要重复地计入可见集合。一般来说,要考查可见性系统,如果它使用投射到平面上的形式,就要把它转换为没有任何投射的可见性系统,或实现一个专门查询点光源可见性的系统。既然己经为观察者和光源定义了可见性集合,并且能够建立可见集合v和光源集合l,这将减少在渲染中所画的物体数。有关照明集合的规定是,照明发生在既包含于v集合又包含于l集合中的物体集合上。这是由于只有光源能见到的物体,才需要为其提供照明并对其再次进行渲染;同时也只有在可见集合中的物体,才能在屏幕上看得到。为了对某物体集合进行照明需要再次对它进行渲染,因此,将该物体集合命名为照明集合,并标记为i。如果照明集合i是空的,就略去对该集合的渲染。这个规定可以很快且很简单地被应用,对处于视锥边界上的光源、半径非常大的光源,或遮挡在视锥中的光源,能够很好地被进行优化。然后是需要确定阴影集合。在本发明的一个实施例,优选地,其中,所述步骤b包括:根据所得到的阴影集合,对阴影集合中的阴影项来确定所需渲染的批数。对于光照已经把物体的集合减小到合理的范围内,再考虑将投射阴影的物体集合。阴影集合的确定需要在全面剔除的开销和渲染的物体数之间求得平衡。如图2所示,图2为在不可见的集合中的物体可以影响渲染的场景。在图2中,v为视点,w为物体,y为物体w投射进锥体内形成的影子,箭头为照射的灯光。有时在锥体状视角范围之外的物体w把其影子投进锥体之内,这可能影响最终的渲染图像。如图3所示,图3为在不可见集合中的物体处在视角范围内的场景。在图3中,v为视点,w为物体,y为物体w投身处锥体外的影子,z为遮挡物,箭头为照射的灯光。因此必须产生一个不同的组,叫做阴影集合s,它是一个光源集合l的子集合,它包括向可见区投射阴影的所有物体。在本发明的一个实施例,优选地,其中,所述步骤c:根据确定的批数,对确定的阴影项进行渲染。现在已经确定了用逐像素光照进行渲染所需要的所有集合。首先,从摄像机的视点得到可见集合v,为环境光遍而进行渲染。紧接着是对每个光源进行渲染。对每个光源确定光源集合l,并且由此产生集合i和集合s。集合s决定了光源的阴影项,然后对i集合内的每个物体应用光照渲染。如图3所示,一种次世代游戏渲染引擎的光源管理系统,其特征在于,包括:可见性集合模块,用于利用可见性的使用和借助集合的逻辑来定义计算可见性;批数定义模块,用于利用可见性减少必须渲染的批数,从而改善性能;应用模块,用于渲染所得到的批数。在本发明的一个实施例,优选地,其中,所述可见性集合模块包括:可见集合模块,用于定义可见集合;光源集合模块,用于确定光源集合;照明集合模块,用于确定照明集合;阴影集合模块,用于确定阴影集合。本发明提供的次世代游戏渲染引擎的光源管理装置,包括:第一装置,用于通过确定可见性的使用和借助集合的逻辑来确定可见性集合。第二装置,用于通过根据所得到的阴影集合,对阴影集合中的阴影项来确定所需渲染的批数。第三装置,用于根据确定的批数,对确定的阴影项进行渲染。本申请的技术方案在现有系统中得到实现,并对运行性能具有显著的改进。场景1单位化帧率批数场景2单位化帧率批数基于视域锥体的可见性0.871171基于视域锥体的可见性0.561414可见性遮挡0.92492可见性遮挡0.80521光照明遮挡0.99468光照明遮挡0.98438阴影遮挡0.99460阴影遮挡0.98437剪切长方形1.00460剪切长方形1.00437表1不同可见性技术对性能的影响如上表1所示,对启用的不同部分,以单位化的形式显示了每秒的帧数及各种场景所需的批数。针对每个场景,对如下几种情况进行显示:1.没有使用可见性时的情况;2.只对摄像机使用可见性的情况;3.对光源和摄像机使用可见性的情况;4.对光源、摄像机和阴影使用可见性情况;5.加上剪切长方形的情况。正如表1所显示的,把可见性引入场景可以显著地改善帧速。场景的进一步测试表明,应用程序会在某点达到极限填充率,而由可见性得到的性能改善,是由于遮挡减少了在图形卡中光栅化的物体。本发明的有益效果是:本发明提供的次世代游戏渲染引擎的光源管理系统,其可以实现快速且有效地渲染,使渲染效率大大地增加。显然,上述实施例仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本发明创造的保护范围之中。当前第1页12