CN101982838B - 一种加速被面光源照射的3d虚拟场景的光线跟踪的方法 - Google Patents

一种加速被面光源照射的3d虚拟场景的光线跟踪的方法 Download PDF

Info

Publication number
CN101982838B
CN101982838B CN2010105277474A CN201010527747A CN101982838B CN 101982838 B CN101982838 B CN 101982838B CN 2010105277474 A CN2010105277474 A CN 2010105277474A CN 201010527747 A CN201010527747 A CN 201010527747A CN 101982838 B CN101982838 B CN 101982838B
Authority
CN
China
Prior art keywords
light source
sampled point
variable
row
point
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
CN2010105277474A
Other languages
English (en)
Other versions
CN101982838A (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 CN2010105277474A priority Critical patent/CN101982838B/zh
Publication of CN101982838A publication Critical patent/CN101982838A/zh
Application granted granted Critical
Publication of CN101982838B publication Critical patent/CN101982838B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明公开一种加速被面光源照射的3D虚拟场景的光线跟踪的方法,属于真实感3D虚拟场景绘制技术领域。当前常用蒙特卡洛光线跟踪方法绘制被面光源照射的3D虚拟场景。由于蒙特卡洛光线跟踪方法需要执行大量的光源采样点可见性计算,因此其计算效率不高。本发明通过一个预计算过程获得面光源照射到的几何面片的深度数据,在光线跟踪过程中利用这些深度数据直接计算每个场景点处的光源采样点可见性,避免了可见性测试光线的创建、遍历、求交测试等运算,提高了光线跟踪效率。相对于蒙特卡洛光线跟踪方法,本发明方法可使光线跟踪的速度提高3~4倍。

Description

一种加速被面光源照射的3D虚拟场景的光线跟踪的方法
技术领域
本发明属于真实感3D虚拟场景绘制技术领域,涉及一种加速被面光源照射的3D虚拟场景的光线跟踪的方法。
背景技术
真实感3D虚拟场景绘制技术在数字娱乐、影视特效、建筑CAD、广告动画等领域受到人们的广泛关注。目前3D虚拟场景绘制技术虽然已经得到深入的研究,但是如何快速绘制具有高度真实感的3D虚拟场景画面仍然是一个有待进一步解决的难题。传统的光栅化技术不支持全局光照计算,使用其绘制的3D虚拟场景画面往往缺乏真实感。光线跟踪方法能够绘制出反射、折射、阴影等效果,是一种全局光照算法。使用光线跟踪绘制得到的3D虚拟场景画面比使用光栅化技术绘制得到的3D虚拟场景画面的真实感更强。因此光线跟踪方法在真实感3D虚拟场景绘制中得到了广泛应用。
当要求高度的真实感时,3D虚拟场景通常使用面光源而非理想的点光源进行照射。通常使用蒙特卡洛光线跟踪方法绘制被面光源照射的3D虚拟场景。蒙特卡洛光线跟踪方法通过对面光源进行重要性采样实现全局光照计算。对每个需要计算光照值的场景点,该方法都需要计算大量的光源采样点的可见性,即判断场景点与光源采样点之间是否存在遮挡。在计算每个光源采样点的可见性时,需要产生一条从场景点出发,射向该光源采样点的可见性测试光线,并用此可见性测试光线遍历场景加速结构,以便确定是否有几何图元与此可见性测试光线相交,进而判断场景点与光源采样点之间是否存在遮挡。由于光线跟踪需要跟踪大量光线的多次反射(或折射)过程,并且需要计算每个反射(或折射)点的光照值,因此上述光源采样点的可见性计算量非常大。这使得蒙特卡洛光线跟踪的计算效率并不高,导致绘制一幅3D虚拟场景画面的时间很长。所以人们迫切需要一种能够加速被面光源照射的3D虚拟场景的光线跟踪的方法。
发明内容
本发明的目的在于提供一种加速被面光源照射的3D虚拟场景的光线跟踪的方法。本方法在光线跟踪之前通过一个预计算过程获得面光源照射到的几何面片的深度数据,在光线跟踪过程中利用这些深度数据直接计算每个场景点处的光源采样点可见性,避免了可见性测试光线的创建、遍历、求交测试等运算,提高了光线跟踪效率。本发明的方法所需的设备及其实现步骤如下:
1.所需设备:主机系统(101)和GPU计算集群(102);如图1所示,主机系统(101)包括CPU(103)、内存(104)和磁盘(105)。
2.实现步骤:
本方法第一部分,得到面光源照射到的几何面片的深度数据,具体步骤如下:
步骤S011:将3D虚拟场景模型数据(A001)从磁盘(105)加载到内存(104)中;
步骤S012:在CPU(103)上计算面光源轮廓线(201)的外切矩形(202);
步骤S013:如图2所示,在外切矩形(202)内均匀地选取m行、n列光源采样点,得到一个二维采样点阵列(A002),将其存放在内存(104)中;
步骤S014:在内存(104)中创建一个m行、n列的掩模矩阵M(A003),掩模矩阵M(A003)中的各个元素与二维采样点阵列(A002)中的各个光源采样点一一对应;掩模矩阵M(A003)的每个元素的数据结构如图3所示,其包含一个变量名为tag的标识变量(301)、一个变量名为depthMapPtr的深度图指针变量(302)和一个变量名为transformMatrix的坐标系变换矩阵变量(303);将掩模矩阵M(A003)的每个元素包含的标识变量(301)设置为0;
步骤S015:任意选取一个与面光源平面平行的向量作为U方向向量(A004);
步骤S016:把3D虚拟场景模型数据(A001)送入GPU计算集群(102)的Global Memory中;
步骤S017:对二维采样点阵列(A002)中的每个光源采样点Sij,下标i为光源采样点Sij在二维采样点阵列(A002)中的行号,下标j为光源采样点Sij在二维采样点阵列(A002)中的列号,判断光源采样点Sij是否在面光源轮廓线(201)之内,如果光源采样点Sij在面光源轮廓线(201)之内,则:
①将掩模矩阵M(A003)的第i行、j列的元素的标识变量(301)设置为1;
②以光源采样点Sij为虚拟相机视点,以面光源平面法向量为虚拟相机视轴正方向,面光源平面法向量与面光源的朝向相同,以U方向向量(A004)为虚拟相机向上方向向量,根据3D虚拟场景与面光源的位置关系设置合适的虚拟相机视场角(A005),根据3D虚拟场景的复杂程度设置合适的虚拟相机分辨率(A006),读取存储于GPU计算集群(102)的GlobalMemory中的3D虚拟场景模型数据(A001),调用光栅化图形API在GPU计算集群(102)上绘制3D虚拟场景,记录每个像素的深度值,从而得到以光源采样点Sij为虚拟相机视点的深度图(A007);
③把深度图(A007)传回内存(104),并将深度图(A007)的内存首地址赋值给掩模矩阵M(A003)的第i行、j列的元素的深度图指针变量(302)。
本方法第二部分,根据二维采样点阵列(A002)中的每个光源采样点的位置及面光源平面法向量,计算从世界坐标系到以各光源采样点为原点的光源采样点坐标系(B001)的变换矩阵,具体步骤如下:
步骤S021:选取面光源平面法向量作为N方向向量(B002),定义V方向向量(B003)为N方向向量(B002)与U方向向量(A004)的叉乘;
步骤S022:将U方向向量(A004)、N方向向量(B002)和V方向向量(B003)进行归一化,得到归一化的U方向向量(B004)、归一化的N方向向量(B005)和归一化的V方向向量(B006);
步骤S023:对于掩模矩阵M(A003)中的每个元素B007,判断元素B007的标识变量(301)是否为1,如果为1,则先计算元素B007所在的行号i和列号j,再计算二维采样点阵列(A002)中第i行、j列光源采样点Sij在世界坐标系下的坐标Wij(B008),然后按如下公式计算变换矩阵Tij
T ij = U x U y U z 0 V x V y V z 0 N x N y N z 0 0 0 0 1 1 0 0 - W ijx 0 1 0 - W ijy 0 0 1 - W ijz 0 0 0 1 , 其中Ux、Uy、Uz分别为归一化的U方向向量(B004)的三个分量,Vx、Vy、Vz分别为归一化的N方向向量(B005)的三个分量,Nx、Ny、Nz分别为归一化的V方向向量(B006)的三个分量,最后将Tij赋值给元素B007的坐标系变换矩阵变量(303)。
本方法第三部分,在光线跟踪中利用本方法第一部分计算出的深度图(A007)来加速绘制被面光源照射的3D虚拟场景,具体步骤如下:
步骤S031:将掩模矩阵M(A003)及其各元素的深度图指针变量(302)指向的所有深度图(A007)送入GPU计算集群(102)的Global Memory中;
步骤S032:按照正常的光线跟踪流程,从虚拟相机视点发射穿过屏幕像素(C001)的光线(C002),并判断光线(C002)与3D虚拟场景的几何面片(C003)是否相交,如果相交,则计算出交点坐标P(C004),并转步骤S033,否则屏幕像素(C001)的颜色设置为背景色(C005),并结束对光线(C002)的跟踪;
步骤S033:对掩模矩阵M(A003)中的每个元素C006,判断元素C006的标识变量(301)是否为1,如果为1,则首先将元素C006的坐标系变换矩阵变量(303)赋值给变量T(C007),再计算元素C006所在的行号i和列号j,然后读取二维采样点阵列(A002)的第i行、j列光源采样点Sij(C008),并计算光源采样点Sij(C008)在世界坐标系下的坐标Wij(C009),最后将光源采样点Sij(C008)的行号i与列号j、交点坐标P(C004)、坐标Wij(C009)和变量T(C007)打包成一个结构体变量(C010)送入GPU计算集群(102)的Global Memory中;统计掩模矩阵M(A003)中标识变量(301)为1的元素个数(C011),将元素个数(C011)赋值给变量Ns
步骤S034:在GPU计算集群(102)上创建Ns个并行线程,各线程分别从GPU计算集群(102)的Global Memory中读取一个结构体变量(C010),并行地做以下计算:
u v n 1 = T · P x P y P z 1 , 其中Px、Py、Pz分别为存储于结构体变量(C010)中的交点坐标P(C004)的x、y、z坐标分量,T为存储于结构体变量(C010)中的变量T(C007);
Figure GSB00000683573300043
其中d为步骤S017中调用光栅化图形API在GPU计算集群(102)上绘制3D虚拟场景时的投影面到虚拟相机视点的距离;
Figure GSB00000683573300045
其中θv为步骤S017中调用光栅化图形API在GPU计算集群(102)上绘制3D虚拟场景时设置的虚拟相机视场角(A005),N1为步骤S017中调用光栅化图形API在GPU计算集群(102)上绘制3D虚拟场景时设置的虚拟相机垂直分辨率,N2为步骤S017中调用光栅化图形API在GPU计算集群(102)上绘制3D虚拟场景时设置的虚拟相机水平分辨率;
④根据结构体变量(C010)中保存的行号i与列号j,读取存储于GPU计算集群(102)的Global Memory中的掩模矩阵M(A003)的第i行、j列元素C012的深度图指针变量(302)指向的深度图的第l行、k列像素的深度值(C013);计算存储于结构体变量(C010)中的交点坐标P(C004)与存储于结构体变量(C010)中的坐标Wij(C009)之间的距离D(C014);如果深度值(C013)比距离D(C014)小,则表明存储于结构体变量(C010)中的交点坐标P(C004)处的场景点(C015)不能直接被光源采样点Sij照射,光源采样点Sij对场景点(C015)的直接光照贡献Ld(C016)为0,否则计算光源采样点Sij对场景点(C015)的直接光照贡献Ld(C016);最后将直接光照贡献Ld(C016)传回内存(104);
步骤S035:在CPU(103)上将步骤S034中的各线程传回内存(104)的所有直接光照贡献Ld(C016)相加,以得到面光源对交点坐标P(C004)处的场景点的直接光照值;
步骤S036:按照正常的光线跟踪流程递归地跟踪交点坐标P(C004)处的反射光线或者折射光线,以便计算交点坐标P(C004)处的场景点的间接光照值;在递归过程中,所有场景点处的直接光照值也按上述过程进行计算;最后根据交点坐标P(C004)处的场景点的直接光照值、间接光照值以及材质数据计算出屏幕像素(C001)的颜色。
有益效果
本发明提供了一种加速被面光源照射的3D虚拟场景的光线跟踪的方法。本发明方法与蒙特卡洛光线跟踪方法相比,避免了可见性测试光线的创建、遍历、求交测试等运算,提高了光线跟踪效率。由于使用了掩模矩阵,本发明方法适用于任何轮廓形状的平面面光源。另外,本发明方法利用GPU计算集群并行地计算不同光源采样点对场景点的直接光照值,大大地提高了光线跟踪过程中的光照计算速度。相对于蒙特卡洛光线跟踪方法,本发明方法可使光线跟踪的速度提高3~4倍。
附图说明
图1是本发明所需的设备及其连接方式示意图;图2是面光源轮廓线及其外切矩形与二维光源采样点阵列示意图;图3是掩模矩阵的元素的数据结构示意图。
具体实施方式
为了使本发明的特征和优点更加清楚明白,下面参照附图结合具体实施例对本发明作进一步的描述。
本实施例中的CPU(103)选择Intel XeonTM CPU 3.20GHz,内存(104)选择金士顿8GBDDR3 1333,磁盘(105)选择Buffalo HD-CE 1.5TU2,GPU计算集群(102)选择AMAX Tesla系列GPU计算集群;软件编程工具选用VC++2008、OpenGL 2.0和CUDA 2.0。
本方法第一部分,得到面光源照射到的几何面片的深度数据,具体步骤如下:
步骤S011:将3D虚拟场景模型数据(A001)从磁盘(105)加载到内存(104)中;
步骤S012:在CPU(103)上计算面光源轮廓线(201)的外切矩形(202);
步骤S013:如图2所示,在外切矩形(202)内均匀地选取m行、n列光源采样点,得到一个二维采样点阵列(A002),将其存放在内存(104)中;
步骤S014:在内存(104)中创建一个m行、n列的掩模矩阵M(A003),掩模矩阵M(A003)中的各个元素与二维采样点阵列(A002)中的各个光源采样点一一对应;掩模矩阵M(A003)的每个元素的数据结构如图3所示,其包含一个变量名为tag的标识变量(301)、一个变量名为depthMapPtr的深度图指针变量(302)和一个变量名为transformMatrix的坐标系变换矩阵变量(303);将掩模矩阵M(A003)的每个元素包含的标识变量(301)设置为0;
步骤S015:任意选取一个与面光源平面平行的向量作为U方向向量(A004);
步骤S016:把3D虚拟场景模型数据(A001)送入GPU计算集群(102)的Global Memory中;
步骤S017:对二维采样点阵列(A002)中的每个光源采样点Sij,下标i为光源采样点Sij在二维采样点阵列(A002)中的行号,下标j为光源采样点Sij在二维采样点阵列(A002)中的列号,判断光源采样点Sij是否在面光源轮廓线(201)之内,如果光源采样点Sij在面光源轮廓线(201)之内,则:
①将掩模矩阵M(A003)的第i行、j列的元素的标识变量(301)设置为1;
②以光源采样点Sij为虚拟相机视点,以面光源平面法向量为虚拟相机视轴正方向,面光源平面法向量与面光源的朝向相同,以U方向向量(A004)为虚拟相机向上方向向量,根据3D虚拟场景与面光源的位置关系设置合适的虚拟相机视场角(A005),根据3D虚拟场景的复杂程度设置合适的虚拟相机分辨率(A006),读取存储于GPU计算集群(102)的GlobalMemory中的3D虚拟场景模型数据(A001),调用OpenGL API在GPU计算集群(102)上绘制3D虚拟场景,记录每个像素的深度值,从而得到以光源采样点Sij为虚拟相机视点的深度图(A007);
③把深度图(A007)传回内存(104),并将深度图(A007)的内存首地址赋值给掩模矩阵M(A003)的第i行、j列的元素的深度图指针变量(302)。
本方法第二部分,根据二维采样点阵列(A002)中的每个光源采样点的位置及面光源平面法向量,计算从世界坐标系到以各光源采样点为原点的光源采样点坐标系(B001)的变换矩阵,具体步骤如下:
步骤S021:选取面光源平面法向量作为N方向向量(B002),定义V方向向量(B003)为N方向向量(B002)与U方向向量(A004)的叉乘;
步骤S022:将U方向向量(A004)、N方向向量(B002)和V方向向量(B003)进行归一化,得到归一化的U方向向量(B004)、归一化的N方向向量(B005)和归一化的V方向向量(B006);
步骤S023:对于掩模矩阵M(A003)中的每个元素B007,判断元素B007的标识变量(301)是否为1,如果为1,则先计算元素B007所在的行号i和列号j,再计算二维采样点阵列(A002)中第i行、j列光源采样点Sij在世界坐标系下的坐标Wij(B008),然后按如下公式计算变换矩阵Tij
T ij = U x U y U z 0 V x V y V z 0 N x N y N z 0 0 0 0 1 1 0 0 - W ijx 0 1 0 - W ijy 0 0 1 - W ijz 0 0 0 1 , 其中Ux、Uy、Uz分别为归一化的U方向向量(B004)的三个分量,Vx、Vy、Vz分别为归一化的N方向向量(B005)的三个分量,Nx、Ny、Nz分别为归一化的V方向向量(B006)的三个分量,最后将Tij赋值给元素B007的坐标系变换矩阵变量(303)。
本方法第三部分,在光线跟踪中利用本方法第一部分计算出的深度图(A007)来加速绘制被面光源照射的3D虚拟场景,具体步骤如下:
步骤S031:将掩模矩阵M(A003)及其各元素的深度图指针变量(302)指向的所有深度图(A007)送入GPU计算集群(102)的Global Memory中;
步骤S032:按照正常的光线跟踪流程,从虚拟相机视点发射穿过屏幕像素(C001)的光线(C002),并判断光线(C002)与3D虚拟场景的几何面片(C003)是否相交,如果相交,则计算出交点坐标P(C004),并转步骤S033,否则屏幕像素(C001)的颜色设置为背景色(C005),并结束对光线(C002)的跟踪;
步骤S033:对掩模矩阵M(A003)中的每个元素C006,判断元素C006的标识变量(301)是否为1,如果为1,则首先将元素C006的坐标系变换矩阵变量(303)赋值给变量T(C007),再计算元素C006所在的行号i和列号j,然后读取二维采样点阵列(A002)的第i行、j列光源采样点Sij(C008),并计算光源采样点Sij(C008)在世界坐标系下的坐标Wij(C009),最后将光源采样点Sij(C008)的行号i与列号j、交点坐标P(C004)、坐标Wij(C009)和变量T(C007)打包成一个结构体变量(C010)送入GPU计算集群(102)的Global Memory中;统计掩模矩阵M(A003)中标识变量(301)为1的元素个数(C011),将元素个数(C011)赋值给变量NS
步骤S034:利用CUDAAPI在GPU计算集群(102)上创建Ns个并行线程,各线程分别从GPU计算集群(102)的Global Memory中读取一个结构体变量(C010),并行地做以下计算:
u v n 1 = T · P x P y P z 1 , 其中Px、Py、Pz分别为存储于结构体变量(C010)中的交点坐标P(C004)的x、y、z坐标分量,T为存储于结构体变量(C010)中的变量T(C007);
Figure GSB00000683573300082
其中d为步骤S017中调用OpenGL API在GPU计算集群(102)上绘制3D虚拟场景时的投影面到虚拟相机视点的距离;
Figure GSB00000683573300084
Figure GSB00000683573300085
其中θv为步骤S017中调用OpenGL API在GPU计算集群(102)上绘制3D虚拟场景时设置的虚拟相机视场角(A005),N1为步骤S017中调用OpenGL API在GPU计算集群(102)上绘制3D虚拟场景时设置的虚拟相机垂直分辨率,N2为步骤S017中调用OpenGL API在GPU计算集群(102)上绘制3D虚拟场景时设置的虚拟相机水平分辨率;
④根据结构体变量(C010)中保存的行号i与列号j,读取存储于GPU计算集群(102)的Global Memory中的掩模矩阵M(A003)的第i行、j列元素C012的深度图指针变量(302)指向的深度图的第l行、k列像素的深度值(C013);计算存储于结构体变量(C010)中的交点坐标P(C004)与存储于结构体变量(C010)中的坐标Wij(C009)之间的距离D(C014);如果深度值(C013)比距离D(C014)小,则表明存储于结构体变量(C010)中的交点坐标P(C004)处的场景点(C015)不能直接被光源采样点Sij照射,光源采样点Sij对场景点(C015)的直接光照贡献Ld(C016)为0,否则计算光源采样点Sij对场景点(C015)的直接光照贡献Ld(C016);最后将直接光照贡献Ld(C016)传回内存(104);
步骤S035:在CPU(103)上将步骤S034中的各线程传回内存(104)的所有直接光照贡献Ld(C016)相加,以得到面光源对交点坐标P(C004)处的场景点的直接光照值;
步骤S036:按照正常的光线跟踪流程递归地跟踪交点坐标P(C004)处的反射光线或者折射光线,以便计算交点坐标P(C004)处的场景点的间接光照值;在递归过程中,所有场景点处的直接光照值也按上述过程进行计算;最后根据交点坐标P(C004)处的场景点的直接光照值、间接光照值以及材质数据计算出屏幕像素(C001)的颜色。

Claims (1)

1.一种加速被面光源照射的3D虚拟场景的光线跟踪的方法,其特征在于,所需的设备及实现步骤如下:
所需设备:主机系统(101)和GPU计算集群(102);主机系统(101)包括CPU(103)、内存(104)和磁盘(105);
实现步骤:
本方法第一部分,得到面光源照射到的几何面片的深度数据,具体步骤如下:
步骤S011:将3D虚拟场景模型数据(A001)从磁盘(105)加载到内存(104)中;
步骤S012:在CPU(103)上计算面光源轮廓线(201)的外切矩形(202);
步骤S013:在外切矩形(202)内均匀地选取m行、n列光源采样点,得到一个二维采样点阵列(A002),将其存放在内存(104)中;
步骤S014:在内存(104)中创建一个m行、n列的掩模矩阵M(A003),掩模矩阵M(A003)中的各个元素与二维采样点阵列(A002)中的各个光源采样点一一对应;掩模矩阵M(A003)的每个元素包含一个变量名为tag的标识变量(301)、一个变量名为depthMapPtr的深度图指针变量(302)和一个变量名为transformMatrix的坐标系变换矩阵变量(303);将掩模矩阵M(A003)的每个元素包含的标识变量(301)设置为0;
步骤S015:任意选取一个与面光源平面平行的向量作为U方向向量(A004);
步骤S016:把3D虚拟场景模型数据(A001)送入GPU计算集群(102)的Global Memory中;
步骤S017:对二维采样点阵列(A002)中的每个光源采样点Sij,下标i为光源采样点Sij在二维采样点阵列(A002)中的行号,下标j为光源采样点Sij在二维采样点阵列(A002)中的列号,判断光源采样点Sij是否在面光源轮廓线(201)之内,如果光源采样点Sij在面光源轮廓线(201)之内,则:
第一,将掩模矩阵M(A003)的第i行、j列的元素的标识变量(301)设置为1;
第二,以光源采样点Sij为虚拟相机视点,以面光源平面法向量为虚拟相机视轴正方向,面光源平面法向量与面光源的朝向相同,以U方向向量(A004)为虚拟相机向上方向向量,根据3D虚拟场景与面光源的位置关系设置合适的虚拟相机视场角(A005),根据3D虚拟场景的复杂程度设置合适的虚拟相机分辨率(A006),读取存储于GPU计算集群(102)的GlobalMemory中的3D虚拟场景模型数据(A001),调用光栅化图形API在GPU计算集群(102)上绘制3D虚拟场景,记录每个像素的深度值,从而得到以光源采样点Sij为虚拟相机视点的深度图(A007);
第三,把深度图(A007)传回内存(104),并将深度图(A007)的内存首地址赋值给掩模矩阵M(A003)的第i行、j列的元素的深度图指针变量(302);
本方法第二部分,根据二维采样点阵列(A002)中的每个光源采样点的位置及面光源平面法向量,计算从世界坐标系到以各光源采样点为原点的光源采样点坐标系(B001)的变换矩阵,具体步骤如下:
步骤S021:选取面光源平面法向量作为N方向向量(B002),定义V方向向量(B003)为N方向向量(B002)与U方向向量(A004)的叉乘;
步骤S022:将U方向向量(A004)、N方向向量(B002)和V方向向量(B003)进行归一化,得到归一化的U方向向量(B004)、归一化的N方向向量(B005)和归一化的V方向向量(B006);
步骤S023:对于掩模矩阵M(A003)中的每个元素B007,判断元素B007的标识变量(301)是否为1,如果为1,则先计算元素B007所在的行号i和列号j,再计算二维采样点阵列(A002)中第i行、j列光源采样点Sij在世界坐标系下的坐标Wij(B008),然后按如下公式计算变换矩阵Tij
T ij = U x U y U z 0 V x V y V z 0 N x N y N z 0 0 0 0 1 1 0 0 - W ijx 0 1 0 - W ijy 0 0 1 - W ijz 0 0 0 1 , 其中Ux、Uy、Uz分别为归一化的U方向向量(B004)的三个分量,Vx、Vy、Vz分别为归一化的N方向向量(B005)的三个分量,Nx、Ny、Nz分别为归一化的V方向向量(B006)的三个分量,最后将Tij赋值给元素B007的坐标系变换矩阵变量(303);
本方法第三部分,在光线跟踪中利用本方法第一部分计算出的深度图(A007)来加速绘制被面光源照射的3D虚拟场景,具体步骤如下:
步骤S031:将掩模矩阵M(A003)及其各元素的深度图指针变量(302)指向的所有深度图(A007)送入GPU计算集群(102)的Global Memory中;
步骤S032:按照正常的光线跟踪流程,从虚拟相机视点发射穿过屏幕像素(C001)的光线(C002),并判断光线(C002)与3D虚拟场景的几何面片(C003)是否相交,如果相交,则计算出交点坐标P(C004),并转步骤S033,否则屏幕像素(C001)的颜色设置为背景色(C005),并结束对光线(C002)的跟踪;
步骤S033:对掩模矩阵M(A003)中的每个元素C006,判断元素C006的标识变量(301)是否为1,如果为1,则首先将元素C006的坐标系变换矩阵变量(303)赋值给变量T(C007),再计算元素C006所在的行号i和列号j,然后读取二维采样点阵列(A002)的第i行、j列光源采样点Sij(C008),并计算光源采样点Sij(C008)在世界坐标系下的坐标Wij(C009),最后将光源采样点Sij(C008)的行号i与列号j、交点坐标P(C004)、坐标Wij(C009)和变量T(C007)打包成一个结构体变量(C010)送入GPU计算集群(102)的Global Memory中;统计掩模矩阵M(A003)中标识变量(301)为1的元素个数(C011),将元素个数(C011)赋值给变量Ns
步骤S034:在GPU计算集群(102)上创建Ns个并行线程,各线程分别从GPU计算集群(102)的Global Memory中读取一个结构体变量(C010),并行地做以下计算:
第一, u v n 1 = T · P x P y P z 1 , 其中Px、Py、Pz分别为存储于结构体变量(C010)中的交点坐标P(C004)的x、y、z坐标分量,T为存储于结构体变量(C010)中的变量T(C007);
第二,
Figure FSB00000683573200032
Figure FSB00000683573200033
其中d为步骤S017中调用光栅化图形API在GPU计算集群(102)上绘制3D虚拟场景时的投影面到虚拟相机视点的距离;
第三, 其中θv为步骤S017中调用光栅化图形API在GPU计算集群(102)上绘制3D虚拟场景时设置的虚拟相机视场角(A005),N1为步骤S017中调用光栅化图形API在GPU计算集群(102)上绘制3D虚拟场景时设置的虚拟相机垂直分辨率,N2为步骤S017中调用光栅化图形API在GPU计算集群(102)上绘制3D虚拟场景时设置的虚拟相机水平分辨率;
第四,根据结构体变量(C010)中保存的行号i与列号j,读取存储于GPU计算集群(102)的Global Memory中的掩模矩阵M(A003)的第i行、j列元素C012的深度图指针变量(302)指向的深度图的第l行、k列像素的深度值(C013);计算存储于结构体变量(C010)中的交点坐标P(C004)与存储于结构体变量(C010)中的坐标Wij(C009)之间的距离D(C014);如果深度值(C013)比距离D(C014)小,则表明存储于结构体变量(C010)中的交点坐标P(C004)处的场景点(C015)不能直接被光源采样点Sij照射,光源采样点Sij对场景点(C015)的直接光照贡献Ld(C016)为0,否则计算光源采样点Sij对场景点(C015)的直接光照贡献Ld(C016);最后将直接光照贡献Ld(C016)传回内存(104);
步骤S035:在CPU(103)上将步骤S034中的各线程传回内存(104)的所有直接光照贡献Ld(C016)相加,以得到面光源对交点坐标P(C004)处的场景点的直接光照值;
步骤S036:按照正常的光线跟踪流程递归地跟踪交点坐标P(C004)处的反射光线或者折射光线,以便计算交点坐标P(C004)处的场景点的间接光照值;在递归过程中,所有场景点处的直接光照值也按上述过程进行计算;最后根据交点坐标P(C004)处的场景点的直接光照值、间接光照值以及材质数据计算出屏幕像素(C001)的颜色。
CN2010105277474A 2010-11-02 2010-11-02 一种加速被面光源照射的3d虚拟场景的光线跟踪的方法 Expired - Fee Related CN101982838B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2010105277474A CN101982838B (zh) 2010-11-02 2010-11-02 一种加速被面光源照射的3d虚拟场景的光线跟踪的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010105277474A CN101982838B (zh) 2010-11-02 2010-11-02 一种加速被面光源照射的3d虚拟场景的光线跟踪的方法

Publications (2)

Publication Number Publication Date
CN101982838A CN101982838A (zh) 2011-03-02
CN101982838B true CN101982838B (zh) 2012-06-27

Family

ID=43619735

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010105277474A Expired - Fee Related CN101982838B (zh) 2010-11-02 2010-11-02 一种加速被面光源照射的3d虚拟场景的光线跟踪的方法

Country Status (1)

Country Link
CN (1) CN101982838B (zh)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102346919B (zh) * 2011-11-21 2013-08-21 长春理工大学 在3d动画绘制中利用帧间时间相关的方法
CN102496172A (zh) * 2011-12-06 2012-06-13 阳赛 一种用于生成采样点高维分量的方法
CN104658033B (zh) * 2013-11-18 2017-06-20 华为技术有限公司 多光源下的全局光照绘制方法及装置
CN103679818B (zh) * 2013-12-17 2016-08-17 南京大学 一种基于虚拟面光源的实时场景绘制方法
CN103761759B (zh) * 2013-12-30 2016-09-14 浙江大学 基于光辉喷洒的图像渲染方法
KR102197067B1 (ko) * 2014-04-02 2020-12-30 삼성전자 주식회사 멀티 프레임들의 동일한 영역을 연속으로 렌더링하는 방법 및 장치
CN104835193B (zh) * 2015-05-13 2017-08-25 长春理工大学 基于光线跟踪的三维场景gpu集群绘制系统的负载均衡方法
CN105006011B (zh) * 2015-07-21 2017-08-25 长春理工大学 真实感三维场景的体感交互式绘制系统与方法
CN105447905B (zh) * 2015-11-17 2018-03-06 长春理工大学 基于可见性平滑滤波的三维场景近似柔和阴影绘制方法
CN106776020B (zh) * 2016-12-07 2020-02-21 长春理工大学 大型三维场景的计算机集群分布式路径跟踪绘制方法
CN108984169B (zh) * 2017-06-01 2022-05-03 刘开元 一种跨平台多元集成开发系统
CN107330965B (zh) * 2017-06-12 2020-08-04 长春理工大学 一种利用局部保守光栅化方法实现硬阴影反走样的方法
CN107346558B (zh) * 2017-07-03 2020-05-19 长春理工大学 利用面光源可见性空间相关加速三维场景直接光照效果绘制的方法
CN107909647B (zh) * 2017-11-22 2020-09-15 长春理工大学 基于空间复用的真实感虚拟3d场景光场投影图像绘制方法
CN111010559B (zh) * 2019-11-13 2021-02-26 北京邮电大学 裸眼三维光场内容的生成方法及装置
CN111145330B (zh) * 2019-12-31 2023-06-30 广州方硅信息技术有限公司 人体模型渲染方法、装置、电子设备及存储介质
CN111540018B (zh) * 2020-04-27 2023-06-30 深圳市瑞立视多媒体科技有限公司 相机对称布局模式的得分计算方法及相关设备
CN116740253B (zh) * 2022-09-19 2024-04-16 荣耀终端有限公司 一种光线追踪方法和电子设备
CN116847508A (zh) * 2023-06-27 2023-10-03 深圳光照度科技有限公司 基于场景融合的仿真立体地图的智慧照明控制方法及系统

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6556200B1 (en) * 1999-09-01 2003-04-29 Mitsubishi Electric Research Laboratories, Inc. Temporal and spatial coherent ray tracing for rendering scenes with sampled and geometry data
CN1410948A (zh) * 2002-09-23 2003-04-16 清华大学 平面和球面非线性折射和反射的实时光线跟踪方法
US7852336B2 (en) * 2006-11-28 2010-12-14 International Business Machines Corporation Dynamic determination of optimal spatial index mapping to processor thread resources
US8390618B2 (en) * 2008-03-03 2013-03-05 Intel Corporation Technique for improving ray tracing performance

Also Published As

Publication number Publication date
CN101982838A (zh) 2011-03-02

Similar Documents

Publication Publication Date Title
CN101982838B (zh) 一种加速被面光源照射的3d虚拟场景的光线跟踪的方法
US9741159B2 (en) Graphics processing systems
TWI448983B (zh) 三維物體之三維模型之顯現方法與系統
CN110383337A (zh) 可变速率着色
CN107452048A (zh) 全局光照的计算方法及装置
US20090273601A1 (en) Image Presentation Method and Apparatus for 3D Navigation and Mobile Device Including the Apparatus
CN106056670B (zh) 塔式太阳能热发电系统中剔除遮挡的辐射能密度模拟方法
CN113436308B (zh) 一种三维环境空气质量动态渲染方法
US7098915B2 (en) System and method for determining line-of-sight volume for a specified point
JP2009525526A (ja) ビーム放出によって仮想画像を合成するための方法
CN107220372B (zh) 一种三维地图线要素注记自动放置方法
CN104050704A (zh) 用于可变分辨率渲染的一致性顶点捕捉
CN102521870B (zh) 一种微多边形光线跟踪的着色重用方法
CN102768765A (zh) 实时点光源软阴影渲染方法
Lloyd et al. Warping and Partitioning for Low Error Shadow Maps.
CN107851330B (zh) 用于图形处理的零像素剔除
CN105122310A (zh) 用于基于瓦片的渲染的帧内时戳
CN106204701A (zh) 一种基于光探针插值动态计算间接反射高光的渲染方法
CN113593027B (zh) 一种三维航电显控界面装置
CN101364311A (zh) 大规模城市仿真中快速自动建立模型的方法
CN102928201A (zh) 一种动态的月面成像敏感器的目标模拟系统
CN116228984A (zh) 一种基于气象数据的体积云建模、渲染方法
CN102831634A (zh) 一种高效精确的通用软阴影生成方法
CN101615300A (zh) 一种屏幕空间微结构表面对象环境光遮挡方法
CN106780704B (zh) 基于可见性重用的三维场景直接光照效果近似绘制方法

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

Granted publication date: 20120627

Termination date: 20141102

EXPY Termination of patent right or utility model