基于可见性重用的三维场景直接光照效果近似绘制方法与流程

文档序号:12472215阅读:218来源:国知局

本发明涉及一种基于可见性重用的三维场景直接光照效果近似绘制方法,属于三维场景绘制技术领域。



背景技术:

面光源是真实世界中的一种常见光源类型。面光源照射下的三维场景通常会呈现柔和阴影特征。在传统上,使用蒙特卡罗积分技术来实现面光源照射的三维场景的直接光照效果绘制。利用蒙特卡罗积分技术绘制面光源照射的三维场景的直接光照效果,需要在面光源上产生一定数目的采样点,并计算光源采样点与可视场景点之间的可见性(完成阴影计算),进而计算光源采样点对可视场景点的直接光照贡献。为了绘制出在视觉上可以接受的三维场景直接光照效果画面,往往需要在面光源上产生大量采样点,计算光源采样点与可视场景点之间的可见性会成为重要的性能瓶颈。值得注意的是,与点光源不同,面光源对相邻可视场景点的可见性往往具有很强的相关性。充分利用这一特性,本发明通过对面光源采样点的可见性计算结果进行重用,来减小绘制面光源照射的三维场景的直接光照效果的代价,并提高绘制质量。



技术实现要素:

本发明的目的在于提供一种基于可见性重用的三维场景直接光照效果近似绘制方法,其通过重用面光源采样点的可见性计算结果,来加快面光源照射的三维场景的直接光照效果的绘制速度并提高绘制质量。

本发明的技术方案是这样实现的:基于可见性重用的三维场景直接光照效果近似绘制方法,其特征在于:把虚拟相机放在视点位置,按照正常的观察参数,利用光线投射技术绘制三维场景;对于每条从视点出发穿过虚拟像素平面上的像素的光线A001,光线A001与虚拟像素平面上的像素一一对应,判断光线A001与三维场景的几何对象是否相交,如果相交则进一步计算光线A001与三维场景的几何对象的离视点最近的交点A002,交点A002为一个可视场景点B001,同时在面光源上随机产生NUM个服从均匀分布的光源采样点B003,记录这NUM个光源采样点B003的空间位置,并计算每个光源采样点B003与交点A002之间的可见性VIS;对于每个交点A002,通过重用交点A002的相邻可视场景点的面光源采样及可见性计算结果来加速计算面光源对交点A002的近似直接光照贡献值;具体实现步骤如下:

提供一种数据结构LSPD,用于存储与面光源采样点相关的数据;数据结构LSPD包括光源采样点的空间位置和光源采样点的可见性两个成员变量。

1)实现对面光源的采样,以及计算面光源采样点与可视场景点之间的可见性,具体步骤如下:

步骤Step101:把虚拟相机放在视点位置,按照正常的观察参数,利用光线投射技术绘制三维场景;对于每条从视点出发穿过虚拟像素平面上的像素的光线A001,光线A001与虚拟像素平面上的像素一一对应,判断光线A001与三维场景的几何对象是否相交,如果相交则进一步计算光线A001与三维场景的几何对象的离视点最近的交点A002,交点A002为一个可视场景点B001,可视场景点B001对应了虚拟像素平面上的一个唯一的像素;

步骤Step102:创建一个包含M行、N列元素的数组LS,M为虚拟像素平面上的像素行数,N为虚拟像素平面上的像素列数;数组LS的每个元素存储一个列表B002,列表B002的每个元素存储一个数据结构LSPD类型的变量;令数组LS的每个元素存储的列表B002为空;数组LS的每个元素和虚拟像素平面上的像素一一对应。

步骤Step103:对于每个可视场景点B001,执行如下操作:

在面光源上随机产生NUM个服从均匀分布的光源采样点B003;在计算机存储器中创建NUM个数据结构LSPD类型的变量,其与NUM个光源采样点B003一一对应;把每个光源采样点B003的空间位置赋值给与之对应的数据结构LSPD类型的变量的光源采样点的空间位置成员变量;对于每个光源采样点B003,判断从光源采样点B003的空间位置到可视场景点B001的线段是否与三维场景的几何对象相交,如果相交,则令与光源采样点B003对应的数据结构LSPD类型的变量的光源采样点的可见性成员变量的值为0,否则令与光源采样点B003对应的数据结构LSPD类型的变量的光源采样点的可见性成员变量的值为1;把NUM个光源采样点B003对应的NUM个数据结构LSPD类型的变量添加到可视场景点B001对应的虚拟像素平面上的像素对应的数组LS的元素存储的列表B002中。

2)对每个可视场景点的近似直接光照值计算,并绘制出三维场景的直接光照效果,具体步骤如下:

步骤Step201:创建一个包含M行、N列元素的数组ILU,M为虚拟像素平面上的像素行数,N为虚拟像素平面上的像素列数;数组ILU的每个元素与虚拟像素平面上的像素一一对应,数组ILU的每个元素用于保存虚拟像素平面上的像素对应的可视场景点的直接光照值;令数组ILU的每个元素的值为背景色对应的光照值;

步骤Step202:对于步骤Step101中得到的每个可视场景点B001,执行如下操作:

步骤Step202-1:令变量SUM = 0、变量NS = 0,SUM为累加变量,NS为计数变量;计算可视场景点B001对应的像素在虚拟像素平面上所在的行号irow和列号jcol;令LIST1表示数组LS的第irow行、第jcol列的元素存储的列表B002;对于LIST1中的每个元素B004,令NS = NS + 1,如果元素B004存储的数据结构LSPD类型的变量的光源采样点的可见性成员变量的值等于1,则根据元素B004存储的数据结构LSPD类型的变量的光源采样点的空间位置成员变量所存储的光源采样点位置、可视场景点B001的位置、可视场景点B001所在位置的几何对象表面法向量、可视场景点B001所在几何对象的材质数据,计算元素B004存储的数据结构LSPD类型的变量的光源采样点的空间位置成员变量所存储的光源采样点位置对应的光源采样点对可视场景点B001的直接光照贡献值B005,把变量SUM的值与直接光照贡献值B005之和赋值给变量SUM;

步骤Step202-2:对于虚拟像素平面上的第irow行、第jcol列的像素的每个相邻像素B006,执行如下操作:

计算像素B006在虚拟像素平面上所在的行号Irow和列号Jcol,令LIST2表示数组LS的第Irow行、第Jcol列的元素存储的列表B002;对于LIST2中的每个元素B007,令NS = NS + 1,如果元素B007存储的数据结构LSPD类型的变量的光源采样点的可见性成员变量的值等于1,则根据元素B007存储的数据结构LSPD类型的变量的光源采样点的空间位置成员变量所存储的光源采样点位置、可视场景点B001的位置、可视场景点B001所在位置的几何对象表面法向量、可视场景点B001所在几何对象的材质数据,计算元素B007存储的数据结构LSPD类型的变量的光源采样点的空间位置成员变量所存储的光源采样点位置对应的光源采样点对可视场景点B001的直接光照贡献值B008,把变量SUM的值与直接光照贡献值B008之和赋值给变量SUM;

步骤Step202-3:把数组ILU的第irow行、第jcol列的元素赋值为变量SUM的值除以变量NS的值所得的结果与面光源面积之乘积;

步骤Step203:把数组ILU的每个元素保存的直接光照值转换成三维场景画面图像像素颜色值,并把三维场景画面图像显示在显示器上。

本发明积极效果是利用了面光源对相邻可视场景点的可见性存在较强的相关性的特点。在计算面光源对某个可视场景点的直接光照贡献时,重用与其相邻的可视场景点的面光源采样及其可见性计算结果,以较小的代价来增加用于可视场景点直接光照贡献估计的面光源采样点数,从而能达到提高绘制质量的目的。

附图说明

图1为相邻的可视场景点及其对应的光源采样点示意图。

具体实施方式

为了使本发明的特征和优点更加清楚明白,下面结合具体实施例对本发明作进一步的描述。

实施例1

计算机系统的CPU 选择Intel(R) Xeon(R) CPU E3-1225 v3 @ 3.20GHz,内存选择金士顿 8GB DDR3 1333,磁盘选择Buffalo HD-CE 1.5 TU2,显卡选用NVidia Quadro K2000;计算机操作系统选用Windows 7,软件编程工具选用VC++ 2010。

如图1所示,可视场景点A(101)和可视场景点B(102)是两个相邻的可视场景点,光源采样点A(105)和光源采样点B(106)是与可视场景点B(102)相对应的面光源(104)上的两个采样点,光源采样点C(107)和光源采样点D(108)是与可视场景点A(101)相对应的面光源(104)上的两个采样点,几何对象(103)是三维场景中的一个几何对象。尽管在图1中,只为每个可视场景点画出了两个对应的光源采样点,每个可视场景点对应的光源采样点数可以大于2。

把虚拟相机放在视点位置,按照正常的观察参数,利用光线投射技术绘制三维场景;对于每条从视点出发穿过虚拟像素平面上的像素的光线A001,光线A001与虚拟像素平面上的像素一一对应,判断光线A001与三维场景的几何对象是否相交,如果相交则进一步计算光线A001与三维场景的几何对象的离视点最近的交点A002,交点A002为一个可视场景点B001,同时在面光源上随机产生NUM个服从均匀分布的光源采样点B003,记录这NUM个光源采样点B003的空间位置,并计算每个光源采样点B003与交点A002之间的可见性VIS;对于每个交点A002,通过重用交点A002的相邻可视场景点的面光源采样及可见性计算结果来加速计算面光源对交点A002的近似直接光照贡献值;技术方案的具体实现步骤如下:

提供一种数据结构LSPD,用于存储与面光源采样点相关的数据;数据结构LSPD包括光源采样点的空间位置和光源采样点的可见性两个成员变量。

第一部分实现对面光源的采样,以及计算面光源采样点与可视场景点之间的可见性,具体步骤如下:

步骤Step101:把虚拟相机放在视点位置,按照正常的观察参数,利用光线投射技术绘制三维场景;对于每条从视点出发穿过虚拟像素平面上的像素的光线A001,光线A001与虚拟像素平面上的像素一一对应,判断光线A001与三维场景的几何对象是否相交,如果相交则进一步计算光线A001与三维场景的几何对象的离视点最近的交点A002,交点A002为一个可视场景点B001,可视场景点B001对应了虚拟像素平面上的一个唯一的像素;

步骤Step102:创建一个包含M行、N列元素的数组LS,M为虚拟像素平面上的像素行数,N为虚拟像素平面上的像素列数;数组LS的每个元素存储一个列表B002,列表B002的每个元素存储一个数据结构LSPD类型的变量;令数组LS的每个元素存储的列表B002为空;数组LS的每个元素和虚拟像素平面上的像素一一对应。

步骤Step103:对于每个可视场景点B001,执行如下操作:

在面光源上随机产生NUM个服从均匀分布的光源采样点B003;在计算机存储器中创建NUM个数据结构LSPD类型的变量,其与NUM个光源采样点B003一一对应;把每个光源采样点B003的空间位置赋值给与之对应的数据结构LSPD类型的变量的光源采样点的空间位置成员变量;对于每个光源采样点B003,判断从光源采样点B003的空间位置到可视场景点B001的线段是否与三维场景的几何对象相交,如果相交,则令与光源采样点B003对应的数据结构LSPD类型的变量的光源采样点的可见性成员变量的值为0,否则令与光源采样点B003对应的数据结构LSPD类型的变量的光源采样点的可见性成员变量的值为1;把NUM个光源采样点B003对应的NUM个数据结构LSPD类型的变量添加到可视场景点B001对应的虚拟像素平面上的像素对应的数组LS的元素存储的列表B002中。

第二部分实现对每个可视场景点的近似直接光照值计算,并绘制出三维场景的直接光照效果,具体步骤如下:

步骤Step201:创建一个包含M行、N列元素的数组ILU,M为虚拟像素平面上的像素行数,N为虚拟像素平面上的像素列数;数组ILU的每个元素与虚拟像素平面上的像素一一对应,数组ILU的每个元素用于保存虚拟像素平面上的像素对应的可视场景点的直接光照值;令数组ILU的每个元素的值为背景色对应的光照值;

步骤Step202:对于步骤Step101中得到的每个可视场景点B001,执行如下操作:

步骤Step202-1:令变量SUM = 0、变量NS = 0;计算可视场景点B001对应的像素在虚拟像素平面上所在的行号irow和列号jcol;令LIST1表示数组LS的第irow行、第jcol列的元素存储的列表B002;对于LIST1中的每个元素B004,令NS = NS + 1,如果元素B004存储的数据结构LSPD类型的变量的光源采样点的可见性成员变量的值等于1,则根据元素B004存储的数据结构LSPD类型的变量的光源采样点的空间位置成员变量所存储的光源采样点位置、可视场景点B001的位置、可视场景点B001所在位置的几何对象表面法向量、可视场景点B001所在几何对象的材质数据,计算元素B004存储的数据结构LSPD类型的变量的光源采样点的空间位置成员变量所存储的光源采样点位置对应的光源采样点对可视场景点B001的直接光照贡献值B005,把变量SUM的值与直接光照贡献值B005之和赋值给变量SUM;

步骤Step202-2:对于虚拟像素平面上的第irow行、第jcol列的像素的每个相邻像素B006,执行如下操作:

计算像素B006在虚拟像素平面上所在的行号Irow和列号Jcol,令LIST2表示数组LS的第Irow行、第Jcol列的元素存储的列表B002;对于LIST2中的每个元素B007,令NS = NS + 1,如果元素B007存储的数据结构LSPD类型的变量的光源采样点的可见性成员变量的值等于1,则根据元素B007存储的数据结构LSPD类型的变量的光源采样点的空间位置成员变量所存储的光源采样点位置、可视场景点B001的位置、可视场景点B001所在位置的几何对象表面法向量、可视场景点B001所在几何对象的材质数据,计算元素B007存储的数据结构LSPD类型的变量的光源采样点的空间位置成员变量所存储的光源采样点位置对应的光源采样点对可视场景点B001的直接光照贡献值B008,把变量SUM的值与直接光照贡献值B008之和赋值给变量SUM;

步骤Step202-3:把数组ILU的第irow行、第jcol列的元素赋值为变量SUM的值除以变量NS的值所得的结果与面光源面积之乘积;

步骤Step203:把数组ILU的每个元素保存的直接光照值转换成三维场景画面图像像素颜色值,并把三维场景画面图像显示在显示器上。

在本实施例中,NUM取值为5,M取值为768,N取值为1024。

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