CN103440684B - 一种将球谐光照技术应用于面绘制的方法 - Google Patents
一种将球谐光照技术应用于面绘制的方法 Download PDFInfo
- Publication number
- CN103440684B CN103440684B CN201310396822.1A CN201310396822A CN103440684B CN 103440684 B CN103440684 B CN 103440684B CN 201310396822 A CN201310396822 A CN 201310396822A CN 103440684 B CN103440684 B CN 103440684B
- Authority
- CN
- China
- Prior art keywords
- texture
- point
- spherical harmonic
- triangular
- model
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 96
- 238000005070 sampling Methods 0.000 claims abstract description 73
- 238000005286 illumination Methods 0.000 claims abstract description 67
- 238000009877 rendering Methods 0.000 claims abstract description 24
- 238000004088 simulation Methods 0.000 claims abstract description 6
- 238000004364 calculation method Methods 0.000 claims description 20
- 238000000354 decomposition reaction Methods 0.000 claims description 13
- 230000000694 effects Effects 0.000 claims description 7
- 238000005516 engineering process Methods 0.000 claims description 7
- 238000002360 preparation method Methods 0.000 claims description 7
- 230000008520 organization Effects 0.000 claims description 6
- 239000012634 fragment Substances 0.000 claims description 5
- 238000012163 sequencing technique Methods 0.000 claims description 4
- 238000006243 chemical reaction Methods 0.000 claims description 3
- 239000000463 material Substances 0.000 claims description 3
- 239000002245 particle Substances 0.000 claims description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 1
Landscapes
- Image Generation (AREA)
Abstract
一种将球谐光照技术应用于面绘制的方法,其使用纹理回填的方法使球谐光照技术可以应用到面绘制中。为此,首先对面模型中的每个面片进行离散采样将其转换为点模型;然后通过球谐光照方法得到每个点的球谐系数组;根据每个面离散出来的点及其对应的球谐系数组,通过纹理回填的方法为每个面生成一组球谐系数纹理;最后使用面绘制的方法对面模型进行绘制,通过GPU渲染管线进行编程完成球谐光照模拟。本发明在不牺牲绘制效率的前提下显著提高绘制质量。同时,本发明能在一程度上提高绘制效率,又可以克服点绘制时由于点与点之间重叠或覆盖范围不够产生的各种走样问题。
Description
技术领域
本发明涉及一种将球谐光照技术应用于面绘制的方法。
背景技术
球谐函数是一种与傅立叶变换类似的信号处理工具,2002年,Kautz等将其应用到了图形学体绘制的光照模拟中,并得到了良好的效果与较高的绘制速度。此外,球谐函数在图形学中的应用还包括表面重构,识别等领域。
对球谐光照理论的研究与应用多集中在光照模型建模以及求解方面,Kautz等在能量传输模型的基础上建立了一个光照模型并使用球谐函数求解,以达到高效光照计算的目的;Alexander等对生物体中的光照进行模拟,并使用球谐函数高效求解;Zhong等人为了模拟场景中的动态阴影效果,在建立相应光照模型的基础上进行求解。
由于球谐光照所考虑的光照模型是基于点的能量传输公式(LightTransport),其在预计算过程中需要对单个点元进行采样计算处理,故上述研究者都是使用基于点模型的体绘制进行最后的图像渲染。然而,体绘制绘制的光栅化阶段常常需要解决走样,点元缩放以及GPU绘制支持等问题,在某种程度上影响了绘制效率。
相反,面绘制中并不需要考虑体绘制中存在的上述问题,但是却无法直接使用球谐光照技术。
发明内容
鉴于上述不足之处,本发明的目的在于提供一种将球谐光照技术应用于面绘制的方法,其使用纹理回填的方法使球谐光照技术可以应用到面绘制中。为此,首先对面模型中的每个面片进行离散采样将其转换为点模型;然后通过球谐光照方法得到每个点的球谐系数组;根据每个面离散出来的点及其对应的球谐系数组,通过纹理回填的方法为每个面生成一组球谐系数纹理;最后使用面绘制的方法对面模型进行绘制,通过GPU渲染管线进行编程完成球谐光照模拟。
该方法主要包括三个阶段:数据准备,纹理回填以及GPU编程绘制。
数据准备阶段主要完成面模型的每个三角面片的离散采样以及球谐光照预计算工作,完成这一阶段后,离散的模型数据使用链表表示。
纹理回填阶段根据每个面片的采样点对应的球谐系数生成相应面的系数纹理,该纹理是一张正方形的纹理,其中包含了与每个三角面片相同大小的纹理区域,存放球谐系数组。
GPU编程绘制阶段主要通过GPU编程读出每个片元对应的球谐系数组,并进行光照计算。由于该方法得到的球谐系数组通过对系数纹理进行最近点插值得到,其流程适用于面绘制。
具体为:
(1)数据准备:对面模型中的每个三角面片进行离散采样将其转换为点模型;然后通过球谐光照方法得到每个点的球谐系数组;
数据准备包括将面模型转换为点模型即面模型采样,三角面片排序与球谐光照预计算三个部分;具体为:
①面模型采样
生成采样点:
为了将面模型采样为一个点模型,需要对三角面片进行离散化处理,我们使用等距离采样的方法,将面模型中的每个三角面片进行采样处理;假设所需采样的三角面片三个顶点的坐标为,以及,则等距采样的基本思想是设置一条扫描线从三角形的一个底边开始,通过在扫描线上每次移动相同距离采样数据,然后将扫描线上移进行下轮扫描;
为了设置扫描线,必需要得到扫描线的两个端点,由于需要对三角面片内部进行采样,不能直接对为起始扫描线。为此,我们使用如下方法进行扫描线的设置与采样:
a)以点为起点,为方向向点移动个固定距离,得到点:
(1-1)
b)以同样的方法,以点为起点,为方向向点移动个固定距离,得到点;
c)将作为扫描线进行等距采样,采样方法与之前类似,即以点为起点,为方向向点移动个固定距离,得到采样点,重复这一过程直到到达;
d)重新进行步骤a),b);如果扫描线到达三角形的顶点,则结束,保存所有采样点;否则,进行c)。
数据结构的组织:
将三角形面片的三个顶点与采样点在同一链表中进行存储;每个链表结点的数据结构包括采样点的位置,球谐系数组,纹理坐标属性,对于存放顶点的结点,其对应的属性仅为顶点的空间坐标,其它属性值为空,为区别顶点与采样点,在数据结构中加入一个bool值来区分顶点与采样点:
//采样点与顶点共同使用的数据结构
Structsample
{
Position;//采样点&顶点的三维空间坐标
Coef;//采样点的球谐系数组,若为顶点该项为空
BoolisVertex;//判断是否为三角形顶点的bool值
}
该数据结构构成了模型链表中的一个结点,对于一个面片,其对应链表段中的结点组织按照三角形三个顶点以及面片采样点的顺序进行链表存储:顶点1→顶点2→顶点3→采样点1→采样点2……采样点N。
模型采样完成后对采样点进行球谐光照预计算处理,其中顶点将不参与预计算,为此,只需要在预计算时根据isVertex布尔值进行判断即可,isVertex是数据结构sample中的一个分量,当其为true的时候,表示其为顶点,将不参与预计算;球谐光照预计算完成后,链表中每个采样点都对应了一组球谐系数,为保证一定的精度,取16个球谐系数。
②三角面片排序
在对三角面片采样完成后,对其面积进行排序;首先根据三角面片的三个顶点坐标计算其面积,
(1-2)
其中,是顶点组成的线段的距离,是顶点到线段的距离。对所有三角形面片的面积进行由小到大的排序,得到一个按面积大小递增的面模型离散化链表;
③球谐光照预计算
对整个点模型进行球谐光照处理,完成该步后每个点元得到一组球谐系数;
球谐光照中使用的光照模型为模拟漫反射积分公式:
(1-3)
其中是一个表征粒子属性的参数,该模型使用积分式中的表达式来模拟方向的直接入射光对点的影响,使用可见性函数标识方向的遮挡信息,模型的积分域是法线向量所处的半球区域,整个光照模型所表征的物理过程是在当前考虑点的法线向量所处的半球区域,接收从各个方向反射过来的光能后,通过漫反射向视线方向出射光强;
为了计算该模型,需要对模型中积分式的两个函数与进行球谐分解,对一个函数使用球谐分解的方法如式1-4所示:
(1-4)
其中叫做球谐基函数,其形式如式1-5所示,可见球谐其函数是一组函数集合,其函数的阶数由决定,是待分解的函数,球谐分解的实质是提取原函数在球谐空间中不同的信号成分,每一种成分对应了一个阶的球谐基函数,分解后的球谐系数就是该阶球谐基函数的振幅,通过使用球谐系数对球谐基函数进行调制解调便可还原原来的信号;
(1-5)
球谐光照的预计算过程就是对式2-4中的两个函数与进行球谐分解的过程,模型中的每个点都要完成一次该过程。
(2)纹理回填:根据每个面离散出来的点及其对应的球谐系数组,通过纹理回填的方法为每个面生成一组球谐系数纹理;所述纹理回填过程包含三个步骤:即生成纹理空间,定位纹素,计算纹理坐标,具体为:
①生成纹理空间
所有三角面片的系数纹理将被整合到一张正方形的纹理中,以便于面绘制的纹理读取,为此,在生成每个三角面片的系数纹理时,都需要在正方形纹理中划分出一个与三角面片形状相同的区域,用以存放该面片的对应的纹理;
计算三角形三条边中最长的一条边,设其长为,对应的两个顶点为及,则第三个顶点为,以及以该边为底边对应的三角形的高,求解边长可使用公式2-1;
(2-1)
为求得点到边的距离,假设线段可表示为:
(2-2)
由方程解得:
(2-3)
将其代入式2-2得到点在线段上的投影点;根据可以得到:
(2-4)
以及划分线段的比例:
(2-5)
以该底边与高为矩形的长和宽,在正方形纹理中分配一个相同大小的矩形空间,该矩形空间紧邻前一个三角面片的矩形空间,其左上角与前一个三角面片的矩形空间的右上角对齐,在正方形纹理一行排满后,取该行三角形高的值最大值作为该行的行高,并从其后开始下一行的三角面片的分配。
②定位纹素
在面片对应的三角系数纹理区域划分出来后,将相应三角区域的系数存入该区域即可得到三角成片的一个系数纹理,完成这一步骤需要进行纹理回填操作,其主要操作是定位一个链表结点在三角纹理中相应纹素的位置;
根据结点包含的点的位置信息,以及该采样点所属三角形的三个顶点在正方形纹理中的坐标,,定位纹理的方法如下:
a)在前一步生成纹理空间过程中得到三角形的三条边中最长的一条边,如,以及以该边为底边对应的三角形的高;
b)根据式2-4计算点 到边的距离,根据式2-5计算点 到边的投影点对的分割比例;
c)定位纹素,得到该采样点在正方形纹理中对应的纹素的坐标:
(2-6)。
③纹理坐标的计算
在所有三角面片的系数纹理回填完成后,需要对三角面片的系数纹理坐标进行更新;由于三角面片的纹理坐标只需要计算三角形三个顶点的纹理坐标,因此,在进行完正方形大纹理的三角面片纹理分配后,计算每个三角面片对应的纹理在正方形纹理中的三个顶点的纹理坐标,其计算过程如下:
假设正方形纹理的长,宽分别为,三角面片在正方形纹理中顶点坐标为,则此顶点对应的纹理坐标可通过如下公式计算:
(2-7)
通过以上三个步骤完成纹理回填后,在原来的面模型上额外增加了存储球谐系数的纹理,每个面片在该纹理上都对应了一块唯一的纹理空间,通过纹理坐标标识。
(3)GPU编程绘制:使用面绘制的方法对面模型进行绘制,通过GPU渲染管线进行编程完成球谐光照模拟。具体为:
在绘制阶段,按照面绘制的流程,将面模型的每个三角面片的三个顶点以及颜色纹理,系数纹理及其相应纹理坐标传入GPU,通过对GPU渲染管线进行编程读取球谐系数坐标,并进行光照计算,为实现这一目的,只需对fragmentshader进行编程即可,其伪代码如下:
使用最近点插值得到当前片元的球谐系数组
使用线性插值得到当前片元的颜色值
使用从CPU中传入的旋转后的光源函数的球谐系数组(即将旋转后的光源函数的球谐系数组从CPU传入shader)
计算最终颜色值color。
本发明在不牺牲绘制效率的前提下显著提高绘制质量,由于基于点绘制的球谐光照技术可以以较小的计算代价实现诸如动态阴影等重要的光照效果,从而显著提高绘制质量。同时,本发明方法由于在最后绘制时使用纹理,面绘制等绘制方法,GPU对其有很好的硬件支持,因此在一程度上提高的绘制效率,同时又可以克服点绘制时由于点与点之间重叠或覆盖范围不够产生的各种走样问题。
附图说明
图1为本发明的流程图。
图2为本发明中面模型采样模型的离散化处理示意图。
图3为三角面片的等距采样示意图。
图4为三角面片的系数纹理的管理示意图。
图5为三角面片的系数纹理空间分配示意图。
具体实施方式
下面我们将结合具体实施例对本发明作进一步的说明。
如图1所示,本发明的目的在于提供一种将球谐光照技术应用于面绘制的方法,其采用纹理回填的方法使球谐光照技术可以应用到面绘制中。为此,首先对面模型中的每个面片进行离散采样将其转换为点模型;然后通过球谐光照方法得到每个点的球谐系数组;根据每个面离散出来的点及其对应的球谐系数组,通过纹理回填的方法为每个面生成一组球谐系数纹理;最后使用面绘制的方法对面模型进行绘制,通过GPU渲染管线进行编程完成球谐光照模拟。
该方法主要包括三个阶段:数据准备,纹理回填以及GPU编程绘制。
数据准备阶段主要完成面模型的每个三角面片的离散采样以及球谐光照预计算工作,完成这一阶段后,离散的模型数据使用链表表示。
纹理回填阶段根据每个面片的采样点对应的球谐系数生成相应面的系数纹理,该纹理是一张正方形的纹理,其中包含了与每个三角面片相同大小的纹理区域,存放球谐系数组。
GPU编程绘制阶段主要通过GPU编程读出每个片元对应的球谐系数组,并进行光照计算。由于该方法得到的球谐系数组通过对系数纹理进行最近点插值得到,其流程适用于面绘制。
具体为:
1.数据准备:
数据准备包括将面模型转换为点模型(面模型采样),三角面片排序与球谐光照预计算三个部分。
1)面模型采样
为了将面模型采样为一个点模型,需要对三角面片进行离散化处理(如图2所示),我们使用等距离采样的方法,将面模型中的每个三角面片进行采样处理。
生成采样点:
为了保证纹理回填阶段的生成的纹理的完整性,我们使用等距离采样的方法三角面片进行离散化采样。如图3所示,假设所需采样的三角面片三个顶点的坐标为,以及,则等距采样的基本思想是设置一条扫描线从三角形的一个底边开始,通过在扫描线上每次移动相同距离采样数据,然后将扫描线上移进行下轮扫描。
为了设置扫描线,必需要得到扫描线的两个端点,由于需要对三角面片内部进行采样,不能直接对为起始扫描线。为此,我们使用如下方法进行扫描线的设置与采样:
a)以点为起点,为方向向点移动个固定距离,得到点:
(1-1)
b)以同样的方法,以点为起点,为方向向点移动个固定距离,得到点;
c)将作为扫描线进行等距采样,采样方法与之前类似,即以以点为起点,为方向向点移动个固定距离,得到采样点,重复这一过程直到到达;
d)重新进行步骤a),b)。如果扫描线到达三角形的顶点,则结束,保存所有采样点;否则,进行c)。
数据结构的组织:
为了方便后面的纹理回填,我们将三角形面片的三个顶点与采样点在同一链表中进行存储。每个链表结点的数据结构包括采样点的各种属性,如位置,球谐系数组,纹理坐标等,对于存放顶点的结点,其对应的属性仅为顶点的空间坐标,其它属性值为空。为区别顶点与采样点,在数据结构中加入一个bool值来区分顶点与采样点:
//采样点与顶点共同使用的数据结构
Structsample
{
Position;//采样点&顶点的三维空间坐标
Coef;//采样点的球谐系数组,若为顶点该项为空
BoolisVertex;//判断是否为三角形顶点的bool值
}
该数据结构构成了模型链表中的一个结点,对于一个面片,其对应链表段中的结点组织按照三角形三个顶点以及面片采样点的顺序进行链表存储,如下所示:
顶点1→顶点2→顶点3→采样点1…………采样点N
模型采样完成后对采样点进行球谐光照预计算处理,其中顶点将不参与预计算,为此,只需要在预计算时根据isVertex布尔值进行判断即可,isVertex是数据结构sample中的一个分量,当其为true的时候,表示其为顶点,将不参与预计算。球谐光照预计算完成后,链表中每个采样点都对应了一组球谐系数,为保证一定的精度,通常取16个球谐系数。
2)三角面片排序
为了方便纹理回填过程中纹理空间的分配管理,在对三角面片采样完成后,对其面积进行排序。首先根据三角面片的三个顶点坐标计算其面积,
(1-2)
其中,是顶点组成的线段的距离,是顶点到线段的距离。对所有三角形面片的面积进行由小到大的排序,得到一个按面积大小递增的面模型离散化链表。
3)球谐光照预计算
对整个点模型进行球谐光照处理,完成该步后每个点元得到一组球谐系数。
采用球谐光照的目的是为了高效求解光照模型,以较高的效率得到较好的绘制效果。球谐光照中使用的光照模型一般为模拟漫反射的积分公式:
(1-3)
其中是一个表征粒子属性的参数,该模型使用积分式中的表达式来模拟方向的直接入射光对点的影响,使用可见性函数标识方向的遮挡信息,模型的积分域是法线向量所处的半球区域。整个光照模型所表征的物理过程是在当前考虑点的法线向量所处的半球区域,接收从各个方向反射过来的光能后,通过漫反射向视线方向出射光强。
为了计算该模型,需要对模型中积分式的两个函数与进行球谐分解,对一个函数使用球谐分解的方法如式1-4所示:
(1-4)
其中叫做球谐基函数,其形式如式1-5所示,可见球谐其函数是一组函数集合,其函数的阶数由决定,是待分解的函数。球谐分解的实质是提取原函数在球谐空间中不同的信号成分,每一种成分对应了一个阶的球谐基函数,分解后的球谐系数就是该阶球谐基函数的振幅。通过使用球谐系数对球谐基函数进行调制解调便可还原原来的信号。
(1-5)
球谐光照的预计算过程就是对式1-4中的两个函数与进行球谐分解的过程,模型中的每个点都要完成一次该过程,因此其花费时间较长。
2.纹理回填
所谓纹理回填,就是根据每个面片采样点经过球谐光照预计算后得到的球谐系数组,制作与面片大小相符合的系数纹理。纹理回填的过程包含三个步骤:即生成纹理空间,定位纹素,计算纹理坐标。
1)生成纹理空间
所有三角面片的系数纹理将被整合到一张正方形的纹理中,以便于面绘制的纹理读取。为此,在生成每个三角面片的系数纹理时,都需要在正方形纹理中划分出一个与三角面片形状相同的区域,用以存放该面片的对应的纹理,如图4所示。
为了将三角面片对应的纹理放入正方形纹理中合适的位置,需要根据三角形的三个顶点在正方形纹理中分配相应的三角形空间。由于在采样过程中完成了对三角面片的排序,我们可以在正方形纹理中顺序分配与三角面片相同大小的纹理区域而不用考虑空间安排。为此,我们采用如下策略进行三角面片的纹理分配:
a)计算三角形三条边中最长的一条边,设其长为,对应的两个顶点为及,则第三个顶点为,以及以该边为底边对应的三角形的高。求解边长可使用公式2-1。
(2-1)
为求得点到边的距离,假设线段可表示为:
(2-2)
由方程解得:
(2-3)
将其代入式2-2得到点在线段上的投影点。根据可以得到:
(2-4)
以及划分线段的比例:
(2-5)
该比例的计算方法将在纹理回填时使用,用于对纹素的定位。
b)以该底边与高为矩形的长和宽,在正方形纹理中分配一个相同大小的矩形空间。该矩形空间紧邻前一个三角面片的矩形空间,其左上角与前一个三角面片的矩形空间的右上角对齐,其空间安排如图5所示。在正方形纹理一行排满后,取该行三角形高的值最大值作为该行的行高,并从其后开始下一行的三角面片的分配。
2)定位纹素(纹理回填)
在面片对应的三角系数纹理区域划分出来后,将相应三角区域的系数存入该区域即可得到三角成片的一个系数纹理,完成这一步骤需要进行纹理回填操作,其主要操作是定位一个链表结点在三角纹理中相应纹素的位置。
根据结点包含的点的位置信息,以及该采样点所属三角形的三个顶点在正方形纹理中的坐标,,定位纹理的方法如下:
a)在前一步生成纹理空间过程中得到三角形的三条边中最长的一条边,如,以及以该边为底边对应的三角形的高。
b)根据式2-4计算点 到边的距离,根据式2-5计算点 到边的投影点对的分割比例。
c)定位纹素,得到该采样点在正方形纹理中对应的纹素的坐标:
(2-6)。
3)纹理坐标的计算
在所有三角面片的系数纹理回填完成后,需要对三角面片的系数纹理坐标进行更新。由于三角面片的纹理坐标只需要计算三角形三个顶点的纹理坐标,因此,在进行完正方形大纹理的三角面片纹理分配后,可以计算每个三角面片对应的纹理在正方形纹理中的三个顶点的纹理坐标。其计算过程如下:
假设正方形纹理的长,宽分别为,三角面片在正方形纹理中顶点坐标为,则此顶点对应的纹理坐标可通过如下公式计算:
(2-7)
通过以上三个步骤完成纹理回填后,在原来的面模型上额外增加了存储球谐系数的纹理,每个面片在该纹理上都对应了一块唯一的纹理空间,通过纹理坐标标识。
3.GPU编程绘制
绘制阶段,按照面绘制的流程,将面模型的每个三角面片的三个顶点以及颜色纹理,系数纹理及其相应纹理坐标传入GPU,通过对GPU渲染管线进行编程读取球谐系数坐标,并进行光照计算。为实现这一目的,只需对fragmentshader进行编程即可,其伪代码如下:
使用最近点插值得到当前片元的球谐系数组
使用线性插值得到当前片元的颜色值
使用从CPU中传入的旋转后的光源函数的球谐系数组
计算最终颜色值color
球谐光照技术以球谐函数理论为基础,对图形学中的光照效果进行高效模拟,使得绘制结果在达到良好的光影效果的同时,保持良好的绘制效率。
Claims (3)
1.一种将球谐光照技术应用于面绘制的方法,其特征在于:该方法包括以下步骤:
(1)数据准备:对面模型中的每个三角面片进行离散采样将其转换为点模型;然后通过球谐光照方法得到每个点的球谐系数组;
所述数据准备包括将面模型转换为点模型即面模型采样,三角面片排序与球谐光照预计算三个部分;具体为:
1)面模型采样
①生成采样点:
为了将面模型采样为一个点模型,需要对三角面片进行离散化处理,我们使用等距离采样的方法,将面模型中的每个三角面片进行采样处理;假设所需采样的三角面片三个顶点的坐标为a(xa,ya,za),b(xb,yb,zb)以及c(xc,yc,zc),则等距采样的基本思想是设置一条扫描线从三角形的一个底边开始,通过在扫描线上每次移动相同距离采样数据,然后将扫描线上移进行下轮扫描;
为了设置扫描线,必需要得到扫描线的两个端点,由于需要对三角面片内部进行采样,不能直接对ab为起始扫描线,为此,我们使用如下方法进行扫描线的设置与采样:
a)以点a为起点,为方向向点c移动α个固定距离,得到点a0:
b)以同样的方法,以点b为起点,为方向向点c移动α个固定距离,得到点b0;
c)将a0b0作为扫描线进行等距采样,采样方法与之前类似,即以点a0为起点,为方向向点b0移动α个固定距离,得到采样点s,重复这一过程直到s到达b0;
d)重新进行步骤a),b);如果扫描线到达三角形的顶点c,则结束,保存所有采样点;否则,进行c);
②数据结构的组织:
将三角形面片的三个顶点与采样点在同一链表中进行存储;每个链表结点的数据结构包括采样点的位置,球谐系数组,纹理坐标属性,对于存放顶点的结点,其对应的属性仅为顶点的空间坐标,其它属性值为空,为区别顶点与采样点,在数据结构中加入一个bool值来区分顶点与采样点,该数据结构构成了模型链表中的一个结点,对于一个面片,其对应链表段中的结点组织按照三角形三个顶点以及面片采样点的顺序进行链表存储:顶点1→顶点2→顶点3→采样点1→采样点2……采样点N;
2)三角面片排序
在对三角面片采样完成后,对其面积进行排序;首先根据三角面片的三个顶点坐标Va,Vb,Vc计算其面积,
其中,VaVb是顶点Va,Vb组成的线段的距离,h是顶点Vc到线段VaVb的距离,对所有三角形面片的面积进行由小到大的排序,得到一个按面积大小递增的面模型离散化链表;
3)球谐光照预计算
对整个点模型进行球谐光照处理,完成该步后每个点元得到一组球谐系数;
球谐光照中使用的光照模型为模拟漫反射积分公式:
其中K(x)是一个表征粒子属性的参数,该模型使用积分式中的表达式
来模拟ω方向的直接入射光对点x的影响,使用可见性函数V(x,xω)标识ω方向的遮挡信息,模型的积分域是法线向量所处的半球区域,整个光照模型所表征的物理过程是在当前考虑点的法线向量所处的半球区域,接收从各个方向反射过来的光能后,通过漫反射向视线方向出射光强;
为了计算该模型,需要对模型中积分式的两个函数LI(x,-ω)与进行球谐分解,对一个函数使用球谐分解的方法如式1-4所示:
其中Yl m(s)叫做球谐基函数,其形式如式1-5所示,可见球谐其函数是一组函数集合,其函数的阶数由l,m决定,f(s)是待分解的函数,球谐分解的实质是提取原函数在球谐空间中不同的信号成分,每一种成分对应了一个阶的球谐基函数,分解后的球谐系数就是该阶球谐基函数的振幅,通过使用球谐系数对球谐基函数进行调制解调便可还原原来的信号;
球谐光照的预计算过程就是对式1-4中的两个函数LI(x,-ω)与进行球谐分解的过程,模型中的每个点都要完成一次该过程;
(2)纹理回填:根据每个面离散出来的点及其对应的球谐系数组,通过纹理回填的方法为每个面生成一组球谐系数纹理;
(3)GPU编程绘制:使用面绘制的方法对面模型进行绘制,通过GPU渲染管线进行编程完成球谐光照模拟。
2.根据权利要求1所述的将球谐光照技术应用于面绘制的方法,其特征在于:所述纹理回填过程包含三个步骤:即生成纹理空间,定位纹素,计算纹理坐标,具体为:
①生成纹理空间
所有三角面片的系数纹理将被整合到一张正方形的纹理中,以便于面绘制的纹理读取,为此,在生成每个三角面片的系数纹理时,都需要在正方形纹理中划分出一个与三角面片形状相同的区域,用以存放该面片的对应的纹理;
计算三角形三条边中最长的一条边,设其长为lab,对应的两个顶点为a(xa,ya,za)及b(xb,yb,zb),则第三个顶点为c(xc,yc,zc),以及以该边为底边对应的三角形的高h,求解ab边长可使用公式2-1;
为求得点c(xc,yc,zc)到边ab的距离h,假设线段ab可表示为:
(x,y,z)=t(xa-xb,ya-yb,za-zb)(0≤t≤1)(2-2)
由方程t(xa-xb,ya-yb,za-zb)·(xc,yc,zc)=0解得:
将其代入式2-2得到点c在线段ab上的投影点c0(x0,y0,z0);根据c0可以得到h:
以及c0划分线段ab的比例:
以该底边与高为矩形的长和宽,在正方形纹理中分配一个相同大小的矩形空间,该矩形空间紧邻前一个三角面片的矩形空间,其左上角与前一个三角面片的矩形空间的右上角对齐,在正方形纹理一行排满后,取该行三角形高的值最大值hmax作为该行的行高,并从其后开始下一行的三角面片的分配;
②定位纹素
在面片对应的三角系数纹理区域划分出来后,将相应三角区域的系数存入该区域即可得到三角成片的一个系数纹理,完成这一步骤需要进行纹理回填操作,其主要操作是定位一个链表结点在三角纹理中相应纹素的位置;
根据结点P包含的点的位置信息(px,py,pz),以及该采样点所属三角形的三个顶点Va,Vb,Vc在正方形纹理中的坐标(xa,ya),(xb,yb),(xc,yc)定位纹理的方法如下:
a)在前一步生成纹理空间过程中得到三角形的三条边中最长的一条边,如VaVb,以及以该边为底边对应的三角形的高h;
b)根据式2-4计算点P(px,py,pz)到边VaVb的距离h′,根据式2-5计算点P(px,py,pz)到边VaVb的投影点P0对VaVb的分割比例δ;
c)定位纹素,得到该采样点在正方形纹理中对应的纹素的坐标(texx,texy):
texy=yc+(h-h′)(2-6)
③纹理坐标的计算
在所有三角面片的系数纹理回填完成后,需要对三角面片的系数纹理坐标进行更新;由于三角面片的纹理坐标只需要计算三角形三个顶点的纹理坐标,因此,在进行完正方形大纹理的三角面片纹理分配后,计算每个三角面片对应的纹理在正方形纹理中的三个顶点的纹理坐标,其计算过程如下:
假设正方形纹理的长,宽分别为l,w,三角面片在正方形纹理中顶点坐标为(x,y),则此顶点对应的纹理坐标(tx,ty)可通过如下公式计算:
tx=x/l
(2-7)
ty=y/h
通过以上三个步骤完成纹理回填后,在原来的面模型上额外增加了存储球谐系数的纹理,每个面片在该纹理上都对应了一块唯一的纹理空间,通过纹理坐标标识。
3.根据权利要求1所述的将球谐光照技术应用于面绘制的方法,其特征在于:所述GPU编程绘制方法为:在绘制阶段,按照面绘制的流程,将面模型的每个三角面片的三个顶点以及颜色纹理,系数纹理及其相应纹理坐标传入GPU,通过对GPU渲染管线进行编程读取球谐系数坐标,并进行光照计算,为实现这一目的,需对fragmentshader进行编程,其伪代码如下:
使用最近点插值得到当前片元的球谐系数组
使用线性插值得到当前片元的颜色值c0
使用从CPU中传入的旋转后的光源函数的球谐系数组
计算最终颜色值
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 CN103440684A (zh) | 2013-12-11 |
CN103440684B true 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) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104484896B (zh) * | 2014-10-30 | 2018-01-16 | 无锡梵天信息技术股份有限公司 | 一种基于环境贴图来模拟人物皮肤次表面散射的物理方法 |
CN111275781B (zh) * | 2020-01-17 | 2022-08-12 | 江苏艾佳家居用品有限公司 | 一种基于函数坐标空间的渲染优化方法 |
CN113205585B (zh) * | 2021-03-25 | 2023-04-28 | 浙江大学 | 动态物体互反射效果绘制方法、装置、系统和存储介质 |
Citations (1)
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 |
-
2013
- 2013-09-04 CN CN201310396822.1A patent/CN103440684B/zh not_active Expired - Fee Related
Patent Citations (1)
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)
Title |
---|
虚拟战场中复杂场景建模与绘制若干关键技术研究;邱航;《中国博士学位论文全文数据库社会科学Ⅰ辑》;20120215(第2期);93-108 * |
Also Published As
Publication number | Publication date |
---|---|
CN103440684A (zh) | 2013-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Adamson et al. | Ray tracing point set surfaces | |
CN106570929B (zh) | 一种动态体积云的构建与绘制方法 | |
Gumhold | Splatting illuminated ellipsoids with depth correction. | |
JP3344597B2 (ja) | グラフィック画像をテッセレーション化する方法および装置 | |
CN104361632B (zh) | 一种基于Hermite径向基函数的三角网格补洞方法 | |
Kenwright | Free-form tetrahedron deformation | |
Nießner et al. | Real‐time rendering techniques with hardware tessellation | |
Poulin et al. | Sketching shadows and highlights to position lights | |
CN101763649B (zh) | 一种增强模型轮廓的表面点绘制方法 | |
CN102855400A (zh) | 一种基于投影网格的海洋表面建模及实时光照方法 | |
Lloyd et al. | Warping and Partitioning for Low Error Shadow Maps. | |
Merlo et al. | 3D model visualization enhancements in real-time game engines | |
CN103679802A (zh) | 基于屏幕空间的sph流体表面实时绘制方法 | |
CN103440684B (zh) | 一种将球谐光照技术应用于面绘制的方法 | |
CN114359226A (zh) | 基于分层叠加和区域增长的三维模型组可视面积提取方法 | |
CN110033507A (zh) | 模型贴图的内描线绘制方法、装置、设备及可读存储介质 | |
CN104463937B (zh) | 基于不规则物体的动画生成方法及装置 | |
Cipriani et al. | 3D models mapping optimization through an integrated parameterization approach: cases studies from Ravenna | |
Shi et al. | Filling n-sided regions with G 1 triangular Coons B-spline patches | |
CN117274527A (zh) | 一种发电机设备三维可视化模型数据集构建方法 | |
CN108038900A (zh) | 倾斜摄影模型单体化方法、系统及计算机可读存储介质 | |
Qin et al. | Research and application of Boolean operation for triangular mesh model of underground space engineering—Boolean operation for triangular mesh model | |
US20230186565A1 (en) | Apparatus and method for generating lightweight three-dimensional model based on image | |
CN103150711A (zh) | 一种基于OpenCL的图像修复方法 | |
SHARAH et al. | Streamlining the Modelling to Virtual Reality Process |
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 |
Granted publication date: 20160622 |
|
CF01 | Termination of patent right due to non-payment of annual fee |