在3D动画绘制中利用帧间时间相关的方法

著录项
  • CN201110369382.1
  • 20111121
  • CN102346919A
  • 20120208
  • 长春理工大学
  • 陈纯毅;杨华民;蒋振刚;范静涛;冯欣;底晓强;李岩芳;李华;陈占芳
  • G06T13/20(2011.01)I
  • G06T13/20(2011.01)I G06T15/50(2011.01)I

  • 吉林省长春市卫星路7089号
  • 中国,CN,吉林(22)
摘要
本发明公开一种在3D动画绘制中利用帧间时间相关的方法,属于计算机三维动画技术领域。本发明方法在连续的动画帧间重用大部分虚拟点光源,同时更新一小部分失效的虚拟点光源,实现了利用虚拟点光源的帧间时间相关来加速3D动画的绘制。此外,由于在连续的帧间重用了大量虚拟点光源,因此解决了随机生成虚拟点光源造成的画面光照不稳定问题。在3D动画绘制中使用本发明方法,可以大大缩短3D动画的整体制片时间。
权利要求

1.在3D动画绘制中利用帧间时间相关的方法,其特征在于,所需的数据结构以及实现 步骤如下:

本发明方法的目的在于提供一种在3D动画绘制中利用帧间时间相关的方法;本发明方 法的技术解决方案:首先从光源向3D场景随机发射一系列光线,并计算其与3D场景的交点; 在这些交点位置处创建虚拟点光源来照射3D场景,以模拟间接光照;为各虚拟点光源创建 阴影图来实现间接光照的可见性计算;当绘制连续的动画帧时,在当前帧中重用前一帧中的 一部分虚拟点光源及其阴影图,即利用帧间虚拟点光源的时间相关来提高绘制3D动画的速 度和质量;另外,在当前帧中还需要更新一部分已失效的虚拟点光源,以反映场景的变化;

本发明方法首先提供一种数据结构DS,用于存储虚拟点光源的相关数据;数据结构DS 包括虚拟点光源的光照入射方向、虚拟点光源所在面片的双向反射分布函数BRDF、虚拟点 光源所在面片的面片号、虚拟点光源的阴影图、帧间虚拟点光源阴影图变化累计量、虚拟点 光源的位置、虚拟点光源所在位置的法线方向等成员变量;

本发明方法的第一部分计算3D动画的第一帧对应的3D场景的所有虚拟点光源及其相关 数据,并绘制第一帧画面,具体步骤如下:

Step101:对光源的光线发射方向进行蒙特卡洛采样,生成一系列光源光线A001,计算 每条光源光线A001与3D场景的交点A002,在各交点A002位置处生成虚拟点光源A003, 将所有虚拟点光源A003存放在一个列表A004中;

Step102:对列表A004中的每个虚拟点光源A005,做如下计算:

根据第一帧对应的光源的位置和虚拟点光源A005的位置,计算虚拟点光源A005的光照 入射方向A006;计算虚拟点光源A005所在位置的法线方向A007;创建一个数据结构DS类 型的变量V 1,将光照入射方向A006赋值给变量V 1的虚拟点光源的光照入射方向成员变量, 将法线方向A007赋值给变量V 1的虚拟点光源所在位置的法线方向成员变量,将虚拟点光源 A005所在面片的双向反射分布函数BRDF赋值给变量V 1的虚拟点光源所在面片的双向反射 分布函数BRDF成员变量,将虚拟点光源A005所在面片的面片号赋值给变量V 1的虚拟点光 源所在面片的面片号成员变量,将虚拟点光源A005的位置赋值给变量V 1的虚拟点光源的位 置成员变量,将变量V 1的帧间虚拟点光源阴影图变化累计量成员变量赋值为0;以虚拟点光 源A005所在位置为视点,对虚拟点光源A005所在位置的正法线方向半空间中的几何面片按 抛物投影方式进行投影,计算虚拟点光源A005的抛物投影阴影图A008;将抛物投影阴影图 A008赋值给变量V 1的虚拟点光源的阴影图成员变量;将变量V 1和虚拟点光源A005相关联;

Step103:用光线投射算法计算第一帧动画对应的3D场景的直接光照结果,并将其保存 在变量V 2中;

Step104:对列表A004中的每个虚拟点光源A009,做如下计算:

用虚拟点光源A009照射第一帧对应的3D场景,用阴影映射方法计算可见性,编写着 器计算3D场景的光照结果,并将其累加到变量V 2中;

Step105:将变量V 2中的光照数据转换为第一帧的帧画面图像数据输出到文件中;

本发明方法的第二部分逐帧绘制3D动画,具体步骤如下:

Step201:将帧编号变量ID赋值为2;

Step202:计算出在第ID帧和第ID-1帧之间发生变化的所有几何面片,并存放到一个 列表B001中;

Step203:对列表A004中的每个虚拟点光源B002,做如下计算:

连接虚拟点光源B002和第ID帧对应的光源的位置,生成一条线段B003,测试线段B003 与第ID帧对应的3D场景是否相交,如果相交,则进一步判断与线段B003相交的面片的面 片号是否等于与虚拟点光源B002相关联的数据结构DS类型的变量的虚拟点光源所在面片的 面片号成员变量的值,如果不相等,则标记虚拟点光源B002为失效;

Step204:对列表A004中的每个虚拟点光源B002,做如下计算:

如果虚拟点光源B002没有失效,则:以虚拟点光源B002所在位置为视点,对列表B001 中的位于虚拟点光源B002所在位置的正法线方向半空间中的所有几何面片按抛物投影方式 进行投影,计算各投影的几何面片在虚拟点光源B002的阴影图上覆盖的各像素B003的位置; 根据各像素B003的位置,计算与各像素B003相对应的列表B001中的几何面片上的点的位 置B004;连接光源B002所在位置与位置B004,得到一个方向向量B005;将方向向量B005 和与虚拟点光源B002相关联的数据结构DS类型的变量的虚拟点光源的光照入射方向成员变 量代入与虚拟点光源B002相关联的数据结构DS类型的变量的虚拟点光源所在面片的双向反 射分布函数BRDF成员变量表示的双向反射分布函数BRDF中,计算出BRDF值B006,将 计算出的所有BRDF值B006进行累加,并赋给变量V 3;将变量V 3和与虚拟点光源B002相 关联的数据结构DS类型的变量的帧间虚拟点光源阴影图变化累计量成员变量的值相加,将 相加之和再赋值给与虚拟点光源B002相关联的数据结构DS类型的变量的帧间虚拟点光源阴 影图变化累计量成员变量;如果与虚拟点光源B002相关联的数据结构DS类型的变量的帧间 虚拟点光源阴影图变化累计量成员变量的值大于阈值C,则标记虚拟点光源B002失效;

Step205:统计列表A004中的失效虚拟点光源的个数,将统计结果赋值给变量N;对光 源的光线发射方向进行蒙特卡洛采样,生成N条光源光线B007,计算每条光源光线B007与 3D场景的交点B008,在各交点B008位置处生成虚拟点光源B009,将所有虚拟点光源B009 存放在一个列表B010中;

Step206:对列表B010中的每个虚拟点光源B011,做如下计算:

根据第ID帧对应的光源的位置和虚拟点光源B011的位置,计算虚拟点光源B011的光 照入射方向B012;计算虚拟点光源B011所在位置的法线方向B013;创建一个数据结构DS 类型的变量V 4,将光照入射方向B012赋值给变量V 4的虚拟点光源的光照入射方向成员变量, 将法线方向B013赋值给变量V 4的虚拟点光源所在位置的法线方向成员变量,将虚拟点光源 B011所在面片的双向反射分布函数BRDF赋值给变量V 4的虚拟点光源所在面片的双向反射 分布函数BRDF成员变量,将虚拟点光源B011所在面片的面片号赋值给变量V 4的虚拟点光 源所在面片的面片号成员变量,将虚拟点光源B011的位置赋值给变量V 4的虚拟点光源的位 置成员变量,将变量V 4的帧间虚拟点光源阴影图变化累计量成员变量赋值为0;以虚拟点光 源B011所在位置为视点,对虚拟点光源B011所在位置的正法线方向半空间中的几何面片按 抛物投影方式进行投影,计算虚拟点光源B011的抛物投影阴影图B014;将抛物投影阴影图 B014赋值给变量V 4的虚拟点光源的阴影图成员变量;将变量V 4和虚拟点光源B011相关联;

Step207:删掉列表A004中的所有失效的虚拟点光源;将列表B010中的所有虚拟点光源 添加到列表A004中;

Step208:用光线投射算法计算第ID帧对应的3D场景的直接光照结果,并保存在变量 V 5中;

Step209:对列表A004中的每个虚拟点光源B015,做如下计算:

用虚拟点光源B015照射第ID帧对应的3D场景,用阴影映射方法计算可见性,编写着 器计算3D场景的光照结果,并将其累加到变量V 5中;

Step210:将变量V 5中的光照数据转换为第ID帧的帧画面图像数据输出到文件中;

Step211:将变量ID的值加1。

说明书
技术领域

本发明属于计算机三维动画技术领域,涉及一种在3D动画绘制中利用帧间时间相关 的方法。

当前,3D动画在实际中的应用越来越广泛,然而高质量3D动画的绘制时间却依然非 常长,这影响了3D动画产业的快速发展。连续的3D动画帧之间存在较强的相关性,即时 间相关;利用帧间时间相关可以明显地加D动画的绘制速度。

为了生成真实感强的3D动画,必须在动画绘制中实现全局光照。对大多数3D场景而 言,往往仅实现一次反射间接光照就可以得到真实感较强的绘制结果。从光源出发,发射 一系列光线,在其与3D场景相交的地方生成一系列虚拟点光源;再利用这些虚拟点光源 照射3D场景,即可模拟一次反射间接光照。3D动画的各帧对应的3D场景会发生变化, 这些变化可能包括光源位置变化、几何面片变化、视点变化等。如果利用虚拟点光源来模 拟间接光照,视点变化对虚拟点光源的位置、照射方向等属性没有影响。然而,光源位置 变化和几何面片变化对虚拟点光源的位置、照射方向等属性会产生明显的影响。由于连续 的3D动画帧之间存在明显的时间相关,因此在连续的两帧之间,会有很多虚拟点光源几 乎不发生变化。如果在连续的两帧之间能够重用这些未发生变化的虚拟点光源,则可以显 著提高3D动画的绘制速度。

本发明方法的目的在于提供一种在3D动画绘制中利用帧间时间相关的方法。本发明 方法的技术解决方案:首先从光源向3D场景随机发射一系列光线,并计算其与3D场景的 交点;在这些交点位置处创建虚拟点光源来照射3D场景,以模拟间接光照;为各虚拟点 光源创建阴影图来实现间接光照的可见性计算;当绘制连续的动画帧时,在当前帧中重用 前一帧中的一部分虚拟点光源及其阴影图,即利用帧间虚拟点光源的时间相关来提高绘制 3D动画的速度和质量。另外,在当前帧中还需要更新一部分已失效的虚拟点光源,以反映 场景的变化;如图1所示,第i帧对应的3D场景中有虚拟点光源A(101)、虚拟点光源B(102)、 面片C(103)、面片D(100);在第i+1帧中,面片C(103)移动到了一个新位置,此时第i帧 中的虚拟点光源A(101)仍然有效,在第i+1帧中可以被重用,但是第i帧中的虚拟点光源 B(102)在第i+1帧中因被遮挡而失效,因此需要重新生成一个虚拟点光源D(104)。

本发明方法首先提供一种数据结构DS,用于存储虚拟点光源的相关数据;数据结构 DS包括虚拟点光源的光照入射方向、虚拟点光源所在面片的双向反射分布函数BRDF、虚 拟点光源所在面片的面片号、虚拟点光源的阴影图、帧间虚拟点光源阴影图变化累计量、 虚拟点光源的位置、虚拟点光源所在位置的法线方向等成员变量。

本发明方法的第一部分计算3D动画的第一帧对应的3D场景的所有虚拟点光源及其相 关数据,并绘制第一帧画面,具体步骤如下:

Step101:对光源的光线发射方向进行蒙特卡洛采样,生成一系列光源光线A001,计 算每条光源光线A001与3D场景的交点A002,在各交点A002位置处生成虚拟点光源 A003,将所有虚拟点光源A003存放在一个列表A004中;

Step102:对列表A004中的每个虚拟点光源A005,做如下计算:

根据第一帧对应的光源的位置和虚拟点光源A005的位置,计算虚拟点光源A005的光 照入射方向A006;计算虚拟点光源A005所在位置的法线方向A007;创建一个数据结构 DS类型的变量V1,将光照入射方向A006赋值给变量V1的虚拟点光源的光照入射方向成 员变量,将法线方向A007赋值给变量V1的虚拟点光源所在位置的法线方向成员变量,将 虚拟点光源A005所在面片的双向反射分布函数BRDF赋值给变量V1的虚拟点光源所在面 片的双向反射分布函数BRDF成员变量,将虚拟点光源A005所在面片的面片号赋值给变 量V1的虚拟点光源所在面片的面片号成员变量,将虚拟点光源A005的位置赋值给变量V1 的虚拟点光源的位置成员变量,将变量V1的帧间虚拟点光源阴影图变化累计量成员变量赋 值为0;以虚拟点光源A005所在位置为视点,对虚拟点光源A005所在位置的正法线方向 半空间中的几何面片按抛物投影方式进行投影,计算虚拟点光源A005的抛物投影阴影图 A008;将抛物投影阴影图A008赋值给变量V1的虚拟点光源的阴影图成员变量;将变量 V1和虚拟点光源A005相关联;

Step103:用光线投射算法计算第一帧动画对应的3D场景的直接光照结果,并将其保 存在变量V2中;

Step104:对列表A004中的每个虚拟点光源A009,做如下计算:

用虚拟点光源A009照射第一帧对应的3D场景,用阴影映射方法计算可见性,编写着 器计算3D场景的光照结果,并将其累加到变量V2中;

Step105:将变量V2中的光照数据转换为第一帧的帧画面图像数据输出到文件中。

本发明方法的第二部分逐帧绘制3D动画,具体步骤如下:

Step201:将帧编号变量ID赋值为2;

Step202:计算出在第ID帧和第ID-1帧之间发生变化的所有几何面片,并存放到一 个列表B001中;

Step203:对列表A004中的每个虚拟点光源B002,做如下计算:

连接虚拟点光源B002和第ID帧对应的光源的位置,生成一条线段B003,测试线段 B003与第ID帧对应的3D场景是否相交,如果相交,则进一步判断与线段B003相交的面 片的面片号是否等于与虚拟点光源B002相关联的数据结构DS类型的变量的虚拟点光源所 在面片的面片号成员变量的值,如果不相等,则标记虚拟点光源B002为失效;

Step204:对列表A004中的每个虚拟点光源B002,做如下计算:

如果虚拟点光源B002没有失效,则:以虚拟点光源B002所在位置为视点,对列表 B001中的位于虚拟点光源B002所在位置的正法线方向半空间中的所有几何面片按抛物投 影方式进行投影,计算各投影的几何面片在虚拟点光源B002的阴影图上覆盖的各像素 B003的位置;根据各像素B003的位置,计算与各像素B003相对应的列表B001中的几何 面片上的点的位置B004;连接光源B002所在位置与位置B004,得到一个方向向量B005; 将方向向量B005和与虚拟点光源B002相关联的数据结构DS类型的变量的虚拟点光源的 光照入射方向成员变量代入与虚拟点光源B002相关联的数据结构DS类型的变量的虚拟点 光源所在面片的双向反射分布函数BRDF成员变量表示的双向反射分布函数BRDF中,计 算出BRDF值B006,将计算出的所有BRDF值B006进行累加,并赋给变量V3;将变量 V3和与虚拟点光源B002相关联的数据结构DS类型的变量的帧间虚拟点光源阴影图变化 累计量成员变量的值相加,将相加之和再赋值给与虚拟点光源B002相关联的数据结构DS 类型的变量的帧间虚拟点光源阴影图变化累计量成员变量;如果与虚拟点光源B002相关 联的数据结构DS类型的变量的帧间虚拟点光源阴影图变化累计量成员变量的值大于阈值 C,则标记虚拟点光源B002失效;

Step205:统计列表A004中的失效虚拟点光源的个数,将统计结果赋值给变量N;对 光源的光线发射方向进行蒙特卡洛采样,生成N条光源光线B007,计算每条光源光线B007 与3D场景的交点B008,在各交点B008位置处生成虚拟点光源B009,将所有虚拟点光源 B009存放在一个列表B010中;

Step206:对列表B010中的每个虚拟点光源B011,做如下计算:

根据第ID帧对应的光源的位置和虚拟点光源B011的位置,计算虚拟点光源B011的 光照入射方向B012;计算虚拟点光源B011所在位置的法线方向B013;创建一个数据结构 DS类型的变量V4,将光照入射方向B012赋值给变量V4的虚拟点光源的光照入射方向成 员变量,将法线方向B013赋值给变量V4的虚拟点光源所在位置的法线方向成员变量,将 虚拟点光源B011所在面片的双向反射分布函数BRDF赋值给变量V4的虚拟点光源所在面 片的双向反射分布函数BRDF成员变量,将虚拟点光源B011所在面片的面片号赋值给变 量V4的虚拟点光源所在面片的面片号成员变量,将虚拟点光源B011的位置赋值给变量V4 的虚拟点光源的位置成员变量,将变量V4的帧间虚拟点光源阴影图变化累计量成员变量赋 值为0;以虚拟点光源B011所在位置为视点,对虚拟点光源B011所在位置的正法线方向 半空间中的几何面片按抛物投影方式进行投影,计算虚拟点光源B011的抛物投影阴影图 B014;将抛物投影阴影图B014赋值给变量V4的虚拟点光源的阴影图成员变量;将变量 V4和虚拟点光源B011相关联;

Step207:删掉列表A004中的所有失效的虚拟点光源;将列表B010中的所有虚拟点 光源添加到列表A004中;

Step208:用光线投射算法计算第ID帧对应的3D场景的直接光照结果,并保存在变 量V5中;

Step209:对列表A004中的每个虚拟点光源B015,做如下计算:

用虚拟点光源B015照射第ID帧对应的3D场景,用阴影映射方法计算可见性,编写 着器计算3D场景的光照结果,并将其累加到变量V5中;

Step210:将变量V5中的光照数据转换为第ID帧的帧画面图像数据输出到文件中;

Step211:将变量ID的值加1。

有益效果

本发明提供了一种在3D动画绘制中利用帧间时间相关的方法。本发明方法可以支持 3D动画帧间的光源位置、几何面片、视点等变化。通过在连续的帧间重用虚拟点光源,本 发明方法大大地提高了间接光照的计算速度。通过删除失效的虚拟点光源,并在每帧中生 成一小部分新的虚拟点光源,实现了虚拟点光源的更新。此外,由于在连续的帧间重用了 大量虚拟点光源,因此解决了随机生成虚拟点光源造成的画面光照不稳定问题。在3D动 画绘制中使用本发明方法,可以大大缩短3D动画的整体制片时间。

图1为相邻帧间对应的3D场景的虚拟点光源更新示意图。

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

在本实施例中,利用GLSL来实现虚拟点光源照射3D场景时的着器,利用NVIDIA CUDA来编写运行在GPU上的光线投射程序,使用Metropolis随机采样算法来实现蒙特卡 洛随机采样。本发明方法的目的在于提供一种在3D动画绘制中利用帧间时间相关的方法。 本发明方法的技术解决方案:首先从光源向3D场景随机发射一系列光线,并计算其与3D 场景的交点;在这些交点位置处创建虚拟点光源来照射3D场景,以模拟间接光照;为各 虚拟点光源创建阴影图来实现间接光照的可见性计算;当绘制连续的动画帧时,在当前帧 中重用前一帧中的一部分虚拟点光源及其阴影图,即利用帧间虚拟点光源的时间相关来提 高绘制3D动画的速度和质量。另外,在当前帧中还需要更新一部分已失效的虚拟点光源, 以反映场景的变化。

本发明方法首先提供一种数据结构DS,用于存储虚拟点光源的相关数据;数据结构 DS包括虚拟点光源的光照入射方向、虚拟点光源所在面片的双向反射分布函数BRDF、虚 拟点光源所在面片的面片号、虚拟点光源的阴影图、帧间虚拟点光源阴影图变化累计量、 虚拟点光源的位置、虚拟点光源所在位置的法线方向等成员变量。

本发明方法的第一部分计算3D动画的第一帧对应的3D场景的所有虚拟点光源及其相 关数据,并绘制第一帧画面,具体步骤如下:

Step101:对光源的光线发射方向进行蒙特卡洛采样,生成一系列光源光线A001,计 算每条光源光线A001与3D场景的交点A002,在各交点A002位置处生成虚拟点光源 A003,将所有虚拟点光源A003存放在一个列表A004中;

Step102:对列表A004中的每个虚拟点光源A005,做如下计算:

根据第一帧对应的光源的位置和虚拟点光源A005的位置,计算虚拟点光源A005的光 照入射方向A006;计算虚拟点光源A005所在位置的法线方向A007;创建一个数据结构 DS类型的变量V1,将光照入射方向A006赋值给变量V1的虚拟点光源的光照入射方向成 员变量,将法线方向A007赋值给变量V1的虚拟点光源所在位置的法线方向成员变量,将 虚拟点光源A005所在面片的双向反射分布函数BRDF赋值给变量V1的虚拟点光源所在面 片的双向反射分布函数BRDF成员变量,将虚拟点光源A005所在面片的面片号赋值给变 量V1的虚拟点光源所在面片的面片号成员变量,将虚拟点光源A005的位置赋值给变量V1 的虚拟点光源的位置成员变量,将变量V1的帧间虚拟点光源阴影图变化累计量成员变量赋 值为0;以虚拟点光源A005所在位置为视点,对虚拟点光源A005所在位置的正法线方向 半空间中的几何面片按抛物投影方式进行投影,计算虚拟点光源A005的抛物投影阴影图 A008;将抛物投影阴影图A008赋值给变量V1的虚拟点光源的阴影图成员变量;将变量 V1和虚拟点光源A005相关联;

Step103:用光线投射算法计算第一帧动画对应的3D场景的直接光照结果,并将其保 存在变量V2中;

Step104:对列表A004中的每个虚拟点光源A009,做如下计算:

用虚拟点光源A009照射第一帧对应的3D场景,用阴影映射方法计算可见性,编写着 器计算3D场景的光照结果,并将其累加到变量V2中;

Step105:将变量V2中的光照数据转换为第一帧的帧画面图像数据输出到文件中。

本发明方法的第二部分逐帧绘制3D动画,具体步骤如下:

Step201:将帧编号变量ID赋值为2;

Step202:计算出在第ID帧和第ID-1帧之间发生变化的所有几何面片,并存放到一 个列表B001中;

Step203:对列表A004中的每个虚拟点光源B002,做如下计算:

连接虚拟点光源B002和第ID帧对应的光源的位置,生成一条线段B003,测试线段 B003与第ID帧对应的3D场景是否相交,如果相交,则进一步判断与线段B003相交的面 片的面片号是否等于与虚拟点光源B002相关联的数据结构DS类型的变量的虚拟点光源所 在面片的面片号成员变量的值,如果不相等,则标记虚拟点光源B002为失效;

Step204:对列表A004中的每个虚拟点光源B002,做如下计算:

如果虚拟点光源B002没有失效,则:以虚拟点光源B002所在位置为视点,对列表 B001中的位于虚拟点光源B002所在位置的正法线方向半空间中的所有几何面片按抛物投 影方式进行投影,计算各投影的几何面片在虚拟点光源B002的阴影图上覆盖的各像素 B003的位置;根据各像素B003的位置,计算与各像素B003相对应的列表B001中的几何 面片上的点的位置B004;连接光源B002所在位置与位置B004,得到一个方向向量B005; 将方向向量B005和与虚拟点光源B002相关联的数据结构DS类型的变量的虚拟点光源的 光照入射方向成员变量代入与虚拟点光源B002相关联的数据结构DS类型的变量的虚拟点 光源所在面片的双向反射分布函数BRDF成员变量表示的双向反射分布函数BRDF中,计 算出BRDF值B006,将计算出的所有BRDF值B006进行累加,并赋给变量V3;将变量 V3和与虚拟点光源B002相关联的数据结构DS类型的变量的帧间虚拟点光源阴影图变化 累计量成员变量的值相加,将相加之和再赋值给与虚拟点光源B002相关联的数据结构DS 类型的变量的帧间虚拟点光源阴影图变化累计量成员变量;如果与虚拟点光源B002相关 联的数据结构DS类型的变量的帧间虚拟点光源阴影图变化累计量成员变量的值大于阈值 C,则标记虚拟点光源B002失效;

Step205:统计列表A004中的失效虚拟点光源的个数,将统计结果赋值给变量N;对 光源的光线发射方向进行蒙特卡洛采样,生成N条光源光线B007,计算每条光源光线B007 与3D场景的交点B008,在各交点B008位置处生成虚拟点光源B009,将所有虚拟点光源 B009存放在一个列表B010中;

Step206:对列表B010中的每个虚拟点光源B011,做如下计算:

根据第ID帧对应的光源的位置和虚拟点光源B011的位置,计算虚拟点光源B011的 光照入射方向B012;计算虚拟点光源B011所在位置的法线方向B013;创建一个数据结构 DS类型的变量V4,将光照入射方向B012赋值给变量V4的虚拟点光源的光照入射方向成 员变量,将法线方向B013赋值给变量V4的虚拟点光源所在位置的法线方向成员变量,将 虚拟点光源B011所在面片的双向反射分布函数BRDF赋值给变量V4的虚拟点光源所在面 片的双向反射分布函数BRDF成员变量,将虚拟点光源B011所在面片的面片号赋值给变 量V4的虚拟点光源所在面片的面片号成员变量,将虚拟点光源B011的位置赋值给变量V4 的虚拟点光源的位置成员变量,将变量V4的帧间虚拟点光源阴影图变化累计量成员变量赋 值为0;以虚拟点光源B011所在位置为视点,对虚拟点光源B011所在位置的正法线方向 半空间中的几何面片按抛物投影方式进行投影,计算虚拟点光源B011的抛物投影阴影图 B014;将抛物投影阴影图B014赋值给变量V4的虚拟点光源的阴影图成员变量;将变量 V4和虚拟点光源B011相关联;

Step207:删掉列表A004中的所有失效的虚拟点光源;将列表B010中的所有虚拟点 光源添加到列表A004中;

Step208:用光线投射算法计算第ID帧对应的3D场景的直接光照结果,并保存在变 量V5中;

Step209:对列表A004中的每个虚拟点光源B015,做如下计算:

用虚拟点光源B015照射第ID帧对应的3D场景,用阴影映射方法计算可见性,编写 着器计算3D场景的光照结果,并将其累加到变量V5中;

Step210:将变量V5中的光照数据转换为第ID帧的帧画面图像数据输出到文件中;

Step211:将变量ID的值加1。

本文发布于:2024-09-24 10:19:33,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/72783.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议