法律状态公告日
法律状态信息
法律状态
2017-04-12
授权
授权
2014-12-10
实质审查的生效 IPC(主分类):G06T13/20 申请日:20140629
实质审查的生效
2014-10-01
公开
公开
技术领域
本发明属于三维图形绘制技术领域,涉及一种通过重用动态三维场景帧间光照传输路 径采样来减小画面闪烁的方法。
背景技术
全局光照效果的生成是真实感三维场景绘制中的关键。在理论上,可以将全局光照分 解成直接光照和间接光照两部分。现有很多绘制三维场景的全局光照效果的方法,例如光 线跟踪、路径跟踪、光子映射等。对于动态三维场景来说,三维场景中的几何对象在不同 帧之间可能发生运动变化。对于路径跟踪、光子映射等方法,如果相邻帧的光照传输路径 采样变化很大,则绘制出的三维场景画面会在时间上出现明显的闪烁现象,从而影响动态 画面的视觉效果。如果能在帧间重复使用一部分光照传输路径采样,则可减小相邻帧间的 光照传输路径采样差异,进而减小动态画面闪烁。
在实际动态三维场景中,往往只有少数几何对象会发生运动变化,多数几何对象都是 静止不动的。因此,可以将动态三维场景中的几何对象分为动态几何对象和静态几何对象, 并分别进行管理。在许多实际动态三维场景中,很多时候光源都静止不动,只有几何对象 或者视点发生运动变化,例如一个表现人在办公室内来回走动的动态三维场景,光源往往 就是固定不变的。对于光源不发生变化的动态三维场景,可以通过重用光源采样光线的传 输路径来达到重用帧间光照传输路径采样的目的。注意,对于存在视点运动变化的动态三 维场景,不同帧的视点采样光线的传输路径在理论上是完全不同的。对于使用双向路径跟 踪绘制全局光照的情形来说,将视点采样光线的传输路径包含的线段数限制为1,同时重 复使用一部分光源采样光线的传输路径,可最大限度地减小帧间光照传输路径采样的差 异。实际上,现有的基于虚拟点光源的全局光照效果绘制方法就可看作是将视点采样光线 的传输路径包含的线段数限制为1。
发明内容
本方法的目的在于,提供一种通过重用动态三维场景帧间光照传输路径采样来减小画 面闪烁的方法。本方法的技术解决方案:将动态三维场景中的几何对象分为静态几何对象 和动态几何对象,所有静态几何对象用一个场景图SSG来组织和管理,所有动态几何对象 用一个场景图DSG来组织和管理;如图1所示,基于路径跟踪思想,从光源发射一系列 光源采样光线A001,跟踪光源采样光线A001在场景图SSG对应的静态三维子场景中的 传输路径,记录光源采样光线A001的传输路径;如图2所示,在绘制动态三维场景的每 帧画面时,检测哪些光源采样光线A001的传输路径因场景图DSG中的动态几何对象的阻 挡而失效,重新生成所有失效的光源采样光线A001在动态三维场景中的传输路径,同时 重用那些仍然有效的光源采样光线A001的传输路径;基于路径跟踪思想,从视点发射穿 过屏幕像素的视点采样光线A002,跟踪视点采样光线A002在动态三维场景中的传输路径, 在视点采样光线A002第一次与动态三维场景的几何对象相交后,就结束跟踪操作,即视 点采样光线A002的传输路径只包含一条线段;根据所有光源采样光线A001的传输路径和 视点采样光线A002的传输路径,利用双向路径跟踪的光照计算方法,计算所有可视场景 点的光照数据;最后,根据所有可视场景点的光照数据,生成动态三维场景画面图像。
本方法提供一种数据结构POINT,用于存储光线传输路径的线段端点信息;数据结构 POINT包括端点位置、指向数据结构POINT类型的变量的指针共2个成员变量。
本方法提供一种数据结构PATH;数据结构PATH包括指向数据结构POINT类型的变 量的指针P1、指向数据结构POINT类型的变量的指针P2共2个成员变量。
本方法的第一部分针对场景图SSG对应的静态三维子场景,生成一系列光源采样光线 的传输路径,具体步骤如下:
Step101:设置光源采样光线的数目SN;
Step102:在计算机系统的内存中,创建一个包含SN个数据结构PATH类型的变量的 数组PARR;
Step103:基于路径跟踪思想,从光源发射SN条光源采样光线,跟踪这SN条光源采 样光线在场景图SSG对应的静态三维子场景中的传输路径,记录这SN条光源采样光线的 传输路径的各条线段的端点信息;具体地说,对于这SN条光源采样光线中的第j条光源 采样光线A101,j=1,…,SN,首先在计算机系统的内存中,创建一个数据结构POINT类 型的变量A102,将光源采样光线A101的起点位置赋值给变量A102的端点位置成员变量, 将变量A102的指向数据结构POINT类型的变量的指针成员变量赋值为nil;将数组PARR 的第j个元素对应的数据结构PATH类型的变量的指向数据结构POINT类型的变量的指针 P1成员变量赋值为变量A102的内存地址,将数组PARR的第j个元素对应的数据结构 PATH类型的变量的指向数据结构POINT类型的变量的指针P2成员变量赋值为变量A102 的内存地址;在对光源采样光线A101的传输路径进行跟踪的过程中,除了基本的路径跟 踪计算外,再额外做如下操作:
对于光源采样光线A101的传输路径与场景图SSG的几何对象的每个交点A103,在 计算机系统的内存中创建一个数据结构POINT类型的变量A104,将交点A103的位置赋 值给变量A104的端点位置成员变量,将变量A104的指向数据结构POINT类型的变量的 指针成员变量赋值为nil;将数组PARR的第j个元素对应的数据结构PATH类型的变量的 指向数据结构POINT类型的变量的指针P2成员变量所指向的变量的指向数据结构POINT 类型的变量的指针成员变量赋值为变量A104的内存地址,将数组PARR的第j个元素对 应的数据结构PATH类型的变量的指向数据结构POINT类型的变量的指针P2成员变量赋 值为变量A104的内存地址。
本方法的第二部分完成动态三维场景的帧画面的绘制,具体步骤如下:
Step201:令变量IDF=1;
Step202:根据动作指令,使场景图DSG中的几何对象变换到第1DF帧对应的状态; 在计算机系统的内存中,创建本方法的第一部分得到的数组PARR的一个副本数组PARRT, 同时创建与数组PARR相关联的所有数据的副本数据CR,根据与数组PARR相关联的数 据和数组PARR之间的关系,将数据CR与数组PARRT相关联。
Step203:对场景图DSG中的每个几何对象B001,做如下操作:
Step203-1:令变量m=1;
Step203-2:将数组PARRT的第m个元素对应的数据结构PATH类型的变量的指向数 据结构POINT类型的变量的指针P1成员变量的值赋给指针变量pTemp;
Step203-3:如果变量pTemp所指向的变量的指向数据结构POINT类型的变量的指针 成员变量的值为nil,则转子步骤Step203-7;
Step203-4:将变量pTemp所指向的变量的指向数据结构POINT类型的变量的指针成 员变量的值赋给指针变量pTemp2;根据变量pTemp所指向的变量的端点位置成员变量的 值和变量pTemp2所指向的变量的端点位置成员变量的值,创建一条线段B002;判断线段 B002与几何对象B001是否相交,如果相交,则转子步骤Step203-6;
Step203-5:将变量pTemp2的值赋给变量pTemp,转子步骤Step203-3;
Step203-6:将数组PARRT的第m个元素对应的数据结构PATH类型的变量的指向数 据结构POINT类型的变量的指针P1成员变量所指向的变量的指向数据结构POINT类型的 变量的指针成员变量的值设置为nil;
Step203-7:m=m+1;如果m≤SN,转子步骤Step203-2,否则执行子步骤Step203-8;
Step203-8:针对几何对象B001的操作结束;
Step204:对于数组PARRT的每个元素对应的数据结构PATH类型的变量B103,做如 下操作:
Step204-1:判断变量B103的指向数据结构POINT类型的变量的指针P1成员变量所 指向的变量的指向数据结构POINT类型的变量的指针成员变量的值是否为nil,如果不为 nil,转子步骤Step204-2,否则执行如下操作:
计算变量B103对应的元素在数组PARRT中的编号idxT;以变量B103的指向数据结 构POINT类型的变量的指针P1成员变量所指向的变量的端点位置成员变量的值表示的位 置为起点,基于路径跟踪思想,发射一条光线B104,跟踪光线B104在动态三维场景中的 传输路径;在对光线B104的传输路径进行跟踪的过程中,除了基本的路径跟踪计算外, 再额外做如下操作:
对于光线B104的传输路径与动态三维场景中的几何对象的每个交点C103,在计算机 系统的内存中创建一个数据结构POINT类型的变量C104,将交点C103的位置赋值给变 量C104的端点位置成员变量,将变量C104的指向数据结构POINT类型的变量的指针成 员变量赋值为nil;将数组PARRT的第idxT个元素对应的数据结构PATH类型的变量的指 向数据结构POINT类型的变量的指针P2成员变量所指向的变量的指向数据结构POINT 类型的变量的指针成员变量赋值为变量C104的内存地址,将数组PARRT的第idxT个元 素对应的数据结构PATH类型的变量的指向数据结构POINT类型的变量的指针P2成员变 量赋值为变量C104的内存地址。
Step204-2:针对变量B103的操作结束。
Step205:基于路径跟踪思想,从视点发射穿过屏幕像素的视点采样光线,跟踪所有视 点采样光线在动态三维场景中的传输路径,在每条视点采样光线第一次与动态三维场景中 的几何对象相交后,就结束跟踪操作,即每条视点采样光线的传输路径只包含一条线段; 根据数组PARRT及其关联的数据记录的所有SN条光源采样光线的传输路径和视点采样光 线的传输路径,利用双向路径跟踪的光照计算方法,计算所有可视场景点的光照数据;最 后,根据所有可视场景点的光照数据,生成动态三维场景画面图像。
Step206:IDF=IDF+1;如果需继续绘制动态三维场景,则转步骤Step202,否则结 束绘制操作。
有益效果
本发明提供了一种通过重用动态三维场景帧间光照传输路径采样来减小画面闪烁的 方法。本方法将动态三维场景的几何对象分成静态几何对象和动态几何对象,并用不同的 场景图对它们分别进行存储和管理。本方法首先预先生成静态三维子场景中的光源采样光 线的传输路径。在绘制动态三维场景时,判断预先生成的静态三维子场景中的光源采样光 线的传输路径是否被动态几何对象阻挡而失效,重建失效的光源采样光线的传输路径,并 重用未失效的光源采样光线的传输路径,藉此减小了帧间光照传输路径采样差异,能显著 地减小动态三维场景的画面闪烁。
附图说明
图1为光源采样光线在场景图SSG对应的静态三维子场景中的传输路径示意图。图2 为因动态几何对象阻挡而重新生成光源采样光线在动态三维场景中的传输路径示意图。
具体实施方式
为了使本方法的特征和优点更加清楚明白,下面结合具体实施例对本方法作进一步的 描述。在本实施例中,考虑在一间办公室中有一个人走动的动态三维场景,在办公室的天 花板上有一个光源。计算机系统的CPU选择Intel(R)Xeon(R)CPU E3-1225v33.20GHz, 内存选择金士顿8GB DDR31333,硬盘选择Buffalo HD-CE1.5TU2;计算机操作系统选 用Windows7,软件编程工具选用VC++2010。
本方法的目的在于,提供一种通过重用动态三维场景帧间光照传输路径采样来减小画 面闪烁的方法。本方法的技术解决方案:将动态三维场景中的几何对象分为静态几何对象 和动态几何对象,所有静态几何对象用一个场景图SSG来组织和管理,所有动态几何对象 用一个场景图DSG来组织和管理;如图1所示,基于路径跟踪思想,从光源发射一系列 光源采样光线A001,跟踪光源采样光线A001在场景图SSG对应的静态三维子场景中的 传输路径,记录光源采样光线A001的传输路径;如图2所示,在绘制动态三维场景的每 帧画面时,检测哪些光源采样光线A001的传输路径因场景图DSG中的动态几何对象的阻 挡而失效,重新生成所有失效的光源采样光线A001在动态三维场景中的传输路径,同时 重用那些仍然有效的光源采样光线A001的传输路径;基于路径跟踪思想,从视点发射穿 过屏幕像素的视点采样光线A002,跟踪视点采样光线A002在动态三维场景中的传输路径, 在视点采样光线A002第一次与动态三维场景的几何对象相交后,就结束跟踪操作,即视 点采样光线A002的传输路径只包含一条线段;根据所有光源采样光线A001的传输路径和 视点采样光线A002的传输路径,利用双向路径跟踪的光照计算方法,计算所有可视场景 点的光照数据;最后,根据所有可视场景点的光照数据,生成动态三维场景画面图像。
本方法提供一种数据结构POINT,用于存储光线传输路径的线段端点;数据结构 POINT包括端点位置、指向数据结构POINT类型的变量的指针共2个成员变量。
本方法提供一种数据结构PATH;数据结构PATH包括指向数据结构POINT类型的变 量的指针P1、指向数据结构POINT类型的变量的指针P2共2个成员变量。
本方法的第一部分针对场景图SSG对应的静态三维子场景,生成一系列光源采样光线 的传输路径,具体步骤如下:
Step101:设置光源采样光线的数目SN;
Step102:在计算机系统的内存中,创建一个包含SN个数据结构PATH类型的变量的 数组PARR;
Step103:基于路径跟踪思想,从光源发射SN条光源采样光线,跟踪这SN条光源采 样光线在场景图SSG对应的静态三维子场景中的传输路径,记录这SN条光源采样光线的 传输路径的各条线段的端点信息;具体地说,对于这SN条光源采样光线中的第j条光源 采样光线A101,j=1,…,SN,首先在计算机系统的内存中,创建一个数据结构POINT类 型的变量A102,将光源采样光线A101的起点位置赋值给变量A102的端点位置成员变量, 将变量A102的指向数据结构POINT类型的变量的指针成员变量赋值为nil;将数组PARR 的第j个元素对应的数据结构PATH类型的变量的指向数据结构POINT类型的变量的指针 P1成员变量赋值为变量A102的内存地址,将数组PARR的第j个元素对应的数据结构 PATH类型的变量的指向数据结构POINT类型的变量的指针P2成员变量赋值为变量A102 的内存地址;在对光源采样光线A101的传输路径进行跟踪的过程中,除了基本的路径跟 踪计算外,再额外做如下操作:
对于光源采样光线A101的传输路径与场景图SSG的几何对象的每个交点A103,在 计算机系统的内存中创建一个数据结构POINT类型的变量A104,将交点A103的位置赋 值给变量A104的端点位置成员变量,将变量A104的指向数据结构POINT类型的变量的 指针成员变量赋值为nil;将数组PARR的第j个元素对应的数据结构PATH类型的变量的 指向数据结构POINT类型的变量的指针P2成员变量所指向的变量的指向数据结构POINT 类型的变量的指针成员变量赋值为变量A104的内存地址,将数组PARR的第j个元素对 应的数据结构PATH类型的变量的指向数据结构POINT类型的变量的指针P2成员变量赋 值为变量A104的内存地址。
本方法的第二部分完成动态三维场景的帧画面的绘制,具体步骤如下:
Step201:令变量IDF=1;
Step202:根据动作指令,使场景图DSG中的几何对象变换到第IDF帧对应的状态; 在计算机系统的内存中,创建本方法的第一部分得到的数组PARR的一个副本数组PARRT, 同时创建与数组PARR相关联的所有数据的副本数据CR,根据与数组PARR相关联的数 据和数组PARR之间的关系,将数据CR与数组PARRT相关联。
Step203:对场景图DSG中的每个几何对象B001,做如下操作:
Step203-1:令变量m=1;
Step203-2:将数组PARRT的第m个元素对应的数据结构PATH类型的变量的指向数 据结构POINT类型的变量的指针P1成员变量的值赋给指针变量pTemp;
Step203-3:如果变量pTemp所指向的变量的指向数据结构POINT类型的变量的指针 成员变量的值为nil,则转子步骤Step203-7;
Step203-4:将变量pTemp所指向的变量的指向数据结构POINT类型的变量的指针成 员变量的值赋给指针变量pTemp2;根据变量pTemp所指向的变量的端点位置成员变量的 值和变量pTemp2所指向的变量的端点位置成员变量的值,创建一条线段B002;判断线段 B002与几何对象B001是否相交,如果相交,则转子步骤Step203-6;
Step203-5:将变量pTemp2的值赋给变量pTemp,转子步骤Step203-3;
Step203-6:将数组PARRT的第m个元素对应的数据结构PATH类型的变量的指向数 据结构POINT类型的变量的指针P1成员变量所指向的变量的指向数据结构POINT类型的 变量的指针成员变量的值设置为nil;
Step203-7:m=m+1;如果m≤SN,转子步骤Step203-2,否则执行子步骤Step203-8;
Step203-8:针对几何对象B001的操作结束;
Step204:对于数组PARRT的每个元素对应的数据结构PATH类型的变量B103,做如 下操作:
Step204-1:判断变量B103的指向数据结构POINT类型的变量的指针P1成员变量所 指向的变量的指向数据结构POINT类型的变量的指针成员变量的值是否为nil,如果不为 nil,转子步骤Step204-2,否则执行如下操作:
计算变量B103对应的元素在数组PARRT中的编号idxT;以变量B103的指向数据结 构POINT类型的变量的指针P1成员变量所指向的变量的端点位置成员变量的值表示的位 置为起点,基于路径跟踪思想,发射一条光线B104,跟踪光线B104在动态三维场景中的 传输路径;在对光线B104的传输路径进行跟踪的过程中,除了基本的路径跟踪计算外, 再额外做如下操作:
对于光线B104的传输路径与动态三维场景中的几何对象的每个交点C103,在计算机 系统的内存中创建一个数据结构POINT类型的变量C104,将交点C103的位置赋值给变 量C104的端点位置成员变量,将变量C104的指向数据结构POINT类型的变量的指针成 员变量赋值为nil;将数组PARRT的第idxT个元素对应的数据结构PATH类型的变量的指 向数据结构POINT类型的变量的指针P2成员变量所指向的变量的指向数据结构POINT 类型的变量的指针成员变量赋值为变量C104的内存地址,将数组PARRT的第idxT个元 素对应的数据结构PATH类型的变量的指向数据结构POINT类型的变量的指针P2成员变 量赋值为变量C104的内存地址。
Step204-2:针对变量B103的操作结束。
Step205:基于路径跟踪思想,从视点发射穿过屏幕像素的视点采样光线,跟踪所有视 点采样光线在动态三维场景中的传输路径,在每条视点采样光线第一次与动态三维场景中 的几何对象相交后,就结束跟踪操作,即每条视点采样光线的传输路径只包含一条线段; 根据数组PARRT及其关联的数据记录的所有SN条光源采样光线的传输路径和视点采样光 线的传输路径,利用双向路径跟踪的光照计算方法,计算所有可视场景点的光照数据;最 后,根据所有可视场景点的光照数据,生成动态三维场景画面图像。
Step206:IDF=IDF+1;如果需继续绘制动态三维场景,则转步骤Step202,否则结 束绘制操作。
在本实施例中,数组PARR和数组PARRT的每个元素对应了一条光源采样光线的传 输路径,每条光源采样光线的传输路径上的各线段端点信息用链表的形式存储,每条光源 采样光线的传输路径上的各线段端点信息在链表中的存储顺序与这些端点在传输路径上 的出现顺序相同,每条光源采样光线的传输路径的起点在光源上,数组PARR和数组PARRT 的元素对应的数据结构PATH类型的变量的指向数据结构POINT类型的变量的指针P1成 员变量所指向的变量的端点位置成员变量表示的位置为光源采样光线的传输路径的起点。 在本实施例中,可视场景点就是视点采样光线与动态三维场景的几何对象之间的离视点最 近的交点,光源不作为几何对象看待。在本实施例中,动态三维场景中的几何对象由场景 图SSG和场景图DSG的几何对象组成,跟踪光线在动态三维场景中的传输路径的过程中, 需要同时考虑场景图SSG和场景图DSG的几何对象对光线传输的影响。
机译: 帧传输路径确认方法,节点,帧传输路径确认程序和帧传输路径确认系统
机译: 校正大画面闪烁和消耗峰值,在显示器上指示动态画面的方法
机译: 为了减小帧存储器的大小,使用了样本减少方法的视频编码方法(使用用于降低帧存储器大小的子采样的视频编码方法)