梯形阴影映像的制作方法

文档序号:6493886阅读:299来源:国知局
专利名称:梯形阴影映像的制作方法
技术领域
本发明广泛地涉及一种对于景物的计算机图形表示中产生实时阴影的衍生阴影映像(shadow map)的方法,一种数据存储介质和一种计算机系统。
背景技术
由于功能强大的图形处理单元的处理支持的增长,因此计算机图形系统中实时阴影的产生最近引起了人们很多注意。在许多应用中,阴影是重要的,因为它们对景物增加进一步的真实感并提供附加的深度提示。
寻找怎样计算阴影的方法始于几十年以前。我们注意到在大多数技术中,在阴影质量和渲染(rendering)时间上存在折衷。最近的方法是基于标准的阴影映像算法(SSM)。该双通道(two-pass)算法简洁并易于理解。在第一通道中,有深度缓冲器在启动的情况下从光的视点把景物渲染。该缓冲器被读取或存储到称为阴影映像的图像。在第二通道中,从摄像机视点把景物渲染并对于每个片段包含阴影确定。如果当变换到光的视域中时片段的z值大于其相应的存储在阴影映像中的深度值,则片段位于阴影中。
与其他方法相比,标准阴影映像算法容易实现,并且其计算相对快。此外,其操作可以在最近的图形硬件中有效地映射和执行。专用的纹理(texture)用于阴影映像,并且阴影确定利用投影纹理映射来进行。
另一方面,SSM具有许多限制。第一缺陷为分辨率问题。当光接近于景物以及眼睛的视点时,SSM效果较好,但当光远离时在阴影边界附近产生混淆。这由于在需要较高分辨率的区域中的低阴影映像分辨率而引起。除了仅少量的纹理存储器用于收集阴影映像的实际情况以外,当目视平截头体(eye’s frustum)的聚焦区域对阴影映像贡献非常小的部分而在阴影映像中相应于这些眼睛视域不可见的位置的其余空间没有被利用时,该问题可以出现。
另一限制称为多边形偏移问题。由于图像的空间属性,因此阴影比较利用有限的精度进行,其引起自阴影的问题。这可以通过寻找偏离值(和斜率系数)来处理,所述值加上阴影映像的深度值以把z值稍微移离光。我们注意到一些方法利用深度值的非线性分布以令多边形偏移问题恶化为代价来解决分辨率问题。
另一限制称为连续性问题,其中阴影映像质量从一个画面至另一画面显著地改变,导致阴影的闪烁。这在所有变形的阴影映像方法如边界框估计方法(见图2)和透视的阴影映像中发生。具体地,例如,透视的阴影映像依靠可以投射阴影的所有物体的凸包。该凸包和由此得到的阴影质量可能突然改变。在一个例子中,这情况是发生于物体在动态环境中移入或移出光的平截头体的时候。在另一个例子中,当算法实际上移动了眼睛的位置以避免例如由于透视投影引起的物体的倒置顺序时,可以观察到该情况。
因此,为了平衡上述限制,构想出本发明并且现在已经将其实施出来。

发明内容
根据本发明的第一方面,提供一种在景物的计算机图形表示中实时阴影产生的方法,该方法包括基于景物的所需视域限定目视平截头体;限定照明至少一部分景物的光源的位置;产生梯形以在光的后透视空间L中的目视平截头体内估计出区域E;对梯形中的物体施加梯形变换,以将其变换到梯形空间中,用于计算阴影映像;以及利用计算的阴影映像确定物体或其部分是否位于景物的所需视域中的阴影中。
分别产生梯形的顶线It和底线Ib以在L中估计出E的步骤可以包括-计算中心线I,其通过E的近平面和远平面的中心;
-计算E的2D凸包;-计算It,其与I正交并接触E的凸包的边界;-计算Ib,其平行于It并接触E的凸包的边界。
在E的近平面和远平面的中心基本上一致的情况下,可以把限制远平面的最小框限定为梯形。
产生梯形的侧线以在L中估计出E的步骤可以包括-指定离目视平截头体的近平面的距离为d,以限定在景物的所需视域中的聚焦区域;-确定L中位于I上的点pL,其与目视平截头体的近平面的距离为d;-计算I上点q的位置,其中q是投影中心,以将梯形的底线和顶线分别映射到y=-1和y=+1,以及将pL映射到y=ξ上的点,其中ξ在-1和+1之间;以及-构造梯形的两条侧线,每条通过q,其中每条侧线在I的各侧上接触E的2D凸包。
在一个实施例中,ξ=-0.6。
所需点ξ可以基于把损耗量最小化的迭代过程来确定。
当找到局部最小值时,迭代过程可以停止。
迭代过程可以预先计算,并将结果存储在表中以作直接引用。
该方法可以包括-确定光源的平截头体和目视平截头体之间的相交I;-计算I的顶点的中心点e;-限定通过眼睛的位置和e的中心线In,用于产生梯形。
该方法可以包括限定新的聚焦区域,其位于目视平截头体的近平面和远平面之间,使这些平面在几何上靠近以紧密限制I。
梯形变换可以包括将梯形的四个角映射到单位方形,其是正方形阴影映像的形状,或映射到一般的矩形,其是矩形阴影映像的形状。
正方形或一般矩形的大小可以基于光源和眼睛的构形而改变。
梯形变换可以仅将顶点的x和y值从光的后透视空间变换到梯形空间,而z值保持为在光的后透视空间中的值。
该方法可以包括施加梯形变换以得到在梯形空间中的x,y和w值xT,yT和wT,以及计算在梯形空间中的z值zT,zT=zL·wTwL]]>其中zL和wL分别是在光的后透视空间中的z和w值。
该方法可以包括-在阴影映像产生的第一通道中,将片段的坐标值从梯形空间反向变换到光的后透视空间L中,以得到第一变换片段,利用第一变换片段的平面等式来计算第一变换片段离L中光源的距离值zL1,将zL1加上偏移值,并将由此得到的值作为深度值存储在阴影映像中;-在阴影确定的第二通道中,通过投影纹理将指定到片段的纹理坐标从梯形空间反向变换到L中,从变换的纹理坐标得到第二变换片段,利用第二变换片段的平面等式来计算第二变换片段离L中光源的距离值zL2,并基于阴影映像中存储的深度值和zL2的比较来确定片段是否位于阴影中。
该方法可以包括-在阴影映像产生的第一通道中,-在顶点阶段期间,将顶点的坐标值变换到梯形空间中,并给顶点指定纹理坐标,其等于光的后透视空间中的顶点的坐标值,以及-在片段阶段期间,用片段的纹理坐标替换片段的深度,将深度加上偏移量,以及将由此得到的值作为深度值存储在阴影映像中;-在阴影确定的第二通道中,-在顶点阶段期间,将顶点的坐标值变换到眼睛的后透视空间中,并给顶点指定两个纹理坐标,第一个是光的后透视空间中的顶点的坐标值,第二个是梯形空间中顶点的坐标值,以及-在片段阶段期间,基于阴影映像中存储的深度值与基于片段的第一纹理坐标的值的比较,来确定片段的阴影,其中所述深度值作为基于片段的第二纹理坐标的索引。
该方法可以包括-在阴影映像产生的第一通道中,将片段的坐标值从梯形空间反向变换到光的后透视空间L中,以得到第一变换片段,利用第一变换片段的平面等式来计算第一变换片段离L中光源的距离值zL1,将zL1加上偏移值,并将由此得到的值作为深度值存储在阴影映像中;-在阴影确定的第二通道中,-在顶点阶段期间,将顶点的坐标值变换到眼睛的后透视空间中,并给顶点指定两个纹理坐标,第一个是光的后透视空间中的顶点的坐标值,第二个是梯形空间中顶点的坐标值,以及-在片段阶段期间,基于阴影映像中存储的深度值与基于片段的第一纹理坐标的值的比较,来确定片段的阴影,其中所述深度值作为基于片段的第二纹理坐标的索引。
该方法可以包括-在阴影映像产生的第一通道中,-在顶点阶段期间,将顶点的坐标值变换到梯形空间中,并给顶点指定纹理坐标,其等于光的后透视空间中的顶点的坐标值,以及-在片段阶段期间,用片段的纹理坐标替换片段的深度,将深度加上偏移量,以及将由此得到的值作为深度值存储在阴影映像中;-在阴影确定的第二通道中,通过投影纹理将指定到片段的纹理坐标从梯形空间反向变换到L中,从变换的纹理坐标得到第二变换片段,利用第二变换片段的平面等式来计算第二变换片段离L中光源的距离值zL2,并基于阴影映像中存储的深度值和zL2的比较来确定片段是否位于阴影中。
该方法可以进一步包括在利用计算的阴影映像确定物体或其部分是否位于用于表示的景物所需视域中的阴影中时加上多边形偏移量。
两个或多个光源可以照明景物的至少各个部分,并且该方法应用于每个光源。
根据本发明的第二方面,提供一种在景物的计算机图形表示中实时阴影产生的系统,该系统包括处理器单元,用于基于景物的所需视域限定目视平截头体;用于限定照明至少一部分景物的光源的位置;用于产生梯形,以在光的后透视空间L中在目视平截头体内从光源估计出区域E;用于对梯形中的物体施加梯形变换,以将其变换到梯形空间中,用于计算阴影映像;以及利用计算的阴影映像确定物体或其部分是否位于景物的所需视域中的阴影中。
根据本发明的第三方面,提供一种数据存储介质,其具有存储在其上的计算机编码器,用于指示计算机执行在景物的计算机图形表示中实时阴影产生的方法,该方法包括基于景物的所需视域限定目视平截头体;限定照明至少一部分景物的光源的位置;产生梯形,以在光的后透视空间L中在目视平截头体内从光源估计出区域E;对梯形中的物体施加梯形变换,以将其变换到梯形空间中,用于计算阴影映像;以及利用计算的阴影映像确定物体或其部分是否位于景物的所需视域中的阴影中。


现在将仅通过例子并结合附图描述本发明的实施例,在附图中图1说明了在光的后透视空间中和在梯形空间中产生的阴影之间的比较,如示例性实施例中所述。
图2说明了通过边界框估计方法和梯形估计方法在两个连续画面中产生的阴影之间的比较,如示例性实施例中所述。
图3说明了利用边界框估计方法和梯形估计方法产生的阴影映像之间的比较,如示例性实施例中所述。
图4说明了在梯形估计方法中进行的梯形变换,如示例性实施例中所述。
图5说明了梯形变换,其将聚焦区域映射到阴影映像的80%内,如示例性实施例中所述。
图6示出了梯形估计方法的示意图,如示例性实施例中所述。
图7示出了当改变眼睛和光的眼睛之间的角度时,在具有眼睛的恒常向上矢量的阴影映像中由聚焦区域所占的区域的图。
图8说明了通过梯形估计方法产生的阴影质量,如示例性实施例中所述。
图9是根据示例性实施例的用于实现方法和系统的计算机系统的示意图。
图10说明了梯形变换和梯形的四个顶点,将聚焦区域映射到阴影映像的80%内,如示例性实施例中所述。
图11说明了在梯形变换矩阵的计算期间将梯形的顶边中心变换到原点的步骤,如示例性实施例中所述。
图12说明了在梯形变换矩阵的计算期间旋转梯形的步骤,如示例性实施例中所述。
图13说明了在梯形变换矩阵的计算期间变换包含两条侧边的两条侧线的交点的步骤,如示例性实施例中所述。
图14说明了在梯形变换矩阵的计算期间剪取梯形的步骤,如示例性实施例中所述。
图15说明了在梯形变换矩阵的计算期间定标梯形的步骤,如示例性实施例中所述。
图16说明了在梯形变换矩阵的计算期间将梯形变换为矩形的步骤,如示例性实施例中所述。
图17说明了在梯形变换矩阵的计算期间沿y轴平移矩形的步骤,如示例性实施例中所述。
图18说明了在梯形变换矩阵的计算期间定标矩形的步骤,如示例性实施例中所述。
图19说明了梯形变换矩阵的最后结果表示,如示例性实施例中所述。
具体实施例方式
参考图1,本发明的示例性实施例提供一种利用梯形阴影映像计算三维(3D)计算机图形阴影的方法,该映像由从光的视域看时从目视平截头体的梯形估计中得到。
图1(a)示出了直接从光视域中计算或在光的后透视空间中已知的具有225个规则间隔植物模型104的景物106的阴影映像102。当光远离时,阴影混叠在眼睛的视域中出现,如阴影108中所示。图1(b)示出了在施加梯形变换后从光的视域中计算的景物114的阴影映像110,聚焦在对于眼睛是潜在可见的区域(仅具有15个植物模型112)上。结果,得到高质量的阴影116。
此外,参考图2,示例性实施例的方法解决由连续性问题引起的阴影闪烁,该问题中阴影质量从一个画面至另一个画面显著地改变。在四幅图的每幅中,光的后透视空间在顶部左边例如222,产生的阴影映像在顶部右边例如224,以及植物210,212,218和220的阴影(如在图1的景物中)在底部。图2(a)示出了通过标准边界框估计方法产生的从一个画面i至下一个画面i+1的阴影闪烁(对照阴影210,212),该方法在从光源的后透视空间看时在目视平截头体内具有区域202的边界框204。与阴影210的质量相比,阴影212的阴影质量很显然更差。相反,图2(b)示出了利用梯形估计方法产生的从一个画面i至下一个画面i+1的平滑阴影转换,对照阴影218,220,如在示例性实施例中所述。阴影218和阴影220的质量没有太大差别。此外,与例如阴影210相比,可以再次看见例如阴影218的质量提高。
不失一般性,本说明书假定在景物中存在单光,并且目视平截头体完全在光的平截头体内。换句话说,存在产生阴影的单个光源。其他情况如其中目视平截头体的顶点位于通过光的投影中心并平行于光的近平面的平面之后或在其上,将在说明书的后部分中进行描述。
可以观察到阴影映像由两个部分构成一部分在目视平截头体内,另一部分在目视平截头体外。为人认识的是仅前者对确定象素是否位于阴影中是有用的。从而,为了增加阴影映像分辨率,一种方式是将由后者所占的进入量最小化,总的称为耗损量。图3示出了在示例性实施例中梯形估计306的例子,和从光观察时在目视平截头体内的区域302的最小边界框估计308。一种处理分辨率问题的方式是更好的利用从光观察时在目视平截头体内的区域302,在此称为E的阴影映像。这要求附加的正规矩阵N的计算,以将光的后透视空间300变换到N空间,在图3中概括(其中N空间,涉及梯形空间304或边界框空间310)。阴影映像然后从N空间构造,与从后透视空间300相反。在阴影确定期间,象素被变换到N空间中用于深度比较,而不是变换到光的后透视空间中。
直观地,当估计越接近于区域E,302,由此得到的阴影映像的分辨率越高。最小的这种区域是区域E,302的凸包C。然而,不清楚怎样有效地将C(其是一直到六条边的多边形)变换为阴影映像(通常矩形形状)同时把耗损量最小化。
下一个自然选择是使用最小的封闭边界框B308以估计C。然而,边界框估计不是总能导致最小的耗损量,如从图3中边界框空间310和梯形空间304的比较中可以看出。
在示例性实施例中,梯形被认为是估计区域E,302的适当形状。更重要的,其两个平行的顶边305和底边307形成惊人的强大机构以从画面至画面控制梯形的形状和大小(如稍后所述)。这成功地处理了连续性问题。在处理没有在上文提及的另一种类的“隐含”耗损量时,在示例性实施例中对于梯形的选择同等重要以及注意的是其两个侧边309,311。这种耗损量是在阴影映像中对近的物体过度采样而较低的采样速率是足够的。示例性实施例具有有效的机构以决定两条侧边309,311,使对物体可用的分辨率分布在指定的聚焦区域内。比较起来,用于最小边界框B308的变换在伸展形状上不具有灵活性。结果,当视域的深度增加时,最小边界框方法对阴影映像分辨率具有恶化的影响。
如在
背景技术
中所述,连续性问题是阴影映像质量从一个画面至下一个画面的显著改变的结果,导致阴影的闪烁。对于最小边界框方法,如果在从光看时在目视平截头体内的区域的估计中存在突然的改变,阴影映像质量改变。图2(a)示出了从画面i至画面i+1,分别从光202,203看时在目视平截头体内、分别具有最小边界框204,205的区域的估计方向改变。结果,在阴影映像的不同部分中的分辨率存在显著改变。通常,当从光看时目视平截头体从一种形状转换到另一种不同形状时(其中从光看时目视平截头体的从光视域可见的侧面数量不同),问题可能经常发生。作为对比,在示例性实施例的梯形方法中,图2(b)示出了从画面i至画面i+1,在阴影映像的不同部分中的分辨率没有显著改变,对照阴影218,220。
参考图6,示例性实施例具有有效率和有效的方法以控制梯形的改变,从而处理连续性问题。
目标是构造梯形以估计从光看时在目视平截头体内的区域E,602,其具有每个这种连续估计导致阴影映像分辨率的平滑转换的约束条件。在示例性实施例中采取的策略为依靠梯形的形状和大小的平滑转换,以导致阴影映像分辨率的平滑转换。首先,示例性实施例计算以得到底线和顶线。根据这些,当计算两条侧线时,梯形的底边和顶边被限定。
下面描述在E,602上得到梯形边界的底线和顶线的计算。
进行计算以找到光的后透视空间L,600中的两条平行线,以包含所需梯形的底边和顶边。目标是选择平行线以便当眼睛从一个画面移动(相对于光)至另一个画面时存在平滑的转换。
首先,目视平截头体被变换到光的后透视空间L600中,以得到E,602。
其次,计算中心线I604,其通过E602的近平面622和远平面624的中心。
其次,计算E602的2D凸包(在其边界上具有最多六个顶点)。
其次,计算顶线It608,其与I604正交并接触E602的凸包边界。顶线It608在点与I604相交,与E602的远平面624的中心相比,该点更接近于近平面622的中心。
然后,计算底线Ib606,其平行于(且不同于)顶线It608(即也正交于I)并接触E602的凸包边界。
上述算法是使得中心线I604控制It608和Ib606的选择,远和近平面的中心(几乎)一致的情况时除外。在示例性实施例中,算法对其单独处理,导致限制远平面624的最小框作为所需梯形。接下来的两段解释上述算法的基本原理,以处理连续性问题。
设想E,602,在球体内绘制目视平截头体,该球体的中心在眼睛的位置处,并且半径等于从眼睛到远平面624的每个角落的距离。假定眼睛的位置不改变。眼睛从一个画面至下一个画面的俯仰角和方向可以编码为在球体上的点(其是I604与球体的交点)到另一附近的点,而眼睛的滚动不改变编码点但导致目视平截头体沿I604的旋转。更重要地,利用从画面至画面的平滑的眼睛运动,位于球体上的目视平截头体的远平面624的四个角也在球体上具有平滑的转换。由于I604和上述四个角的位置唯一地确定Ib606,因此它也从画面至画面平滑地转换。类似地,It608也从画面至画面平滑地转换。
其次,假定眼睛的位置相对于光从一个画面至下一个改变但保持其方向。在该情况下,仅存在定标E,602的问题,以及计算的Ib606和It608平行于之前的线。换句话说,在目视平截头体的平滑平移下,Ib606和It608再次从画面至画面平滑地转换。
在描述侧线的计算之前,我们首先分析图5(a)中通过其NT将给定梯形变换至梯形空间的效果。注意到NT具有将顶边伸展为单位长度的作用。在该情况下,与底边相比,顶边相对短,因此,伸展导致将所有示出的三角形推向单位正方形的底部,如图5(b)所示。这意味着在顶边附近、由It(图6中的608)限制(接近于近平面(图6中的622))的区域最终占据了阴影映像的主要部分。这导致对于非常接近于眼睛的物体在阴影映像中的过度采样,同时损失了其他物体的分辨率(例如从图5(b)中的顶部起,第二三角形502至第四三角形504)。这是上述由于过度采样引起的耗损量类型。
对于图5(a)中的梯形510,其相应的梯形空间508在图5(b)中示出。在图5(b)的情况下,我们得到对于E506的小区域的过度采样。在图5(c)的情况下,对于利用80%规则计算的不同梯形(具有相同的顶线和底线),其梯形变换将四个区域512(梯形的上部分)映射到阴影映像中的最初的80%内。
相反地,当“宽的”梯形(具有几乎相等长度的顶边和底边)通过其梯形变换进行变换时,阴影映像的小部分由近物体占据。由于示例性实施例采用的方法目标在于通过在目视平截头体中的“重要”物体实现可用阴影映像存储器的有效使用,因此接着是计算侧线和此后计算所需梯形的算法。
接下来,将描述侧线的计算,其将形成E,602上的梯形边界的侧边。
参考图6,假定眼睛更注意于在离近平面622的距离为δ内的物体及其阴影。即,眼睛的聚焦区域,或简单称为聚焦区域,是在离近平面622的δ距离处截断的目视平截头体。使p是远离近平面622的距离为δ的点,其相应点pL,618在空间L,600中位于I,604上。使pL,618离顶线的距离为δ’,614。示例性实施例构造梯形以包含E,602,因此NT将PL,618映射到80%线或者在示例性实施例中称为梯形空间中的80%线(见图5(c))上的一些点。这种方法在此称为80%规则。
为此,确定透视投影问题以计算在I,604上点q,620的位置,其中q,620作为投影中心以将pL,618映射到80%线y=ξ610(即ξ=-0.6)上的点,以及将底线606和顶线608分别映射到y=-1和y=+1。使λ,616为底线和顶线之间的距离。然后,q,620离顶线的距离表示为η,612,并通过下面的1D均质透视投影来计算
-(λ+2η)/λ2(λ+η)/λ10·δ′+η1=ξ%ω,]]>以及ξ=ξ%ω]]>因此η=λδ′+λδ′ξλ-2δ′-λξ]]>其次,通过q,620并接触E,602的凸包的两条线被构造以成为包含所需梯形边界的侧边的侧线。
对于一些情况(如当在光的后透视空间中看时目视平截头体是斗争(dueling)平截头体情况),80%规则可能导致阴影映像存储器的显著耗损量。因此,在示例性实施例中,上述算法变形为迭代过程。假定阴影映像是具有入口(entry)的x水平线的映像。(在一些应用中x值的例子为512,1024或2048。)在第一迭代过程中,pL,618被映射到80%线(或0.8x),以及在每个相继的迭代过程中,pL,618被映射到前次迭代过程的线之前的入口的一条线以计算q,620。利用每个计算的q,620,相应的梯形和其梯形变换NT如前那样计算。从所有的迭代过程中,采用梯形,其NT变换焦距区域以覆盖阴影映像中的最大区域(通过其他量度是可能的)。在另一实施例中,一旦x的值可以定位,其中聚焦区域覆盖阴影映像中局部最大区域(或其他相应的量度),则迭代过程可以停止。换句话说,一旦存在从良好的覆盖率至差的覆盖率的改变,则迭代过程可以停止,并且使用良好的覆盖率为x的值。上述计算是不浪费的,因为它包含简单的运算以及仅小数目的迭代过程。事实上,对于眼睛的给定向上矢量以及眼睛和光的视线之间的给定角度,pL,618被映射到其中的最好的ξ,610独立于景物,从而可以预先计算。因此,所有这些最好的ξ,610(从而η,612)可以存储在表中,对于眼睛的每个可能的向上矢量,该表具有眼睛和光的视线之间的角度参数。从而,在另一实施例中,简单的查表法也可以替代上述迭代过程。
图7示出了当改变眼睛和光的视线之间的角度时,在具有眼睛的不变向上矢量的阴影映像中由聚焦区域所占的区域的曲线700。聚焦区域对于斗争平截头体情况占据小区域,但当例如E的一个侧面在光的视域中可见时占据大区域。
为了理解80%规则,通过改变眼睛和光的视线之间的角度(表示为xy平面上的数据点),同时保持向上矢量不变,在阴影映像中由聚焦区域所覆盖的总区域的曲线700产生。实施例利用一系列相同种类的具有不同向上矢量的曲线实施。观察到轻微不同的向上矢量的连续曲线是具有非常接近值的表面。这些曲线表示在由聚焦区域所占据的区域上存在平滑的转换。这很强的表示了示例性实施例所采用的方法很好地处理了连续性问题。因此,在示例性实施例中利用的80%规则是有效的。在另一实施例中,可以根据应用的需要调节该百分比。
上述讨论假定目视平截头体完全位于光的平截头体内,如在室外景物中,其中阳光是主要的光源。如果不是这种情况,一种改进是扩大光的视域以包括目视平截头体。这不是阴影映像的有效使用。同样,这可能难以处理并且不总是可行。也存在一些情况,其中目视平截头体的顶点位于平面之后或其上,该平面通过光的投影中心并平行于光的近平面。这种顶点具有倒置的顺序或在L(图6中600)中被映射到无穷远。接下来的两段讨论避免这些情况的简单扩展。
具体地,仅将目视平截头体的在光的平截头体内的部分变换到L(图6中600)就足够。剩下未在光的平截头体内的部分没有被清楚地照明,因此无法具有阴影。因此,在示例性实施例中,仅处理在光的平截头体和目视平截头体(具有不超过16个交点作为其顶点)之间的相交I。这方便地避免了由于透视变换引起的上述问题。
通过目视平截头体的近平面和远平面中心的线I(图6中604)可以不再是计算底线和顶线的中心线。一种方法是计算I的顶点的中心点e,并使用通过眼睛位置和e的线为用于计算的新的中心线In。新的聚焦区域必须被限定,因为聚焦区域可能不完全在I内。一种方法是几何推动眼睛的近平面(图6中622)和远平面(图6中624)(接近于彼此)以在自然空间中紧密限制I,从而得到f’作为这些平面之间的距离。使f为自然空间中眼睛的原始远平面和近平面之间的距离。然后,在一个实施例中,新的聚焦区域位于新的近平面和其平行平面内,其中这些平面之间的距离为(δf’/f)。注意到δ是初始选择以设定聚焦区域的距离。
利用上述,在示例性实施例中采用的方法现在适用于更宽范围的应用由近光至远光,以及室内和室外景物。图8(a)和(b)示出了利用两种光照明设想特征的情况下的显示。图8(a)示出了当从光的平截头体外侧观察时,由一个邻近光802和两个邻近光804照亮的特征806。图8(b)示出了由近光(左阴影810)和远光(右阴影812)照亮的特征808,其通过示例性实施例采用的梯形估计方法渲染。从图8中,可以观察到在示例性实施例中采用的方法可以对于近光情况以及对于转换到远光情况实现高阴影质量,其中远光情况对于标准的阴影映像是不适宜的。
下面的描述使在示例性实施例中采用的方法中梯形估计的使用形式化。
参考图3,考虑物空间中的顶点v。然后,在光的后透视空间L,300中的该顶点是vL=PL·CL·W·v,其中PL和CL是光的投影和摄像矩阵,W是顶点的自然矩阵。在L,300中的E,302的八个角顶点根据物空间中E,302的角顶点乘以PL·CL·CE-1得到,其中CE-1是眼睛的逆摄像矩阵。如图4中所示,E被处理为光的单位立方体404的正面400上的展平的二维(2D)物体。我们使用梯形T 402来估计(和包含)被处理为2D物体的E。一个正规矩阵NT被构造以便T,402的四个角被映射到单位正方形401或矩形。我们调用梯形空间中的顶点vT=NT·vL,NT为梯形变换矩阵,以及由梯形空间得到的阴影映像是梯形阴影映像。
下面描述在示例性实施例中梯形变换矩阵NT的计算,以将T的四个角映射到单位正方形。类似地,也可以计算NT以将T的四个角映射到矩形。
参考图10,目标是计算变换NT(4×4矩阵),其将梯形1000的四个角,t0,t1,t2,t3映射到单位立方体1002的正面,即在下述约束条件下计算NT-1-111=NT·t0,+1-111=NT·t1,+1+111=NT·t2,-1+111=NT·t3]]>
存在一些方法来实现。通常的方法是利用四边形计算以进行四边形映射。另一方法是对梯形施加旋转、平移、剪取、定标以及正规操作,以将它映射到单位立方体的正面。下面说明了一种从一系列4×4矩阵T1,R,T2,H,S1,N,T3和S2计算NT的方法。在下面讨论中,矢量u=(xu,yu,zu,wu)和v=(xv,yv,zv,wv)保存中间结果。
作为第一步骤,参考图11,T1将顶边1102的中心1100变换到原点u=t2+t32,]]>以及T1=100-xu010-yu00100001]]>然后,参考图12,梯形T 1200通过施加R围绕原点旋转,以便顶边1202与x轴共线。
u=t2-t3|t2-t3|,]]>以及R=xuyu00yu-xu0000100001]]>其次,参考图13,包含两个侧边(t0,t3)和(t1,t2)的两条侧线1300,1302的交点i通过施加T2变换到原点u=R·2T51·i,以及T2=100-xu010-yu00100001]]>作为下一步骤,参考图14,梯形必须利用H剪取,以至于它与y轴对称,即通过底边1402的中心和顶边1404的中心的线与y轴共线u=T2·R·T1·(t2+t3)2,]]>以及H=1-xu/yu00010000100001]]>其次,参考图15,梯形通过施加S1定标,以至于包含两个侧边(t0,t3)和(t1,t2)的两条侧线1500,1502之间的角度为90度,并且以至于顶边1504与x轴之间的距离为1u=H·T2·R·T1·t2,以及S1=1/xu00001/yu0000100001]]>其次,参考图16,下述变换N将梯形变换为矩形1600N=1000010100100100]]>然后,参考图17,矩形1700沿y轴平移直到其中心与原点重合。这通过施加T3实现。在该变换后,矩形1700也关于x轴对称u=N·S1·H·T2·R·T1·t0v=N·S1·H·T2·R·T1·t2,以及T3=1000010-(yu/wu+yv/wv)200100001]]>然后,参考图18,矩形1800必须利用S2沿y轴定标,以至于其覆盖单位立方体1900的正面,如图19所示u=T3·N·S1·H·T2·R·T210t0,以及S2=10000-wu/yu0000100001]]>从而,梯形变换NT可以如下计算NT=S2·T3·N·S1·H·T2·R·T1重新回到图4,在示例性实施例中,NT的意图在于仅变换物体的这些顶点的x和y值。然而,取决于每个顶点的x和y值,该变换也影响其z值。从而,对于所有顶点的单偏移量(如在标准阴影映像方法中)可能不足以补救表面粉刺(acne)效果。
图4示出了在光的后透视空间中在光的平截头体内的梯形估计402。图4还示出了在上述梯形变换下的梯形估计,导致对于正视405为单位正方形401(或矩形),但是在侧视图409上为梯形。这恶化了多边形偏移问题。图4还示出了通过示例性实施例采用的方法以在梯形变换下对于侧视图408保持单位正方形407。
梯形变换包含二维投影。该变换的重要特性在于梯形空间中顶点的zT取决于wT。实际上,z值的分布在梯形阴影映像上改变,因此如在标准阴影映像方法中的不变的多边形偏移量可能是不足够的。该问题在于指定的多边形偏移量可能对于包含在眼睛附近的物体的象素太高,而对于包含更远的物体的象素可能太低。如果多边形偏移量太高,阴影消失可能发生;另一方面,如果太低,可能引起表面粉刺。
通过在示例性实施例中保持光的后透视空间中的深度值,可以指定不变的多边形偏移量来防止多边形偏移问题,类似于在标准的阴影映像方法中使用的技术。分布保持均匀,如图4中从侧视图408的单位正方形407中可以看出。
在一个实施例中,为了实现这一点,每个顶点的仅x,y和w值通过NT变换到梯形空间(图3中304),同时保持光的后透视空间L(图3中300)中的z值。以简单的形式,将顶点变换到梯形空间(图3中304)中的公式现在为vT=NTvL,以得到其xT,yT和wT值,然后,从vL的z和w值即zL和wL计算zT值,如下zT=zL·wTwL]]>可以在阴影映像产生的第一通道期间把上述计算与顶点程序一起实现以计算所需zT,以及在阴影确定的第二通道期间与另一顶点程序一起实现以对于每个顶点计算在L(图3中300)中相应的zT。本实施例容易实现并在实际中可行。然而,上述方法仅是对于实际的z值的估计。当目视平截头体或光的平截头体没有包含特别大的三角形时,在三角形每点处的不正确z值被发现为没有关系,因为该错误很小从而一旦它利用相对大的多边形偏移量进行调节便可忽略。
为了改进上述实施例,其他实施例可以利用基于射线造型法,和/或基于多纹理坐标的方法。注意到每个方法具有通常的阴影映像产生和阴影确定的两个通道。可以将这些方法组合为四个不同组合的方法,以处理该问题。
在射线造型法中,片段阶段被用于计算L(图3中300)中每个片段的正确的z值。在第一通道(阴影映像产生)中,使用NT-1和逆视见区矩阵,以将片段的x和y值从梯形空间反向变换到L(图3中300)。其后,使用片段的L(图3中300)中的平面等式π,以计算z值。该值加上偏移量,然后存储在阴影映像中。然后,在第二通道(阴影确定)中,NT-1被施加到指定到片段(通过投影纹理)的纹理坐标的xT,yT和wT值,以得到xL,yL和wL。利用这些值,根据π计算L(图3中300)中片段的z值。该z值与存储在阴影映像的(xT/wT,yT/wT)入口中的深度值进行比较,以确定片段是否在阴影中。
在多纹理坐标方法中,在第一通道(阴影映像产生)处,顶点阶段将每个顶点v变换为vT=(xT,yT,zT,wT)并将vL=(xL,yL,zL,wL)指定为其纹理坐标。三角形上的纹理坐标通过线性内插三角形顶点的vL/wT值得到。其次,片段阶段用zL/wL替换片段的深度并对其加上偏移量。实际上,梯形空间中顶点的z值利用必要的多边形偏移量设置为zL。在第二通道(阴影确定)中,顶点阶段将每个顶点变换到眼睛的后透视空间作为输出顶点。对于顶点,也计算两个纹理坐标vL=(xL,yL,zL,wL)和vT=(xT,yT,zT,wT)。然后,片段阶段处理每个片段以通过将zL/wL与通过(xT/wT,yT/wT)索引的阴影映像中的值进行比较确定阴影。
附录A示出了在示例性实施例中用于实现梯形变换的顶点和片段程序编码。采用的方法是上述多纹理坐标方法。仅示出了阴影映像产生步骤,即算法的第一通道,因为算法的第二通道以类似方式工作。利用例如其他方案的顶点和片段程序或Cg或其他计算机图形程序,与附录A中相同的功能可以实现。
注意到为了清楚,被加到最后的深度值中的不变多边形偏移量的计算在附录A中省略。
附录B示出了在示例性实施例中用于上述算法的实现的显示程序。
示例性实施例可以在Linux环境中利用GNU C++和OpenGL、在具有nVidia GeForce FX5900超图形控制器的Intel Pentium 4 1.8GHZ CPU上实现。ARB顶点/片段程序或Cg程序可以用于处理多边形偏移问题。阴影映像可以提供到缓冲器或通常的纹理存储器中。示例性实施例使用多种几何但简单的操作如在2D中的凸包,行操作等,从而使稳定性问题易于处理。
本发明的实施例可以提供以下优点。
通过利用梯形估计通过光看见的目视平截头体并且将梯形弯曲(warpping)到阴影映像上,从而把阴影映像分辨率提高。这增加了对于接近于眼睛的区域的采样数量,因此导致更高的阴影质量。
梯形被计算,以便实现阴影映像分辨率的平滑改变。该计算在计算上是不浪费的,因为仅基于目视平截头体的八个顶点,而不是基于整个景物计算梯形,这消除了在所有现有技术中产生的连续性问题。
此外,梯形估计是不变的操作,以及算法很好地定标。毫无疑问弯曲包含透视变换,其中多边形偏移变成一个问题。然而,通过在示例性实施例中讨论的三种方法之一,其中包含了在现代图形硬件上利用顶点/片段程序或Cg程序,该问题可以解决。
应当理解,本领域技术人员可以轻易地把本发明应用到多个光源,其中每个光源都各有阴影映像。
示例性实施例的方法和系统可以在计算机系统900上实现,如图9中示意性所示。它可以实现为软件如计算机程序,其在计算机系统(其可以是掌上电脑、移动式电话、台式计算机、膝上型电脑等)900中被执行并指示计算机系统900以实施本示例性实施例的方法。
计算机系统900包括计算机模块902,输入模块如键盘904和鼠标906,和多个输出器件如显示器908,和打印机910。
计算机模块902经由适当的收发器914连接到计算机网络912,以能够通向例如因特网(Internet)或其他网络系统如局域网(LAN)或广域网络(WAN)。
例子中的计算机模块902包括处理器918,随机存贮器(RAM)920和只读存储器(ROM)922。计算机模块902还包括多个输入/输出(I/O)接口,例如到显示器908的I/O接口924(或其中显示器位于远程位置处),和到键盘904的I/O接口926。
计算机模块902的组件一般经由互连总线928并以相关领域中技术人员已知的方式通信。
应用程序一般提供给计算机系统900的使用者,该程序编码在数据存储介质如CD-ROM或软盘上,并利用数据存储器件930的相应数据存储介质驱动器来读取。应用程序被读取并在其执行中通过处理器918控制。程序数据的中间存储可以利用RAM 920完成。
以前述方式,公开了利用梯形阴影映像产生阴影的方法。仅描述了多个实施例。然而,对于本领域技术人员而言,根据这些公开内容得到多种改变和/或变形是显而易见的,只要不偏离本发明的范围。
附录A光的顶点程序light's vertex program:
!!VP1.0#c
:N_T#c[8-11]:light's projection and modelview matrix#c[12-15]:world matrix#c[16-19]:inverse world matrix#v[OPOS]:object position#o[HPOS]:result vertex#transform v[OPOS] into world space and store result in R4:
#R4=W*v[OPOS]DP4 R4.x,c[12],v[OPOS];
DP4 R4.y,c[13],v[OPOS];
DP4 R4.z,c[14],v[OPOS];
DP4 R4.w,c[15],v[OPOS];
#transform R4 into light's post-perspeotive space and store reault in R1:
#R1=P_L*C_L*(R4)=P_L*C_L*W*v[OPOS]DP4 R1.x,c[8],R4;
DP4 R1.y,c[9],R4;
DP4 R1.z,c[10],R4;
DP4 R1.w,c[11],R4;
#store this R1 in the first texture coordinate:
#o[TEXO]=P_L*C_L*W*v[OPOS]MOV o[TEX0],R1;
#transform R4 into trapezoidal apaoe:
#o[HPOS]=N_T*P_L*C_L*W*v[OPOS]DP4 o[HPOS].x,c
,R4;
DP4 o[HPOS].y,c[1],R4;
DP4 o[HPOS].z,c[2],R4;
DP4 o[HPOS].w,c[3],R4;
MOV o[COL0],v[COL0];
END 光的片段程序light's fragment program:
!!FP1.0#f[WPOS]:fragment in trapezoidal space(window position)#f[TEX0]:fragment's position in post-perspective space of the lightRCPR0.x,f[TEX0].w; #R0.x=1/w_LMUL R1,f[TEX0],R0.x;#R1=(x_L/w_L,y_L/w_L,x_L/w_L,1)MAD R2.z,R1.z,0.5,0.5; #R2=R1.z*0.5+0.5;depth is now in#the range
MOL o[DEPR],R2.z,.R2.z; # o[DEPR]** z_L/w_L*0.5+0.5;replace#"z_T" with "z_L"MOV o[COLR],f[COL0];
END
附录Bvoid display(){//lst pass:TSM generation//as described with reference to Figure 5 in tht detailed description,//as a first step we have to calculate a trapezoid hased on the//eye frustum E.
//The four verticas are stored in t_0,t_1,t_2,t_3calculatsTrapezoid(&t_0,&t_1,&t_2,&t_3,P_L,C_L,E);
//…after that N_T is calculated as described abovecalculateTrapszoidalTransformation(&N_T,t_0,t_1,t_2,t_3);
glViewport(0,0,shadowmapWidth,shadowmapHeight);
//Bind the above verter progran…glBindProgramNV(GL_VERTEX_PROGRAM_NV,vpLight);
//…and bind the above fragment programglBindProgramNV(GL_FRAGMCENT_PROGRAM_NV,fpLight);
glMatrixMode(GL_PROJECTION);//store N_T in GL_PROJECTIONglLoadMatrixf(N_T);
glTrackMatrixNV(GL_VERTEX_PROGRAM_NV,0,GL_PROJECTION,GL_IDENTITY_NV);
glMatrixMode(GL_MATRIX1_NV);//store in P_L*C_L and track in GL_MATRIX1_NVglLoadMatrixf(P_L);//light's projection matrix,e.g.achieved with//gluPerspective()glMultMatrixf(C_L);//light's camera matrix,e.g.achieved with//gluLookAt()glTrackMatrixNT(GL_VERTEX_PROGRAM_NV,8,GL_MATRIX1_NV,GL_IDENTITY_NV);
glMatrixMode(GL_MODELVIEW);//store the modelview matrir in//GL_MODELVIEWglLoadIdentity();
glTrackMatrixNV(GL_VERTEX_PROGRAM_NV,12,GL_IDENTITY_NV);
renderScene();
//Like in the standard shadow map approach we copy the depth buffer//into a texture:
CopyDepthBufferToTexture();
…//2nd pass:render scene from eye's position and project TSM texture//over the scane…SwapBuffers();
}
权利要求
1.一种在景物的计算机图形表示中实时阴影产生的方法,该方法包括-基于景物的所需视域限定目视平截头体;-限定照明至少一部分景物的光源的位置;-产生梯形以在光的后透视空间L中的目视平截头体内估计区域E;-对梯形中的物体施加梯形变换,以将其变换到梯形空间中,用于计算阴影映像;以及-利用计算的阴影映像确定物体或其部分是否位于景物的所需视域中的阴影中。
2.根据权利要求1的方法,其中分别产生梯形的顶线It和底线Ib以在L中估计E的步骤包括-计算中心线I,其通过E的近平面的中心和远平面的中心;-计算E的2D凸包;-计算It,其与I正交并接触E的凸包的边界;-计算Ib,其平行于It并接触E的凸包的边界。
3.根据权利要求1的方法,其中在E的近平面的中心和远平面的中心基本上一致的情况下,限制远平面的最小框限定为梯形。
4.根据权利要求1或2的方法,其中产生梯形的侧线以在L中估计E的步骤包括-指定离目视平截头体的近平面的距离为d,以限定在景物的所需视域中的聚焦区域;-确定L中位于I上的点pL,其与目视平截头体的近平面之间的距离为d;-计算I上点q的位置,其中q是投影中心,以将梯形的底线和顶线分别映射到y=-1和y=+1,以及将pL映射到y=ξ上的点,其中ξ在-1和+1之间;以及-构造梯形的两条侧线,每条通过q,其中每条侧线在I的相对侧上接触E的2D凸包。
5.根据权利要求4的方法,其中ξ=-0.6。
6.根据权利要求4的方法,其中所需点ξ基于最小化损耗量的迭代过程来确定。
7.根据权利要求6的方法,其中当找到局部最小值时,迭代过程停止。
8.根据权利要求6或7的方法,其中迭代过程预先计算,并且结果存储在直接引用的表中。
9.根据权利要求1至8中任一权利要求的方法,包括-确定光源的平截头体和目视平截头体之间的相交I;-计算I的顶点的中心点e;-限定通过眼睛的位置和e的中心线In,用于产生梯形。
10.根据权利要求9的方法,进一步包括限定新的聚焦区域,其位于目视平截头体的近平面和远平面之间,使这些平面在几何上接近以紧密限制I。
11.根据权利要求1至10中任一权利要求的方法,其中梯形变换包括将梯形的四个角映射到单位正方形,其是正方形阴影映像的形状,或映射到一般的矩形,其是矩形阴影映像的形状。
12.根据权利要求11的方法,其中正方形或一般矩形的大小基于光源和眼睛的构形而改变。
13.根据前述任一权利要求的方法,其中梯形变换仅将顶点的x和y值从光的后透视空间变换到梯形空间,而z值保持为在光的后透视空间中的值。
14.根据权利要求13的方法,包括施加梯形变换以得到在梯形空间中的x,y和w值xT,yT和wT,以及计算在梯形空间中的z值zT,zT=zL·wTwT,]]>其中zL和wL分别是在光的后透视空间中的z和w值。
15.根据权利要求13的方法,包括-在阴影映像产生的第一通道中,将片段的坐标值从梯形空间反向变换到光的后透视空间L中,以得到第一变换片段,利用第一变换片段的平面等式来计算第一变换片段离L中光源的距离值zL1;将zL1加上偏移值,并将由此得到的值作为深度值存储在阴影映像中;-在阴影确定的第二通道中,通过投影纹理将指定到片段的纹理坐标从梯形空间反向变换到L中,从变换的纹理坐标得到第二变换片段,利用第二变换片段的平面等式来计算第二变换片段离L中光源的距离值zL2,并基于阴影映像中存储的深度值和zL2的比较来确定片段是否位于阴影中。
16.根据权利要求13的方法,包括-在阴影映像产生的第一通道中,-在顶点阶段期间,将顶点的坐标值变换到梯形空间中,并给顶点指定纹理坐标,其等于光的后透视空间中的顶点的坐标值,以及-在片段阶段期间,用片段的纹理坐标替换片段的深度,将深度加上偏移量,以及将由此得到的值作为深度值存储在阴影映像中;-在阴影确定的第二通道中,-在顶点阶段期间,将顶点的坐标值变换到眼睛的后透视空间中,并给顶点指定两个纹理坐标,第一个是光的后透视空间中的顶点的坐标值,第二个是梯形空间中顶点的坐标值,以及-在片段阶段期间,基于阴影映像中存储的深度值与基于片段的第一纹理坐标的值的比较,来确定片段的阴影,其中所述深度值作为基于片段的第二纹理坐标的索引。
17.根据权利要求13的方法,包括-在阴影映像产生的第一通道中,将片段的坐标值从梯形空间反向变换到光的后透视空间L中,以得到第一变换片段,利用第一变换片段的平面等式来计算第一变换片段离L中光源的距离值zL1,将zL1加上偏移值,并将由此得到的值作为深度值存储在阴影映像中;-在阴影确定的第二通道中,-在顶点阶段期间,将顶点的坐标值变换到眼睛的后透视空间中,并给顶点指定两个纹理坐标,第一个是光的后透视空间中的顶点的坐标值,第二个是梯形空间中顶点的坐标值,以及-在片段阶段期间,基于阴影映像中存储的深度值与基于片段的第一纹理坐标的值的比较,来确定片段的阴影,其中所述深度值作为基于片段的第二纹理坐标的索引。
18.根据权利要求13的方法,包括-在阴影映像产生的第一通道中,-在顶点阶段期间,将顶点的坐标值变换到梯形空间中,并给顶点指定纹理坐标,其等于光的后透视空间中的顶点的坐标值,以及-在片段阶段期间,用片段的纹理坐标替换片段的深度,将深度加上偏移量,以及将由此得到的值作为深度值存储在阴影映像中;-在阴影确定的第二通道中,通过投影纹理将指定到片段的纹理坐标从梯形空间反向变换到L中,从变换的纹理坐标得到第二变换片段,利用第二变换片段的平面等式来计算第二变换片段离L中光源的距离值zL2,并基于阴影映像中存储的深度值和zL2的比较来确定片段是否位于阴影中。
20.根据权利要求1至19中任一权利要求的方法,进一步包括在利用计算的阴影映像来确定物体或其部分是否位于用于表示的景物所需视域中的阴影中时加上多边形偏移量。
21.根据前述任一权利要求的方法,其中两个或多个光源照明至少景物的相对部分,并且该方法应用于每个光源。
22.一种在景物的计算机图形表示中实时阴影产生的系统,该系统包括-处理器单元,用于基于景物的所需视域限定目视平截头体;用于限定照明至少一部分景物的光源的位置;用于产生梯形,以在光的后透视空间L中在目视平截头体内从光源估计区域E;用于对梯形中的物体施加梯形变换,以将其变换到梯形空间中,用于计算阴影映像;以及利用计算的阴影映像确定物体或其部分是否位于景物的所需视域中的阴影中。
23.一种数据存储介质,其具有存储在其上的计算机编码器,用于指示计算机执行在景物的计算机图形表示中实时阴影产生的方法,该方法包括-基于景物的所需视域限定目视平截头体;-限定照明至少一部分景物的光源的位置;-产生梯形,以在光的后透视空间L中在目视平截头体内从光源估计区域E;-对梯形中的物体施加梯形变换,以将其变换到梯形空间中,用于计算阴影映像;以及-利用计算的阴影映像确定物体或其部分是否位于景物的所需视域中的阴影中。
全文摘要
一种在景物的计算机图形表示中实时阴影产生的方法,该方法包括基于景物的所需视域限定目视平截头体;限定照明至少一部分景物的光源的位置;产生梯形以在光的后透视空间L中的目视平截头体内估计出区域E;对梯形中的物体施加梯形变换,以将其变换到梯形空间中,用于计算阴影映像;以及利用计算的阴影映像确定物体或其部分是否位于景物的所需视域中的阴影中。
文档编号G06T15/50GK1853201SQ200480026486
公开日2006年10月25日 申请日期2004年7月30日 优先权日2003年7月31日
发明者陈肇成, 托比亚斯·奥斯卡·马丁 申请人:新加坡国立大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1