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

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

Info

Publication number
CN104008563B
CN104008563B CN201410263798.9A CN201410263798A CN104008563B CN 104008563 B CN104008563 B CN 104008563B CN 201410263798 A CN201410263798 A CN 201410263798A CN 104008563 B CN104008563 B CN 104008563B
Authority
CN
China
Prior art keywords
light
variable
virtual point
point source
source
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201410263798.9A
Other languages
English (en)
Other versions
CN104008563A (zh
Inventor
陈纯毅
杨华民
李岩芳
李华
蒋振刚
范静涛
韩成
曲福恒
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Changchun University of Science and Technology
Original Assignee
Changchun University of Science and Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Changchun University of Science and Technology filed Critical Changchun University of Science and Technology
Priority to CN201410263798.9A priority Critical patent/CN104008563B/zh
Publication of CN104008563A publication Critical patent/CN104008563A/zh
Application granted granted Critical
Publication of CN104008563B publication Critical patent/CN104008563B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Processing Or Creating Images (AREA)
  • Image Generation (AREA)

Abstract

本发明公开一种利用虚拟点光源实现动画三维场景的全局光照绘制的方法,属于三维动画绘制技术领域。本方法将场景中的几何对象分为静态几何对象和动态几何对象,分别用不同的场景图进行组织和管理。在对光源的光照发射空间进行光线采样的基础上,求解这些光线与场景几何对象的交点,并在交点处创建虚拟点光源照射动画三维场景,进而实现动画三维场景的间接光照绘制。本方法能够在连续帧间大量重用虚拟点光源,可支持同时存在视点和几何对象运动的动画三维场景的全局光照绘制。在三维动画制作中使用本发明,可以提高三维动画的视觉质量。

Description

利用虚拟点光源实现动画三维场景的全局光照绘制的方法
技术领域
本发明属于三维动画绘制技术领域,涉及一种利用虚拟点光源实现动画三维场景的全局光照绘制的方法。
背景技术
目前三维动画在产品展示、广告、影视娱乐等行业得到广泛应用。为了提高三维动画画面的真实感,往往要求实现动画三维场景的全局光照绘制。全局光照可分解成直接光照和间接光照两部分。三维场景的直接光照绘制相对比较简单,已有不少成熟技术。实际上,三维场景的全局光照绘制的难点在于,如何高效地计算间接光照。对大多数动画三维场景来说,往往仅计算一次反射产生的间接光照贡献就可以绘制出真实感较强的画面。从光源发射一系列光线,在这些光线与三维场景对象相交的地方生成一系列虚拟点光源。用这些虚拟点光源照射三维场景即可模拟一次反射产生的间接光照贡献。与静态三维场景的绘制结果不同,动画三维场景的绘制结果由一系列连续的帧画面组成。在绘制动画三维场景时,如果连续帧画面之间固有的光照时间相关性得不到很好的保持,则最终的动画会出现画面闪烁现象,进而影响观众的视觉体验效果。当利用虚拟点光源实现动画三维场景的全局光照绘制时,如果某一个虚拟点光源在连续的多帧中都有效,则此虚拟点光源应当在这些连续帧的绘制中都被使用,以便保持连续帧画面之间的光照时间相关性。
对于实际动画三维场景,往往只有少数几何对象在各帧中会发生运动或者变化,多数几何对象在各帧中保持静止状态。此外,许多实际动画三维场景中的光源在各帧中都不会发生变化。例如一个表现人在办公室中行走的动画,办公室中的光源往往都是固定的。如果在动画三维场景的各帧中不存在原有几何对象消失或者新几何对象产生的现象,则可以将动画三维场景中的几何对象分为静止几何对象和动态几何对象两类,并对它们分别进行组织和管理。如果动画三维场景中的光源在各帧中不发生变化,对于与静止几何对象相关的光照贡献中间计算结果,满足一定条件时,可很容易地在各帧中进行重用,从而保持连续帧画面之间的光照时间相关性。
发明内容
本方法的目的在于提供一种利用虚拟点光源实现动画三维场景的全局光照绘制的方法。本方法的技术解决方案:将动画三维场景中的几何对象分为静态几何对象和动态几何对象,所有静态几何对象用一个场景图SSG来组织和管理,所有动态几何对象用一个场景图DSG来组织和管理;对光源的光照发射空间进行光线采样,即从光源位置向光源的光照发射空间中投射一系列光线,如图1和图2所示,分别计算这些光线与场景图SSG和场景图DSG中的几何对象的交点;在这些交点处创建虚拟点光源来照射三维场景,通过计算这些虚拟点光源对三维场景点的直接光照贡献来近似绘制主光源产生的间接光照。建立以光源位置为原点的局部坐标系COR,局部坐标系COR的z轴正方向取为光源的主光照出射方向,局部坐标系COR的x轴和y轴任意选取,只需保证局部坐标系COR的x轴、y轴、z轴两两正交即可;为了简化对从光源投射的光线的方向的描述,如图3所示,使用方位角和仰角来描述光线的方向。
本方法首先提供一种数据结构DS,用于存储与虚拟点光源相关的数据;数据结构DS包括虚拟点光源的位置、虚拟点光源所在位置的法向量、虚拟点光源的发光强度、虚拟点光源的主光照出射方向、虚拟点光源类型、虚拟点光源所在几何对象表面的双向反射分布函数BRDF、与虚拟点光源相关联的光线的方位角、与虚拟点光源相关联的光线的仰角共八个成员变量。
本方法的第一部分在计算机系统中计算三维场景中的光源A001的光照发射空间的采样光线与场景图SSG中的几何对象的交点,并在交点位置处创建虚拟点光源,具体步骤如下:
Step101:令列表A002为空;令列表LVPLS为空;
Step102:从光源A001所在位置向光源A001的光照发射空间投射一系列光线,并将这些光线存放在列表A002中;
Step103:对列表A002中的每条光线A003,利用GPU并行计算设备并行地执行子步骤Step103-1至Step103-3:
Step103-1:测试光线A003是否与场景图SSG中的几何对象相交,如果不相交,则转子步骤Step103-3;
Step103-2:计算光线A003与场景图SSG中的几何对象之间的距光源A001最近的交点A004,创建一个数据结构DS类型的变量A005;将交点A004所在的位置赋值给变量A005的虚拟点光源的位置成员变量,将交点A004所在的位置的法向量赋值给变量A005的虚拟点光源所在位置的法向量成员变量,将交点A004所在几何对象的表面的双向反射分布函数BRDF赋值给变量A005的虚拟点光源所在几何对象表面的双向反射分布函数BRDF成员变量;如果交点A004所在几何对象的表面为漫反射面,则将变量A005的虚拟点光源类型成员变量赋值为“半球全向光源类型”,否则将变量A005的虚拟点光源类型成员变量赋值为“聚光灯类型”;将光线A003在局部坐标系COR中的方位角和仰角分别赋值给变量A005的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;根据光源A001的发光强度和位置、交点A004的位置、交点A004所在的位置的法向量、交点A004所在几何对象的表面的双向反射分布函数BRDF计算变量A005的虚拟点光源的发光强度成员变量的值;如果变量A005的虚拟点光源类型成员变量为“半球全向光源类型”,则将变量A005的虚拟点光源的主光照出射方向成员变量赋值为交点A004所在的位置的法向量,否则将变量A005的虚拟点光源的主光照出射方向成员变量赋值为光线A003在交点A004处发生理想镜面反射时的反射光线方向;将变量A005加入列表LVPLS中。
Step103-3:针对光线A003的计算结束。
本方法的第二部分逐帧地完成动画三维场景的全局光照绘制,具体步骤如下:
Step201:令帧编号变量ID为1;
Step202:令列表LVPLD为空;
Step203:对本方法的第一部分中得到的列表A002中的每条光线A003,利用GPU并行计算设备并行地执行子步骤Step203-1至Step203-3:
Step203-1:测试光线A003是否与场景图DSG中的几何对象相交,如果不相交,则转子步骤Step203-3;
Step203-2:计算光线A003与场景图DSG中的几何对象之间的距光源A001最近的交点B004,创建一个数据结构DS类型的变量B005;将交点B004所在的位置赋值给变量B005的虚拟点光源的位置成员变量,将交点B004所在的位置的法向量赋值给变量B005的虚拟点光源所在位置的法向量成员变量,将交点B004所在几何对象的表面的双向反射分布函数BRDF赋值给变量B005的虚拟点光源所在几何对象表面的双向反射分布函数BRDF成员变量;如果交点B004所在几何对象的表面为漫反射面,则将变量B005的虚拟点光源类型成员变量赋值为“半球全向光源类型”,否则将变量B005的虚拟点光源类型成员变量赋值为“聚光灯类型”;将光线A003在局部坐标系COR中的方位角和仰角分别赋值给变量B005的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;根据光源A001的发光强度和位置、交点B004的位置、交点B004所在的位置的法向量、交点B004所在几何对象的表面的双向反射分布函数BRDF计算变量B005的虚拟点光源的发光强度成员变量的值;如果变量B005的虚拟点光源类型成员变量为“半球全向光源类型”,则将变量B005的虚拟点光源的主光照出射方向成员变量赋值为交点B004所在的位置的法向量,否则将变量B005的虚拟点光源的主光照出射方向成员变量赋值为光线A003在交点B004处发生理想镜面反射时的反射光线方向;将变量B005加入列表LVPLD中。
Step203-3:针对光线A003的计算结束;
Step204:令列表LVPLU为空;
Step205:对本方法的第一部分中得到的列表LVPLS中的每个数据结构DS类型的变量B006,利用GPU并行计算设备并行地执行子步骤Step205-1至Step205-4:
Step205-1:判断列表LVPLD中是否存在一个数据结构DS类型的变量B007,变量B007的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量分别等于变量B006的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;如果不存在,则转子步骤Step205-3;
Step205-2:根据变量B006的虚拟点光源的位置成员变量和光源A001的位置,计算变量B006对应的虚拟点光源与光源A001之间的距离D1;根据变量B007的虚拟点光源的位置成员变量和光源A001的位置,计算变量B007对应的虚拟点光源与光源A001之间的距离D2;如果D1≥D2,将变量B007加入列表LVPLU中,否则将变量B006加入列表LVPLU中;删除列表LVPLD中的变量B007;转子步骤Step205-4;
Step205-3:将变量B006加到列表LVPLU中;
Step205-4:针对数据结构DS类型的变量B006的计算结束;
Step206:将列表LVPLD中剩余的变量加到列表LVPLU中;
Step207:在GPU并行计算设备上,用光线投射算法计算动画三维场景的第ID帧画面的直接光照结果,并将其保存在变量V1中;
Step208:对列表LVPLU中的每个数据结构DS类型的变量C001,在GPU并行计算设备上并行地执行子步骤Step208-1至Step208-4:
Step208-1:如果变量C001的虚拟点光源类型成员变量为“半球全向光源类型”,转子步骤Step208-3;
Step208-2:用变量C001对应的虚拟点光源照射第ID帧对应的动画三维场景,变量C001对应的虚拟点光源表示的聚光灯的角衰系数取值为C001对应的虚拟点光源所在位置的几何对象表面的高光系数,变量C001对应的虚拟点光源表示的聚光灯的主光照出射方向与聚光灯的光锥的母线之间的夹角取值为90度;用光线投射算法计算变量C001对应的虚拟点光源对第ID帧对应的动画三维场景产生的直接光照结果,并将其累加到变量V1中;转子步骤Step208-4;
Step208-3:用变量C001对应的虚拟点光源照射第ID帧对应的动画三维场景;用光线投射算法计算变量C001对应的虚拟点光源对第ID帧对应的动画三维场景产生的直接光照结果,并将其累加到变量V1中;
Step208-4:针对数据结构DS类型的变量C001的计算结束;
Step209:将变量V1中的光照数据转换为第ID帧的画面图像数据输出到文件中;
Step210:将场景图DSG中的几何对象变换到第ID+1帧的状态;将变量ID的值加1,转步骤Step202。
有益效果
本发明提供了一种利用虚拟点光源实现动画三维场景的全局光照绘制的方法。本方法既可以绘制由漫反射表面对直接来自光源的光照的反射产生的间接光照,又可以绘制由具有较高光泽度的表面对直接来自光源的光照的反射产生的间接光照。通过将动画三维场景的几何对象分成静态对象和动态对象,并分别用不同的场景图进行组织和管理,实现了虚拟点光源在连续帧之间的大量重用,从而提高了连续帧画面之间的光照时间相关性,显著减小了动画画面的时间闪烁。本方法可以支持同时存在视点和几何对象运动的动画三维场景的全局光照绘制。在三维动画制作中使用本发明,可以提高三维动画的视觉质量。
附图说明
图1为对聚光灯光源的光照发射空间进行光线采样的示意图。图2为对全向点光源的光照发射空间进行光线采样的示意图。图3为光线的方位角和仰角示意图。
具体实施方式
为了使本方法的特征和优点更加清楚明白,下面结合具体实施例对本方法作进一步的描述。在本实施例中,考虑包含一个聚光灯的动画三维场景,三维场景中无透明的几何对象。计算机系统的CPU选择Intel(R)Xeon(R)CPU E3-1225v3@3.20GHz,内存选择金士顿8GB DDR31333,GPU选择NVIDIA Quadro K2000,硬盘选择Buffalo HD-CE1.5TU2;软件编程工具选用VC++2010、OpenGL2.0、CUDA5.5;利用CUDA编写运行在GPU上的并行程序。在本实施例中,对光源的光照发射空间进行光线采样时,采用如下方式生成采样光线:在垂直于聚光灯的主光照出射方向的平面上,求出与聚光灯的光锥外切的正方形;在该正方形内产生一个N×N的均匀网格,从聚光灯的光锥顶点向各网格单元的中心点发射射线,只要网格单元的中心点在聚光灯的光锥内,与其对应的射线就是一条采样光线。聚光灯的主光照出射方向平行于聚光灯的光锥的中轴线方向。
本方法的技术解决方案:将动画三维场景中的几何对象分为静态几何对象和动态几何对象,所有静态几何对象用一个场景图SSG来组织和管理,所有动态几何对象用一个场景图DSG来组织和管理;对光源的光照发射空间进行光线采样,即从光源位置向光源的光照发射空间中投射一系列光线,如图1和图2所示,分别计算这些光线与场景图SSG和场景图DSG中的几何对象的交点;在这些交点处创建虚拟点光源来照射三维场景,通过计算这些虚拟点光源对三维场景点的直接光照贡献来近似绘制主光源产生的间接光照。建立以光源位置为原点的局部坐标系COR,局部坐标系COR的z轴正方向取为光源的主光照出射方向,局部坐标系COR的x轴和y轴任意选取,只需保证局部坐标系COR的x轴、y轴、z轴两两正交即可;为了简化对从光源投射的光线的方向的描述,如图3所示,使用方位角和仰角来描述光线的方向。
本方法首先提供一种数据结构DS,用于存储与虚拟点光源相关的数据;数据结构DS包括虚拟点光源的位置、虚拟点光源所在位置的法向量、虚拟点光源的发光强度、虚拟点光源的主光照出射方向、虚拟点光源类型、虚拟点光源所在几何对象表面的双向反射分布函数BRDF、与虚拟点光源相关联的光线的方位角、与虚拟点光源相关联的光线的仰角共八个成员变量。
本方法的第一部分在计算机系统中计算三维场景中的光源A001的光照发射空间的采样光线与场景图SSG中的几何对象的交点,并在交点位置处创建虚拟点光源,具体步骤如下:
Step101:令列表A002为空;令列表LVPLS为空;
Step102:从光源A001所在位置向光源A001的光照发射空间投射一系列光线,并将这些光线存放在列表A002中;
Step103:对列表A002中的每条光线A003,利用GPU并行计算设备并行地执行子步骤Step103-1至Step103-3:
Step103-1:测试光线A003是否与场景图SSG中的几何对象相交,如果不相交,则转子步骤Step103-3;
Step103-2:计算光线A003与场景图SSG中的几何对象之间的距光源A001最近的交点A004,创建一个数据结构DS类型的变量A005;将交点A004所在的位置赋值给变量A005的虚拟点光源的位置成员变量,将交点A004所在的位置的法向量赋值给变量A005的虚拟点光源所在位置的法向量成员变量,将交点A004所在几何对象的表面的双向反射分布函数BRDF赋值给变量A005的虚拟点光源所在几何对象表面的双向反射分布函数BRDF成员变量;如果交点A004所在几何对象的表面为漫反射面,则将变量A005的虚拟点光源类型成员变量赋值为“半球全向光源类型”,否则将变量A005的虚拟点光源类型成员变量赋值为“聚光灯类型”;将光线A003在局部坐标系COR中的方位角和仰角分别赋值给变量A005的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;根据光源A001的发光强度和位置、交点A004的位置、交点A004所在的位置的法向量、交点A004所在几何对象的表面的双向反射分布函数BRDF计算变量A005的虚拟点光源的发光强度成员变量的值;如果变量A005的虚拟点光源类型成员变量为“半球全向光源类型”,则将变量A005的虚拟点光源的主光照出射方向成员变量赋值为交点A004所在的位置的法向量,否则将变量A005的虚拟点光源的主光照出射方向成员变量赋值为光线A003在交点A004处发生理想镜面反射时的反射光线方向;将变量A005加入列表LVPLS中。
Step103-3:针对光线A003的计算结束。
本方法的第二部分逐帧地完成动画三维场景的全局光照绘制,具体步骤如下:
Step201:令帧编号变量ID为1;
Step202:令列表LVPLD为空;
Step203:对本方法的第一部分中得到的列表A002中的每条光线A003,利用GPU并行计算设备并行地执行子步骤Step203-1至Step203-3:
Step203-1:测试光线A003是否与场景图DSG中的几何对象相交,如果不相交,则转子步骤Step203-3;
Step203-2:计算光线A003与场景图DSG中的几何对象之间的距光源A001最近的交点B004,创建一个数据结构DS类型的变量B005;将交点B004所在的位置赋值给变量B005的虚拟点光源的位置成员变量,将交点B004所在的位置的法向量赋值给变量B005的虚拟点光源所在位置的法向量成员变量,将交点B004所在几何对象的表面的双向反射分布函数BRDF赋值给变量B005的虚拟点光源所在几何对象表面的双向反射分布函数BRDF成员变量;如果交点B004所在几何对象的表面为漫反射面,则将变量B005的虚拟点光源类型成员变量赋值为“半球全向光源类型”,否则将变量B005的虚拟点光源类型成员变量赋值为“聚光灯类型”;将光线A003在局部坐标系COR中的方位角和仰角分别赋值给变量B005的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;根据光源A001的发光强度和位置、交点B004的位置、交点B004所在的位置的法向量、交点B004所在几何对象的表面的双向反射分布函数BRDF计算变量B005的虚拟点光源的发光强度成员变量的值;如果变量B005的虚拟点光源类型成员变量为“半球全向光源类型”,则将变量B005的虚拟点光源的主光照出射方向成员变量赋值为交点B004所在的位置的法向量,否则将变量B005的虚拟点光源的主光照出射方向成员变量赋值为光线A003在交点B004处发生理想镜面反射时的反射光线方向;将变量B005加入列表LVPLD中。
Step203-3:针对光线A003的计算结束;
Step204:令列表LVPLU为空;
Step205:对本方法的第一部分中得到的列表LVPLS中的每个数据结构DS类型的变量B006,利用GPU并行计算设备并行地执行子步骤Step205-1至Step205-4:
Step205-1:判断列表LVPLD中是否存在一个数据结构DS类型的变量B007,变量B007的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量分别等于变量B006的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;如果不存在,则转子步骤Step205-3;
Step205-2:根据变量B006的虚拟点光源的位置成员变量和光源A001的位置,计算变量B006对应的虚拟点光源与光源A001之间的距离D1;根据变量B007的虚拟点光源的位置成员变量和光源A001的位置,计算变量B007对应的虚拟点光源与光源A001之间的距离D2;如果D1≥D2,将变量B007加入列表LVPLU中,否则将变量B006加入列表LVPLU中;删除列表LVPLD中的变量B007;转子步骤Step205-4;
Step205-3:将变量B006加到列表LVPLU中;
Step205-4:针对数据结构DS类型的变量B006的计算结束;
Step206:将列表LVPLD中剩余的变量加到列表LVPLU中;
Step207:在GPU并行计算设备上,用光线投射算法计算动画三维场景的第ID帧画面的直接光照结果,并将其保存在变量V1中;
Step208:对列表LVPLU中的每个数据结构DS类型的变量C001,在GPU并行计算设备上并行地执行子步骤Step208-1至Step208-4:
Step208-1:如果变量C001的虚拟点光源类型成员变量为“半球全向光源类型”,转子步骤Step208-3:
Step208-2:用变量C001对应的虚拟点光源照射第ID帧对应的动画三维场景,变量C001对应的虚拟点光源表示的聚光灯的角衰系数取值为C001对应的虚拟点光源所在位置的几何对象表面的高光系数,变量C001对应的虚拟点光源表示的聚光灯的主光照出射方向与聚光灯的光锥的母线之间的夹角取值为90度;用光线投射算法计算变量C001对应的虚拟点光源对第ID帧对应的动画三维场景产生的直接光照结果,并将其累加到变量V1中;转子步骤Step208-4;
Step208-3:用变量C001对应的虚拟点光源照射第ID帧对应的动画三维场景;用光线投射算法计算变量C001对应的虚拟点光源对第ID帧对应的动画三维场景产生的直接光照结果,并将其累加到变量V1中;
Step208-4:针对数据结构DS类型的变量C001的计算结束;
Step209:将变量V1中的光照数据转换为第ID帧的画面图像数据输出到文件中;
Step210:将场景图DSG中的几何对象变换到第ID+1帧的状态;将变量ID的值加1,转步骤Step202。
如果绘制包含一个全向点光源的动画三维场景的全局光照。在对光源的光照发射空间进行光线采样时,可在全向点光源周围放置一个立方体,将全向点光源放置在立方体的中心位置;在立方体的每个面上,各产生一个N×N的均匀网格,从点光源位置向各网格单元的中心点发射射线,每条射线就是一条采样光线。

Claims (1)

1.利用虚拟点光源实现动画三维场景的全局光照绘制的方法,其特征在于,所需的数据结构以及实现步骤如下:
本方法的目的在于提供一种利用虚拟点光源实现动画三维场景的全局光照绘制的方法;本方法的技术解决方案:将动画三维场景中的几何对象分为静态几何对象和动态几何对象,所有静态几何对象用一个场景图SSG来组织和管理,所有动态几何对象用一个场景图DSG来组织和管理;对于包含一个聚光灯的三维场景,聚光灯的主光照出射方向平行于聚光灯的光锥的中轴线方向,在垂直于聚光灯的主光照出射方向的平面上,求出与聚光灯的光锥外切的正方形,在该正方形内产生一个N×N的均匀网格,从聚光灯的光锥顶点向各网格单元的中心点发射射线,只要网格单元的中心点在聚光灯的光锥内,与其对应的射线就是一条采样光线,分别计算这些光线与场景图SSG和场景图DSG中的几何对象的交点;在这些交点处创建虚拟点光源来照射三维场景,通过计算这些虚拟点光源对三维场景点的直接光照贡献来近似绘制主光源产生的间接光照;建立以光源位置为原点的局部坐标系COR,局部坐标系COR的z轴正方向取为光源的主光照出射方向,局部坐标系COR的x轴和y轴任意选取,只需保证局部坐标系COR的x轴、y轴、z轴两两正交即可;为了简化对从光源投射的光线的方向的描述,使用方位角和仰角来描述光线的方向;
本方法首先提供一种数据结构DS,用于存储与虚拟点光源相关的数据;数据结构DS包括虚拟点光源的位置、虚拟点光源所在位置的法向量、虚拟点光源的发光强度、虚拟点光源的主光照出射方向、虚拟点光源类型、虚拟点光源所在几何对象表面的双向反射分布函数BRDF、与虚拟点光源相关联的光线的方位角、与虚拟点光源相关联的光线的仰角共八个成员变量;
本方法的第一部分在计算机系统中计算三维场景中的光源A001的光照发射空间的采样光线与场景图SSG中的几何对象的交点,并在交点位置处创建虚拟点光源,具体步骤如下:
Step101:令列表A002为空;令列表LVPLS为空;
Step102:从光源A001所在位置向光源A001的光照发射空间投射一系列光线,并将这些光线存放在列表A002中;
Step103:对列表A002中的每条光线A003,利用GPU并行计算设备并行地执行子步骤Step103-1至Step103-3:
Step103-1:测试光线A003是否与场景图SSG中的几何对象相交,如果不相交,则转子步骤Step103-3;
Step103-2:计算光线A003与场景图SSG中的几何对象之间的距光源A001最近的交点A004,创建一个数据结构DS类型的变量A005;将交点A004所在的位置赋值给变量A005的虚拟点光源的位置成员变量,将交点A004所在的位置的法向量赋值给变量A005的虚拟点光源所在位置的法向量成员变量,将交点A004所在几何对象的表面的双向反射分布函数BRDF赋值给变量A005的虚拟点光源所在几何对象表面的双向反射分布函数BRDF成员变量;如果交点A004所在几何对象的表面为漫反射面,则将变量A005的虚拟点光源类型成员变量赋值为“半球全向光源类型”,否则将变量A005的虚拟点光源类型成员变量赋值为“聚光灯类型”;将光线A003在局部坐标系COR中的方位角和仰角分别赋值给变量A005的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;根据光源A001的发光强度和位置、交点A004的位置、交点A004所在的位置的法向量、交点A004所在几何对象的表面的双向反射分布函数BRDF计算变量A005的虚拟点光源的发光强度成员变量的值;如果变量A005的虚拟点光源类型成员变量为“半球全向光源类型”,则将变量A005的虚拟点光源的主光照出射方向成员变量赋值为交点A004所在的位置的法向量,否则将变量A005的虚拟点光源的主光照出射方向成员变量赋值为光线A003在交点A004处发生理想镜面反射时的反射光线方向;将变量A005加入列表LVPLS中;
Step103-3:针对光线A003的计算结束;
本方法的第二部分逐帧地完成动画三维场景的全局光照绘制,具体步骤如下:
Step201:令帧编号变量ID为1;
Step202:令列表LVPLD为空;
Step203:对本方法的第一部分中得到的列表A002中的每条光线A003,利用GPU并行计算设备并行地执行子步骤Step203-1至Step203-3:
Step203-1:测试光线A003是否与场景图DSG中的几何对象相交,如果不相交,则转子步骤Step203-3;
Step203-2:计算光线A003与场景图DSG中的几何对象之间的距光源A001最近的交点B004,创建一个数据结构DS类型的变量B005;将交点B004所在的位置赋值给变量B005的虚拟点光源的位置成员变量,将交点B004所在的位置的法向量赋值给变量B005的虚拟点光源所在位置的法向量成员变量,将交点B004所在几何对象的表面的双向反射分布函数BRDF赋值给变量B005的虚拟点光源所在几何对象表面的双向反射分布函数BRDF成员变量;如果交点B004所在几何对象的表面为漫反射面,则将变量B005的虚拟点光源类型成员变量赋值为“半球全向光源类型”,否则将变量B005的虚拟点光源类型成员变量赋值为“聚光灯类型”;将光线A003在局部坐标系COR中的方位角和仰角分别赋值给变量B005的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;根据光源A001的发光强度和位置、交点B004的位置、交点B004所在的位置的法向量、交点B004所在几何对象的表面的双向反射分布函数BRDF计算变量B005的虚拟点光源的发光强度成员变量的值;如果变量B005的虚拟点光源类型成员变量为“半球全向光源类型”,则将变量B005的虚拟点光源的主光照出射方向成员变量赋值为交点B004所在的位置的法向量,否则将变量B005的虚拟点光源的主光照出射方向成员变量赋值为光线A003在交点B004处发生理想镜面反射时的反射光线方向;将变量B005加入列表LVPLD中;
Step203-3:针对光线A003的计算结束;
Step204:令列表LVPLU为空;
Step205:对本方法的第一部分中得到的列表LVPLS中的每个数据结构DS类型的变量B006,利用GPU并行计算设备并行地执行子步骤Step205-1至Step205-4:
Step205-1:判断列表LVPLD中是否存在一个数据结构DS类型的变量B007,变量B007的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量分别等于变量B006的与虚拟点光源相关联的光线的方位角和与虚拟点光源相关联的光线的仰角成员变量;如果不存在,则转子步骤Step205-3;
Step205-2:根据变量B006的虚拟点光源的位置成员变量和光源A001的位置,计算变量B006对应的虚拟点光源与光源A001之间的距离D1;根据变量B007的虚拟点光源的位置成员变量和光源A001的位置,计算变量B007对应的虚拟点光源与光源A001之间的距离D2;如果D1≥D2,将变量B007加入列表LVPLU中,否则将变量B006加入列表LVPLU中;删除列表LVPLD中的变量B007;转子步骤Step205-4;
Step205-3:将变量B006加到列表LVPLU中;
Step205-4:针对数据结构DS类型的变量B006的计算结束;
Step206:将列表LVPLD中剩余的变量加到列表LVPLU中;
Step207:在GPU并行计算设备上,用光线投射算法计算动画三维场景的第ID帧画面的直接光照结果,并将其保存在变量V1中;
Step208:对列表LVPLU中的每个数据结构DS类型的变量C001,在GPU并行计算设备上并行地执行子步骤Step208-1至Step208-4:
Step208-1:如果变量C001的虚拟点光源类型成员变量为“半球全向光源类型”,转子步骤Step208-3;
Step208-2:用变量C001对应的虚拟点光源照射第ID帧对应的动画三维场景,变量C001对应的虚拟点光源表示的聚光灯的角衰系数取值为C001对应的虚拟点光源所在位置的几何对象表面的高光系数,变量C001对应的虚拟点光源表示的聚光灯的主光照出射方向与聚光灯的光锥的母线之间的夹角取值为90度;用光线投射算法计算变量C001对应的虚拟点光源对第ID帧对应的动画三维场景产生的直接光照结果,并将其累加到变量V1中;转子步骤Step208-4;
Step208-3:用变量C001对应的虚拟点光源照射第ID帧对应的动画三维场景;用光线投射算法计算变量C001对应的虚拟点光源对第ID帧对应的动画三维场景产生的直接光照结果,并将其累加到变量V1中;
Step208-4:针对数据结构DS类型的变量C001的计算结束;
Step209:将变量V1中的光照数据转换为第ID帧的画面图像数据输出到文件中;
Step210:将场景图DSG中的几何对象变换到第ID+1帧的状态;将变量ID的值加1,转步骤Step202。
CN201410263798.9A 2014-06-07 2014-06-07 利用虚拟点光源实现动画三维场景的全局光照绘制的方法 Expired - Fee Related CN104008563B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410263798.9A CN104008563B (zh) 2014-06-07 2014-06-07 利用虚拟点光源实现动画三维场景的全局光照绘制的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410263798.9A CN104008563B (zh) 2014-06-07 2014-06-07 利用虚拟点光源实现动画三维场景的全局光照绘制的方法

Publications (2)

Publication Number Publication Date
CN104008563A CN104008563A (zh) 2014-08-27
CN104008563B true CN104008563B (zh) 2017-02-22

Family

ID=51369203

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410263798.9A Expired - Fee Related CN104008563B (zh) 2014-06-07 2014-06-07 利用虚拟点光源实现动画三维场景的全局光照绘制的方法

Country Status (1)

Country Link
CN (1) CN104008563B (zh)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105046685B (zh) * 2015-06-19 2017-10-27 长春理工大学 基于单幅摄影球图像的真实点光源方向的计算及虚拟化方法
CN105096371B (zh) * 2015-07-14 2017-08-22 长春理工大学 三维场景中由透明几何对象产生的面焦散效果的近似绘制方法
CN105335995B (zh) * 2015-10-28 2018-06-05 华为技术有限公司 一种多光源全局光照绘制方法及装置
CN106228599B (zh) * 2016-06-24 2019-04-05 长春理工大学 基于两级可见性平滑滤波的近似柔和阴影绘制方法
CN106157321B (zh) * 2016-07-29 2020-05-19 长春理工大学 基于平面表面高动态范围图像的真实点光源位置测算方法
CN106408645B (zh) * 2016-09-05 2020-10-16 上海联影医疗科技有限公司 一种医学图像绘制的方法和设备
CN106447759B (zh) * 2016-10-19 2018-10-12 长春理工大学 利用可见性插值实现三维场景间接光照效果近似绘制的方法
CN107749078B (zh) * 2017-11-22 2020-10-27 长春理工大学 超大规模三维场景的直接光照效果绘制方法
CN109224448B (zh) * 2018-09-25 2021-01-01 北京天马时空网络技术有限公司 一种流光渲染的方法和装置
CN109472856B (zh) * 2018-11-07 2022-12-09 长春理工大学 基于虚拟点光源的复杂真实感三维场景渐进交互式绘制方法
CN110288692B (zh) 2019-05-17 2021-05-11 腾讯科技(深圳)有限公司 光照渲染方法和装置、存储介质及电子装置
CN110728742B (zh) * 2019-10-11 2022-08-23 长春理工大学 基于视觉重要性的三维场景动画渲染间接光照帧间复用方法
EP4191534A4 (en) * 2020-08-31 2024-02-28 Huawei Technologies Co., Ltd. THREE-DIMENSIONAL COLORING METHOD AND APPARATUS, AND COMPUTER DEVICE AND STORAGE MEDIUM
CN112473135B (zh) * 2020-11-06 2024-05-10 完美世界(北京)软件科技发展有限公司 移动游戏的实时光照模拟方法、装置、设备及存储介质
CN116347003B (zh) * 2023-05-30 2023-08-11 湖南快乐阳光互动娱乐传媒有限公司 一种虚拟灯光实时渲染方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102346918A (zh) * 2011-09-30 2012-02-08 长春理工大学 一种只包含物体变化的三维动画场景的绘制方法
CN102346919A (zh) * 2011-11-21 2012-02-08 长春理工大学 在3d动画绘制中利用帧间时间相关的方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030038822A1 (en) * 2001-08-14 2003-02-27 Mitsubishi Electric Research Laboratories, Inc. Method for determining image intensities of projected images to change the appearance of three-dimensional objects

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102346918A (zh) * 2011-09-30 2012-02-08 长春理工大学 一种只包含物体变化的三维动画场景的绘制方法
CN102346919A (zh) * 2011-11-21 2012-02-08 长春理工大学 在3d动画绘制中利用帧间时间相关的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"Monte Carlo"辐射度聚光灯模型;刘满翌等;《计算机辅助设计与图形学学报》;20031120;第15卷(第11期);第1367页第3.2节 *

Also Published As

Publication number Publication date
CN104008563A (zh) 2014-08-27

Similar Documents

Publication Publication Date Title
CN104008563B (zh) 利用虚拟点光源实现动画三维场景的全局光照绘制的方法
US11671717B2 (en) Camera systems for motion capture
JP5476138B2 (ja) 変化する視野に基づいてフレーム間の光線追跡のアクセラレーション・データ構造体を更新する方法
CN107077756B (zh) 三维对象可视化方法、可视化装置、计算机可读存储介质
US20180365880A1 (en) System for Ray Tracing Augmented Objects
Hou et al. Micropolygon ray tracing with defocus and motion blur
CN109448084A (zh) 一种基于体素化全局光照算法进行光贴图烘培的算法
CN106776028A (zh) 一种基于gpu的光线跟踪方法
CN107909647A (zh) 基于空间复用的真实感虚拟3d场景光场投影图像绘制方法
CN102981840A (zh) 基于光子映射图的整体光照计算机模拟处理方法
CN103514624A (zh) 估算参与介质接收到的光量的方法及相应的设备
Rao et al. Comparing 3D rendering engines in blender
US9508315B2 (en) Ordering rays in rendered graphics for coherent shading
Badida et al. Modeling and the use of simulation methods for the design of lighting systems
US9514562B2 (en) Procedural partitioning of a scene
Xuan Design of 3d animation color rendering system based on image enhancement algorithm and machine learning
CN110832549B (zh) 现实世界环境中虚拟对象的经过光线追踪的反射的快速产生方法
Xie Research on application of virtual reality technology in virtual marine environment
Zhdanov et al. Bidirectional ray tracing with caustic photon and indirect imphoton maps
van Barlingen et al. phase space ray tracing
Bettio et al. Scalable rendering of massive triangle meshes on light field displays
Bernik et al. TEHNIKE RENDERIRANJA I RAČUNALNOG OSVJETLJENJA.
Wittkamper et al. Illuminating the mixed reality stage: Applying complex lighting conditions to ar
van Gelderen Stereoscopic Clustered Light Shading
Bernik et al. Rendering and computer lighting techniques

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170222