利用虚拟点光源实现动画三维场景的全局光照绘制的方法

文档序号:6549569阅读:284来源:国知局
利用虚拟点光源实现动画三维场景的全局光照绘制的方法
【专利摘要】本发明公开一种利用虚拟点光源实现动画三维场景的全局光照绘制的方法,属于三维动画绘制【技术领域】。本方法将场景中的几何对象分为静态几何对象和动态几何对象,分别用不同的场景图进行组织和管理。在对光源的光照发射空间进行光线采样的基础上,求解这些光线与场景几何对象的交点,并在交点处创建虚拟点光源照射动画三维场景,进而实现动画三维场景的间接光照绘制。本方法能够在连续帧间大量重用虚拟点光源,可支持同时存在视点和几何对象运动的动画三维场景的全局光照绘制。在三维动画制作中使用本发明,可以提高三维动画的视觉质量。
【专利说明】利用虚拟点光源实现动画三维场景的全局光照绘制的方法
【技术领域】
[0001]本发明属于三维动画绘制【技术领域】,涉及一种利用虚拟点光源实现动画三维场景的全局光照绘制的方法。
【背景技术】
[0002]目前三维动画在产品展示、广告、影视娱乐等行业得到广泛应用。为了提高三维动画画面的真实感,往往要求实现动画三维场景的全局光照绘制。全局光照可分解成直接光照和间接光照两部分。三维场景的直接光照绘制相对比较简单,已有不少成熟技术。实际上,三维场景的全局光照绘制的难点在于,如何高效地计算间接光照。对大多数动画三维场景来说,往往仅计算一次反射产生的间接光照贡献就可以绘制出真实感较强的画面。从光源发射一系列光线,在这些光线与三维场景对象相交的地方生成一系列虚拟点光源。用这些虚拟点光源照射三维场景即可模拟一次反射产生的间接光照贡献。与静态三维场景的绘制结果不同,动画三维场景的绘制结果由一系列连续的帧画面组成。在绘制动画三维场景时,如果连续帧画面之间固有的光照时间相关性得不到很好的保持,则最终的动画会出现画面闪烁现象,进而影响观众的视觉体验效果。当利用虚拟点光源实现动画三维场景的全局光照绘制时,如果某一个虚拟点光源在连续的多帧中都有效,则此虚拟点光源应当在这些连续帧的绘制中都被使用,以便保持连续帧画面之间的光照时间相关性。
[0003]对于实际动画三维场景,往往只有少数几何对象在各帧中会发生运动或者变化,多数几何对象在各帧中保持静止状态。此外,许多实际动画三维场景中的光源在各帧中都不会发生变化。例如一个表现人在办公室中行走的动画,办公室中的光源往往都是固定的。如果在动画三维场景的各帧中不存在原有几何对象消失或者新几何对象产生的现象,则可以将动画三维场景中的几何对象分为静止几何对象和动态几何对象两类,并对它们分别进行组织和管理。如果动画三维场景中的光源在各帧中不发生变化,对于与静止几何对象相关的光照贡献中间计算结果,满足一定条件时,可很容易地在各帧中进行重用,从而保持连续帧画面之间的光照时间相关性。

【发明内容】

[0004]本方法的目的在于提供一种利用虚拟点光源实现动画三维场景的全局光照绘制的方法。本方法的技术解决方案:将动画三维场景中的几何对象分为静态几何对象和动态几何对象,所有静态几何对象用一个场景图SSG来组织和管理,所有动态几何对象用一个场景图DSG来组织和管理;对光源的光照发射空间进行光线采样,即从光源位置向光源的光照发射空间中投射一系列光线,如图1和图2所示,分别计算这些光线与场景图SSG和场景图DSG中的几何对象的交点;在这些交点处创建虚拟点光源来照射三维场景,通过计算这些虚拟点光源对三维场景点的直接光照贡献来近似绘制主光源产生的间接光照。建立以光源位置为原点的局部坐标系C0R,局部坐标系COR的z轴正方向取为光源的主光照出射方向,局部坐标系COR的X轴和y轴任意选取,只需保证局部坐标系COR的x轴、y轴、z轴两两正交即可;为了简化对从光源投射的光线的方向的描述,如图3所示,使用方位角和仰角来描述光线的方向。
[0005]本方法首先提供一种数据结构DS,用于存储与虚拟点光源相关的数据;数据结构DS包括虚拟点光源的位置、虚拟点光源所在位置的法向量、虚拟点光源的发光强度、虚拟点光源的主光照出射方向、虚拟点光源类型、虚拟点光源所在几何对象表面的双向反射分布函数BRDF、与虚拟点光源相关联的光线的方位角、与虚拟点光源相关联的光线的仰角共八个成员变量。
[0006]本方法的第一部分在计算机系统中计算三维场景中的光源AOOl的光照发射空间的采样光线与场景图SSG中的几何对象的交点,并在交点位置处创建虚拟点光源,具体步骤如下:
[0007]SteplOl:令列表A002为空;令列表LVPLS为空;
[0008]Stepl02:从光源AOOl所在位置向光源AOOl的光照发射空间投射一系列光线,并将这些光线存放在列表A002中;
[0009]St印103:对列表A002中的每条光线A003,利用GPU并行计算设备并行地执行子步骤St印103-1至St印103-3:
[0010]St印103-1:测试光线A003是否与场景图SSG中的几何对象相交,如果不相交,则转子步骤St印103-3 ;
[0011]St印103-2:计算光线A003与场景图SSG中的几何对象之间的距光源AOOl最近的交点A004,创建一个数据结构DS类型的变量A005 ;将交点A004所在的位置赋值给变量A005的虚拟点光源的位置成员变量,将交点A004所在的位置的法向量赋值给变量A005的虚拟点光源所在位置的法向量成员变量,将交点A004所在几何对象的表面的双向反射分布函数BRDF赋值给变量A005的虚拟点光源所在几何对象表面的双向反射分布函数BRDF成员变量;如果交点A004所在几何对象的表面为漫反射面,则将变量A005的虚拟点光源类型成员变量赋值为“半球全向光源类型”,否则将变量A005的虚拟点光源类型成员变量赋值为“聚光灯类型”;将光线A003在局部坐标系COR中的方位角和仰角分别赋值给变量A005的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;根据光源AOOl的发光强度和位置、交点A004的位置、交点A004所在的位置的法向量、交点A004所在几何对象的表面的双向反射分布函数BRDF计算变量A005的虚拟点光源的发光强度成员变量的值;如果变量A005的虚拟点光源类型成员变量为“半球全向光源类型”,则将变量A005的虚拟点光源的主光照出射方向成员变量赋值为交点A004所在的位置的法向量,否则将变量A005的虚拟点光源的主光照出射方向成员变量赋值为光线A003在交点A004处发生理想镜面反射时的反射光线方向;将变量A005加入列表LVPLS中。
[0012]St印103-3:针对光线A003的计算结束。
[0013]本方法的第二部分逐帧地完成动画三维场景的全局光照绘制,具体步骤如下:
[0014]St印201:令帧编号变量ID为I ;
[0015]St印202:令列表LVPLD为空;
[0016]St印203:对本方法的第一部分中得到的列表A002中的每条光线A003,利用GPU并行计算设备并行地执行子步骤St印203-1至St印203-3:
[0017]St印203-1:测试光线A003是否与场景图DSG中的几何对象相交,如果不相交,则转子步骤St印203-3 ;
[0018]St印203-2:计算光线A003与场景图DSG中的几何对象之间的距光源AOOl最近的交点B004,创建一个数据结构DS类型的变量B005 ;将交点B004所在的位置赋值给变量B005的虚拟点光源的位置成员变量,将交点B004所在的位置的法向量赋值给变量B005的虚拟点光源所在位置的法向量成员变量,将交点B004所在几何对象的表面的双向反射分布函数BRDF赋值给变量B005的虚拟点光源所在几何对象表面的双向反射分布函数BRDF成员变量;如果交点B004所在几何对象的表面为漫反射面,则将变量B005的虚拟点光源类型成员变量赋值为“半球全向光源类型”,否则将变量B005的虚拟点光源类型成员变量赋值为“聚光灯类型”;将光线A003在局部坐标系COR中的方位角和仰角分别赋值给变量B005的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;根据光源AOOl的发光强度和位置、交点B004的位置、交点B004所在的位置的法向量、交点B004所在几何对象的表面的双向反射分布函数BRDF计算变量B005的虚拟点光源的发光强度成员变量的值;如果变量B005的虚拟点光源类型成员变量为“半球全向光源类型”,则将变量B005的虚拟点光源的主光照出射方向成员变量赋值为交点B004所在的位置的法向量,否则将变量B005的虚拟点光源的主光照出射方向成员变量赋值为光线A003在交点B004处发生理想镜面反射时的反射光线方向;将变量B005加入列表LVPLD中。
[0019]St印203-3:针对光线A003的计算结束;
[0020]St印204:令列表LVPLU为空;
[0021]St印205:对本方法的第一部分中得到的列表LVPLS中的每个数据结构DS类型的变量B006,利用GPU并行计算设备并行地执行子步骤St印205-1至St印205-4:
[0022]St印205-1:判断列表LVPLD中是否存在一个数据结构DS类型的变量B007,变量B007的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量分别等于变量B006的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;如果不存在,则转子步骤Step205-3 ;
[0023]St印205-2:根据变量B006的虚拟点光源的位置成员变量和光源AOOl的位置,计算变量B006对应的虚拟点光源与光源AOOl之间的距离Dl ;根据变量B007的虚拟点光源的位置成员变量和光源AOOl的位置,计算变量B007对应的虚拟点光源与光源AOOl之间的距离D2 ;如果Dl≥D2,将变量B007加入列表LVPLU中,否则将变量B006加入列表LVPLU中;删除列表LVPLD中的变量B007 ;转子步骤Step205_4 ;
[0024]St印205-3:将变量B006加到列表LVPLU中;
[0025]St印205-4:针对数据结构DS类型的变量B006的计算结束;
[0026]Step206:将列表LVPLD中剩余的变量加到列表LVPLU中;
[0027]St印207:在GPU并行计算设备上,用光线投射算法计算动画三维场景的第ID帧画面的直接光照结果,并将其保存在变量Vl中;
[0028]Step208:对列表LVPLU中的每个数据结构DS类型的变量C001,在GPU并行计算设备上并行地执行子步骤St印208-1至St印208-4:
[0029]St印208-1:如果变量COOl的虚拟点光源类型成员变量为“半球全向光源类型”,转子步骤St印208-3 ;
[0030]St印208-2:用变量COOl对应的虚拟点光源照射第ID帧对应的动画三维场景,变量COOl对应的虚拟点光源表示的聚光灯的角衰系数取值为COOl对应的虚拟点光源所在位置的几何对象表面的高光系数,变量COOl对应的虚拟点光源表示的聚光灯的主光照出射方向与聚光灯的光锥的母线之间的夹角取值为90度;用光线投射算法计算变量COOl对应的虚拟点光源对第ID帧对应的动画三维场景产生的直接光照结果,并将其累加到变量Vl中;转子步骤St印208-4 ;
[0031]St印208-3:用变量COOl对应的虚拟点光源照射第ID帧对应的动画三维场景;用光线投射算法计算变量COOl对应的虚拟点光源对第ID帧对应的动画三维场景产生的直接光照结果,并将其累加到变量Vl中;
[0032]St印208-4:针对数据结构DS类型的变量COOl的计算结束;
[0033]St印209:将变量Vl中的光照数据转换为第ID帧的画面图像数据输出到文件中;
[0034]St印210:将场景图DSG中的几何对象变换到第ID+1帧的状态;将变量ID的值加1,转步骤St印202。
[0035]有益效果
[0036]本发明提供了一种利用虚拟点光源实现动画三维场景的全局光照绘制的方法。本方法既可以绘制由漫反射表面对直接来自光源的光照的反射产生的间接光照,又可以绘制由具有较高光泽度的表面对直接来自光源的光照的反射产生的间接光照。通过将动画三维场景的几何对象分成静态对象和动态对象,并分别用不同的场景图进行组织和管理,实现了虚拟点光源在连续帧之间的大量重用,从而提高了连续帧画面之间的光照时间相关性,显著减小了动画画面的时间闪烁。本方法可以支持同时存在视点和几何对象运动的动画三维场景的全局光照绘制。在三维动画制作中使用本发明,可以提高三维动画的视觉质量。
【专利附图】

【附图说明】
[0037]图1为对聚光灯光源的光照发射空间进行光线采样的示意图。图2为对全向点光源的光照发射空间进行光线采样的示意图。图3为光线的方位角和仰角示意图。
【具体实施方式】
[0038]为了使本方法的特征和优点更加清楚明白,下面结合具体实施例对本方法作进一步的描述。在本实施例中,考虑包含一个聚光灯的动画三维场景,三维场景中无透明的几何对象。计算机系统的CPU选择Intel (R)Xeon (R) CPU E3-1225v3i3.20GHz,内存选择金士顿8GB DDR31333,GPU 选择 NVIDIA Quadro K2000,硬盘选择 Buffalo HD-CE1.5TU2 ;软件编程工具选用VC++2010、0penGL2.0、CUDA5.5 ;利用CUDA编写运行在GPU上的并行程序。在本实施例中,对光源的光照发射空间进行光线采样时,采用如下方式生成采样光线:在垂直于聚光灯的主光照出射方向的平面上,求出与聚光灯的光锥外切的正方形;在该正方形内产生一个NXN的均匀网格,从聚光灯的光锥顶点向各网格单元的中心点发射射线,只要网格单元的中心点在聚光灯的光锥内,与其对应的射线就是一条采样光线。聚光灯的主光照出射方向平行于聚光灯的光锥的中轴线方向。
[0039]本方法的技术解决方案:将动画三维场景中的几何对象分为静态几何对象和动态几何对象,所有静态几何对象用一个场景图SSG来组织和管理,所有动态几何对象用一个场景图DSG来组织和管理;对光源的光照发射空间进行光线采样,即从光源位置向光源的光照发射空间中投射一系列光线,如图1和图2所示,分别计算这些光线与场景图SSG和场景图DSG中的几何对象的交点;在这些交点处创建虚拟点光源来照射三维场景,通过计算这些虚拟点光源对三维场景点的直接光照贡献来近似绘制主光源产生的间接光照。建立以光源位置为原点的局部坐标系COR,局部坐标系COR的z轴正方向取为光源的主光照出射方向,局部坐标系COR的X轴和y轴任意选取,只需保证局部坐标系COR的x轴、y轴、z轴两两正交即可;为了简化对从光源投射的光线的方向的描述,如图3所示,使用方位角和仰角来描述光线的方向。
[0040]本方法首先提供一种数据结构DS,用于存储与虚拟点光源相关的数据;数据结构DS包括虚拟点光源的位置、虚拟点光源所在位置的法向量、虚拟点光源的发光强度、虚拟点光源的主光照出射方向、虚拟点光源类型、虚拟点光源所在几何对象表面的双向反射分布函数BRDF、与虚拟点光源相关联的光线的方位角、与虚拟点光源相关联的光线的仰角共八个成员变量。
[0041]本方法的第一部分在计算机系统中计算三维场景中的光源AOOl的光照发射空间的采样光线与场景图SSG中的几何对象的交点,并在交点位置处创建虚拟点光源,具体步骤如下:
[0042]SteplOl:令列表A002为空;令列表LVPLS为空;
[0043]Stepl02:从光源AOOl所在位置向光源AOOl的光照发射空间投射一系列光线,并将这些光线存放在列表A002中;
[0044]St印103:对列表A002中的每条光线A003,利用GPU并行计算设备并行地执行子步骤St印103-1至St印103-3:
[0045]St印103-1:测试光线A003是否与场景图SSG中的几何对象相交,如果不相交,则转子步骤St印103-3 ;
[0046]St印103-2:计算光线A003与场景图SSG中的几何对象之间的距光源AOOl最近的交点A004,创建一个数据结构DS类型的变量A005 ;将交点A004所在的位置赋值给变量A005的虚拟点光源的位置成员变量,将交点A004所在的位置的法向量赋值给变量A005的虚拟点光源所在位置的法向量成员变量,将交点A004所在几何对象的表面的双向反射分布函数BRDF赋值给变量A005的虚拟点光源所在几何对象表面的双向反射分布函数BRDF成员变量;如果交点A004所在几何对象的表面为漫反射面,则将变量A005的虚拟点光源类型成员变量赋值为“半球全向光源类型”,否则将变量A005的虚拟点光源类型成员变量赋值为“聚光灯类型”;将光线A003在局部坐标系COR中的方位角和仰角分别赋值给变量A005的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;根据光源AOOl的发光强度和位置、交点A004的位置、交点A004所在的位置的法向量、交点A004所在几何对象的表面的双向反射分布函数BRDF计算变量A005的虚拟点光源的发光强度成员变量的值;如果变量A005的虚拟点光源类型成员变量为“半球全向光源类型”,则将变量A005的虚拟点光源的主光照出射方向成员变量赋值为交点A004所在的位置的法向量,否则将变量A005的虚拟点光源的主光照出射方向成员变量赋值为光线A003在交点A004处发生理想镜面反射时的反射光线方向;将变量A005加入列表LVPLS中。
[0047]St印103-3:针对光线A003的计算结束。
[0048]本方法的第二部分逐帧地完成动画三维场景的全局光照绘制,具体步骤如下:[0049]St印201:令帧编号变量ID为I ;
[0050]St印202:令列表LVPLD为空;
[0051]St印203:对本方法的第一部分中得到的列表A002中的每条光线A003,利用GPU并行计算设备并行地执行子步骤St印203-1至St印203-3:
[0052]St印203-1:测试光线A003是否与场景图DSG中的几何对象相交,如果不相交,则转子步骤St印203-3 ;
[0053]St印203-2:计算光线A003与场景图DSG中的几何对象之间的距光源AOOl最近的交点B004,创建一个数据结构DS类型的变量B005 ;将交点B004所在的位置赋值给变量B005的虚拟点光源的位置成员变量,将交点B004所在的位置的法向量赋值给变量B005的虚拟点光源所在位置的法向量成员变量,将交点B004所在几何对象的表面的双向反射分布函数BRDF赋值给变量B005的虚拟点光源所在几何对象表面的双向反射分布函数BRDF成员变量;如果交点B004所在几何对象的表面为漫反射面,则将变量B005的虚拟点光源类型成员变量赋值为“半球全向光源类型”,否则将变量B005的虚拟点光源类型成员变量赋值为“聚光灯类型”;将光线A003在局部坐标系COR中的方位角和仰角分别赋值给变量B005的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;根据光源AOOl的发光强度和位置、交点B004的位置、交点B004所在的位置的法向量、交点B004所在几何对象的表面的双向反射分布函数BRDF计算变量B005的虚拟点光源的发光强度成员变量的值;如果变量B005的虚拟点光源类型成员变量为“半球全向光源类型”,则将变量B005的虚拟点光源的主光照出射方向成员变量赋值为交点B004所在的位置的法向量,否则将变量B005的虚拟点光源的主光照出射方向成员变量赋值为光线A003在交点B004处发生理想镜面反射时的反射光线方向;将变量B005加入列表LVPLD中。
[0054]St印203-3:针对光线A003的计算结束;
[0055]St印204:令列表LVPLU为空;
[0056]St印205:对本方法的第一部分中得到的列表LVPLS中的每个数据结构DS类型的变量B006,利用GPU并行计算设备并行地执行子步骤St印205-1至St印205-4:
[0057]St印205-1:判断列表LVPLD中是否存在一个数据结构DS类型的变量B007,变量B007的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量分别等于变量B006的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;如果不存在,则转子步骤Step205-3 ;
[0058]St印205-2:根据变量B006的虚拟点光源的位置成员变量和光源AOOl的位置,计算变量B006对应的虚拟点光源与光源AOOl之间的距离Dl ;根据变量B007的虚拟点光源的位置成员变量和光源AOOl的位置,计算变量B007对应的虚拟点光源与光源AOOl之间的距离D2 ;如果Dl≥D2,将变量B007加入列表LVPLU中,否则将变量B006加入列表LVPLU中;删除列表LVPLD中的变量B007 ;转子步骤Step205_4 ;
[0059]St印205-3:将变量B006加到列表LVPLU中; [0060]St印205-4:针对数据结构DS类型的变量B006的计算结束;
[0061]Step206:将列表LVPLD中剩余的变量加到列表LVPLU中;
[0062]St印207:在GPU并行计算设备上,用光线投射算法计算动画三维场景的第ID帧画面的直接光照结果,并将其保存在变量Vl中;[0063]St印208:对列表LVPLU中的每个数据结构DS类型的变量C001,在GPU并行计算设备上并行地执行子步骤St印208-1至St印208-4:
[0064]St印208-1:如果变量COOl的虚拟点光源类型成员变量为“半球全向光源类型”,转子步骤St印208-3:
[0065]St印208-2:用变量COOl对应的虚拟点光源照射第ID帧对应的动画三维场景,变量COOl对应的虚拟点光源表示的聚光灯的角衰系数取值为COOl对应的虚拟点光源所在位置的几何对象表面的高光系数,变量COOl对应的虚拟点光源表示的聚光灯的主光照出射方向与聚光灯的光锥的母线之间的夹角取值为90度;用光线投射算法计算变量COOl对应的虚拟点光源对第ID帧对应的动画三维场景产生的直接光照结果,并将其累加到变量Vl中;转子步骤St印208-4 ;
[0066]St印208-3:用变量COOl对应的虚拟点光源照射第ID帧对应的动画三维场景;用光线投射算法计算变量COOl对应的虚拟点光源对第ID帧对应的动画三维场景产生的直接光照结果,并将其累加到变量Vl中;
[0067]St印208-4:针对数据结构DS类型的变量COOl的计算结束;
[0068]St印209:将变量Vl中的光照数据转换为第ID帧的画面图像数据输出到文件中;
[0069]St印210:将场景图DSG中的几何对象变换到第ID+1帧的状态;将变量ID的值加1,转步骤St印202。
[0070]如果绘制包含一个全向点光源的动画三维场景的全局光照。在对光源的光照发射空间进行光线采样时,可在全向点光源周围放置一个立方体,将全向点光源放置在立方体的中心位置;在立方体的每个面上,各产生一个NXN的均匀网格,从点光源位置向各网格单元的中心点发射射线,每条射线就是一条采样光线。
【权利要求】
1.利用虚拟点光源实现动画三维场景的全局光照绘制的方法,其特征在于,所需的数据结构以及实现步骤如下: 本方法的目的在于提供一种利用虚拟点光源实现动画三维场景的全局光照绘制的方法;本方法的技术解决方案:将动画三维场景中的几何对象分为静态几何对象和动态几何对象,所有静态几何对象用一个场景图SSG来组织和管理,所有动态几何对象用一个场景图DSG来组织和管理;对光源的光照发射空间进行光线采样,即从光源位置向光源的光照发射空间中投射一系列光线,分别计算这些光线与场景图SSG和场景图DSG中的几何对象的交点;在这些交点处创建虚拟点光源来照射三维场景,通过计算这些虚拟点光源对三维场景点的直接光照贡献来近似绘制主光源产生的间接光照;建立以光源位置为原点的局部坐标系COR,局部坐标系COR的z轴正方向取为光源的主光照出射方向,局部坐标系COR的X轴和I轴任意选取,只需保证局部坐标系COR的X轴、y轴、z轴两两正交即可;为了简化对从光源投射的光线的方向的描述,使用方位角和仰角来描述光线的方向; 本方法首先提供一种数据结构DS,用于存储与虚拟点光源相关的数据;数据结构DS包括虚拟点光源的位置、虚拟点光源所在位置的法向量、虚拟点光源的发光强度、虚拟点光源的主光照出射方向、虚拟点光源类型、虚拟点光源所在几何对象表面的双向反射分布函数BRDF、与虚拟点光源相关联的光线的方位角、与虚拟点光源相关联的光线的仰角共八个成员变量; 本方法的第一部分在计算机系统中计算三维场景中的光源AOOl的光照发射空间的采样光线与场景图SSG中的几何对象的交点,并在交点位置处创建虚拟点光源,具体步骤如下: SteplOl:令列表A002为空;令列表LVPLS为空; Stepl02:从光源AOOl所在位置向光源AOOl的光照发射空间投射一系列光线,并将这些光线存放在列表A002中; St印103:对列表A002中的每条光线A003,利用GPU并行计算设备并行地执行子步骤St印 103-1 至 St印 103-3: St印103-1:测试光线A003是否与场景图SSG中的几何对象相交,如果不相交,则转子步骤St印103-3 ; St印103-2:计算光线A003与场景图SSG中的几何对象之间的距光源AOOl最近的交点A004,创建一个数据结构DS类型的变量A005 ;将交点A004所在的位置赋值给变量A005的虚拟点光源的位置成员变量,将交点A004所在的位置的法向量赋值给变量A005的虚拟点光源所在位置的法向量成员变量,将交点A004所在几何对象的表面的双向反射分布函数BRDF赋值给变量A005的虚拟点光源所在几何对象表面的双向反射分布函数BRDF成员变量;如果交点A004所在几何对象的表面为漫反射面,则将变量A005的虚拟点光源类型成员变量赋值为“半球全向光源类型”,否则将变量A005的虚拟点光源类型成员变量赋值为“聚光灯类型”;将光线A003在局部坐标系COR中的方位角和仰角分别赋值给变量A005的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;根据光源AOOI的发光强度和位置、交点A004的位置、交点A004所在的位置的法向量、交点A004所在几何对象的表面的双向反射分布函数BRDF计算变量A005的虚拟点光源的发光强度成员变量的值;如果变量A005的虚拟点光源类型成员变量为“半球全向光源类型”,则将变量A005的虚拟点光源的主光照出射方向成员变量赋值为交点A004所在的位置的法向量,否则将变量A005的虚拟点光源的主光照出射方向成员变量赋值为光线A003在交点A004处发生理想镜面反射时的反射光线方向;将变量A005加入列表LVPLS中; St印103-3:针对光线A003的计算结束; 本方法的第二部分逐帧地完成动画三维场景的全局光照绘制,具体步骤如下: St印201:令帧编号变量ID为I ; St印202:令列表LVPLD为空; St印203:对本方法的第一部分中得到的列表A002中的每条光线A003,利用GPU并行计算设备并行地执行子步骤St印203-1至St印203-3: St印203-1:测试光线A003是否与场景图DSG中的几何对象相交,如果不相交,则转子步骤St印203-3 ; St印203-2:计算光线A003与场景图DSG中的几何对象之间的距光源AOOl最近的交点B004,创建一个数据结构DS类型的变量B005 ;将交点B004所在的位置赋值给变量B005的虚拟点光源的位置成员变量,将交点B004所在的位置的法向量赋值给变量B005的虚拟点光源所在位置的法向量成员变量,将交点B004所在几何对象的表面的双向反射分布函数BRDF赋值给变量B005的虚拟点光源所在几何对象表面的双向反射分布函数BRDF成员变量;如果交点B004所在几何对象的表面为漫反射面,则将变量B005的虚拟点光源类型成员变量赋值为“半球全向光源类型”,否则将变量B005的虚拟点光源类型成员变量赋值为“聚光灯类型”;将光线A003在局部坐 标系COR中的方位角和仰角分别赋值给变量B005的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;根据光源AOOl的发光强度和位置、交点B004的位置、交点B004所在的位置的法向量、交点B004所在几何对象的表面的双向反射分布函数BRDF计算变量B005的虚拟点光源的发光强度成员变量的值;如果变量B005的虚拟点光源类型成员变量为“半球全向光源类型”,则将变量B005的虚拟点光源的主光照出射方向成员变量赋值为交点B004所在的位置的法向量,否则将变量B005的虚拟点光源的主光照出射方向成员变量赋值为光线A003在交点B004处发生理想镜面反射时的反射光线方向;将变量B005加入列表LVPLD中; St印203-3:针对光线A003的计算结束; St印204:令列表LVPLU为空; St印205:对本方法的第一部分中得到的列表LVPLS中的每个数据结构DS类型的变量B006,利用GPU并行计算设备并行地执行子步骤St印205-1至St印205-4: St印205-1:判断列表LVPLD中是否存在一个数据结构DS类型的变量B007,变量B007的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量分别等于变量B006的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;如果不存在,则转子步骤Step205-3 ; St印205-2:根据变量B006的虚拟点光源的位置成员变量和光源AOOl的位置,计算变量B006对应的虚拟点光源与光源AOOl之间的距离Dl ;根据变量B007的虚拟点光源的位置成员变量和光源AOOl的位置,计算变量B007对应的虚拟点光源与光源AOOl之间的距离D2 ;如果Dl≥D2,将变量B007加入列表LVPLU中,否则将变量B006加入列表LVPLU中;删除列表LVPLD中的变量B007 ;转子步骤Step205_4 ;St印205-3:将变量B006加到列表LVPLU中; St印205-4:针对数据结构DS类型的变量B006的计算结束; St印206:将列表LVPLD中剩余的变量加到列表LVPLU中; St印207:在GPU并行计算设备上,用光线投射算法计算动画三维场景的第ID帧画面的直接光照结果,并将其保存在变量Vl中; St印208:对列表LVPLU中的每个数据结构DS类型的变量⑶01,在GPU并行计算设备上并行地执行子步骤St印208-1至St印208-4: St印208-1:如果变量COOl的虚拟点光源类型成员变量为“半球全向光源类型”,转子步骤St印208-3 ; St印208-2:用变量COOl对应的虚拟点光源照射第ID帧对应的动画三维场景,变量COOl对应的虚拟点光源表示的聚光灯的角衰系数取值为COOl对应的虚拟点光源所在位置的几何对象表面的高光系数,变量COOl对应的虚拟点光源表示的聚光灯的主光照出射方向与聚光灯的光锥的母线之间的夹角取值为90度;用光线投射算法计算变量COOl对应的虚拟点光源对第ID帧对应的动画三维场景产生的直接光照结果,并将其累加到变量Vl中;转子步骤St印208-4 ; St印208-3:用变量COOl对应的虚拟点光源照射第ID帧对应的动画三维场景;用光线投射算法计算变量COOl对应的虚拟点光源对第ID帧对应的动画三维场景产生的直接光照结果,并将其累加到变量V l中; St印208-4:针对数据结构DS类型的变量COOl的计算结束; Step209:将变量Vl中的光照数据转换为第ID帧的画面图像数据输出到文件中; St印210:将场景图DSG中的几何对象变换到第ID+1帧的状态;将变量ID的值加1,转步骤St印202。
【文档编号】G06T15/06GK104008563SQ201410263798
【公开日】2014年8月27日 申请日期:2014年6月7日 优先权日:2014年6月7日
【发明者】陈纯毅, 杨华民, 李岩芳, 李华, 蒋振刚, 范静涛, 韩成, 曲福恒 申请人:长春理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1