专利名称:一种双向纹理函数的压缩和合成方法
技术领域:
本发明一种纹理函数的压縮和合成方法,特别是一种双向纹理函数的压缩和合成方法, 主要用于真实感虚拟环境的构造和绘制,属于计算机虚拟现实技术领域, 背景技术物体表面的反射属性一直是当今计算机图形学和计算机视觉的研究热点。物体的反射属 性主要集中在光线与物体表面的相互作用上。光线与物体的相互作用由入射光的位置、方向、 波长,光线在物体内部的传输时间,以及出射光的位置、方向、波长等因素决定。因此可以 用一个12维的函数来描述。在实际应用中,对于这么一个高维函数的获取是不现实的,为了 简化该函数,假设传播时间和波长也是保持不变的,就得到了一个8维函数双向表面散射反 射分布函数BSSRDF(bidirectional surface scattering distribution function)。 BSSRDF函数描述了 任何入射和出射方向上的光线在表面上任意点之间的传播过程。近年来人们为了适合各种需 求,再加上受到数据获取设备及环境的限制,对BSSRDF进行了进一步的化简,固定了某些 参数,提出了各种反射函数,来适应不同的应用领域。Dana等引入双向纹理函数(Bidirectional Texture Function, BTF)描述物体表面在不同光照 和视点方向下的反射现象。BTF由BSSRDF忽略了表面散射系数得到,是一个六维函数, 可以表示为TX",v,其中(",v)表示像素位置,(《,《)、分别表示光照、视线方向。BTF可以用图像序列进行表示,每幅图像都具有不同的光照方向和观察方向。对这些 图像进行BTF建模能够很好地重建出材质表面自遮挡、自阴影、相互反射等光照效果。BTF 的采集需要在光照和视线方向上进行密集采样,因此如何能够快速的采集BTF显得尤为重要。 由于需要大量的图像才能完整地表达一个BTF, 一般需要几千幅图像和几百MB甚至GB 级的存储空间,因此需要对采集得到的样本BTF数据进行压縮。同时由于采集设备和数据 量的限制,被处理后的BTF样本纹理一般为平面小样本,为了扩大BTF的应用范围,需 要研究BTF的合成算法,将较小平面样本BTF应用到任意三维物体表面。 目前的合成方法主要有在种第一禾中文献1- J. Stem. Aperiodic Texture Mapping. Technical Report R046, European Research Consortium for Informatics and Math., 1997,使用把带颜色的纹理块应用到纹理创建, 他将带颜色的纹理块用作纹理类型的载体,但他并没有实现纹理的合成,即从小纹理构造任 意大纹理。第二种文献2- EFROS, A., AND FREEMAN, W. Image quilting for texture synthesis. In Proceedings of SIGGRAPH 2001, 341-346从原始纹理中一个一个地随机提取纹理块,每一个 都需要计算与之前纹理块的边缘误差,误差足够小的用来拼接在一起来合成大纹理,但是这 种方法不够精确而且耗时很长。第三禾中文献3- MR Cohen, J. Shade, S. Hiller, and O. Deussen. Wang Tiles for Image and Texture Generation [J]. ACM Trans. Graphics, 2003, 22(3): 287-294提出了一种基于带颜色纹理 块的二维纹理合成方法,但他并没有考虑多维纹理的合成一直性问题。上述各种方法中,文献1存在无法进行纹理合成的问题,文献2存在合成过程中的速度 和精确度不够的问题,文献3没有考虑多维纹理的合成一致性问题。 发明内容本发明的技术解决问题克服现有技术的不足,提供一种双向纹理函数的压縮和合成方 法,该方法可以压缩大规模的双向纹理函数数据并根据已有纹理图像合成新的多维纹理图像, 合成过程快速、效果精确,并解决了多维纹理合成的一致性问题,扩大纹多维理来源的途径, 满足虚拟环境中真实感绘制的需求。本发明的技术解决方案 一种双向纹理函数的压缩和合成方法,本发明采用主元分析和 带颜色的方形纹理块实现双向纹理函数数据的压縮和合成,具体做法是首先,对双向纹理 函数数据根据视点不同分组进行采用主元分析算法压縮;然后,从压縮后的双向纹理函数数 据中使用一种误差计算方法随即提取数据块,每四个数据块构造成一个带颜色的方形纹理块, 使用颜色的方形纹理块进行多维纹理合成;最后,将压縮并合成后双向纹理函数数据绘制到 三维模型表面上。本发明与现有技术相比的有益效果是-(1) 本发明根据已有的压缩双向纹理函数纹理能够生成新的双向纹理函数纹理,合成过 程采用带颜色的纹理块,只需要考虑纹理块间的颜色匹配问题,相对与其它的合成方法,具 有速度快,效果好的特点;(2) 以前的纹理合成方法大多是基于二维纹理样图进行的。本发明针对多维纹理合成, 构造方形纹理块用作多维纹理合成的基础,并使用一种误差计算方法保证合成多维纹理间的 一致性。
图l为本发明方法的流程图;图2为本发明采用的带颜色的方形纹理块构造方法图3为本发明的实施效果图;其中图(a)为小尺寸的双向纹理函数数据的毛衣样本,图 (b)和图(c)为合成后的大尺寸双向纹理函数数据在兔子模型上的表现及模型转动后的不同光照效果。
具体实施方式
如果把双向纹理函数纹理看作大量二维纹理的集合并单独对每一个纹理进行二维纹理合 成,各纹理中像素点由于光照和视线的不同得到的颜色值不同,无法得到统一的合成效果。 本发明使用把压縮后的双向纹理函数纹理作为一个统一多维纹理,对其构造方形纹理块做多 维纹理合成。本发明的主要流程图如图1所示,具体步骤如下 本发明的主要流程图如图l所示,具体步骤如下(1) 用主元分析方法实现纹理压縮第一步,选取视线方向7',对其所有光源方向的数据构造矩阵 ;;第二步,求矩阵^每一行均值5并与其相减值得到校正矩阵7;;第三步,计算7;的特征值^ Jn和对应的特征向量五,..式(n为光源方向个数);第四步,从大到小选取c个特征值并选取它们所对应的特征向量,使用这C个特征向量 做为原数据的压縮数据,压縮比例为c/n;第五步,换另外一个视点方向重复第一步直到所有视点方向的数据都完成压縮。 本方法的思想是保存原数据较为重要的特征信息,而把不重要的信息丢弃,达到压縮的目的。经验证,本压縮方法能够将数据大小压縮为原来的1/16,而产生的误差仅仅为2.2%。(2) 构造带颜色方形纹理块的方法实现多维纹理合成如图2所示,第一步随机选择四个正方形双向纹理函数数据块,计算两两间重叠区域的 颜色误差值与阈值进行比较,颜色误差和阈值的计算方法见下式。d为颜色误差计算方法, dmax为阈值计算方法。公式中N为重叠区域的像素个数,e为主元分析压縮算法中选取的主元个数,Pm为 PCA算法在光照方向索引m指向的系数,V为视线方向的个数,av为视线方向索引v指 向的权重值,和为重叠区域中第k个像素在两块中的颜色值,s为误差极限系数。
如果误差d大于阈值dmax则重新选择,直到满足误差小于阈值为止。m^二步,将四个数据块旋转45°,给不同的块赋予不同的颜色,相同的赋予同一颜色第三步,将这四个数据块两两拼接在一起并计算一条剪切路径。相邻块间的剪切路径通 过计算重叠区域内像素点之间颜色值误差的最小值或得。第四步,沿剪切路径端点剪切得到的正方形即为带颜色的方形纹理块,因为原来的双向 纹理函数数据块是被赋予颜色的,因此方形纹理块的边缘带有了颜色。第五步,使用这些带有颜色的方形纹理块进行多维纹理合成。由于相同颜色的方形纹理 块边缘对应了双向纹理函数数据中相同的一部分,因此在合成的过程中保证具有相同颜色边 缘拼接在一起即可达到高质量的合成效果。拼接方法首先选取一个带颜色的方形纹理块放在左上角,其次选择另一个方形纹理块 摆放在它的右边,选取的规则是后放的纹理块的左边颜色和之前己经放好的纹理块的右边缘 颜色相同。这样依次进行摆放,直到摆满所需要的大小,这样就完成了多维纹理的合成。(3)双向纹理函数的绘制第一步,构造一个虚拟半球,将所有采样光照和视点方向分布在这个半球上。 第二步,使用Delaunay Triangulation算法对这个半球上的采样点进行三角化分割。 第三步,三角化后,按照间隔1。计算所有这个半球上所有角度所在的投影三角形, 一共为360*90组,并计算其到三角形三个顶点的权重值。权重值算法见如下公式。f,/7为分别此点的仰角和平面角,(xi,yi) (i=l,2,3)表示三角形的一个顶点坐标。<formula>formula see original document page 7</formula>第四步,使用显卡单元进行实时绘制。利用显卡单元对纹理运算的支持,把合成后的双向纹理函数数据分解为c(c为压缩步骤时所选取)个二维纹理。在显卡单元的顶点着色器中计算每一个顶点的法向量、切向量、副法线所构成的局部坐标系,并将光照、视线方向投影 到这个局部坐标系中。第五步,在显卡单元的片元着色器中查找投影后的光照、视线方向所在的投影三角形和 其权重值(由第三步计算获得),通过此三个顶点做三线性插值得到此点颜色值,见如下公式。<formula>formula see original document page 8</formula>vw,., /^.为权重值,7;为此光照视线方向采样值。c为步骤l中所选取的特征向量的个数,£t 为第k个特征向量(l<k<c), ^为步骤1中所计算的均值,系数A由向量7;.和A二者内积求得,见下式。<formula>formula see original document page 8</formula>图3是本发明的效果图,(a)为小尺寸的双向纹理函数数据(毛衣样本),将其合成后的 大尺寸双向纹理函数数据在兔子模型上的表现如(b), (c)所示。由图像可以看出本发明保证 了小尺寸数据合成大尺寸数据的过程中没有走样,并保证了很好的完整性和连续性。图(b), (c)分别表现了模型转动后的不同光照效果,物体表面随着光线和视线的变化产生了阴影的不 同,毛衣纹路也随着光线和视线的变化而产生了变化。从图中可以看出本发明能够有效的增 加虚拟环境中不同光照和视点交互情况下的物体表面变化的真实感。
权利要求
1、一种双向纹理函数的压缩和合成方法,其特征在于它包括以下步骤步骤1根据数据视点不同分组,采用主元分析算法对原双向纹理函数数据进行压缩;步骤2从压缩后的双向纹理函数数据中使用误差计算方法随即提取数据块,每四个数据块构造成一个带颜色的方形纹理块,使用颜色的方形纹理块进行多维纹理合成;步骤3将压缩并合成后双向纹理函数数据绘制到三维模型表面上。
2、 根据权利要求1所述的双向纹理函数的压縮和合成方法,其特征在于所述的步骤1 根据数据视点不同分组,采用主元分析算法对原双向纹理函数数据进行压縮的方法如下-第一步,选取视线方向》对其所有光源方向的数据构造矩阵3;;第二步,求矩阵^;每一行均值5并与其相减值得到校正矩阵7;;第三步,计算 ;的特征值;^入和对应的特征向量五,...^, n为光源方向个数;第四步,从大到小选取c个特征值并选取它们所对应的特征向量,使用这c个特征向量 做为原数据的压縮数据;第五步,换另外一个视点方向直到所有视点方向的数据都完成压缩。
3、 根据权利要求1所述的双向纹理函数的压縮和合成方法,其特征在于所述步骤2的 实现为第一步,随机选择四个正方形双向纹理函数数据块,计算两两间重叠区域的颜色误差值 与阈值进行比较,如果误差大于阈值则重新选择,直到满足误差小于阈值为止;第二步,将四个数据块旋转45°,给不同的块赋予不同的颜色,相同的赋予同一颜色; 第三步,将这四个数据块两两拼接在一起并计算一条剪切路径; 第四步,沿剪切路径端点剪切生成带颜色的方形纹理块; 第五步,使用这些带有颜色的方形纹理块进行多维纹理合成。
4、 根据权利要求1所述的双向纹理函数的压縮和合成方法,其特征在于所述步骤3的 实现为.-第一步,构造一个虚拟半球,将所有采样光照和视点方向分布在这个半球上; 第二步,对这个半球上的采样点进行三角化分割;第三步,三角化后,按照间隔1。计算所有这个半球上所有角度所在的投影三角形, 一共 为360*90组,并计算其到三角形三个顶点的权重值; 第四步,使用显卡单元进行实时绘制。
5、根据权利要求3所述的双向纹理函数的压缩和合成方法,其特征在于所述第一步中 的颜色误差和阈值的计算方法见下式,d为颜色误差计算方法,dmax为阈值计算方法-<formula>formula see original document page 3</formula>公式中N为重叠区域的像素个数,c为主元分析压縮算法中选取的主元个数,pm为 PCA算法在光照方向索引m指向的系数,V为视线方向的个数,av为视线方向索引v指 向的权重值,和为重叠区域中第k个像素在两块中的颜色值,s为误差极限系数。
全文摘要
一种双向纹理函数的压缩和合成方法,采用主元分析和带颜色的方形纹理块实现双向纹理函数数据的压缩和合成,具体做法是首先,对双向纹理函数数据根据视点不同分组进行采用主元分析算法压缩;然后,从压缩后的双向纹理函数数据中使用误差计算方法随即提取数据块,每四个数据块构造成一个带颜色的方形纹理块,使用颜色的方形纹理块进行多维纹理合成;最后,将压缩并合成后双向纹理函数数据绘制到三维模型表面上。本发明可以压缩大规模的双向纹理函数数据并根据已有纹理图像合成新的多维纹理图像,合成过程快速、效果精确,并解决了多维纹理合成的一致性问题,扩大多维纹理来源的途径,满足虚拟环境中真实感绘制的需求。
文档编号G06T9/00GK101398936SQ20081022621
公开日2009年4月1日 申请日期2008年11月7日 优先权日2008年11月7日
发明者展 张, 沈旭昆, 勇 胡, 越 齐 申请人:北京航空航天大学