CN103440684A - 一种将球谐光照技术应用于面绘制的方法 - Google Patents

一种将球谐光照技术应用于面绘制的方法 Download PDF

Info

Publication number
CN103440684A
CN103440684A CN2013103968221A CN201310396822A CN103440684A CN 103440684 A CN103440684 A CN 103440684A CN 2013103968221 A CN2013103968221 A CN 2013103968221A CN 201310396822 A CN201310396822 A CN 201310396822A CN 103440684 A CN103440684 A CN 103440684A
Authority
CN
China
Prior art keywords
texture
point
ball
humorous
spherical harmonic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2013103968221A
Other languages
English (en)
Other versions
CN103440684B (zh
Inventor
邱航
陈雷霆
蔡洪斌
周川
陈瑜
曹跃
谭浩
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
University of Electronic Science and Technology of China
Original Assignee
University of Electronic Science and Technology of China
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by University of Electronic Science and Technology of China filed Critical University of Electronic Science and Technology of China
Priority to CN201310396822.1A priority Critical patent/CN103440684B/zh
Publication of CN103440684A publication Critical patent/CN103440684A/zh
Application granted granted Critical
Publication of CN103440684B publication Critical patent/CN103440684B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Image Generation (AREA)

Abstract

一种将球谐光照技术应用于面绘制的方法,其使用纹理回填的方法使球谐光照技术可以应用到面绘制中。为此,首先对面模型中的每个面片进行离散采样将其转换为点模型;然后通过球谐光照方法得到每个点的球谐系数组;根据每个面离散出来的点及其对应的球谐系数组,通过纹理回填的方法为每个面生成一组球谐系数纹理;最后使用面绘制的方法对面模型进行绘制,通过GPU渲染管线进行编程完成球谐光照模拟。本发明在不牺牲绘制效率的前提下显著提高绘制质量。同时,本发明能在一程度上提高绘制效率,又可以克服点绘制时由于点与点之间重叠或覆盖范围不够产生的各种走样问题。

Description

一种将球谐光照技术应用于面绘制的方法
技术领域
本发明涉及一种将球谐光照技术应用于面绘制的方法。
背景技术
球谐函数是一种与傅立叶变换类似的信号处理工具,2002年,Kautz等将其应用到了图形学体绘制的光照模拟中,并得到了良好的效果与较高的绘制速度。此外,球谐函数在图形学中的应用还包括表面重构,识别等领域。
对球谐光照理论的研究与应用多集中在光照模型建模以及求解方面,Kautz等在能量传输模型的基础上建立了一个光照模型并使用球谐函数求解,以达到高效光照计算的目的;Alexander等对生物体中的光照进行模拟,并使用球谐函数高效求解;Zhong等人为了模拟场景中的动态阴影效果,在建立相应光照模型的基础上进行求解。
由于球谐光照所考虑的光照模型是基于点的能量传输公式(Light Transport),其在预计算过程中需要对单个点元进行采样计算处理,故上述研究者都是使用基于点模型的体绘制进行最后的图像渲染。然而,体绘制绘制的光栅化阶段常常需要解决走样,点元缩放以及GPU绘制支持等问题,在某种程度上影响了绘制效率。
相反,面绘制中并不需要考虑体绘制中存在的上述问题,但是却无法直接使用球谐光照技术。
发明内容
鉴于上述不足之处,本发明的目的在于提供一种将球谐光照技术应用于面绘制的方法,其使用纹理回填的方法使球谐光照技术可以应用到面绘制中。为此,首先对面模型中的每个面片进行离散采样将其转换为点模型;然后通过球谐光照方法得到每个点的球谐系数组;根据每个面离散出来的点及其对应的球谐系数组,通过纹理回填的方法为每个面生成一组球谐系数纹理;最后使用面绘制的方法对面模型进行绘制,通过GPU渲染管线进行编程完成球谐光照模拟。
该方法主要包括三个阶段:数据准备,纹理回填以及GPU编程绘制。
数据准备阶段主要完成面模型的每个三角面片的离散采样以及球谐光照预计算工作,完成这一阶段后,离散的模型数据使用链表表示。
纹理回填阶段根据每个面片的采样点对应的球谐系数生成相应面的系数纹理,该纹理是一张正方形的纹理,其中包含了与每个三角面片相同大小的纹理区域,存放球谐系数组。
GPU编程绘制阶段主要通过GPU编程读出每个片元对应的球谐系数组,并进行光照计算。由于该方法得到的球谐系数组通过对系数纹理进行最近点插值得到,其流程适用于面绘制。
具体为:
(1)数据准备:对面模型中的每个三角面片进行离散采样将其转换为点模型;然后通过球谐光照方法得到每个点的球谐系数组;
数据准备包括将面模型转换为点模型即面模型采样,三角面片排序与球谐光照预计算三个部分;具体为:
①面模型采样    
生成采样点:
为了将面模型采样为一个点模型,需要对三角面片进行离散化处理,我们使用等距离采样的方法,将面模型中的每个三角面片进行采样处理;假设所需采样的三角面片三个顶点的坐标为                                                
Figure 223552DEST_PATH_IMAGE001
Figure 377452DEST_PATH_IMAGE002
以及 ,则等距采样的基本思想是设置一条扫描线从三角形的一个底边开始,通过在扫描线上每次移动相同距离采样数据,然后将扫描线上移进行下轮扫描;
为了设置扫描线,必需要得到扫描线的两个端点,由于需要对三角面片内部进行采样,不能直接对
Figure 550125DEST_PATH_IMAGE004
为起始扫描线。为此,我们使用如下方法进行扫描线的设置与采样:
a)以点为起点,
Figure 930608DEST_PATH_IMAGE006
为方向向点移动
Figure 761477DEST_PATH_IMAGE008
个固定距离,得到点
Figure 609348DEST_PATH_IMAGE009
                        (1-1)
b)以同样的方法,以点
Figure 758886DEST_PATH_IMAGE011
为起点,为方向向点
Figure 307996DEST_PATH_IMAGE007
移动
Figure 720523DEST_PATH_IMAGE008
个固定距离,得到点
Figure 482943DEST_PATH_IMAGE013
c)将
Figure 602209DEST_PATH_IMAGE014
作为扫描线进行等距采样,采样方法与之前类似,即以点为起点,
Figure 957284DEST_PATH_IMAGE016
为方向向点
Figure 523394DEST_PATH_IMAGE013
移动
Figure 559483DEST_PATH_IMAGE008
个固定距离,得到采样点
Figure 123320DEST_PATH_IMAGE017
,重复这一过程直到
Figure 510439DEST_PATH_IMAGE017
到达
Figure 614661DEST_PATH_IMAGE013
d)重新进行步骤a),b);如果扫描线到达三角形的顶点,则结束,保存所有采样点;否则,进行c)。
数据结构的组织:
将三角形面片的三个顶点与采样点在同一链表中进行存储;每个链表结点的数据结构包括采样点的位置,球谐系数组,纹理坐标属性,对于存放顶点的结点,其对应的属性仅为顶点的空间坐标,其它属性值为空,为区别顶点与采样点,在数据结构中加入一个bool值来区分顶点与采样点:
//采样点与顶点共同使用的数据结构
Struct sample
{  
Position; //采样点&顶点的三维空间坐标
Coef; //采样点的球谐系数组,若为顶点该项为空
       Bool isVertex;//判断是否为三角形顶点的bool值
}
该数据结构构成了模型链表中的一个结点,对于一个面片,其对应链表段中的结点组织按照三角形三个顶点以及面片采样点的顺序进行链表存储:顶点1→顶点2→顶点3→采样点1→采样点2……采样点N。
       模型采样完成后对采样点进行球谐光照预计算处理,其中顶点将不参与预计算,为此,只需要在预计算时根据isVertex布尔值进行判断即可,isVertex  是数据结构sample中的一个分量, 当其为true的时候,表示其为顶点,将不参与预计算;球谐光照预计算完成后,链表中每个采样点都对应了一组球谐系数,为保证一定的精度,取16个球谐系数。
②三角面片排序
在对三角面片采样完成后,对其面积进行排序;首先根据三角面片的三个顶点坐标
Figure 567891DEST_PATH_IMAGE018
计算其面积,
Figure 114410DEST_PATH_IMAGE019
                          (1-2)
其中,
Figure 287902DEST_PATH_IMAGE020
是顶点
Figure 298583DEST_PATH_IMAGE021
组成的线段的距离,
Figure 266539DEST_PATH_IMAGE022
是顶点
Figure 362671DEST_PATH_IMAGE023
到线段
Figure 746379DEST_PATH_IMAGE020
的距离。对所有三角形面片的面积进行由小到大的排序,得到一个按面积大小递增的面模型离散化链表;
③球谐光照预计算
对整个点模型进行球谐光照处理,完成该步后每个点元得到一组球谐系数;
球谐光照中使用的光照模型为模拟漫反射积分公式:
Figure 877146DEST_PATH_IMAGE024
    (1-3)
其中
Figure 16003DEST_PATH_IMAGE025
是一个表征粒子属性的参数,该模型使用积分式中的表达式来模拟
Figure 786830DEST_PATH_IMAGE027
方向的直接入射光对点
Figure 772104DEST_PATH_IMAGE028
的影响,使用可见性函数
Figure 19546DEST_PATH_IMAGE029
标识
Figure 90270DEST_PATH_IMAGE027
方向的遮挡信息,模型的积分域是法线向量所处的半球区域,整个光照模型所表征的物理过程是在当前考虑点的法线向量所处的半球区域,接收从各个方向反射过来的光能后,通过漫反射向视线方向出射光强;
为了计算该模型,需要对模型中积分式的两个函数
Figure 143677DEST_PATH_IMAGE030
进行球谐分解,对一个函数使用球谐分解的方法如式1-4所示:
                       (1-4)
其中
Figure 694241DEST_PATH_IMAGE033
叫做球谐基函数,其形式如式1-5所示,可见球谐其函数是一组函数集合,其函数的阶数由
Figure 551338DEST_PATH_IMAGE034
决定,
Figure 183308DEST_PATH_IMAGE035
是待分解的函数,球谐分解的实质是提取原函数在球谐空间中不同的信号成分,每一种成分对应了一个阶的球谐基函数,分解后的球谐系数
Figure 834869DEST_PATH_IMAGE036
就是该阶球谐基函数的振幅,通过使用球谐系数对球谐基函数进行调制解调便可还原原来的信号;
Figure 880185DEST_PATH_IMAGE037
   (1-5)
       球谐光照的预计算过程就是对式2-4中的两个函数
Figure 275395DEST_PATH_IMAGE030
Figure 824188DEST_PATH_IMAGE031
进行球谐分解的过程,模型中的每个点都要完成一次该过程。
(2)纹理回填:根据每个面离散出来的点及其对应的球谐系数组,通过纹理回填的方法为每个面生成一组球谐系数纹理;所述纹理回填过程包含三个步骤:即生成纹理空间,定位纹素,计算纹理坐标,具体为:
①生成纹理空间
所有三角面片的系数纹理将被整合到一张正方形的纹理中,以便于面绘制的纹理读取,为此,在生成每个三角面片的系数纹理时,都需要在正方形纹理中划分出一个与三角面片形状相同的区域,用以存放该面片的对应的纹理;
计算三角形三条边中最长的一条边,设其长为
Figure 849913DEST_PATH_IMAGE038
,对应的两个顶点为
Figure 50267DEST_PATH_IMAGE002
,则第三个顶点为,以及以该边为底边对应的三角形的高
Figure 915772DEST_PATH_IMAGE022
,求解
Figure 404522DEST_PATH_IMAGE004
边长可使用公式2-1;
Figure 407113DEST_PATH_IMAGE039
             (2-1)
为求得点
Figure 868181DEST_PATH_IMAGE003
到边
Figure 32446DEST_PATH_IMAGE004
的距离
Figure 274072DEST_PATH_IMAGE022
,假设线段可表示为:
Figure 130349DEST_PATH_IMAGE040
  
Figure 731095DEST_PATH_IMAGE041
    (2-2)
由方程
Figure 194437DEST_PATH_IMAGE042
解得:
Figure 488233DEST_PATH_IMAGE043
      (2-3)
       将其代入式2-2得到点
Figure 986210DEST_PATH_IMAGE007
在线段
Figure 492278DEST_PATH_IMAGE004
上的投影点
Figure 708496DEST_PATH_IMAGE044
;根据
Figure 528684DEST_PATH_IMAGE045
可以得到
Figure 881168DEST_PATH_IMAGE022
Figure 558137DEST_PATH_IMAGE046
                (2-4)
       以及划分线段的比例:
Figure 826941DEST_PATH_IMAGE047
            (2-5)
以该底边与高为矩形的长和宽,在正方形纹理中分配一个相同大小的矩形空间,该矩形空间紧邻前一个三角面片的矩形空间,其左上角与前一个三角面片的矩形空间的右上角对齐,在正方形纹理一行排满后,取该行三角形高的值最大值
Figure 940391DEST_PATH_IMAGE048
作为该行的行高,并从其后开始下一行的三角面片的分配。
②定位纹素
       在面片对应的三角系数纹理区域划分出来后,将相应三角区域的系数存入该区域即可得到三角成片的一个系数纹理,完成这一步骤需要进行纹理回填操作,其主要操作是定位一个链表结点在三角纹理中相应纹素的位置;
根据结点
Figure 803305DEST_PATH_IMAGE049
包含的点的位置信息
Figure 27613DEST_PATH_IMAGE050
,以及该采样点所属三角形的三个顶点在正方形纹理中的坐标
Figure 723670DEST_PATH_IMAGE052
Figure 751669DEST_PATH_IMAGE053
定位纹理的方法如下:
a)在前一步生成纹理空间过程中得到三角形的三条边中最长的一条边,如
Figure 933252DEST_PATH_IMAGE020
,以及以该边为底边对应的三角形的高
Figure 326187DEST_PATH_IMAGE022
b)根据式2-4计算点
Figure 226010DEST_PATH_IMAGE049
Figure 792120DEST_PATH_IMAGE050
到边
Figure 828210DEST_PATH_IMAGE020
的距离
Figure 392046DEST_PATH_IMAGE054
,根据式2-5计算点
Figure 513586DEST_PATH_IMAGE049
Figure 883387DEST_PATH_IMAGE050
到边
Figure 39562DEST_PATH_IMAGE020
的投影点
Figure 774300DEST_PATH_IMAGE055
Figure 383136DEST_PATH_IMAGE020
的分割比例
Figure 291049DEST_PATH_IMAGE056
c)定位纹素,得到该采样点在正方形纹理中对应的纹素的坐标
Figure 239413DEST_PATH_IMAGE057
Figure 207369DEST_PATH_IMAGE058
Figure 303501DEST_PATH_IMAGE059
                 (2-6)。
③纹理坐标的计算
在所有三角面片的系数纹理回填完成后,需要对三角面片的系数纹理坐标进行更新;由于三角面片的纹理坐标只需要计算三角形三个顶点的纹理坐标,因此,在进行完正方形大纹理的三角面片纹理分配后,计算每个三角面片对应的纹理在正方形纹理中的三个顶点的纹理坐标,其计算过程如下:
假设正方形纹理的长,宽分别为
Figure 15105DEST_PATH_IMAGE060
,三角面片在正方形纹理中顶点坐标为
Figure 83556DEST_PATH_IMAGE061
,则此顶点对应的纹理坐标
Figure 222413DEST_PATH_IMAGE062
可通过如下公式计算:
                           (2-7)
通过以上三个步骤完成纹理回填后,在原来的面模型上额外增加了存储球谐系数的纹理,每个面片在该纹理上都对应了一块唯一的纹理空间,通过纹理坐标标识。
(3)GPU编程绘制:使用面绘制的方法对面模型进行绘制,通过GPU渲染管线进行编程完成球谐光照模拟。具体为:
在绘制阶段,按照面绘制的流程,将面模型的每个三角面片的三个顶点以及颜色纹理,系数纹理及其相应纹理坐标传入GPU,通过对GPU渲染管线进行编程读取球谐系数坐标,并进行光照计算,为实现这一目的,只需对fragment shader进行编程即可,其伪代码如下:
使用最近点插值得到当前片元的球谐系数组
Figure 55557DEST_PATH_IMAGE064
使用线性插值得到当前片元的颜色值
Figure 978513DEST_PATH_IMAGE045
使用从CPU中传入的旋转后的光源函数的球谐系数组
Figure 288272DEST_PATH_IMAGE065
(即将旋转后的光源函数的球谐系数组
Figure 93417DEST_PATH_IMAGE065
从CPU传入shader)
计算最终颜色值color
Figure 146824DEST_PATH_IMAGE066
本发明在不牺牲绘制效率的前提下显著提高绘制质量,由于基于点绘制的球谐光照技术可以以较小的计算代价实现诸如动态阴影等重要的光照效果,从而显著提高绘制质量。同时,本发明方法由于在最后绘制时使用纹理,面绘制等绘制方法,GPU对其有很好的硬件支持,因此在一程度上提高的绘制效率,同时又可以克服点绘制时由于点与点之间重叠或覆盖范围不够产生的各种走样问题。
附图说明
图1为本发明的流程图。
图2为本发明中面模型采样模型的离散化处理示意图。
图3为三角面片的等距采样示意图。
图4为三角面片的系数纹理的管理示意图。
图5为三角面片的系数纹理空间分配示意图。
具体实施方式
下面我们将结合具体实施例对本发明作进一步的说明。
如图1所示,本发明的目的在于提供一种将球谐光照技术应用于面绘制的方法,其采用纹理回填的方法使球谐光照技术可以应用到面绘制中。为此,首先对面模型中的每个面片进行离散采样将其转换为点模型;然后通过球谐光照方法得到每个点的球谐系数组;根据每个面离散出来的点及其对应的球谐系数组,通过纹理回填的方法为每个面生成一组球谐系数纹理;最后使用面绘制的方法对面模型进行绘制,通过GPU渲染管线进行编程完成球谐光照模拟。
该方法主要包括三个阶段:数据准备,纹理回填以及GPU编程绘制。
数据准备阶段主要完成面模型的每个三角面片的离散采样以及球谐光照预计算工作,完成这一阶段后,离散的模型数据使用链表表示。
纹理回填阶段根据每个面片的采样点对应的球谐系数生成相应面的系数纹理,该纹理是一张正方形的纹理,其中包含了与每个三角面片相同大小的纹理区域,存放球谐系数组。
GPU编程绘制阶段主要通过GPU编程读出每个片元对应的球谐系数组,并进行光照计算。由于该方法得到的球谐系数组通过对系数纹理进行最近点插值得到,其流程适用于面绘制。
具体为:
1.数据准备:
数据准备包括将面模型转换为点模型(面模型采样),三角面片排序与球谐光照预计算三个部分。
1)面模型采样
为了将面模型采样为一个点模型,需要对三角面片进行离散化处理(如图2所示),我们使用等距离采样的方法,将面模型中的每个三角面片进行采样处理。
生成采样点:
为了保证纹理回填阶段的生成的纹理的完整性,我们使用等距离采样的方法三角面片进行离散化采样。如图3所示,假设所需采样的三角面片三个顶点的坐标为
Figure 924287DEST_PATH_IMAGE001
Figure 404947DEST_PATH_IMAGE002
以及 ,则等距采样的基本思想是设置一条扫描线从三角形的一个底边开始,通过在扫描线上每次移动相同距离采样数据,然后将扫描线上移进行下轮扫描。
为了设置扫描线,必需要得到扫描线的两个端点,由于需要对三角面片内部进行采样,不能直接对
Figure 492168DEST_PATH_IMAGE004
为起始扫描线。为此,我们使用如下方法进行扫描线的设置与采样:
a)以点
Figure 452034DEST_PATH_IMAGE005
为起点,
Figure 103595DEST_PATH_IMAGE006
为方向向点
Figure 883333DEST_PATH_IMAGE007
移动个固定距离,得到点
Figure 30597DEST_PATH_IMAGE009
Figure 853060DEST_PATH_IMAGE010
                        (1-1)
b)以同样的方法,以点
Figure 57776DEST_PATH_IMAGE011
为起点,
Figure 256676DEST_PATH_IMAGE012
为方向向点
Figure 925555DEST_PATH_IMAGE007
移动
Figure 918919DEST_PATH_IMAGE008
个固定距离,得到点
Figure 610931DEST_PATH_IMAGE013
c)将
Figure 613522DEST_PATH_IMAGE014
作为扫描线进行等距采样,采样方法与之前类似,即以以点
Figure 136908DEST_PATH_IMAGE015
为起点,
Figure 238856DEST_PATH_IMAGE016
为方向向点
Figure 480481DEST_PATH_IMAGE013
移动个固定距离,得到采样点
Figure 336759DEST_PATH_IMAGE017
,重复这一过程直到
Figure 937504DEST_PATH_IMAGE017
到达
Figure 400847DEST_PATH_IMAGE013
d)重新进行步骤a),b)。如果扫描线到达三角形的顶点
Figure 745240DEST_PATH_IMAGE007
,则结束,保存所有采样点;否则,进行c)。
数据结构的组织:
为了方便后面的纹理回填,我们将三角形面片的三个顶点与采样点在同一链表中进行存储。每个链表结点的数据结构包括采样点的各种属性,如位置,球谐系数组,纹理坐标等,对于存放顶点的结点,其对应的属性仅为顶点的空间坐标,其它属性值为空。为区别顶点与采样点,在数据结构中加入一个bool值来区分顶点与采样点:
//采样点与顶点共同使用的数据结构
Struct sample
{  
Position; //采样点&顶点的三维空间坐标
Coef; //采样点的球谐系数组,若为顶点该项为空
       Bool isVertex;//判断是否为三角形顶点的bool值
}
该数据结构构成了模型链表中的一个结点,对于一个面片,其对应链表段中的结点组织按照三角形三个顶点以及面片采样点的顺序进行链表存储,如下所示:
顶点1→顶点2→顶点3→采样点1…………采样点N
模型采样完成后对采样点进行球谐光照预计算处理,其中顶点将不参与预计算,为此,只需要在预计算时根据isVertex布尔值进行判断即可,isVertex是数据结构sample中的一个分量, 当其为true的时候,表示其为顶点,将不参与预计算。球谐光照预计算完成后,链表中每个采样点都对应了一组球谐系数,为保证一定的精度,通常取16个球谐系数。
2)三角面片排序
为了方便纹理回填过程中纹理空间的分配管理,在对三角面片采样完成后,对其面积进行排序。首先根据三角面片的三个顶点坐标
Figure 915322DEST_PATH_IMAGE018
计算其面积,
Figure 686969DEST_PATH_IMAGE019
                          (1-2)
其中,
Figure 637607DEST_PATH_IMAGE020
是顶点组成的线段的距离,
Figure 810280DEST_PATH_IMAGE022
是顶点
Figure 752828DEST_PATH_IMAGE023
到线段
Figure 190762DEST_PATH_IMAGE020
的距离。对所有三角形面片的面积进行由小到大的排序,得到一个按面积大小递增的面模型离散化链表。
3)球谐光照预计算
对整个点模型进行球谐光照处理,完成该步后每个点元得到一组球谐系数。
采用球谐光照的目的是为了高效求解光照模型,以较高的效率得到较好的绘制效果。球谐光照中使用的光照模型一般为模拟漫反射的积分公式:
Figure 814642DEST_PATH_IMAGE024
    (1-3)
其中是一个表征粒子属性的参数,该模型使用积分式中的表达式来模拟
Figure 997995DEST_PATH_IMAGE027
方向的直接入射光对点
Figure 222303DEST_PATH_IMAGE028
的影响,使用可见性函数
Figure 549380DEST_PATH_IMAGE029
标识方向的遮挡信息,模型的积分域是法线向量所处的半球区域。整个光照模型所表征的物理过程是在当前考虑点的法线向量所处的半球区域,接收从各个方向反射过来的光能后,通过漫反射向视线方向出射光强。
为了计算该模型,需要对模型中积分式的两个函数
Figure 918361DEST_PATH_IMAGE030
Figure 946360DEST_PATH_IMAGE031
进行球谐分解,对一个函数使用球谐分解的方法如式1-4所示:
Figure 127943DEST_PATH_IMAGE032
                       (1-4)
其中
Figure 583195DEST_PATH_IMAGE033
叫做球谐基函数,其形式如式1-5所示,可见球谐其函数是一组函数集合,其函数的阶数由
Figure 155121DEST_PATH_IMAGE034
决定,
Figure 721232DEST_PATH_IMAGE035
是待分解的函数。球谐分解的实质是提取原函数在球谐空间中不同的信号成分,每一种成分对应了一个阶的球谐基函数,分解后的球谐系数就是该阶球谐基函数的振幅。通过使用球谐系数对球谐基函数进行调制解调便可还原原来的信号。
Figure 586737DEST_PATH_IMAGE037
   (1-5)
       球谐光照的预计算过程就是对式1-4中的两个函数
Figure 708277DEST_PATH_IMAGE030
进行球谐分解的过程,模型中的每个点都要完成一次该过程,因此其花费时间较长。
2.纹理回填
所谓纹理回填,就是根据每个面片采样点经过球谐光照预计算后得到的球谐系数组,制作与面片大小相符合的系数纹理。纹理回填的过程包含三个步骤:即生成纹理空间,定位纹素,计算纹理坐标。
1)生成纹理空间
所有三角面片的系数纹理将被整合到一张正方形的纹理中,以便于面绘制的纹理读取。为此,在生成每个三角面片的系数纹理时,都需要在正方形纹理中划分出一个与三角面片形状相同的区域,用以存放该面片的对应的纹理,如图4所示。
为了将三角面片对应的纹理放入正方形纹理中合适的位置,需要根据三角形的三个顶点在正方形纹理中分配相应的三角形空间。由于在采样过程中完成了对三角面片的排序,我们可以在正方形纹理中顺序分配与三角面片相同大小的纹理区域而不用考虑空间安排。为此,我们采用如下策略进行三角面片的纹理分配:
a)计算三角形三条边中最长的一条边,设其长为
Figure 171936DEST_PATH_IMAGE038
,对应的两个顶点为
Figure 968991DEST_PATH_IMAGE001
,则第三个顶点为
Figure 423423DEST_PATH_IMAGE003
,以及以该边为底边对应的三角形的高
Figure 434104DEST_PATH_IMAGE022
。求解边长可使用公式2-1。
Figure 498192DEST_PATH_IMAGE039
             (2-1)
为求得点
Figure 147479DEST_PATH_IMAGE003
到边
Figure 12667DEST_PATH_IMAGE004
的距离
Figure 151524DEST_PATH_IMAGE022
,假设线段
Figure 734953DEST_PATH_IMAGE004
可表示为:
Figure 187931DEST_PATH_IMAGE040
  
Figure 907625DEST_PATH_IMAGE041
    (2-2)
由方程解得:
      (2-3)
       将其代入式2-2得到点
Figure 279197DEST_PATH_IMAGE007
在线段上的投影点
Figure 599637DEST_PATH_IMAGE044
。根据
Figure 95341DEST_PATH_IMAGE045
可以得到
Figure 686859DEST_PATH_IMAGE022
Figure 381146DEST_PATH_IMAGE046
                (2-4)
       以及
Figure 235969DEST_PATH_IMAGE045
划分线段
Figure 15706DEST_PATH_IMAGE004
的比例:
Figure 410916DEST_PATH_IMAGE047
            (2-5)
       该比例的计算方法将在纹理回填时使用,用于对纹素的定位。
b)以该底边与高为矩形的长和宽,在正方形纹理中分配一个相同大小的矩形空间。该矩形空间紧邻前一个三角面片的矩形空间,其左上角与前一个三角面片的矩形空间的右上角对齐,其空间安排如图5所示。在正方形纹理一行排满后,取该行三角形高的值最大值
Figure 225288DEST_PATH_IMAGE048
作为该行的行高,并从其后开始下一行的三角面片的分配。
2)定位纹素(纹理回填)
在面片对应的三角系数纹理区域划分出来后,将相应三角区域的系数存入该区域即可得到三角成片的一个系数纹理,完成这一步骤需要进行纹理回填操作,其主要操作是定位一个链表结点在三角纹理中相应纹素的位置。
根据结点
Figure 973715DEST_PATH_IMAGE049
包含的点的位置信息
Figure 240748DEST_PATH_IMAGE050
,以及该采样点所属三角形的三个顶点
Figure 439648DEST_PATH_IMAGE018
在正方形纹理中的坐标
Figure 793903DEST_PATH_IMAGE053
定位纹理的方法如下:
a)在前一步生成纹理空间过程中得到三角形的三条边中最长的一条边,如
Figure 530915DEST_PATH_IMAGE020
,以及以该边为底边对应的三角形的高
b)根据式2-4计算点
Figure 421828DEST_PATH_IMAGE049
Figure 663453DEST_PATH_IMAGE050
到边
Figure 876260DEST_PATH_IMAGE020
的距离,根据式2-5计算点
Figure 854897DEST_PATH_IMAGE049
Figure 583819DEST_PATH_IMAGE050
到边
Figure 600316DEST_PATH_IMAGE020
的投影点
Figure 98294DEST_PATH_IMAGE055
Figure 807624DEST_PATH_IMAGE020
的分割比例
Figure 758262DEST_PATH_IMAGE056
c)定位纹素,得到该采样点在正方形纹理中对应的纹素的坐标
Figure 993252DEST_PATH_IMAGE058
                 (2-6)。
3)纹理坐标的计算
在所有三角面片的系数纹理回填完成后,需要对三角面片的系数纹理坐标进行更新。由于三角面片的纹理坐标只需要计算三角形三个顶点的纹理坐标,因此,在进行完正方形大纹理的三角面片纹理分配后,可以计算每个三角面片对应的纹理在正方形纹理中的三个顶点的纹理坐标。其计算过程如下:
假设正方形纹理的长,宽分别为
Figure 311417DEST_PATH_IMAGE060
,三角面片在正方形纹理中顶点坐标为
Figure 732034DEST_PATH_IMAGE061
,则此顶点对应的纹理坐标
Figure 204604DEST_PATH_IMAGE062
可通过如下公式计算:
Figure 255737DEST_PATH_IMAGE063
                           (2-7)
通过以上三个步骤完成纹理回填后,在原来的面模型上额外增加了存储球谐系数的纹理,每个面片在该纹理上都对应了一块唯一的纹理空间,通过纹理坐标标识。
3.GPU编程绘制
       绘制阶段,按照面绘制的流程,将面模型的每个三角面片的三个顶点以及颜色纹理,系数纹理及其相应纹理坐标传入GPU,通过对GPU渲染管线进行编程读取球谐系数坐标,并进行光照计算。为实现这一目的,只需对fragment shader进行编程即可,其伪代码如下:
使用最近点插值得到当前片元的球谐系数组
Figure 180967DEST_PATH_IMAGE064
使用线性插值得到当前片元的颜色值
Figure 405275DEST_PATH_IMAGE045
使用从CPU中传入的旋转后的光源函数的球谐系数组
Figure 466772DEST_PATH_IMAGE065
计算最终颜色值color
Figure 688806DEST_PATH_IMAGE066
球谐光照技术以球谐函数理论为基础,对图形学中的光照效果进行高效模拟,使得绘制结果在达到良好的光影效果的同时,保持良好的绘制效率。

Claims (4)

1.一种将球谐光照技术应用于面绘制的方法,其特征在于:该方法包括以下步骤:
(1)数据准备:对面模型中的每个三角面片进行离散采样将其转换为点模型;然后通过球谐光照方法得到每个点的球谐系数组;
(2)纹理回填:根据每个面离散出来的点及其对应的球谐系数组,通过纹理回填的方法为每个面生成一组球谐系数纹理;
(3)GPU编程绘制:使用面绘制的方法对面模型进行绘制,通过GPU渲染管线进行编程完成球谐光照模拟。
2.根据权利要求1所述的将球谐光照技术应用于面绘制的方法,其特征在于:所述数据准备包括将面模型转换为点模型即面模型采样,三角面片排序与球谐光照预计算三个部分;具体为:
1)面模型采样    
(1)生成采样点:
为了将面模型采样为一个点模型,需要对三角面片进行离散化处理,我们使用等距离采样的方法,将面模型中的每个三角面片进行采样处理;假设所需采样的三角面片三个顶点的坐标为                                                
Figure 2013103968221100001DEST_PATH_IMAGE001
Figure DEST_PATH_IMAGE002
以及 
Figure DEST_PATH_IMAGE003
,则等距采样的基本思想是设置一条扫描线从三角形的一个底边开始,通过在扫描线上每次移动相同距离采样数据,然后将扫描线上移进行下轮扫描;
为了设置扫描线,必需要得到扫描线的两个端点,由于需要对三角面片内部进行采样,不能直接对
Figure 2013103968221100001DEST_PATH_IMAGE004
为起始扫描线,为此,我们使用如下方法进行扫描线的设置与采样:
a)以点
Figure DEST_PATH_IMAGE005
为起点,
Figure DEST_PATH_IMAGE006
为方向向点
Figure DEST_PATH_IMAGE007
移动
Figure DEST_PATH_IMAGE008
个固定距离,得到点
Figure DEST_PATH_IMAGE009
Figure DEST_PATH_IMAGE010
                        (1-1)
b)以同样的方法,以点
Figure DEST_PATH_IMAGE011
为起点,
Figure DEST_PATH_IMAGE012
为方向向点
Figure 379131DEST_PATH_IMAGE007
移动
Figure 296272DEST_PATH_IMAGE008
个固定距离,得到点
Figure DEST_PATH_IMAGE013
c)将
Figure DEST_PATH_IMAGE014
作为扫描线进行等距采样,采样方法与之前类似,即以点
Figure DEST_PATH_IMAGE015
为起点,
Figure DEST_PATH_IMAGE016
为方向向点
Figure 13692DEST_PATH_IMAGE013
移动
Figure 408901DEST_PATH_IMAGE008
个固定距离,得到采样点
Figure DEST_PATH_IMAGE017
,重复这一过程直到
Figure 160957DEST_PATH_IMAGE017
到达
Figure 983419DEST_PATH_IMAGE013
d)重新进行步骤a),b);如果扫描线到达三角形的顶点
Figure 250453DEST_PATH_IMAGE007
,则结束,保存所有采样点;否则,进行c);
(2)数据结构的组织:
将三角形面片的三个顶点与采样点在同一链表中进行存储;每个链表结点的数据结构包括采样点的位置,球谐系数组,纹理坐标属性,对于存放顶点的结点,其对应的属性仅为顶点的空间坐标,其它属性值为空,为区别顶点与采样点,在数据结构中加入一个bool值来区分顶点与采样点:
//采样点与顶点共同使用的数据结构
Struct sample
{  
Position; //采样点&顶点的三维空间坐标
Coef; //采样点的球谐系数组,若为顶点该项为空
       Bool isVertex;//判断是否为三角形顶点的bool值
}
该数据结构构成了模型链表中的一个结点,对于一个面片,其对应链表段中的结点组织按照三角形三个顶点以及面片采样点的顺序进行链表存储:顶点1→顶点2→顶点3→采样点1→采样点2……采样点N;
2)三角面片排序
在对三角面片采样完成后,对其面积进行排序;首先根据三角面片的三个顶点坐标
Figure DEST_PATH_IMAGE018
计算其面积,
Figure DEST_PATH_IMAGE019
                          (1-2)
其中,
Figure DEST_PATH_IMAGE020
是顶点
Figure DEST_PATH_IMAGE021
组成的线段的距离,
Figure DEST_PATH_IMAGE022
是顶点
Figure DEST_PATH_IMAGE023
到线段
Figure DEST_PATH_IMAGE024
的距离,对所有三角形面片的面积进行由小到大的排序,得到一个按面积大小递增的面模型离散化链表;
3)球谐光照预计算
对整个点模型进行球谐光照处理,完成该步后每个点元得到一组球谐系数;
球谐光照中使用的光照模型为模拟漫反射积分公式:
  (1-3)
其中
Figure DEST_PATH_IMAGE026
是一个表征粒子属性的参数,该模型使用积分式中的表达式
Figure DEST_PATH_IMAGE027
来模拟
Figure DEST_PATH_IMAGE028
方向的直接入射光对点
Figure DEST_PATH_IMAGE029
的影响,使用可见性函数标识
Figure DEST_PATH_IMAGE031
方向的遮挡信息,模型的积分域是法线向量所处的半球区域,整个光照模型所表征的物理过程是在当前考虑点的法线向量所处的半球区域,接收从各个方向反射过来的光能后,通过漫反射向视线方向出射光强;
为了计算该模型,需要对模型中积分式的两个函数
Figure DEST_PATH_IMAGE032
Figure DEST_PATH_IMAGE033
进行球谐分解,对一个函数使用球谐分解的方法如式1-4所示:
Figure DEST_PATH_IMAGE034
                       (1-4)
其中
Figure DEST_PATH_IMAGE035
叫做球谐基函数,其形式如式1-5所示,可见球谐其函数是一组函数集合,其函数的阶数由
Figure DEST_PATH_IMAGE036
决定,
Figure DEST_PATH_IMAGE037
是待分解的函数,球谐分解的实质是提取原函数在球谐空间中不同的信号成分,每一种成分对应了一个阶的球谐基函数,分解后的球谐系数就是该阶球谐基函数的振幅,通过使用球谐系数对球谐基函数进行调制解调便可还原原来的信号;
Figure DEST_PATH_IMAGE039
  (1-5)
球谐光照的预计算过程就是对式1-4中的两个函数
Figure DEST_PATH_IMAGE040
Figure DEST_PATH_IMAGE041
进行球谐分解的过程,模型中的每个点都要完成一次该过程。
3.根据权利要求1所述的将球谐光照技术应用于面绘制的方法,其特征在于:所述纹理回填过程包含三个步骤:即生成纹理空间,定位纹素,计算纹理坐标,具体为:
①生成纹理空间
所有三角面片的系数纹理将被整合到一张正方形的纹理中,以便于面绘制的纹理读取,为此,在生成每个三角面片的系数纹理时,都需要在正方形纹理中划分出一个与三角面片形状相同的区域,用以存放该面片的对应的纹理;
计算三角形三条边中最长的一条边,设其长为
Figure DEST_PATH_IMAGE042
,对应的两个顶点为
Figure DEST_PATH_IMAGE043
Figure DEST_PATH_IMAGE044
,则第三个顶点为
Figure DEST_PATH_IMAGE045
,以及以该边为底边对应的三角形的高
Figure DEST_PATH_IMAGE046
,求解边长可使用公式2-1;
Figure DEST_PATH_IMAGE047
             (2-1)
为求得点
Figure DEST_PATH_IMAGE048
到边
Figure 682013DEST_PATH_IMAGE004
的距离,假设线段可表示为:
  
Figure DEST_PATH_IMAGE050
  (2-2)
由方程
Figure DEST_PATH_IMAGE051
解得:
Figure DEST_PATH_IMAGE052
      (2-3)
       将其代入式2-2得到点
Figure 42084DEST_PATH_IMAGE007
在线段
Figure 565470DEST_PATH_IMAGE004
上的投影点
Figure DEST_PATH_IMAGE053
;根据
Figure DEST_PATH_IMAGE054
可以得到
Figure 932997DEST_PATH_IMAGE046
Figure DEST_PATH_IMAGE055
                (2-4)
       以及
Figure 174623DEST_PATH_IMAGE054
划分线段
Figure 449746DEST_PATH_IMAGE004
的比例:
Figure DEST_PATH_IMAGE056
            (2-5)
以该底边与高为矩形的长和宽,在正方形纹理中分配一个相同大小的矩形空间,该矩形空间紧邻前一个三角面片的矩形空间,其左上角与前一个三角面片的矩形空间的右上角对齐,在正方形纹理一行排满后,取该行三角形高的值最大值作为该行的行高,并从其后开始下一行的三角面片的分配;
②定位纹素
       在面片对应的三角系数纹理区域划分出来后,将相应三角区域的系数存入该区域即可得到三角成片的一个系数纹理,完成这一步骤需要进行纹理回填操作,其主要操作是定位一个链表结点在三角纹理中相应纹素的位置;
根据结点
Figure DEST_PATH_IMAGE058
包含的点的位置信息
Figure DEST_PATH_IMAGE059
,以及该采样点所属三角形的三个顶点
Figure 19181DEST_PATH_IMAGE018
在正方形纹理中的坐标
Figure DEST_PATH_IMAGE060
Figure DEST_PATH_IMAGE061
定位纹理的方法如下:
a)在前一步生成纹理空间过程中得到三角形的三条边中最长的一条边,如
Figure DEST_PATH_IMAGE063
,以及以该边为底边对应的三角形的高
Figure 229714DEST_PATH_IMAGE046
b)根据式2-4计算点
Figure 958636DEST_PATH_IMAGE058
Figure 37450DEST_PATH_IMAGE059
到边的距离
Figure DEST_PATH_IMAGE064
,根据式2-5计算点
Figure 195396DEST_PATH_IMAGE059
到边
Figure 77901DEST_PATH_IMAGE063
的投影点
Figure 430385DEST_PATH_IMAGE063
的分割比例
Figure DEST_PATH_IMAGE066
       c)定位纹素,得到该采样点在正方形纹理中对应的纹素的坐标
Figure DEST_PATH_IMAGE067
Figure DEST_PATH_IMAGE068
Figure DEST_PATH_IMAGE069
                 (2-6)
③纹理坐标的计算
在所有三角面片的系数纹理回填完成后,需要对三角面片的系数纹理坐标进行更新;由于三角面片的纹理坐标只需要计算三角形三个顶点的纹理坐标,因此,在进行完正方形大纹理的三角面片纹理分配后,计算每个三角面片对应的纹理在正方形纹理中的三个顶点的纹理坐标,其计算过程如下:
假设正方形纹理的长,宽分别为
Figure DEST_PATH_IMAGE070
,三角面片在正方形纹理中顶点坐标为
Figure DEST_PATH_IMAGE071
,则此顶点对应的纹理坐标
Figure DEST_PATH_IMAGE072
可通过如下公式计算:
Figure DEST_PATH_IMAGE073
                           (2-7)
通过以上三个步骤完成纹理回填后,在原来的面模型上额外增加了存储球谐系数的纹理,每个面片在该纹理上都对应了一块唯一的纹理空间,通过纹理坐标标识。
4.根据权利要求1所述的将球谐光照技术应用于面绘制的方法,其特征在于:所述GPU编程绘制方法为:在绘制阶段,按照面绘制的流程,将面模型的每个三角面片的三个顶点以及颜色纹理,系数纹理及其相应纹理坐标传入GPU,通过对GPU渲染管线进行编程读取球谐系数坐标,并进行光照计算,为实现这一目的,需对fragment shader进行编程,其伪代码如下:
使用最近点插值得到当前片元的球谐系数组
Figure DEST_PATH_IMAGE074
使用线性插值得到当前片元的颜色值
Figure DEST_PATH_IMAGE075
使用从CPU中传入的旋转后的光源函数的球谐系数组
Figure DEST_PATH_IMAGE076
计算最终颜色值color
Figure DEST_PATH_IMAGE077
CN201310396822.1A 2013-09-04 2013-09-04 一种将球谐光照技术应用于面绘制的方法 Expired - Fee Related CN103440684B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310396822.1A CN103440684B (zh) 2013-09-04 2013-09-04 一种将球谐光照技术应用于面绘制的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310396822.1A CN103440684B (zh) 2013-09-04 2013-09-04 一种将球谐光照技术应用于面绘制的方法

Publications (2)

Publication Number Publication Date
CN103440684A true CN103440684A (zh) 2013-12-11
CN103440684B CN103440684B (zh) 2016-06-22

Family

ID=49694377

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310396822.1A Expired - Fee Related CN103440684B (zh) 2013-09-04 2013-09-04 一种将球谐光照技术应用于面绘制的方法

Country Status (1)

Country Link
CN (1) CN103440684B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104484896A (zh) * 2014-10-30 2015-04-01 无锡梵天信息技术股份有限公司 一种基于环境贴图来模拟人物皮肤次表面散射的物理方法
CN111275781A (zh) * 2020-01-17 2020-06-12 江苏艾佳家居用品有限公司 一种基于函数坐标空间的渲染优化方法
CN113205585A (zh) * 2021-03-25 2021-08-03 浙江大学 基于近似点光源的动态物体互反射效果实时绘制方法、装置、系统和存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7689367B2 (en) * 2004-05-17 2010-03-30 Blacklight Power, Inc. Method and system of computing and rendering the nature of the excited electronic states of atoms and atomic ions

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7689367B2 (en) * 2004-05-17 2010-03-30 Blacklight Power, Inc. Method and system of computing and rendering the nature of the excited electronic states of atoms and atomic ions

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
邱航: "虚拟战场中复杂场景建模与绘制若干关键技术研究", 《中国博士学位论文全文数据库社会科学Ⅰ辑》, no. 2, 15 February 2012 (2012-02-15), pages 93 - 108 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104484896A (zh) * 2014-10-30 2015-04-01 无锡梵天信息技术股份有限公司 一种基于环境贴图来模拟人物皮肤次表面散射的物理方法
CN104484896B (zh) * 2014-10-30 2018-01-16 无锡梵天信息技术股份有限公司 一种基于环境贴图来模拟人物皮肤次表面散射的物理方法
CN111275781A (zh) * 2020-01-17 2020-06-12 江苏艾佳家居用品有限公司 一种基于函数坐标空间的渲染优化方法
CN113205585A (zh) * 2021-03-25 2021-08-03 浙江大学 基于近似点光源的动态物体互反射效果实时绘制方法、装置、系统和存储介质
CN113205585B (zh) * 2021-03-25 2023-04-28 浙江大学 动态物体互反射效果绘制方法、装置、系统和存储介质

Also Published As

Publication number Publication date
CN103440684B (zh) 2016-06-22

Similar Documents

Publication Publication Date Title
CN103700143B (zh) 一种基于gpu多遍绘制的三维动态海洋模拟方法
CN103439743B (zh) 一种地震数据剖面图形绘制方法
CN102903146A (zh) 用于场景绘制的图形处理方法
CN104134236B (zh) 一种三维平面实体的布尔运算方法
CN104616345A (zh) 一种基于八叉树森林压缩的三维体素存取方法
CN103810756B (zh) 基于不规则区域的自适性的Loop细分曲面的绘制方法
CN106204701A (zh) 一种基于光探针插值动态计算间接反射高光的渲染方法
CN103426199B (zh) 一种三维几何场景的低噪声实时全局光照绘制方法
CN102831634B (zh) 一种高效精确的通用软阴影生成方法
CN103679802A (zh) 基于屏幕空间的sph流体表面实时绘制方法
CN103337093A (zh) 一种基于Unity3D着色器实现三维机房实时温场效果的方法
CN103645463B (zh) 合成孔径雷达成像数据三维显示的方法
CN101615300A (zh) 一种屏幕空间微结构表面对象环境光遮挡方法
CN103440684A (zh) 一种将球谐光照技术应用于面绘制的方法
CN104463937B (zh) 基于不规则物体的动画生成方法及装置
CN105160704A (zh) 一种基于空间三角网格与空间四边形共享数据的绘图方法
Shi et al. Filling n-sided regions with G 1 triangular Coons B-spline patches
CN100476880C (zh) 一种产生体积阴影的方法及系统
CN104599311A (zh) 基于gpu的三维医学图像混合可视化系统
CN104143204A (zh) 考虑拓扑结构的移动最小二乘二维角色变形方法
Lin et al. Fusion of disconnected mesh components with branching shapes
Liu et al. A Method of Touchable 3d Model Reconstruction based on Mixed Reality–A Case Study of Medical Training Applications
CN106652010A (zh) 一种基于环形区域的透明贴图方法
Wegen et al. FERMIUM: A Framework for Real-time Procedural Point Cloud Animation and Morphing.
Ronghuan et al. Research on Multi-resolution Isosurface Extraction Method for 3D Scalar Field

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160622