发明内容
本说明书实施例提供一种环境光源的重建方法和装置,可以更加有效、更加真实地对环境光源进行还原,进而实现利用重建的环境光源渲染出非常接近真实拍照的图像。
根据第一方面,提供一种环境光源的重建方法,所述方法包括:获取光源立方体,所述光源立方体包括多个表面图像,所述多个表面图像对应于真实环境中同一位置不同角度拍摄的图像;确定所述多个表面图像中对应于所述真实环境中主要光源的图像区域;基于所述图像区域,确定对应的面光源模型;基于所述面光源模型,对容置于所述光源立方体中的待渲染物体进行模拟照射,得到在所述光源立方体的表面图像上形成的阴影区域;对所述多个表面图像中对应于所述阴影区域的图像的像素亮度进行调整,得到调整后的光源立方体,用于对所述待渲染物体进行光照渲染。
在一个实施例中,所述获取光源立方体包括:获取针对所述真实环境中同一位置进行不同角度拍摄而得到的多张图像;确定可容置所述待渲染物体的立方体;将所述多张图像拼贴在所述立方体的各个表面,形成所述光源立方体。
进一步地,在一个具体的实施例中,所述待渲染物体为一个或具有相对位置关系的多个物体;所述确定可容置所述待渲染物体的立方体,包括:确定可容置所述待渲染物体的最小立方体尺寸;基于预定倍数,确定与所述最小立方体尺寸对应的放大后尺寸;将所述放大后尺寸确定为所述立方体的尺寸。
在一个实施例中,所述确定所述多个表面图像中对应于所述真实环境中主要光源的图像区域,包括:将所述多个表面图像中像素亮度大于第一预定阈值的区域,确定为所述图像区域。
在一个实施例中,所述确定所述多个表面图像中对应于所述真实环境中主要光源的图像区域,包括:基于所述多个表面图像所对应的多个像素中各个像素具有的像素亮度,对所述多个像素进行排序;基于所述排序的结果,将排在预定范围内的像素所对应的区域确定为所述图像区域。
在一个实施例中,所述确定所述多个表面图像中对应于所述真实环境中主要光源的图像区域,包括:接收工作人员针对所述主要光源在所述多个表面图像中标注出的所述图像区域。
在一个实施例中,所述对所述多个表面图像中对应于所述阴影区域的图像的像素亮度进行调整,包括:将所述像素亮度降低为第二预定阈值。
在一个实施例中,所述对所述表面图像中对应于所述阴影区域的图像的像素亮度进行调整,包括:将所述像素亮度降低预定比例。
在一个实施例中,在所述得到调整后的光源立方体之后,还包括:利用所述调整后的光源立方体对所述待渲染物体进行光照渲染,得到对应的渲染后物体。
根据第二方面,提供一种环境光源的重建装置,所述装置包括:获取单元,配置为获取光源立方体,所述光源立方体包括多个表面图像,所述多个表面图像对应于真实环境中同一位置不同角度拍摄的图像;第一确定单元,配置为确定所述多个表面图像中对应于所述真实环境中主要光源的图像区域;第二确定单元,配置为基于所述图像区域,确定对应的面光源模型;模拟单元,配置为基于所述面光源模型,对容置于所述光源立方体中的待渲染物体进行模拟照射,得到在所述光源立方体的表面图像上形成的阴影区域;调整单元,配置为对所述多个表面图像中对应于所述阴影区域的图像的像素亮度进行调整,得到调整后的光源立方体,用于对所述待渲染物体进行光照渲染。
根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
采用本说明书实施例披露的环境光源的重建方法和装置,可以更加有效、更加真实地对环境光源进行还原,进而实现利用重建的环境光源渲染出非常接近真实拍照的图像。
具体实施方式
下面结合附图,对本说明书披露的多个实施例进行描述。
本说明书实施例提供一种环境光源的重建方法,下面,首先对所述方法的发明构思和应用场景进行介绍。
举例来说,假定在真实场景中拍摄了一张图像,在对图像进行后期处理时,需要在此图像中加入一个物体,并且使加入物体后的图像看起来非常接近真实拍摄的图像,其中真实拍摄的图像是指把物体放入上述真实场景中直接进行拍摄而得到的图像。此时,就需要用到真实感渲染技术。而环境光源重建在真实感渲染技术中至关重要,具体地,通过对上述真实场景所对应的环境光源进行重建(虚拟建模),渲染师可以利用重建出的光源对上述物体进行照射渲染(或称为光照渲染),从而得到非常接近真实光照效果的物体图像。需要说明的是,上述物体相对于上述真实场景而言实际上是不存在的、虚拟的,为了便于说明,以下将需要照射渲染的虚拟物体统称为待渲染物体。
目前,业届普遍使用的光源重建的技术方案包括,先将一个光照探测器,例如,一个镜面反射球,放置于指定场景中,然后围绕该光照探测器拍照,再使用拍照得到的图像作为光源参与渲染。然而,因采用此方案时,需要使用相机环绕光照探测器一周拍摄图片才能获得完整的光源数据,而实际中受限于指定场景的环境特点,比如,指定场景是一个狭小空间,包括柜子、冰箱、微波炉等等,通常很难围绕光照探测器拍摄到所需的所有角度的照片,因此,无法基于拍摄到的图片重建一个完整的环境光源。
此外,当指定场景是一个狭小空间时,待渲染物体对光源的遮挡现象非常严重,采用上述技术方案重建的光源由于无法提前确定与待渲染物体之间的遮挡关系,也就是未考虑待渲染物体在狭小空间内形成的阴影而对环境光源造成的遮挡,导致重建的光源与实际差距较大,并且待渲染物体越多,该差距就越大,进而导致渲染出来的效果与真实情况的差距越大。
在一个例子中,图1A示出的是真实拍摄的图像,物体130被真实放置于携带照明灯120的柜子110中。如图1A所示,在照明灯120的照射下,因为物体130的遮挡,在柜子110的内侧底面形成有对应的阴影。同时,由于阴影的影响,物体130下部区域呈现的视觉效果会比较暗。图1B示出的是通过常规渲染软件渲染生成的图像,其中物体130是虚拟物体(可以理解为3d模型)。在采用常规技术的情况下,首先会基于不包括物体130而仅包括照明灯120的柜子110进行内部环境的图片拍摄,进而构建出对应的环境光源,然后利用构建的环境光源对上述虚拟物体进行渲染。在这个过程中,因未考虑物体130的遮挡而形成的阴影(参见图1A)对环境光源的影响,会认为环境光源会照亮整个柜子底部,进而照射物体130下部,导致图1B中渲染出来的物体130与图1A中真实场景下的物体130的光照情况差距较大,例如,图1B中物体130的下部区域明显过于明亮。
事实上,在大多数场景中,环境光源主要包括一个或多个主动光源,如太阳光,灯等以及其他间接光源,真正对渲染物体影响较大的是这些主动光源或间接光源里强度较高的部分。我们需要将这些主要光源与待渲染物体的遮挡关系处理好,否则很容易出现反常理的情况。
基于以上观察和分析,发明人提出一种环境光源的重建方法,可以使重建的环境光源更加接近真实的环境光源,尤其适用于狭小空间场景下的光源重建。在一个实施例中,先使用固定的摄像头拍摄环境四周的图片,再对环境图片进行拼接,建立表面为环境贴图的光源立方体。然后,在光源立方体上标记出主要光源对应的图像区域,再利用标记出的图像区域模拟主要光源对待渲染物体进行照射,进而确定出光源立方体上哪些像素被遮挡,哪些没被遮挡。接着,在实际渲染过程中,只使用没被遮挡的像素对待渲染物体进行照射渲染,从而产生更接近实际情况的渲染效果。下面,结合具体的实施例,描述以上方法的实施步骤。
具体地,图2为本说明书实施例披露的环境光源的重建方法流程图,所述方法的执行主体可以为具有处理能力的服务器或装置或平台,等等。如图2所示,所述方法包括以下步骤:步骤S210,获取光源立方体,所述光源立方体包括多个表面图像,所述多个表面图像对应于真实环境中同一位置不同角度拍摄的图像;步骤S220,确定所述多个表面图像中对应于所述真实环境中主要光源的图像区域;步骤S230,基于所述图像区域,确定对应的面光源模型;步骤S240,基于所述面光源模型,对容置于所述光源立方体中的待渲染物体进行模拟照射,得到在所述光源立方体的表面图像上形成的阴影区域;步骤S250,对所述多个表面图像中对应于所述阴影区域的图像的像素亮度进行调整,得到调整后的光源立方体,用于对所述待渲染物体进行光照渲染。以上步骤具体如下:
首先,在步骤S210,获取光源立方体,所述光源立方体包括多个表面图像,所述多个表面图像对应于真实环境中同一位置不同角度拍摄的图像。
在一个实施例中,获取光源立方体可以包括以下步骤:首先,获取针对所述真实环境中同一位置进行不同角度拍摄而得到的多张图像;接着,确定可容置所述待渲染物体的立方体;然后,将所述多张图像拼贴在所述立方体各个表面,形成所述光源立方体。
下面,首先对上述多张图像的拍摄方法进行介绍。在一个具体的实施例中,先固定摄像头位置,再对环境四周拍摄图片。拍摄图像时,需保证摄像头所处的位置保持不变,并对四周每个方向拍照,尽可能覆盖场景的所有角度。在一个例子中,场景中包括一个主要光源,此时,可以先对准场景中的主要光源位置拍照,使这个主要光源处在拍摄的图像的中心,并将此时的拍摄方向(可以理解为摄像头的朝向)定义为上方,再在与上方相对的下方,以及,环绕上方和下方所对应的竖直轴对四周进行拍照,且在对四周进行拍照时每拍照一次旋转90度,由此可以得到上下前后左右六个方向的照片。在一个例子中,上述拍摄的多张图像可以是普通jpeg或raw格式的图片,也可以是使用多张不同曝光时间的jpeg图像或raw格式图像合成出的高动态范围(High-Dynamic Range,简称HDR)图像。
由此,可以获取到基于上述拍摄方法而得到的多张图像。
另一方面,确定可容置所述待渲染物体的立方体。在一个具体的实施例中,其中待渲染物体为一个或具有相对位置关系的多个物体。在一个例子中,待渲染物体的可以为一个杯子。在另一个例子中,待渲染物体可以包括一个盘子和放置在盘子上的苹果。
进一步地,确定可容置上述待渲染物体的立方体可以包括:先确定可容置待渲染物体的最小立方体尺寸;接着基于预定倍数,确定与所述最小立方体尺寸对应的放大后尺寸;再将放大后尺寸确定为所述立方体的尺寸。具体地,在一个例子中,对于最小立方体尺寸,可以理解为正好或恰好可以包裹所述待渲染物体的立方体的尺寸。在一个例子中,其中预定倍数可以由工作人员根据实际经验预先设定,例如,可以设定为1.5或2.0。在一个例子中,可以将最小立方体尺寸乘以所述预定倍数,得到对应的放大后尺寸。如此,可以将得到的放大后尺寸确定为所述立方体的尺寸,进而构建具有对应尺寸的立方体。
由上,可以获取拍摄的多张图像,以及确定出可容置待渲染物体的立方体。接着,将获取的多张图像拼贴在立方体各个表面,形成所述光源立方体。上述拼贴可以理解为,对多张图像进行拼接得到全景图片,然后将全景图片贴在立方体的整个表面。需要说明的是,此处拼接图片的目的是为了接下来作为环境光源,照射渲染场景,因此不需要做到完美拼接。事实上除主要光源之外,场景中其他部分的图像不需要完整出现,允许出现一定程度的冗余拼接,或者拼接遗漏。在一个例子中,可以将上述例子中得到的前后左右六个方向的图像对应拼贴在立方体的六个表面,进而形成所述光源立方体。
根据一个具体的例子,图3A中示出拼接得到的全景图片,图3B示出将全景图片贴到立方体上而对应形成的光源立方体,其中仅对立方体中的一个表面进行贴图作为示意。可以理解的是,还可以将图3A中另外5个方向的图对应贴到图3B中的另外5个表面。
在另一个实施例中,获取光源立方体可以包括:获取预先建立的光源立方体。在一个具体的实施例中,可以从存储有多个光源立方体的数据库中,获取上述光源立方体。
以上,可以获取光源立方体。然后,在步骤S220,确定所述多个表面图像中对应于所述真实环境中主要光源的图像区域。
需要说明的是,为了后续还原出真实环境中的主要光源,此时,需要在光源立方体上标记出属于主要光源的图像区域。这个标记过程可以是由工作人员手动完成,比如主要光源往往是太阳、灯等主动光,工作人员可以在光源立方体图像上通过观察很容易确定下来主要光源位置和形状;也可以通过算法自动确定,比如设定像素亮度阈值,判定阈值之上的光源立方体图像部分为主要光源。
具体地,在一个实施例中,可以将上述多个表面图像中像素亮度大于第一预定阈值的区域,确定为上述图像区域。在一个具体的实施例中,第一预定阈值可以由工作人员根据实际情况而预先设定。在一个例子中,当图像的整体亮度范围区间为[0,256]时,可以将第一预定阈值设定为200。在另一个例子中,当图像为HDR图像时,图像的整体亮度范围区间可以为0至几万,此时,可以将第一预定阈值设定为1万。
在另一个实施例中,可以先基于上述多个表面图像所对应的多个像素中各个像素具有的像素亮度,对所述多个像素进行排序;再基于排序的结果,将排在预定范围内的像素所对应的区域确定为上述图像区域。在一个具体的例子中,可以将像素亮度排在前1%或2%的像素所对应的图像确定为上述图像区域。
在又一个实施例中,可以接收工作人员基于上述多个表面图像对所述真实环境中的主要光源进行标注而确定的所述图像区域。
以上,可以确定出多个表面图像中对应于主要光源的图像区域。然后,在步骤S230,基于所述图像区域,确定对应的面光源模型。以及,步骤S240,基于所述面光源模型,对容置于所述光源立方体中的待渲染物体进行模拟照射,得到在所述光源立方体的表面图像上形成的阴影区域。
在一个实施例中,确定的面光源模型中包括对应于主要光源的照射角度,照射强度等参数。在一个具体的实施例中,对于其中照射角度的设定,可以根据主要光源的特点,进行精准建模。在一个例子,当主要光源是手电筒发出的照射光束时,照射角度可以对应于圆柱形光束。在另一个例子中,当主要光源是蜡烛燃烧产生的火焰时,实际的照射角度将比较复杂。在另一个具体的实施例中,在实践过程中发现,可以通过将照射角度设定为对应于照射范围为半球形(可以理解为此时主要光源位于半球体的球面顶点),进而降低建立面光源的计算难度,且使用如此构建的面光源模型仍然可以达到接近真实情况的良好的渲染效果。另一方面,在一个实施例中,可以基于上述图像区域,采用球谐函数(sphericalharmonicas function)建立对应的面光源模型。需要说明的是,还可以采用现有技术中的其他建模方法,确定对应的面光源模型,在此不作赘述。
以上,可以建立与图像区域对应的面光源模型。进一步地,可以基于面光源模型,模拟主要光源对容置于所述光源立方体中的待渲染物体进行模拟照射,得到在所述光源立方体的表面图像上形成的阴影区域。需要说明的是,对于待渲染物体在光源立方体中的相对位置,可以根据实际需要而设定。在一个实施例中,可以参考后续的渲染场景中,待渲染物体相对于渲染场景中主要光源的位置关系,设定此时待渲染物体与光源立方体中主要光源的相对位置。在另一个实施例中,还可以将待渲染物体放置于光源立方体中的任意位置。
在一个实施例中,上述得到在所述光源立方体的表面图像上形成的阴影区域,具体地,可以得到阴影区域相对于表面图像的位置参数,例如,具体对应表面图像的哪些像素块。
根据一个具体的例子,图4示出模拟照射的可视化界面,因物体420对模拟光源410产生的光照的遮挡,在光源立方体400的底面形成了阴影区域430。
以上,可以得到因待渲染物体对模拟光源的遮挡,在所述光源立方体的表面图像上形成的阴影区域。接着,在步骤S250,对所述多个表面图像中对应于所述阴影区域的图像的像素亮度进行调整,得到调整后的光源立方体,用于对所述待渲染物体进行光照渲染。
需要说明的是,可以对阴影区域所对应图像,也就是被遮挡的像素,的像素亮度进行调整,以使被遮挡的像素不作为光源参与后续的渲染,或者,也可以使被遮挡的像素基于调整后的像素亮度作为光源参与后续的渲染,具体可以由工作人员基于实际情况确定,或者基于待渲染物体的透射率确定。关于透射率,可以理解的是,某些物体具有透射现象,即入射光经过折射穿过物体后的出射现象,例如对于半透明体,一部分光被反射,还有一部分会透过物体。为了表示物体透过光的程度,通常用透过后的光通量与入射光通量之比,即透光率,来表征物体的透光性质。
具体地,在一个实施例中,可以将上述像素亮度降低为第二预定阈值。在一个例子中,可以将第二预定阈值可以设定为0,也就是对应于阴影区域的图像完全不作为光源参与后续渲染。在另一个例子中,可以将第二预定阈值可以设定为10或20等,此时,调整后的图像区域仍可以作为光源参与后续渲染。
在另一个实施例中,可以将像素亮度降低预定比例。在一个具体的实施例中,预定比例可以基于待渲染物体的透光率而确定。在一个例子中,可以将预定比例设定为1与待渲染物体的透射率的差值。根据一个具体的例子,待渲染物体的透射率为60%,相应可以将预定比例设定为40%。基于此,假定对应于所述阴影区域的图像中某个像素块的像素亮度为500,在降低40%以后对应的像素亮度为300。相应地,像素亮度调整为300的像素块可以作为光源参与后续的渲染。
以上,可以得到调整后的光源立方体。
进一步地,在一个实施例中,在步骤S250之后还可以包括,利用所述调整后的光源立方体对所述待渲染物体进行光照渲染,得到对应的渲染后物体。需要说明的是,其中光照渲染可以采用现有技术中的渲染方法或渲染软件来实现,在此不作赘述。
此外,结合图5A和图5B,进一步说明本说明书实施例披露的环境光源的重建方法的有益效果。图5A示出利用步骤S250中调整后的光源立方体511对物体520进行光照渲染后得到的渲染效果,图5B中示出利用步骤S210中直接获取的光源体512对物体520进行光照渲染后得到的渲染效果,显然,图5A中的渲染效果更接近图1A中示出的真实光照效果。
综上可知,采用本说明书实施例披露的环境光源的重建方法,可以使重建的环境光源更加接近真实的环境光源,尤其适用于狭小空间场景下的光源重建。
根据另一方面的实施例,还提供一种环境光源的重建装置。图6为本说明书实施例披露的环境光源的重建装置结构图,如图6所示,该装置600包括:
获取单元610,配置为获取光源立方体,所述光源立方体包括多个表面图像,所述多个表面图像对应于真实环境中同一位置不同角度拍摄的图像。第一确定单元620,配置为确定所述多个表面图像中对应于所述真实环境中主要光源的图像区域。第二确定单元630,配置为基于所述图像区域,确定对应的面光源模型。模拟单元640,配置为基于所述面光源模型,对容置于所述光源立方体中的待渲染物体进行模拟照射,得到在所述光源立方体的表面图像上形成的阴影区域。调整单元650,配置为对所述多个表面图像中对应于所述阴影区域的图像的像素亮度进行调整,得到调整后的光源立方体,用于对所述待渲染物体进行光照渲染。
在一个实施例中,所述获取单元610具体包括:获取子单元611,配置为获取针对所述真实环境中同一位置进行不同角度拍摄而得到的多张图像。确定子单元612,配置为确定可容置所述待渲染物体的立方体。形成子单元613,配置为将所述多张图像拼贴在所述立方体的各个表面,形成所述光源立方体。
进一步地,在一个具体的实施例中,所述待渲染物体为一个或具有相对位置关系的多个物体。所述确定子单元612具体用于:确定可容置所述待渲染物体的最小立方体尺寸;基于预定倍数,确定与所述最小立方体尺寸对应的放大后尺寸;将所述放大后尺寸确定为所述立方体的尺寸。
在一个实施例中,所述第一确定单元620具体配置为:将所述多个表面图像中像素亮度大于第一预定阈值的区域,确定为所述图像区域。
在一个实施例中,所述第一确定单元620具体配置为:基于所述多个表面图像所对应的多个像素中各个像素具有的像素亮度,对所述多个像素进行排序;基于所述排序的结果,将排在预定范围内的像素所对应的区域确定为所述图像区域。
在一个实施例中,所述第一确定单元620具体配置为:接收工作人员针对所述主要光源在所述多个表面图像中标注出的所述图像区域。
在一个实施例中,所述调整单元650具体配置为:将所述像素亮度降低为第二预定阈值。
在一个实施例中,所述调整单元650具体配置为:将所述像素亮度降低预定比例。
在一个实施例中,所述装置600还包括:渲染单元660,配置为利用所述调整后的光源立方体对所述待渲染物体进行光照渲染,得到对应的渲染后物体。
如上,根据再一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2所描述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本说明书披露的多个实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本说明书披露的多个实施例的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本说明书披露的多个实施例的具体实施方式而已,并不用于限定本说明书披露的多个实施例的保护范围,凡在本说明书披露的多个实施例的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本说明书披露的多个实施例的保护范围之内。