一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于光子存储结构的绘制方法及系统

2022-05-26 20:49:39 来源:中国专利 TAG:


1.本发明属于真实感渲染技术领域,尤其涉及一种基于光子存储结构的绘制方法及系统。


背景技术:

2.本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
3.传统的光子图是一颗二叉树结构,通过光子的位置信息构建的一颗平衡二叉树,其每个节点都表示一个光子。在一般的光子映射算法中,每个采样点需要大量的光子样本,并且每个光子样本都需要在光子图中进行遍历查找。在渲染参与介质的过程中,需要对视点与反射点之间的部分做大量的采样,因此在面对参与介质时,光子映射算法也会出现低效率。


技术实现要素:

4.为了解决上述背景技术中存在的至少一项技术问题,本发明提供一种基于光子存储结构的绘制方法及系统,其对于光子映射算法绘制均匀参与介质低效的问题,通过修改传统光子映射算法的光子存储结构,提升渲染效率。
5.为了实现上述目的,本发明采用如下技术方案:
6.本发明的第一个方面提供一种基于光子存储结构的绘制方法,包括如下步骤:
7.光源向场景发射光子,对光子进行跟踪确定光子的三维坐标信息;
8.根据光子的三维坐标信息对光子区域进行分块,分块后采用八叉树对应的叶子节点存储块中的所有光子信息,构建基于八叉树结构的光子图;
9.基于八叉树结构的光子图,查询对光线有贡献的光子,通过光子的密度估计得到任意像素点的辐射值,基于像素点的辐射值绘制光子图渲染效果图。
10.本发明的第二个方面提供一种基于光子存储结构的绘制装置,包括:
11.光子跟踪模块,被配置为:光源向场景发射光子,对光子进行跟踪确定光子的三维坐标信息;
12.八叉树结构的光子图构建模块,被配置为:根据光子的三维坐标信息对光子区域进行分块,分块后采用八叉树对应的叶子节点存储块中的所有光子信息,构建基于八叉树结构的光子图;
13.图像绘制模块,被配置为:基于八叉树结构的光子图,查询对光线有贡献的光子,通过光子的密度估计得到任意像素点的辐射值,基于像素点的辐射值绘制光子图渲染效果图。
14.本发明的第三个方面提供一种计算机可读存储介质。
15.一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述所述的一种基于光子存储结构的绘制方法中的步骤。
16.本发明的第四个方面提供一种计算机设备。
17.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述所述的一种基于光子存储结构的绘制方法中的步骤。
18.与现有技术相比,本发明的有益效果是:
19.本发明通过修改传统光子映射算法的光子存储结构,使得光子更利于存储和查找,从而提高算法的绘制效率。本算法的八叉树结构通过对整个光子区域分块,每个节点存储一个块中的光子,相比于纯铜算法提高了光子的存储效率并降低了存储结构构建的复杂度;对任意采样点的辐射度计算只需要在八叉树中经过一次查询就能找到所有对其有增益的光子,进而提高了整体的渲染效率。
20.本发明附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
21.构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
22.图1是本发明实施例一中基于光子存储结构的绘制方法的流程示意图;
23.图2是本发明实施例一介质中的辐射传递示意图;
24.图3(a)-图3(b)是本发明实施例一不同的节点划分方式;
25.图4(a)-图4(d)是本发明实施例一场景一不同数目光子图的渲染结果;
26.图5(a)-图5(d)是本发明实施例一场景二不同数目光子图的渲染结果。
具体实施方式
27.下面结合附图与实施例对本发明作进一步说明。
28.应该指出,以下详细说明都是例示性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
29.需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
30.真实感渲染在电影和计算机动画等行业发挥着关键性作用。特别是最近几年伴随着一股国潮风,一些优质的国产动画电影渐渐呈现在观众眼前,深受观众喜爱,其中一个很重要的原因便是电影的画面质量被观众所接受。一部90分钟的动画电影大约包含13万张高分辨率的画面,绘制一帧画面除了基本的多边形以外,也可能包括参与介质。参与介质就是我们现实生活中的云或烟雾,在场景中添加额外的介质能形成视觉特效,增强画面的美感和艺术感。当光线进入这些介质,会经过大量的散射或者被吸收,最后传播到我们的眼睛就形成了这些观感。由于在参与介质中模拟光线传播有一定复杂性,目前对于如何高效的渲染参与介质也一直是计算机图形学研究的热点。
31.把计算机中的一个三维场景变成一张照片级别的图像需要昂贵的计算机硬件以及大量的时间。在光线跟踪的框架之下,光线在场景中的传播可以用渲染方程描述,对包含参与介质的场景,可以用辐射传递方程描述。在求解这两个方程的过程中,逐渐发展为按照光路传播进行递归运算的路径跟踪算法以及基于密度估计的光子映射算法。光子映射是一种缓存光源辐射在场景中的能量,通过查询缓存值来计算某一随机采样点辐射值的算法,在渲染普通的场景时,光子映射算法的效率要远高于路径跟踪算法。
32.绘制场景中的参与介质时需要考虑介质的散射性与不透明度,因此除了反射点的辐射度以外,还需要计算视点与反射点之间的介质的辐射度。光子映射算法通过从光源发射光子,每个光子都包含一定的能量信息,设置光子的终止条件,最终把场景中的光子缓存在光子图中。通过查询光子图,可以计算任意采样点的辐射值。
33.实施例一
34.如图1所示,本实施例提供了一种基于光子存储结构的绘制方法,包括如下步骤:
35.步骤101:光源向场景发射光子,对光子进行跟踪确定光子的三维坐标信息;
36.步骤102:根据光子的三维坐标信息对光子区域进行分块,分块后采用八叉树对应的叶子节点存储块中的所有光子信息,构建基于八叉树结构的光子图;
37.步骤103:查询基于八叉树结构的光子图,查询对光线有贡献的光子,通过光子的密度估计得到任意像素点的辐射值,基于像素点的辐射值绘制光子图渲染效果图。
38.步骤101中,所述光源向场景发射光子后,光子不仅会与场景中的面片发生交互,也会与场景中的介质产生交互效果。
39.光子与介质产生的交互用一个概率密度函数表示,同时也需要利用俄罗斯轮盘赌来判定光子被吸收或者散射,而新的散射方向则由相位函数来决定。
40.如图2所示,所述光子与介质产生的交互用概率密度函数表示为:
[0041][0042]
其中,tr表示两点之间的透光率,l表示辐射度参数,x表示视点的位置,xs表示视点方向物体表面的位置,表示光线的行进方向,x
t
表示介质中的某一光线的位置,σs表示吸收参数,s表示视点到最近物体表面的距离,t是相关的参数,且t∈(0,s),表示视点处最终接收的辐射度。
[0043]
需要说明的是,物体表面上的辐射值可以利用渲染方程直接求解,介质中的内散射部分求解比较复杂,用光子映射的密度估计可以简化计算,并且随着光子数目的增多而逐渐接近正确值。
[0044]
光子映射方法首先需要在场景中发射大量光子,光子最终会落在场景的面片上或者介质中,光子有一定的概率与介质发生交互,也有几率消失在介质中,即发生了吸收。如果在介质中发生散射现象,需要用相位函数来决定新的散射方向。
[0045]
通过上述操作步骤,场景中能保留大量的光子,这些光子除了包含有能量信息以外,还有自身的三维坐标信息,通过设置收集光子数目就能生成用户渲染所需光子样本数目。
[0046]
步骤102中,所述采用八叉树对应的叶子节点存储块中的所有光子信息,即层级包围盒树形结构的存储结构,具体为:该结构主要由一个父节点和若干个子节点构成,其中父
节点和每个内部节点最多有8个子节点。其中内部节点只负责存储对空间划分的子区域信息和该空间区域的中点,叶子节点用于存储空间划分到阈值所对应的光子信息。
[0047]
在收集介质中的光子之后,利用这些数据的三维坐标信息对光子进行分块,通过设置递归的终止参数来限制每个光子块的大小,使得一个光子块中的光子既能照亮所对应的区域,又能不太过影响这块区域,分块之后用八叉树对应的叶子节点存储块中的所有光子,最终就能构建由一个基于八叉树结构的光子图。
[0048]
将每个场景看做一个由包围盒包裹的正方体,把收集到的光子看作悬浮于场景介质中的整体;
[0049]
如图3(a)-图3(b)所示,首先需对场景中的光子整体进行切分,所述切分方法为:采用中点划分法,在x、y和z三个维度的中点上对整个场景中的光子进行分类,每个分类用特定的记号表示,例如用0-7对每个区域进行标记,直到每个标记的区域内光子数量小于给定的阈值k或者递归的深度大于2*log8n,其中,n是介质光子发射的总数量,k的取值为用户设置的knn搜索值的k的一半。
[0050]
或,通过排序统计每个坐标轴上光子的数量,根据其光子数量选择划分的位置,划分位置选择的依据是尽量让坐标轴两边的光子数目平均,这种划分方法能很好地适应光子分布不均匀的场景。
[0051]
在像云、烟雾、蒸汽等半透明状态介质遍布场景时,整个场景中分布的体光子数相对较为均匀,采用图3(a)的中点划分方法可以得到一棵较为平衡的树,并且算法相对简单。
[0052]
而对于包含焦散特效的场景时,光子会较为集中在某一特殊的区域,采用图3(b)第二种排序划分方法才能得到一棵较为平衡的树。而这种树的节点中包围盒的划分会出现不同的大小区别,在这种情况下的辐照度计算阶段的光线遍历采样会出现多次与同一过大包围盒相交的无效采样点的情况。
[0053]
如果场景中包含焦散特效时,根据建树终止条件的优化原则,即节点中达到存储最优的光子数目或者递归的最大深度来结束建树的过程,不再过分追求一棵平衡的树。
[0054]
其中,所述八叉树构建的过程为:
[0055]
收集存在空间中的光子;
[0056]
遍历收集的光子,按照其在当前空间中的位置做好标记;
[0057]
统计同一种标记的光子数量,根据其光子的密度和八叉树的深度决定是继续划分还是终止;
[0058]
通过设置递归的终止参数,直到所有光子都被收纳进八叉树的叶节点。
[0059]
通过把光子构建成一棵八叉树,是对原有的光子进行整理和归纳,使得在遍历的过程中提高查找的时间效率。而用本发明中提出的八叉树结构划分场景空间并且用叶节点管理其子节点又能进一步提高光子的查询效率。
[0060]
步骤103中,像素点的颜色值由沿着视点方向所看到场景中的光子所决定,光子携带的辐射值可以照亮其对应的区域。
[0061]
所述像素点的辐射值的计算阶段,从视点发射一个光线穿过像素点,到达场景中,在这个射线行进的过程中,在射线上设置一系列的采样点,再收集采样点周围的光子计算采样点的辐射值最后叠加,而每个采样点的辐射值通过收集的光子进行密度估计。
[0062]
所述光子密度估计计算公式为:
[0063][0064]
式中,δφi是第i个光子的能量,是第i个光子的入射方向,r是采样点到最远光子的距离。
[0065]
在收集光子计算辐射度的阶段,首先根据采样点来确定对其有所贡献的叶子节点。
[0066]
像素点的颜色值由沿着视点方向所看到场景中的光子所决定,光子携带的辐射值可以照亮其对应的区域。
[0067]
通常是在这个方向的直线上设置n个采样点,第一个采样点从视点开始,第n个采样点会落在场景的面片上,中间的n-2个采样点处于场景的介质中具体如图1所示。
[0068]
通过设置一个自适应的光线采样个数,来尽量保证光线所通过的八叉树中的包围盒划分中都有采样点的取样。
[0069]
采样点的个数为:
[0070][0071]
其中,m为八叉树结构的叶子节点个数。
[0072]
每个采样点通过光子密度估算其辐射值,最后合并所有采样点的辐射值得到采样点的颜色。
[0073]
本实施例中由于提前对光子进行分块,使得查询采样点的光子只需要一次就能找到对这个采样点有贡献的光子,即在叶子节点中查询一次得到多个对光线有贡献的光子。
[0074]
通过采样点的位置信息即可在八叉树结构中定位其对应的叶子节点,而每个叶节点对应一个空间区域,经过查询之后对该空间区域做好标记,避免光子重复计算。
[0075]
当叶子节点内光子数目小于最优阈值时该区域光子的辐射值正好可以近似为采样点的辐射值,因此可以把采样点所在区域的叶子节点内的光子作为该采样点的内散射辐射值,即可在叶子节点中一次查询到多个对光线有贡献的光子;而使用最大深度停止划分使叶子节点内的光子数目会大于查找值k,这时,在所有光子中查找最近邻的k个光子计算该采样点的内散射辐射值。
[0076]
所述任意像素点的辐射值的计算过程包括:利用叶子节点的包围盒以及叶子节点中光子的数目这两个数据直接计算光子的影响范围,通过采样点查找到的叶子节点中每个光子和直线的距离及光子的影响范围来筛选出对光线有贡献的光子。同时设置的自适应的采样点个数可以保证收集到大多数对光线内散射辐射值计算有影响的光子。
[0077]
在均匀介质中光子的分布相对均匀,因此每个被划分的区域中的光子分布也是相对均匀,并且只允许叶节点存储光子。随着发射光子数目的增多,叶子区域的划分也会逐渐缩小,那么采样得到的内散射辐射值就会越精确。
[0078]
本实施例在带有参与介质的cbox场景以及livingroom场景对本发明提出的方法进行了测试,其结果如图4(a)-图4(d)和图5(a)-图5(d),从左到右,场景中参与测试的光子数目分别为10万、20万、50万以及100万,其余的参数则保持一致。最终通过比较时间代价,本发明提出的方法相比于传统光子映射有近70%的效率提升。
[0079]
实施例二
[0080]
本实施例提供一种基于光子存储结构的绘制装置,包括:
[0081]
光子跟踪模块,被配置为:光源向场景发射光子,对光子进行跟踪确定光子的三维坐标信息;
[0082]
八叉树结构的光子图构建模块,被配置为:根据光子的三维坐标信息对光子区域进行分块,分块后采用八叉树对应的叶子节点存储块中的所有光子信息,构建基于八叉树结构的光子图;
[0083]
图像绘制模块,被配置为:基于八叉树结构的光子图,查询对光线有贡献的光子,通过光子的密度估计得到任意像素点的辐射值,基于像素点的辐射值绘制光子图渲染效果图。
[0084]
实施例三
[0085]
本实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述所述的一种基于光子存储结构的绘制方法中的步骤。
[0086]
实施例四
[0087]
本实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述所述的一种基于光子存储结构的绘制方法中的步骤。
[0088]
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
[0089]
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0090]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0091]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0092]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)或随机存储记忆体(random accessmemory,ram)等。
[0093]
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献