首页> 中国专利> 利用可见性插值实现三维场景间接光照效果近似绘制的方法

利用可见性插值实现三维场景间接光照效果近似绘制的方法

摘要

本发明涉及一种利用可见性插值实现三维场景间接光照效果近似绘制的方法,其特征在于:首先利用双向反射阴影图和重要性采样技术,根据待绘制三维场景模型创建在间接光照绘制过程中实际使用的间接光源集合;然后用间接光源照射三维场景并对三维场景进行绘制;在绘制三维场景时,先对可视场景区域的可视场景点执行降采样操作来获得间接光照可见性评估采样点并计算采样点的可见性,其他未被采样的可视场景点的间接光照可见性通过插值计算得到。可以用较低的代价来实现考虑间接光照遮挡问题的三维场景间接光照效果绘制。

著录项

  • 公开/公告号CN106447759A

    专利类型发明专利

  • 公开/公告日2017-02-22

    原文格式PDF

  • 申请/专利权人 长春理工大学;

    申请/专利号CN201610909821.6

  • 发明设计人 陈纯毅;杨华民;蒋振刚;李华;

    申请日2016-10-19

  • 分类号G06T15/50(20110101);

  • 代理机构22100 吉林长春新纪元专利代理有限责任公司;

  • 代理人王薇

  • 地址 130022 吉林省长春市卫星路7089

  • 入库时间 2023-06-19 01:38:23

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-10-12

    授权

    授权

  • 2017-03-22

    实质审查的生效 IPC(主分类):G06T15/50 申请日:20161019

    实质审查的生效

  • 2017-02-22

    公开

    公开

说明书

技术领域

本发明涉及一种利用可见性插值实现三维场景间接光照效果近似绘制的方法,属于三维图形绘制技术领域。

背景技术

利用计算机生成照片级真实感三维场景画面离不开全局光照效果的绘制。全局光照可以看作是直接光照和间接光照之和。用基于光栅化图形绘制管线的技术可以比较容易地绘制出直接光照效果,全局光照效果绘制的难点是间接光照效果的绘制。常见的全局光照效果绘制方法有路径跟踪、光子映射、光线跟踪等方法。在“2005 Symposium on Interactive 3D Graphics and Games”国际学术会议上,Carsten Dachsbacher和Marc Stamminger发表了论文《Reflective Shadow Maps》;在该论文中作者提出了反射阴影图方法,用于快速绘制三维场景的近似间接光照;该方法的核心思想是:先把相机放在光源位置处,绘制三维场景,生成反射阴影图,然后把反射阴影图中的每个像素记录的空间位置点当作一个间接光源,最后用这些间接光源来照射三维场景并把相机放在视点位置,按照正常的视点观察参数绘制三维场景,从而绘制出近似间接光照结果。然而,Carsten Dachsbacher和Marc Stamminger提出的反射阴影图方法在绘制间接光照时并未考虑间接光源与可视场景点之间的可见性问题,即该方法不能正确绘制因间接光源被物体遮挡而出现的间接光照阴影。Tobias Ritschel等人2011年在《Computer Graphics Forum》期刊上发表了论文《Making Imperfect Shadow Maps View-Adaptive: High-Quality Global Illumination in Large Dynamic Scenes》,作者用双向反射阴影图(Bidirectional Reflective Shadow Map)和重要性采样技术来从所有潜在的间接光源集合中选择一个子集,从而创建出实际使用的间接光源集合,进而用该子集中的间接光源来照射三维场景,以便绘制三维场景的近似间接光照效果;Tobias Ritschel等人使用残缺阴影图(Imperfect Shadow Map)来实现间接光照阴影计算,然而使用残缺阴影图要求三维场景几何对象能用数量合理的点来代表,这个条件对复杂三维场景来说不易满足。

发明内容

本发明的目的在于提供一种利用可见性插值实现三维场景间接光照效果近似绘制的方法, 根据部分场景采样点和间接光源之间的可见性来插值计算其他场景点和间接光源之间的可见性,从而用较低的代价完成考虑间接光照遮挡问题的间接光照效果绘制。

本发明的技术方案是这样实现的:一种利用可见性插值实现三维场景间接光照效果近似绘制的方法, 其特征在于:首先利用双向反射阴影图和重要性采样技术,根据待绘制三维场景模型创建在间接光照绘制过程中实际使用的间接光源集合A001;然后,把相机放到视点位置,按照正常的视点观察参数绘制三维场景,计算得到每个可视场景点的空间位置A002,并把所有空间位置A002存放在二维数组A003中;对二维数组A003进行降采样得到二维数组A004,对于间接光源集合A001中的每个间接光源A005,判断间接光源A005与二维数组A004中的每个空间位置A002之间是否直接可视,如果直接可视,把与之对应的可见性值设置为1,否则把与之对应的可见性值设置为0,把二维数组A004中的所有空间位置A002对应的可见性值保存在二维数组A006中;对于间接光源集合A001中的每个间接光源A005,计算在不考虑几何物体遮挡时的间接光源A005对二维数组A003中的每个空间位置A002的光照贡献A007,利用二维双线性插值技术根据二维数组A006的内容插值计算出间接光源A005与二维数组A003中的每个空间位置A002之间的可见性值VIS,间接光源A005对二维数组A003中的每个空间位置A002的实际光照贡献IndI等于光照贡献A007与可见性值VIS之乘积;对于二维数组A003中的每个空间位置A002,累加间接光源集合A001中的每个间接光源A005对空间位置A002的实际光照贡献IndI就得到空间位置A002的总间接光照结果;具体实现步骤如下:

步骤S101:利用双向反射阴影图和重要性采样技术,根据待绘制三维场景模型创建在间接光照绘制过程中实际使用的间接光源集合A001;

步骤S102:把相机放到视点位置,按照正常的视点观察参数绘制三维场景,计算得到每个可视场景点的空间位置A002,并把所有空间位置A002存放在二维数组A003中;可视场景点就是从视点位置透过虚拟像素平面的像素能直接看到的场景点,二维数组A003的行数等于虚拟像素平面的像素行数Nr,二维数组A003的列数等于虚拟像素平面的像素列数Nc;二维数组A003的每个元素与虚拟像素平面的各个像素一一对应;

步骤S103:在计算机系统的存储器中创建一个包含行、列的二维数组A004,其中表示对x进行向上取整,n为一个正奇数表示降采样倍数,n>Nrn>Nc;把二维数组A003的第行、第列的元素赋值给二维数组A004的第i行、第j列的元素,其中i>j>x进行向下取整;如果,则令Idr>Nr;如果,则令,否则令Idc>Nc;把二维数组A003的第Idr行、第列的元素赋值给二维数组A004的第行、第j列的元素,其中;把二维数组A003的第行、第Idc列的元素赋值给二维数组A004的第i行、第列的元素,其中;把二维数组A003的第Idr行、第Idc列的元素赋值给二维数组A004的第行、第列的元素;

步骤S104:在计算机系统的存储器中创建一个包含Nr行、Nc列的二维数组IndLS,把二维数组IndLS的每个元素赋值为0,二维数组IndLS的元素与二维数组A003的元素一一对应,二维数组IndLS用于保存二维数组A003中的元素对应的空间位置A002的总间接光照结果;对于间接光源集合A001中的每个间接光源A005,做如下操作:

步骤S104-1:在计算机系统的存储器中创建一个包含行、列的二维数组A006;二维数组A006的元素与二维数组A004的元素一一对应。对于二维数组A004中的每个元素B003,计算元素B003在二维数组A004中对应的行号row和列号col,做如下操作:

① 连接元素B003对应的空间位置A002与间接光源A005对应的空间位置B004,确定一条线段B005,判断线段B005与三维场景中的几何物体之间是否有除线段B005的两个端点之外的交点,如果有,则把二维数组A006的第row行、第col列的元素赋值为0,否则把二维数组A006的第row行、第col列的元素赋值为1;

② 计算元素B003对应的空间位置A002在视点坐标系中的坐标vCOR;视点坐标系由uvw三个正交的方向定义,视点坐标系的原点在视点位置,w方向为位于视点处的相机的正前方向,v方向为位于视点处的相机的竖直向上方向。

步骤S104-2:对于二维数组A003中的每个元素B006,做如下操作:

① 计算在不考虑几何物体遮挡时的间接光源A005对元素B006对应的空间位置A002产生的光照贡献A007;

② 二维数组A006的各个元素与二维数组A004的各个元素对应的空间位置A002的坐标vCOR的uv分量共同定义了二维可见性函数V(u,>v)的离散采样结果B007,二维数组A006的各个元素的值为二维可见性函数V(u,>v)在特定的uv位置处的采样值;计算元素B006对应的空间位置A002在视点坐标系中的坐标vCOR2;令s2等于坐标vCOR2的u分量值,t2等于坐标vCOR2的v分量值;根据离散采样结果B007,如果s2t2在离散采样结果B007的uv坐标的采样范围内,则利用二维双线性插值技术计算V(u> s2,>v>t2)的值,否则在离散采样结果B007中搜索离(u> s2,>v>t2)最近的采样点SP,把采样点SP对应的二维可见性函数V(u,>v)的值作为V(u> s2,>v>t2)的近似值;令变量DSI等于光照贡献A007与V(u> s2,>v=>t2)的值之乘积;

③ 计算元素B006在二维数组A003中的行号i2和列号j2;先把变量BUF赋值为二维数组IndLS的第i2行、第j2列的元素的值,再把二维数组IndLS的第i2行、第j2列的元素赋值为变量BUF的值与变量DSI的值之和。

步骤S105:用标准的阴影映射方法绘制三维场景的直接光照结果,把直接光照结果与二维数组IndLS中保存的总间接光照结果加在一起就得到全局光照结果,最后把全局光照结果转换成像素颜色值,输出到三维场景画面图像文件中。

本发明的积极效果是利用双向反射阴影图和重要性采样技术来创建在间接光照绘制过程中实际使用的间接光源集合,通过用间接光源照射三维场景来绘制间接光照,在评估间接光照可见性时通过对可视场景点进行降采样来减小计算开销,使用可见性插值方法来计算未被采样的可视场景点的间接光照可见性。本方法的可见性插值利用了间接光照可见性在空间上通常连续变化的特性。使用本方法可以用较低的代价完成考虑间接光照遮挡问题的三维场景间接光照效果绘制,从而提高三维场景间接光照效果绘制速度。

附图说明

图1为对二维数组进行降采样的示意图。

图2为视点坐标系示意图。

具体实施方式

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

在本实施例中,计算机系统的CPU 选择Intel(R) Xeon(R) CPU E3-1225 v3 @ 3.20GHz,内存选择金士顿 8GB DDR3 1333,磁盘选择Buffalo HD-CE 1.5 TU2,显卡选用NVidia Quadro K2000;计算机操作系统选用Windows 7,软件编程工具选用VC++ 2010。在本实施例中,虚拟像素平面的像素行数为768,虚拟像素平面的像素列数为1024,降采样倍数为7;三维场景为一个室内场景,用一个聚光灯从天花板向下照射三维场景。

首先利用双向反射阴影图和重要性采样技术,根据待绘制三维场景模型创建在间接光照绘制过程中实际使用的间接光源集合A001;然后,把相机放到视点位置,按照正常的视点观察参数绘制三维场景,计算得到每个可视场景点的空间位置A002,并把所有空间位置A002存放在二维数组A003中;对二维数组A003进行降采样得到二维数组A004,如图1所示;对于间接光源集合A001中的每个间接光源A005,判断间接光源A005与二维数组A004中的每个空间位置A002之间是否直接可视,如果直接可视,把与之对应的可见性值设置为1,否则把与之对应的可见性值设置为0,把二维数组A004中的所有空间位置A002对应的可见性值保存在二维数组A006中;对于间接光源集合A001中的每个间接光源A005,计算在不考虑几何物体遮挡时的间接光源A005对二维数组A003中的每个空间位置A002的光照贡献A007,利用二维双线性插值技术根据二维数组A006的内容插值计算出间接光源A005与二维数组A003中的每个空间位置A002之间的可见性值VIS,间接光源A005对二维数组A003中的每个空间位置A002的实际光照贡献IndI等于光照贡献A007与可见性值VIS之乘积;对于二维数组A003中的每个空间位置A002,累加间接光源集合A001中的每个间接光源A005对空间位置A002的实际光照贡献IndI就得到空间位置A002的总间接光照结果。本发明方法的具体实现步骤如下。

步骤S101:利用双向反射阴影图和重要性采样技术,根据待绘制三维场景模型创建在间接光照绘制过程中实际使用的间接光源集合A001;

步骤S102:把相机放到视点位置,按照正常的视点观察参数绘制三维场景,计算得到每个可视场景点的空间位置A002,并把所有空间位置A002存放在二维数组A003中;可视场景点就是从视点位置透过虚拟像素平面的像素能直接看到的场景点,二维数组A003的行数等于虚拟像素平面的像素行数Nr,二维数组A003的列数等于虚拟像素平面的像素列数Nc;二维数组A003的每个元素与虚拟像素平面的各个像素一一对应;

步骤S103:在计算机系统的存储器中创建一个包含行、列的二维数组A004,其中表示对x进行向上取整,n为一个正奇数表示降采样倍数,n>Nrn>Nc;把二维数组A003的第行、第列的元素赋值给二维数组A004的第i行、第j列的元素,其中i>j>x进行向下取整;如果,则令Idr>Nr;如果,则令,否则令Idc>Nc;把二维数组A003的第Idr行、第列的元素赋值给二维数组A004的第行、第j列的元素,其中;把二维数组A003的第行、第Idc列的元素赋值给二维数组A004的第i行、第列的元素,其中;把二维数组A003的第Idr行、第Idc列的元素赋值给二维数组A004的第行、第列的元素;

步骤S104:在计算机系统的存储器中创建一个包含Nr行、Nc列的二维数组IndLS,把二维数组IndLS的每个元素赋值为0,二维数组IndLS的元素与二维数组A003的元素一一对应,二维数组IndLS用于保存二维数组A003中的元素对应的空间位置A002的总间接光照结果;对于间接光源集合A001中的每个间接光源A005,做如下操作:

步骤S104-1:在计算机系统的存储器中创建一个包含行、列的二维数组A006;二维数组A006的元素与二维数组A004的元素一一对应。对于二维数组A004中的每个元素B003,计算元素B003在二维数组A004中对应的行号row和列号col,做如下操作:

① 连接元素B003对应的空间位置A002与间接光源A005对应的空间位置B004,确定一条线段B005,判断线段B005与三维场景中的几何物体之间是否有除线段B005的两个端点之外的交点,如果有,则把二维数组A006的第row行、第col列的元素赋值为0,否则把二维数组A006的第row行、第col列的元素赋值为1;

② 计算元素B003对应的空间位置A002在视点坐标系中的坐标vCOR;视点坐标系由uvw三个正交的方向定义,如图2所示,视点坐标系的原点在视点位置,w方向为位于视点处的相机的正前方向,v方向为位于视点处的相机的竖直向上方向。

步骤S104-2:对于二维数组A003中的每个元素B006,做如下操作:

① 计算在不考虑几何物体遮挡时的间接光源A005对元素B006对应的空间位置A002产生的光照贡献A007;

② 二维数组A006的各个元素与二维数组A004的各个元素对应的空间位置A002的坐标vCOR的uv分量共同定义了二维可见性函数V(u,>v)的离散采样结果B007,二维数组A006的各个元素的值为二维可见性函数V(u,>v)在特定的uv位置处的采样值;计算元素B006对应的空间位置A002在视点坐标系中的坐标vCOR2;令s2等于坐标vCOR2的u分量值,t2等于坐标vCOR2的v分量值;根据离散采样结果B007,如果s2t2在离散采样结果B007的uv坐标的采样范围内,则利用二维双线性插值技术计算V(u> s2,>v>t2)的值,否则在离散采样结果B007中搜索离(u> s2,>v>t2)最近的采样点SP,把采样点SP对应的二维可见性函数V(u,>v)的值作为V(u> s2,>v>t2)的近似值;令变量DSI等于光照贡献A007与V(u> s2,>v=>t2)的值之乘积;

③ 计算元素B006在二维数组A003中的行号i2和列号j2;先把变量BUF赋值为二维数组IndLS的第i2行、第j2列的元素的值,再把二维数组IndLS的第i2行、第j2列的元素赋值为变量BUF的值与变量DSI的值之和。

步骤S105:用标准的阴影映射方法绘制三维场景的直接光照结果,把直接光照结果与二维数组IndLS中保存的总间接光照结果加在一起就得到全局光照结果,最后把全局光照结果转换成像素颜色值,输出到三维场景画面图像文件中。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号