首页> 中国专利> 一种只包含物体变化的三维动画场景的绘制方法

一种只包含物体变化的三维动画场景的绘制方法

摘要

本发明公开一种只包含物体变化的三维动画场景的绘制方法,属于计算机三维动画技术领域。本发明方法将三维动画场景分为静态子场景和动态子场景,对静态子场景只做一次预绘制计算,在动画的各帧中复用预计算结果;动态子场景在每帧画面中都进行重新绘制,并与静态子场景的预绘制结果进行合并,保证了绘制结果的精度。本发明方法通过创建虚拟二次点光源来实现比较逼真的全局光照效果。对于一般性的动画绘制,可以分离出一系列只包含物体变化的三维动画情节,每个情节包含的若干帧画面可以采用本发明方法来绘制。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-11-18

    未缴年费专利权终止 IPC(主分类):G06T13/20 授权公告日:20130821 终止日期:20140930 申请日:20110930

    专利权的终止

  • 2013-08-21

    授权

    授权

  • 2012-03-21

    实质审查的生效 IPC(主分类):G06T13/20 申请日:20110930

    实质审查的生效

  • 2012-02-08

    公开

    公开

说明书

技术领域

本发明属于计算机三维动画技术领域,涉及一种只包含物体变化的三维动画场景的绘 制方法。

背景技术

随着计算机图形绘制技术的不断发展,三维动画在实际中的应用越来越广泛。与三维 静态场景的绘制相比,三维动画场景中的物体对象、视点、光源位置等变化使得每帧画面 均可能与其他画面不同。当三维动画场景中的物体对象发生变化时,如果使用光线投射或 者光线跟踪技术绘制三维动画场景,则在绘制每帧画面时,都需要对场景加速结构进行重 建或者更新,这往往导致三维动画场景的绘制效率降低。在实际的三维动画影片中,许多 情节的连续若干帧画面的视点、光源位置并不发生变化,仅仅是场景中的某些物体对象发 生运动或者形变,我们将这种三维动画场景称为只包含物体变化的三维动画场景。例如, 一个表现乒乓球在桌面上的弹跳过程的动画,该场景的视点、光源位置往往在所有帧中都 是固定的,变化的仅是乒乓球对象。对于一般的三维动画场景绘制问题,往往可以通过情 节分解,将其分解为若干只包含物体变化的三维动画场景绘制子问题。另外,对于大多数 三维动画场景来说,在连续的若干帧中发生运动变化的物体对象往往只是所有场景物体对 象的少部分,有大量的场景物体对象并不发生运动变化。因此如果能将三维动画场景的静 态场景物体和动态场景物体分开绘制,则可以减小总的绘制计算工作量。

对于只包含物体对象变化的三维动画场景,如果连续多帧画面中的某个像素对应的绘 制点在静态场景物体表面上,则在该绘制点处计算出的光源可见性可以在这些帧间重用, 而不必重新计算。不过,为了考虑动态场景物体对象运动变化对光源可见性的影响,需要 对绘制点处的光源可见性做有效性检查,如果已经失效,则需重新计算。这一问题在本发 明方法中将得以解决。

发明内容

本发明的目的在于提供一种只包含物体变化的三维动画场景的绘制方法。如图1所示, 对于任意一个场景点P(105),从点P的切平面上的以点P为圆心的单位圆内的任一点T (104)作一条平行于点P的正法线方向的射线Rad,射线Rad与点P的正法线方向单位半 球面相交于一点S(103),起始于点P穿过点S的射线代表了点P的正法线方向单位半球 空间中的一个方向Dir,且方向Dir与点T构成映射关系;只有当点P与一个点光源的连 线所表示的方向位于点P的正法线方向单位半球空间之内时,该点光源才有可能对点P可 见,即该点光源对点P潜在可见。

本发明方法提供一种场景点P处的点光源照射记录结构A001,其包括光源空间位置、 光源亮度、光源类型、光源可见性标识等成员变量。

本发明方法的第一部分提供一种存储三维动画场景空间中的任意一个场景点P处的点 光源空间方向分布及其可见性的方法,具体方法如下:

对点P的切平面上,以点P为中心的单位矩形进行网格化,得到一个二维网格B001 (106);如果某点光源对点P潜在可见,根据该点光源与点P的连线所表示的方向,可以 找到与该方向对应的点P的切平面上的以点P为圆心的单位圆内的一点T及其所在的网格 单元B002,即该点光源与网格单元B002相对应;如果有多个点光源对点P潜在可见,则 这些点光源也必然有与之相对应的网格单元B002;创建一个二维数组B003,二维数组B003 的行数和列数等于二维网格B001的行数和列数,每个数组元素均为点光源照射记录结构 A001类型的列表LIST,即数组元素和网格单元B002之间一一对应;对三维动画场景中 的每个对点P潜在可见的点光源B004,找出与其相对应的网格单元B002,再创建一个点 光源照射记录结构A001类型的变量B005,并根据点光源B004的属性及与点P的位置关 系设置变量B005的各成员变量,最后将变量B005添加到与点光源B004相对应的网格单 元B002所对应的二维数组B003的数组元素的列表LIST中;这样,任意一个场景点P处 的点光源空间方向分布及其可见性就存储在二维数组B003之中。

将三维动画场景中的几何对象分为静态几何对象和动态几何对象,所有静态几何对象 组成静态子场景SS,所有动态几何对象组成动态子场景DS。

本发明方法的第二部分对三维动画场景中的静态子场景SS进行预计算,具体步骤如 下:

Step001:以点光源101的位置PS为视点,用光栅化技术绘制静态子场景SS,记录所 有可见片段C001的空间位置,并在各可见片段C001处创建虚拟二次点光源C002,虚拟 二次点光源C002的光源亮度根据其距离点光源101的远近及可见片段C001的材质反射特 性来计算,虚拟二次点光源C002的光源空间位置为可见片段C001的空间位置;如果虚拟 二次点光源C002位于漫反射表面上,则虚拟二次点光源C002的光源类型设置为半球全向 光源,否则设置为聚光灯光源,聚光灯的发散角根据可见片段C001的材质反射特性的光 泽度进行设置;将所有虚拟二次点光源C002存储在一个列表L1中;

Step002:将视点设置在眼睛C003的位置PE处,以点光源101和L1中的所有虚拟二 次点光源C002照射静态子场景SS,用光线投射技术绘制静态子场景SS;对光线投射过程 计算得到的每个绘制点C004,记录绘制点C004的空间位置,并计算绘制点C004处的点 光源空间方向分布及其可见性,具体步骤如下:

①以点光源101和L1中的所有虚拟二次点光源C002为候选点光源集合CS,从集合 CS中删除对绘制点C004不是潜在可见的点光源;

②创建一个二维数组B003,为集合CS中的每个点光源C005创建点光源照射记录结 构A001类型的变量C006,并用点光源C005的空间位置、光源亮度、光源类型等属性设 置变量C006的空间位置、光源亮度、光源类型等成员变量,并用阴影光线测试方法判断 点光源C005对绘制点P是否可见,如果点光源C005对绘制点P可见,则设置变量C006 的光源可见性标识成员变量的值为1,否则设置为0;

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

Step101:将列表L1中的所有虚拟二次点光源设置为有效;

Step102:以点光源101的位置PS为视点,用光栅化技术绘制动态子场景DS,记录所 有可见片段D001的空间位置D002;对动态子场景DS的每个可见片段D001,如果其到点 光源101的距离小于与其对应的像素所对应的静态子场景SS的可见片段C001到点光源 101的距离,则标记位于列表L1中的静态子场景SS的可见片段C001对应的虚拟二次点光 源无效,并根据可见片段D001的空间位置D002和材质反射特性,创建一个新的虚拟二次 点光源添加到列表L2中;

Step103:将视点设置在眼睛C003的位置PE处,用光线投射技术绘制动态子场景DS, 对光线投射过程计算得到的每个绘制点D003,如果绘制点D003到位置PE的距离大于第 二部分的Step002中与相同像素对应的绘制点C004到位置PE的距离,则转Step104,否则 转Step105;

Step104:对动态子场景DS中的每个动态场景对象DSO,由绘制点C004和对象DSO 的包围体可确定一个圆锥体D004,圆锥体D004的锥顶在绘制点C004处,圆锥体D004 正好将对象DSO的包围体包裹住,判断列表L1中的哪些对绘制点C004潜在可见且有效的 虚拟二次点光源与绘制点C004的连线穿过圆锥体D004,再以绘制点C004和这些虚拟二 次点光源为端点分别生成一系列线段D005,并判断线段D005是否确实与动态场景对象 DSO相交,如果相交,则表示相应的虚拟二次点光源被动态场景对象DSO(102)遮挡而 对绘制点C004不可见;用阴影光线测试方法判断列表L2中的各虚拟二次点光源对绘制点 C004是否可见,如果可见,计算其对绘制点C004的光照贡献D006;计算列表L1中的全 部有效的且对绘制点C004可见的虚拟二次点光源对绘制点C004的光照贡献D007,将光 照贡献D006和光照贡献D007之和作为绘制点C004对应像素的最终光照值;转Step106;

Step105:用阴影光线测试方法判断列表L2中的各虚拟二次点光源和列表L1中的各有 效的虚拟二次点光源对绘制点D003是否可见,如果可见,则累加其对绘制点D003的光照 贡献,以得到绘制点D003对应像素的最终光照值;

Step106:当前动画帧绘制完毕。

有益效果

本发明提供了一种只包含物体变化的三维动画场景的绘制方法。由于本发明方法将三 维动画场景分为静态子场景和动态子场景,对静态子场景只需做一次预绘制计算,在动画 的各帧中都可以复用预计算结果,因此可以提高三维动画的绘制效率。本发明方法考虑了 动态子场景中的动态场景对象运动变化对绘制结果的影响,保证了绘制结果的精度。本发 明方法通过创建虚拟二次点光源来实现间接光照的计算,可以得到比较逼真的全局光照效 果。对于一般性的动画绘制,可以分离出一系列只包含物体变化的三维动画情节,每个情 节包含的若干帧画面可以采用本发明方法来绘制。

附图说明

图1是一个场景点处的点光源空间方向分布及其可见性示意图。

具体实施方式

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

在本实施例中,利用NVIDIA公司的GPU来实现本发明方法中的光栅化计算操作, 利用NVIDIA公司的CUDA和C++编写程序实现光线投射计算和阴影光线测试计算。在进 行光栅化计算时,如果在某像素位置上没有可见片段,此时可以为该像素关联一个虚拟可 见片段,以表示该像素对应的绘制点在背景上(不在真实场景对象上),虚拟可见片段的 空间位置的深度分量为可表示的最大深度值;在创建虚拟二次点光源时,不为虚拟可见片 段创建虚拟二次点光源。

如图1所示,对于任意一个场景点P(105),从点P的切平面上的以点P为圆心的单 位圆内的任一点T(104)作一条平行于点P的正法线方向的射线Rad,射线Rad与点P的 正法线方向单位半球面相交于一点S(103),起始于点P穿过点S的射线代表了点P的正 法线方向单位半球空间中的一个方向Dir,且方向Dir与点T构成映射关系;只有当点P 与一个点光源的连线所表示的方向位于点P的正法线方向单位半球空间之内时,该点光源 才有可能对点P可见,即该点光源对点P潜在可见。

本发明方法提供一种场景点P处的点光源照射记录结构A001,其包括光源空间位置、 光源亮度、光源类型、光源可见性标识等成员变量。

本发明方法的第一部分提供一种存储三维动画场景空间中的任意一个场景点P处的点 光源空间方向分布及其可见性的方法,具体方法如下:

对点P的切平面上,以点P为中心的单位矩形进行网格化,得到一个二维网格B001 (106);如果某点光源对点P潜在可见,根据该点光源与点P的连线所表示的方向,可以 找到与该方向对应的点P的切平面上的以点P为圆心的单位圆内的一点T及其所在的网格 单元B002,即该点光源与网格单元B002相对应;如果有多个点光源对点P潜在可见,则 这些点光源也必然有与之相对应的网格单元B002;创建一个二维数组B003,二维数组B003 的行数和列数等于二维网格B001的行数和列数,每个数组元素均为点光源照射记录结构 A001类型的列表LIST,即数组元素和网格单元B002之间一一对应;对三维动画场景中 的每个对点P潜在可见的点光源B004,找出与其相对应的网格单元B002,再创建一个点 光源照射记录结构A001类型的变量B005,并根据点光源B004的属性及与点P的位置关 系设置变量B005的各成员变量,最后将变量B005添加到与点光源B004相对应的网格单 元B002所对应的二维数组B003的数组元素的列表LIST中;这样,任意一个场景点P处 的点光源空间方向分布及其可见性就存储在二维数组B003之中。

将三维动画场景中的几何对象分为静态几何对象和动态几何对象,所有静态几何对象 组成静态子场景SS,所有动态几何对象组成动态子场景DS。

本发明方法的第二部分对三维动画场景中的静态子场景SS进行预计算,具体步骤如 下:

Step001:以点光源101的位置PS为视点,用光栅化技术绘制静态子场景SS,记录所 有可见片段C001的空间位置,并在各可见片段C001处创建虚拟二次点光源C002,虚拟 二次点光源C002的光源亮度根据其距离点光源101的远近及可见片段C001的材质反射特 性来计算,虚拟二次点光源C002的光源空间位置为可见片段C001的空间位置;如果虚拟 二次点光源C002位于漫反射表面上,则虚拟二次点光源C002的光源类型设置为半球全向 光源,否则设置为聚光灯光源,聚光灯的发散角根据可见片段C001的材质反射特性的光 泽度进行设置;将所有虚拟二次点光源C002存储在一个列表L1中;

Step002:将视点设置在眼睛C003的位置PE处,以点光源101和L1中的所有虚拟二 次点光源C002照射静态子场景SS,用光线投射技术绘制静态子场景SS;对光线投射过程 计算得到的每个绘制点C004,记录绘制点C004的空间位置,并计算绘制点C004处的点 光源空间方向分布及其可见性,具体步骤如下:

①以点光源101和L1中的所有虚拟二次点光源C002为候选点光源集合CS,从集合 CS中删除对绘制点C004不是潜在可见的点光源;

②创建一个二维数组B003,为集合CS中的每个点光源C005创建点光源照射记录结 构A001类型的变量C006,并用点光源C005的空间位置、光源亮度、光源类型等属性设 置变量C006的空间位置、光源亮度、光源类型等成员变量,并用阴影光线测试方法判断 点光源C005对绘制点P是否可见,如果点光源C005对绘制点P可见,则设置变量C006 的光源可见性标识成员变量的值为1,否则设置为0;

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

Step101:将列表L1中的所有虚拟二次点光源设置为有效;

Step102:以点光源101的位置PS为视点,用光栅化技术绘制动态子场景DS,记录所 有可见片段D001的空间位置D002;对动态子场景DS的每个可见片段D001,如果其到点 光源101的距离小于与其对应的像素所对应的静态子场景SS的可见片段C001到点光源 101的距离,则标记位于列表L1中的静态子场景SS的可见片段C001对应的虚拟二次点光 源无效,并根据可见片段D001的空间位置D002和材质反射特性,创建一个新的虚拟二次 点光源添加到列表L2中;

Step103:将视点设置在眼睛C003的位置PE处,用光线投射技术绘制动态子场景DS, 对光线投射过程计算得到的每个绘制点D003,如果绘制点D003到位置PE的距离大于第 二部分的Step002中与相同像素对应的绘制点C004到位置PE的距离,则转Step104,否则 转Step105;

Step104:对动态子场景DS中的每个动态场景对象DSO,由绘制点C004和对象DSO 的包围体可确定一个圆锥体D004,圆锥体D004的锥顶在绘制点C004处,圆锥体D004 正好将对象DSO的包围体包裹住,判断列表L1中的哪些对绘制点C004潜在可见且有效的 虚拟二次点光源与绘制点C004的连线穿过圆锥体D004,再以绘制点C004和这些虚拟二 次点光源为端点分别生成一系列线段D005,并判断线段D005是否确实与动态场景对象 DSO相交,如果相交,则表示相应的虚拟二次点光源被动态场景对象DSO(102)遮挡而 对绘制点C004不可见;用阴影光线测试方法判断列表L2中的各虚拟二次点光源对绘制点 C004是否可见,如果可见,计算其对绘制点C004的光照贡献D006;计算列表L1中的全 部有效的且对绘制点C004可见的虚拟二次点光源对绘制点C004的光照贡献D007,将光 照贡献D006和光照贡献D007之和作为绘制点C004对应像素的最终光照值;转Step106;

Step105:用阴影光线测试方法判断列表L2中的各虚拟二次点光源和列表L1中的各有 效的虚拟二次点光源对绘制点D003是否可见,如果可见,则累加其对绘制点D003的光照 贡献,以得到绘制点D003对应像素的最终光照值;

Step106:当前动画帧绘制完毕。

如果实际的三维动面场景的光源为面光源,则通过对面光源采样得到一系列点光源, 再用每个采样点光源照射场景并按照本发明方法的第二和第三部分绘制三维动画场景,将 各采样点光源分别照射三维动画场景时的绘制结果进行合并,即可得到面光源照射三维动 画场景时的帧画面。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号