三维场景立体画面绘制中的间接光照复用方法与流程

文档序号:11775880阅读:350来源:国知局
三维场景立体画面绘制中的间接光照复用方法与流程

本发明涉及一种三维场景立体画面绘制中的间接光照复用方法,属于真实感三维场景绘制技术领域。



背景技术:

3d电影技术目前已得到广泛应用。3d电影中的许多画面通常都用计算机真实感三维场景绘制技术来生成。3d场景的立体画面由左眼画面和右眼画面组成。可以通过图1所示的方式,使用两个虚拟相机来拍摄三维场景的立体画面,左眼画面对应的虚拟相机(101)拍摄左眼画面,右眼画面对应的虚拟相机(102)拍摄右眼画面,虚拟相机(101)在左眼视点位置,虚拟相机(102)在右眼视点位置,从左眼视点发射穿过虚拟相机(101)的虚拟像素平面(103)上的像素的光线与几何对象(105)交于点p1,从右眼视点发射穿过虚拟相机(102)的虚拟像素平面(104)上的像素的光线与几何对象(105)交于点p1。在播放立体画面时,观众的左眼只能看到左眼画面,观众的右眼只能看到右眼画面,通过人脑合成产生立体视觉效果。

在绘制三维场景的立体画面时,需要分别绘制左眼画面和右眼画面。由于每帧立体画面实际包含两幅画面,因此其绘制时间相比于非立体画面绘制时间更长。虽然左眼画面和右眼画面通常存在一定的差异,但是二者也具有明显的相似性;如果已经绘制出左眼画面,则在绘制右眼画面时可以在一定程度上复用左眼画面的部分计算结果,从而节省绘制时间。在电影三维场景绘制中,通常需要绘制出场景的全局光照效果。全局光照可以分为直接光照和间接光照两部分。直接光照是光源发出的光直接到达可视场景点产生的光照贡献;间接光照是光源发出的光先经其他物体散射后,再入射到可视场景点产生的光照贡献。通过观察现实生活场景可以发现,直接光照效果的空间变化在视觉上一般比间接光照效果的空间变化明显。这意味着间接光照比直接光照更适合于在空间上进行复用。此外,生活经验表明,镜面反射物体的光照视觉效果具有很强的方向依赖性,这会给镜面反射间接光照复用带来困难。因此,在绘制左右眼画面时,本发明只对漫反射物体上的可视场景点的间接光照进行复用,镜面反射物体上的可视场景点的间接光照则重新计算。由于实际三维场景通常包含大量漫反射类型的物体,因此本发明的间接光照复用方法能明显缩短立体画面绘制时间。

光线跟踪(raytracing)是一种常用的真实感三维场景绘制技术。通常光线跟踪采用逆向跟踪策略,即不是从光源出发跟踪光线在三维场景中的传播,而是从视点出发逆向跟踪光线在三维场景中的传播。用光线跟踪可以很好地绘制出镜面反射物体的间接光照效果。然而,用传统光线跟踪技术绘制漫反射物体的间接光照效果则比较低效。光线跟踪和光子映射(photonmapping)技术经常被结合在一起用来绘制三维场景的全局光照效果。首先使用光子跟踪技术创建光子图,然后利用光线跟踪技术找到可视场景点。对每个漫反射类型的可视场景点,可从光子图中搜索与该可视场景点邻近的光子并据此计算该可视场景点的间接光照。然而,这种直接根据光子图中的光子计算可视场景点间接光照的方式会导致三维场景画面中出现明显的低频噪声。解决这一问题的方法是使用最终聚集(finalgathering)技术。最终聚集技术从漫反射类型的可视场景点向该可视场景点的法向量指向的半球空间随机发射一系列射线,该可视场景点也称为最终光照聚集点,计算这些射线与三维场景几何对象的交点,这些交点称为光照采集点。最终聚集技术通过从光子图中搜索与光照采集点邻近的光子来计算光照采集点的间接光照值,进而根据光照采集点的间接光照值来计算最终光照聚集点的间接光照值。可视场景点的法向量指向的半球空间如图2所示,其中法向量与半球底面垂直,可视场景点在半球底面的中心位置。最终聚集技术在许多文献中有专门论述,例如2010年morgankaufmann出版社出版的由m.pharr和g.humphreys撰写的书《physicallybasedrendering:fromtheorytoimplementation,2ndedition》、山东大学2014年崔云鹏的硕士学位论文《基于renderman的光子映射算法研究与实现》等。



技术实现要素:

本发明的目的在于提供一种三维场景立体画面绘制中的间接光照复用方法,其在绘制右眼画面时通过对绘制左眼画面时聚集得到的间接光照结果进行复用,来提高三维场景立体画面的绘制效率。

本发明的技术方案是这样实现的:一种三维场景立体画面绘制中的间接光照复用方法,其特征在于:首先使用光子跟踪技术创建光子图,然后绘制左眼画面的全局光照效果,接着再绘制右眼画面的全局光照效果,具体实现步骤如下:

1)使用光子跟踪技术创建光子图,具体方法如下:

首先创建一个不包含任何光子记录的光子图pmap;使用光子跟踪技术从光源向三维场景发射num个光子,跟踪这num个光子在三维场景中传播时与几何对象发生碰撞而被散射的过程;对于每个光子a001,在跟踪光子a001在三维场景中传播时与几何对象发生碰撞而被散射的过程中,从光子a001第二次与三维场景几何对象发生碰撞开始,每发生一次碰撞就向光子图pmap中添加一个光子记录,每个光子记录包括光子与三维场景几何对象的碰撞位置ppos、光子在碰撞位置ppos处的归一化入射方向向量pvi、光子在碰撞位置ppos处的入射功率pw共三个分量。

2)综合利用光线跟踪和光子映射技术绘制三维场景左眼画面的全局光照效果,其中用光线跟踪技术绘制三维场景左眼画面的直接光照效果和所有镜面反射类型的可视场景点的间接光照效果,用最终聚集技术计算三维场景左眼画面的所有漫反射类型的可视场景点的间接光照,具体步骤如下:

步骤step201:创建一个包含m行、n列元素的数组lim,m表示左眼画面对应的虚拟相机的虚拟像素平面lvcpp上的像素行数,n表示左眼画面对应的虚拟相机的虚拟像素平面lvcpp上的像素列数;把数组lim的每个元素赋值为背景色对应的光照值;数组lim的元素和左眼画面对应的虚拟相机的虚拟像素平面lvcpp上的像素一一对应;利用光线跟踪技术,从左眼视点发射穿过左眼画面对应的虚拟相机的虚拟像素平面lvcpp上的各个像素的光线a002,光线a002和虚拟像素平面lvcpp上的像素一一对应;对于每条光线a002,做如下操作:

步骤step201-1:计算光线a002对应的虚拟像素平面lvcpp上的像素对应的数组lim的元素的行号irow和列号jcol;判断光线a002与三维场景几何对象是否相交,如果相交,则转步骤step201-2,否则转步骤step201-5;

步骤step201-2:计算光线a002与三维场景几何对象的离左眼视点最近的交点b001,交点b001是一个可视场景点lvspoint,光线a002与可视场景点lvspoint一一对应;根据光线跟踪技术使用的直接光照计算方法计算交点b001的直接光照b002,同时进一步判断交点b001所在的几何对象表面是漫反射表面还是镜面反射表面,如果是漫反射表面,则转步骤step201-3,如果是镜面反射表面则转步骤step201-4;

步骤step201-3:根据光子图pmap,使用最终聚集技术计算交点b001的间接光照b003,把数组lim的第irow行、第jcol列的元素赋值为直接光照b002与间接光照b003之和;转步骤step201-5;

步骤step201-4:使用光线跟踪技术计算交点b001的间接光照b004,把数组lim的第irow行、第jcol列的元素赋值为直接光照b002与间接光照b004之和;

步骤step201-5:对光线a002的操作结束。

步骤step202:把数组lim的每个元素的值转换成三维场景左眼画面图像像素颜色值,并把三维场景左眼画面图像保存到计算机磁盘文件之中。

3)综合利用光线跟踪和光子映射技术绘制三维场景右眼画面的全局光照效果,其中用光线跟踪技术绘制三维场景右眼画面的直接光照效果和所有镜面反射类型的可视场景点的间接光照效果,另外如果绘制右眼画面时计算得到的漫反射类型的可视场景点在左眼画面对应的空间区域中,则直接复用绘制左眼画面时聚集得到的间接光照结果,否则用最终聚集技术计算该漫反射类型的可视场景点的间接光照,具体步骤如下:

步骤step301:创建一个包含m行、n列元素的数组rim,m表示右眼画面对应的虚拟相机的虚拟像素平面rvcpp上的像素行数,n表示右眼画面对应的虚拟相机的虚拟像素平面rvcpp上的像素列数;把数组rim的每个元素赋值为背景色对应的光照值;数组rim的元素和右眼画面对应的虚拟相机的虚拟像素平面rvcpp上的像素一一对应;利用光线跟踪技术,从右眼视点发射穿过右眼画面对应的虚拟相机的虚拟像素平面rvcpp上的各个像素的光线c002,光线c002和虚拟像素平面rvcpp上的像素一一对应;对于每条光线c002,做如下操作:

步骤step301-1:计算光线c002对应的虚拟像素平面rvcpp上的像素对应的数组rim的元素的行号irow和列号jcol;判断光线c002与三维场景几何对象是否相交,如果相交,则转步骤step301-2,否则转步骤step301-8;

步骤step301-2:计算光线c002与三维场景几何对象的离右眼视点最近的交点d001,交点d001是一个可视场景点rvspoint,光线c002与可视场景点rvspoint一一对应;根据光线跟踪技术使用的直接光照计算方法计算交点d001的直接光照d002,同时进一步判断交点d001所在的几何对象表面是漫反射表面还是镜面反射表面,如果是漫反射表面,则转步骤step301-3,如果是镜面反射表面则转步骤step301-7;

步骤step301-3:计算交点d001在左眼画面对应的虚拟相机的相机坐标系corsl中的坐标posl,相机坐标系corsl的原点在左眼视点位置,相机坐标系corsl的w方向为左眼画面对应的虚拟相机的观察正前方向的反方向,相机坐标系corsl的v方向为左眼画面对应的虚拟相机的观察向上方向,相机坐标系corsl的u方向与相机坐标系corsl的v方向和相机坐标系corsl的w方向相互垂直,相机坐标系corsl的u方向、v方向、w方向符合右手三维直角坐标系规范;令坐标posl在u方向上的分量为u,坐标posl在v方向上的分量为v,坐标posl在w方向上的分量为w,左眼画面对应的虚拟相机在u方向上的视场角为α,左眼画面对应的虚拟相机在v方向上的视场角为β;如果|u/w|≤tan(α/2)且|v/w|≤tan(β/2)且w<0,则转步骤step301-4,否则转步骤step301-6;

步骤step301-4:创建一条光线ray,光线ray的起点为左眼视点,光线ray的方向为从左眼视点指向坐标posl所在位置的方向,计算光线ray穿过左眼画面对应的虚拟相机的虚拟像素平面lvcpp上的像素的行号ir和列号jc;如果虚拟像素平面lvcpp上的第ir行、第jc列像素对应的光线a002与三维场景几何对象相交,且虚拟像素平面lvcpp上的第ir行、第jc列像素对应的光线a002对应的可视场景点lvspoint所在的几何对象表面和交点d001所在的几何对象表面是同一个几何对象表面,则转步骤step301-5,否则转步骤step301-6;

步骤step301-5:把数组rim的第irow行、第jcol列的元素赋值为直接光照d002与虚拟像素平面lvcpp上的第ir行、第jc列像素对应的光线a002对应的可视场景点lvspoint的间接光照b003之和;转步骤step301-8;

步骤step301-6:根据光子图pmap,使用最终聚集技术计算交点d001的间接光照d003,把数组rim的第irow行、第jcol列的元素赋值为直接光照d002与间接光照d003之和;转步骤step301-8;

步骤step301-7:使用光线跟踪技术计算交点d001的间接光照d004,把数组rim的第irow行、第jcol列的元素赋值为直接光照d002与间接光照d004之和;

步骤step301-8:对光线c002的操作结束。

步骤step302:把数组rim的每个元素的值转换成三维场景右眼画面图像像素颜色值,并把三维场景右眼画面图像保存到计算机磁盘文件之中。

本发明的积极效果是利用了三维场景立体画面的左右眼画面的间接光照存在相似性的特点,在绘制右眼画面的全局光照效果时复用那些在绘制左眼画面时已经计算出的漫反射可视场景点间接光照结果,从而在绘制右眼画面时节省了执行最终聚集操作所需的时间开销,提高了三维场景立体画面的绘制效率。

附图说明

图1为使用左眼和右眼虚拟相机拍摄三维场景立体画面的示意图。

图2为可视场景点的法向量指向的半球空间示意图。

图3为左眼画面对应的虚拟相机的相机坐标系corsl示意图。

具体实施方式

为了使本方法的特征和优点更加清楚明白,下面结合具体实施例对本方法作进一步的描述。本实施例考虑包含一面镜子和一张床的卧室三维场景,镜子表面被指定为镜面反射表面,床、卧室墙、卧室天花板、卧室地板都被指定为漫反射表面。计算机系统的cpu选择intel(r)xeon(r)cpue3-1225v3@3.20ghz,内存选择金士顿8gbddr31333,磁盘选择buffalohd-ce1.5tu2,显卡选用nvidiaquadrok2000;计算机操作系统选用windows7,软件编程工具选用vc++2010。

一种三维场景立体画面绘制中的间接光照复用方法,首先使用光子跟踪技术创建光子图,然后绘制左眼画面的全局光照效果,接着再绘制右眼画面的全局光照效果,具体实现步骤如下:

1)使用光子跟踪技术创建光子图,具体方法如下:

首先创建一个不包含任何光子记录的光子图pmap;使用光子跟踪技术从光源向三维场景发射num个光子,跟踪这num个光子在三维场景中传播时与几何对象发生碰撞而被散射的过程;对于每个光子a001,在跟踪光子a001在三维场景中传播时与几何对象发生碰撞而被散射的过程中,从光子a001第二次与三维场景几何对象发生碰撞开始,每发生一次碰撞就向光子图pmap中添加一个光子记录,每个光子记录包括光子与三维场景几何对象的碰撞位置ppos、光子在碰撞位置ppos处的归一化入射方向向量pvi、光子在碰撞位置ppos处的入射功率pw共三个分量。

2)综合利用光线跟踪和光子映射技术绘制三维场景左眼画面的全局光照效果,其中用光线跟踪技术绘制三维场景左眼画面的直接光照效果和所有镜面反射类型的可视场景点的间接光照效果,用最终聚集技术计算三维场景左眼画面的所有漫反射类型的可视场景点的间接光照,具体步骤如下:

步骤step201:创建一个包含m行、n列元素的数组lim,m表示左眼画面对应的虚拟相机的虚拟像素平面lvcpp上的像素行数,n表示左眼画面对应的虚拟相机的虚拟像素平面lvcpp上的像素列数;把数组lim的每个元素赋值为背景色对应的光照值;数组lim的元素和左眼画面对应的虚拟相机的虚拟像素平面lvcpp上的像素一一对应;利用光线跟踪技术,从左眼视点发射穿过左眼画面对应的虚拟相机的虚拟像素平面lvcpp上的各个像素的光线a002,光线a002和虚拟像素平面lvcpp上的像素一一对应;对于每条光线a002,做如下操作:

步骤step201-1:计算光线a002对应的虚拟像素平面lvcpp上的像素对应的数组lim的元素的行号irow和列号jcol;判断光线a002与三维场景几何对象是否相交,如果相交,则转步骤step201-2,否则转步骤step201-5;

步骤step201-2:计算光线a002与三维场景几何对象的离左眼视点最近的交点b001,交点b001是一个可视场景点lvspoint,光线a002与可视场景点lvspoint一一对应;根据光线跟踪技术使用的直接光照计算方法计算交点b001的直接光照b002,同时进一步判断交点b001所在的几何对象表面是漫反射表面还是镜面反射表面,如果是漫反射表面,则转步骤step201-3,如果是镜面反射表面则转步骤step201-4;

步骤step201-3:根据光子图pmap,使用最终聚集技术计算交点b001的间接光照b003,把数组lim的第irow行、第jcol列的元素赋值为直接光照b002与间接光照b003之和;转步骤step201-5;

步骤step201-4:使用光线跟踪技术计算交点b001的间接光照b004,把数组lim的第irow行、第jcol列的元素赋值为直接光照b002与间接光照b004之和;

步骤step201-5:对光线a002的操作结束。

步骤step202:把数组lim的每个元素的值转换成三维场景左眼画面图像像素颜色值,并把三维场景左眼画面图像保存到计算机磁盘文件之中。

3)综合利用光线跟踪和光子映射技术绘制三维场景右眼画面的全局光照效果,其中用光线跟踪技术绘制三维场景右眼画面的直接光照效果和所有镜面反射类型的可视场景点的间接光照效果,另外如果绘制右眼画面时计算得到的漫反射类型的可视场景点在左眼画面对应的空间区域中,则直接复用绘制左眼画面时聚集得到的间接光照结果,否则用最终聚集技术计算该漫反射类型的可视场景点的间接光照,具体步骤如下:

步骤step301:创建一个包含m行、n列元素的数组rim,m表示右眼画面对应的虚拟相机的虚拟像素平面rvcpp上的像素行数,n表示右眼画面对应的虚拟相机的虚拟像素平面rvcpp上的像素列数;把数组rim的每个元素赋值为背景色对应的光照值;数组rim的元素和右眼画面对应的虚拟相机的虚拟像素平面rvcpp上的像素一一对应;利用光线跟踪技术,从右眼视点发射穿过右眼画面对应的虚拟相机的虚拟像素平面rvcpp上的各个像素的光线c002,光线c002和虚拟像素平面rvcpp上的像素一一对应;对于每条光线c002,做如下操作:

步骤step301-1:计算光线c002对应的虚拟像素平面rvcpp上的像素对应的数组rim的元素的行号irow和列号jcol;判断光线c002与三维场景几何对象是否相交,如果相交,则转步骤step301-2,否则转步骤step301-8;

步骤step301-2:计算光线c002与三维场景几何对象的离右眼视点最近的交点d001,交点d001是一个可视场景点rvspoint,光线c002与可视场景点rvspoint一一对应;根据光线跟踪技术使用的直接光照计算方法计算交点d001的直接光照d002,同时进一步判断交点d001所在的几何对象表面是漫反射表面还是镜面反射表面,如果是漫反射表面,则转步骤step301-3,如果是镜面反射表面则转步骤step301-7;

步骤step301-3:计算交点d001在左眼画面对应的虚拟相机的相机坐标系corsl中的坐标posl,相机坐标系corsl的原点在左眼视点位置,相机坐标系corsl的w方向为左眼画面对应的虚拟相机的观察正前方向的反方向,相机坐标系corsl的v方向为左眼画面对应的虚拟相机的观察向上方向,相机坐标系corsl的u方向与相机坐标系corsl的v方向和相机坐标系corsl的w方向相互垂直,相机坐标系corsl的u方向、v方向、w方向符合右手三维直角坐标系规范;令坐标posl在u方向上的分量为u,坐标posl在v方向上的分量为v,坐标posl在w方向上的分量为w,左眼画面对应的虚拟相机在u方向上的视场角为α,左眼画面对应的虚拟相机在v方向上的视场角为β;如果|u/w|≤tan(α/2)且|v/w|≤tan(β/2)且w<0,则转步骤step301-4,否则转步骤step301-6;

步骤step301-4:创建一条光线ray,光线ray的起点为左眼视点,光线ray的方向为从左眼视点指向坐标posl所在位置的方向,计算光线ray穿过左眼画面对应的虚拟相机的虚拟像素平面lvcpp上的像素的行号ir和列号jc;如果虚拟像素平面lvcpp上的第ir行、第jc列像素对应的光线a002与三维场景几何对象相交,且虚拟像素平面lvcpp上的第ir行、第jc列像素对应的光线a002对应的可视场景点lvspoint所在的几何对象表面和交点d001所在的几何对象表面是同一个几何对象表面,则转步骤step301-5,否则转步骤step301-6;

步骤step301-5:把数组rim的第irow行、第jcol列的元素赋值为直接光照d002与虚拟像素平面lvcpp上的第ir行、第jc列像素对应的光线a002对应的可视场景点lvspoint的间接光照b003之和;转步骤step301-8;

步骤step301-6:根据光子图pmap,使用最终聚集技术计算交点d001的间接光照d003,把数组rim的第irow行、第jcol列的元素赋值为直接光照d002与间接光照d003之和;转步骤step301-8;

步骤step301-7:使用光线跟踪技术计算交点d001的间接光照d004,把数组rim的第irow行、第jcol列的元素赋值为直接光照d002与间接光照d004之和;

步骤step301-8:对光线c002的操作结束。

步骤step302:把数组rim的每个元素的值转换成三维场景右眼画面图像像素颜色值,并把三维场景右眼画面图像保存到计算机磁盘文件之中。

图3示出了步骤step301-3中提及的左眼画面对应的虚拟相机的相机坐标系corsl示意图,能被虚拟相机拍摄到的几何对象在相机坐标系corsl的w轴的负向空间中。

在本实施例中,num取值为1000,m取值为768,n取值为1024,α取值为45度,β取值为45度。对于立体画面绘制,左眼画面对应的虚拟相机的虚拟像素平面上的像素行数等于右眼画面对应的虚拟相机的虚拟像素平面上的像素行数,左眼画面对应的虚拟相机的虚拟像素平面上的像素列数等于右眼画面对应的虚拟相机的虚拟像素平面上的像素列数。

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