基于光子映射图的整体光照计算机模拟处理方法

文档序号:6380808阅读:407来源:国知局
专利名称:基于光子映射图的整体光照计算机模拟处理方法
基于光子映射图的整体光照计算机模拟处理方法技术领域
本发明属于计算机虚拟图像处理技术领域,具体涉及一种基于光子映射图的整体光照计算机模拟处理方法。
背景技术
随着计算机软硬件科学技术的进步,计算机图形学也得到了迅速发展,在各个领域中得到了广泛的应用。在计算机辅助设计、计算机仿真模拟、科学计算可视化、虚拟现实、 计算机动画与娱乐、广告制作、电影和电视合成等众多领域,对图像质量的要求越来越高, 不仅仅限于能够得到图像,而是要求计算速度更快,图像效果更逼真,有时候还需要超现实的结果。特别是在自然模拟这个方面,在最近一些年来更是展现了强大的需求。要求能够模拟特殊的气候、环境、和自然场景、材质,达到一个特殊的场景环境,这就对真实感图像绘制提出了更多的难题。
从物理学角度来看,要生成质量较高、具有较强的真实感的图像,从理想的状况考虑,就需要尽可能真实地模拟光能在场景中的传播过程和散射分布,达到近乎于自然中的能量传播平衡,即考虑场景所有的光源、所有的物体表面之间光照能量的反射(包括漫反射和镜面反射)、折射和透射等相互作用关系,还要考虑本来不发光(不具有能量的物体)的物体在经过光照以后进行的能量吸收和散射,这就是所谓的整体光照模型(Global Illumination)。以整体光照模型为基础的计算机图像生成技术被称为真实感图像生成 (Realistic Image Synthesis)技术。
光线跟踪和辐射度是两种常用的全局光照明模型,其中光线跟踪具有简单、强大、 易实现的特点,但真实世界的很多东西无法很好地处理。比如辉映(Bleeding),焦散 (Caustics)等效果。直到1996年,光子映射被提出,光线跟踪都无法有效解决这两个问题, 而光子映射对这两个问题提供了良好的解决方案。辉映和焦散线现象都是漫反射面的间接光照造成的。用光子映射方法,这类光照可以用预计算的光子图(Photon map)来估计。将光线跟踪扩展为光子映射,可以产生一种能解决任何直接或间接光照的方法。而且光子映射也能处理中间介质(participating media)情况,并且很易于做并行计算。
由于光子映射方法综合了现有的各种光照技术的优点,包括光线跟踪和辐射度这两种主要的全局光照技术,因此在近些年中光子映射己经成为计算全局光照最流行的算法之一。本发明因此而来。发明内容
本发明目的在于提供一种基于光子映射图的整体光照计算机模拟处理方法,解决了现有技术中光照环境下真实感图像难以绘制等问题。
为了解决现有技术中的这些问题,本发明提供的技术方案是
一种基于光子映射图的整体光照计算机模拟处理方法,其特征在于所述方法包括以下步骤
(I)从光源向计算机虚拟的场景中发射光子进行光子跟踪;当光子撞击到场景内容非镜面对象表面时,将光子存储在构建的光子映射图中;
(2)根据光子映射图利用统计学技术提取关于计算机虚拟的场景中的任一点的入射光通量和反射的发光辐射度信息,计算像素颜色值,进行场景内的图像绘制和渲染。
优选的,所述方法中存储光子采用数据结构KD树实现,所述光子的属性包括光子的位置、方向和能量。
优选的,所述方法光子映射图中存储光子的数量、光子映射图的存储位置、添加光子函数、光子吸收函数和光子映射图重置函数。
优选的,所述方法中当光子撞击到场景内容非镜面对象表面时,光子发生漫反射、 传播或者被吸收的概率通过俄罗斯轮盘赌方法确定。
优选的,所述方法俄罗斯轮盘赌方法按照如下步骤进行
假设场景中具有漫反射系数d和镜面反射系数S的反射表面,d+s< 1,使用均匀分布的随机变量ξ e
,采用下面的方法确定光子的碰撞发生概率,SP :
ξ e [O, d]时,光子碰撞发生漫反射;
ξ e [d, s+d]时,光子碰撞发生镜面反射;
ξ e [s+d,I]时,光子碰撞发生吸收。
优选的,所述方法中发光辐射度是通过查找临近光子,估计放光辐射,获得发光辐射度。
基于光子映射图的整体光照图像处理方法是一个双过程/ 二步骤方法,简单的说,就是将绘制过程划分为两个阶段,在每个阶段做不同的工作。其中第一个步骤,建立光子映射图,从光源向场景中发射光子,并且,当光子撞击到非镜面对象表面的时候,把它们存储在光子映射图中。第二个步骤,绘制/渲染过程,在光子图上利用统计学技术,提取关于场景的任一点的入射光通量和反射的发光福射度信息。
光子跟踪过程的目的是计算漫反射表面的间接光照,从光源发射光子,跟踪这些光子穿过场景,在漫反射表面存储它们的信息。预处理光子映射图需要一个好的数据结构来表示光子映射图。数据结构要简洁,能够快速的进行临近光子的查找,本文中采用KD树来存储光子。
发光辐射度估计对于图像的生成是关键的一个阶段,计算像素的颜色值,直接反应图像的效果。作为光子映射图的优点之一就是在任意给定的方向上对于任意非镜面反射的表面点都有能力计算它的发光辐射度。给出光子映射图,用它计算发光辐射度,实现绘制阶段的计算处理渲染。
本发明与现有技术相比,具有如下的有益效果
本发明技术方案采用光子映射图进行光照处理,将光照处理过程和场景分开处理,技术方案的实现基于光子映射的原理,取得逼真的渲染效果。光子图与场景表述是完全分离开,不用重复计算。不需网格化,在复杂场景中速度较快。对于大部分场景,都可以做到高效。



下面结合附图及实施例对本发明作进一步描述
图1为本发明技术方案基于光子映射图的整体光照计算机模拟处理方法流程图。
具体实施方式
以下结合具体实施例对上述方案做进一步说明。应理解,这些实施例是用于说明本发明而不限于限制本发明的范围。实施例中采用的实施条件可以根据具体厂家的条件做进一步调整,未注明的实施条件通常为常规实验中的条件。
实施例
如图1所示,本实施例进行基于光子映射图的整体光照计算机模拟处理流程图。 具体按照如下步骤进行
( I)建立光子的结构
计算机构建光子的结构通过模拟光子的参数进行设置。光子的结构主要有三个变量,分别是光子的位置,方向,能量,其结构如下所示
lypedef slruct{ double pos|3]; double rgb[3j; double incident[3]; short flag;} photon;由于本发明使用了 KD树来储存光子,因此还要设置一个变量来指明光子在KD树中的位置。
( 2 )建立光子图的类
为了散播能量以及调整光子运动,需要建立一个包括光子结构以及所有功能函数的类。该类主要有以下成员变量或函数一个指向全局光子图的指针,一个记录当前光子图内光子数的变量,用于重置变量和无用指针的构造函数,用于卸载内存的析构函数,向光子图中添加光子的函数。
(3)向场景内发射光子
向场景内发射光子首先需要做的是通过各个光源在随机方向上向场景中发射η 个光子。分别在x,y,z分量上设置一个随机数,这样就可以获得一个光线传播的随机方向。 如果场景中发生碰撞,则处理这个光子,继续重复这个过程,直到光源发出了 η个光子。当所希望的光子都已经发射完毕,再计算每个光子的所占光源的能量。
每个光子的所占光源的能量的算法过程如下
①设置场景中的光源;
②设置发射光子的数目;
③选取一个随机方向发射光子;
④寻找最近的光子与物体的碰撞;
⑤返回碰撞点、物体的信息;
⑥在发射所有光子后,计算光子能量(1/η)。
(4)光子存储
本实施例设定只有在光子撞击漫反射表面时,它才会被储存。因为对于镜面反射来说,需要大量的光子来映射出反方向的影像。这一点,光线追踪可以做得更好。光子在物体之间来回弹射,这就意味着遇到漫反射表面的光子会被沿着它的运动路径储存好几次, 这就构成了光子图。
本实施例对于光子的操作如下
①当一个光子撞击一个漫反射表面时,把光子入射方向和能量储存在全局光子图中。光子图只包含漫反射作用。
②当光子撞击到一个镜面时,根据物体的不透明性,决定光子被反射或者折射。
③当表面既有漫反射又有镜面反射时,则采用一种方法随机决定发生镜面发射还是漫反射。
④如果光子被表面吸收的话,则将之存于光子图中,并结束光子的生命。
因此,当一个光子撞击到对象时,它能够任意的反射、传播,或者被吸收。不管是光子是被反射、传播或者是被吸收,根据表面材质的特性参数,各种作用发生的可能性具有确定的概率。本实施例使用俄罗斯轮盘赌的方法来确定发生的概率。
俄罗斯轮盘赌的具体使用方法为,对于具有漫反射系数d和镜面反射系数S的反射表面,d+s彡1,使用均匀分布的随机变量ξ e
,采用下面的策略
ξ e [O, d]时,属于漫反射;
ξ e [d,s+d]时,属于镜面反射;
I e [s+d, I]时,属于吸收。
在实施例中,俄罗斯轮盘赌的使用意味着不改变反射光子的能量——正确性由若干个光子在交互作用结束之前的时间里的能量算术平均值确保。考虑一个表面材质的例子,反射50条入射光线,用俄罗斯轮盘赌的方法只有一半的光子被反射,可是,却仍然具有全部的能量。对于这个例子,如果发射10000个光子到表面上,能够反射10000个光子中的一半能量或者是反射具有全部能量的5000个光子。可以看出,俄罗斯轮盘赌可以显著减少光子跟踪计算需求。
(5)光子渲染
渲染过程通过光子图计算面上各点的辐射度。这里,照相机和观察者也要考虑进去。类似逆向光线追踪从观察平面发射光线,并发现碰撞点,关键点在于光线撞到了哪里。 这里使用余弦着色法来计算一个点投射到视平面的辐射度。余弦着色法即是通过计算入射光线与物体表面法线夹角的余弦值来确定光线的强弱。当余弦值为I时,光线最亮,低于O 时表示该点处于物体的背面,无法受到当前光线的照射。
为了渲染投射到视平面上的多边形,必须发现多边形上的辐射度估计,但是在这之前,必须要寻找最接近碰撞点的光子,被称为光子基值。寻找临近光子采用包围球法,估算辐射度的过程如下
①在碰撞点放置一个球体.
②扩展这个球体,直到它包含了足够你最初要求的光子。
③扩展这个球体,直到它返回所发现的最远的点。
④将球体变为圆形,圆心半径位置不变,圆位于物体表面的切平面上。
⑤辐射度等于圆内的入射方向与法线夹角余弦值大于O的光子能量和除以圆的面积。
光子映射与光线追踪以及辐射度法的对比
权利要求
1.一种基于光子映射图的整体光照计算机模拟处理方法,其特征在于所述方法包括以下步骤 (1)从光源向计算机虚拟的场景中发射光子进行光子跟踪;当光子撞击到场景内容非镜面对象表面时,将光子存储在构建的光子映射图中; (2)根据光子映射图利用统计学技术提取关于计算机虚拟的场景中的任一点的入射光通量和反射的发光辐射度信息,计算像素颜色值,进行场景内的图像绘制和渲染。
2.根据权利要求I所述的方法,其特征在于所述方法中存储光子采用数据结构KD树实现,所述光子的属性包括光子的位置、方向和能量。
3.根据权利要求I所述的方法,其特征在于所述方法光子映射图中存储光子的数量、光子映射图的存储位置、添加光子函数、光子吸收函数和光子映射图重置函数。
4.根据权利要求I所述的方法,其特征在于所述方法中当光子撞击到场景内容非镜面对象表面时,光子发生漫反射、传播或者被吸收的概率通过俄罗斯轮盘赌方法确定。
5.根据权利要求4所述的方法,其特征在于所述方法俄罗斯轮盘赌方法按照如下步骤进行 假设场景中具有漫反射系数d和镜面反射系数S的反射表面,d+s ( 1,使用均匀分布的随机变量I ^ [O,I],釆用下面的方法确定光子的碰撞发生概率,即 ξ e [O,d]时,光子碰撞发生漫反射; ξ e [d,s+d]时,光子碰撞发生镜面反射; ξ e [s+d, I]时,光子碰撞发生吸收。
6.根据权利要求I所述的方法,其特征在于所述方法中发光辐射度是通过查找临近光子,估计放光辐射,获得发光辐射度。
全文摘要
本发明公开了一种基于光子映射图的整体光照计算机模拟处理方法,其特征在于所述方法包括以下步骤(1)从光源向计算机虚拟的场景中发射光子进行光子跟踪;当光子撞击到场景内容非镜面对象表面时,将光子存储在构建的光子映射图中;(2)根据光子映射图利用统计学技术提取关于计算机虚拟的场景中的任一点的入射光通量和反射的发光辐射度信息,计算像素颜色值,进行场景内的图像绘制和渲染。该方法基于光子映射的原理,图像处理后效果逼真、计算处理速度快,无需网格化,特别适合于复杂场景中光照处理。
文档编号G06F9/44GK102981840SQ20121044174
公开日2013年3月20日 申请日期2012年11月8日 优先权日2012年11月8日
发明者陈国庆, 白伟伟 申请人:苏州两江科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1