CN107093202A - 使用所存储的信息确定第一网格多边形集合的方法和系统 - Google Patents

使用所存储的信息确定第一网格多边形集合的方法和系统 Download PDF

Info

Publication number
CN107093202A
CN107093202A CN201710146760.7A CN201710146760A CN107093202A CN 107093202 A CN107093202 A CN 107093202A CN 201710146760 A CN201710146760 A CN 201710146760A CN 107093202 A CN107093202 A CN 107093202A
Authority
CN
China
Prior art keywords
polygon
grid
vision area
viewed
single order
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.)
Pending
Application number
CN201710146760.7A
Other languages
English (en)
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.)
Individual
Original Assignee
Individual
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 Individual filed Critical Individual
Publication of CN107093202A publication Critical patent/CN107093202A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/20Perspective computation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • G06T15/405Hidden part removal using Z-buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/60Shadow generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics
    • G06T19/003Navigation within 3D models or images
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/16Indexing scheme for image data processing or generation, in general involving adaptation to the client's capabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/36Review paper; Tutorial; Survey

Abstract

本发明涉及使用所存储的信息确定第一网格多边形集合的方法和系统。网格多边形形成多边形网格,来自网格多边形的第一网格多边形集合从第一视区看去可见。该方法包括:检索从第二视区看去可见的第二网格多边形集合,第二视区包含第一视区;检索指示至少一个第一网格多边形的信息,该至少一个第一网格多边形属于相连网格多边形集合,相连网格多边形集合从第一视区看去可见;检索指示该至少一个相连网格多边形集合的至少一个边界边的信息;遍历属于第二网格多边形集合的该至少一个相连网格多边形集合,该遍历包括:在该至少一个第一网格多边形处开始该遍历,以及当在该遍历期间遇到该至少一个边界边时中断该遍历。

Description

使用所存储的信息确定第一网格多边形集合的方法和系统
本专利申请是国际申请日为2011年6月29日、国家申请号为 201180042082.0、发明名称为“使用保守的线性化本影事件面来确定从区看去的可见性和进行基于增量PVS的内容流处理的系统及方法”的专利申请的分案申请。
对相关申请的交叉引用
本申请要求于2010年6月30日提交的题为“System and Method of From-RegionVisibility Determination and Delta-PVS Based Content Streaming UsingConservative Linearized Umbral Event Surfaces”的美国临时申请第61/360,283号的在前申请日的优先权,该申请的全部内容通过引用合并到本申请中。本申请还要求于2010年9月13日提交的题为“System and Method of Delivering and Controlling StreamingInteractive Media Comprising Predetermined Packets of Geometric, Texture,Lighting and Other Data Which are Rendered on a Receiving Device”的美国临时申请第61/382,056号的在前申请日的优先权,该申请的全部内容通过引用合并到本申请中。本申请还要求于2010年9月19日提交的题为“System and Method of Recording andUsing Clickable Advertisements Delivered as Streaming Interactive Media”的美国临时申请第61/384,284号的在前申请日的优先权。该申请的全部内容通过引用合并到本申请中。本申请还要求于2011年3月14日提交的题为“System and Method of ControllingVisibility-Based Geometry and Texture Streaming for Interactive ContentDelivery”的美国临时申请第61/452,330号的在前申请日的优先权,该申请的全部内容通过引用合并到本申请中。本申请还要求于2011年4月12日提交的题为“System and Methodof protecting game engine data formats and Visibility Event Codec FormatsEmploying an Application Programming Interface Between the Game Engine andthe Codec”的美国临时申请第61/474,491号的在前申请日的优先权,该申请的全部内容通过引用合并到本申请中。本申请还要求于2011年4月19日提交的题为“System and Methodof Delivering Targeted,Clickable,Opt-Out or Opt-in Advertising as a Unique,Visibility Event Stream for Games and Streaming Interactive Media”的美国临时申请第61/476,819 号的在前申请日的优先权。该申请的全部内容通过引用合并到本申请中。
技术领域
本发明涉及用于使用预计算的可见性信息来生成图像的方法和系统。
背景技术
实时3D图形显示硬件已经变得日益强大和买得起。这种硬件的可用性已经使得电脑和游戏控制台应用程序能够常规地显示每帧中包含几万图形基元的场景。除了少数例外,这些硬件显示系统采用基于Z缓冲区的隐藏面移除算法。
Z缓冲区(Z-buffer)隐藏面移除算法通过计算视锥体中的每个基元的每个栅格化(rasterized)的像素(或分段)的Z(深度)值来解决每像素的可见性。在栅格化期间,将当前分段的Z值与帧缓冲区中的现有的Z值相比较并且仅在当前分段的Z值小于Z缓冲区中的现有Z值时,将该分段的颜色写入帧缓冲区。
虽然这种方法提供了针对相对简单的场景的可接受的性能,但对于复杂、逼真的场景未能提足够的实时性能。这样的场景往往具有高的深度复杂度,其通常迫使在单个帧的渲染期间对Z缓冲区的每个元素进行多次比较。实质上,位于视锥体之内的所有的隐藏面样本必须是Z栅格化的并且将其与Z缓冲区值相比较以找到最接近的可见样本。
在一些Z缓冲区实施中,栅格化程序经常不仅执行针对所有隐藏分段的Z确定和Z缓冲区比较,而且还计算隐藏分段的完全渲染,仅当对应的Z值较接近于现有的Z缓冲区值时将结果的颜色写入帧缓冲区。针对即使适中的深度复杂度的场景,这也可以导致计算浪费和性能下降。
其他Z缓冲区实施包括一些类型的“早期Z(early-Z)”拒绝,其中如果分段的Z值大于对应的Z缓冲区值则不计算分段的颜色值。这可以减少对隐藏分段的渲染,但仅当以从后到前的次序对图形基元进行渲染时效率达到最大。
对硬件Z缓冲区的另一修改是“层次Z缓冲区”算法(Greenet等人1993)(Green N.,Kass,M.,Miller,G“hierarchical Z-Buffer Visibility” Proceedings of ACMSiggraph 1993pp.231-238,其全部内容通过引用合并到本申请中)的某些要素的集成。该算法采用Z缓冲区的层次表示来执行快速的可见性拒绝测试。虽然已经在某些系统(例如Nvidia,ATI) 中实现了层次Z缓冲区棱锥体本身的基本版本,但是完全的层次Z缓冲区算法已经被证明难以在硬件上实施。在这些实施中,Z缓冲区的低分辨率版本保存在对各个栅格化程序单元而言为本地的存储器中。在先前描述的“早期Z”拒绝测试中使用这些本地的表示。如果可以通过将各个分段与低分辨率的本地存储的Z缓冲区元素相比较来拒绝各个分段,从而避免对高分辨率(非本地)Z缓冲区的较慢的访问。
在这些加速的硬件Z缓冲区系统中,“早期Z”拒绝有时可以阻止对隐藏的分段的渲染并且层次Z棱锥体可以加快“早期Z”拒绝测试。然而这样的加速系统仍然要求:通过图形流水线的几何阶段来处理视锥体内的所有的基元以及通过至少Z生成/拒绝测试相来处理视锥体中的包括有被遮挡面的所有分段。因此,当对高的深度复杂度的场景进行渲染时,这些系统仍然表现糟糕。
鉴于针对高的深度复杂度的场景的Z缓冲区系统的相对较差的性能,已经开发了以下算法:识别被遮挡的几何图形并且从硬件图形流水线的几何阶段和栅格化阶段两者中排除这样的几何图形的算法。这些遮挡剔除技术可以在运行时间或预处理阶段执行。可见性剔除技术的综述发表在以下文献中:Cohen-Or等人(2003)(Cohen-Or,Daniel,等人“ASurvey of Visibility for Walkthrough Applications.”IEEE Transactions onVisualization and Computer Graphics 9.3(2003):412-31.Print.,其全部内容通过引用合并到本申请中。可见性剔除是指在进行实际的隐藏面移除 (即通过Z缓冲区)之前对不可见的几何图形进行识别和拒绝的任何方法。在将图形基元从硬件流水线上剔除的应用中,通常采用已经良好地确立的使用层次技术的背面剔除和视锥体剔除的方法。遮挡剔除是避免对场景中的被遮挡的基元进行渲染的一种类型的可见性剔除方法。遮挡剔除涉及模型中的图形基元之间的复杂的相互关系,并且相比视锥体剔除而言通常执行起要更加困难。
一般地,运行时间遮挡剔除技术确定什么样的几何图形是从单个视点看去可见的。这些技术称为“从点看去(from-point)”的剔除技术。相反,针对遮挡剔除的预处理方法确定从指定区中的任何视点看去可见的几何图形的子集。后者方法称为“从区看去(from-region)”的可见性技术。
Cohen-Or等人(2003年)的调查关注“漫游”类型应用,这类应用的特征在于相对地大量的静态几何图形和高度可能的深度复杂性。许多计算机游戏、模拟器和其它交互式应用都属于这一类。当在预处理步骤中将“从区看去”的遮挡剔除技术应用到几何图形数据库中时,这些应用往往大大受益。这些技术将模型划分成区或单元。这些视单元是模型的可以包括视点的可航行区。在预处理期间,确定图形基元的从视单元内的任意地方看去潜在地可见的子集(潜在可见集或PVS)。从区看去的可见性技术的主要优点是在预处理步骤中而不是在运行时间付出相当大的遮挡剔除计算成本。
一般地,从区看去的可见性预处理技术旨在计算对于视单元的精确 PVS的保守的高估。第一从区看去的可见性方法针对建筑模型的交互性观察而开发。将建筑模型自然地细分成单元(例如,房间、门厅)并且单元之间的可见性通过被称为入口的连接口(门口、窗户)来显现。Airey (1990)以简单的轴向对准的模型中开发了这种结构。他论证了以下方法:使用近似的但保守的阴影本影计算来识别通过入口可见的多边形。
Teller(1992年)(-Teller,Seth,Visibility Computations in DenselyOccluded Polyhedral Environments.Diss.U of California at Berkeley,1992.Berkeley:U of California at Berkeley,1992.GAX93-30757.ACM Portal, 其全部内容通过引用合并到本申请中)和Sequine将单元-入口的从区看去的可见性的方法扩展到不要求用户限定墙壁和入口的非轴向对准的多边形模型中。Teller采用由模型的多边形限定的BSP树(自动划分)。BSP 树的叶子必须是凸多边形,其可能没有完全闭合。这些凸多边形为模型的可见性单元(或视单元)。使用在BSP图中可得到的单元邻接信息对相邻的单元之间的边界上的开口区进行识别并且将其列举为可见性单元之间的入口。
因此,Teller利用BSP自动划分的结构通过一系列的多边形入口将从区看去的可见性问题简化为更加有限的和简化的可见性问题。Teller指出:即使针对相对地有限的可见性问题,将从单元看去的可见体积和从单元看去的被遮挡体积分离的可见性事件面通常也是二次曲面。
Teller通过采用针对单元之间穿过入口或入口序列的极值穿越线的存在的测试来确定单元到单元的可见性。在这个方法中,通过确认存在源于源单元并且穿透一系列入口至连接单元的至少一条射线来确定单元到单元的可见性。例如,通过在相关入口的任意四个边上入射的极值穿越射线给出穿过四个入口的这样的射线的存在。使用将三维空间中的线被映射到五维空间中的平面的普吕克(Plucker)映射来识别这样的射线。在五维空间中这四个平面的相交部形成线,该线与普吕克二次曲面相交而产生至多两个非虚(non-imaginary)结果。这些相交部中的每个相交部对应于在三维空间中与四个入口边相交的线,即极值穿越线。定位极值穿越射线的成本为入口序列中的边的数目的O(n2)。由于增量地执行穿越,总成本为O(n3)。该方法采用奇异值矩阵分解法,因为在穿越序列中所遇到的几何图形的退化,其能够表现出数值不稳定性。
Teller还开发了一种通过入口序列来计算精确的可见体积的方法:非半影(antipenumbra)体积。如先前所记录的,在一般情况下,该体积由平面和二次曲面两者包围。在该方法中,入口的边再一次被双重化成普吕克坐标,3维空间中的每条线表示5维空间中的平面的坐标。使用较高维度的凸包计算来将与入口序列中的所有边对应的平面彼此相交以形成5 维空间中的多面体。该多面体的面与普吕克二次曲面的相交部对应于入口边之间的极值带(swath)或可见性事件面。没有直接计算5D面与普吕克二次曲面的相交,而是计算5D多面体的边与普吕克二次曲面的相交。 5D多面体的边与普吕克二次曲面的相交对应于包围带的极值穿越线。这些5D边与普吕克二次曲面的相交部是通过寻找二次方程的根来识别的。这些带是通过计算5D边与普吕克二次曲面的相交部和检查5D多面体的共享该5D边的面(3D中的边)来非直接地识别。
每个带可以是非半影的边界的成分,或替代地,可以完全位于非半影体积内。包含(containment)测试用于识别边界带。
Teller发现很难鲁棒地实施非半影计算。该方法需要高纬度的线性编程计算和根寻找方法,其一起不能充分鲁棒地用于复杂模型。
Teller(1992)以及Teller和Hanrahan(1993)(Teller,Seth J.,and PatHanrahan.“Global Visibility Algorithms for Illumination Computations.”Proceedings of the 20th Annual Conference on Computer Graphics andInteractive Techniques.New York:ACM,1993,其全部内容通过引用合并到本申请中)还开发了一种用于确定单元到单元和单元到对象的确定穿过入口序列的可见性的较简单的技术。在该实施中,通过凸多面体来保守地近似非半影。该“线性化”非半影由入口序列的有效地形成该非半影的凸包的分离平面包围。限定了线性化非半影的边界的平面彼此相交并且与BSP叶单元的包围平面相交以确定穿过入口序列的可见性。
尽管线性化非半影方法高估了穿过入口序列的单元到单元的可见性,但是其适用于鲁棒实施。
在1996年,John Carmack使用了一种用于预计算针对计算机游戏 Quake的单元到单元的可见性的方法。Carmack的在Quake中的可见性预计算方法与Teller所描述的线性化非半影方法有些相似。在Teller的方法与Carmack的方法两者中,通过将大的遮挡物(例如,墙壁、地板) 作为分裂面的BSP树来对几何图形数据库进行细分。这种细分的终端叶是可能具有一个或多个非闭合边界或入口的凸多面体。在这两种方法中,对叶单元之间的入口进行识别并且使用对入口之间的非半影的线性化高估来确定单元到单元的可见性。
在Teller的方法中,通过从每个入口边到入口序列中的两个特定的极值的或“分离”的顶点的旋转来构造线性化的非半影:一个位于入口的每个半空间中。(入口的极值顶点是与原始的入口边一起在两个入口之间形成分离平面的顶点。)所选择的极值顶点产生在具有入口的平面中并且所有其他的极值顶点位于相同的半空间中。
在Carmack的实施中,线性化非半影的成对的顺序相交用于确定入口链中的单元-单元的可见性的存在。没有进行非半影与每个单元中的对象的实际相交。将结果存储为针对每个叶单元的单元到单元的PVS。
Carmack在1996年对Teller算法的实施将使用穿过入口的单元到单元的可见性的BSP空间细分确立为对于计算机游戏的可见性预计算的优选方法。后来直接从Carmack的Quake代码中导出的3D计算机游戏系统(例如,Quake II、Quake III和Valve Software的“Source”游戏引擎)或与其无关的3D计算机游戏(例如,Epic Games有限公司的“Unreal”游戏引擎)采用了针对密集地遮挡的多面体环境的预计算遮挡剔除方法。
在所有的这些系统中,使用“关卡编辑”工具来创建墙壁、地板和天花板的几何形状以及其他静态的、潜在遮挡的环境要素以构造游戏的建模环境。然后将该几何图形提交至使用传统BSP算法根据该几何形状来构造BSP树的预处理。然后,通常调用第二预处理来使用先前描述的穿过入口的可见性方法来计算针对BSP树的每个叶单元的单元到单元的PVS。通常将对于具体的叶单元的PVS存储为有效的压缩位向量,其表示从源单元看去可见的其他BSP叶单元。
在运行时间显示包含当前视点的具体叶单元期间,使用简单的BSP 算法来确定视点叶单元。读取对于视点叶单元的PVS,然后使用标准的层次视椎体剔除方法来关于当前视椎体层次地剔除对应的(潜在可见的) 叶单元。然后将来自位于视锥体的PVS叶单元的那些图形基元发送给硬件图形流水线。在运行时间显示期间,还可以使用各种从点看去的遮挡剔除方法例如从点看去的入口和非入口剔除来进一步限制发送到硬件图形流水线的基元。然而,预计算的PVS通常是对其进行运行时间从点看去的剔除的基元的工作集。从而,预计算PVS对运行时间性能极为重要,这不仅是因为在预处理中已经付出了其自己的遮挡剔除成本,而且还因为准确的PVS能够通过限制必须对其进行操作的几何图形的量来降低运行时间从点看去的遮挡剔除方法的成本。
尽管PVS预计算的BSP/入口-序列方法广泛地用于增强计算游戏及类似的应用的性能,但是该方法的当前实施还是具有许多缺点。如前面所讨论的,对入口序列非半影的线性化近似能够使得该方法明显地高估PVS 的大小。
本方法的另一个限制是:需要根据模型的潜在地遮挡的几何图形来构造BSP(自动划分)。使用均衡的和空间有效的BSP树来进行的空间细分已知是固有地困难的问题(见96页TELLER(1992))。对于最坏情况下的树大小O(n2),树构造的时间复杂度最佳界限是O(n3)。在很好地选择的情况下,针对适中复杂度的模型能够产生具有合理大小的分裂启发式BSP。但是对于较大的模型,这些时间和空间成本函数能够使得禁止实际的BSP构造和存储。从而,当使用该方法时,用户必须经常限制用于构造BSP的基元的数目。包括大量非共面基元的复杂对象通常作为潜在的遮挡物被排除,这是因为它们会增加BSP构造的时间和空间成本。通常通过以下方法来单独地管理这样的对象:该方法需要用户(即,关卡设计者)在PVS预计算期间将上述对象指定为不提供BSP平面和不用作遮挡物的“细节”对象。在该方法中仍可以将这些“细节”对象用作潜在的被遮挡物。如果细节对象完全包括在PVS叶单元内并且叶单元没有被确定为对于给定的视点叶单元的单元到单元的PVS的一部分,则可以将细节对象从视点叶单元的PVS排除。尽管通过基于对象的几何图形的复杂度替代它们的遮挡可能性来将对象从作为潜在遮挡物的考虑排除,但是该方法能够明显地高估实际的从区看去的PVS。
BSP/入口-序列方法的有关弱点在于:对于除了建筑内部以外的建模环境,该方法性能很差。当被应用到建筑内部模型时,该方法易于自然地构造与具有与门或窗户对应的入口的房间对应的BSP叶单元。相比之下,对于开口、户外场景以及许多复杂的内部场景,可见性较不清晰地由封闭单元、开口-入口关系来支配。在这些场景中,可见性经常主要受不与相对封闭的单元相关联的独立的遮挡物限制。当剔除被遮挡的几何图形时, BSP/入口-序列没有有效地考虑各个独立的遮挡物的融合。将BSP/入口- 序列方法应用至这样的场景可以产生非常大的BSP和非常长的入口序列。在这些条件下,该方法趋向于花费非常长的时间来计算被高度地高估了的和运行时间效率低的PVS。使用BSP/入口-序列方法的应用通常会避免预计算针对这样的场景的PVS预计算并且替代地依靠从点看去的遮挡剔除方法如从点看去的入口剔除,例如,由必须在运行时间计算的Valve Software的SourceR游戏引擎所使用的动态非入口方法。
Teller对入口序列方法的初始描述包括以下技术:通过将线性化非半影与BSP叶单元中的各个基元相交来计算单元到基元的PVS。在实践中,该技术没有被Carmack或其他现有系统采用,部分地因为单元-基元的 PVS的存储成本会比单元-单元的PVS的成本高很多。
尽管已经使用了各种近似来简化和加速BSP/入口序列可见性预处理,但是其仍然是计算昂贵的处理。因为BSP/入口序列方法高估PVS,所以完全地被遮挡的图形基元可能经历昂贵的运行时间预处理,尽管其完全地被遮挡的图形基元在场景中是不可见的。在运行时间处理被遮挡的基元的计算成本可以由CPU、GPU或两者来支付。CPU处理可以包括视锥体剔除、从点看去的入口剔除、从点看去的非入口剔除以及将基元分批提交给GPU的CPU成本。在GPU侧上,被遮挡的基元可能经历硬件图形流水线的顶点处理阶段和栅格化阶段两者。预计算遮挡剔除的效率的一种测量是在运行时间所出现的透支的程度。每当必须将栅格化分段与Z缓冲区中的非空条目进行比较时,就有可能在栅格化期间出现透支。Z缓冲区中的非空条目是由处于同一图像空间坐标处的分段的较早的栅格化导致的。较早的条目可以位于当前分段的前面或后面(被遮挡)。这种状况必须通过Z缓冲区读取和比较运算来解决。如果较早的条目的Z值比当前分段的Z值更远,则覆写较早的条目。如先前所描述的,现代硬件Z缓冲区系统有时能够使用可以包括层次Z比较机制的“早期Z”拒绝测试来防止被遮挡分段的实际的着色(shading)。然而,使其至图形流水线的栅格化阶段的完全地被遮挡的基元与对应的Z缓冲区和/或它的层次等效物相比至少具有它们的栅格化分段中的每一个。我们采用以下惯例:透支包括至少需要Z比较运算的图像空间中的分段的任何“交叠”。
当将BSP/入口序列方法应用于游戏Quake的建筑模型时,发现平均透支为50%但是在最坏的情况下可以变化至150%。(Abrash 1997,pg. 1189,Abrash,Michael“MichaelAbrash’s Graphics Programming Black Book Special Edition”,1997The CoriloisGroup,其全部内容通过引用合并到本申请中)。该水平的透支在针对相对地简单的模型时会遇到,其具有大约为10的最大深度复杂度并且在其中经常通过仔细地选择遮挡墙壁或入口的位置来有意地最小化可见深度复杂度。
在ID Software的Quake III计算机游戏中使用了Carmack的可见性预计算方法的后一种实施。相比原始的Quake游戏,在该游戏中模拟的环境具有明显更多的几何图形细节(每关卡约40,000个多边形)。如在原始的游戏中,仔细地设计关卡以包括各种障碍物,其包括直角过道、门口后面的墙壁、具有U形转弯的楼梯和其他可见性阻挡物。这些障碍物被有意地布置成限制模型内的可见性,因此减小了对于模型的可见性单元的 PVS的大小。即使具有这些可见性阻挡物,近似的单元-单元的入口可见性计算在运行时间显示期间也会导致相当大的透支。当将BSP/入口序列预计算方法应用到Quake III时,BSP/入口序列预计算方法一般产生典型的为80%并且在最坏的情况下超过300%的透支。这些结果是通过使用-dc 命令行选项在典型的Quake III关卡的运行时间漫游期间测量深度复杂度来获得的。在这些测量期间,必须针对多道着色的效果小心地进行控制。
因为即使当将BSP/入口序列方法应用于其最合适的建模环境中,该方法也是计算昂贵和相对地效率低的从区看去的遮挡剔除方法。从而,更多近来的工作集中在能够应用到一般场景并且以合理的计算成本产生更加精确的PVS的从区看去的遮挡剔除方法。
在以下文献中描述了早期保守的一般的从区看去的遮挡剔除的方法: Cohen-Or等人(1998)(Chrysanthou,Yiorgos,Daniel Cohen-Or,and Dani Lischinski.“FastApproximate Quantitative Visibility for Complex Scenes.”Proceedings of theComputer Graphics International 1998. Washington,DC:IEEE Computer Society,1998.220,其全部内容通过引用合并到本申请中)。在这些方法中,只有当对象被单一的、大的、凸遮挡物遮挡时才将对象其剔除。遗憾的是在实际应用中极少遇到大的凸遮挡物存在。
更近一些,已经开发了尝试考虑较小遮挡物的收集的组合遮挡(遮挡物融合)的从区看去的可见性预计算方法。
Durand等人(2000)(Durand,Fredo,et al.“Conservative VisibilityPreprocessing using Extended Projections.”Proceedings of the 27th AnnualConference on Computer Graphics and Interactive Techniques.Proc. ofInternational Conference on Computer Graphics and Interactive Techniques.NewYork:ACM Press/Wesley Publishing Co.,2000.239-48,其全部内容通过引用合并到本申请中)提出了一种使用遮挡物与被遮挡物的被称为广义投影的保守图像空间表示的从区看去的可见性预计算方法。在该方法中,通过对从与视单元的顶点对应的八个不同的视点看去的遮挡物基元进行栅格化来构造凸遮挡物的保守的基于像素的表示。凸遮挡物的广义投影是其从这些视点的投影的相交部。可以通过将遮挡物栅格化到一起形成“广义深度缓冲区”的硬件Z缓冲区和模板缓冲区数据结构中来计算该相交部。被遮挡物被保守地表示为它们的包围盒从相同视单元顶点的投影的联合。如果被遮挡物被位于广义深度缓冲区中的遮挡物完全覆盖,则由于上述被遮挡物从该区看去不可见,所以将其上述遮挡物剔除。多个遮挡物的广义投影聚合在广义深度缓冲区,其解释了遮挡物融合。
该方法可以使用与环绕整个环境的六个平面的单一集合对应的广义深度缓冲区。可替代地,可以使用距视点单元的不断增加的距离处的环绕平面的连续集合。在这种情况下,可使用保守的卷积算子将在近平面上的聚合的遮挡物投影到随后的平面上。该“遮挡扫掠”重投影方法在捕获距视点单元的变距离处的多个小的遮挡物的融合方面更加有效。例如,该布置用于解释在高的深度复杂度的森林场景中的遮挡物聚合。
该广义投影方法使用了导致对PVS的高估的大量近似。首先,由于该方法没有使用被遮挡物自身的投影,潜在的被遮挡物的大小总是被高估。替代地,被遮挡物的包围盒被投影。此外,该投影的第二近似的包围矩形用于计算被遮挡物的广义投影。这些连续近似导致对被遮挡物的大小的高估,因此降低了PVS的精度。此外,对于使用被遮挡物包围盒的要求有效地限制了产生单元到对象(而不是单元到基元)的PVS的方法的精度。
广义投影方法能够直接地仅将凸遮挡物栅格化到广义的深度缓冲区。首先必须通过将凹遮挡物与投影平面相交来将凹遮挡物转换为凸表示。这是一个需要对象空间计算的附加步骤,取决于被遮挡物面的特征,该步骤可能是计算地昂贵。此外,如果投影平面的位置不理想,相交计算可以明显地低估凹遮挡物的实际遮挡效果。
广义投影方法所使用另一种近似是将遮挡物从一个投影平面重投影到更远的一个投影平面的技术。该重投影的目标是有效地识别平面遮挡物的本影(相对于由视单元表示的光源)以及找到该本影与更远的平面的相交。广义投影方法通过将遮挡物的图像与用作由视点单元形成的光源的高估的矩形的反图像进行卷积来保守地估计该相交。该技术可以明显地低估在大小上与视点单元相似的遮挡物的本影。通过明显地低估重投影的遮挡物的大小,该方法会易于高估PVS。
广义投影方法的主要动机是检测由多个小的遮挡物的组合效果引起的遮挡。Durand等人(2000)承认该方法仅检测遮挡物的本影(被遮挡的区)相交的遮挡物之间的融合,并且当该相交体积自身与任意选择平行投影平面相交。因为在遮挡扫掠实施中使用了相对地少的投影平面,该方法经常未能检测由在投影平面的附近的外部相交的本影引起的遮挡融合。
Schaufler等人(2000)(Schaufler,Gernot,et al.“Conservative VolumetricVisibility with Occluder Fusion.”Proceedings of the 27th Annual Conference onComputer Graphics and Interactive Techniques. New York:ACM Press/WesleyPublishing Co.,2000.229-38,其全部内容通过引用合并到本申请中)开发了一种预计算保守的从区看去的PVS,其需要建模环境的体积表示。在该方法中,建模对象必须由闭合面包围。闭合包围面必须产生针对每个对象的良好地限定了的内部体积。假定对象的内部体积是不透明的并且由通过内部的体积分解生成的凸体素来表示。体素用作针对该方法的遮挡物。通过寻找连接视点单元和体素的轴(shaft) 来计算遮挡。该轴的延伸是在其内所有的几何图形被遮挡的本影。该方法通过组合相邻体素以及通过组合体素和被遮挡空间的相邻区来解释遮挡物融合。所提出的实施计算对于2D和2.5D环境的单元-单元的PVS(例如,建模为高度场的城市)。虽然作者讨论到全3D环境的扩展,但是3D 模型的细节体积表示的计算和存储成本是该方法真正的限制。虽然 Schaufler等人的体积可见性方法不需要遮挡物是凸的,但是需要遮挡物是良好地形成了的具有可识别的固体(不透水)内部体积的流形。这使得能够通过完全位于原始遮挡物内部的盒形结构来保守地近似各个遮挡物。该近似的遮挡物是通过在尝试最大化所包括的盒形近似遮挡物的阻挡物扩展的处理中将内部分解成体素并且重组这些体素来生成的。该方法需要近似的遮挡物保持盒形状以有利于用于确定遮挡的轴的构造。该方法的主要限制是许多遮挡物糟糕地由所包括的盒形结构来近似。具体地,凹对象或具有拓扑孔的对象(亏格大于0的流形)呈现对于阻挡物延伸算法的含糊不清的情况并且明显地低估了由对象引起的遮挡。主要使用亏格为0 的图对象来对Schaufler等人描述的计算城市模型中用于视单元的PVS的方法的2.5D实施进行测试。使用盒形内部遮挡物易于相当不错地近似这些对象。对于包括凹元素和孔(例如,门和窗)的更加现实的模型,该方法在对遮挡物的近似上效率较低,因此在对被遮挡的几何图形的剔除上效率也较低。
该体积可见性方法检测遮挡物的线性化本影相交的情况下的遮挡物融合。但是,对于单独的遮挡物,阻挡物延伸算法最终产生了对遮挡的聚合区的简化的盒形近似,其可以明显地低估遮挡物融合的效果。
广义投影方法和体积可见性方法两者有效地将视单元作为面光源来处理并且分别使用图像空间和对象空间技术来计算对多边形网格的本影的保守的线性化近似。用于计算多边形面光源的阴影边界(本影和半影) 的算法,Nishita,Nakame(1985)(Nishita,Tomoyuki,Isao Okamura,and Eihachiro Nakamae.“Shading Models for Point andLinear Sources.” ACM Transactions on Graphics(TOG)4.2(1985):124-46,其全部内容通过引用合并到本申请中)和Chin-Finer(1992)(Chin,Norman,and Steven Feiner.“FastObject-Precision Shadow Generation for Area Light Sources Using BSP Trees.”Proceedings of the 1992Symposium on Interactive 3D Graphics.Proc.of Symposiumon Interactive 3D Graphics,1992, Cambridge,Massachusetts.New York:Associationfor Computing Machinery,1992,其全部内容通过引用合并到本申请中)也利用了保守的线性化本影边界。
这些阴影边界方法仅使用了形成在单个凸多边形光源和单个凸多边形之间的线性本影事件面。例如对非凸多边形网格使用这些方法会产生不会准确表示本影体积的不连续的本影事件面。从而,这些方法的使用实际上被限制于非常简单的模型。
在1992年,Heckbert(Heckbert,P“Discontinuity Meshing for Radiosity”,Third Eurographics Workshop on Rendering,Bristol,UK,May 1992,pp203-216,其全部内容通过引用合并到本申请中)使用了称为不完全的不连续性网格化来构造从面光源由简单多边形模型投射的精确的线性可见性事件面(本影和半影)。在该技术中,在光源的边与遮挡物的顶点之间以及在光源的顶点与遮挡物的边之间形成有线性事件面或楔。楔与所有的模型多边形相交,并且多边形的实际上在楔上可见的分段后续通过使用Weiler-Atherton对象空间的从点看去的可见性算法(Weiler,Kevin, and Peter Atherton.“Hidden Surface Removal using Polygon Area Sorting.”Proceedings of the 4thAnnual Conference on Computer Graphics and Interactive Techniques.New York:ACM,1977.214-22,其全部内容通过引用合并到本申请中)的2D版本来确定。
不连续性网格化方法的主要动机是识别半影内的不连续性边界。这些边界可以用于增加半影内的亮度计算的精度。遗憾的是,因为不完全的不连续性网格化方法仅构造了精确的线性本影事件楔,所以它一般未能产生完全的、连续的本影事件面。这是因为对于除了最简单的模型外的所有模型,连续的本影事件面(例如,在多边形网格的轮廓周线上入射)是由平面的可见性事件面和二次可见性事件面两者形成。从而,不完全的不连续性网格化方法不适于识别从面光源(或视单元)看去可见或被遮挡的网格多边形或网格多边形分段。
在现有技术的不完全的不连续性网格化方法中,所有的可见性事件面都是由顶点和边形成。图53是来自现有技术的由Heckbert提出的不完全的不连续性网格化方法。该图示出了精确的线性可见性事件面或楔,如被遮蔽的三角形结构楔R”。标记为楔R”的楔在多边形的边e上入射并且还在可以是光源的顶点的顶点v上述入射。在不完全的不连续性网格化方法中,线性事件面没有限定在从顶点看去不可见的边的分段上。在图53 的情况中,“楔R”没有限定在边e的标记为GAP E的分段上,因为从 GAP E看去,多边形O遮挡了顶点v。因为楔没有限定在该分段上,所以楔与多边形P的相交造成了“分段1”与“分段2”之间对应的间隙。如果楔R是本影楔,则其与P的相交会产生不完全的本影边界。因为这些间隙,所以不能单独使用通过不完全的不连续性网格化方法构造的线性可见性事件楔来限定本影边界(或从区看去的可见性边界)。
Drettakis and Fiume(1994)(Drettakis,George,and Eugene Fiume. “A FastShadow Algorithm for Area Light Sources Using Backprojection.” Proceedings ofthe 21st Annual Conference on Computer Graphics and InteractiveTechniques.New York:ACM,1994.223-30,其全部内容通过引用合并到本申请中)完全地表征了出现在多边形光源与多面体环境中的对象之间的可见性事件面。在被称为完全的不连续性网格化方法中,本影事件面和半影事件面两者被识别并且与模型多边形相交。这些相交将模型几何图形划分成“完全的不连续性网格”以使得在每个面中光源的视图在拓扑上都是等同的。该不连续性网格被示为用于计算半影内的全局亮度的有用数据结构。
在完全的不连续性网格化方法中,对面光源(称为“发光体”)与多面体网格对象之间的四类事件面进行识别。这些事件面之二是平面的并且另外两种是二次型的。
所识别的第一类可见性事件面形成在发光体的顶点或边与多面体模型的特定边或顶点之间。这些多边形称为发光体-VE或(E-EV)楔。作者强调不是多面体网格的所有顶点都支撑E-EV楔。仅对于发光体上的任意点为从点看去的轮廓边(他们称其为“阴影边”)的那些网格边才支撑楔。通过以这种方式来限定“从区看去的轮廓边”来识别支撑本影或半影E-EV楔的所有网格边。
用在完全的不连续性网格化中的另一类平面的可见性事件面是非发光体-EV(NonE-EV)楔。此类楔潜在地形成在多面体网格的任意边与任何其他边之间以使得所形成的楔与发光体相交。对于多面体网格的任何边,所支撑的NonE-EV楔仅出现在形成在该边与发光体之间的轴中。这一事实用于构造识别NonE-EV楔。
第三类可见性事件面是根据发光体的一个边和多面体网格的两个边来形成的二次曲面。这被称为发光体-EEE事件面或EeEEE面。每当不连续性网格的两个非相邻的斜边相交的地方就识别这种面。[该相交实际上与平面楔与从区看去的轮廓边的形成复合轮廓周线的相交对应]。处于该点的连续可见性事件面是二次曲面。
在面发光体与多面体网格对象之间形成的第四类和最后一类可见性事件面是NonE-EEE。这是形成在多面体网格的三个斜边之间以使得结果的二次曲面与视单元相交的二次事件面。
在本说明书中,命名法的一些修改采用基于Drettakis和Fuime(1994) 的从区看去的可见性事件面的分类以适应进一步的子分类。表Ia包括原来由Drettakis和Fuime(1994)提出的四类可见性事件面,出于清楚起见,对其进行了重新命名。
表Ia
从区看去的可见性事件面的现有技术命名法
可见性事件面 Drettakis等人命名
不包括发光体/视单元/源的特征的平面事件面 E-EV(发光体-边顶点)
不包括发光体/视单元/源的特征的平面事件面 NonE-EV
包括发光体/视单元/源的特征的二次事件面 发光体-EEE,EeEE
包括发光体/视单元/源的特征的二次事件面 非发光体EEE
四类可见性事件面中的任意一种可以最终促成实际的从发光体看去(从区看去)的本影边界,其将从发光体上的所有点看去被遮挡的空间体积与从发光体上的任意点看去可见的空间体积分离。遗憾的是,使用现有的不连续性网格方法,没有现有的方法用来确定哪一个事件面会促成对从区看去的可见性进行限定的该本影边界。从而,为了使用不连续性网格化方法来识别保守的、从区看去的本影可见性事件边界,首先必须生成所有的可见性事件面并且必须对结果的不连续性网格进行后处理以确定哪一个事件面-网格多边形相交部表示实际的从区看去的本影边界。
若干其他问题将不连续性网格化方法的使用限制到计算保守的从区看去的可见性。二次事件面使得难以实施事件面投射。需要事件投射面以找到从发光体边看去可见的可见二次曲线段(在发光体EEE楔的情况下)。该楔上可见性通常是使用Weiler-Atherton可见性算法的2D实施来解决,上述算法在当使用二次曲面时难以鲁棒地实施。
如先前所讨论的,如果简单地省略掉二次曲面(如在不完全的不连续性网格化方法中),则不能保证连续的从区看去的本影面而使得不可能确定从区看去的可见网格多边形。
传统的不连续性网格化方法的另一个重要限制在于其没有显示出输出敏感的性能。这是因为现有的不连续性网格化算法以生成多面体网格的所有(从区看去)的轮廓边上的所有可见性事件面来开始。这包括从发光体/源看去实际上被遮挡的轮廓边。这些事件面然后与多面体网格的潜在的每个多边形相交,并且后续作为后处理,使用2D Weiler-Atherton可见性对楔上可见分段进行识别。因为在这些算法的任何阶段都没有深度优先化,所以它们在密集地遮挡环境中进行非常糟糕,其中,所生成的大部分边界会位于保守的从区看去的本影边界内,因此无助于从区看去的可见性解决方案。
如在本说明书中随后所示出的,利用使用输出敏感算法生成的保守的线性化本影事件面来构造可见性图的本方法解决了现有的不连续性网格化方法在被应用于保守的从区看去的可见性问题时的限制。
使用由Drettakis和Fiume(1994)描述的从区看去的可见性事件面的分类时,明显的是,体积可见性方法(Schauffler 2000)仅利用了E-EV 面来表示本影边界。广义投影方法(以及其他投影性方法)也含蓄地使用了E-EV本影边界。
许多保守的从区看去的可见性预计算的图像空间技术使用“收缩的遮挡物”以使用从区看去中的单个点的可见性来保守地近似从该区看去的可见性。Wonka等人(2000)的方法(Wonka,Peter,Michael Wimmer,and Dieter Schmalstieg.“VisibilityPreprocessing with Occluder Fusion for Urban Walkthroughs.”Proceedings of theEurographics Workshop on Rendering Techniques 2000.London:Springer-Verlag,2000.71-82.,其全部内容通过引用合并到本申请中)使用该方法保守地计算从环绕位于视单元的面的视点的区看去的可见性。使用位于该视单元的面上的多个视点,将从该视单元看去的可见性作为从这些点看去的组合可见性来计算。视点之间的距离确定必须应用以确保保守性结果的遮挡物收缩的大小。因为该方法采样视单元上多个位置处的可见性,所以它没有先验地假设所有未被遮挡的元素从整个视单元看去完全可见。
与许多先前描述的方法(包括体积可见性和广义投影)相比,Wonka 等人的方法没有假设所有未被遮挡的元素从视单元面上的每一处看去完全可见。因为它采样从视单元上的多个位置看去的可见性,所以它能够对解释视单元的从未遮挡元素看去的部分遮挡的背投影进行近似。因为视单元/光源的半影中的元素可以导致平面(NonE-EV)本影边界以及比E-EV 边界更加精确的二次本影边界(发光体EEE和非发光体EEE),E-EV边界是通过假定整个视单元从未遮挡元素看去可见来生成的。该方法的另一种实施是针对视单元为矩形的2.5D模型提出的。与全3D实施相比,这极大地减小了遮挡物收缩处理的复杂度并且充分地减小了所需的视点样本的数目。遗憾的是,因为该实施限于2.5D模型,所以他不能在大多数的漫游应用中使用。
Chhugani等人(2005)(Chhugani,Jatin,et al.“vLOD:High-FidelityWalkthrough of Large Virtual Environments.”IEEE Transactions on Visualizationand Computer Graphics 11.1(2005):35-47,其全部内容通过引用合并到本申请中)描述了另一种可见性预计算方法,其利用“收缩的遮挡物”来使用从视单元内的单个点看去的可见性来近似从视单元看去的可见性。该方法利用组合对象空间和图像空间方法。在对象空间中构造“与视单元和对象相切的支撑平面”。选择包括在这些支撑平面内的视点,并且针对每个支撑平面,构造穿过视点并且与原始平面平行的偏移平面。根据作者所说,这些偏移平面的正的半空间的相交部包括位于原始对象的实际本影内的截锥体。对于生成支撑平面的每个对象多边形,多边形的收缩是由对于所选视点的对应多边形的偏移来确定的。遮挡物对象后面的遮挡是通过渲染从视点看去的收缩版本然后使用深度缓冲区的遮挡查询扩展绘制遮被遮挡物来确定。该查询针对不可见的被遮挡物返回零。该方法通过渲染被遮挡物之前的收缩的遮挡物来进行有限的遮挡物融合。必须使用相同的视点来生成和渲染所有收缩的遮挡物。该视点必须位于所有遮挡物的平截锥体中。使用实现局部最小方案的凸二次最佳化来选择视点的位置以最大化收缩的平截椎体的体积的和。
收缩的遮挡物的精度很大程度上由所考虑的遮挡物的大小和分布来确定的。从而,在该方法中不容易控制精度。
虽然该方法承认包括各个多边形和连接的多边形网格的非凸遮挡物,但是其不适合具有孔的遮挡物。这是因为该方法依赖于具有实际是从区看去的轮廓周线类型的单一多义线“边界”的每个被遮挡物。因为一般产生明显的从区看去的遮挡的一些大的多边形网格(例如,建筑)还具有多个拓扑孔(例如,门和窗户),所以这是一个明显的限制。
根据前面的分析明显的是,许多现有的PVS预计算方法使用基于简单的E-EV事件面(例如,广义投影、体积可见性)的对本影边界的保守的线性化近似,其假设未被遮挡的元素从视单元上的任意处看去可见(即,整个视单元从未遮挡的元素看去可见)。
尽管现有的从区看去的可见性预计算的原始空间方法没有使用精确的二次可见事件边界;其他可见性应用计算原始空间中的二次可见事件面。这些应用之一,可见性骨架(Visibility Skeleton)Durand(1997)是用于回答全局可见性查询的数据结构。其他应用,不连续网格化,是计算面光源情况下的亮度的方法。首先将检查不连续性网格化方法。
如前面所述的,在Drettakis和Fuime(1994)的完全的不连续性网格化方法中,对出现在多边形光源与多面体模型之间的所有可见性事件面进行识别并且将其与模型的多边形相交。这些相交包括模型的关于源的“完全的不连续性网格”。不连续性网格将模型几何图像划分成面网格,以使得在每个面中源的视图在拓扑上是等同的。完全的不连续性网格对于计算靠近本影边界和半影边界的全局亮度而言是有用的数据结构。
在完全的不连续性网格化方法中,识别四类事件面(见表Ia和表Ib)。这些事件面中的两类是平面的并且另外两类是二次曲面。先前所讨论的两个平面事件面类型,E-EV和NonE-EV由保守的从区看去的可见性事件方法来使用以保守地包括从区看去的本影边界面。在一些情况下,这些平面实际上是由轮廓边和作为光源的视单元形成的精确本影边界的部分。
两种类型的二次曲面:发光体-边-边-边(发光体-EEE或EeEE)和非发光体-边-边-边(非光体EEE)是面光源与模型多边体之间的某些可见性事件面的部分。例如,在某些情况下,这些二次曲面可以是由轮廓边和作为光源的视单元形成的精确的本影边界的部分。在大多数情况下,这些事件面是半影的部分。不连续性网格方法描述了用于对出现在面光源与模型多边形之间的所有二次事件面进行识别的技术。
例如,在Drettakis和Fuime(1994)所做的论述中,可以通过在生成元边与发光体多边形的凸包之间形成轴来对发光体EEE和非光体EEE 事件面两者进行识别。发光体EEE事件面是由该轴中的原始边、发光体的边和其他边形成。非发光体EEE事件面是由轴中的原始边和非平行边对形成。非发光体EEE面是那些与发光体多边形相交的面。在两种情况下,使用第一生成元边的参数等式来示识别规则的二次事件面:
Pt=a1+t(b1-a1)
其中a1和b1是的端点e1
通过形成包括点P和e2以及点P和e3的两个平面来找到对于规则的二次曲面上的点Pt的t的值。这两个平面的相交形成与e1相交的线。
通过计算对于边e2的端点a2和b2以及对于边e3的端点a3和b3的t 来找到生成元边上的规则的二次曲面的有效间隔。间隔的相交部是第一生成元边上的有效区。(Teller还建议使用规则的二次曲面的参数表示来表示3D中的面。但是在Teller的方法中,实际上在原始空间中没有识别规则的二次可见性事件面。替代它们的定界符,在5D线空间中识别极值穿越线)。
在不连续性网格化方法中,一旦通过寻找其生成元边的有效间隔来识别了二次曲面,则确定对应的二次方程的系数:
Ax2+By2+Cz2+Dyz+Exz+Fxy+Gx+Hy+Iz+J=0
该二次曲面与模型多边形的相交部是二次曲线。通过转换三个生成边来对其进行确定以使得多边形嵌在z=0的平面中。通过对应的二次方程式的系数减去包括z的所有项来限定二次曲线。为了生成不连续性网格元素,将该二次曲线与模型多边形的边相交并且使用线扫掠可见性处理算法针对可见性对该二次曲线进行检查。
在不连续性网格化方法中,对包括面光源和模型多边形的所有可见性事件面进行识别。这些可见性事件面不仅包括本影和极值半影边界而且还包括在整个范围内来自模型几何形状的光源的拓扑视图或“方面”进行变化的许多其他事件面。在不连续性网格化中,可见性事件面被识别并且与模型多边形相交,但是不计算这些面的具体包围体积如本影体积。这些相交一般产生难以鲁棒地解决的第五度空间曲线。幸运地,使用不连续性网格的亮度计算不需要表示出本影体积。
完全的不连续性网格的构造不需要事件面与模型多边形相交,在多边形的面上形成线或二次曲线。通过将穿过模型投射面来进行这些相交。使用基于规则栅格的空间细分数据结构来限制所进行的相交的数目。在计算了所有这些相交之后,可见性步骤确定楔上的可见子分段。因此,不连续性网格的构造不是输出敏感的。并且E-EV处理的成本是多边形数目的O (n2)。还通过首先寻找二次曲面与模型多边形的相交形成的所有二次曲线来处理二次曲面,二次曲面上的可见性是通过随后应用的线扫掠算法来解决,二次曲面处理的成本是多边形的数目的O(n6)。
与完全的不连续性网格相同,可见性骨架(Durand等人1997) (Durand,Fredo;Drettakis,George;Puech,Calude;“The Visibility Skeleton:a Powerful andEfficient Multi-Purpose Global Visibilty Tool, SIGGRAPH 1997Proceedings,其全部内容通过引用合并到本申请中)是使用原始空间方法来解释二次可见性事件边界的数据结构。该可见性骨架是出现在多面体环境中的边之间的可见事件的完整目录。在可见性骨架中,模型的可见性信息被组织为以下图形结构:其中极值穿越线是图形的节点并且可见性事件面是图形的弧。可见性骨架可以用于回答在例如在全局亮度计算期间出现的那些场景中的可见性查询。
不同于完全的不连续性网格化,可见性骨架避免了对包括二次可见事件面的线性带的直接处理。替代地,通过仅直接地计算包围事件面自身并且与可见性骨架图结构的节点对应的极值穿越线来构造该骨架。
在入射在四个边(EEEE节点)上的极值穿越线的一般情况下,使用形成在这四个边之间的四面体楔的集合来识别上述节点。在该方法中,在上述边的两个边之间形成广义四面体,如在Durand等人(1997)的图8a、图8b和图8c中所示出的。在该段中所提到的图是指Durand等人(1997) 的论文中的图。在图8a中,示出了由边ei和边ej形成的广义四面体。在图8b中沿着第三边ej被示为沿着由ei和ej形成的广义四面体内的ej分段。[该广义四面体内的部分ej会利用ei和ej形成二次可见性事件(EEE) 面]。在图8c中,示出了第四边el。该第四边类似地通过到可能与其相交的三个其他广义四面体:ekej、ekei和ejei来限定。位于所有这些四面体楔的分段el可以与其他三个边形成三个二次曲面。仅有一条线会实际上与el和其他线相交。这是极值发光体-EEE线或包括这四个边的可见性骨架的节点。它是通过对受限的分段el的简单的对分查找来寻找的。在该对分查找中,选择el上的交叉点P的初始估计。然后,将由该点和ei形成的平面与ej和e相交,给出源于P处的两条线。所估计el上的相交部 P通过对分查找来细化直至源于P处的两条线之间的角度接近零。这出现在上述线全等时,因此相交ei、ej、ek和el。使用光线投射将如此识别的极值线与模型多边形相交以确定任何场景多边形遮挡其生成边之间的极值线。如果线被如此遮挡,则不记录极值穿越线。
可见性骨架的其他节点如EVE、VEE和EEV节点形成平面可见性事件面(例如,VE)的极限,并且通过使有关边与对应的广义四面体相交来寻找上述节点。
将如此识别的极值穿越线明确地存储为可见性骨架的节点。不直接计算由这些线包围的可见性事件面(多边形或二次曲面),而是替代地,明确地将其存储为图中的弧。事件面的部分边是从连接至对应弧的节点来推导出的。随后使用对于全局可见性查询的可见性骨架例如在面光源的情况下的不连续性网格化,可能需要使用例如由Teller(1992)所描述的参数的二次形式来生成二次曲面。
根据前述分析明显的是,不连续性网格化和可见性骨架方法包括用于识别由面光源产生的平面可见性事件面和二次可见性事件面的原始空间技术。两者有效地使用了广义四面体楔测试来识别二次曲面和支撑上述二次曲面的边三元组的分段。两种方法产生相关边之间的所有可见性事件面。两种方法中没有一个被构造有效地生成仅一个在计算从区看去的可见性中相关的从区看去的本影边界面。
计算从区看去的可见性的另一种方法是将该问题转换为线空间并且使用普吕克坐标计算本影边界面。
如前所述,Teller(1992)的方法开发计算入口序列的非半影边界的精确的平面元素和二次曲面元素所必需的计算机器。该方法将问题转换到 5D线空间。
在不存在不同入口的情况下,与从面光源(或等同地,视单元)看去的可见性的一般问题相比,入口序列是明显地更加有效的可见性问题。此外,为了识别非半影边界的二次曲面元素,Teller必须使用普吕克坐标将问题转换到线空间并且在5D中进行超平面相交。该转换增加了处理的算法复杂度并且引入当工作在原始空间中时不会出现的潜在鲁棒性问题。
从2001年开始,两组研究员Bittner(2001)(J.Bittner and J.Pˇrikryl. ExactRegional Visibility using Line Space Partitioning.Tech.Rep. TR-186-2-01-06,Institute of Computer Graphics and Algorithms,Vienna University ofTechnology,March 2001.)和Nierenstein(2002)(Nirenstein, S.,E.Blake,and J.Gain.“Exact From-Region Visibility Culling.” Proceedings of the 13th EurographicsWorkshop on Rendering.Proc.of ACM International Conference Proceeding Series,Pisa,Italy,2002.Vol. 28.Aire-la-Ville:Eurographics Association,2002.191-202.,其全部内容通过引用合并到本申请中)开发了计算对于多边形PVS的精确视单元的方法。与Teller的精确非半影计算一样,这些方法需要将问题转换到普吕克坐标并且依赖于包括奇异值分解、鲁棒的根寻找和高维度凸包计算的数值技术的组合。与Teller的方法不同,这些方法不需要将模型自动划分成具有列举出的入口的BSP树。
一般地,这两种精确方法,Niernstein(2002)和Bittner(2001)被构造成确定在两个凸图形基元(即,多边形)之间是否存在未被遮挡的视线的可见性查询。所测试的多边形之一是视单元的面,另一个所测试的多边形是建模环境的网格多边形。查询确定在模型中的多边形单独地或组合地遮挡所测试的多边形之间的所有视线。该遮挡查询通过由普吕克空间导出的5D欧几里得空间表示多边形之间的线空间。该映射需要奇异值矩阵分解。在后续步骤中,该方法使用在5维空间中所进行的构造固体几何图形运算。形成可见性查询的基础的这些处理具有高的计算成本。此外,因为该方法的基础组织使用了多边形至多边形查询,所以自然实施上的成本是多边形数目的O(n2.15)(Nirenstein 2002)。
通过使用平凡接受和平凡拒绝测试提高了该方法在此最坏情况下的可伸缩性。多边形至多边形的可见性平凡接受是使用多边形至多边形的射线投射查询来确立的。如果源于一个测试多边形处的射线达到其他测试多边形而没有与数据库中的任何居间多边形相交,则可以平凡地接受可见性查询。尽管该查询相比精确的普吕克空间可见性查询具有较低的计算成本,但是其自身是对于平凡接受相对地昂贵的测试。可以使用层次地组织的数据库来加速多边形的集群的平凡拒绝。如果查询确定对象的包围盒相对于视点单元被遮挡,则被包围盒包括的所有多边形也被遮挡。此外,该方法将被遮挡的包围盒自身作为简单的“虚拟遮挡物”来处理。(Koltun 等人2000)(Koltun,Vladen,Yiorgos Chrysanthou,andDaniel Cohen-Or. “Virtual Occluders:An Efficient Intermediate PVSRepresentation.” Proceedings of the Eurographics Workshop on RenderingTechniques 2000. London:Springer-Verlag,2000.59-70,其全部内容通过引用合并到本申请中)。如由Koltun等人(2000)所定义的,虚拟遮挡物不是原始模型几何图形的一部分,但是仍然表示一组闭塞线。如果对象的包围盒没有被遮挡,则对象的包围盒可以用作对于位于其后面的任何几何图形的遮挡物。因为包围盒自身对于针对在其后面的对象的遮挡的测试是绰绰有余,所以不需要将被遮挡的包围盒内的多边形中任何一个多边形考虑为遮挡物候选者。通过结合Nirenstein等人(2000)的场景对象的从前到后的处理使用这些虚拟的遮挡物,明显地将该方法的可测量性针对一些所测试的场景从O (n2.15)提高到O(n1.15)。尽管如此,该方法被示为具有大的恒定的计算开销。对于由780万个三角形组成的密集遮挡的森林场景,在双Pentium IV 1.7GHz多处理器上预处理需要2天零22个小时。与此相比,使用实施在具有SGI Onyx2图形硬件的200MHz MIPS R10000单处理器上的 Durand等人的广义投影方法对相同的数据库进行预处理仅需59分钟。该精确的方法提出了平均99.12%的几何图形,相比之下,使用保守的广义投影方法实现了95.5%的剔除。
该精确方法的高的计算成本的一个原因是:多边形到多边形的遮挡查询单独地处理由每个多边形引起的遮挡,并且没有明确地考虑多边形之间的连接关系来计算聚合遮挡。该精确方法仅通过单独地处理每个多边形的昂贵的5D构造固体几何图形处理来解释连接多边形的组合遮挡。对于该精确的方法,仅通过从5D多面体(表示单元到多边形的视线)单独地减去各个5D多面体(表示遮挡多边形的候选者)来确定连接的多边形的组合遮挡。在连接的网格的情况下,共享的边表示遮挡物融合的平凡情况,但是对于精确方法,必须明确地计算这些遮挡物的融合并且这些遮挡物的融合表示算法的退化情况,这是因为结果的多面体沿着共享的边精确地相交。在该场景中,Niernstein等人(2002)的方法完全忽略了对多边形模型的潜在地支撑从区看去的可见性事件面的那些具体边的识别的重要问题,并且替代地使用所有的多边形边进行可见性查询。
在后一种实施中,Nirenstein等人(2005)(Nirenstein,S.,Haumont, D.,Makinen,O.,A Low Dimensioinal Framework for Exact Polygon-to-PolygonOcclusion Queries,Eurographics Sysmposum on Rendering 2005,其全部内容通过引用合并到本申请中)通过识别潜在的从视单元看去的轮廓边界以及沿着这些边界构造5D中的阻挡多面体来解决该方法的此缺点。在该方法中使用的从区看去的轮廓边的定义实质上与在较早的Drettakis等人(1994)的完全的不连续性网格化方法中使用的上述定义相同。尽管使用该提升的一个试验台实施将该方法加速了因子 30,但是该方法仍然具有高的恒定的计算开销。
除了计算地昂贵外,该精确的方法难以鲁棒地实施。该方法的奇异值分解、鲁棒的根寻找和较高维度的构造固体几何图形计算往往对数字容差和几何图形退化非常敏感。
该精确的从区看去的方法的另一个缺点是:当前的实施一般不识别和移除部分地被遮挡的多边形的被遮挡部分。该方法的当前实施使用视单元的面与模型多边形之间的多边形-多边形的可见性查询。该查询被具体构造成识别所测试的多边形之间的未遮挡的区并且如果检测到任何这样的区则提前终止。这样的实施包括PVS中的整个多边形,即使其只有一小部分从视单元看去可见。因此,尽管由这些实施计算的PVS可以是从区看去可见的多边形的“精确”集合,但是PVS可以显著地高估从用于大多边形的视单元看去可见的暴露面面积。这可以导致运行时间的显著透支。修改精确的从区看去的实施以确定未被遮挡的分段会充分地增加计算成本和实施的复杂度,这是因为:1)会丢失提前终止的益处,和2)未被遮挡的分段与被遮挡的分段之间的边界是二次型。
因为这些线空间方法计算源多边形与目标多边形之间的二次本影边界,所以它们可以提供对于该可见性查询的精确方案。相比之下,可见性预计算的保守方法明确地(体积可见性)或隐含地(投影方法)使用较不精确的线性化本影边界。但是,因为这些保守的方法工作在原始空间,所以相比需要鲁棒的根寻找和较高维度的构造固体几何图形的线空间方法,它们适合于较简单、更加鲁棒的实施。
在广义投影方法和体积可见性方法两者以及精确的从区看去的方法中,针对包括可通航空间的平行六面体视单元来计算PVS。相比由BSP/ 入口序列方法使用的一般凸多面体视单元,使用平面六面体视单元具有若干优点。限定平行六面体视单元的空间细分能够容易地布置成有利于对于 PVS确定的层次方法的空间层次(例如,k-d树)。在由广义投影方法和体积可见方法两者使用的该方法中,针对处于层次结构中的高层级处的视单元来确定PVS并且将该PVS用作用来递归地确定在层次结构中较低的子视单元的PVS的工作集。
平行六面体单元的另一个优点是:它们具有与对于相邻单元的简单的单元邻接关系。该关系被用在实施增量PVS存储方案的广义投影实施中, Durand等人(2000)。在该方案中,存储对于许多关键视单元的整个PVS。对于大多数的其他视单元,存储表示邻接视单元的PVS的差异的集合。该存储方案充分地减小了对于PVS数据的存储需求。
在广义投影实施中,所计算的PVS对粗糙粒度水平处保守的视单元到场景-图形-单元可见性进行编码。对于该近似解决方案,针对12,166个视单元(表示包括6百万个多边形的城市模型的街道区的1/12)的增量 PVS存储需要60MB存储空间。推测出,对于包括所有街道的视单元的增量PVS数据的存储空间会是720MB。在运行时间部分,将所有的几何图形存储在主存储器中而从光盘中取得增量PVS数据。
使用了增量PVS存储方案的另一种从区看去的可见性方法是 Chhugani等人(2005)的Vold方法。在该实施中,从区看去的可见性解决方案使用“收缩遮挡物”方法的变型来提供保守的视单元-对象PVS。
增量PVS是对象ID的列表,上述对象ID指的是针对视单元过渡的新近可见或新近不可见对象。与广义投影方法相比,Vlod实施不需要在主存储器中存储所有的模型几何图形。替代地,将几何图形存储在磁盘上并且将当前和预测的视点位置用于指导推测预取处理,其动态地加载增量 PVS数据和模型几何图形数据。使用对象重排序方案来将模型几何图形存储在磁盘上,该对象重排序方案通过将往往一起预取的对象一起存放在磁盘上以减小磁盘访问次数。还将增量PVS数据存储在磁盘上。对于具有130万个三角形和500,000个视单元的动力装置模型,需要7GB的存储空间来存储增量PVS对象ID。
在运行时间,Vold实施能够对过大而不能存储在主存储器上的模型进行实时渲染。因为在Vlod实施中渲染的模型没有纹理化,所以该方法没有解决纹理信息的存储与动态预取。在大多数现代的漫游应用中如游戏,对于模型的纹理信息的量通常远大于几何图形信息的量。
Vlod系统是核外(out-of-core)实时渲染系统的示例,该系统使用基于所预计算的从区看去的可见性的几何图形预取。Funkhouser的该方法的较早的示例(DatabaseManagement for Interactive Display of Large Architectural Models,Proceedingsof the conference on Graphics interface'96Toronto,Ontario,Canada Pages:1-8Year of Publication:1996ISBN:0-9695338-5-3,其全部内容通过引用合并到本申请中)使用了通过入口序列方法来计算的几何图形PVS数据。该实施还使用无织构的几何图形,并且与Vold一样,没有解决纹理信息的预取。
其他外存方法使用基于运行时间保守的从点看去的可见性方法的预取(例如,优先层投影算法或PLP),其用于确定从视点看去可见的模型的保守子集(IWALK、MMR)。在该方法的一种变型中,基元重投影的处理用于直接地识别由于视点运动而变得新近暴露的模型几何图形(美国专利No.6111582,Jenkins)。这些从区看去的可见性方法必须在运行时间计算,因此增加了总体运行时间计算成本。
核外渲染系统的目标是使得能够对不能适于核心存储器的非常大的、详细的环境进行不中断的勘察。被有效地实施后,该流处理方法能够消除由传统的加载方案所引起的经常性中断,在传统的加载方案中,在下一关卡达到之前加载环境的整个部分(例如,关卡)。将负载的3D模型彻底地细分成不同的“层次”简化了图形信息的加载和显示,同时强迫用户去体验一系列拆散的位置,这些位置由经常打断体验的连贯性的加载时间分离。
辅助存储器与核之间的可用数据传输是对于流处理实施的明显限制因子(BradBulkley,"The Edge of the World"Game Developer Magazine June/July 2006pg.19,其全部内容通过引用合并到本申请中)。增量PVS 存储方案能够充分地减小流处理预取数据所需的传输速率。当前的增量 PVS实施不提供管理纹理信息的方法。此外,它们使用粗粒度的单元到对象或单元到场景图形-单元PVS数据,使用导致高估PVS/增量PVS数据的不精确的从区看去的可见性预计算来计算上述数据。如果增量PVS 数据导致预取处理超过辅助存储器与内存之间的传输速率,则可以产生可见性误差。
相比现有的方法,能够确定被遮挡的多边形分段和纹理的从区看去的可见性预计算方法可以产生更加精确的单元到多边形PVS/增量PVS。这可以减小支持流处理预取所需的传输速率并且还可以通过减小透支来增强显示硬件的性能。
背景技术部分的结论
根据前述对现有技术的分析明显的是,现有的从区看去的可见性预计算方法使用:a)产生不精确PVS解的不精确可见性事件边界,或b)必须在五维线空间中计算的精确可见性事件面。这样的线空间计算引起高的计算成本和算法复杂度并且难以鲁棒地实施。此外,对于多面体对象的单一收集,一些精确的从区看去的可见性事件面是通过较简单的线性化极值本影边界来很好地近似;而其他则不是。这使得精确的方法从以下方面来讲对详细输入过度地敏感:典型的多面体模型的一些区中,可以花费大量的计算来计算很少量的遮挡。
因此,对原始空间中的保守线性化本影事件面进行识别的一般PVS 确定方法估计这些面从精确事件面的偏离,并且自适应地细化这些面以更加精确地近似精确的表面,与现有方法相比,上述方法能够以提高了的精确度和减小了的计算成本来进行从区看去的可见性预计算。
这种实际的精确度控制的PVS确定方法可以结合增量PVS和减少存储成本并且有利于基于可见性的流预取的中间表示来使用。因为初始地仅传输在用户的初始位置附近可见的几何图形、纹理和其他图形元素,所以该基于可见性的流预取方法会使得用户能够很快地开始与大的有纹理的 3D模型的交互。该初始数据通常是对于建模环境的整个图形数据库的一小部分。与例如不指定有效的基于可见性的预取流处理方法的MPEG-4 部分11(VRML或X3D)等现有方法相比,该方法可明显地减少针对交互的等待时间。这样的现有方法通常要求在交互开始前加载整个数据库,或可替代地,在用户导航期间遭受可见性误差(例如,对象的突然出现)。
发明内容
在示例性实施方式中,方法确定了从具有多个视区顶点的视区看去可见的网格多边形或网格多边形的分段的集合,网格多边形形成多边形网格。该方法包括确定视区与多边形网格之间的至少一个支撑多边形。该方法进一步包括根据所述至少一个支撑多边形来构造至少一个楔,所述至少一个楔远离视区而延伸从而超出至少多边形网格。此外,所述方法包括确定网格多边形与楔的一个或多个相交部。另外地,该方法包括使用所确定的至少一个楔与网格多边的一个或多个相交部来确定从视区看去可见的网格多边形或网格多边形的分段的集合。
在示例性实施方式中,提出的方法用于接收从具有多个视区顶点的视区看去可见的网格多边形或所述网格多边形的分段的集合,所述网格多边形形成多边形网格。该方法包括接收从所述视区看去可见的所述网格多边形或所述网格多边形的分段的集合,网格多边形的所述集合是根据至少一个楔与所述网格多边形的一个或多个相交部来确定的,所述至少一个楔入射在一阶轮廓边上,并且所述至少一个楔是根据所述视区与所述多边形网格之间的至少一个支撑多边形来构造的。该方法进一步包括对所述接收的从所述视区看去可见的网格多边形或所述网格多边形的分段的集合进行显示。
在示例性实施方式中,系统确定从具有多个视区顶点的视区看去可见的网格多边形或所述网格多边形的分段的集合,所述网格多边形形成多边形网格。该系统包括具有配置成确定所述视区与所述多边形网格之间的至少一个支撑多边形的处理器。该处理器还被配置成根据所述至少一个支撑多边形来构造至少一个楔,所述至少一个楔远离所述视区而延伸从而超出至少所述多边形网格。该处理器还被配置成确定所述楔与所述网格多边形的一个或多个相交部。该处理器还被配置成使用所述确定的所述多边形网格与所述至少一个楔的一个或多个相交部来确定从所述视区看去可见的所述网格多边形或所述网格多边形的分段的所述集合。该系统还包括用于对从所述视区看去可见的所网格多边形或所述网格多边形的分段的所述集合进行显示的客户端设备。
在示例性实施方式中,非瞬态计算机可读存储介质具有存储在其上的可执行指令,当由处理器执行所述可执行指令时,所述可执行指令使得处理器执行确定从具有多个视区顶点的视区看去可见的网格多边形或所述网格多边形的分段的集合的方法,其中,网格多边形形成多边形网格。该方法包括确定视区与多边形网格之间的至少一个支撑多边形。该方法进一步包括根据至少一个支撑多边形来构造至少一个楔,至少一个楔远离视区而延伸从而超出至少多边形网格。此外,该方法包括确定楔与网格多边形的一个或多个相交部。另外地,该方法包括使用所确定的多边形网格与至少一个楔的一个或多个相交部来确定从视区看去可见的网格多边形或网格多边形的分段的集合。
在示例性实施方式中,方法确定从视区看去可见的网格多边形或网格多边形的分段的集合,网格多边形形成多边形网格。该方法包括确定入射在网格多边形上的至少一个从视区看去的遮挡边界,至少一个从视区看去的遮挡边界具有未遮挡侧和被遮挡侧。该方法进一步包括确定添加到从视区看去可见的网格多边形或网格多边形的分段的集合的网格多边形的数目,通过在未遮挡侧上至少一个从视区看去的遮挡边界与多边形网格之间的相交处对相交的多边形网格的表面进行重新划分来添加网格多边形。另外,该方法包括确定被至少一个从视区看去的遮挡边界遮挡的网格多边形的数目。此外,该方法包括:当确定了所添加的网格多边形的数目超过了被遮挡的网格多边形的数目预定阈值时,移除至少一个从视区看去的遮挡边界。
在示例性实施方式中,方法接收从具有多个视区顶点的视区看去可见的网格多边形或所述网格多边形的分段的集合,所述网格多边形形成多边形网格。该方法包括接收从所述视区看去可见的所述网格多边形或所述网格多边形的分段的集合。网格多边形的集合不包括从从所述视区看去可见的网格多边形或所述网格多边形的分段的所述集合移除的至少一个从视区看去的遮挡边界,所述至少一个从视区看去的遮挡边界具有未遮挡侧和被遮挡侧。当确定了添加到网格多边形或所述网格多边形的分段的所述集合的网格多边形的数目超过了被所述至少一个从区看去的遮挡边界遮挡的网格多边形的数目预定阈值时,将至少一个遮挡边界从从所述视区看去可见的网格多边形或所述网格多边形的分段的所述集合移除。通过在所述未被遮挡侧上多边形网格与所述至少一个从视区看去的遮挡边界之间的相交处重新划分所述相交的多边形网格的表面来添加上述数目个网格多边形。该方法进一步包括对从所述视区看去可见的网格多边形或所述网格多边形的分段的所述集合。
在示例性实施方式中,系统确定从视区看去可见的网格多边形或所述网格多边形的分段的集合,所述网格多边形形成多边形网格。该系统包括具有配置成确定在所述网格多边形上入射的至少一个从视区看去的遮挡边界的处理器的解码器,所述至少一个从视区看去的遮挡边界具有未遮挡侧和被遮挡侧。该处理还被配置成确定所添加到从所述视区看去可见的网格多边形或所述网格多边形的分段的所述集合的网格多边形的数目,通过在所述未被遮挡侧上多边形网格与所述至少一个从视区看去的遮挡边界之间的相交处重新划分所述相交的多边形网格的表面来添加所述网格多边形。该处理器还被配置成确定被所述至少一个从视区看去的边界遮挡的网格多边形的数目。该处理器还被配置成:当所添加的网格多边形的所述数目超过了被遮挡的网格多边形的所述数目预定阈值时,移除所述至少一个从视区看去的遮挡边界。该系统还包括客户端设备,所述客户端设备对从所述视区看去可见的网格多边形或所述网格多边形的分段的所述集合进行显示。
在示例性实施方式中,非瞬态计算机可读介质具有存储在其上的可执行指令,当由处理器执行所述可执行指令时,所述可执行指令使得处理器执行确定从视区看去可见的网格多边形或所述网格多边形的分段的集合的方法,所述网格多边形形成多边形网格。该方法包括确定入射在网格多边形上的至少一个从视区看去的遮挡边界,所述至少一个从视区看去的遮挡边界具有未遮挡侧和被遮挡侧。该方法进一步包括对所添加到从视区看去可见的网格多边形或网格多边形的分段的集合中的网格多边形的数目进行确定,通过在未遮挡侧上网格多边形与至少一个从视区看去的遮挡边界之间的相交处重新划分相交多边形网格的表面来添加网格多边形。此外,该方法包括确定被所述至少一个从视区看去的遮挡边界遮挡的网格多边形的数目。此外,该方法包括:当所添加的网格多边形的数目超过了被遮挡的网格多边形的数目预定阈值时,移除所述至少一个从视区看去的遮挡边界。
在示例性实施方式中,方法确定从具有多个顶点的视区看去可见的网格多边形或网格多边形的分段的集合,网格多边形形成多边形网格。该方法包括遍历来自所述网格多边形的集合中的至少一个网格多边形并且当遇到至少一个一阶轮廓边时停止所述遍历。该方法进一步包括构造所述一阶轮廓边上的至少一个楔。此外,该方法包括确定所述至少一个楔与来自网格多边形的集合中的另一个网格多边形的至少一个相交部。该方法进一步包括确定所述至少一个相交部是否为从视区看去的遮挡边界。该方法还包括当确定了所述至少一个相交部是从视区看去的遮挡边界时,在从视区看去的遮挡边界的未被遮挡侧上继续遍历。
在示例性实施方式中,方法接收从具有多个顶点的视区看去可见的网格多边形或所述网格多边形的分段的集合,所述网格多边形形成多边形网格。该方法包括在客户端设备处接收从所述视区看去可见的网格多边形或所述网格多边形的分段的所述集合。根据包括有以下处理的遍历方法由编码器来确定所接收的集合:遍历来自网格多边形的所述集合中的至少一个网格多边形,当遇到至少一个一阶轮廓边时中止遍历,在所述一阶轮廓边上构造至少一个楔,确定所述至少一个楔与来自网格多边形的所述集合中的另一个网格多边形的至少一个相交部,确定所述至少一个相交部是否为从视区看去的遮挡边界,并且当所述至少一个相交部是从视区看去的遮挡边界时,在所述从视区看去的遮挡边界的未遮挡侧上继续所述遍历。该方法进一步包括通过所述客户端设备对从所述视区看去可见的网格多边形或所述网格多边形的分段的所述集合进行显示。
在示例性实施方式中,系统确定从具有多个顶点的视区看去可见的网格多边形或所述网格多边形的分段的集合,所述网格多边形形成多边形网格。该系统包括具有配置成遍历来自网格多边形的所述集合中的至少一个网格多边形的处理器。该处理器还被配置成当遇到至少一个一阶轮廓边时中止所述遍历。该处理器还被配置成在所述第一轮廓边上构造至少一个楔。该处理器还被配置成确定所述至少一个楔与来自网格多边形的所述集合中的另一个网格多边形的至少一个相交部。该处理器还被配置成确定所述至少一个相交部是否为从视区看去的遮挡边界。该处理还被配置成当确定了所述至少一个相交部为从视区看去的遮挡边界时在所述从视区看去的遮挡边界的未被遮挡侧上继续所述遍历。该系统还包括用于显示从视区看去可见的网格多边形或所述网格多边形的分段的集合的客户端设备。
在示例性实施方式中,非瞬态计算机可读存储介质具有存储在其上的指令,当由处理器执行所述指令时,所述指令使得该处理器进行确定从具有多个顶点的视区看去可见的网格多边形或所述网格多边形的分段的集合的方法,所述网格多边形形成多边形网格。该方法包括遍历来自网格多边形的集合中的至少一个网格多边形并且当遇到至少一个一阶轮廓边时中止所述遍历。该方法进一步包括在所述一阶轮廓边上构造至少一个楔。此外,该方法包括确定所述至少一个楔与来自网格多边形的所述集合中的另一个网格多边形的至少一个相交部。该方法进一步包括确定所述至少一个相交部是否为从视区看去的遮挡边界。该方法进一步包括当确定了所述至少一个相交部是从视区看去的遮挡边界时在所述从视区看去的遮挡边界的未被遮挡侧上继续所述遍历。
在示例性实施方式中,方法确定并存储描述第一网格多边形集合的信息,所述网格多边形形成多边形网格,第一网格多边形集合从第一视区看去可见。该方法包括确定并存储从第二视区看去可见的第二网格多边形集合,第二视区包含第一视区。该方法进一步包括确定并存储指示至少一个网格多边形的信息,所述至少一个网格多边形属于相连网格多边形集合,所述相连网格多边形集合从第一视区看去可见。该方法还包括确定并存储表示所述至少一个相连网格多边形集合的至少一个边界边的信息。
在示例性实施方式中,方法使用所存储的信息来确定第一网格多边形集合,所述网格多边形形成多边形网格,第一网格多边形集合来自从第一视区看去可见的所述网格多边形。该方法包括检索从第二视区看去可见的第二网格多边形集合,所述第二视区包含所述第一视区。该方法进一步包括检索指示至少一个第一网格多边形的信息,所述至少第一网格多边形属于相连网格多边形集合,所述相连网格多边形集合从所述第一视区看去可见。该方法进一步包括检索指示所述至少一个相连网格多边形集合的至少一个边界边。该方法还包括遍历属于所述第二网格多边形集合的所述至少一个相连网格多边形集合。所述遍历包括:在所述至少一个第一网格多边形处开始所述遍历并且当在所述遍历期间遇到所述至少一个边界边时中止所述遍历。
在示例性实施方式中,系统确定并存储描述第一网格多边形集合的信息,所述网格多边形形成多边形网格,所述第一网格多边形集合从第一视区看去可见。该系统包括具有配置成确定从第二视区看去可见的第二网格多边形集合的处理器的解码器,所述第二视区包含所述第一视区。该处理器还被配置成确定指示至少一个网格多边形的信息,所述至少一个网格多边形属于相连网格多边形集合,所述相连网格多边形集合从所述第一视区看去可见。该处理器还被配置成确定指示所述至少一个相连网格多边形集合中的至少一个边界边的信息。该系统还包括存储所述第二网格多边形集合、所述指示所述至少一个网格多边形的信息和所述指示所述至少一个边界边的信息的数据库。
在示例性实施方式中,非瞬态计算机可读存储介质具有存储在其上的可执行指令,当由处理器执行所述可执行指令时,所述可执行指令使得所述处理器执行确定并存储描述第一网格多边形集合的方法,所述网格多边形形成多边形网格。该方法包括确定并存储从第二视区看去可见的第二网格多边形集合,第二视区包含第一视区。该方法进一步包括确定并存储指示至少一个网格多边形的信息,所述至少一个网格多边形属于相连网格多边形集合,相连网格多边形集合从第一视区看去可见。该方法还包括确定并存储表示所述至少一个相连网格多边形集合的至少一个边界边的信息。
在示例性实施方式中,在服务器上进行用于控制将图形信息发送到到客户端设备的导航预取发送的方法,所述图形信息包括从第二视区看去可见而从第一视区看去不可见的第一组图形信息,并且所述图形信息包括从第二视区看去可见而从第一视区看去不可见的第二组图形信息,第二组图形信息的细节层次低于第一组图形信息的细节层次。该方法包括确定第一时段,在第一时段期间,第一组图形信息将在客户端设备被安排访问客户端设备上的第一组图形信息之后到达。该方法进一步包括在第一时段期间发送第二组图形信息。
在示例性实施方式中,在客户端设备上执行控制图形信息从服务器设备的基于导航的预取接收的方法,所述图形信息包括从第二视区看去可见而从第一视区看去不可见的第一组图形信息。该方法包括确定第一时段,在第一时段期间,第一组图形信息将在客户端设备被安排访问客户端设备上的第一组图形信息之后到达。该方法进一步包括在所述第一时段期间接收调节信息,所述调节信息用于减小视点速度。
在示例性实施方式中,系统对图形信息的基于导航的预取发送进行控制,所述图形信息包括从第二视区看去可见而从第一视区看去不可见的第一组图形信息,并且所述图形信息包括从所述第二视区看去可见而从第一视区看去不可见的第二组图形信息,第二组图形信息的细节层次低于第一组图形信息的细节层次。该系统包括具有配置成执行以下操作的处理器的服务器:确定第一时段,在第一时段期间,第一组图形信息将在客户端设备被安排访问客户端设备上的第一组图形信息之后到达。该处理器还被配置成在第一时段期间发送第二组图形信息。该系统进一步包括用于显示第二组图形的客户端设备。
在示例性实施方式,非瞬态计算机可读存储介质具有存储在其上的可执行指令,当由服务器中的处理器执行所述可执行指令时,所述可执行指令使得该处理器进行用于对图形信息向客户端设备的基于导航的预取发送进行控制的方法,所述图形信息包括从第二视区看去可见而从第一视区看去不可见的第一组图形信息,并且所述第二图形信息包括从所述第二视区看去可见而从所述第一视区看去不可见的第二组图形信息,第二组图形信息的细节层次低于第一组图形信息的细节层次。该方法包括确定第一时段,在第一时段期间,第一组图形信息将在客户端设备被安排访问客户端设备上的第一组图形信息之后到达。该方法进一步包括在第一时段期间发送第二组图形信息。
从而,至少一种实施方式具有下面的目标和优点。下面的目的和优点的列表不穷尽性的而是用于强调一种实施方式的仅仅一些目的和优点。
一个目的是提供一种确定以下各项的方法:a)从视单元的集合中的每个单元看去潜在地可见的图形基元集,以及b)从视单元集合中的每个单元看去潜在地可见的部分地被遮挡的基元的部分。
有利地,相比通过可见性预计算的现有方法确定的单元到单元或单元到基元的PVS,通过确定部分地可见的基元的被遮挡部分,所导致的潜在可见集(PVS)更加精确。
另一个目的是提供一种不需要对所表示的数据库进行BSP自动分割的确定PVS的方法。
本发明的优点是,本发明能够应用于BSP自动划分是不切实际的复杂模型。
又一个目的是提供不需要将问题转换到线空间的确定PVS的方法。
有利地,通过原始空间中的解决办法,本方法避免了以下计算成本与鲁棒性问题:可见性预计算的线空间方法所需的较高维度的构造立体几何运算和二次规划。
又一个目的是提供使用从视单元看去的可见性预计算技术来确定 PVS的方法,所述可见性预计算技术使用了保守的线性化本影事件面,其为精确的事件面或保守性地近似于精确的事件面(其可以是二次曲面)。
有利地,可以使用简单的测试来确定具体的线性化本影事件面与对应的精确的本影事件面的偏差。进一步有利地,本方法包括可以用于自适应地细化保守的线性化本影事件面的一阶背投影法以使得保守的线性化本影事件面会聚在可以是二次的精确的事件面上。还进一步有利地,在不引起明确地计算二次曲面的计算复杂性的情况下可以实现该精度。
又一个目的是提供一种采用对二次边-边-边可见性事件面的多边形近似来确定PVS的方法。
有利地,相比通过仅使用平面顶点-边可见性事件面的基于阴影的可见性预计算方法所产生的PVS,实施方式方式所产生的PVS更加精确。
又一个目的是提供一种识别保守性线性化本影事件面的确定PVS的方法,对这些面与精确的事件面的偏差进行估计,并且对保守的线性化本影事件面进行细化以更加精确地近似精确的事件面。
有利地,通过仅当近似的保守的解明显地偏离精确的解时才对保守的解进行细化,该方法的精度可以与现有的精确的从区看去的可见性方法的精度相当,并且成本较低。
又一个目的是提供以下的一种确定PVS的方法:通过对由二次事件面和多边形事件面所产生的本影体积的最大差进行估计并且细化多边形近似以实现期望的精度,来控制对二次可见性事件面的多边形近似的精度。
有利地,对二次曲面的多边形近似的复杂度直接反映了所近似的二次曲面的非线性或“歪斜”。
又一个目的是提供将可见性计算组织为有效的从前到后的多边形网格遍历算法,其将限制被遮挡的几何图形的处理。
本发明的优点是:通过实施从前到后的网格遍历,当遇到遮挡边界时构造遮挡边界以及在遮挡边界处终止遍历,该方法实现了对于密集遮挡环境的输出敏感性性能。
又一个目的是提供以下PVS确定方法:不依赖于凸遮挡物的存在而是直接利用在流形(manifold)网格的连通性中固有的遮挡连贯性,不考虑网格的形状。
优点是:相比例如体积可见性、扩展投影和依赖于在现实模型中不常见的大的凸遮挡物的Weiler-Atherton算法等,该方法在识别遮挡方面更加有效。
又一个目的是通过对相邻单元的PVS中的差进行编码来表示针对每个可见性单元的PVS信息。
优点是:将PVS信息表示为邻近单元的PVS的差(增量PVS)利用了3D场景的自然空间可见连贯性,因此明显地减小了针对PVS信息的存储要求和支持流预取所需的数据传递速率。
又一个目的是利用中间的增量PVS表示,其通过存储表示哪个(从视单元看去的轮廓)边在视单元过渡期间产生导致明显遮挡或暴露的本影边界的信息来对视单元之间的PVS的差进行编码。
优点是:存储对于明显地遮挡/暴露的轮廓边减小了增量PVS存储要求并且使得能够通过现有的(从邻接的或包含的视单元看去的)遍历对增量PVS数据或PVS数据进行迅速的实时构造。
又一个目的是提供以下图形显示的客户端-服务器方法:服务器存储所有的图形基元及相关联的面信息(如,纹理信息),包括有模型以及PVS 数据和增量PVS数据;并且客户端仅存储从可从当前视点达到的视单元的集合的显示所需的模型信息的子集。客户端模型信息是通过对编码为与视单元边界对应的增量PVS分组的新近可见/不可见的几何图形和纹理信息进行动态预取来维护的。
优点是:提供了在交互漫游应用期间的图像内容的基于可见性的按需流传送方法,其不需要现有技术的基于图像压缩的流传送方法所需的低延迟连接。
另外的优点是:提供了在交互漫游应用期间的图像内容的基于可见性的按需流传送方法,相比现有技术的基于图像压缩的流传送方法所需的带宽,该方法需要明显地较小的带宽以高的分辨率传送交互。
又一个目的是通过在服务器上维护已经呈现在客户端上的几何图形和面信息的集合以及通过在预取期间检查该信息以消除冗余传输,来充分地减小将增量PVS数据提供给客户端的带宽。
又一个目的是通过以几何图形和面细节的若干层次将模型信息存储在服务器上并且在低时空可见连贯性(例如,新近可见的面暴露的高速率) 的时段期间传输较低的细节层次信息以及在较高时空可见连贯性的时段期间传输较高的细节层次信息。
优点是:在低的时空可见连贯性的时段期间传输相对地低的细节层次上新近可见的模型信息充分地减小了在这些另外的“峰值”带宽需求时期提供增量PVS信息所需的带宽,同时,由于在人类视觉灵敏度在低时空连贯性的时段期间被降低并且尤其对于新近暴露的面被降低,所以产生了感知上无损的图像流。
优点是:在高时空可见连贯性的时段期间传输处于相对地高的细节层次上的新近可见模型信息使得能够有效地利用这些另外的“贯穿”带宽需求时段期间的可用带宽,同时,通过在与人类视觉系统完全地分辨所添加的细节所需的时间匹配的时间段内使用较高细节层次信息来取代较低细节层次信息,来产生感知上无损的图形流。
又一个目的是提供一种图形显示的核外(out-of-core)的方法:辅助存储器存储于所有的图形基元和包括模型及PVS数据的相关联的面信息 (例如,纹理信息);以及核存储器仅存储用于从可从当前视点到达的视单元的集合的显示所需的模型信息的子集。核存储器模型信息是通过对新近可见/不可见的几何图形以及被编码为与视单元边界对应的增量PVS分组的纹理信息的动态预取来维护的。
优点是实施方式提供了排除了以下需求的基于可见性流预取的一般方法:手动地将建模的数据库任意地划分成不同的层次或子层次,这些不同的层次一次必须加载一个,基于通过层次设计者手动地布置在模型中的事件或位置触发器来将上述子层次流处理到内核存储器。
本发明另外的优点是:通过提供良好粒度的基于可见性的预取流处理,该方法有利于设计以下游戏和仿真模型数据库:通过有意构造的可见性“瓶颈”其会更加连续和没有负担,并且其不会产生由流处理粗粒度子层次数据引起的用户体验停顿。
又一个目的是通过以多个几何图形和面细节的多个层次来将模型信息存储在辅助存储器中并且在低时空可见连贯性(例如,新近可见的面暴露的高速率)的时段期间传输较低的细节层次信息以及在较高的时空可见连贯性的时段期传输较高细节层次信息,来充分地减小将增量PVS数据传输到核外渲染系统中的核存储器所需的带宽。
优点是:在低的时空可见连贯性的时段期间传输处于相对地低的细节层次的新近可视模型信息充分地减小了在这些另外的“峰值”带宽需求时段期间提供增量PVS信息的带宽,同时,由于人类视觉敏感度一般在低的时空连贯性的时段期间被减小并且尤其针对新近暴露的面尤其被减小,所以产生了感知上无损的图像流。
其他优点根据本发明的说明书是很明显的。
附图说明
图1是示出了使用旋转和扫掠方法来在一阶轮廓网格轮廓边处或顶点处构造保守的线性化本影事件面或楔的自上而下的组织的示例性流程图;该流程图示出了通过构造对应的SE-ME楔来明确地识别和管理平行的支撑视单元边和轮廓边的退化情况;
图2A是示出了视单元和具有入射在两个一阶轮廓边上的一阶楔的两个多边形网格的示例性图;
图2B是示出了视单元和具有从轮廓边看去的(背投影)一阶楔和对应的高阶从视单元看去的(正投影)楔的两个多边形网格的示例性图;
图3是示出了识别一阶从区看去(在该情况下从视单元看去)的轮廓边的方法的示例性流程图;图3示出了图1中的步骤110的细节;
图4A是示出了构造入射在网格轮廓边上的SV-ME支撑多边形的方法的示例性流程图;图4A给出了在图1的步骤116中示出的处理的附加细节;
图4B示出了网格对象M1、视单元和具有它们各自的旋转角度的两个候选支撑多边形;
图4C示出了用于确定形成在一阶轮廓边和视单元顶点之间的多边形是否为支撑多边形的测试的示例性流程图;
图4D1是示出了具有一致的顶点排序的两个网格多边形的示例性图;
图4D2是示出了具有不一致的顶点排序的两个网格多边形的示例性图;
图5A是示出了对入射在内侧拐角网格轮廓顶点上的SE-MV扫掠三角形进行构造的方法的示例性流程图;
图5B是图5A的继续;
图5C是示出了用于确定形成在内侧拐角一阶轮廓顶点和视单元边之间的多边形是否为支撑多边形的测试的示例性流程图;
图6A是示出了根据对应的SV-ME和SE-ME支撑多边形来构造 SV-ME和SE-ME楔的方法的示例性流程图;
图6B是示出了根据对应的SE-MV支撑多边形构造SE-MV楔的方法的示例性流程图;
图7A是示出了凸视单元和非凸多边形网格的示例性图,网格的一阶从视单元轮廓边看去用粗实线示出,本图是沿着从视单元朝着多边形网格的总体方向来看的透视图;
图7B1是示出了与图7A中的对象相同的对象的示例性图,但是本图是沿着从多边形网格朝着视单元的总体方向来看的透视图;
图7B2是示出了与图7B1所示的多边形网格不同的多边形网格,并且示出了网格的不是一阶轮廓边的内侧拐角边;
图7C1是示出了对于一阶轮廓边A和B的支撑多边形的示例性图,本图是沿着从视单元朝着网格对象的总体方向来看的透视图;
图7C2是示出了对于一阶轮廓边A和B的支撑多边形和对应的源顶点-网格边(SV-ME)楔的示例性图,本图是沿着从视单元朝着网格对象的总体方向来看的透视图;
图7C3是仅示出了根据对应的支撑多边形的边的延伸来形成的 SV-ME楔的示例性图;
图7D1是示出了与图7C所示的对象相同的对象的示例性图,但是本图是从网格对象朝着视单元的总体方向来看的透视图;
图7D2是示出了与图7C1所示的对象相同的对象的示例性图,但是本图是从网格对象朝着视单元的总体方向来看的透视图;
图7D3是示出了与图7C2所述的对象相同的对象的示例性图,但是本图是从网格对象朝着视单元的总体方向来看的透视图;
图7D4是示出了与图7D3所示的多边形网格和视单元相同的多边形网格和视单元并且示出了在一阶轮廓周线的外侧拐角顶点处相交的两个旋转楔的隐藏图;
图7D5是示出了与图7D4所示的多边形网格和视单元以及有限的旋转楔相同的多边形网格和视单元以及有限的旋转楔的隐藏图,但是是以不同的视角;
图8A1是示出了由标记为A和B的一阶轮廓边共享的内侧拐角顶点上的扫掠三角形(SE-MV支撑多边形)的示例性图;本图是是沿着从视单元朝着多边形网格对象的总体方向来看的透视图;
图8A2是示出了由标记为A和B的一阶轮廓边共享的内侧拐角顶点上的扫掠三角形(SE-MV支撑多边形)和对应的SE-MV楔的示例性图。本图是沿着从视单元朝着多边形网格对象的总体方向来看的透视图;
图8A3是示出了由标记为A和B的一阶轮廓边共享的内侧拐角顶点和对应的SE-MV楔的示例性图;本图是沿着从视单元到多边形网格对象的总体方向来看的透视图;
图8A4是示出了入射在轮廓边A和B上的包括两个SV-ME楔和单个SE-MV楔的一阶楔的示例性图,所有这些楔在标记为ICSV的内侧拐角轮廓顶点处相交。本图是沿着从视单元到多边形网格对象的总体方向来看;
图8B1是示出了与图8A1所示的对象相同的对象的示例性图,但是本图是沿着从网格对象朝着视单元的总体方向来看的透视图;
图8B2是示出了与图8A2所示的对象相同的对象的示例性图,但是本图是沿着从网格对象朝着视单元的总体方向来看的透视图;
图8B3是示出了与图8A3所示的对象相同的对象的示例性图,但是本图是沿着从网格对象朝着视单元的总体方向来看的透视图;
图8B4示出了入射在轮廓边A和B上的包括两个SV-ME楔和单个 SE-MV楔的一阶楔的示例性图,所有这些楔在标记为ICSV的内侧拐角轮廓顶点处相交;本图是沿着从多边形网格朝着视单元的总体方向来看的透视图;
图8C是示出了入射在轮廓边A和B上的一阶本影边界的示例性图,本图是沿着从视单元到网格对象的总体方向来看的透视图;
图9A是示出了由现有技术的Teller(1992)方法构造的入射在轮廓边A和B上的一阶本影边界的示例性图,本图是沿着从视单元朝着网格对象的总体方向来看的透视图;
图9B是示出了与图9A所示的对象相同的对象的示例性图,但是本图是沿着从网格对象朝着视单元的总体方向来看的透视图;
图9C是示出了由本方法产生的相比由现有技术的Teller方法产生的本影边界更加精确的本影边界的示例性图,本图是沿着视单元朝着网格对象的总体方向来看的透视图;
图9D是示出了与图9C所示的对象相同的对象的示例性图,但是本图是沿着从网格对象朝着视单元的总体方向来看的透视图;
图10A是示出了由对于若干相邻的一阶轮廓边的UBP的相交形成的本影边界面的一些附加UBP的示例性图,本图是沿着从视单元朝着网格对象的总体方向来看的透视图;
图10B是与图10A所示的多边形网格和视单元相同的多边形网格和视单元的视图,但是示出了形成PAU的一组UBP。
图11A是示出了在复合轮廓周线的情况下由本旋转与扫掠方法生成的一阶可见性事件面(楔)的示例性图;
图11B是与图11A所示的结构相同的结构的不同视图;
图11C示出了使用至少一个高阶旋转楔来在复合轮廓顶点处形成连续线性化本影事件面的一部分;与图2B和图11A的视图相同;
图12是示出了使用楔的旋转和扫掠构造来构造保守的一阶线性化本影不连续性网格的方法的示例性流程图;
图13是示出了在3D网格遍历期间识别和解决交叠循环的处理的示例性流程图;
图14是示出了针对使用2D网格遍历来构造关于楔、从视单元看去的元素2D可见性图的方法的控制处理的示例性流程图;
图15是示出了针对使用2D网格遍历来构造关于楔、从视单元看去的元素2D可见性图的方法的主要遍历处理的示例性流程图;
图16是示出了用于确定2D不连续性网格点是否以别的方式保守地从楔的对应视单元元素(VCE)看去被遮挡的处理的示例性流程图;
图17是示出了对于构造高阶楔线的方法的控制处理的示例性图,上述高阶楔线用于通过背投影法来确定关于视单元边的可见性图;
图18是示出了用于构造高阶楔线的背投影从顶点看去的2D网格遍历主处理的主处理的示例性流程图;
图19是示出了使用3D多边形网格遍历来构造从区看去的可见性图的输出敏感方法的控制处理的示例性流程图;
图20A是示出了使用3D网格遍历来构造保守的线性化从区看去的可见性图的输出敏感方法的主处理的示例性流程图;
图20B是示出了由旋转扫掠方法和相交平面法产生的本影体积的差的在内侧拐角顶点估计的估计值的示例性流程图;该差用于确定在内侧拐角顶点处构造连续本影事件面的方法;
图20C至图20J示出了多边形网格的3D网格遍历的步骤;
图20K是示出了包含其他多边形网格的环绕多边形网格的图;
图21A是确定不连续性网格分段是否从视单元看去以别的方式被遮挡(即,不连续性网格分段是否是从区看去的遮挡边界)的方法的示例性流程图;
图21B是图21A的继续;
图21C是示出了将PVS多边形分类为强可见、非遮挡和始终正面对的方法的示例性流程图;
图22是示出了构造背投影从轮廓边看去的可见性图的3D网格遍历的方法的控制处理的示例性流程图,上述可见性图用于确定从轮廓边看去的可见支撑视单元顶点(VSVV)和可见视单元轮廓周线(VSVSC);
图23是示出了构造背投影从轮廓边看去的可见性图的3D网格遍历的方法的主处理的示例性流程图,上述可见性图用于确定从轮廓边看去的可见支撑视单元顶点(VSVV)和可见支撑视单元轮廓周线(VSVSC);
图24A是示出了确定dm_segment是从轮廓边看去源以别的方式被遮挡的处理的示例性流程图,上述轮廓边源用于使用3D网格遍历来构造从轮廓边看去的可见性图背投影;
图24B是图24A的示例性继续;
图24C是示出了使用从轮廓边看去的背投影可见性图来构造包括与相邻轮廓边对应的VSVS的保守可见支撑视单元轮廓周线(VSVSC)的方法的示例性流程图;
图25是示出了使用一阶楔和高阶楔的点遮挡测试方法的示例性流程图;
图26是示出了使用3D网格遍历根据本影边界多边形(UBP)来构造多面体聚合本影(PAU)的方法的替代实施方式方法的示例性流程图;
图27A是示出了视单元和两个多边形网格对象MESH E和MESH D 的示例性图;图27A示出了一阶从区看去的SV-ME本影楔在以下分段上可能是不精确的:对应的支撑多边形和视单元与支撑一阶轮廓边之间的几何图形相交;
图27B是示出了除以下所述外与图27A的视图相同的视图的示例性图:通过细分一阶轮廓边的对应分段以及使用作为线光源的子分段来进行一阶背投影细化一阶楔的不精确部分;结果是该楔的不精确部分由通过单个SE-MV楔连接的两个SV-ME楔取代,上述单个SE-MV楔和两个 SV-ME楔一起形成了连续的本影面,其更加精确地近似了入射在一阶轮廓边的不精确分段上的实际的二次本影事件面;
图27C是示出了除以下所述外与图27B的视图相同的视图的示例性图:现在通过将一阶轮廓的对应分段细分成4个子分段而不是两个来细化原始一阶楔的不精确部分的细分,以产生对该区中实际的本影事件面(二次曲面)更加精确的近似;
图27D是以不同的视图(从视单元稍微偏后)来示出与图27A所述结构相同的结构的示例性图,其示出了具有分段SE1U和SE1O的一阶轮廓从视单元看去为一阶可见;
图28是示出了通过检查一阶楔与精确楔之间的最大可能偏差以及通过识别一阶楔是不精确的轮廓边的分段来控制从边看去的背投影处理的方法的示例性流程图;
图29是示出了通过检查一阶楔与精确楔之间的最大可能偏差以及通过识别一阶SE-MV楔是不精确的简单和复合的内侧拐角轮廓顶点来控制从边看去的背投影处理的示例性流程图;
图30A是示出了识别具有高的有效静态遮挡(ESO)的可见性图中的从视单元看去被遮挡的区的方法以及保守地简化被遮挡边界和对应的网格轮廓周线两者的处理的示例性流程图;
图30B是图30A的继续;
图30C是图30B的继续;
图30D是示出了视单元和两个多边形网格的3D隐藏线图;
图30E是示出了与图30D的透视图相同的透视图并且包括遮挡区和对应的遮挡边界的3D隐藏线图;
图31A示出了标记轮廓边方法所使用的示例性数据结构;
图31B是图31A的继续;
图31C是图31B的继续;
图31D是示出了对于采用增量G+数据的示例性实施方式的数据结构的图;
图32A是示出了使用对于标记轮廓周线的数据结构来识别轮廓周线的边和顶点的方法的示例性流程图;
图32B是图32A的继续;
图33A是示出了识别对于从视单元A到视单元B的过渡的可见性差增量区的方法的示例性流程图;
图33B是图33A的示例性继续;图33C是图33B的示例性继续;图 33D是图33C的示例性继续;
图34A是示出了使用对于单个周线的标记轮廓周线信息来在运行时间快速地构造可见性图遮挡边界分段的方法的示例性流程图;
图34B是图34A的继续;
图35A是示出了对从标记轮廓周线的单一轮廓边推导出的可见性图遮挡边界分段进行构造的方法的示例性流程图;
图35B是图35A的继续;
图36是示出了对使用根据预存储的标记轮廓周线构造的ROI边界来构造可见性图ROI的运行时间处理进行控制的处理的示例性流程图,其中ROI边界限定定界遍历ROI的简化的、暗示的运行时间3D网格遍历;
图37是使用简化的、暗示的运行时间3D网格遍历处理来根据预存储的标记轮廓周线信息构造ROI和构造用于ROI的连接的组件的种子三角形列表的主处理;
图38是示出了将与对于特定视单元过渡的新近暴露的网格元素对应的增量G+子网格附接至对应的标记轮廓周线的开始边界的方法的示例性流程图;
图39A示出了示例性简单遮挡物;
图39B示出了当从连接的视单元A和B观察时由简单的(图39A的) 遮挡物形成遮挡的示例性增量区(DR);
图40示出了除了以下所述外与图39B所示的统一从区看去的可见性图相同的统一从区看去的可见性图:OCCLUSION REGION VIEWCELL A的位于OCCLUSION REGION VIEWCELLB外部的部分被标记为 DROBA(从B到A的遮挡的增量区)和DREAB(从A到B的暴露的增量区);
图41A是示出了关于楔的可见性方法(图14、图15和图16)的识别CSV并且构造用于SV-ME楔的楔线的用途的示例性图,图41A示出了没有尖端的简单CSV的情况;
图41B是示出了关于楔的可见性方法(图14、图15和图16)的识别CSV并且构造用于SV-ME楔的楔线的用途的示例性图;图41B示出了形成一阶轮廓周线的尖端的退化CSV的情况;
图41C是示出了入射在一阶轮廓边上的与3个多边形网格对象相交的SE-ME楔的示例性绘图,示出了一阶从视单元边看去的楔线(WL) 以及它们与网格多边形的相交部;该图用于说明用来构造关于楔的可见性图(图15及有关的图)的2D网格遍历处理的操作;
图41D是示出了多边形网格、视单元和一阶轮廓周线的包括尖端和复合轮廓顶点的部分的透视图;
图42A是示出了使用层次视单元的方法的示例性流程图;
图42B是示出了使用层次视单元的方法的示例性流程图;
图43A是示出针对使用增量VM/PVS数据的增量VM/PVS维护的数据结构的示例性图;
图43B是图43A的继续;
图44A是示出了支持使用从远程服务器发送的增量VM/PVS(增量 G+子网格)数据的增量VM/PVS维护的数据存储与传输方法的示例性流程图;
图44B是图44A的继续;图44C是图44B的继续;
图45A是示出了支持使用从远程服务器发送的增量VM/PVS(增量 G增量G-子网格)数据的增量VM/PVS维护的数据存储与传输方法的示例性流程图;
图45B是图45A的继续;
图45C是图45B的继续;
图46是示出了分布式客户端-服务器实施的示例性框图/流程图,其中服务器访问所存储的核外增量G子网格数据,将全局ID转换为DDL ID 以及维护服务器和客户端两者上的DDL、VM/PVS数据;
图47是示出了以下布置的示例性框图/流程图:服务器处理和客户端处理位于相同的设备上并且使用DDL的单份拷贝;
图48A是示出了在当前视点很快会穿透还没有读取/发送增量可见信息的视单元边界的情况下发送减少了的细节层次增量可见性信息的服务器处理的示例性框图/流程图;
图48B是示出了通过降低所允许的视点速度来防止可见性事件信息延迟到达的方法的示例性流程图;
图49是示出了暴露时间对人类主体分辨空间细节的能力的影响的示例性图;
图50A是示出了在以下情况下发送减少了的细节层次增量可见性信息的服务器处理的示例性框图/流程图:与增量可见性信息对应的新近可见的几何图形和/或纹理的图像空间速度高到足以使得对于运动几何图形和/或纹理的视觉灵敏度减小;
图50B是示出了在所需的传输带宽超过可用的传输带宽的情况下的发送减少了的细节层次可见性事件信息的服务器处理的替代实施方式的示例性框图/流程图:;
图51是示出了作为视网膜速度的函数的相对的空间视觉灵敏度的示例性图;
图52是示出了以下客户端及服务器处理的示例性流程图/框图:服务器访问预存储的对于父视单元的增量G子网格并且使用该信息来构造用于父视单元的可见性图/PVS,其然后与预存储的对于子视单元过渡的轮廓周线信息一起用于构造用于子视单元过渡的增量G子网格数据;
图53示出了不完全的不连续性网格楔的现有技术绘图;
图54是示出了以下客户端及服务器处理的示例性流程图/框图:客户端接收增量G数据和标记轮廓周线数据并且使用该数据生成PVS和/或增量PVS数据;
图55是用于实施根据本发明的使用保守线性化本影事件面的根据从区看去的可见性确定和增量PVS的内容流处理的系统及方法的示例性示意图;
图56示出了处理器的示例性图;以及
图57示出了一种实施方式中可见性事件编码器、可见性事件服务器和可见性事件客户端之间的关系的示例性图。
具体实施方式
在示例性实施方式中,术语ESO(有效静态遮挡)是指与可见性图的被遮挡区内的多边形(原始网格)的数目和/或这些多边形的表面积成一定正比的度量。ESO还与环绕被遮挡区的可见区中所引入的新多边形的数目成一定反比,上述新多边形是由遮挡边界的边(edge)所导致的重新三角化而被引入的。该度量用于VM或统一VM的保守简化。
在示例性实施方式中,术语EDO(有效动态遮挡)是指与遮挡的增量区(DR)中被遮挡的多边形的数目和/或多边形的面面积成一定正比的量度,其中DR表示在特定的视单元过渡期间所产生的遮挡区。EDO也与环绕DR的可见区中引入的新多边形的数目成一定反比,新多边形是由遮挡边界的边所导致的重新三角化而被引入的。
在示例性实施方式中,术语EDV(有效动态可见性)是指统一可见性图的增量区(DR)的有效性的量度。如果DR为针对特定的视单元过渡的DRO(遮挡的增量区),则EDV对应于DR的EDO。
如果DR为DRE(暴露增量区),则通过检查环绕的遮挡区的ESO来确定EDV。通过环绕的OR的简化以及将DRE的多边形延伸到OR或DRO中继续进行DRE的简化。
在示例性实施方式中,术语统一可见性图是指包括根据两个视单元 (例如A和B)生成的从视单元看去的遮挡边界的可见性图,其中视单元以下列两种方式之一相关联:1)一个视单元完全包含在另一个视单元中,或2)视单元完全地共享一个共用面。统一可见性图为VM区的布置以使得:针对从视单元A到视单元B的过渡,一些区包括新近被遮挡的网格三角形/分段而其他区包括新近暴露的网格三角形/分段。统一可见性图用于构造用于直接存储的增量PVS数据。可替代地,统一可见性图可以用于识别明显地遮挡或明显地的轮廓周线,其可以被标记并且随后用于生成增量G增量G/增量PVS数据。
在示例性实施方式中,术语楔(也参见CLUES)是指由视单元的特征(顶点或边)以及网格多边形的顶点或边所形成的可见性事件面。通常,楔限定了从视单元的特征以及穿过网格多边形的顶点或边看去的可见性。
不连续性网格化的现有技术方法中所采用的楔是精确的。这些边可以是平面或二次曲面。不连续网格文献中所描述的平面楔是这里重命名的两类:
1)SV-ME楔-由视单元(或“源”)的顶点和网格的边所形成。也称为旋转楔或支撑顶点楔。
2)SE-MV楔-由视单元的边和多边形网格的顶点所形成。也称为扫掠楔或支撑边楔。
3)SE-ME楔-在网格轮廓边平行于支撑视单元轮廓边的特定的情况下形成。
这些定义假定正投影(即,使用视单元作为光源)。在背投影方法中,轮廓边或轮廓边的分段用作“源”并且源边与视单元之间的轴中的各种轮廓边支撑背投影事件面。另外,定义对背投影的情况来说是相同的。
由于在不连续性网格化中所采用的楔通常用于识别源半影的部分,这些部分在多边形网格的相对大量的边上被构造,上述边称为从视单元看去的轮廓边。
由于在不连续形网格化中所使用的平面楔是精确的事件面,所以它们没有被限定在以下区:楔的视单元特征(顶点或边)从楔的多边形网格特征看去被遮挡。楔的这个定义产生导致面为不连续的平面事件面中的“间隙”。在完全的不连续性网格化方法中,这些间隙填充有可以是二次曲面楔的高阶可见性事件面。间隙由这些高阶事件面填充,所以结果的可见性事件面通常是连续的。
参见为楔命名法的表Ia和表Ib。
实施方式还采用平面的从特征看去的事件面、与在不连续网格化中所采用的平面楔类似但在重要的方面不同于这些楔的保守的线性化本影事件面(CLUES)。
在不连续性网格化中所使用的平面楔与CLUES(在本说明书中也称为一阶楔,或简单地称为楔)之间的一个差异在于:在本方法中所采用的楔仅是可以形成从视单元看去的本影事件面的那些楔,半影事件本身不考虑在从视单元看去的可见性中。本方法的楔在较少的多边形网格边(称为一阶的轮廓边)上被构造并且使用仅生成潜在的本影的事件楔的扫掠技术来构造他们。这意味着,在本方法中所构造的楔的数目远小于不连续网格化中所生成的楔的数目。
不连续网格化楔与本方法的楔之间的另一个差异在于:楔仅使用楔的视单元特征和楔的多边形网格特征被限定和构造。这两个特征之间的任何居间几何图形将被忽略。
楔构造的这种方法基于多面体环境中的可见性传播的一阶模型,该一阶模型保证构造保守的、连续的本影的边界。
事实上,居间几何图形可以产生视单元特征的从多边形网格特征看去被遮挡的区。这些为楔的其中对应的不连续网格楔未被限定的区(因此在通常由高阶楔或二次曲面填充的事件面中产生间隙或不连续性)。通过忽略这个居间几何图形,本方法构造对不具有间隙的连续的事件面进行限定的楔。由于通过忽略高阶遮挡这种类型构造本方法的楔,楔保守地表示实际的从特征看去的本影的事件面。对于楔的没有居间几何图形的区,由本方法所构造的楔是精确的。
在其中楔是不精确的区中,可选第,楔可以由使用楔构造的修改的方法所构造的其他楔替代,修改的方法解释由居间几何图形所导致的高阶遮挡。
本方法包括三种类型的(一阶)楔:
1)SV-ME楔-通过延伸对应的旋转支撑多边形来形成。对应的旋转的支撑多边形由视单元(SVV)的支撑顶点和多边形网格的一阶轮廓边通过从边到视单元的旋转处理来形成。旋转支撑多边形也称为SV-ME支撑多边形或顶点支撑多边形。这种类型的可见性事件面通过网格的(轮廓) 边反映视单元上的点处的包含和遮挡。也称为旋转的楔。将该旋转处理描述为识别一阶轮廓边和视单元之间的支撑平面的处理。虽然在人类看来处理可以是平面关于轮廓边的实际的连续旋转直到接触到视单元,事实上,实施方式可以测量由每个候选支撑平面(由对应的视单元顶点形成的)与另一多边形所形成的特定的离散角度。在一种实施方式中比较这些角度测量值使得能够根据候选支撑多边形的数目来确定实际的支撑多边形。
2)SE-MV楔-通过将对应的扫掠支撑多边形的边延伸来形成,(也简单地称为扫掠多边形或边支撑多边形),对应的扫掠支撑多边形是由视单元的支撑边和内侧拐角网格轮廓顶点、通过沿着支撑相邻的SV-ME楔的 SVV之间的支撑视单元轮廓周线(SVSC)扫掠的处理所形成的支撑多边形。这种类型的可见性事件面反映(内侧拐角)网格轮廓顶点处有限的视单元的(边界)边上的包含。SE-MV楔也称为扫掠楔。
3)SE-ME楔-仅当支撑视单元边与所支撑的网格轮廓边平行时才形成。通过将在平行的支撑视单元边与所支撑的网格轮廓边之间所形成的对应的SE-ME支撑多边形的边延伸来形成。不同于其他类型的平面楔,对于SE-ME楔的关于楔的可见性确定是从区看去的可见性问题,而不是从点看去的可见性问题。这种类型的可见性事件面通过网格的(轮廓)边反映视单元的(边界)边上的包含和遮挡。
现有技术中的不连续性网格化中所使用的楔与本发明中所使用的那些楔之间的另一重要的差异在于:在本方法中使用关于楔的轮廓顶点被构造为出现在一阶从视单元看去的轮廓边上的保守的方法来确定关于楔的可见性。这确保每个关于楔的轮廓顶点是复合的轮廓顶点(CSV),两个楔(一个楔对应于当前楔)的相交部。相反,在现有技术的不连续性网格化方法中,通常使用从点看去的对象空间可见性方法如Weiler-Atherton 算法来精确地确定关于楔的可见性。
在示例性实施方式中,术语旋转楔是指通过延伸旋转的支撑多边形的边来形成的SV-ME楔。
在示例性实施方式中,术语CLUES(保守的线性化本影事件面)(参见楔)是指使用本发明的旋转和扫掠方法所构造的一阶本影楔的另一名称。可以使用本发明的背投影法细化这些楔以反映高阶可见性交互。
在示例性实施方式中,术语本影边界多边形(UBP)是指作为从视单元看去的本影体积的面的一部分的多边形。在本方法中,可以使用从对应的(一阶)楔导出的保守的UBP来构造从视单元看去的本影体积(称为多面体聚合的本影,或PAU)。
由本方法所使用的楔是从视单元特征看去的本影事件面,其被保证为仅紧邻支撑该楔的网格轮廓边的从视单元看去的本影事件面(从整个视单元看去)。这是因为该楔可以以将从视单元看去的本影边界限制在楔上的方式与超出支撑轮廓边的另一个楔相交。也就是说,从所支撑的视单元特征看去成切线地可见的楔本身可以变得从视单元看去的其他部分可见。
根据对应的高阶楔可以构造高阶UBP。
在示例性实施方式中,术语多边形网格是指根据顶点和边形成的连接的顶点、边和面(也称为多边形)的有限集合。如果网格的两个多边形相交,相交的边或顶点必定是网格的一部分。允许没有面的互相穿透 (interpenetration)。也称为多边形网格对象、三角形网格,或者简单地被称为网格。如果网格的每个边由至多两个多边形共享,则网格为流形多边形网格。如果每个边精确地由两个面共享,则网格为闭合的流形多边形网格。除非另有指明,否则假定本说明书中的多边形网格为闭合的流形多边形网格。
在示例性实施方式中,术语视单元或视区是指可以表示为多边形网格的多面体,其描述了对视点进行限制的区。除非另有指明,否则假定本说明书中的视单元和视区为凸。视单元被限制为平行六面体或盒子,但是可以不必对视区做如此限制。
在示例性实施方式中,术语PVS(潜在可见集)是指从视单元看去可见的多边形或多边形的分段的集合。通常将PVS计算成保守的,包括所有可见的多边形或多边形分段以及一些不可见的多边形或多边形分段。
在示例性实施方式中,术语多面体聚合本影(PAU)是指从视单元看去被网格对象遮挡的空间的体积,假定可见性传播的一阶模型被称为一阶多面体本影体积。由于各个本影体积可以相交以聚合遮挡,我们称这些体积为一阶多面体聚合本影(PAU)。
一阶PAU,也简称为PAU,被称为本影边界多边形或UBP的多边形包围。这些多边形由具有三角形网格多边形的一阶楔与其他楔相交而形成。PAU也由一阶可见网格多边形分段(包括从视单元看去的可见性图的分段)包围。UBP与可见网格多边形分段一起形成限定PAU的边界的连续的(虽然不必是封闭的)本影面。
正如结合3D 2-流形遍历方法(图20以及相关的图)详细描述的:可见性图的构造涉及下述步骤:确定位于关于楔的可见性多义线段实际上是否位于PAU体积内也因此从整个视单元看去被遮挡。该方法包括修改的多面体的点包容性(point-in-polyhedron)测试,该测试可以在没有明确构构造整个PAU的情况下回答针对一阶PAU的这个查询。
在示例性实施方式中,术语不连续性网格(DM)是指由可见性事件面与网格多边形相交所形成的网格。根据入射在视单元上的可见性事件面所形成的不连续网格将网格多边形划分成相对于视单元的统一的定性的可见性或“方面”的分区(区)。
在完全的不连续性网格化的现有技术方法中,对入射在光源上的所有事件面、本影和半影进行构造。
在一些实施方式中,根据一阶从视单元看去的本影可见性事件面或根据已经被细化的一阶本影可见性事件面、通过背投影技术来构造从视单元看去的不连续性网格以解释高阶可见性相互作用。
尽管仅采用本影事件面的事实;但是并不是与有向DM多义线的被遮挡侧毗连的本影DM的所有区实际上都从整个视单元看去被遮挡。这是因为区(其实际上为PAU的一部分)的从视单元看去的状态是由R3 中的可能没在对应的楔-多边形网格相交部中反映处的楔-楔相交部来确定。
在示例性实施方式中,术语可见性图(VM)是指将网格多边形划分成从整个视单元看去被遮挡的区和从视单元上的某个点看去可见的其他区。在精确的从区看去的可见性的现有技术方法(Nierenstein等人2000,2005)中,使用一般为二次曲面的精确的可见性事件面来构造这些分区。
实施方式使用对应的CLUES构造保守的线性化本影不连续性网格。结果的DM是将网格多边形划分成从整个视单元看去被遮挡的区以及从视单元上的某个点看去可见的其他区的保守划分。由于并不是与有向DM 多义线的被遮挡侧毗连的本影DM的所有区实际上都从整个视单元看去被遮挡,所以VM的边界是对应的DM的边界的子集。相比之下,对应的VM仅包括被保证为从整个视单元看去(VM的本影区)被遮挡和从视单元上的某个点看去可见的其他区,其中遮挡可能被保守地低估,从而可见性被高估。
在示例性实施方式中,术语轮廓边是指具有相对于特定位置正面对的一个组件多边形以及相对于同一位置背面对的另一个组件多边形的多边形网格的边。
在示例性实施方式中,术语从点看去的轮廓边是指具有相对于特定的点正面对的一个组件多边形以及相对于同一点背面对的另一个组件多边形的多边形网格的边。
在示例性实施方式中,术语从区看去的轮廓边(也称为一般的从区看去的轮廓边)相对于如用于光源的视单元(或在背投影情况下的多边形网格边)的区来限定。如果位置为视单元,则从区看去的轮廓边可以被称为从视单元看去的轮廓边。如果该区为边,那么从区看去的轮廓边可以被称为从边看去的轮廓边。在本说明书中,任意类型的轮廓边(从点看去、从视单元看去、从边看去)可以简单地被称为轮廓边,轮廓边的类型由上下文暗示出。
从视单元看去的一般的轮廓边是作为针对视单元(或面光源)上的任意点的从点看去轮廓边的多边形网格的任意边。这是由Nierenstein等人 2005所采用的并且在Drettakis等人1994的完全的不连续性网格化方法中的从视单元看去的轮廓边的定义。
一般地,这些边支撑从区看去的半影事件面,但子集实际上支撑通常为二次曲面的从区看去的本影事件面。
当考虑边三元组的高阶可见性交互时,可以精确地限定从区看去的轮廓边。可替代地,如在本方法中,通过仅考虑作为在边对之间的相交结果出现的可见性事件面,可以保守地限定从区看去的轮廓边;正如可见性传播的一阶可见性模型。
在示例性实施方式中,术语一阶轮廓边是指一阶的从视单元看去的轮廓边(也简单地称为一阶轮廓边)是具有相对于整个视单元背面对的一个组件多边形以及相对于视单元的至少一个顶点正面对的另一个组件多边形的多边形网格的边,其中组件多边形相对于彼此背面对。
这个定义是基于多面体环境中的可见性传播的称为一阶可见性的简单的、保守的模式,该模式仅考虑作为在边对之间的相交结果的可见性事件面。
本发明的一种实施方式采用为流形三角形网格的多边形网格。在流形三角形网格中,每个边精确地由两个三角形完全共享。通过使用流形三角形网格来简化一阶轮廓边的说明。
多边形网格的相对于视单元的一阶轮廓边是多边形网格的相对于视单元的局部支撑边。如果在支撑测试中仅考虑视单元和共享边的两个组件多边形(三角形),则局部支撑边支撑视单元与边之间的多边形。(参见支撑测试的定义)
一般地,一阶从区看去的轮廓边为任意多边形网格的精确的从区看去的轮廓边的小子集。
在本说明书中,任意类型的一阶轮廓边(从视单元看去、从边看去) 的任可以被简单地称为一阶轮廓边,或简单地称为轮廓边,轮廓边的类型由上下文来暗示。
本发明包括一种识别(由自适应细化和背投影)哪里的一阶轮廓边是不精确的以及将轮廓边“缩回”到属于多边形网格的精确的从区看去的轮廓边的集合的较近边的方法。
在示例性实施方式中,关于术语局部支撑边,参见一阶轮廓边。
在示例性实施方式中,术语支撑多边形是指由两种结构“支撑”的支撑多边形。在本方法中,在一种情况下,多边形网格的一阶轮廓边与视单元之间的支撑多边形是由该一阶轮廓边和该视单元的顶点来形成 (SV-ME支撑多边形)。视单元支撑多边形的顶点被称为支撑视单元顶点 (SVV)。通过旋转轮廓边的背面组件多边形的平面可以识别支撑视单元顶点,其中,旋转围绕轮廓边发生并且朝着视单元沿着边的背面组件多边形的法线方向直到支撑多边形的平面与视单元相交。在一般情况下,这个相交发生在支撑视单元顶点处,其连同一阶轮廓边形成为三角形的支撑多边形。如果支撑视单元顶点是与网格的轮廓边平行的视单元的边的顶点,那么旋转平面将与视单元的边相交,不只是单个顶点,并且支撑多边形将是由网格轮廓边和相交的视单元边形成的四边形。该第二类支撑多边形被称为SE-ME支撑多边形。
在本方法的另一种情况下,在一阶轮廓边的内侧拐角顶点与视单元 (SE-MV支撑多边形也称为支撑三角形)的边之间形成不同的类型的支撑多边形。
在本发明的上下文中,将支撑多边形保守地限定为由于一阶轮廓边 (也称为局部支撑边)或其顶点以及对应的视单元支撑,忽略一阶轮廓边与视单元之间的任何遮挡或干扰。如果例如由本发明所定义的支撑多边形与一阶边和视单元之间的几何图形相交,则支撑多边形不是如在现有技术中定义的支撑多边形(如果这样的干扰存在,则其一般不能够限定支撑多边形)。
正如现有技术中所定义的,如果多边形由一个结构的顶点或边以及不与其他的任何东西相交的另一结构的顶点或边支撑,那么多边形将通过两个结构之间“支撑测试”(即,是支撑多边形)。支撑测试还要求:支撑多边形的沿着远离第一支撑对象(如,视单元)的方向的延伸(例如,这个扩展是“楔”)以使支撑多边形处于另一支撑的结构的内部(例如,流形网格的拓扑的“内部”)的方式不与另一结构(例如,多边形网格)相交。这种支撑测试有效地要求支撑边是结构(例如,多边形网格)的“外部”边,该结构将支撑多边形成切线地支撑到结构,与如不会将支撑多边形成切线地支撑到结构的多边形网格等结构的“内部”边或反射边。
在本方法中,支撑测试通过仅包括共用网格的边的多边形、以更有限的方式用于确定边是否支撑视单元与网格之间的保守支撑多边形(即,边是否为“局部支撑”或一阶轮廓边,参见一阶轮廓边和局部支撑边的定义)。
在强调将支撑多边形的本保守的定义与支撑多边形的现有技术定义区分开的差异的情况下,可以将本发明定义的支撑多边形称为保守支撑多边形。否则将在本发明中定义的保守支撑多边形简单地称为支撑多边形。
正如在本发明中所定义的,来源于(保守的)支撑多边形的楔总是形成可以与网格多边形相交的连续的保守的线性化本影事件面以保守地确定从视单元看去可见的网格多边形(或其分段)的集合,而不需要通常支配(以及复杂化)精确的解的二次曲面。
在示例性实施方式中,关于术语保守支撑多边形,参见上述对于支撑边形的术语。
在示例性实施方式中,术语支撑测试是指如果多边形由一个结构的顶点或边以及不与其他的任何东西相交的另一结构的顶点或边支撑,则将通过两个多边形的结构之间的“支撑测试”(即,是支撑多边形)的多边形。支撑测试还要求:支撑多边形的沿着远离第一支撑的对象(如,视单元) 的方向的延伸(例如,这个扩展是“楔”)以使支撑多边形处于另一支撑的结构的内部(例如,流形网格的拓扑的“内部”)的方式不与另一结构 (例如,多边形网格)相交。这种支撑测试有效地要求支撑边是结构(例如,多边形网格)的“外部”边,该结构将支撑多边形成切线地支撑到结构,与如不会将支撑多边形成切线地支撑到结构的多边形网格等结构的“内部”边或反射边。
在本方法中,支撑测试通过仅包括共享网格的边的多边形、以更有限的方式用于确定边是否支撑视单元与网格之间的保守支撑多边形(即,边是否为“局部支撑”或一阶轮廓边,参见一阶轮廓边和局部支撑边的定义)。
在强调将支撑多边形的本保守的定义与支撑多边形的现有技术定义区分开的差异的情况下,可以将本发明定义的支撑多边形称为保守支撑多边形。否则将在本发明中定义的保守支撑多边形简单地称为支撑多边形
在示例性实施方式中,术语保守支撑包是指由一个多面体(例如,视单元)与一个或多个其他多面体(例如,多边形网格对象)之间的保守支撑多边形所形成的多边形结构。旋转和扫掠方法为构造视单元与非凸多边形网格对象之间的保守支撑包的特定的子集的方法。
支撑包是“凸包”的概括,“凸包”是在计算几何图像和线性编程中重要的现有技术。两个凸多面体之间的凸包是多边形结构,包括两个凸多面体之间的可见性的所有的“视线”。形成凸多面体(例如,视单元)与另一凸多面体(例如,凸多边形网格)之间的凸包的现有技术方法是公知的和重要的。这些现有技术方法采用两个凸对象之间的支撑多边形的构造。(参见See O’Rourke,Computational Geometry in C Second edition CambridgeUniversity Press 1998)。
没有关于在凸多面体与一个或多个非凸多面体(例如本发明中使用的多边形网格对象,并且他们在计算机图形中无处不在)之间形成支撑包的明显的现有技术的描述。精确的支撑包将不仅包括多边形,还包括入射在复合的轮廓顶点上的二次曲面。
相反,使用本发明的旋转和扫掠方法可以构造的保守支撑多边形的集合可以很容易地被补充(通过添加入射在多边形网格的外部角顶点上的扫掠楔),以形成连续的、保守的近似于在凸多面体(例如,视单元)与一个或多个非凸多面体之间的精确的支撑包。
在本发明的一种实施方式中所指定的旋转和扫掠方法构造保守支撑包多边形的子集,当保守支撑包多边形延伸时,结合形成可以用于确定从视单元看去可见的多边形的集合而不需要二次曲面的保守的连续本影事件面,形成楔。
将被包括在完全保守支撑包中的一些多边形不在一种实施方式的旋转和扫掠方法中被构造,因为对应的楔(例如,扫掠,或入射到多边形网格的外部较角顶点上的SE-MV楔)没有有助于连续的本影边界将什么是从视单元看去可见的与什么是从视单元看去被遮挡的分开。
在旋转和扫掠方法中,没有识别这些支撑多边形。因此,没有构造它们的对应的楔。
除了所指定的旋转和扫掠方法之外,采用保守支撑多边形构造连续的本影事件面的可替代的实施方式是可行的。例如,可替代的实施方式可以构造在视单元于多边形网格对象之间的整个完全保守支撑包,然后将所有的支撑包多边形的边进行延伸以形成楔。如此形成的楔包括没有促成连续的本影事件面的楔(例如,通过将由视单元的边和多边形网格的外侧角顶点所支撑的支撑多边形进行延伸所形成的楔)。在这样的可替代的实施方式中,可以忽略或移除这些多余的楔。
在示例性实施方式中,术语SVV(支撑视单元顶点)是指,对于给定的网格轮廓边,当穿过网格轮廓边以轮廓边的背面组件多边形的法线方向旋转时所遇到的第一视单元顶点。(还参见支撑多边形)
在示例性实施方式中,术语支撑视单元轮廓周线(SVSC)是指当从网格轮廓边的内侧拐角顶点所观察时视单元轮廓周线的一部分,该部分产生最极端的本影边界。这是从视单元轮廓通过内侧拐角网格轮廓顶点观看时视单元轮廓周线的产生最小遮挡的部分。它还是当进行扫掠操作时产生具有与所连接的SV-ME楔一致的取向并且形成连续的面的SE_MV楔。支撑视单元轮廓周线在与产生内侧拐角顶点的网格轮廓边相对应的两个 SVVS之间延伸。
SE-MV楔是以下定向的可见性事件面:借助视单元面上的包含来反映网格轮廓顶点处的可见性限制。
相反,SV-ME楔是以下定向的可见性事件面:借助于由轮廓边处的网格多边形引起的(从视单元看去的)遮挡来反映网格轮廓边处的可见性限制。
SVSC为产生具有与相邻的SV-ME楔的取向一致的取向的对应的 SE-MV楔的(从网格轮廓边看去的)视单元轮廓边;从而在网格轮廓顶点处产生连续的、保守的一致地定向的本影事件面。
在示例性实施方式中,关于术语扫掠三角形参见扫掠多边形。
在示例性实施方式中,术语扫掠多边形(也称为扫掠支撑多边形或扫掠三角形)是指多边形网格的一阶轮廓边的非凸(或“内部”)角处可见性事件边界不仅通过将由形成该内侧拐角的轮廓边所支撑的那些支撑多边形进行延伸,也有可能通过作为在网格轮廓的内侧拐角顶点与作为来及网格对象的内侧拐角轮廓顶点的远景的从点看去轮廓边的视单元的某些边之间所形成的不同类型的支撑多边形的一个或多个扫掠多边形来形成。视单元的这些从点看去轮廓边在与网格对象的内侧拐角相对应的SVV之间形成轮廓链(极值或支撑视单元轮廓周线)。多边形(三角形)被“扫掠”出这条链的每个边,形成扫掠多边形。这些扫掠多边形的边延伸以形成也有助于网格轮廓周线的内侧拐角处的一阶可见性事件面的SE-MV或扫掠楔。
在示例性实施方式中,术语扫掠楔是指由扫掠支撑多边形的边的延伸所形成的SE-MV楔。
在示例性实施方式中,术语分离多边形是指分离两种结构的多边形。一般情况下,多边形网格的轮廓边与视单元之间的分离多边形由轮廓边和视单元的顶点来形成。支撑这个多边形的视单元的顶点被称为分离视单元顶点。通过将轮廓边的背面组件多边形的平面进行旋转可以识别分离视单元顶点,其中,围绕轮廓边并且沿着边的背面组件多边形的法线相反的方向朝着视单元发生旋转直到平面与视单元相交。一般情况下,这个相交将发生在分离视单元顶点处,与轮廓边一起形成作为三角形的分离多边形。如果分离视单元顶点是与网格的轮廓边平行的视单元的顶点,那么旋转平面将与视单元的边相交,不仅与单个顶点相交,而且分离多边形将会是由网格轮廓边和相交的视单元边形成的四边形。用于确定入射在轮廓边的一阶UBP与高阶UBP之间的最大偏差。
在示例性实施方式中,术语本影边界多边形(UBP)是指作为使用作为面光源的视单元由多边形网格对象所形成的本影边界的一部分的多边形。UBP可以对应于精确的本影边界或可以保守地近似于区中的本影边界。使用本发明的旋转和扫掠构造方法通过支撑多边形和扫掠多边形的扩展来构造。在初期的构造期间,UBP延伸半无限远离视单元。在构造PAU 的后续的步骤中,UBP彼此相交,与网格多边形以及可能与包围所有网格对象的边界框相交。
在示例性实施方式中,术语一阶UBP是指使用旋转和扫掠方法以及在本说明书中描述的方法的替代的实施方式所构造的多边形。
在示例性实施方式中,术语一阶SV-ME UBP(源顶点-网格边UBP) 是指通过将网格轮廓边与视单元顶点之间的对应的支撑多边形(SV-ME 支撑多边形)进行延伸所构造的多边形。
在示例性实施方式中,术语一阶SE-MV UBP(源边网格顶点UBP) 是指通过将网格轮廓周线内侧拐角顶点(简单的或复合的轮廓周线的)边与视单元顶点之间的对应的扫掠多边形(SE-M V扫掠多边形)进行延伸所构造的多边形。
在示例性实施方式中,关于术语SV-ME支撑多边形,参见SV-ME UBP。
在示例性实施方式中,术语SE-MV扫掠多边形,参见SE-MV UBP。
在示例性实施方式中,术语高阶UBP是指使用多面体环境中的可见性传播的高阶模型所构造的UBP。这个模型解决部分,可以从暴露的轮廓边被遮挡的光源(例如,视单元)的一部分。高阶UBP可以更精确地近似于其中实际上由边-边-边(EEE)的交互所形成的高阶(二次)面所形成的本影边界的区中的实际的本影边界。在本方法中,使用背投影方法构造高阶UBP。
高阶UBP可以入射到一阶轮廓边上,其中高阶UBP被称为调整 UBP。可替代地,高阶UBP可以入射到高阶轮廓边上。如果调整UBP违反局部可见性,可以计算高阶轮廓边。
在示例性实施方式中,术语背投影是指视单元(光源)的从轮廓边看去可见的部分的确定。在本方法中,这种确定采用使用轮廓边作为光源的 PAU构造的旋转和扫掠方法。
在示例性实施方式中,术语VSVV(可见支撑视单元顶点)是指针对网格轮廓边或边部分所确定的顶点:实际上从边看去可见的支撑视单元顶点由背投影的方法来确定。用于构造调节的SV-ME UBP。
在示例性实施方式中,术语可见的极值视单元轮廓是指实际上从网格轮廓的内侧拐角顶点看去可见的极值视单元轮廓。用于构造被延伸以形成高阶SE-MV UBP的扫掠多边形。
在示例性实施方式中,术语简单轮廓周线是指由属于单个网格对象的共用的顶点连接的轮廓边链。也被称为简单轮廓。
在示例性实施方式中,术语复合轮廓周线是指包括由共享的顶点连接的或由来自一个轮廓的楔/UBP与非相邻的轮廓边相交所形成的顶点连接的轮廓边的轮廓边链。在平滑流形的研究中,这样的相交部被称为t接头。(参见See Durand,Fredo PhD thesisUniversity of Grenoble)
在示例性实施方式中,关于术语t接头,也称为复合的轮廓顶点 (CSV),参见复合的轮廓周线。
在示例性实施方式中,术语PAU(多面体聚合本影)是指形成由一个或多个多边形网格对象使用视单元作为光源投射的本影的边界的多面体。PAU表示为包括UBP和多边形网格对象的可见分段的多边形网格。
在示例性实施方式中,术语“三角形-VC轴”(三角形-视单元轴) 是指网格三角形与凸视单元之间的轴(支撑轴或凸包)。
在示例性实施方式中,术语“分段-SILE轴”是指MSEGMENT与轮廓边之间的2D轴。用于网格遍历的2D版本中以找到UBP与网格多边形的相交部。
在示例性实施方式中,术语UBL(本影边界线)是指UBP的2D等值,该2D等值形成在轮廓边顶点与网格轮廓顶点之间。
在示例性实施方式中,术语PLAU(多线段聚合本影)是指PAU的 2D等值,该2D等值被限制到UBP的面。
在示例性实施方式中,术语视单元轮廓周线是指如从三角形网格的一些元素观察到的视单元的轮廓周线。
在示例性实施方式中,多边形网格可以被表示为有向图。在示例性实施方式中,术语网格遍历是指:这样的图的遍历是访问图的节点的过程。在示例性实施方式中,网格遍历可以遵循其中检查边相邻多边形的广度优先(breadth-first)顺序。其他遍历时序是可能的。
在示例性实施方式中,关于术语支撑视单元顶点,参见SVV。
在示例性实施方式中,术语支撑视单元边(SVE)是指与对应的网格轮廓边平行的视单元的边。两个边之间的支撑多边形是四边形。
在示例性实施方式中,术语可见支撑视单元边(VSVE)是指从整个对应的轮廓边可见的(未遮挡的)SVE的一部分。
在示例性实施方式中,术语SOSC(显著地遮挡的轮廓周线)针对视单元过渡。
在示例性实施方式中,术语SESC是指针对视单元转换的显著地暴露的轮廓周线。
在示例性实施方式中,术语流形网格的轮廓周线是指与可见性和遮挡之间的过渡相对应的流形的折奇性(fold singularity)。对于多面体流形网格,轮廓周线是分段地线性的多义线。
在示例性实施方式中,术语尖端是指表示轮廓周线的终点的轮廓周线的点奇异性。非凸的流形网格可以具有多个尖端,每个对应于轮廓周线的终点。
在示例性实施方式中,术语CSV(复合轮廓顶点)是指楔与轮廓边的相相交部。对于一阶实现,楔是一阶楔并且轮廓边是一阶轮廓边。从拓扑结构方面来讲,CSV对应于从区看去复合的轮廓周线的保守定义的t- 顶点。通常,复合的网格轮廓周线的内侧拐角出现在CSV处。
一种更少见的类型的CSV可以理论上出现在楔与轮廓周线相交的地方出。这种退化的情况可以对应于复合轮廓周线的外侧拐角。
对应于t-顶点。
在示例性实施方式中,术语楔是指在光源/视单元的支撑顶点与轮廓边之间所形成的三角形(SE-MV楔)。当轮廓边与光源/视单元的边平行时,楔在轮廓边与支撑光源/视单元之间形成。在这种情况下,(SE-ME) 楔是四边形。
在不连续网格化方法中所使用的楔没有限定在源与轮廓之间所遮挡的部分上。这种类型的楔产生是精确的但并不一定产生连续的本影边界的平面可见性事件面。
相反,一阶楔被定义为整个支撑三角形或四边形在视单元与轮廓边之间的延伸。一阶楔产生是准确的或保守的,但总是产生连续的本影边界的平面可见性事件面。
在另一实施方式中,楔是视单元与多边形网格之间的任何所期望的多边形。
楔与UBP(本影边界多边形)不同在于:楔的范围仅受与网格多边形的相交的限制。UBP的结构不仅由与网格多边形的相交确定,也由与其他UBP的相交确定。事实上,根据与其他的楔相交以及与网格多边形相交以形成UBP的楔,形成UBP。针对流形的UBP的组合限定本影边界并且是针对流形的楔的子集。
可以通过直接使用楔-楔和楔-网格多边形相交形成UBP来构造PAU。在这种情况下,使用多面体的点包容性测试来确定PAU内侧的几何图形。
可替代地,在没有楔-楔相交的情况下,通过仅对楔-多边形相交的可见的边线进行遍历可以间接地构造PAU。在这种情况下,使用几何图形与视单元的面之间的线的楔穿透测试来确定PAU内部的几何图形。
在示例性实施方式中,术语一阶可见性(也称为可见性传播的一阶模型)是指从区看去的可见性传播的模型,其中假定整个视区(例如,视单元)是从一阶轮廓边看去可见的,从区看去本影事件面入射到(一阶)可见的、一阶轮廓边上并且被构造(使用旋转和扫掠方法)。
在示例性实施方式中,术语高阶可见性是指可见性传播的模型,该可见性传播并不假定整个视区(例如,视单元)从模型的边看去是可见的。如果对应于一阶轮廓边(例如,SVV或SVE)支撑视单元元素从一阶边看去不可见,那么对应的一阶事件面是不精确的。在这种情况下,更精确的从区看去事件面可以通过背投影被构造:使用一阶轮廓边作为源,并确定对应的可见支撑视单元元素(顶点或边)。背投影处理可以采用一阶模型,也可以自行采用高阶可见性(通过查找源轮廓边的SVV)。通过细分不精确的一阶边以及可选地允许轮廓周线撤销背投影处理,产生以极限方式在精确的二次事件面上会聚的本影事件面。
在示例性实施方式中,术语背面是指多边形的取向。取向的多边形具有一个正面和一个背面。每个多边形包含在也具有对应的正面和背面的平面内。如果多边形相对于点后向面对,那么该点在多边形的平面的背面。确定多边形是否相对于点后向面的一个测试采用多边形的平面方程。
由法向量确定平面的取向,法向量由平面方程的系数A、B和C来限定:
Ax+By+Cz+D=0
如果点满足下列不等式,点(xp,yp,zp),则该点在这个平面的背面:
A(xp)+B(yp)+C(zp)<0
否则,该点在平面上或在平面的正面。
多边形也可以相对于另一多边形被定向。如果两个多边形共享边,那么确定它们的取向的一种方法是选择不是共享边的顶点的多边形2的顶点。接下来,确定所选择的顶点是否在多边形1的平面的背面,在这种情况下,两个多边形是相对于彼此背面对,否则它们相对于彼此正面对(或在同一平面上)。根据本实施方式实现上述目的和优点,以及其他目的和优点,本实施方式包括保守的、从区看去的可见性预计算的方法,其中从多面体视单元潜在地可见的多边形分段通过构造保守的、线性化的、从视单元可见性图来确定。
在一种实施方式中,网格对象组成由闭合的流形的三角形网格(其中每个边确切地由两个三角形共用),虽然实施方式可以使用其他的多边形网格。该方法还可以容纳其中每个边由一个或两个三角形共用的非闭合流形多边形/三角形网格。
使用包括保守的从视单元本影边界的保守的线性化本影事件面 (CLUES),根据网格三角形来构造保守的可见性图。
在这个说明书中也被称为一阶楔或简单地楔的CLUES为与在不连续网格化方法中所采用的楔有关的从特征可见性事件面;虽然他们在重要的方面不同于不连续网格楔。
使用称为一阶可见性的多面体环境中的可见性传播的新颖的简化模型,在三角形网格(称为一阶轮廓边)的特定的边(和这些边的顶点)上构造CLUES。本发明包括构造一阶CLUES的方法以及自适应性地将一阶CLUES细化以产生更精确的保守的线性化本影事件面的方法。这些细化后的CLUES反映当整个视单元从支撑轮廓边不可见时所导致的高阶可见性影响。使用易于采用的保守的多边形面,这些高阶细化后的线性事件面往往保守地近似于精确的(通常是二次)本影边界。根据一些实施方式,当一阶事件面与高阶事件面之间的的最大偏差超过预定值时,进行一阶事件面的细化。
在一些实施方式中,通过其中支撑CLUES的轮廓边用作线性的光源的背投影进行细化处理以确定视单元从边看去可见。
可见性传播的一阶模型基于简化保守的假设:如果轮廓边从视单元看去可见,那么轮廓边从视单元看去的所有部分可见。针对其中一个组件三角形相对于视单元上所有的点背面对以及另一个组件三角形相对于视单元上的至少一个点正面对并且上述组件三角形彼此不面对,这种假设导致一阶轮廓边的简单的定义。这个定义实际上与从点看去轮廓边的定义相同并且反映了以下事实:在一些重要的方面,一阶模型实际上将视单元当做点。
使用从边到视单元的支撑点的简单的旋转在一阶轮廓边上构造称为源顶点-网格边,或SV-ME楔的一种类型的CLUES。这些SV-ME CLUES类似于在阴影算法中所使用的从点看去的本影边界多边形。与从点看去的本影边界多边形不同,单独的SV-ME CLUES不一定在非凸流形上形成连续的本影边界面。
在一阶方法中,第二类型的CLUES(称为源边-网格顶点,或 SE-MV楔)被构造,该CLUES将上述的SV-ME楔(通过旋转构造的) 连接到连续的本影事件面。通过扫掠操作,在其中来自相邻的轮廓边的 SV-ME型的楔不另外形成连续的本影事件面的内侧拐角网格轮廓顶点处形成这种第二类型的CLUES。在这样的情况下,入射到相邻的一阶轮廓边上的SV-ME楔由入射到连接内侧拐角网格轮廓顶点的SV-ME楔连接以形成连续的本影事件面。
根据通过锚定在内侧拐角网格轮廓顶点处的扫掠操作以及贯穿当从内侧拐角网格轮廓顶点处观察时作为轮廓边的视单元的边的扫掠所形成的支撑多边形来构造SE-MV楔。内侧拐角网格轮廓顶点可以是由连接的一阶轮廓边所形成的简单轮廓的顶点。可替代地,内侧拐角网格周线顶点可以是当一阶楔与另一轮廓边相交时所形成的复合轮廓顶点(CSV)。这些顶点对应于从区看去可见的流形的t-顶点并且当使用精确的从区看去可见形解决方案时,这些顶点通常对应于二次事件面。通过在CSV上构造SE-MV楔,本方法确保生成在不使用二次曲面的情况下反映复合的轮廓周线的内在的遮挡融合的连续的、保守的、线性化从区看去本影事件面。
表Ib示出了也示于表Ia中的完全不连续网格化的方法中所采用的四种类型的可见性事件面。本发明的在表Ib中的可见性事件面、CLUES也被呈现并且与完全不连续网格中所采用的可见性事件面进行比较。需要注意的是,Jenkins命名法不包括二次(EEE)面,因为在本发明的可见性传播模型中,,这些二次曲面由本方法的一阶版本中的SV-ME和SE-MV 平面以及使用该方法中的高阶细化实施方式的背投影SV-ME/SE-MV来替代。
表Ib
从区看去的可见性事件面的命名法
在一种实施方式中,使用CLUES对从视单元看去的可见性图的构造采用不连续性网格构造的现有技术方法,其中CLUES由用于不连续性网格化的线性和二次“楔”取代。因为不连续性网格化方法不是输出敏感的,所以该实施方式不是最佳的。在不连续性网格化的现有技术方法中,在所有的轮廓边上生成事件面,即使这些轮廓边中的许多轮廓边可能从视单元看去被遮挡。在该方法中,在已经构造了所有的不连续性网格区之后确定不连续性网格区的可见性。对于密集遮挡的环境,这些所构造的区中的许多区从视单元看去完全地被遮挡。因此,不连续性网格区的布置的复杂度远高于不连续性网格的可见部分的复杂度(其对应于可见性图)。
在另一种实施方式中,CLUES用于构造实际的从视单元看去的本影体积,该本影体积被称为多面体聚合本影(PAU),其包括CLUES和未被遮挡的网格三角形分段。该方法的目的是仅确定未被遮挡的网格三角形分段(其包括潜在可见集或PVS)。整个PAU的构造(其需要所有CLUES 的潜在相交部)通常对于确定未被遮挡的三角形网格分段不是必需的。替代地,可以通过直接构造从区看去的可见性图来更加有效地确定未被遮挡的网格三角形分段。
因此,本发明包括保守线性可见性图构造的输出敏感方法,其基于三角形网格2-流形(嵌在R3中)的遍历。在该方法中,进行未被遮挡的三角形网格流形的广度优先遍历。如果有任何潜在地遮挡的三角形(在三角形与视单元之间的轴中的那些三角形)还未被遍历并且遍历已经跳转至较近的未处理的三角形,则中止三角形的遍历。该方法执行从前到后的次序。流形网格遍历方法行进至网格的轮廓周线或从视单元看去的遮挡边界。从视单元看去的轮廓周线被作为流形的大变动的可见性事件曲线来处理。在这些周线处,构造对应的CLUES并且将其投射到环境中以确定它们的与网格三角形的相交部。该投射自身是在不连续性网格化中遇到的关于面 (例如,关于楔)的可见性问题,并且先前已经使用不是输出敏感的例如 Weiler-Atherton算法等传统技术将其解决。可替代地,现有方法包括以下技术:使用2-流形遍历(现在所描述的)的适于在关于楔或关于CLUES 的可见性问题中遇到的1-流形的简化版本来解决关于楔的可见性问题。出于简单起见,尽管示出了用于本方法的一阶楔与在不连续网格化的现有技术方法中构造的楔在重要方面不同,但是本说明书经常可互换地使用词语楔、一阶楔和CLUES。
本影事件面和流形网格三角形的关于楔的可见相交部对应于从视单元看去的本影不连续性网格的分段但可能实际上不是对应的从视单元看去的可见性图遮挡边界的分段。这是因为楔表示从视单元看去的具体特征 (顶点或边)的三角形分段的可见性,不是必需地是从整个视单元看去的本影边界。在本方法的一种实施方式中,对本影不连续性网格分段进行测试以在对其进行构造是确定其是否是从视单元看去的遮挡边界。
通过执行从前到后的处理次序并且当遇到它们时构造遮挡边界,网格遍历很大程度上避免了对被遮挡三角形的遍历,因此易于实现输出敏感性能。在输出敏感方法中,流形遍历有效地级联完了流至与可见性事件面对应的遮挡边界相交的其他流形上的轮廓周线。
结果的输出敏感性能是以下代价来实现的:必须针对未处理的、潜在地遮挡的元素使用三角形-视单元轴来对每个未被遮挡的网格元素进行测试。在本方法中,通过使用层次性空间细分和将轴与这些层次性包含结构相交来大大地减少了这些轴包括测试的成本。者导致了倾向于 O(NLog(M))的所有轴包括测试的总体成本,其中N是所遍历的可见网格元素的数目,M是潜在地遮挡的网格元素的平均数目。
通过在强可见的多边形分段处开始并且继续遍历以下任一处来对网格多边形进行处理:a)处于轮廓边处的保守线性本影边界楔的起始处或 b)楔(形成实际的从视单元看去的遮挡边界)与网格多边形的相交处。为了确保适当的深度次序,网格遍历算法识别任何未处理的潜在地遮挡的网格元素并且将网格遍历立即转移到较近的未被遍历的元素。通过维持表示三角形交叠关系的有向图和使用线性时间算法如Tarjan的算法来识别该图中的循环来检测网格元素之间的不确定的深度次序。当循环存在时,不精细的三角形的视单元-三角形轴中的三角形与该轴相交以识别这些交叠三角形的完全地位于该轴中的部分。这些部分与不精确的三角形不能形成循环,因为它们完全地位于该轴内。使用这些部分来重新开始遍历打破了该循环。
通过执行网格的从前到后的遍历,在遮挡边界处终止遍历以及采用层次性空间细分,该算法被设计为实现输出敏感性能,即使针对密集地遮挡的环境。
网格遍历/可见性图构造方法的一个优点是:相比如体积可见性、广义投影和Weiler-Atherton等算法,该构造方法对于识别遮挡而言更加有效。所有这些其他方法依赖于在现实模型中不常见的大的凸遮挡物。例如,仅当连接的多边形形成凸多面体时,作为从点看去的可见性算法的 Weiler-Atherton算法才能够组合连接的多边形的遮挡(他们称为巩固的处理)。同样地,体积可见性(Schuaffler等人2000)方法依赖于形成在视单元与在实际的遮挡物内部的单一凸盒子形阻挡物之间的简单轴。如果实际的遮挡物是凹的并且或具有孔,则难以识别这样的简化了的凹阻挡物,其精确地表示实际遮挡物的遮挡。
相比之下,本发明不依赖于凸遮挡物的存在,而是直接利用流形网格的连接性所固有的遮挡连贯性,而不考虑网格的形状。
本方法包括确定可见性图的被遮挡区的“有效静态遮挡”(ESO)的技术。区的有效遮挡是反映在遮挡区中被遮挡的多边形的数目和面积的比率,遮挡区被在该区所引起的重新网格化期间产生的附加几何图形分隔。
由本方法产生的可见性图的精度可通过所使用的轮廓周线的保守凸简化来降低。这在当环绕被遮挡的可见性图区的遮挡边界包括太多的细节时可以是有用的,尤其是当该区的有效遮挡很低时。有效静态遮挡被用作控制轮廓周线的简化因此以及控制对应的可见性图/PVS的精度的启发。
使用对于前面所讨论的高阶细化的背投影方法,还能够选择性地增加可见性图的精度。部分地,还可以通过ESO测量来确定对于朝着精确的二次事件面的该自适应细化的控制。
通过使用中间的增量PVS表示来减小存储需求,其中在预计算期间,通过识别对应的连贯的遮挡或暴露区来对产生明显的遮挡暴露的那些重要的轮廓边进行识别。
本发明包括直接地识别模型的在特定的视单元过渡期间暴露或被遮挡的多边形或多边形分段。针对视单元过渡的新近可见的多边形或多边形分段的列表被称为增量G+子网格。对于视单元过渡的新近被遮挡的多边形或多边形分段的列表被称为增量G-子网格。
本发明包括以下方法:通过计算对于每个视单元的可见性图以及遍历对于从一个视单元到另一个视单元的遮挡/暴露边界的结果可见性图,来识别对于视单元转换的新近被遮挡区和新近暴露区的连贯区。该方法用于识别连接的暴露/遮挡区。这些区的有效遮挡是使用与前面描述的有效静态遮挡相同的方法来测量。在这些增量G区的情况下,有效遮挡被称为有效动态遮挡(EDO)。EDO用于识别连贯的有效差别可见性的区。
可以根据现有的PVS和所存储的对于视单元过渡的增量G+数据和增量G-数据来以通常的方式来生成对于一个视单元的可见性PVS数据。
可替代地,在离线预计算阶段对形成这样的高EDO区的轮廓周线进行识别和标记。这些标记轮廓周线是增量PVS的中间表示的基础,与直接地存储对于每个视单元过渡的所有增量G+和增量G-子网格数据相比,其充分地减少了存储需求。
在该中间可见性图/PVS表示中,对动态暴露的轮廓周线或动态遮挡的轮廓周线(高EDO的包围区)进行标记。使用包括对于具体过渡的两个视单元的遮挡边界的同一可见性图的简单遍历在离线预处理中对连贯的高EDO区进行识别。
轮廓标记与三角形网格数据连同对于每个视单元过渡的遮挡边界相交暗示存储在一起。遮挡边界是由入射在标记轮廓周线上的本影事件面产生的从区看去的可见性图的边界。标记轮廓周线和对应的遮挡边界两者形成多义线。在运行时间,可以使用寻找连接轮廓边和多边形-多边形相交部的简单算法来根据一些标记轮廓边(和对应的遮挡边界分段)来构造完整的轮廓周线。
根据一些实施方式,对于简单轮廓周线,经常可以通过仅标整个标记轮廓周线的单个开始边来存储该周线。在运行时间可以迅速地识别形成该周线的剩下的连接一阶轮廓边。该方案使得使用标记轮廓周线的中间表示在存储上非常有效。
根据一些实施方式,对于复合的轮廓周线(当入射在一个简单的轮廓周线上的本影事件面与另一个轮廓周线相交时形成),除了还要存储表示简单的周线的相交部的复合轮廓顶点(CSV)外,存储方案是类似的。
使用中间表示,对于一个视单元的可见性图/PVS可以根据先前构造的父(包括性)视单元使用简化了的遍历来生成。父可见性图的该遍历行进至标记的遮挡的轮廓周线,其支撑产生新的遮挡边界的本影事件面,上述新的遮挡边界有效地绕开新近被遮挡的网格元素。该方法消除以下需要:存储对于具有共用父的子视单元之间的视单元过渡的增量G-信息和增量G+信息。使用明显地标记的遮挡的轮廓周线在运行时间增量地生成可见性图/PVS的该方法在分布式客户端-服务器实施中是尤其有用的,这是因为客户端能够使用该方法移除对于视单元过渡的新近被遮挡的几何图形,而不需要从服务器接收明确的增量G-信息。
除了用于直接地生成对于视单元的可见性图/PVS以外,当需要时标记轮廓周线还可以用于生成增量PVS数据。使用该方法,根据一些实施方式,并没有存储增量PVS数据(例如,增量G+和增量G-子网格数据),而是在需要时使用标记轮廓周线信息、现有的可见性图和(对于增量G+ 子网格数据)当前可见性图的保证包括对于视单元转换的新近可见的几何图形的超集来生成增量PVS数据。在一些实施方式中,后面的超集信息可以被提供为所存储的对于包括针对其发生特定的父-子视单元过渡的子视单元的父视单元的增量G+子网格数据。
使用这三个数据集合,通过对先前构造的与父视单元对应的可见性图的简化遍历来生成对于特定视单元过渡的父-子增量G+和增量G-数据。标记轮廓周线(和相关联的遮挡边界暗示)用于根据父视单元的可见性图 /PVS来快速地构造子视单元的可见性图/PVS。可替代地,可以通过分别对新近暴露的区和新近被遮挡的区进行遍历来明确地生成增量G+数据和增量G-数据。后一种方法在客户端-服务器实施中有用,其中服务器是使用基于导航的预取将增量G+和/或增量G-子网格数据传输到客户端的可见性事件服务器。
可替代地,仅明确地存储对于视单元过渡的增量G+数据并且通过对父视单元的简化遍历来生成增量G-数据。在该实施中,对父可见性图的简化(快速)遍历行进至标记的遮挡的轮廓周线,其支撑产生新的遮挡边界的本影事件面,上述新的遮挡边界有效地绕过新近被遮挡的网格元素。
该增量PVS方法表示用于外存几何图形和纹理信息的基于可见性的流处理的有效的表解码器,其中在离线、预计算的编码中对动态遮挡或暴露的轮廓周线(对于视单元-视单元过渡)进行识别和标记;以及结果的标记的周线与其他暗示信息一起用于根据现有的PVS/可见性图在运行时间迅速地构造PVS/可见性图(或增量G子网格数据)。该编解码器使得能够进行分布式客户端-服务器实施,其中存储/传输成本可以以增加运行时间计算成本为代价来选择性地降低。
此外,基于知觉的编码策略用于当增量G+子网格信息没有被及时传递至客户端以生成对于当前视单元/视点的完整PVS期间对低的细节层次 (LOD)几何图形及纹理信息进行编码。该策略利用以下事实:人类视觉系统不能完全分辨以近似地小于1000毫秒来呈现的信息。该方法使得在低的时空可见连贯性期间使得能够出现相对地知觉上无损的性能恶化:以类似的方式挑战编解码器和人类视觉系统两者的性能的情形。
在本说明书中公开了该编解码器的细节以及其在采用基于导航的预取的客户端-服务器方法流处理内容传递中的用途。
表Ic总结了采用了表征在表Ia中的各种可见性事件面的PVS确定和阴影计算的许多现有技术方法。该表的最后一行包括从视单元看去的增量PVS确定的当前方法,其使用本发明的包括一阶及高阶保守线性本影事件面(CLUES)的方法。
表Ic
PVS和阴影方法
操作原理:一阶可见性传播的模型
根据一些实施方式,本方法的从区看去的可见性预计算使用了从区看去的可见性面,其使用被称为一阶可见性的可见性传播的简化保守模型来构造的。
多面体环境中的精确的可见性是由边的三元组之间的可见性相互作用而引起的二次可见性事件面来支配的。相比之下,一阶模型考虑由边的对之间可见性交互引起的可见性事件面。使用本文所公开的方法,一阶可见性模型产生连续的保守本影事件面,其可以用于构造保守的从视单元看去的可见性图和有关的从视单元看去的潜在可见集(PVS)。
可见性传播的一阶模型基于对保守假设的简化:如果轮廓边从视单元看去可见,则轮廓边从视单元看去的所有部分可见。该假设导致将一阶轮廓边定义为那些边:一个组件三角形相对于视单元的所有点背面对,另一个组件三角形相对于视单元的至少一个点正面对,并且组件三角形没有彼此面对。该定义实际上与从点看去的轮廓边的定义相同,并且反映出以下事实:一阶模型在某些重要方面将视单元视为视点。
在一阶可见性中,假设轮廓边的任何分段从视单元看去完全地被遮挡或从视单元看去完全地可见(从视单元看去的所有部分可见)。即,在一阶可见性中,如果轮廓边从视单元看去的任意部分可见,则假设其从视单元看去的所有部分可见。
一阶模型没有解释沿着轮廓边分段的变化遮挡的效果,上述变化遮挡是由轮廓边与视单元之间的产生二次三边(或EEE)可见性事件面的边插入引起的。替代地,一阶可见性模型产生平面可见性事件面其对应于精确的、平面的从区看去的本影事件面对应或保守地位于通常是二次曲面的精确的二次从区看去的本影边界内。可见性传播的一阶模型仅采用了由边的配对之间可见性相互作用引起的平面可见性事件面。此外,通常一阶、平面可见性事件面非常靠近精确的事件面,其可以是二次型,并且在许多情况下,一阶事件面是精确的从区看去的可见性(本影)边界。
根据一些实施方式,使用简单的旋转和扫掠算法来生成一阶可见性事件面。在一种实施方式中,假设视单元是凸的。该假设简化了旋转和扫掠构造方法。旋转和扫掠方法的替代实施方式能够根据构造从非凸视单元看去的一阶可见性事件面。例如可以通过四面体化将任何非凸视单元分解成凸组件。
在一些实施方式中,使用三个标准来识别引起一阶可见性事件面的一阶网格轮廓边。在一些实施方式中,一阶轮廓边被定义为流形三角形网格的通过以下测试的那些边:
1)共享该边的一个三角形相对于视单元的所有顶点背面对,
2)共享该边的另一个三角形相对于视单元的至少一个顶点正面对,
3)共享该边的组件三角相对于彼此背面对。
一阶保守线性本影事件面(CLUES)也称为楔,其有两种类型。在一些实施方式中,还概念性地将视单元视为“源”或光源。
根据一些实施方式,一种类型的楔是由视单元的顶点和网格的一阶轮廓边来形成(SV-ME)。另一种类型的楔是由视单元的边和网格的内侧拐角顶点形成(SE-MV)。首先讨论该SV-ME类型。
根据一些实施方式,为了构造SV-ME楔,对一阶轮廓边与视单元之间的支撑三角形进行识别。该三角形形成在轮廓边与视单元的被称为支撑视单元顶点(SVV)的特定顶点之间。通过测试边的背面三角形与形成在每个视单元顶点和轮廓边之间的三角形之间的角度来识别与一阶轮廓边对应的支撑视单元顶点。产生形成与背面三角形的最小角度(即,最大的负余弦值)的顶点-边三角形的顶点是在该背面三角形的通过轮廓边的平面的“旋转”中遇到的第一顶点。该视单元顶点是对于对应的网格轮廓边的支撑视单元顶点。
在一阶网格轮廓边上入射的一阶楔是由该边自身和每个都是穿过该边的顶点和与该轮廓边对应的支撑视单元顶点(SVV)的线的两个其他边形成。这两个边从SVV穿过轮廓顶点沿着远离视单元源的方向半无穷地延伸。该楔可看作形成在轮廓边与对应的支撑视单元顶点(SVV)之间的支撑三角形的延伸。如前面所指出的,因为该类型的楔是根据网格的轮廓边和视单元的顶点来形成,所以将其称为源顶点-网格边(SV-ME)楔。
可能发生退化情况,其中从网格轮廓边道视单元的旋转遇到产生相同旋转角度的两个或更多个支撑视单元顶点(SVV)。这发生在当视单元的包括SVV的边与网格轮廓边平行时。在该情况下,网格轮廓边与视单元之间的支撑三角形实际上是支撑四角形。本方法通过构造特殊的SE-ME 楔来处理这种退化情况。
在一些实施方式中,旋转操作产生对于每个网格一阶轮廓边的 SV-ME楔。但是,处于两个一阶轮廓边的共享顶点处的可见性事件面部是必需地完全由两个相邻SV-ME楔的相交部来限定。虽然相邻的SV-ME 楔总是在共享的轮廓顶点处相交,但是在轮廓周线的内侧拐角处,这些楔仅能够在由它们的两个支持轮廓边共享的单个点处相交。在该情况下,它们的相交部不形成穿过轮廓周线的一部分的连续的本影面。跨越所共享的轮廓顶点处的轮廓周线的可见性事件面的结构取决于相邻的SV-ME楔如何相交。
根据一些实施方式,概念性的反向旋转操作可以用于确定相邻的 SV-ME楔是否相交以形成连续的本影面。沿着对应的网格轮廓边从顶点到顶点对锚定在SVV处的线段进行扫掠的反向扫掠操作生成与在前述旋转操作中形成的支撑三角形相同的支撑三角形。概念上,但是可以将反向旋转操作用于识别可能出现在相邻轮廓边的共享顶点处的可见性事件面的不连续性。
如果两个相邻的网格轮廓边形成网格流形的“外侧拐角”或凸拐角,则这样的反向扫掠操作不会遇到对共享的顶点处的扫掠(即,遮挡)的任何限制。从而,与相邻“外侧拐角”轮廓边对应的SV-ME楔会相交以形成跨越两个轮廓边的连续的可见性事件面。入射在相邻的外侧拐角一阶轮廓边上的SV-ME楔会相交以形成这样连续的可见性事件面,即使对于相邻轮廓边的支撑三角形旋转至视单元上不同的SVV。
相反,如果两个相邻的网格轮廓边形成网格流形的“内侧拐角”或非凸拐角,则入射在这两个边上的SV-ME楔不会在所共享的轮廓顶点处相交,以使得形成跨越相邻的网格轮廓边的连续的可见性事件面。与相邻的“内侧拐角”轮廓边对应的支撑多边形可以旋转至视单元上不同的SVV 处。在这种情况下,相邻的SV-ME边仍然会在所共享的轮廓顶点处相交,但是它们的相交部不会形成跨越相邻轮廓边的连续的可见性事件面。锚定在SVV处的反向扫掠操作和通过轮廓边的扫掠会在这样的内侧拐角顶点处遇到限制(遮挡)。该限制导致由相邻的内侧拐角SV-ME边形成的可见性事件面的不连续性。
在这样的内侧拐角处的连续的可见性事件面可以通过反向先前描述的在内侧拐角处的反向扫掠操作来构造。该扫掠现在被锚定在共享的内侧拐角网格轮廓顶点处,并且沿着视单元的轮廓边进行扫掠,这些边是相对于内侧拐角网格轮廓顶点为从点看去的轮廓边,扫掠开始于对于网格轮廓边之一的SVV并且结束于对于相邻的网格轮廓边的SVV。每个所扫掠的视单元轮廓边与内侧拐角顶点形成扫掠三角形。该三角形的穿过对应的网格轮廓多边形延伸的边限定了楔。因为这样的楔是由视单元的边和网格的顶点形成,所以它们被称为SE-MV楔。沿着视单元的(从点看去的)轮廓周线的这样的扫掠操作会产生SE-MV楔的集合,其形成了连接(或断开)相邻网格轮廓边的SV-ME楔的连续的可见性事件面。
概念上,则当锚定在SVV处的概念性反向扫掠操作在一阶轮廓周线的内侧拐角处遇到限制(遮挡)时,反向扫掠操作被反向。该反向产生了实际的扫掠操作,其构造了形成连续的可见性事件面(一阶本影事件面) 的扫掠三角形和对应的SE-MV楔,其连接来自相邻的一阶网格轮廓边的 SV-ME楔。该扫掠操作生成SE-MV楔,上述SE-MV楔如设在网格轮廓周线的顶点上并且反映了可见性事件边界,该边界主要由反映在SV-ME 楔中的轮廓边处的“遮挡”的组合和视单元上的视点的反映在入射在轮廓顶点上的SE-MV楔中的包含来确定。
应当注意,对于凸视单元,连接的视单元轮廓边的两个路径一般可以将一个SVV连接至另一个SVV。仅这些路径之一会扫掠完连接相邻 SV-ME楔的SE-MV楔链以形成具有一致的面定向的连续的可见性事件面。在一些实施方式中,该具体的路径被称为支撑视单元轮廓周线 (SVSC)。在本说明书中的其他地方提出了识别SVSC的测试。
根据一些实施方式,对于一阶楔的构造,可以使用另一个测试来取代检测对内侧拐角网格顶点处的可见性的限制的概念性反向扫掠操作。该测试包括比较相邻网格轮廓边的法线。如果两个连接的网格轮廓边具有被定向成使得它们相对于彼此正面对的法线,则将共享的顶点称为网格的外侧拐角。
根据一些实施方式,当遇到内侧拐角网格轮廓顶点时,则通过扫掠操作来生成穿过该顶点的一阶楔,其中锚定在内侧拐角网格轮廓顶点处的扫掠是沿着支撑视单元轮廓周线(SVSC)从与一个轮廓边对应的SVV到与另一个轮廓边对应的SVV来进行的,从而生成SE-MV楔。
生成SE-MV楔的扫掠操作仅在轮廓周线的内侧拐角处进行。在外侧拐角轮廓顶点处进行该扫掠会生成与仅处于该轮廓顶点的相邻SV-ME楔相交的冗余SE-MV楔,因此它们不促成所支撑的轮廓周线的连续的本影事件面。
如前所述,SE-MV楔可以出现在由单一网格的连接轮廓边形成的被称为简单周线的轮廓周线的“内侧拐角”处。更一般地,SE-MV楔可以入射在多面体聚合本影(PAU)面的任何“内部”或非凹边。这些“内侧拐角”特征还可以形成在当来自两个轮廓周线(属于相同的网格或不同的网格)的楔相交时。来自一个周线的楔与非相邻的轮廓边的相交部被称为组合或复合轮廓顶点(CSV)。在平滑流形的研究中,将这样的相交部称为t接头。在t接头相交部处,一个轮廓边的楔与非相邻的轮廓边(来自相同或不同的周线)相交。该t接头相交部一般以以下方式出现:相交的SV-ME楔在t接头处彼此不相交以形成连续的事件面。一阶轮廓边处两个SV-ME楔的结果的退化的相交部表示CSV。
在这样的CSV的现有方法中,采用与前述扫掠操作相同的、现在锚定在CSV的扫掠操作来生成将其他断开的SV-ME楔连接成连续的保守本影事件面的SE-MV楔的集合。如在本说明书的另一部分所详细讨论的,一般地,精确的本影事件面是高阶面(例如,二次曲面)。本发明包括在 CSV上进行前述扫掠操作以使得所构造的楔保守地近似入射在CSV上的实际的高阶面。
操作理论:一阶可见性事件面与支撑包之间的关系
根据一些实施方式,可见性传播的一阶模型采用了被称为支撑包的新的几何图形构造。
根据一些实施方式,多面体视单元与多面体网格对象之间的支撑包是多面体体积,其包括视单元与网格对象之间的所有可能的视线。该支撑包是由视单元与网格对象之间的支撑多边形包围的四面体。如果视单元和网格对象都为凸,则支撑包与凸包相同并且其可以使用熟悉的礼品包装算法 (O’Rourke,Computational Geometry in C Secondedition Cambridge University Press 1998)来构造。在一些实施方式中,如果视单元为凸但是网格对象不必是凸,则可以使用以下算法来形成支撑多边形。
将网格对象的每个一阶从区看去的轮廓边识别为以下那些边:具有一个相对于视单元的所有顶点背面对的一个组件三角形和相对于视单元的至少一个顶点正面对的另一个组件三角形,并且上述组件三角形相对于彼此背面对。对于这些一阶轮廓边中的每一个,通过从该边沿着背面组件三角形的法线方向旋转到视单元的形成最小旋转角度的顶点来构造入射在该边声的支撑多边形。被称为支撑视单元顶点或SVV的该顶点与一阶轮廓边的端点一起形成入射在轮廓边上的支撑多边形(一般为三角形)。该类型的支撑多边形被称为SV-ME(源顶点-网格边)支撑多边形。
如果该视单元顶点碰巧是与网格对象轮廓边平行的视单元边的端点,则该旋转会遇到形成相同角度的两个视单元顶点。在这种情况下,支撑多边形是由视单元边和网格对象轮廓边形成的四边形(即,SE-ME支撑多边形)。通过到支撑视单元元素的旋转来形成包括网格对象的边和视单元的顶点的所有支撑多边形。
如果相邻的网格对象轮廓边产生旋转至相同视单元顶点的支撑多边形,则支撑多边形在由该顶点和该共享的网格对象轮廓顶点形成的共用边处相交。在这种情况下,网格对象轮廓顶点处的支撑包完全由者两个支撑多边形来限定。相邻网格对象轮廓边还可以产生旋转至视单元的不同顶点的支撑多边形。在这种情况下,两个支撑多边形没有在网格轮廓顶点处形成连续的面。为了接近该顶点处的支撑包面,在网格轮廓顶点与视单元的特定边之间构造一个或多个支撑多边形。通过前述的“扫掠操作来进行该构造:沿着旋转相邻网格轮廓边的每个视单元轮廓顶点之间的视单元轮廓边的链进行扫掠。在该扫掠期间,根据这些视单元轮廓边中的每一个边和网格轮廓顶点形成支撑多边形。可以将该构造看作视单元轮廓边链的“扫掠”使得针对每个视单元轮廓边生成扫掠多边形。一般地,两个视单元顶点之间的扫掠能够采取不止一条路径,但是仅一条路径会扫掠完连接两个原始的支撑多边形的一组多边形以形成具有一致的面定向的连续的面。该路径是支撑视单元轮廓周线(SVSC)。
该算法产生了使用包围或支撑网格对象和视单元两者的连续的多边形面。在一些实施方式中,如果视单元和网格对象两者都为凸,则由通过该算法构造的支撑多边形仅在它们的边处相交并且形成视单元和网格对象的凸包。
如果视单元为非凸,则从流形网格一阶轮廓的内侧拐角顶点来看,视单元的从点看去的轮廓周线可以是包括尖端和t顶点的复杂周线。如果网格对象还是非凸,则支撑多边形可以在它们的内部相交。
但是,如果视单元被限制为凸多面体,则视单元的从点看去的轮廓周线(从内侧拐角网格轮廓顶点来观察)经常是不具有尖端或t顶点的简单周线。从而,如果视单元为凸,则充分简化对视单元周线的扫掠操作。根据一些实施方式,通过将视单元限制为凸多面体来充分地简化扫掠操作。
入射在一阶网格轮廓边上的一阶楔是形成在同一网格轮廓边与支撑视单元顶点(SVV)之间的对应支撑多边形的延伸。该类型的楔是由网格轮廓边(即,线段)和支撑多边形的于网格轮廓边相交的两个延伸的线构成的。从而,该楔,如初始地所构造的,易于远离视单元半无限地延伸直至与网格多边形相交。该类型的楔由SV-ME支撑多边形的延伸形成并且被称为SV-ME楔。
入射在一阶网格对象轮廓内侧拐角顶点的一阶楔是扫掠三角形(即,形成在网格轮廓顶点与视单元轮廓周线的边之间的SE-MV支撑多边形) 的延伸。该类型的楔由网格轮廓顶点与支撑多边形的于该顶点相交的两条线构成。这两条线远离视单元半无限地延伸以形成SE-MV楔的边界。从而,该楔易于远离视单元半无限地延伸直至与网格多边形相交。因为该类型的楔是由源(即,视单元)边和网格顶点形成,所以其称为SE-MV楔。
入射在网格轮廓周线的外侧拐角顶点上的SE-MV支撑多边形是位于凸视单元与网格轮廓之间的支撑包的实际的包围多边形。但是,该支撑多边形的延伸会产生仅在外侧拐角轮廓顶点上与一阶本影事件面相切地相交的SE-MV楔。从而这样的楔不会促成一阶本影事件面/体积并且不需要对其进行构造。
出现以下特殊情况:一阶网格轮廓边旋转至(即,由SVV支撑)为与网格轮廓边平行的视单元边的顶点的SVV。在该情况下,网格轮廓边与视单元边之间的支撑多边形是四边形。这样的支撑多边形和其对应的本影事件楔被称为SE-ME支撑多边形、楔。识别SE-ME楔是有用的,这是因为不同于其他类型的楔,寻找针对SE-ME楔的关于楔可见的相交部本身是从区看去(从分段看去)的可见性问题。相比用于SV-ME和SE-ME 楔的从点看去的、关于楔的可见性解决方案,SE-ME关于楔的可见性解决方案稍微更加复杂。
对网格对象与视单元之间的支撑包的前面的描述假设网格对象的所支撑的一阶轮廓周线是每条周线为多义线的简单周线。实际上,任何一阶从区看去的轮廓实际上可以是复合周线,其中整个周线是通过相交周线来形成。周线在来自一个周线的楔与另一个周线(即,一阶轮廓边)相交的地方处相交。该相交出现在复合轮廓顶点(CSV)处。如果考虑边三元组的高阶相互作用,则这些CSV一般与二次曲面对应。基于一阶可见性模型的旋转和扫掠构造的本方法将CSV视为简单的内侧拐角轮廓顶点;在每个CSV上构造一个或多个SE-MV,创建保守地近似由一阶轮廓边支撑的精确的二次曲面的连续的多边形本影事件面。
通过使用SV-ME(和特殊情况下的SE-ME)和SE-MV支撑多边形/ 本影楔两者,相比Teller的计算SVE-ME平面的凸包而明显地过地估计了遮挡的线性化非半影的方法,包括本方法的实施方式提供了对实际的从视单元看去的本影事件面更加精确的近视。
不同于线性化非半影方法,该旋转和扫掠方法不限于更加受限的穿过入口序列的可见性问题。
在一些实施方式中,为了构造从区看去的本影不连续性网格或从区看去的可见性图,确定一阶楔和网格多边形的可见相交部。楔与网格三角形的可见相交部的识别被称为“关于楔”的可见性问题。实施方式包括2D (即,在楔上)的1-流形(多义线)遍历方法,其中可见性事件线(即, 1自由度的事件表面)的构造与1-流形遍历和干扰检查交错以产生对于关于楔的可见性的输出敏感解决方案。
将该流形遍历方法扩展到3D中的遍历2-流形(即,三角形网格)的方法以构造包括从视单元看去可见的网格多边形分段的从视单元看去的可见性图。从可见性图中导出PVS。该3D网格遍历方法调用前述的2D (1-流形)网格遍历处理来解决关于楔的可见性。
假设在可见性传播的一阶模型下,从视单元看去被网格对象遮挡的空间体积被称为一阶多面体本影体积。因为各个本影体积可能相交以聚合遮挡,所以这些体积被称为一阶多面体聚合本影(PAU)。
也被称为PAU的一阶PAU由称为本影边界多边形或UBP的多边形包围。这些多边形由一阶楔与三角形网格多边形以及与其他一阶楔的相交部形成。PAU还被一阶可见的网格多边形分段(即,包括从视单元看去的可见性图的分段)包围。UBP和可见的网格多边形分段一起形成连续的、尽管不必是闭合的、限定PAU的边界的本影面。
如结合3D 2-流形遍历方法(图20和有关的图)所详细描述的,根据一些实施方式,可见性图的构造包括以下步骤:确定关于楔的可见的多义线段实际上是否位于PAU体积内,也因此从整个视单元看去被遮挡。该方法包括能够在不明确地构造PAU的情况下回答对于一阶PAU的该查询的修改的多面体的点包容性测试。
在关于楔的可见性方法中使用的在2D中使用1-流形多义线遍历方法 (图15和有关的图)是用于构造从视单元看去的可见性图的、在3D中的2-流形遍历方法的较简单的实施。
操作理论:表示从视单元看去的可见性的方法
实施方式适应从视单元看去的可见性的三种不同的表示。在表II中,示出了这三种表示的特征并且将其与使用完全的不连续性网格来表示从区看去的可见性的现有技术方法进行比较。
在保守线性从视单元看去的可见性的一种表示中,使用多面体聚合本影(PAU),对实际的从视单元看去被遮挡的空间体积进行识别。这些体积由根据从视单元元素看去的本影楔成的本影边界多边形(UBP)包围。上述楔实际上与网格多边形相交以及彼此相交以确定UBP。尽管大多数阴影体积方法是从点看去的阴影,但是该表示与阴影体积表示相当。
在保守线性化从视单元看去的可见性的另一种表示中,保守线线性化本影不连续网格(CLUDM),从视单元元素看去的本影楔彼此不相交,而仅与网格多边形相交以形成保守不连续性网格,其中网格的区对应于完全地可见的区、本影区或非本影区。非本影区实际上是视单元从其看去部分可见的一种类型的半影区。附加的测试用于区分本影区和非本影区(例如,确定从视单元看去的PVS)。
在保守线性化从视单元看去的可见性的第三种表示中,根据一些实施方式,在保守线性化本影不连续性可见性图(CLUVM)中,仅表示出完全可见的区和本影区。因为在这种情况下,PVS与完全可见的区对应,所以这是尤其有用的表示。通过确定由从视单元元素看去(即,点或边) 的本影楔成的每个潜在的遮挡边界实际上是否是从视单元看去的本影边界来构造CLUVM。在说明书中的其他地方示出了该确定的细节与构造 CLUVM的输出敏感方法。
将保守从视单元看去的可见性的这三种表示与完全的不连续性网格化的现有技术方法进行比较。在完全的不连续性网格中,大多数边界包括半影区,其是视单元从其看去部分可见的区。一般地,小得多的数目的区是没有视单元的部分从其看去可见的实际的本影区。完全的不连续性网格的半影区和本影区两者可以由线段和/或二次曲线包围。如在不完全的不连续性网格化的现有技术方法中所提出的,仅使用线性组件导致不连续的本影边界而因此不能用于确定从区看去的可见性。
对于在本说明书中别处公开的大量理由,保守线性化本影事件面 (CLUES)在远少于完全的不连续性网格化的现有技术方法所采用的精确事件面。从而,CLUDM的步骤的近似复杂度远低于完全的不连续性网格的复杂度。实际上,使用本发明的输出敏感构造方法,复杂度(构造和存储两者)一般仅由可见轮廓边的数目来确定,如针对表II中的CLUVM 由Nv 4所表示的。
在表II中给出了这些复杂度的估计,并且在本说明书中的其他地方详细对其进行了讨论。
表II
对表示保守线性化从视单元看去的可见性和经典的不连续性网格化的方法进行比较的表
*假设一阶轮廓边的数目是O(边的数目)1/2
操作理论:一阶背投影的高阶保守线性本影事件面
根据一些实施方式,一阶可见性模型假设:对于视单元与一阶流形网格轮廓之间的任意支撑多边形,支撑多边形的与一阶轮廓边对应的边从与支撑视单元顶点(SVV)对应的支撑多边形的顶点看去完全可见(被遮挡)。即,对于SV-ME楔,假设对应的支撑三角形没有与当从对应的SVV观察时会遮挡对应的网格轮廓边的任意部分的任何其他的多边形相交。同样地,对于SE-MV楔,假设对应的扫掠三角形没有与当从对应的内侧拐角网格一阶轮廓顶点观察时会遮挡对应的视单元顶点周线边的任意部分的任何其他多边形。
实际上,与楔对应的支撑多边形可完全地被遮挡、完全地未被遮挡或部分地被遮挡。如果支撑多边形完全未被遮挡,则对应的一阶楔是由网格楔或顶点支撑的精确的可见性事件边界。如果支撑多边形完全被遮挡,则整个楔保持对该边界的保守近似。如果支撑多边形部分地被遮挡,则楔的与支撑多边形的未被遮挡的分段对应的部分是精确的可见性事件边界,而楔的与支撑多边形的被遮挡的分段对应的部分是对精确边界的保守近似。
以下部分总结了以下方法:使用背投影来自适应地细化一阶楔以解释当支撑多边形完全或部分地被遮挡时存在的高阶可见性相互作用。背投影是确定从特定网格元素(即,一阶轮廓边)看去可见的源(即,视单元) 的部分的处理。根据一些实施方式,为了计算背投影,采用将轮廓边用作直线光源的一阶可见性模型及方法。
目前为止所描述的方法已经采用了可见性传播的导致线性化可见性事件面的简化的一阶模型。这些一阶模型面由通过旋转和扫掠的方法来生成的一阶楔包围。
这些一阶楔有两种类型:SV-ME楔和SE-MV楔。通过从网格边到视单元顶点的旋转生成的SV-ME楔反映了由对应于视单元上的点的视点的包含和网格的轮廓边处的遮挡的组合引起的可见性限制。通过从网格上的点贯穿视单元的边的扫掠生成的SE-MV楔反映了由视单元的边(即,边界)上的包含所引起的可见性限制。在一阶可见性模型下,SV-ME(即,特殊情况下的SE-ME)和SE-MV楔仅是出现多面体环境中的可见性事件面。
这两种类型的一阶楔可以通过对网格与视单元之间对应的支撑多边形进行延伸来构造。一阶可见性模型的重要假设是任何一阶网格轮廓边是从视单元看去完全可见或完全被遮挡。这与以下所述相同:对于任何一阶轮廓边,假定视单元从边看去完全地被遮挡或完全可见。
同样地,一阶模型假设:当从对应的支撑视单元顶点或边来观察,所支撑的轮廓边或顶点完全被遮挡或完全未被遮挡。
根据一些实施方式,使用一阶旋转和扫掠方法,例如,如果一阶轮廓边分段没有被遮挡,则假设分段与对应的SVV之间的支撑三角形被完全遮挡(即,没有与任何其他网格多边形相交)。实际上,如果该支撑三角形完全未被遮挡,则一阶模型是精确的并且对应的SV-ME楔是由网格轮廓边所支撑的从视单元看去的本影事件边界的精确组件。但是,如果该支撑三角形部分或完全地被遮挡,则一阶模型是近似并且入射在轮廓边上的实际可见性事件面可以由相交的二次曲面和平面组成。此外,一阶轮廓边 (或它的分段)甚至可能不支撑实际的可见性事件面。替代地,实际的可见性事件面实际上可以由被称为高阶轮廓边的其他边产生,以使得一阶轮廓边的所有或部分实际上位于可见性事件(即,本影)边界的内部并且也因此被遮挡。
实施方式包括以下方法:通过进行对应的支撑三角形的扫掠来识别引起高阶可见性事件面的遮挡元素,来识别一阶假设对于其是不精确的轮廓边和顶点。通过计算对视单元的实际上从轮廓边看去或轮廓顶点可见的部分进行识别的背投影,来近似高阶可见性事件面。该背投影自身是使用一阶旋转或扫掠方法来解决的从区看去的可见性问题。使用该方法,可以自适应地细化保守一阶楔来近似对应的精确高阶可见性事件面至所期望的误差容限。
在一些实施方式中,将高阶方法作为以下技术来实施:测试一阶可见性事件面的精确性并且修改或“调整”这样的面以更加精确地近似有关的高阶可见性面。一阶可见性事件面入射在一阶从区看去的轮廓边上。一阶轮廓边限定了网格的保守轮廓周线。精确的高阶可见性本影事件面不是必需地入射在一阶轮廓边上并且还可以出现在被称为高阶轮廓边的其他网格边上。相比入射在一阶轮廓边上的对应的事件面,入射在这些高阶轮廓边上的高阶可见性事件面可产生显著地更多的遮挡。实际上,通常,从高阶轮廓边出现的事件面实际上会包围包括对应的一阶轮廓边的遮挡体积。
实施方式包括以下方法:通过“调整”一阶可见性事件面以使得经调整的事件面保持从一阶轮廓边上入射,来近似高阶可见性事件面。随后的部分介绍了以下方法:当将高阶可见性事件面限制到一阶轮廓边明显地减小了所计算的高阶事件面的精度时进行识别。另外的实施方式包括识别支撑可见性事件面的特定的高阶轮廓边的方法,其更加精确地近似精确的可见性事件面。
下面是关于在多面体网格对象上的何处以及如何出现高阶可见性事件面的描述。该框架提供了使用多面体面自适应、渐进地近似这些高阶面的全新方法的基础。
为了说明概念,以线光源替代面光源的较简单的情况作为开始。预想单一线光源包括单一分段和单一凸多面体。因为多面体是凸的,所以不存在自身遮挡或内侧拐角。从而,多面体的本影是使用前述的一阶旋转和扫掠算法精确地形成的。在该情况下,网格的每个一阶轮廓边支撑通过至源的对应的支撑源顶点(SVV)来形成单个SV-ME楔,其在这种情况下为线段。
现在,想象对于网格的特定的一阶轮廓边,违反一阶假设以形成该轮廓边,源线段上的对应的SVV是不可见的(即,完全被遮挡)。这发生在以下情况:由轮廓网格边和SVV形成的支撑三角形与其他多边形相交使得在SVV与网格轮廓边之间不存在无阻碍的视线。在该情况下,因为对应的SVV从轮廓边看去甚至不可见,所以该轴的遮挡表示一阶楔对于网格轮廓边不是精确的本影边界。
可以通过识别线光源上的距对于边的支撑视单元最近的(即,“旋转至”的)、但是实际上从网格轮廓边看去可见的点,来获得对入射在网格轮廓边上的实际的可见性事件面的更好的近似。针对网格轮廓边将该点称为可见支撑视单元顶点(VSVV)。VSVV位于视单元的面上(即,位于表示视单元/光源的线段上)。它是从SV-ME UBP会旋转到的网格轮廓边可见的点。对应的SV-ME楔是由线光源和网格轮廓边形成的本影可见事件面。
因为VSVV提供了穿过网格轮廓边并且位于网格“后面”的不太极端的“观看”,相比对应的一阶SV-ME楔,该高阶SV-ME楔明显地产生了较大的本影体积。
根据一些实施方式,通过将网格轮廓边视为线光源来计算该针对网格轮廓边的可见支撑视单元顶点(VSVV)。在该方法中,旋转和扫掠方法用于使用特定的网格轮廓边作为光源来构造关于视单元的面的可见性图。在背投影处理中,关于网格轮廓边与视单元之间的居间网格多边形来识别一阶轮廓边。沿着视单元的方向在这些轮廓边上构造一阶楔。这些事件面引起了关于视单元的可见性图,其将视单元划分成从网格轮廓边看去可见的组件和不可见的组件。视单元的可见组件的、入射在现用作背投影光源的原始网格轮廓边上的SV-ME楔会旋转到的点是与该网格轮廓边对应的 VSVV。
假设将线光源定位成使得其看起来在所讨论的网格轮廓边处的网格对象的“顶部上方”。还假设在该具体的情况下,线段光源的从网格轮廓边看去的可见性受遮挡支撑三角形(即,支撑视单元顶点与网格轮廓边之间的2D轴)的单个居间三角形的影响。此外,假设该居间三角形的单个边跨越由线段光源和网格轮廓边形成的整个四面体轴以使得居间三角形“下垂”到该四面体轴中。此外,假设光源边、居间三角形的边和网格轮廓边是互相斜交的。该单个居间边在源和轮廓边上的各个点处影响另外两个边的互可见性。
这三个斜交的边的如此结合表示:入射在网格轮廓边上的实际可见性事件面包括二次曲面。这是经典的EEE事件TELLER(1992)。尽管如此,在该情况下所应用的背投影旋转和扫掠算法仍然可以识别光源上的单个保守VSVV。从网格轮廓边至该VSVV的旋转限定了入射在保守地近似入射在轮廓边上的实际的二次曲面的入射在该轮廓边上的单个SV-ME 楔。此外,可以通过细分网格轮廓边和计算针对每个子分段的VSVV来更加精确地近似入射在网格轮廓边上的实际的高阶(二次的)可见性事件面。在该细分处理中,相邻的轮廓分段可能产生背投影期间的不同VSVV。对应的SV-ME楔不共享共用的边但是通过SE-MV楔连接,上述SE-MV 楔是通过从相邻轮廓分段的顶点穿过从一个VSVV到另一个VSVV的线光源的扫掠来形成。以此方式,通过SV-ME楔和SE-MV楔的交替序列来保守地近似二次可见性事件面。
在一些情况下,使用网格轮廓边作为光源的旋转和扫掠处理不会产生视单元上的单个VSVV。例如,如果在背投影期间遇到轮廓周线的内侧拐角,其为单个连续周线形式或作为CSV,则视单元上的结果的可见“极值”特征可能不是点而是与作为光源的网格轮廓边平行的线段。这发生在以下情况:背投影SE-MV楔是由锚定在内侧拐角处贯穿网格轮廓边(作为光源)的扫掠来生成。该楔与视单元相交以使得相交部是支撑特征(即,楔相交部的两个端点是VSVV)。该情况与前面在简单的前向一阶旋转和扫掠中描述的情况类似,其中旋转操作导致支撑视单元边(SE-ME边) (例如,一阶轮廓边与视单元的极值边平行)。在两种情况下对该高阶前向SE-ME楔构造进行类似的管理。
使用针对多面体光源的一般情况的背投影处理的高阶可见性事件面构造的细节公开在本说明书的详细描述部分中。一般地,背投影应用使用网格轮廓边或这些边的分段作为线光源的一阶旋转和扫掠方法来识别 VSVV。这些VSVV一般地由可见支撑视单元周线VSVSC来连接。通过对VSVSC的扫掠处理来构造居间的SE-MV高阶楔。另外的实施方式包括:在断开与相邻的轮廓边对应的VSVSC的情况下构造高阶SE-MV楔。
根据一些实施方式,该背投影方法用于计算针对网格一阶轮廓边的单个高阶SV-ME楔,其保守地近似入射在网格轮廓边上的可以包括多个二次曲面和平面的相交部的非常复杂的可见性事件面。在这样的情况下,可以细分网格轮廓边,并且对子分段应用背投影以更加准确地近似穿过单个边充分地变化的实际的事件面。该细分可以基于简单的测试自适应地进行,上述简单的测试表示线性化事件面从沿着具体分段的实际可见性事件面最大可能偏离。相比如Teller(1992)和Nirenstein(2005)等人的方法:首先计算入射在轮廓边上的事件面的整个集合,然后通过使用某种类型的包含测试或高纬度CSG来确定哪些是实际的本影边界面,该方法需要较少的计算。
如先前针对一阶可见性图构造所遇到的,在一些情况下,对于相邻的轮廓边或分段的SV-ME楔是断开的并且必须由通过从边的共享点穿过视单元的边界轮廓周线的扫掠形成的SE-MV楔来连接,以使得该扫掠连接对于连接的网格轮廓边的两个VSVV。
在一阶情况下,与相邻的轮廓边对应的两个SVV总是位于视单元的实际边界上并且通过视单元的单一边界轮廓周线来连接。在高阶背投影情况中,两个VSVV可以或可以不位于相同的周线上。如果视单元的从相邻边看去可见的两部分不相交,则VSVV没有通过单个周线来连接。在该情况下,两个周线的凸包可以用于保守地连接两个高阶楔并且可以根据该连接的周线来保守地生成高阶SE-MV楔。
根据一些实施方式,仅当如由这两个结构之间的2D轴的遮挡所示出的,对应的支撑视单元顶点(SVV)从网格轮廓边看去被遮挡时,才将背投影方法应用于网格轮廓边。对于SV-ME楔的2D轴的该遮挡是从点看去的可见性问题,其可以通过先前描述的网格遍历算法的2D版本来计算。轮廓边的EVV对于其是可见的任何分段不需要应用背投影法,这是因为对于这些分段,一阶楔是精确的可见性事件面。
此外,根据一些实施方式,对从其看去SVV或VSVV被遮挡的轮廓分段的细分和递归投影是由以下简单的测试来指导的:对当前所计算的楔与入射在该分段上的实际的可见性事件面之间的最大可能偏差进行测量。该测试是通过从该轮廓分段沿着通常用于寻找SVV的相反方向旋转至视单元来进行的。沿着该方向的旋转识别轮廓边与视单元之间的分离平面。该分离平面对应于入射在轮廓边分段上的高阶可见性平面的最大可能程度。它还对应于分段与视单元之间的极值半影边界。在一些实施方式中,仅当几乎整个视单元从对应的轮廓分段看去被遮挡时,高阶遮挡面才会近似该平面。该半影平面与当前对于该分段的保守SV-ME楔之间的角度表示该轮廓处的当前保守事件面与实际事件面之间的最大可能偏差。相交在所讨论的轮廓边处的两个平面形成在该分段的长度的整个范围上被支撑的楔。该楔的体积反映了该轮廓边上当前保守的被遮挡体积与实际的被遮挡体积之间的最大可能偏差。
应当注意,该偏差随着距视单元的距离而减小。这反映了以下事实:在较大距离处,从区看去的可见性事件面接近从点看去的可见性事件面。从而,高阶可见性影响在距视单元的较远距离处是不太重要的。在一些实施方式中,取决于对应的SVV的可见性和该本影/半影测量值,自适应地对轮廓边进行细分。使用该方法,根据一些实施方式,仅当与较简单的一阶事件边界相比高阶可见性事件面明显地扩大被遮挡体积时,才生成高阶可见性事件面。
前述讨论假设背投影处理用于细化入射在网格的一阶轮廓边上的楔。实际上,将背投影处理应用到一阶轮廓边可以产生以下SV-ME楔:当由对应的VSVV和轮廓边形成的三角形位于共享该轮廓边的两个三角形的背面侧上,则上述SV-ME楔违反了局部可见性。在一些实施方式中,这样的SV-ME楔仍然是入射在一阶网格轮廓边上的实际的可见性事件面的保守表示。但是,这样的局部可见性的违反表示:对应的一阶网格轮廓实际不是从视单元看去的轮廓边。替代地,它位于源于实际的从视单元看去的轮廓边的另一个可见性事件面的被遮挡侧上,相比一阶轮廓边,该实际的从视单元看去的轮廓边距视单元较近。将该类型的从视单元看去的轮廓边称为高阶网格轮廓边。
一般的从区看去的轮廓边可以或可以不支撑高阶可见性事件面。如由于Drettakis(1994)和Nierenstein(2005)所定义的,一般的从区看去的轮廓边是对于视单元上的任何点的从点看去的轮廓边的任何网格边。相比一阶轮廓边,这一般包括网格多边形的更多边。
一般的从区看去的网格轮廓边取决于一般的从区看去的轮廓边与视单元之间的居间几何图形的精确布置可以或可以不引起从视单元看去的本影可见性事件面。可以使用与识别一阶网格轮廓边的准则稍微不同的准则来识别一般的从区看去的网格轮廓边。根据一些实施方式,如果满足以下三个准则则边为一般的从视单元看去的轮廓边:1)它必须具有相对于视单元的至少一个顶点正面对的至少一个组件三角形,2)它必须具有相对于视单元的至少一个顶点背面对的至少一个组件三角形以及3)上述组件三角形相对于彼此必须背面对。
可以对前述3D网格遍历算法进行修改以包括入射在非一阶的、一般的从视单元看去的轮廓边上的本影事件面。在一种修改中,3D网格遍历初始地以常用方式进行:检查每个网格边以确定其是否为一阶轮廓边。使用一阶网格轮廓边作为线光源来进行背投影以通过识别视单元面上的 VVS和VSVSC来计算入射在一阶网格轮廓边上的高阶楔。如果对应的高阶SV-ME楔违反了局部可见性,则通过以下处理来识别一般的从视单元看去的轮廓周线:远离一阶边来对网格进行遍历直至遇到一个或多个一般的从视单元看去的轮廓边,其包括对遮挡原始的一阶网格轮廓边的高阶可见性事件面进行支撑(即,通过背投影)的轮廓周线。当高阶楔也违反局部可见性时可以重复该缩回。该修改开始于保守结果并且基于当前事件面与实际事件面的最大偏差的测量结果将该保守结果细化至期望的精度。
相比Teller(1992)的线性化非半影方法,本发明的线性化背投影方法提供了对高阶可见性事件面的更精确的近似。Teller的非半影方法使用了从入口边到源入口的旋转策略,其有效地识别了与目标入口边对应的源入口上的VSVV。该点与源入口边一起用于限定包围非半影体积的平面。
这些平面对应于由本实施方式定义的SV-ME楔/UBP的平面。如前面这对一阶可见性(例如,两个入口序列之间)的情况所指出的,Teller 仅使用SV-ME平面来近似可见性边界,而本发明使用SV-ME多边形和 SE-MV多边形(例如,UBP)两者。相比Teller的基于相交平面的非半影,本实施方式对这些多边形楔的使用通常产生对实际的可见性边界的更加精确的近似。此外,本方法定义了对于线性化背投影的系统方法,包括网格遍历、轮廓边识别和自适应细分,其可以应用到一般的从区看去的可见性问题。相比之下,Teller的非半影方法依赖于仅能够应用与通过入口序列的更加有限的可见性问题的简单旋转策略。
现参考附图,其中相似的附图标记指代贯穿若干图的相同或对应部分,图55是根据本发明的用于实施使用保守线性化本影事件面来确定从区看去的可见性和进行基于增量PVS的内容流处理的系统及方法的示例性统一处理器计算机系统。计算机5500实施本文所公开的实施方式的方法,其中计算机外壳5502容纳包括CPU 5506和存储器5508的母板5504。计算机5500还包括多个输入设备,例如,键盘5522和鼠标5524以及用于控制监视器5520的显卡5510。此外,计算机系统5500进一步包括软盘驱动器5514和其他可以移动介质设备(例如,光盘5519、磁带和可以移动的磁光介质)、硬盘5512或使用适当的设备例如SCSI总线或增强型 IDE总线连接的其他固定的高密度介质驱动器。尽管光盘5519被示出成 CD盒,但是可以将光盘5519直接插入到不需要盒子的CD-ROM播放器中。还连接到相同的设备总线或另一个设备总线,计算机5500可以附加地包括光盘读/写器5518或光盘自动电唱机。此外,打印机还提供图像基元、暴露事件和三维图像的打印列表。
该系统进一步包括至少一个计算可读介质。这种计算机可读介质的示例是光盘、硬盘、软盘、磁带、磁光盘、PROM(EPROM、EEPROM、闪存PROM)、DRAM、SRAM等。本发明包括存储在任何一种计算机可读机制或其组合上的用于控制计算机5500的硬件以及用于使得计算机 5500与人类用户进行交互两者的软件。根据一些实施方式,这样的软件包括但不限于设备器驱动器、操作系统和用户应用程序如软件开发工具。这样的计算机可读介质进一步包括用于实施使用保守线性化本影事件面来预计算从区看去的可见性和进行基于增量PVS的内容流处理的方法的实施方式的计算机程序产品。
图56是在计算机5500中使用的处理器5600的框图。在一种实施方式中,处理器5600包括对存储在主存储器5640和/或ROM 5650中的数据和指令进行处理的CPU 5680。CPU5680还处理存储在磁盘5610或 CD-ROM 5620上的信息。例如,CPU 5680是来自美国IBM的IBM系统X,其采用至少一个来自美国Intel的Xenon处理器或来自美国AMD 的Opteron处理器。因此,与移动设备中的处理对应的指令存储在磁盘 5610、CD-ROM 5620、主存储器5640或ROM 5650中的任意一种上。
在一种实施方式中,处理器5600还包括网络接口5675如来自美国的 Intel公司的Intel Ethernet PRO网络接口卡、显示控制器5630如来自美国NVIDIA公司的用于连接显示器5602的NVIDIA GeForce GTX图形自适配器,显示器5602如Hewlett Packard HP L2445wLCD监视器。处理器5600还包括用于连接键盘5695和定位设备5685如滚卷球或鼠标的I/O接口5690。根据一些实施方式,磁盘控制器5660与磁盘5610互连,例如,硬盘驱动器或闪存存储驱动器、和CD-ROM 5620或具有总线5670 的DVD驱动器,总线5670是ISA、EISA、VESA、PCI或类似的用于互连服务器5600的所有组件的总线。因为显示器5602、键盘5695和定位设备5685以及显示控制5630、磁盘控制器5660、网络接口5675和I/O 接口5690的一般特征和功能是公知的,所以出于简便起见,省略其描述。当然,其处理和硬件供货商及类型在本领域中已知,例如,来自美国 Freescale公司的Freescale ColdFire、i.MX和ARM处理器。
图56的示例处理器5600是计算设备如PC的硬件平台,并且CPU 580 是IntelPentium处理器,或本领域中已知的其他期望的处理器。存储在主存储器5640、ROM 5650、磁盘5610或CD-ROM 5620中任意一种上的计算机可读指令被设置为通用应用程序、后台守护进程或操作系统的组件、或其组合,其结合CPU 5680和如Microsoft VISTA、UNIX、Solaris、LINUX、Apple MAC-OS等操作系统以及本领域技术人员已知的其他系统来执行。
主存储器5640是随机存取存储器(RAM)、闪存存储器、EEPROM 存储器等,而ROM5650是只读存储器如PROM等。由于主存储器5640 和ROM 5650是公知的,所以出于简便起见省略其另外的描述。
图57是示出了在一种实施方式中可见性事件编码器、可见性事件服务器和可见性事件客户端之间的关系的示例性图。
在一些实施方式中,使用保守线性化本影事件面来对示出为数据 5710的包括几何图形、纹理和其他信息的游戏数据库或其他建模环境进行处理以产生存储为可见性事件数据(5730)的增量PVS数据。图57所述的该处理由可见性事件编码器5720来进行。在一种实施方式中,离线进行该处理/编码以生成可见性事件数据5730,其被存储供随后使用。在一些实施方式中,可见性事件编码器5720包括处理器5600并且进行图1、图3、图4A、图4C、图5A-图5C、图6A和图6B所示的处理。在另外的实施方式中,可见性事件编码器采用图20A及有关图的3D网格遍历处理以生成可见性事件数据5730。
在一些实施方式中,在运行时间由标记为“服务器”的服务器单元来传递可见性事件数据5730。在一些实施方式中,该服务器单元包括所存储的可见性事件数据5730,先前由可见性事件编码器生成。服务器单元还可以实施可见性事件解码器-服务器处理5740。在一些实施方式中,该可见性事件服务器处理可以实施基于导航的预取服务器元素以将可见性事件数据通过标记为5790的网络互连传递给标记为“客户端”的客户端单元。在一些实施方式中,可见性事件服务器可以实施结合图48A、图 49、图50A、图50B和图51所讨论的基于知觉的分组控制方法。
在一些实施方式中,将可见性事件服务器5740连接至游戏引擎-服务器处理5750。游戏引擎-服务器处理通常用在现有的多玩家游戏中,例如为了接收多玩家游戏中的玩家的位置和为了将该数据传递至客户端单元。相比之下,可见性事件服务器5740渐进地传递几何图形、纹理和其他信息,其包括建模环境,如在一些实施方式中基于建模环境内的用户运动预取的可见性事件数据。
将可见性事件数据5730传递到标记为“客户端”的客户端单元,其在一些实施方式中包括可见性事件解码器-客户端处理5780。可见性事件客户端处理5780接收可见性事件数据5730。处理5780将可见性事件数据处理成能够渲染的PVS信息。在一些实施方式中,通过标记为5770的游戏引擎客户端来进行该渲染。
在一些实施方式中,解码器-客户端处理5780接收由以下方法有效地压缩的可见性事件数据:对具有高效的动态遮挡的轮廓周线和遮挡边界进行识别和标记。在一些实施方式中,该有效压缩通过结合示例性流程图图 33A、图33B、图33C和图33D来描述的周线识别和标记处理来进行。
在这种实施方式中,解码器-客户端处理5780能够使用包括在所传递的可见性事件数据中的标记的周线信息来根据有限数目的所标记的一阶轮廓边中识别整个周线(参见,图32A和图32B的示例性流程图)。解码器-客户端处理的实施方式还可以在运行时间从标记轮廓周线数据生成整个遮挡边界(参见,图34A和图34B以及图35A和图35B)。
使用根据标记的边信息生成的该周线数据,在一些实施方式中,解码器-客户端处理5780在运行时间通过从针对PVS或正在生成的增量PVS 的每个连接组件的所标记的种子三角形到周线的遍历来生成PVS(例如,来自父PVS数据的一个或多个子PVS)、或增量PVS信息(参见图36和图37的示例性流程图)。
在一些实施方式中,解码器-客户端处理5780与游戏引擎客户端 (5770)连接。在一些实施方式中,取决于用户或其他代理程序的视点位置的位置,将传递到解码器-客户端处理或在前述的解码器-客户端处理的去压缩子处理中生成的PVS或增量PVS数据提交至渲染。该渲染可以采用标准的图形API如由Sony公司的Playstation 3所采用的MicrosoftDirectX或OpenGL-ES。在一些实施方式中,这些图形API通常通过驱动器连接至图形硬件。
在一些实施方式中,解码器-客户端处理还获取表示建模环境中的用于或自主代理程序的位置的信息。在一些实施方式中,使用双向通信互连 5790将该视点位置信息传输至解码器-服务器处理。
图2详细描述:一阶轮廓边的识别和一阶保守线性化本影事件面的构造
如前所述,两种现有技术方法广泛地使用从区看去的可见性事件面:对于面光源的阴影体积算法和不连续性网格化算法。
在阴影体积算法中,正在构造的可见性事件面包括相交形成对应的阴影体积的边界的本影事件面和半影事件面。在简单的情况下,本影事件面是多边形(本文称为本影边界多边形或UBP)并且形成为多面体的本影体积的边界。
不连续性网格化方法还采用是本影和半影两者的可见性事件面。在不连续性网格化方法中,被称为楔的可见性事件面没有彼此相交。从而,不连续性网格方法例如不产生明确的本影体积。替代地,在不连续性网格化方法中,楔仅与网格多边形相交。接着楔-多边形相交步骤,对每个楔应用2D可见性处理以确定相交的多边形分段的可见部分。相交的网格多边形的这些可见分段形成该网格的不连续性边界。该连续性边界限定了多边形网格上的同一定性可见性区(例如,本影、非半影等),上述多边形网格可以在构造了连续性网格之后来确定。
根据一些实施方式,保守的从区看去的可见性确定的本方法采用通过可见性事件面构造的全新方法来构造的保守的线性化本影可见性事件面。
在本方法的一种实施方式中,这些保守线性化本影事件面彼此相交并且与网格多边形相交以形成与在阴影体积方法中使用的事件面类似的 UBP。
在本方法的另一种实施方式中,这些保守线性化本影事件面实际上与网格多边形相交以形成与在不连续性网格化方法中使用的事件面类似的楔。在该方法的变型中,根据这些楔来构造保守线性化从区看去的可见性图(VM)。
下面是可见性传播的一阶模型的概述,其应用至两类一阶可见性事件面:楔和UBP(其可以通过楔-楔相交来构造)。
如从对现有技术的分析中很明显的是,在多面体环境中限定从区看去的可见性的精确的可见性事件面经常是二次曲面。这些高阶面提出了明显的计算挑战,其使得鲁棒的、实际的从区看去的可见性预计算方法的开发非常困难。
实施方式包括从区看去的可见性预计算的方法,其基于多面体环境中的从区看去的可见性传播的简化模型。将此称为一阶模型。根据一些实施方式,该模型产生了经常是平面、经常是保守的并且频繁地为精确的可见性事件面。使用测试来确定一阶面是否是精确的并且用于测量一阶面与精确结果的最大偏差。可以使用高阶方法来对一阶方法为不精确的区中的一阶事件面进行细化。在一些实施方式中,高阶方法是沿着反方向的一阶方法的实施:计算视单元的从边看去可见的部分。
不同与在不连续性网格化方法中使用的平面可见性事件面(Heckbert 等人1992),保证本方法所采用的保守一阶从区看去的可见性事件面形成连续的本影表面。这些连续的本影表面产生连续的不连续性网格边界,其将不连续性网格划分成从视单元看去可见的区和从视单元看去被遮挡的区。从而,这些区形成保守线性化本影不连续性网格。公开了构造保守线性化本影从视单元看去的可见性图的方法。还指出了用于根据对应的从区看去的可见性图导出的保守从区看去的PVS的方法。
根据一些实施方式,假设多边形网格是每个边都精确地具有两个组件多边形的封闭流形三角形网格(即,通过它们的共用边或拐角连接的一组三角形)。此外,假设视区是凸视单元。在一些实施方式中,一阶可见性确定方法不需要这些假设,但是这些假设增强了实施的简化。例如,多边形网格可以是流形但不是封闭的。在这种情况下,每个边具有一个或两个组件三角形。
根据一些实施方式,一阶从区看去的可见性模型是基于以下简化保守假设:如果多边形网格的任何元素从视区看去(本文称为视单元)的任意部分可见,则其从该视单元的所有部分看去可见。该假设导致一阶从区看去的轮廓边的定义。
如果共享多边形网格的边的一个组件多边形相对于视区的任何顶点正面对(可见)并且另一个组件多边形相对于该视区的所有顶点背面对(不可见),则该边是一阶从区看去的轮廓边。一阶轮廓边的定义还要求组件多边形不彼此面对。
相比一般的从区看去的轮廓边(例如,由Dretakis等人和Nirenstein 2005所使用的)的定义,这是一个更加有限的定义。如果对于视区的任何顶点,一个组件多边形正面对并且另一个组件多边形背面对,则边是一般的从区看去的轮廓边。不同地进行陈述,如果边对于视区中的任何点是从点看去的轮廓边,则该边是一般的从区看去的轮廓边。
下表将一阶从区看去的轮廓边与一般的从区看去的轮廓边和从点看去的轮廓边进行比较。
表III
轮廓边定义表
一阶从区看去的轮廓边的定义与从点看去的轮廓边的定义的相似之处在于:这两种轮廓边限定了从具有为退化的区的视点的对应的“区”看去的可见性与完全不可见性之间的边界。明显地,如果组件多边形相对于凸视单元的所有顶点背面对,则它从该视单元看去不可见。一阶轮廓边定义要求共享该边的其他组件多边形从该视单元上的任何点看去可见。
明显地,在任何多边形网格上,存在许多比一阶从区看去的轮廓边更一般的从区看去的轮廓边。每个一阶轮廓边都是一般的从区看去的轮廓边但是并非每个一般的从区看去的轮廓边都是一阶轮廓边。
根据在本实施方式中为多面体视单元的视区来确定从区看去的可见性。
从区看去的可见性事件面入射在从区看去的轮廓边。这些从区看去的可见性事件面可以是半影或本影。
根据一些实施方式,如在此处所定义的,从区看去的本影可见性事件面(还被简单地称为本影面)是具有从区看去被遮挡侧和从区看去未被遮挡侧的定向面。位于本影面的从区看去被遮挡侧上的点从视区看去上(或中)的任何及所有点被遮挡。本影面上的从区看去的未被遮挡侧上的点从视区看去上(中)的任何点未被遮挡(即,可见的)。
从区看去的本影可见性事件面可以是精确的或它可以是保守的。
在一些实施方式中,精确的从区看去的本影事件面由二次曲面组件和平面组件组成并且可以入射在任何一般的从区看去的轮廓边上。为了确定哪一个一般的从区看去的轮廓边支撑精确的本影事件面,解决从区看去的可见性问题的精确解。如前面所讨论的,这是一个困难的计算问题,其通常需要在高维度空间中解决。
相比之下,实施方式采用可见性传播的一阶模型,其定义了构造都为平面并且仅入射在一阶轮廓边上的保守本影事件面的旋转和扫掠方法。
在一些实施方式中,位于保守本影事件面的被遮挡侧上的点实际上从视区看去被遮挡,而位于保守本影事件面的未遮挡侧上的点实际上可能未被遮挡或被遮挡。从而,使用保守本影事件面来确定从区看去的可见性,例如,使用保守从视单元看去的可见性映射方法,从视单元看去可见的几何图形从未被低估,但是可能被高估。
在不连续性网格化的现有技术方法中所采用的平面可见性事件面 (楔)是精确,但是它们一般不形成连续的可见性事件面。这是因为精确的可见性事件面一般由平面组件和二次曲面组件两者组成。从而,不连续性网格化的现有技术方法的平面可见性事件面不能用于确定本影区。
相比之下,使用本实施方式的方法构造的一阶可见性事件面是精确的或保守的但是被保证形成能够在例如从区看去的可见性映射的本方法中使用的连续的本影事件面以确定什么几何图形位于本影区的内部。从区看去的半影事件面是在一般的从区看去的轮廓边上入射定向可见性事件面。在半影事件面的未被遮挡侧上,源视区的特定子区或“方面”是可见的。但是在同一半影事件面的被遮挡侧上,视区的相同子区是被遮挡的。不连续性网格化的现有技术方法使用半影事件面来确定由多边形网格对象从面光源所投射的半影的各个组件。
根据一些实施方式,仅采用本影事件面来确定从区看去的可见性。在一种实施方式中,所有的这些本影事件面入射在一阶轮廓边上。在替代的实施方式中,可以通过背投影处理来自适应地细化一阶本影事件面以更加精确地近似精确的本影可见性事件面。这些细化的或“经调整的”可见性事件面是如一阶本影事件面、平面;但是它们反映了由视区的从轮廓边看去的部分遮挡所引起的“高阶”可见性效果。因此将这些可见性事件面称为高阶可见性事件面。在该替代的实施方式中,这些高阶可见性事件面(本影)可以“缩回”到非一阶、一般的从区看去的轮廓边。
表IV示出了入射在各种类型的轮廓边上的可见性事件面的类型和这些可见性事件面的某些特征。
表IV
入射在各类型的轮廓边上的可见性事件面
在图2A和图2B中示出可见性传播的一阶模型的基本方面。在本说明书的描述-实施方式部分给出了后续的细节。
图2A是示出了视单元和两个简单的多边形网格A和B的图。
图2A还示出了两个一阶从视单元看去的轮廓边:边A1和边B1(其被细分成分段B10和B1V)。
现在描述入射在这些一阶轮廓边上的保守线性本影事件面(CLUES) 的构造。在下面的讨论中,所构造的本影事件面与连续性网格楔从它们限定从视单元看去的单个特征(一般地为支撑视单元顶点或边)的可见性的意义上来讲是相似的。在本说明书的后续部分,示出可以将这些楔用于构造从其导出PVS的保守线性化从视单元看去的可见性图(VM)。
在一些实施方式中,限定从整个视单元看去的可见性的一阶本影边界多边形(UBP)通过与对应的一阶楔相交来明确地构造。将UBP的构造和用途示出为本说明书的随后部分中的替代实施方式。
从而,在一阶楔与一阶UBP(在图2A和图2B中以较简单的楔示出) 的构造中的第一步骤是相同的。
图2A示出了视单元和网格对象A和网格对象B。在一些实施方式中,视单元是具有八个顶点的3D立方体。例如,图2A中的视单元是具有顶点V1-V8的立方体。在另外的实施方式中,视单元是任何期望的凸多面体。网格A的边被标记为具有顶点A1_0和顶点A1_1的A1。网格B的边被标记为两个分段:B1O和B1V。相对于一阶轮廓边A1,因为B1V位于形成在边A1与对应于视单元顶点V8的对应的支撑视单元顶点SVV1之间的事件面“楔1”的未遮挡侧,所以分段B1V从支撑视单元顶点SVV1看去可见。对此,因为入射在一阶轮廓边A1上的背面平面沿着顺时针方向朝着视单元顶点V8旋转以确定对应的支撑视单元顶点,所以B1V位于“楔 1”的未遮挡侧上。从而,在一些实施方式中,入射在一阶轮廓边上的背面平面朝着视单元顶点旋转的方向指示视单元顶点所支撑的事件面的未遮挡侧。背面平面旋转的相反方向指示视单元顶点所支撑的事件面的遮挡侧。
相对于一阶轮廓边A1,因为B1O位于形成在边A1与对应的支撑视单元顶点SVV1之间的事件面“楔1”的被遮挡侧上,所以分段B1O从支撑视单元顶点SVV1看去被遮挡。
标记为“楔1”的一阶可见性事件面位于边A1与视单元之间的支撑平面中。边A1与视单元之间的支撑多边形SP1是由边A1的顶点A1_0和顶点A1_1以及标记为SVV1的视单元顶点形成的三角形(标记为SP1)。
根据一些实施方式,入射在边A1上的一阶可见性事件面“楔1”通过对入射在边A1的顶点A1_0和顶点A1_1上的对应的支撑多边形(SP1) 的两条边进行延伸来形成的。该延伸从A1的顶点A1_0和顶点A1_1处开始沿着远离视单元的方向半无限地进行。两条延伸的射线连接至边A1的顶点A1_0和顶点A1_1以形成标记为“楔1”的半无限的本影事件面。由于“楔 1”实际上远离视单元半无限地延伸,所以在图2A中仅示出了“楔1”的一部分。在一些实施方式中,事件面的平面是由3D平面等式如ax+by+ cz.=0来表示。
因此,在一些实施方式中,为了形成入射在一阶轮廓边和视单元顶点上的(从视单元看去的)一阶可见性事件面,首先构造轮廓边与视单元之间的支撑多边形。该构造与对轮廓边进行的旋转操作类似,上述旋转操作沿着远离背面组件多边形并且朝着视单元的方向进行直至遇到支撑视单元特征(边或顶点)。在一些实施方式中,通过远离视单元延伸该支撑多边形的非轮廓边来形成楔。
如在图2A中示出的,事件面“楔1”与边B1相交,将B1分成两个分段B1V和B1O,B1V相对于一阶轮廓边A1从视单元特征(视单元顶点SVV1)看去为一阶可见,B1O相对于一阶轮廓边A从SVV1看去不是一阶可见。“楔1”与一阶轮廓边B1(由分段B1O和B1V组成)在标记为CSV的点处相交。
出于说明的目的,现假设分段B1V位于由网格A的边和“视单元”的特征形成所有一阶可见性事件面的未被遮挡侧。在这种情况下,B1V 位于由以一阶楔与网格多边形以及与彼此的相交部形成的一阶多面体聚合本影(PAU)的外部(在未被遮挡侧)。在这些条件下,分段B1V从视单元看去为一阶可见。
如果分段B1V从视单元看去为一阶可见,则在一阶可见性模型的保守假设下,将分段B1V假定为从视单元看去的任何部分可见。从而,通过前述的在分段B1V与标记为SVV2的支撑视单元顶点之间生成支撑多边形(SP2)的旋转操作,来构造入射在分段B1V上的一阶可见性事件面。如在图2A中示出的,支撑多边形SP2是由分段B1V的顶点和视单元顶点V3(SVV2)限定。再一次采用前述的延伸支撑多边形的方法。结果的入射在BV1上的一阶可见性事件面被标记为“楔2”。
因为在这种情况下对应的支撑视单元顶点SVV1实际上从所支撑的一阶轮廓边A1看去可见,所以“楔1”是入射在边A1上的精确的可见性事件面。
“楔2”不是穿过B1V的精确的可见性平面,这是因为一阶可见性模型的保守假设被以非常特殊的方式违反:对应的支撑视单元顶点SVV2 实际上从所支撑的一阶轮廓边B1V看去是不可见的,当从该边观察时, SVV2被遮挡。
使用对支撑视单元顶点的从轮廓边看去的可见性进行测试的2D可见性测试可以确定入射在该轮廓边上的任何一阶可见性事件面(例如,楔) 的精确度。在一些实施方式中,如果支撑视单元特征是顶点,则这是一个从点看去的可见性测试,其与对一阶轮廓边的从对应的支撑视单元顶点 (SVV)看去的可见性进行的测试等同。根据一些实施方式中,一阶轮廓边的从对应的SVV看去可见的分段支撑精确的可见性性事件面,并且一阶轮廓边的从对应的SVV看去被遮挡的分段支撑不精确/保守的可见性事件面。
在轮廓边平行与支撑视单元边的特殊情况下,需要特殊的从边看去的可见性测试。在本说明书的随后部分中对此进行详细说明。
实施方式还包括增加不精确可见性事件面的精度的方法。在该方法中,对于一阶轮廓边的支撑不精确楔的每个分段,将视单元的面上的点识别为对于该分段的可见支撑视单元顶点(VSVV)。VSVV实际上从对应的轮廓边看去可见并且与该分段形成支撑多边形。
根据一些实施方式,通过背投影了确定VSVV:使用轮廓边作为线光源并且构造由多边形网格对象从线光源反向视单元投射的一阶从区看去 (在这种情况下,从边看去)的可见性事件面。这些一阶楔与网格多边形以及与视单元的相交部包括从轮廓边看去、关于视单元的可见性图。该可见性图包括视单元的从轮廓边看去可见的组件。VSVV是这些可见组件的支撑顶点。
通过将不精确的轮廓边分段旋转至对应的SVV而构造的楔是经调整的或“高阶”可见性事件面。这些高阶可见性事件面反映了视单元(源) 的从轮廓边看去的部分遮挡效果,一种不能用可见性传播的简单保守的一阶模型来解释的效果。
图2B示出了将B1V视为线光源的背投影处理的结果。根据被视为线光源的分段B1V来构造入射在边A1的顶点A1_0和顶点A1_1上标记为“楔 _背”的楔。注意,边A1相对于源区B1V为一阶轮廓边。在该示例中,“楔_背”下面的区为“楔_背”的未被遮挡侧,其表示视单元的从B1V 看去可见的部分。
B1V与A1之间的支撑多边形是具有边A1和边B1V的顶点VB的三角形。对应的楔“楔_背”与视单元相交,创建了视单元的包括顶点VSVV 的新的可见周线。
在一些实施方式中,构造背投影楔如“楔_背”的处理使用了一阶轮廓边识别以及旋转和扫掠楔构造的方法,如在本说明书中的一些实施方式中所描述的。当使用视单元作为视区来应用这些方法时,结果的一阶楔远离视单元延伸并且与多边形网格相交,将多边形网格划分成从视单元一阶看去可见的部分和一阶被遮挡的部分。相比之下,如果将这些方法应用于背投影,则对应的楔远离用作直线视区的一阶轮廓边(如B1V)延伸并且与视单元相交,将视单元划分成从轮廓边看去一阶可见的部分和从轮廓边看去一阶被遮挡的部分。视单元的该划分限定了新的可见视单元边界或周线(也称为可见支撑视单元轮廓边),其从用作直线视区的一阶轮廓边看去保守地可见。然后对该周线的顶点进行测试以确定在哪一个顶点是针对要在用作直线视区的一阶轮廓边上构造的高阶楔的支撑顶点(可见支撑视单元顶点)。
通过从BV1到VSVV的旋转生成为边B1V与可见的视单元周线之间的支撑顶点的支撑多边形“SP_高”来构造“经调整的”或高阶楔。
高阶支撑多边形“SP_高”的非轮廓边穿过B1V的顶点延伸,如前所述,形成高阶楔“楔_高”。
因此,为了构造从视单元看去的一阶轮廓边上的高阶可见性事件面,沿着反方向应用可见性传播的一阶方法以确定视单元的从轮廓边看去可见的部分。
如在本说明书的随后部分所示出的,可以基于误差测度自适应地对支撑不精确的可见性事件面的一阶轮廓边进行细分。可以在通过这些误差测度来指导细分的分段上构造高阶楔使得结果是对应的精确二次事件面的分段平面近似。此外,所应用的一阶可见性的本方法实现了构造二次曲面的新方法,其确保所构造的面保守地低估遮挡,即使聚合于精确的结果。
出于说明的目的,一阶可见性的前述理论性介绍采用了单一类型的可见性事件面。在源(视单元)顶点与轮廓边之间形成该类型的可见性事件面。将该类型的可见性事件面称为SV-ME楔。另一种类型的可见性事件面用于构造入射在非凸多边形网格上的连续的从区看去的可见性事件面。该类型的可见性事件面是由视单元(源)边和网格顶点形成的并且称为 SE-MV楔,在本说明书的其他部分对其进行了详细讨论。
总之,使用根据一阶轮廓边的简单的一阶“旋转-视单元”方法来构造一阶楔。一阶楔可以与网格多边形和其他楔相交形成连续的从视单元看去的可见性图或连续的一阶PAU。这两者数据结构保守地低估从视单元看去的遮挡。实施方式包括从一阶可见性图或一阶PAU导出保守的从视单元看去的PVS的实施。
可以通过应用一阶可见性方法来确定视单元的轮廓边可见的部分的背投影处理来构造高阶可见性事件面。
上面详细的描述介绍了可见性传播的一阶可见性模型和用于构造一阶可见性事件面的一些方法的总体概述。在本说明书中还将进一步详细地给出关于一阶轮廓边识别和一阶楔构造的细节。
图1至图6详细的描述:采用使用旋转和扫掠方法来构造的保守的线性化本影事件面的第一实施方式。
一种实施方式包括基于多面体环境中的可见性传播的简化的一阶模型来构造保守的线性化可见性图的方法。如前面在实施方式中所描述的,一阶可见性模型基于以下保守的假设:如果多边形网格的轮廓边从视单元看去的任意部分可见,则该轮廓边从视单元看去的所有部分可见。根据该模型的实施方式,轮廓边(称为一阶轮廓边)限于具有相对于视单元的所有顶点正面对的一个组件多边形并且具有相对于视单元的至少一个顶点背面对的另一个组件多边形的那些三角形网格边。此外,要成为一阶轮廓边,组件多边形还要相对于彼此背面对。
该模型还导致以下方法:通过从(一阶)轮廓边到视单元的顶点的旋转(从旋转的支撑多边形导出SV-ME楔)或通过从(一阶)内侧拐角轮廓顶点遍及视单元轮廓边进行扫掠(从扫掠的支撑三角形导出SE-MV楔) 来形成一阶保守的线性化本影事件面(被称为CLUES,或称为一阶楔或简单地称为楔)。该方法还使用在所支撑的轮廓边与支撑视单元边平行的特殊情况下生成的SE-ME楔。该一阶实施方式总是产生保守的本影边界,并且在一些情况下,其是精确的本影边界。
其他实施方式基于多面体环境中可见性传播的高阶模型。该模型没有假设如果轮廓边从视单元看去的任何部分可见则其从视单元看去的所有部分可见。更确切地,该模型解释了视单元的从轮廓边看去被遮挡的部分。高阶模型形成替代的实施方式的基础,上述替代的实施方式在一阶方法不精确的情况下可以产生对精确的本影边界更加精确的近似。
首先描述本方法的一阶实施方式。
图1:一阶楔的构造
图1示出了公开了使用旋转和扫掠方法由多边形网格对象和凸视单元形成的一阶楔的构造的总体组织的流程图。根据一些实施方式,处理流程从步骤110开始,其中针对一阶轮廓边单独地检查多边形网格对象的多边形。在图3中详细公开了识别一阶轮廓边的方法。在图20中示出了公开了检查多边形的次序的实施方式,其示出了实施严格的从前到后的次序的算法。
处理流程行进至步骤112以确定在步骤110中遇到的一阶轮廓边是否与支撑视单元边平行。
如果在判决步骤112中确定一阶轮廓边不与支撑视单元顶点平行,则处理流程行进至步骤114以构造轮廓边与视单元之间的支撑多边形。图 4A示出了该构造的细节。
处理流程行进至步骤116以通过对入射在一阶轮廓边的顶点上的对应的旋转支撑多边形的特定边进行延伸来构造入射在一阶轮廓边上的 SV-ME楔。在图6A中公开了步骤120的额外细节。
如果一阶轮廓边与支撑轮廓平行,则处理流程从步骤112行进至步骤 118。
在步骤118中,如前所述,通过从视单元边到视单元的旋转来构造被称为SE-ME四边形(源边-网格边)的支撑四边形。
处理流程行进至步骤120以通过对由SE-ME支撑四边形的对角线顶点形成的线段进行延伸来构造与SE-ME支撑四边形对应的SE-ME楔。 SE-ME楔的边由被支撑的轮廓边和通过远离视单元穿过轮廓边顶点延伸对角线线段形成的两条线组成。
处理流程从步骤116或步骤120行进至判决步骤125以确定相邻的轮廓边是否形成一阶轮廓周线的外侧拐角。在一些实施方式中,使用针对相邻轮廓边的相对方向的简单测试来做出该确定。位于多边形网格的边界上的每个边具有以下自然方向:该边的一条法线面向多面体外侧(外面法线) 并且相对的法线面向多面体内部。如果对于相邻轮廓边的两个外向法线彼此远离面对,则共享的轮廓顶点是该轮廓周线的内侧拐角。否则共享的轮廓顶点形成外侧拐角。
如果在步骤125确定相邻轮廓边形成了轮廓周线的外侧拐角,则处理流程行进至步骤140以将入射在相邻轮廓边上的楔彼此相交。在一些实施方式中,如果相邻的SV-ME楔是通过旋转至相同的支撑视单元顶点 (SVV)来生成的,则它们精确地在共用边处相交。否则,相邻的SV-ME 楔在它们的多边形内部彼此相交并且做出明确的多边形-多边形相交部确定。在任一种情况下,相交的SV-ME楔产生跨越由两个被支撑的轮廓边形成的一阶轮廓周线的部分的连续的本影事件面。在一些实施方式中,相邻的SV-ME楔没有相交。在这些实施方式中,步骤140是可选的。没有与相邻的SV-ME楔相交的SV-ME楔仍然可以与网格多边形相交,并且对结果的楔-网格多边形相交部进行测试以确定其是否是从视单元看去的遮挡边界。结合图7D4和图7D5给出了相交的相邻SV-ME楔的另外讨论。
如果在判决步骤125中确定相邻的轮廓边没有形成轮廓周线的外侧拐角,则处理流程从步骤125行进至步骤130。这种情况与一阶轮廓周线的内侧拐角对应。
在一些实施方式中,这样的由通过顶点相连的两个轮廓边形成的内侧拐角是简单的轮廓顶点。使用可见性传播的一阶模型,内侧拐角还可以形成在组件轮廓边不共享原始流形网格中的顶点的复合轮廓周线上。这些顶点被称为复合轮廓顶点(CSV),它们对应于流形的从区看去的t顶点,并且在本说明书的随后部分对其进行详细讨论。
在步骤130中,在内侧拐角网格轮廓顶点和视单元的相对于该内侧拐角网格轮廓顶点为从点看去的轮廓边的某些边之间形成一个或多个支撑扫掠三角形。在图5A和图5B中公开了该处理的额外细节。
处理流程行进至步骤135,通过穿过内侧拐角网格轮廓顶点延伸扫掠三角形的边来根据扫掠三角形生成对应的SE-MV楔。在图6B中公开了该处理的详细细节。
可以有使用不同的方法来构造一阶楔的集合的替代实施方式。例如,在一种替代实施方式中,可以构造视单元与多边形网格对象之间的整个保守支撑包,并且将一阶楔选为保守支撑包多边形的子集。
图3示出了图1中的步骤110的细节,一阶轮廓边的识别。根据一些实施方式,在图1的步骤110处进入图3所示的处理。在一些实施方式中,识别一阶轮廓边的处理开始于识别该边的组件多边形的步骤310。在一些实施方式中,通过将多边形网格存储为链式数据结构如翼边数据结构来方便该处理,在上述数据结构中存储有针对每个边的组件多边形的参考。在一些实施方式中,使用任何期望的数据结构来表示多边形网格。在一种实施中,多边形网格是闭合的流形,其中每个边精确地由两个组件多边形共享。
处理流程行进至判决步骤315对被称为多边形B或PB的一个组件多边形进行测试以确定该组件相对于视单元的所有顶点是否背面对。在这种情况下,视单元的所有顶点可位于包括该组件多边形的平面的背面侧上。
如果在判决步骤315中确定PB相对于所有视单元顶点不背面对,则处理从步骤315行进至步骤320以对被称为PA的另一个组件多边形进行测试,如在步骤315中所描述的。
如果在判决步骤320中确定PA相对于视单元的所有顶点背面对,则处理流程行进至步骤325以确定组件三角形PB相对于至少一个视单元顶点是否正面对。
如果在判决步骤325中确定PB相对于至少一个视单元顶点正面对,则处理行进至判决步骤330对PA和PB进行测试以确定它们相对于彼此是否背面对。
如果在判决步骤330中确定PA和PB相对于彼此背面对,则处理流程行进至步骤335,其中正在测试的边是一阶轮廓边。
如果在判决步骤330中确定PA和PB相对于彼此不背面对,则处理流程行进至步骤355,其返回正在测试的边不是一阶轮廓边的结果。
如果在步骤315中确定PB相对于视单元的所有顶点背面对,则处理流程行进至步骤340以确定PA相对于至少一个视单元顶点是否正面对。如果PA相对于至少一个视单元顶点正面对,则处理流程行进至步骤345 以确定PA和PB相对于彼此是否背面对,如在步骤330中功能上所描述的。
如果PA和PB相对于彼此背面对,则处理流程行进至步骤350,其返回正在测试的边是一阶轮廓边的结果。如果PA和PB相对于彼此不背面对,则处理流程从步骤345行进至步骤355。如果PA相对于至少一个视单元顶点不正面对,则处理流程行从步骤340行进至355。如果在步骤 320、325、330、340、或345中的任何测试都失败,则该网格边不是一阶轮廓边,如在步骤355中所指示的。
图4A:SV-ME和SE-ME支撑多边形的构造方法
图4A是示出了构造入射在(一阶)网格轮廓边上的SV-ME支撑多边形的方法的流程图。图4A给出了在步骤116中示出的处理的额外细节。根据一些实施方式,从图1的步骤116中进入图4A所示的处理。
在一些实施方式中,当遇到多边形网格的一阶边时,构造支撑多边形的处理从步骤410开始。尽管在其他实施方式可能潜在地使用高阶轮廓边,但是在本实施方式中这是一个一阶轮廓边。
处理流程行进至步骤415以将一阶轮廓边与视单元之间的“支撑_角度”设置为“最大”值(例如,180度)。根据一些实施方式,将支撑角度定义为:当从背面组件多边形的平面开始旋转穿过一阶轮廓边的平面并且朝着视单元旋转(沿着背面组件多边形的法线的总体方向)直至遇到视单元的第一顶点或边时所形成的角度。旋转平面与视单元接触的位置是轮廓边与视单元之间的支撑多边形的平面。在该旋转期间所经过的角度被称为支撑角度或旋转角度,并且在支撑平面与轮廓边的背面组件多边形的平面之间对该角度进行测量。引起最小旋转角度的视单元顶点或边(如果支撑多边形是SE-ME类型)是支撑顶点或支撑边。
图4A的剩余部分示出了识别支撑视单元和构造支撑多边形的处理。处理流程行进至步骤420以将“顶点”设置为视单元的第一顶点。在实施方式中,“顶点”是用于测试的候选顶点以确定该候选顶点是否为支撑顶点。处理流程行进至步骤425以构造网格轮廓边“边”与“顶点”之间的三角形。处理流程行进至步骤430以使用用于在平面的交线处测量平面之间的角度的标准方法来测量“三角形”的平面和该轮廓边的背面组件多边形的平面的可见侧之间的角度。处理流程行进至步骤435以将该“角度”与“支撑_角度”的当前值进行比较。如果“角度”小于“支撑_角度”的当前值,则处理流程行进至步骤440以将“支撑_角度”设置为“角度”。处理流程行进至步骤445以将“支撑_顶点”设置为当前的“顶点”。
处理流程行进至步骤450,其中支撑多边形被设置为由轮廓边和支撑顶点形成的三角形。
处理流程行进至步骤455以确定是否剩余有未处理的视单元顶点。如果在判决步骤455确定没有剩余未处理的视单元顶点,则处理流程行进至步骤460,其中将支撑多边形输出。
如果在判决步骤455确定剩余有未处理视单元顶点,则处理流程行进至步骤475,其中选择用于处理的下一个视单元顶点。
如果在判决步骤435中确定所测量的“角度”(旋转角度)不小于当前的“支撑_角度”,则处理流程行进至步骤465以确定旋转角度(“角度”) 是否等于“支撑_角度”的当前值。如果该条件成立,则视单元的两个顶点与对应于轮廓边形成相同的角度,对应与SE-ME支撑多边形,并且处理流程行进至步骤470以设置两个视单元顶点与视单元边之间的四边形 (SE-ME支撑多边形)。
仅在轮廓边与两个视单元顶点之间的支撑角度相等的特殊情况下才在步骤470中构造四边形支撑多边形。对于在本实施方式中假定的凸视单元,这仅出现在当两个支撑视单元顶点位于与视单元的网格轮廓边平行的边上时。在这种情况下,从视单元看去的“跨越”轮廓边的可见性不是由通常的从点看去的可见性三角形来确定而是替代地由从分段看去的可见性四边形来确定。
可以有不同地处理该特殊情况的其他实施方式,例如,通过构造入射在平行的支撑视单元边上的两个支撑三角形和扫掠三角形。使用该方法,结果的对应的相邻UBP不会在边处相交,而是替代地,它们会在它们的平面上交叠,从而导致包围的多面体本影体积的局部退化。识别四边形支撑多边形的本方法避免了随后步骤中的这种退化。
不管候选支撑多边形是三角形还是四边形,处理流程都从步骤470 行进至步骤455以确定是否剩余任何未处理的顶点,如上所述。如果剩余视单元顶点,则处理流程行返回至步骤475,其中选择下一个视单元顶点。接着,处理遵循前述步骤。
在最终步骤460处,处理输出支撑多边形,其是由网格轮廓边和视单元的顶点形成的三角形,或是形成在网格轮廓边和视单元边之间的四边形。
可以有构造SV-ME支撑多边形的方法的替代实施方式。在一种替代的实施方式中,与一个一阶轮廓边对应的“支撑_顶点”限于直接与对于相邻的一阶轮廓边的“支撑_顶点”相连的那些视单元顶点,其中相邻的边形成网格的外侧拐角(凸特征)。该方法与在3D中构造凸包的分治方法的经典的现有技术方法中使用的方法类似。在本申请中,视单元是非常简单的多面体并且该方法所负担得起的加速是非常有限的。
图4B示出了网格对象M1和视单元。视单元和多边形网格M1是在图7A和图7B1中示出的相同对象。在图4B中,视点位于图7A和图7B1 的视点之间。标记为B的一阶轮廓边还出现在这三幅图中。图4B的观察方向非常接近于平行边B。因此,边在最前地(edge-on)将边B几乎看做点。在图4B和图7B1中将多边形网格M1的顶点视为顶点V3。
将两个候选支撑多边形示为“候选SP1”和“候选SP2”。通过构造由边B和视单元的顶点形成的三角形来针对一阶轮廓边B识别候选支撑多边形。测量该支撑多边形的平面与共享边B的背面组件多边形的平面形成的角度。该角度对应于在图4A的步骤425中确定并且在同一图中的步骤435和步骤465中使用的变量“支撑_角度”。在图4B所示的示例中,一阶轮廓边B的背面组件多边形是由边B和顶点V3形成的三角形。
在该示例中,由“候选SP1”(对应于顶点V4)形成的角度用标记为“角度-1”的虚线弧来表示。
在该示例中,由“候选SP2”(对应于顶点V8)形成的角度用标记为“角度-2”的虚线弧来表示。
根据这两个弧,明显地,“角度-1”小于“角度-2”。根据图4A的示例性流程图,会将候选SP1保持为一阶轮廓上的实际的支撑多边形的候选者。如果在图4A中的示例性流程图中示出的处理对“视单元”的所有顶点进行测试,则会发现顶点V4产生给出最小支撑角度的支撑多边形 (“候选SP1”)。在图7C1中将“候选SP1”示为实际的支撑多边形SPB。
可以采用标准的角度测量来确定包括背面多边形和候选支撑多边形的平面的法线向量之间的叉积的角度。
图4C是示出了用于确定形成在一阶轮廓边与视单元顶点之间的多边形是否是支撑多边形的测试的流程图。
可以有以下替代实施方式:通过考虑候选支撑多边形的“侧性 (sidedness)取向”(相对于多边形网格的内部)和候选支撑多边形的相对于视单元顶点的取向两者来识别SV-ME支撑多边形。
在一种实施方式中,网格多边形都被假定成具有以下法线向量的“外部”多边形:法线向量局部地被定向成远离多边形网格所包括的区的“内部”。在这样的实施方式中,多边形网格的所有网格多边形一致地具有该相同的“侧性”取向。
多边形是一种平面结构,其可以具有对应于包括该多边形的平面的两侧的两个侧。示例性实施方式包括为流形或闭合的多边形网格。流形网格将嵌有其的空间体积分成内部和外部。在计算图形学中,使用以下流形网格是非常有用的:该网格中的每个多边形的法线向量被局部地定向成面向远离该封闭体积的内部。这可以被称为多边形的“外部”侧。相反侧可以被称为多边形的“外部”侧。如果在网格中所有的多边形都具有该一致的侧性取向,则应该永远都不会存在多边形的内部侧从外侧看去可见。
在示例性实施方式中,能够通过检查相邻多边形即共享边的多边形的顶点次序来确立网格的多边形具有相同的侧性取向。(参见 Schneider(2003)Schneider,Philip J.,Eberely,David H.,“Geometric Tools for Computer Graphics”Morgan Kaufmann2003pp.342-345,其全部内容通过引用合并到本申请中)。设F0和F1是共享由两个顶点V1和V3组成的边的两个相邻多边形。对于多边形F0,如果顶点V1和V3是以 V3接着V1的排序来出现,则它们在多边形F1中必须以V1接着V3的排序来出现。共享的边具有该排序的的相邻多边形被可以称为具有一致的顶点排序。具有一致的顶点排序的多边形具有相同的侧性取向。顶点排序反映了针对每个三角形存储顶点的次序。对于三角形以该相同的次序访问的顶点定义了其叉积是平面等式的系数A、B、C的向量(三角形边)或该三角形的法线向量。在一些实施方式中,所有的网格三角形具有一致的顶点排序并且所有的网格三角形会具有指向远离网格的内部的方向的法线向量,即,它们都是面向外部的三角形。实施方式可以在处理之前采用已知的算法来识别和修复多边形网格中的不一致的顶点排序(参见MakeConsistent procedure of Schneider(2003),pp 345)。
图4D1是示出了多边形具有一致的顶点排序的两个相邻多边形F0和 F1的示例性图。注意,对于多边形F0,是以V1至V3的次序来访问共享边,而对于相邻的多边形F1,以V3至V1的次序来访问相同的共享边,因此满足一致排序的定义。采用右手规则传统,两个多边形的法线指向图像平面的外部。
图4D2是示出了多边形不具有一致顶点排序的两个相邻多边形F0和 F1的示例性图。
在一种实施方式中,对于一阶轮廓边的候选SV-ME支撑多边形形成在视单元顶点和一阶轮廓边之间。给出了具有与共享一阶轮廓边的背面网格多边形的侧性取向相同的侧性取向的候选支撑多边形。(使用该一致的侧性取向,例如,穿越背面网格多边形的“外部”面上的一阶轮廓边行走的人会遇到候选支撑多边形的“外部”面)然后相对于视单元顶点对每个候选支撑多边形的平面的取向进行检查。如果候选支撑多边形的平面相对于每个视单元顶点不正面对,则形成候选支撑多边形的视单元顶点是支撑视单元顶点,并且候选支撑多边形是支撑多边形。
根据一些实施方式,所采用的相对于视单元顶点正面对的定义排除了位于候选支撑多边形的平面中的视单元顶点(即,承认支撑视单元顶点为非正面)。替代的实施方式可以采用背面和正面的定义的变型以确定候选支撑多边形相对于每个视单元顶点不正面对。在至少一种示例性实施方式中,该测试包括确认候选支撑多边形相对于每个视单元顶点背面对,其中相对于顶点背面对的平面的定义包括位于该平面中的顶点(即,承认支撑视单元顶点相对于支撑多边形背面对)。
根据一些实施方式,从步骤480中进入图4C所示的处理。在步骤408 中,在一阶轮廓边与视单元顶点(V)之间形成候选支撑多边形。
处理流程行进至步骤485以将在步骤480中形成的候选支撑多边形的侧性取向设置成与共享一阶轮廓边的背面组件多边形的侧性取向相同。
处理流程行进至步骤487以确定候选支撑多边形相对于视单元顶点中的每一个顶点是否正面对。如果在判决步骤487中确定候选支撑多边形相对于每个视单元顶点不正面对,则处理流程行进至步骤481以将支撑视单元顶点识别为视单元顶点(V)并将支撑多边形识别为候选支撑多边形。
如果在判决步骤487中确定候选的支撑多边形相对于任何视单元顶点正面对,则处理流程行进至步骤489以将视单元顶点(V)识别为非支撑视单元顶点并且将该候选支撑多边形识别为非支撑多边形。
由图4C的示例性流程图示出的测试还能够用于识别SE-ME型支撑多边形。
图5A和图5B:示出了构造SE-MV支撑(扫掠)三角形的方法的流程图
图5A和图5B包括示出了构造入射在内侧拐角网格轮廓顶点上的 SE-MV支撑扫掠三角形的方法的流程图。这是图1的步骤130的附加细节。根据一些实施方式,从图1中的步骤130中进入图5A和图5B所示的处理。
在一些实施方式中,当遇到多边形网格的一阶轮廓周线的内侧拐角时,构造SE-MV支撑扫掠三角形的处理从步骤510处开始。该内侧拐角可以由两个一阶轮廓边共享顶点的简单的一阶轮廓周线形成。如果该形成该相交部(与假定为面向远离轮廓边的组件多边形的内部的方向的法线方向)的轮廓边的法线彼此面对,则该相交部是内侧拐角顶点。
可替代地,内侧拐角顶点可以是由楔与一阶轮廓边的相交部形成的复合轮廓周线的顶点。在后一种情况下,将内侧拐角轮廓网格轮廓顶点称为复合轮廓顶点(CSV)。
处理流程行进至步骤515以例如使用图4A所公开的处理来识别针对形成顶点的轮廓边之一的支撑视单元顶点(SVV)。将该顶点的标识存储为变量“SVV_开始”。处理流程行进至步骤520,其中针对内侧拐角的另一条边重复步骤515的处理并且将结果存储为变量“SVV_结束”。
如果内侧拐角的任一支撑多边形是四边形(在图4A的步骤470中生成),则支撑多边形具有两个SVV。在这种特殊情况下,必须在步骤515 和520中小心选择该链中的起始视单元顶点(“SVV_开始”)或终止视单元顶点(SVV_结束),这是因为该顶点是从该链的另一端最远移除的。
处理流程行进至步骤525,其中变量“当前_多边形”被设置为识别视单元顶点“SVV_开始”与多边形网格的对应的所支撑的边之间的支撑多边形。
处理流程行进至步骤530,其中将对于最终发生在视单元顶点“SVV_ 开始”与“SVV_结束”之间的视单元轮廓周线扫掠的起始点被设置成视单元顶点“SVV_开始”并且存储为变量CVV,其保存了扫掠的当前顶点。
处理流程行进至判决步骤535对CVV与“SVV_结束”进行比较以确定是否应该终止扫掠。
如果在判决步骤535中确定正在处理的当前视单元顶点(CVV)与扫掠中的最后一个顶点(“SVV_结束”)相同,则处理流程行进至步骤540 并且终止。如果内侧拐角的两个边具有视单元上的相同点,则对应的 SV-ME楔沿着共用边相交并且不存在与内侧拐角顶点对应的扫掠三角形。在步骤535的初始执行中会识别这种情况并且会终止扫掠而不产生扫掠三角形。
如果在判决步骤535中确定CVV不是“SVV_结束”,则处理流程行进至步骤545将变量“当前_角度”设置成最大值。
处理流程行进至步骤550,其中选择共享视单元顶点CVV的第一视单元边并且用变量“边”来标记。
处理流程行进至判决步骤555以确定边“边”是否是相对于内侧拐角网格轮廓顶点MV的(从点看去的)轮廓边。
如果在判决步骤555中确定“边”是从MV看去的轮廓边,则处理流程行进至步骤560以在点MV与边“边”之间形成三角形。该三角形是MV与视单元之间的候选扫掠三角形,但是必须将其与共享相同视单元边的其他扫掠三角形候选者相比。
处理流程行进至565,其中开始比较这些其他扫掠三角形候选者的。对此,对入射在MV上的当前扫掠三角形候选者“三角形”与“当前_多边形”(支撑多边形)之间的角度进行测量。将该值存储在变量“角度”中。因为“三角形”和“当前_多边形”共享共用边,所以可以采用该角度为每个多边形的被遮挡侧之间的角度的惯例来在该边处测量该角度。支撑多边形的被遮挡侧是在轮廓边处连接至网格多边形的内部的一侧。候选扫掠三角形的被遮挡侧是在顶点MV处连接至网格多边形的内部的一侧。将该角度存储在变量“角度”中。
可以有以下替代实施方式:对扫掠三角形和对应的SE-MV楔的相对于相邻楔的取向进行检查。所有的楔都是具有“可见”侧和“不可见”侧的定向面。对于SE-MV楔,可见侧是未被遮挡侧(由于不被超出对应的一阶轮廓边的网格多边形遮挡,所以在该侧是可见的)。对于SV-ME楔,可见侧是“被包含”侧(由于当穿过和超出对应的内侧拐角一阶轮廓顶点观察时被包含在视单元中,所以是可见的)。
在一种实施方式中,根据MV视单元边来构造“扫掠_三角形”,MV 视单元边产生具有与相邻的SV-ME楔的遮挡方向一致并且与相邻 SV-ME楔的包含方向一致的包含方向的“扫掠_三角形”。不具有该一致方向的SV-ME楔不促成连续的、保守的线性化本影事件面。
SV-ME楔的取向与对应的SV-ME支撑多边形的取向相反。因为 SV-ME支撑多边形的边穿过内侧拐角一阶轮廓顶点有效地“被投影”而形成了对应的SV-ME楔,所以发生了这种倒转。(例如,具有视单元与沿着负Y方向“低于”特定的SE-MV支撑多边形的内侧拐角一阶轮廓顶点之间的包含轴的该SE-MV支撑多边形会产生具有其沿着正Y方向的“被包含”或可见侧的对应的SE-MV楔)。
处理流程行进至判决步骤570以确定该角度(“角度”)是否小于“当前_角度”的当前值。
如果在判决步骤570确定“角度”的当前值小于“当前_角度”的值,则“三角形”是候选扫掠三角形并且处理流程行进至处理5-1,其从图5B 中的步骤580处开始。
在步骤580中,将变量“当前_角度”设置为“角度”的值。
处理流程行进至步骤585以将变量“扫掠_边”设置成指代边“边”。
处理流程行进至步骤590以将变量“扫掠_三角形”设置成指代三角形“三角形”。
处理流程行进至判决步骤591以确定是否还有未处理的共享当前视单元顶点CVV的任何其他边。
如果在判决步骤591中确定剩余未处理的共享视单元顶点的边,则处理流程行进至处理5-3,其将处理流程返回步骤575(图5A),其中变量“边”被设置成指代共享顶点CVV的下一个视单元边。处理流程行进至步骤555以生成下一个候选扫掠三角形并且对其进行测试。
如果在判决步骤591中确定没有其他未处理的视单元边共享该顶点,则处理流程行进至步骤592,其中将“当前_多边形”变量设置为指代三角形“扫掠_三角形”。
处理流程行进至步骤593以输出扫掠三角形“扫掠_三角形”。
处理流程行进至步骤594以根据扫掠三角形构造SE-MV楔。在图6B 中公开了该步骤的另外细节。
处理流程然后行进至处理5-4,其从步骤594(图5A)开始前进至下一个连接的视单元顶点。然后处理流程返回步骤535。
如果在判决步骤555中确定视单元边不是从点看去MV的从点看去的轮廓边,则处理流程行进至处理5-2,其从步骤591(图5B)开始来选择用于处理的剩余视单元边。
图5C是示出了用于确定形成在内侧拐角一阶轮廓顶点与视单元边之间的多边形是否是支撑多边形的测试的流程图。
可以有以下替代实施方式:通过考虑候选支撑多边形的“侧性取向” (相对于多边形网格的内部)和候选支撑多边形的相对于视单元顶点的取向两者来识别SE-MV支撑多边形。
在一种实施方式中,将网格多边形都假定为“外部”多边形,其具有局部地定向成远离多边形网格所包含的区的“内部”的法线向量。在这样的实施方式中,多边形网格的所有网格多边形一致地具有该相同的“侧性”取向。
如前所述,多边形是一种平面结构,其可以具有对应于包括该多边形的平面的两侧的两个侧。示例性实施方式包括为流形或封闭的多边形网格。流形网格将嵌有其的空间体积分成内部和外部。在计算图形学中,使用以下流形网格是非常有用的:该网格中的每个多边形的法线向量被局部地定向成面向远离该封闭体积的内部。这可以被称为多边形的“外部”侧。相反侧可以被称为多边形的“外部”侧。如果在网格中所有的多边形都具有该一致的侧性取向,则应该永远都不会存在多边形的内部侧从外侧看去可见。
在示例性实施方式中,能够通过检查相邻多边形即共享边的多边形的顶点次序来确立网格的多边形具有相同的侧性取向。(参见Schneider, Philip J.,Eberely,DavidH.,“Geometric Tools for Computer Graphics” Morgan Kaufmann 2003pp.342-345,其全部内容通过引用合并到本申请中)。设F0和F1是共享由两个顶点V1和V2组成的边的两个相邻多边形。对于多边形F0,如果顶点V1和V2是以V2接着V1的排序来出现,则它们在多边形F1中必须以V1接着V2的排序来出现。共享的边具有该排序的的相邻多边形被可以称为具有一致的顶点排序。具有一致的顶点排序的多边形具有相同的侧性取向。
在一种实施方式中,在视单元边与内侧拐角一阶轮廓顶点之间形成对于一阶轮廓顶点的候选SE-MV支撑多边形。给出候选支撑多边形与共享内侧拐角一阶轮廓顶点的一阶轮廓边的背面网格多边形的侧性取向相同的侧性取向。(使用该一致的侧性取向,例如,穿过背面网格多边形的“外部”面上的一阶轮廓边行走的人会遇到候选支撑多边形的“外部”面)。然后相对于视单元顶点检查每个候选支撑多边形的平面的取向。如果候选支撑多边形的平面相对于每个视单元顶点不正面对,则形成候选支撑多边形的视单元边是支撑视单元边并且该候选支撑多边形是支撑多边形。
根据一些实施方式,从步骤595进入到图5C所示的处理中。在步骤 595中,在内侧拐角一阶轮廓顶点与视单元边(E)之间形成候选支撑多边形。处理流程行进至步骤596以将在步骤595中形成的候选支撑多边形的侧性取向设置成与共享内侧拐角一阶轮廓顶点的一阶轮廓边的背面组件多边形的侧性取向相同。在示例性实施方式中,可以将SE-MV支撑多边形的侧性取向设置成与先前确定的相邻SV-ME或SE-MV支撑多边形的侧性取向一致。因为SE-MV支撑多边形与这些相邻的多边形共享边,所以可以通过确保相邻的多边形具有一致的顶点排序来设置侧性取向。
处理流程行进至步骤597以确定候选支撑多边形相对于视单元顶点中的每一个顶点是否正面对。如果在判决步骤597确定候选支撑多边形相对于每个视单元顶点不正面对,则处理流程行进至步骤599以将视单元边 (E)识别为支撑视单元边并且将该候选支撑多边形识别为支撑多边形。
如果在判决步骤597确定候选支撑多边形相对于任意视单元顶点正面对,则处理流程行进至步骤598以将视单元边(E)识别为非支撑视单元边并且将候选支撑多边形识别为非支撑多边形。
图6A:示出了根据对应的SV-ME和SE-ME支撑多边形构造SV-ME 和SE-ME楔的方法的流程图
图6A是示出了根据对应的支撑多边形构造SV-ME楔的处理的流程图。这提供了关于图1中的步骤116的附加细节。根据一些实施方式,从图1的步骤116中进入图6A所示的处理。
在一些实施方式中,根据对应的SV-ME和SE-ME支撑多边形构造SV-ME和SE-ME楔的处理从步骤610开始,其中将支撑多边形的连接边识别为具有为视单元的一个顶点和为多边形网格的顶点另一个顶点的那些边。
处理流程行进至步骤615通过将连接边从所支撑的轮廓边的对应的顶点开始以半无限的方式远离视单元延伸来构造来自连接边的射线。如果支撑多边形是三角形,则延伸连接视单元和轮廓边的两条边。如果支撑多边形是四边形(根据图4A的步骤470),则可以延伸连接视单元边和轮廓边的对角线。延伸对角线产生较大的楔,其实际上反映了穿过视单元边从视单元边看去的可见性。
处理流程行进至步骤620以将延伸的边连接至对应的(所支撑的)多边形网格轮廓边以形成半无限的SV-ME(或SE-ME)楔。
图6B:示出了根据对应的SE-MV支撑多边形构造SE-MV楔的方法的流程图
图6B是示出了根据对应的扫掠三角形构造SE-MV楔的处理的流程图。根据一些实施方式,从图1中的步骤135进入图6B所示的处理。
在一些实施方式中,根据对应的扫掠三角形构造SE-MV楔的处理从步骤630开始,其中将扫掠三角形的连接边识别为具有为视单元顶点的一个顶点和为多边形网格的顶点的另一个顶点的那些边。
处理流程行进至步骤635以通过将这些边从对应的网格轮廓顶点开始以半无限的方式远离视单元延伸来构造来自连接边的射线。
处理流程行进至步骤640以将延伸的边连接至对应的多边形网格内侧拐角轮廓顶点来形成半无限楔。
图6A和图6B的处理描述了以下一阶楔的构造:该一阶楔仅受它们与轮廓周线上的相邻楔的相交部的限制。可以将这些楔称为初始楔。
根据一些实施方式,在后续处理中,例如在一阶可见性图的构造中,这些初始楔随后可以与网格多边形以及其他楔相交。初始楔还可以明确地与其他楔相交以形成本影边界多边形(UBP),其包围包括(保守地)被遮挡区的保守的从视单元看去的多面体聚合本影体积。
图7-图11:对第一实施方式的输出的详细描述
图7A是示出了具有顶点V1至V8的凸视单元和非凸多边形网格M1。用粗线示出网格的一阶从视单元看去的轮廓边。将一阶轮廓边中的两个边标记为A和B。这是沿着从视单元朝着多边形网格的总体方向看的透视图。
一阶轮廓边A具有相对于至少一个视单元顶点正面对的一个组件多边形。该组件多边形是由边A和标记为MV1的网格顶点形成的三角形。对于边A的另一个组件多边形是由边A和在图7B1中示出的网格顶点 MV2形成的三角形。该组件多边形相对于视单元的所有顶点V1至V8背面对。注意,共享边A的这两个组件多边形相对于彼此背面对,使得边A 是多边形网格M1的局部支撑边并且是一阶轮廓边。可以通过选择第一组件多边形(例如,由边A和顶点MV2形成的三角形)并且通过确定另一个组件多边形的不是共享边的一部分的顶点(例如,在该情况下是顶点 MV1)位于包括第一多边形的平面的前侧还是背侧来确定共享边A的两个组件多边形背面对。如果不共享的顶点位于另一个组件多边形的平面的背侧,则两个组件多边形背面对,如在这种情况下。可以使用如在从词汇表中提供的“背面”的定义中描述的平面方程来做出该确定。在一些实施方式中,针对包括多边形网格M1中的每个边重复图3所示的处理以识别多边形网格M1的每个一阶轮廓边。
图7B1是示出了与图7A所述的多边形网格对象M1相同的多边形网格对象,但是为沿着从多边形网格朝着视单元的总体方向来看的透视图。根据该图,边B具有相对于视单元的所有顶点V1至V8背面对的一个组件三角形(由边B和网格顶点M3形成)。如图7A所示,边B具有由边B 和网格顶点MV1形成的相对于至少一个视单元顶点正面对的另一个组件三角形。此外,共享边B的这两个组件多边形相对于彼此背面对,使得边B是多边形网格M1的局部支撑边并且是一阶轮廓边。
图7B2示出了与在图7B1中绘出的多边形网格不同的多边形网格。将该多边形网格标记为M3。多边形网格M3的一条边用粗线示出并且被标记为I。该边具有为被标记为T1的三角形的一个组件多边形和为被标记为T2的三角形的另一个组件多边形。
组件多边形T1相对于标记为“视单元”的视单元的所有顶点正面对,这是因为所有的视单元顶点位于包括三角形T1的平面的背侧上。
组件三角形T2具有位于包括三角形T2的平面的前侧上的至少一个视单元顶点,即T2相对于至少一个视单元顶点正面对。
从而,组件三角形T1和T2满足使得它们所共享的边为相对于视单元的一阶轮廓边所需的准则中的两个准则。
但是因为两个组件三角形相对于彼此不背面对,所以共享的边I不是一阶轮廓边。这可以通过选择三角形T1和识别另一个组件三角形(T2) 的不是共享边的顶点的顶点来确定。在这种情况下该顶点是P2。顶点P2 位于包括另一个组件三角形T1的平面的前侧上。可以使用如在针对“背面”的词汇表描述中所描述的三角形T的平面方程式来确立这一事实。
因为T1和T2相对于彼此不背面对,所以在一种实施方式中,它们未能在步骤345或330中通过在图3的示例性流程图中示出的判决测试。
图7C1是示出了对于一阶轮廓边A和B的支撑多边形的图。对于一阶轮廓边A的支撑多边形被标记为SPA,并且对于一阶轮廓边B的支撑多边形被标记为SPB。对应的支撑视单元顶点(SVV)被分别标记为SVVA 和SVVB,其分别对应于视单元顶点V4和V8。这是沿着从视单元朝着网格对象的总体方向看去的透视图。
图7C2是分别示出了对于一阶轮廓边A和B的支撑多边形SPA和 SPB以及对应的源顶点-网格边(SV-ME)楔的图。对于一阶轮廓边A的支撑多边形被标记为SPA,并且对于一阶轮廓边B的支撑多边形被标记为SPB。对应的支撑视单元顶点(SVV)分别被标记为SVVA和SVVB。通过延伸支撑多边形SPA形成的SV-ME楔被标记为SV-ME WA。通过延伸支撑多边形SPB形成的SV-ME楔被标记为SV-ME WB。根据一些实施方式,根据图1、图4和图6A所示的处理来构造SV-ME楔WA和 WB。这是沿着从视单元朝着网格对象的总体方向看去的透视图。
图7C3是仅示出了通过延伸对应的支撑多边形的边来形成的SV-ME 楔。通过延伸支撑多边形SPA形成的SV-ME楔被标记为SV-ME WA。通过延伸支撑多边形SPB形成的SV-ME楔被标记为SV-ME WB。对应的支撑视单元顶点(SVV)分别被标记为SVVA和SVVB。这是沿着从视单元朝着网格对象的总体方向看去的透视图。
尽管图7C1-图7C3示出了入射在一阶轮廓边A和B上的楔,另外的实施方式根据图1、图3至图6B所示的处理来构造用于包括在网格M1 中的一阶轮廓周线所包含的每个一阶轮廓边的楔。
图7D1是示出了与图7C1所示对象相同的对象,但是为沿着从网格对象M1朝着视单元的总体方向看去的透视图。
图7D2是示出了与图7C2所示对象相同的对象,但是为沿着从网格对象M1朝着视单元的总体方向看去的透视图。
图7D3是示出了与图7C3所示对象相同的对象,但是为沿着从网格对象M1朝着视单元的总体方向看去的透视图。
图7D4以相同的视角示出了与图7D3所示的多边形网格和视单元相同的多边形网格和视单元。图7D4示出了在一阶轮廓周线的外侧拐角顶点处相交的两个旋转楔。
旋转楔之一被标记为SV-ME WA,其还可以在图7D3中看到。在图 7D4中示出了另外的旋转楔SV-ME WC。该楔由标记为C的一阶轮廓边和标记为SVVC的支撑视单元顶点来支撑。
两个旋转楔SV-ME WA和SV-ME WC共享一阶轮廓边的外侧拐角顶点。该顶点被标记为OCV。如在图1的示例性流程图的步骤125和140 中所规定的,在一种实施方式中,共享外侧拐角顶点的旋转多边形彼此相交。
共享外外侧拐角轮廓顶点并且旋转至相同支撑视单元顶点的旋转多边形会精确地在共享边处彼此相交。在这种情况下,共享边是从所共享的顶点延伸并且位于由支撑视单元顶点和所共享的外侧拐角顶点形成线上的射线。在这种特殊情况下,两个旋转楔在所共享的边上彼此限制。
(共享内侧拐角轮廓顶点并且旋转至相同支撑视单元顶点的旋转多边形还精确在所共享的边处彼此相交。在该情况下,不在扫掠支撑多边形并且不生成对应的扫掠楔。)
在一般情况下,共享外侧拐角顶点的旋转楔可以旋转至不同的支撑视单元顶点。在图7D4中,楔SV-ME WA由视单元顶点V4来支撑,而SV-ME WC由SVVC来支撑。在该情况下,楔SV-ME WA与楔SV-ME WC的相交部是被标记为I的线段。线段I将楔SV-ME WC分成两部分。所细分的楔SV-ME WC的近端部分在该图中被遮挡。
楔SV-ME WC的该近端部分以不同的视角在示出了与图7D4的对象相同的对象的图7D5完全可见。该近端部分在图7D5中被标记为SV-ME WCR。
一般地,共享外侧拐角顶点并且旋转至不同的支撑视单元顶点的两个旋转楔的相交会导致上述楔之一被限制成近端部分(例如,SV-ME WCR (指示所限制的楔C))和远端部分。这种局部地受限的楔只有近端部分实际上是从视单元看去的本影事件面(只有该近端部分是对应的多面体聚合本影(PAU)的多边形)。因为该超出限制并且沿着远离视单元的方向的远端部分全部位于相邻楔的未被遮挡侧,所以该远端部分不表示从视单元看去的本影事件面。在图7D4和图7D5中示出的示例中,位于SV-ME WC的远端部分的未被遮挡侧和被遮挡侧两者上的网格多边形实际上从视单元顶点SVVA看去未被遮挡,因此,从视单元看去未被遮挡。
旋转楔的由共享外侧拐角轮廓顶点的相邻旋转楔构成的该局部限制在某些情形下产生充分地较小的楔。因为该较小的、局部地受限的楔具有限制处理的附加的包含边界,所以当该楔被提交以进行关于楔的可见性的确定时,该楔能够需要充分地较少的处理(例如,在使用图15的示例性流程图所示的2D网格遍历处理的一种实施方式中的步骤1515处)。
因此,该局部限制处理能够加速关于楔的可见性的确定。也可以采用没使用该局部限制处理的替代实施方式。还没有被其他楔限制的任何楔仍然与网格多边形相交以产生不连续性网格分段。然后使用在图25的示例性流程图中所描述的修改的多面体的点包容性测试来做出关于这种不连续性分段实际上是否为从视单元看去的本影边界的确定。该测试适合局部受限和不受限的楔两者。
前面的讨论假设所采用的楔都是一阶楔。高阶楔经受如在一种实施方式中所描述的楔-楔相交(受其他楔限制),例如,在示出了用于确定 DM_SEG是否是实际的从视单元看去的遮挡边界分段的方法的示例性流程图的步骤2155中。
图8A1是示出了位于由网格对象M1的标记为A和B的一阶网格轮廓边共享的内侧拐角顶点上的扫掠三角形(SE-MV支撑三角形)的图。该扫掠三角形被标记为ST_AB。在一些实施方式中,使用图5A和图5B 所示的扫掠处理来生成扫掠三角形ST_AB,扫掠被锚定在被标记为ICSV 并且从SVVA(V4)至SVVB(V8)来发生。在这种情况下,内侧拐角网格轮廓顶点是一阶轮廓周线(即,由网格对象M1的所有一阶轮廓边形成的周线)的在两个一阶轮廓边共享顶点处形成的简单的内侧拐角。这是沿着从视单元朝着网格对象的总体方向来看的透视图,其与图7A和图7C1 所示的图相似。
图8A2是示出了由网格对象M1的被标记为A和B的一阶轮廓边共享的内侧拐角顶点上的扫掠三角形(SE-MV支撑多边形)的图。扫掠三角形被标记为ST_AB。在一些实施方式中,使用在图5A和图5B中示出的扫掠处理来生成扫掠三角形ST_AB,该扫掠被锚定在标记为ICSV的内侧拐角轮廓顶点处并且从SVVA(V4)至SVVB(V8)进行。在这种情况下,内侧拐角网格轮廓顶点是一阶轮廓周线的在两个一阶轮廓边共享顶点处形成的简单的内侧拐角。通过延伸扫掠三角形来形成的对应的 SE-MV楔被标记为SE-MV WAB。根据一些实施方式,根据图6B所示的处理来形成SE-MV楔WAB。对此,穿过内侧拐角顶点而延伸多边形ST_AB的边以形成SE-MV WAB。这是沿着视单元朝着网格对象的总体方向来看的透视图,其与图7A和图7C2所示的图类似。
图8A3是示出了被标记为ICSV的内侧拐角轮廓顶点的图。通过延伸扫掠三角形来形成对应的SE-MV楔被标记为SE-MV WAB。这是沿着从视单元朝着网格对象的总体方向来看的透视图,其与图7A和图7C3所示的图相似。
图8A4是示出了入射在轮廓边A和B上的一阶保守线性化本影事件面(CLUES)的图。如在图8A4中所示的,连续的本影事件面由两个SV-ME 楔(被标记为SV-ME WA和SV-ME WB)和在这种情况下的单个SE-MV 楔(标记为SE_MV WAB)组成。对应的支撑视单元顶点被标记为SVVA 和SVVB,内侧拐角一阶轮廓顶点被标记为ICSV。这是沿着视单元朝着网格对象的总体方向看去的透视图。如在图8A4中示出的,由SV-ME WA、 SE-MV WAB和SV-ME WB组成的CLUES形成遮挡边界,其中该边界的未被遮挡侧沿着箭头U1的方向,被遮挡侧沿着箭头O1的方向。
图8B1是示出了与图8A1所示的对象相同的对象,但是来自沿着从网格对象M1朝着视单元的总体方向看去的透视图。
图8B2是示出了与图8A2所示的对象相同的对象,但是来自沿着从网格对象M1朝着视单元的总体方向看去的透视图。
图8B3是示出了与图8A3所示的对象相同的对象,但是来自沿着从网格对象M1朝着视单元的总体方向看去的透视图。
图8B4是示出了与图8A4所示的对象相同的对象,但是来自沿着从网格对象M1朝着视单元的总体方向看去的透视图。
与图8A4相同,图8C是示出了入射在轮廓边A和B上的一阶保守线性化本影事件面(CLUES)的图。该连续的本影事件面由两个SV-ME 楔(标记为SV-ME WA和SV-ME WB)和在这种情况下的单个SE-MV 楔(被标记为SE-MV WAB)组成。这是沿着从视单元朝着网格对象的总体方向看去的透视图。
图9A是示出了通过由Teller(1992)描述的线性化非半影的现有技术方法来构造的入射在轮廓边A和B上的本影事件面的图。在仅用于入口序列可见性的有限问题的该现有技术方法中,完全根据支撑多边形的平面来构造本影事件面。这些支撑平面的入射在轮廓边A和B上的部分被示出并且被标记为“楔平面_A”和“楔平面_B”。这些平面在线L处相交以形成入射在轮廓边A和B上的连续的可见性事件面。
在Teller的线性化非半影现有技术方法中,Teller(1992),通过仅将入射在入口边和由源视点支撑的支撑多边形的平面相交来近似可见性事件面,其中源是入口序列中的在前入口。这些支撑多边形对应于SV-ME 支撑多边形(使用本实施方式的命名法)。Teller的方法在本影事件面的构造中不采用对应的SE-MV支撑多边形,而是采用这些多边形的平面。
相比之下,如由本实施方式所构造的SV-ME楔是受支撑多边形的为射线的半无限延伸横向地限制的半无限多边形。SV-ME楔还被限制在对应的一阶轮廓边上。Teller“楔”实际上是没有横向限制的平面。构造“Teller 楔”的本实施方式是延伸在内侧拐角处的相邻SV-ME楔的平面直至上述平面相交。
在下面的分析中,示出了:相比使用Teller的仅一种类型的支撑多边形的平面相交的方法,通过使用根据SV-ME和SE-MV支撑多边形两者构造的可见性事件面,本方法能够提供明显地更加精确的从区看去的可见性解。
必须强调,Teller(1992)的方法被仅被设计成提供穿过多边形入口序列的有限可见性问题的解。因为在Teller的方法中,支撑可见性事件面的边限于入口的边,所以Teller的方法不识别在其上构造可见性事件面的轮廓边。因为Teller的方法不应用相交平面方法来构造一般多边形网格的轮廓边上的可见性事件面;下面的分析相当于Teller的相交平面方法(假设将其应用于多面体环境中的从区看去的可见性的一般问题)与旋转和扫掠可见性事件面构造的本方法(其实际上用于更一般的可见性问题)的理论比较。
图9B是示出了与图9A的对象相同的对象的图,但是来自沿着网格对象朝着视单元的透视图。
图9C和图9D是示出了相比会由相交支撑平面的现有技术方法产生的本影事件面由本方法产生的更加精确的本影事件面。在图9C和图9D 中,由楔的旋转和扫掠构造的本方法形成的本影事件面被示出为叠加在由相交支撑平面的现有技术方法形成的本影事件面上。根据图9D的透视图,沿着从视单元朝着网格对象的总体方向看去,可以看出相比现有技术方法,本方法产生了较大的、更加精确的本影体积。相比仅仅支撑平面的相交部,由扫掠三角形(SE-MV支撑多边形)生成的SE-MV楔的增加产生了较大的保守本影体积(因此是更加精确的潜在可见集)。不同于相交平面的现有技术方法,扫掠视单元轮廓周线的本方法能够解释视单元表面上的关于内侧拐角轮廓顶点处的可见性的包含效果。从而,对于相邻支撑多边形旋转至视单元的不同顶点的具有内侧拐角顶点的任何轮廓周线,相比相交平面方法,本方法会产生更加精确的结果。
图9D还示出由本旋转和扫掠方法产生的本影事件面与由现有技术的相交平面方法产生本影事件面之间的偏差倾向于随着距所支撑的轮廓边和顶点的距离增加而增加。从而,对于大多数内侧拐角轮廓顶点,本方法的精度能够远高于使用相交平面的现有技术方法的精度。
图9D是示出了与图9C所示的对象相同的对象,但是来自沿着从网格对象朝着视单元的总体方向看去的透视图。
识别保守支撑多边形以及构造对应的楔的翻页电子书视图。
当以特定的顺序来观察,图7至图9的子集提供了识别保守支撑多边形以及构造对应的楔的方法的翻页电子书视图。下面列举这些顺序:
旋转支撑多边形&楔:总体上从视单元后面来观察:7A、7C、7C1、 7C2,
旋转支撑多边形&楔:总体上从视单元前面来观察:7B、7D、7D1、 7D2,
扫掠支撑多边形&楔:总体上从视单元后面来观察:7A、8A、8A1、 8A2、(示出了旋转楔和扫掠楔的组合的8A3)。
扫掠支撑多边形&楔:总体上从视单元的前面来观察:7B、8B、8B1、 8B2、(示出了旋转楔和扫掠楔的组合的8B3)。
图10A是示出了与图9A和图9B所示的网格多边形和视单元相同的网格多边形和视单元,但是以沿着从网格多边形的下方观察的总体方向的透视图。图10A示出了与图9C所示的一阶可见性事件面(楔)相同的一阶可见性事件面。具体地示出了入射在一阶轮廓边A上的SV-ME WA、入射在一阶轮廓边B上的SV-ME WB、和SE-MV WAB。
还示出了两个另外的一阶SV-ME楔W4和W5。楔W4和W5的支撑视单元顶点是V3。示出了这些楔的相交部。楔彼此相交并且与其他网格多边形相交以形成本影边界多边形(UBP)。这些UBP形成一阶聚合本影(PAU)面。由PAU围住的空间体积从对应的视单元看去为一阶被遮挡。在图10A中没有明确地示出与楔的相交部对应的UBP,但是其可以从示出交线推断出。忽略楔中的会形成完整的PAU的一些楔以能够看见一阶PAU的部分的内部结构(例如,楔W4、W5、SV-ME WA、SE-MV WAB和SV-ME WB的相交部)。
图10B是图10A所示的相同多边形网格(M1)的视图。在图10B中,网格M1和视单元是从与图8C的视角类似的视角来观察的,总体上观察网格M1的包括内侧拐角网格边的“顶部”侧。该视图与在图10A中给出的M1和视单元的视图有很大的不同。注意,在这两幅图中M1的相同边标记为E并且位于网格M1的“底部”。在这两幅图中还标记了边A和边B。
在图10A中示出了楔的被遮挡侧。
在图10B中示出了对应UPB的未被遮挡侧。
图10B示出了通过使对应的楔与其他楔相交而形成的五个UBP。
UBP-A由对应的楔(SV-ME WA)与楔W5(在图10A中示出)的相交部形成。UBP-A还受SV-ME WA与在图10A中示出的楔W4的相交部的限制。在图10B中完全隐藏了W4,但是在图10B中将W4与SV-ME WA的相交部示出为标记成F的边。边F是UBP-A的边。另外地,UBP-A 与UBP-AB共享共用边(其根据在图10A中示出的SE-MV WAB来导出)。
UBP-AB是由SE-MV WAB与楔W4以及与UBP-D的楔的相交部形成。由于对应的楔SE-ME WAB的扫掠构造,所以UBP-AB与UBP-A和 UBP-B两者共享共用边。UBP-AB还受到其与对应于UBP-D的旋转楔(由网格边D支撑)的相交部的限制。
UBP-5是由对应的旋转楔(在图10A中示出的W5,其具有对应的支撑视单元顶点V3)与W4以及与SV-ME WA形成的相交部形成。
UPB-D是由入射在一阶轮廓边D的楔(未示出楔,但是具有支撑视单元顶点V8)与楔SV-ME B、SE-MV AB和W4以及由边E支撑的楔(未示出楔)的相交部形成。
UBP形成针对M1的PAU的边界。不是所有的形成M1的PAU的UBP都能在图10B中给出的视图中看见。
图10B示出了完全受其他楔限制的楔。使用完全受限的楔(例如,图26的示例性流程图中的PAU的输出敏感构造)的实施方式是可能的。另外地,使用部分地受限的楔(例如,在外侧拐角一阶轮廓边处彼此相交的SV-ME楔)的实施方式例如可以可选地用在图20A的示例性流程图中示出的可见性图的输出敏感构造中,该输出敏感构造使用了可以可选地受在图1中示出的示例性流程图的步骤140中所描述的相交相邻的SV-ME 楔限制的SV-ME楔。另外地,因为所描述的确定楔与网格多边形的相交部实际上是否为遮挡边界的方法(采用修改的多面体的点包容性测试)在做出该确定之前不需要楔与其他楔的先验的局部或全局限制,所以可以在没有这样的局部楔-楔限制的情况下使用这些楔。
图11A是示出了在复合轮廓周线的情况下通过本方法生成的一阶可见性事件面(楔)的图。在该情况下,SV-ME楔(“楔1”)入射在一阶轮廓边A1上(受一阶轮廓边A1支撑)。“楔1”与标记为B1的一阶轮廓边相交。如在图2A中所讨论的,“楔1”将一阶轮廓边B1分成被遮挡侧 (B1O)和未被遮挡侧(B1V)。该图与图2A的图相同。
一阶楔“楔1”与一阶轮廓边的相交部是标记为CSV的复合轮廓顶点。复合轮廓顶点对应于复合轮廓周线的内侧拐角。使用突变论的术语, CSV对应于结果的流形的t顶点。突变论包括对流形面(例如,流形网格) 上的点奇异性(例如,CSV或T顶点)以及周线奇异性(例如,一阶轮廓边)的研究。
“楔2”是一阶可见性事件面(SV-ME楔),其由为一阶轮廓边B1 的可见部分的分段B1V支撑或入射在分段B1V上。
因此,“楔1”和“楔2”是在点CSV处相交的两个SV-ME楔。因为“楔1”和“楔2”是通过使用不同的支撑视单元顶点(分别是SVV1 和SVV2)通过旋转和扫掠方法的旋转处理(图4A和图6A)来构造的,所以这两个楔没有在边上接合以形成连续的本影可见性事件面。
本旋转和扫掠方法的扫掠处理(图5A和图5B以及图6B)用于构造将“楔1”和“楔2”接合成连续的本影可见性事件面的SE-MV楔(SE-MV WA和SE-MV WB)。楔SE-MV WA是根据生成在CSV、SVV1和支撑视单元轮廓周线(SVSC)上的居间顶点IVV1之间的支撑SE-MV三角形来形成。该支撑三角形的两条边穿过点CSV的延伸形成了半无限楔SE-MV WA。类似地,楔SE-MVWB根据形成在CSV、SVV2和支持视单元轮廓周线(SVSC)上的居间顶点IVV1之间的支撑SE-MV(扫掠) 三角形来形成。该支撑三角形的两条边穿过点CSV的延伸形成了半无限楔SE-MVWB。
SE-MV WA和SE-MV WB在共用边处连接。SE-MV WA与“楔1”共享共用边。SE-MV WB与“楔2”共享共用边。这四个连接的楔成连续的一阶本影可见性事件面的入射在轮廓边A1和B1V的部分。图11A的视图示出了“楔1”的被遮挡侧(箭头O1)和“楔2”的未被遮挡(从视单元看去、一阶可见)侧(箭头U1和U2)。图11A的视图示出了SE-MV WA和SE-MV WB的“被包含”(从视单元看去、一阶可见)侧。如图 11A中所示,楔“楔1”、SE-MV WA、SE-MV WB和“楔2”的相交部形成了连续的事件面,箭头U1和U2表示该事件面的未被遮挡侧。图11B 是图11A所示的相同结构的不同视图。在图11B中,该视图是向上朝着“楔1”的被遮挡侧和“楔2”的未被遮挡侧看去。图11B还示出了SE-MV WA和SE-MV WB的“被包含”(从视单元看去、一阶可见)侧。
这总结了第一实施方式的描述。在本说明书中,提出了用于生成一阶可见性面的处理。另外的实施方式指定了处理网格的多边形和边以生成一阶可见性事件面的次序。再另外的实施方式精确地详述了如何使用可见性事件面来确定被遮挡的多边形和多边形片段。在下面的替代实施方式的详细描述中,公开了以下网格遍历算法:在倾向于具有输出敏感性能的从前到后的可见性图构造算法中有效地交错一阶楔构造和从视单元看去的可见性确定。
图11C示出了与在图2B、图11A和图11B中示出的两个多边形网格相同的两个多边形网格。图2B和图11C两者示出了标记为“楔_高”的高阶旋转楔。该楔是通过结合图2B及有关的图讨论的用于识别可见支撑视单元顶点的背投影方法来构造的。在这种情况下,对于将对于一阶轮廓边分段B1V的可见支撑视单元顶点标记为VSVV。
图11A示出了入射在B1V上的一阶旋转楔“楔2”。图11A示出了由都在复合轮廓顶点(CSV)处相交的一阶旋转楔和扫掠楔成的连续本影事件面。
类似地,图11C示出了连续的本影事件面还由与一阶楔在复合轮廓顶点处相交的高阶楔成。在图11C中,通过结合图2B所描述的方法在一阶轮廓边的可见部分(B1V)上形成标记为“楔_高”的高阶旋转楔,因为“楔_高”通过B1V上的经调整的或高阶旋转来形成,所以它与作为 B1V的端点的标记为CSV的复合轮廓顶点相交。
一阶楔“楔1U”也入射在点CSV上。实际上,“楔1U”与整个一阶轮廓边(示为B1V+B1O)的相交部是CSV。在这种情况下,通过使“楔 1U”(一阶楔,旋转至SVV1)和“楔_高”(高阶旋转楔,旋转至VSVV) 与根据通过穿过CSV从SVV1至VSVV的扫掠构造的扫掠支撑多边形形成的标记为SE-MV WC的扫掠楔相交,来在“楔1U”和“楔_高”这两个楔之间形成连续的本影面。所有这三个楔在CSV处相交。
将图11C的高阶本影事件面与图2B所示的对应的一阶本影事件面进行比较,很明显的是,图11C的高阶事件面产生较大的本影区,因此产生较小的可见区。如果高阶事件面与其他网格多边形相交并且用于确定网格多边形的那些多边形和/或分段从视单元看去保守地可见,则相比假如只使用一阶楔的情况,结果会是更加精确的可见性图和对应的PVS。在该具体情况下,使用高阶楔替代对应的一阶楔甚至不增加结果的可见性图的复杂度,这是因为在该情况下,仅使用一个扫掠(SE-MV)楔来连接两个旋转楔,替代一阶情况下所需的两个扫掠楔。
图12:详细描述-示出了使用楔的旋转和扫掠构造来构造保守的一阶线性化本影不连续性网格的方法的替代实施方式。
图12是示出了使用构造一阶楔的旋转和扫掠方法构造保守的线性化本影不连续性网格的方法的流程图。根据一些实施方式,图12所示的处理从步骤1205开始,其中对所有网格三角形的一阶轮廓边进行识别。在一些实施方式中,可以使用图3所详述的方法来识别一阶轮廓边。
处理流程行进至步骤1210以使用在图1至图6中所详述的旋转和扫掠方法来构造入射在一阶轮廓边上的初始的基本楔。在实施方式中,基本楔是使用旋转和扫掠方法构造在所遇到的一阶轮廓边上的那些楔。在一些实施方式中,在初始构造时,所有的楔都是还未被关于楔的可见性步骤进一步限制的初始楔。
在本方法中,相比现有技术的不连续性网格化方法,不同地构造和限定楔。在现有技术的不连续性网格化方法中,平面楔没有被限定在楔的以下区中:对应的视单元支撑结构(顶点或边)从所支撑的网格轮廓元素(顶点或边)看去被遮挡。因此,这些现有技术方法计算精确的线性楔,其可能不形成连续的线性本影事件面,这是因为由于与对应的支撑多边形与网格多边形相交而使得未限定楔的部分。当仅考虑平面事件面时,例如,在不完全的不连续性网格方法(Heckbert 1992)中,线性本影事件面中的这些“间隙”是明显的。这些间隙实际上与涉及轮廓边、与支撑多边形相交的居间边和视单元边之间的边-边-边事件的高阶可见性事件面(经常是二次曲面)对应。当采用完全的不连续性网格化时,这些间隙由高阶事件面来填充。
相比之下,在根据一些实施方式的楔构造的本方法中,仅通过所支撑的网格轮廓结构和支撑视单元结构来限定:任何居间的几何图像不影响楔的结构。
在一阶不连续性网格化的本方法中,在由不完全的不连续性网格化方法(Heckbert 1992)产生本影边界中明显的间隙通过以下来填充:1)通过忽略楔的被支撑的轮廓结构(边或顶点)与支撑视单元结构(即,忽略与楔的支撑多边形相交的几何图形)之间的居间几何图形来在楔的构造期间保守地限定楔以及2)在楔与(保守地)可见的网格轮廓边的相交部处构造保守的平面辅助SE-MV楔。该点被称为复合轮廓顶点(CSV)。该结果是不具有由仅采用精确的线性事件面的不完全的不连续性网格化方法产生的“间隙”的、连续、保守的线性本影边界。
处理流程行从步骤1210行进至步骤1215以将在步骤1210中构造的初始楔放置在称为“楔_列表”的列表中。
处理流程行进至步骤1220以使“楔_列表”中的第一个楔经受包括步骤1225到步骤1250的处理。在实施方式中,使用任何期望的数据结构如链式列表或散列表等来实施“楔_列表”。
处理流程行进至步骤1225以确定网格三角形与楔的关于该楔的可见相交部。网格三角形与楔的该相交部是线段。关于楔可见的这些分段(或其部分)是关于楔的可见分段(“可见_分段”)。
在本方法中,在一些实施方式中,通过使用输出敏感的1-流形(多义线)遍历来确定保守地可见的分段的2D网格遍历方法,来确定关于楔的可见分段。在图14、图15和图16以及有关图中详述了该方法并且在本说明书中的其他地方也对其进行了讨论。在进行该关于楔的可见分段确定方法期间,对在其处一阶从视单元看去的轮廓边与楔相交的特定顶点进行识别。这些顶点是当前楔与入射在一阶轮廓上的其他楔之间的相交部。该类型的顶点被称为复合轮廓顶点(CSV)并且表示轮廓周线的t顶点,随后在其上构造辅助的保守连接SE-MV楔。
处理流程行进至步骤1235,将每个“可见_分段”存储为一阶本影不连续性网格的包围分段。这些分段形成本影不连续性网格的将该网格保守地划分成从视单元看去未被遮挡的区和从视单元看去被遮挡的区的边界多义线。
处理流程行进至步骤1240,将旋转和扫掠方法用于构造入射在楔的 CSVS上的一个或多个SE-MV楔,上述CSVS在关于楔的可见性步骤1225 期间被识别。如前面所限定的,每个CSV对应于当前楔与被支撑在与当前楔相交的从视单元看去的一阶轮廓边上的另一个楔的相交部。这些楔在 CSV点处相交。
用于生成连接在CSV处相交的两个组件楔的SE-MV楔扫掠操作与作为结合图5A、图5B和图6B所描述的旋转和扫掠方法的一部分的扫掠操作相同。扫掠发生在与CSV的两个组件楔对应的支撑视单元顶点 (SVV)之间。在一些实施方式中,对于每个楔的SVV都是在构造(SV-ME 楔)时确定的。在其他实施方式中,对于每个楔的SVV都是在关于楔的可见性步骤1225(SE-MV楔,参见图15中的步骤1553)期间确定的。
如果在CSV处相交的两个楔旋转至相同的视单元顶点,则两个楔在它们的边处精确地相交,并且不构造新的SE-MV楔。
如果在CSV处相交的两个楔是通过旋转至相同视单元边的两个顶点来形成的,则在CSV上的旋转和扫掠构造的结果是单个SE-MV楔。
如果两个相交的楔是SV-ME类型,则该连接的SE-MV保守地近似由视单元边(连接两个支撑视单元顶点)和对应于CSV的相交楔的两个 SV-ME轮廓边形成的二次曲面。在这种情况下,在CSV上构造的单个 SE-MV楔保守地近似由EEE事件形成的对应的二次曲面。实际上,可以将所构造的SE-MV三角形解释为具有无限节距的退化的二次曲面。
如果在CSV处相交的两个楔是通过旋转至属于不同视单元边的顶点来形成的,则在CSV上的旋转和扫掠构造结果是边连接顺序SE-ME楔。
如果两个相交的楔是SV-ME类型,则这些连接SE-MV楔保守地近似由视单元边和与CSV的相交楔对应的两个其他轮廓边形成的二次曲面。再一次,SE-MV楔中的每一个都可以被认为是对应的具有无限节距的退化的二次曲面。
处理流程行从步骤1240行进至步骤1250以将在步骤1240中构造的所有辅助的初始楔添加到“楔_列表”中,其意味着这些楔最终会由步骤 1225来处理以找到关于楔的可见片段。在后续步骤1250中,将在步骤1240 中构造的任何SE-MV楔添加到“楔_列表”中。
处理流程行进至判决步骤1255以确定是否已经处理了“楔_列表”中的所有楔。如果在“楔_列表”中剩余楔,则处理流程行进至步骤1260 以处理“楔_列表”中的在步骤1260处选择的下一个未处理的楔,处理流程从步骤1260返回至步骤1225。
如果在判决步骤1255中确定“楔_列表”中的所有楔已经被处理,则处理流程继续至步骤1265以通过测试一阶不连续性网格中的每个区中的单个点的从视单元看去的可见性,来确定每个区中的单个点的可见性。在一些实施方式中,每个测试点的从单元看去的可见性是使用图24B所示的点遮挡方法来确定的。结合图24B及有关图所详细描述的该测试是基于修改的多面体的点包容性测试。重要的是,该测试采用相同的用于构造保守的保守的可见性事件面(楔)。
处理流程行进至步骤1270,其中一阶PVS是没有位于保守的一阶本影不连续性网格的本影(被遮挡)区里面的网格三角形或网格三角形的分段的集合。
保守的线性化不连续性网格构造的非输出敏感方法与使用3D和2D 网格遍历的保守的线性化可见性图构造的输出敏感方法的比较
如在图12中所详述的,可以使用一般的用于构造不连续性网格的现有技术方法来构造保守的线性化本影不连续性网格。在该现有技术方法中,在每个相关的轮廓边上构造楔,即使是从源(在本申请中为视单元) 看去完全被遮挡的那些轮廓边。然后包括构造在完全被遮挡的轮廓边上的那些楔的每个楔与所有潜在地相交的网格三角形相交,并且作为后处理随后对网格三角形的关于每个楔的可见分段进行确定。
相比之下,使用3D网格遍历(图20A及有关的图)、对关于楔的可见性使用2D网格遍历(图15及有关的图)来构造从视单元看去的保守线性化本影可见性图的方法提供了更加有效的用于确定从视单元看去的可见性的输出敏感方法。该方法利用了流形网格的固有的连通性和遮挡连贯性并且以从前到后的次序解决了可见性问题。该方法对可见轮廓边确定和在可见轮廓边上的楔构造进行交错以实现相对地独立于模型的深度复杂度的输出敏感性能。
一般地,输出敏感处理具有主要由算法输出的相对于其输入大小的大小来决定的计算成本。因为在显示建模环境中,从任何视区看去的可见数据集(输出)的大小通常远远小于整个模型(输入)的大小,来自区可见性预计算处理的输出敏感是有利的。
在表Va中总结了使用保守的线性化本影事件面来确定从区看去的可见性的两种方法的差异,图12的输出不敏感方法和输出敏感的2D/3D网格遍历方法(图20和有关的图)。
表Va
CLUDM构造的非输出敏感方法与CLUVM构造输出敏感方法的比较
其中在表及后续的方程式中使用以下项:
M=模型中的多边形的数目
N=视单元中的边的数目
S=环境中的一阶轮廓边的数目
SShaft=形成在单个一阶轮廓边与视单元之间的轴中的一阶轮廓边的数目
MV=模型中的可见多边形的数目
SV=环境中的可见一阶轮廓边的数目
SVShaft=形成在单个一阶轮廓边与视单元之间的轴中的可见的一阶轮廓边的数目
Vw=所有多边形与单个楔之间的相交部的顶点的数目
Mw=与楔相交的网格多边形的数目
Ssvw=关于楔的(从点看去或从边看去)可见的轮廓顶点的数目
Segvw=网格多边形与楔之间的相交部的关于楔的可见分段的数目
前面的表强调:对于2D/3D网格遍历方法,在对流形的从前到后的遍历期间对可见的轮廓边进行识别。从而,仅构造由可见的轮廓边分段支撑的那些楔。这导致更加输出敏感的实施。
现有技术的不连续性网格方法与本使用保守的线性化本影事件面的不连续性网格化方法的比较
在本说明书的背景技术部分中讨论了现有技术的不连续性网格化方法。不连续性网格化方法构造本影和半影可见性事件面两者并且确定它们的与网格多边形的关于楔的可见相交部。这些相交部重划分网格多边形使得在不连续性网格的每个面或“区”中源的视图(“背投影情形”)在拓扑上是等同的。现有技术的不连续性网格化方法的目标是主要地识别出现在面光源的半影区中的亮度不连续性。
在一些实施方式中,本从区看去的可见性预计算方法不是使用半影可见性事件面而是替代地仅使用保守的本影可见性事件面来识别从视单元看去保守地可见的网格多边形分段。可以使用这些事件面来构造如在图 12(非输出敏感的不连续性网格构造)和图19、图20、图21以及有关图 (输出敏感的从视单元看去的可见性图构造)中描述的保守的本影不连续性网格。可替代地,保守的本影楔可以彼此相交以形成如在图26中描述的本影边界多边形(UBP)。
表Vb给出了保守线性化本影可见性图(在图20及有关图中示出) 与现有技术的不连续性网格化方法的比较。
标记为“生成的楔”的行示出:使用2D网格遍历(图15及有关的图)以及使用3D网格遍历(图20及有关的图)的本方法都包括从区看去的可见性方法,由于可见性面仅生成在可见的(未被遮挡的)(一阶) 轮廓边上,上述从区看去的可见性方法是相对地输出敏感。这与现有技术的事件面形成在所有(一般的从区看去的)轮廓边上的不连续性网格方法形成对比。
表Vb
保守线性化本影可见性图(CLUVM)与现有技术的不完全和完全的不连续性网格化方法的
对比
为了总结,本一阶不连续性网格化方法消除了在由现有技术的仅考虑线性顶点-边可见性事件面的不完全的不连续性网格化方法产生的本影边界中发现的间隙。一阶方法通过以下来填充这些间隙:1)通过忽略对应的支撑多边形中的关于楔的遮挡来保守地延伸楔的可见部分以及2)在楔与(保守地)可见的网格轮廓边的相交部处构造保守的平面SE-MV楔。楔的这些相交部是CSV,并且使用扫掠方法在这些点上进行的SE-MV楔构造产生了对应的不连续性网格中的连续的线性本影边界。除了是近似的并且总是保守的间隙区以外,该边界是精确的。
本影边界中的在现有技术的不完全的不连续性网格化方法中的出现的间隙对应于在完全的不连续性网格化方法中给出的二次本影事件面。但是,二次曲面的使用充分地增加了实施的复杂度。
不同于在现有技术的不完全的不连续性网格化方法中使用的线性事件面,在图12的方法中采用的保守的线性化本影事件面形成连续的本影面,其使得能够对被遮挡的并且保守地可见的多边形网格分段进行确定。
如随后在本说明书中示出的,实施方式还包括自适应地细化这些间隙区中的保守的线性化事件面的精度。使用该细化和仅这些平面楔,该方法能够在间隙区中构造收敛于精确的二次事件面以位于指定的误差容限内的保守的本影事件面。
相比现有技术的需要二次曲面的完全的不连续性网格方法,使用保守的线性化本影事件面极大的简化了任何实施。但是,感兴趣是注意到,虽然简化了实施,但是当从所需的事件面的实际数目方面来看时,线性化本影面的渐进复杂度与仅使用S-EEE二次曲面的完全的连续性网格方法的复杂度相当。
表VIa示出了由一阶方法生成的本影事件面和不连续性网格边界的数目的上界,其可与会在完全的连续性网格实施中生成的S-EEE面(二次曲面)的数目的上界相比,在该连续性网格实施中假设二次曲面仅生成在一阶轮廓边上。
M=模型中的多边形的数目
N=视单元中的边的数目
S=环境中的一阶轮廓边的数目
SShaft=形成在单个一阶轮廓边与视单元之间的轴中的一阶轮廓边的数目
表VIa
使用假设非输出敏感构造的各种可见性传播模型对针对不连续性网格的事件面和单元 /区的数目的估计
表的最后两行示出了当在复合一阶轮廓顶点(CSV)处采用Teller 的将相邻SV-ME楔的平面延伸至相交处的线性化方法时所产生的事件面和不连续性网格边界的预期复杂度。不同于一阶旋转和扫掠方法以及采用二次曲面的S-EEE方法,将SV-ME楔延伸至相交处的方法会在CSV处引入新的事件面,因此,会产生较少的事件面。这些延伸的事件面的精度一般比对应的一阶SE-MV楔(尤其是靠近视单元)的精度低。从而,则他们会倾向于实际上与较大量的模型多边形相交并且如果所使用的本影区靠近视单元则明显地低估本影区。在采用以下技术的本发明中使用该事实:使用CSV处的靠近一阶SE-MV(通过旋转和扫掠来生成的)楔。离视单元较远处,在CSV处相交的SV-ME楔延伸至相交处。结果的延伸楔在距视单元的较大距离处没有那样不精确。
表VIa的第三行示出包括非S-EEE事件面的完全的不连续性网格具有相当地较高的复杂度。
表VIa所示的对于一阶可见性传播的事件面的数目的保守估计假设轮廓边的数目是模型中的多边形的数目的线性函数。实际上,一阶模型仅生成一阶轮廓边上的事件面,相比由完全的不连续性网格化方法采用的一般的从视单元看去的轮廓边,其显著地不是很多。对于所详述的网格,轮廓边的数目易于接近多边形数目的平方根。如果做出该假设,则事件面的数目会减少一个数目级,并且不连续性网格布置的复杂度会减少两个数目级。该假设是表II所给出的一阶复杂度图的复杂度的估计的基础。
当然,也促成完全的不连续性网格的复杂度的是以下事实:在现有技术的(非输出敏感)构造方法中,构造所有的可见性事件面,即使这些可见性事件面中的许多可见性事件面实际上完全位于从区看去的(例如,从视单元看去)的本影中,因此不促成实际的从区看去的本影或半影边界。相比之下,构造CLUVM的输出敏感方法生成一阶本影事件面,其从没有其他(一阶)可见的本影事件面被包含在CLUES中的意义上来讲是极值的,尽管CLUES可以通过背投影来细化以解释高阶可见性效果。
再一次,表VIa假设不连续性网格的非输出敏感构造。在本说明中的其他地方,示出对应的可见性图的输出敏感构造能够显著地减少所构造的事件面的数目和对应的区布置的复杂度。
在一些实施方式中,从区看去的可见性方法仅计算精确的本影边界事件面或这些面的保守近似。相比之下,不连续性网格方法必须生成所有的事件面(本影和半影),其与多边形网格相交使得该网格被重划分成不连续性网格面,在上述不连续性网格面中源区的拓扑视图是统一的。从而, (精确的或保守的)本影边界面一般是在不连续性网格化方法中计算的可见性事件面的小子集。
通过构造本影不连续性网格、从视单元看去的可见性图或多面体聚合本影来计算从区看去的可见性的本方法能够固有地使用多边形方向来在不需要包容功能测试的情况下仅构造本影事件面(一阶或精确的)。在一些实施方式中,这些本影事件面是限定可见性事件面的不完全集的小子集。从而,相比对完全的不连续性网格进行后处理以识别本影边界的方法,本方法是计算从区看去的可见性的更加有效的方法。
图13是示出了在3D网格遍历期间识别并且分辨交叠循环的处理。
采用3D网格遍历的从视单元看去的可见性图构造的输出敏感方法 (在图19至图21中示出)可以遇到多边形交叠循环(例如,在图19的步骤1935中及图20A的步骤2015中)。这样的多边形交叠循环还可以在为现有技术的从点看去的可见性确定方法的Weiler-Atherton算法中遇到。
因为在图19至图21中所示的网格遍历方法偏向于朝着跳转至较近的、潜在地遮挡的元素,所以其易受能够由网格元素的循环部分遮挡引起的无限循环的影响。例如,考虑以下情况:潜在的被遮挡物和潜在的遮挡物网格元素两者都被限定为包括在包围盒中的多边形集群。明显的是,三个(3D)包围盒可以布置在三维空间中以使得这些盒子以循环的方式部分地彼此遮挡。例如,考虑三个盒子,盒子A部分地被盒子B遮挡。盒子B部分地被第三盒子C遮挡。如果盒子C部分地被盒子A遮挡,则三个盒子形成一个遮挡循环。如果网格遍历处理在轴测试中采用这些包围盒元素,则在图20A的步骤2005、2010和2030之间会产生无限循环。
在实施方式中,能够采用两种技术来消除由网格元素的循环遮挡引起的无限循环。在一种方法中,减小正在被用于轴测试的元素的大小。这能够通过在层次结构中较低处使用子盒的层次包围盒来自然地实现。较小的网格元素不太可能产生遮挡循环。为了管理循环,从较大的集群到较小的集群甚至到各个三角形来动态地对元素进行细化。在一些实施方式中,因为甚至三个单独的三角形就可以导致遮挡循环,所有该技术没有消除所有情况下的循环遮挡。
在这样的情况下,第二种技术有效地消除了遮挡循环,在该技术中,将网格元素限定为三角形,并且三角形之间的交叠关系被维持成有向图。在至较近三角形的任何跳转以前,针对循环对该有向图的有关部分进行检查。该检查可以采用Tarjan的算法或用于在有向图中识别循环(强连接的组件)的其他O(n)时间算法。一旦识别了三角形交叠循环,可通过对引起循环的违反三角形(循环的根三角形)的三角形-视单元轴中的所有三角形进行识别以打断该循环。在该轴中的所有三角形都与该轴相交。该相交部将这些三角形细分成完全位于轴内的组件和完全位于轴外的组件。然后使用不能与违反三角形形成循环的这些细分的三角形来重新发起遍历。这是因为与违反三角形形成循环的任何三角形必须位于轴内或轴外。还可以采用该技术来分辨网格元素而不是各个三角形上的遮挡循环。
在另一种技术中,为了消除循环,经常直接采用修整其他三角形的轴中的三角形的后一种方法。这消除了构造并维护存储交叠关系的有向图的需要。但是,它能够产生非必需的相交部/修整计算,例如,当不存在循环时。
现转向图13,图13与图20A类似,对于从区看去的可见性图的输出敏感构造的3D网格遍历算法的主要部分。图13通过示出了3D网格遍历处理的可能遇到多边形交叠循环的步骤以及添加检测和分辨这样的交叠的步骤来对图20进行了补充。
在一些实施方式中,图13所示的处理从步骤1305开始,其中在3D 网格遍历的主要处理(步骤与图20A中的步骤2010相同)中遇到的网格三角形。
处理流程行进至判决步骤1310以确定在由当前三角形和视单元形成的轴中是否有任何未遍历的三角形。该步骤与图20A中的步骤2010相同。
如果在判决步骤1310中确定在由视单元和当前三角形形成的轴中存在未遍历的三角形,则处理流程行进至步骤1330以将上覆三角形插入到表示三角形之间的交叠关系的有向图中。进行步骤1330和后续的步骤以及图20中的对应步骤2030。
在步骤1330处,处理流程行进至步骤1335以确定三角形是否在表示交叠关系的有向图中形成循环,如果是,则处理流程行进至步骤1340。在一些实施方式中,可以使用现有技术算法在线性时间中进行针对有向图中的循环性的检查。该图中循环的出现表示涉及当前三角形和轴中的上覆三角形的循环交叠。
在步骤1340,上覆三角形被修整成两个组件:完全位于轴内的一个组件,和完全位于轴外的另一个组件。这有效地消除了设计原始的上覆三角形的任何潜在的交叠循环。
接着步骤1340,处理流程行进至步骤1345,其中3D网格遍历跳转至上覆的组件三角形。这与图20A中的步骤2030相同。
如果在判决步骤1335中确定上覆三角形没有与当前三角形形成循环。则处理流程直接行进至步骤1345。
如果在判决步骤1310中确定在三角形-视单元轴中没有未遍历的三角形,则处理流程行进至步骤1315。步骤1315和后续的步骤与图20A的对应步骤相同。
如前所述,使用多边形-视单元轴来识别循环。必须小心构造多边形与视单元的位于包括该多边形的平面的背面侧上的部分之间的轴。在一些实施方式中,对于位于平分该视单元的平面中的多边形,仅使用视单元的位于该平面的背面侧上的部分。以此方式来识别本方法中的多边形-视单元轴。
如果在判决步骤1310中确定在由当前三角形和视单元形成的轴内不存在未遍历的三角形,则不必检查循环交叠并且处理流程行进至步骤 1315。当应用遍历来构造如图20A所示的从区看去的可见性图时,判决步骤1315与图20A中的判决步骤2015相同。在该情况下,标记为“处理相交部”的步骤1318与图20A的步骤2035对应,其中遍历在遮挡边界处中止。图13中的步骤1320与图20A的步骤2020相同。标记为“处理边”的步骤1322对应于图20A中的步骤2045至2070。
在一些实施方式中Weiler-Atherton算法和本3D网格遍历方法(用于构造可见性图、不连续性网格或PAU)两者都采用对于循环交叠的检查。
Weiler-Atherton算法是从点看去的可见性确定的图像空间、对象精度方法,其具有一般相对于场景的深度复杂度为(除了网格的凸区)非输出敏感的计算成本。
当与2D网格遍历(图15及有关的图)组合使用时,3D网格遍历(图 20及有关的图)的本方法是从区看去的计算方法,其一般相对于可见性图的深度复杂度为输出敏感。(还可以通过简单地将视点用作退化的视单元来将3D/2D网格遍历方法应用至从点看去的可见性问题)。
表VIb示出了Weiler-Atherton算法与使用3D/2D流形网格遍历的本方法之间的一些差异。该表的第一行强调Weiler-Atherton算法在每个多边形的每条边处有效地生成可见性事件面(截边),除了可以忽略非轮廓边的凸遮挡物。相比之下,3D/2D流形网格遍历方法通过仅在轮廓边处生成可见性事件面来利用流形的固有的遮挡连贯性。
此外,通过执行从前到后的深度次序以及通过交错可见多边形的遍历和遮挡边界的构造,3D/2D网格遍历方法实现了相比Weiler-Atherton算法而言更加输出敏感的性能描述。
执行针对3D/2D网格遍历算法的严格的从前到后的遍历的成本是对潜在地遮挡当前边形的多边形进行测试的成本。这实质上一类轴测试,该轴形成在当前多边形与视单元之间。可以使用层次空间细分或以用于加速视锥体剔除的技术类似的方式进行的包围体积来加速这样的轴测试。使用该方法,轴测试的成本倾向与潜在地遮挡的元素的数目N的O(logN)。对于要测试的N个当前多边形的总体成本是NlogN。该严格的从前到后的次序确保了要测试的当前多边形的数目N接近可见多边形的数目,因此产生了输出敏感性。
表VIb
网格遍历实施:2D网格遍历(图14、图15和图16)
参考图14及有关的图15和图16,对用于构造关于楔可见的2D可见性图的2D网格遍历处理(1-流形的遍历)进行了描述。
3D网格遍历处理(在本说明书中结合图19、图20及有关的图描述的)解决了3D从视单元看去的可见性问题。在一些实施方式中,3D网格遍历处理的输出是由从视单元看去的未被遮挡的多边形分段组成的保守的线性化可见性图,上述从视单元看去的未被遮挡的多边形分段是通过使保守的线性化本影事件面(CLUES)或楔与网格多边形相交并且确定楔相交部实际是否是从视单元看去的遮挡边界来识别。
如在一些实施方式中所描述的,CLUES还可以与网格多边形相交而需确定该相交部是否是从视单元看去的遮挡边界。在这些实施方式中的结果的对网格多边形的划分是一类不连续性网格,随后对其进行后处理以确定网格元素是否从视单元看去可见。通过比较,2D网格遍历处理解决了 2D可见性问题:关于楔的可见性问题,其与在现有技术的不连续性网格化方法中发现的关于楔的可见性问题类似。在现有技术的方法中,关于楔的可见性问题是以以下简单而不同的方式来解决的:将三角形与楔相交,然后使用2D Weiler-Atheron算法(其不是输出敏感的)来确定可见分段。通过利用1-流形的固有可见性相关性,本2D网格遍历方法以更加有效、输出敏感的方式解决了相同光的问题。
关于楔的可见性相当于根据元素(视单元顶点或边、或内侧拐角轮廓顶点)并且穿过多边形网格元素(边或顶点)来寻找的关于楔的可见分段。在一些实施方式中,楔是保守的线性化本影事件面(CLUES)。
如果楔是由视单元顶点和网格轮廓边形成,则将楔称为SV-ME楔。 SV-ME楔提出了从点看去的关于楔的可见性问题。如果楔是由视单元边和网格顶点形成,则将楔称为SE-MV楔。在一些实施方式中,该类型的楔也提出了从点看去的关于楔的可见性问题,这是因为该可见性是从网格轮廓边看去的视点沿着远离视单元的方向来解决的。
第三类楔(SE-ME)是在视单元边和网格轮廓边平行的特殊情况下由这两条边形成。在这种情况下,构造本影楔的旋转处理没有遇到唯一的支撑视单元顶点而是替代地遇到视单元边。在许多现有技术的不连续性网格化方法中不识别这样的楔,但是如果视单元碰巧与世界轴线对准,则这样的楔当然可以特殊地存在于建筑环境(其中许多边倾向于平行或垂直于地平面)中。
不同与其两类楔,SE-ME楔提出了以下从区看去的关于楔的可见性问题:从支撑视单元边看去的关于楔的可见性。在一些实施方式中,通过对处于一般位置的视单元进行重划分或通过将SE-ME楔视为特殊地连接并且具有字典式排序的SV-ME楔对来消除SE-ME楔。
在本方法中,SE-ME楔和关于楔的从线段看去的可见性问题是直接通过2D流形遍历方法来处理,其解决了从点看去的可见性(对于SV-ME 和SE-MV楔)和从线段看去的可见性(SE-ME楔)。
相比从点看去的情况,从线段看去的情况是固有地更加负载,这是因为即使在2D(关于楔的可见性)中的从区看去的可见性问题也能够涉及如Koltun等人所建议的高阶可见性事件面。
本2D流形遍历方法解决了对于从点看去的情况和从边看去的情况两者的关于楔的可见性问题。对于从边看去的情况(SE-ME楔),在一些实施方式中,该方法仅采用被称为楔线(WL)的一阶本影事件面,或被称为本影边界线(UBL)的高阶事件面。图14、图15和图16示出了有关的流程图,其包括用于解决针对从点看去的楔(SV-ME楔,其中支撑视单元元素是顶点)和从边看去的楔(SE-ME楔,其中支撑视单元元素是边)的情况两者的关于楔的可见性问题的2D流形遍历方法。除了解决可见性问题的“元素”实际上不是视单元顶点而是内侧拐角网格轮廓顶点以外,SE-MV情况与从点看去的SV-ME情况相同。
图17和图18是示出了以下方法的流程图:“调整”一阶WL以保守地近似使用背投影的高阶UBL来增加关于楔的可见性解的精度。图17 和图18的细节在本说明书中的后续部分中提出。
如应用至确定关于楔可见的网格三角形相交部2D遍历处理的输出是保守的2D可见性图,其由关于楔可见的多义线段和称为楔线的保守的自由度为1可见性事件结构。多义线是遍历的1-流形。多义线段与网格三角形与楔的在楔上可见的相交部对应。在2D流形遍历方法中,可以通过 WL来将各个1-流形与其他1-流形“融合”,创建多义线聚合本影(PLAU),因此实现了平面上的遮挡物融合。
图14所示的流程图示出了在图15中示出并且在本说明书的后续部分进行了详细描述的主2D遍历处理的发起、重发起和停止的处理。
根据一些实施方式,图14所示的处理从步骤1405开始,其中示出了选择“种子”分段来发起针对单个楔的2D网格遍历处理。
在2D遍历方法的一种实施方式中,遍历开始于由还与连接至(相邻于)正在处理的当前楔的楔相交的网格三角形形成的可见分段。在该方法中,将作为相邻楔的多义线聚合本影(PLAU)的一部分的网格三角形用于发起对当前楔的2D遍历。因为该网格多边形与对于距针对相邻楔的视单元最近的相交可见分段,所以该网格多边形很可能是对于当前楔最近的分段。使用已知的相邻、最近的相交元素发起遍历提升了处理的性能。连接至该初始分段的分段形成2D种子网格并且很容易地通过确定与还与该楔相交的种子三角形相邻的三角形的相交部来识别。
处理流程行进至步骤1410以通过楔横向边界与2D种子网格的相交部来识别2D种子网格的包含点。
当识别了种子2D网格和该种子网格上的包含点时,处理流程行进至步骤1415以调用2D网格遍历的主处理。在图15中示出了主2D网格遍历。在一些实施方式中,使用在图14的步骤1405选择的种子2D网格三角形/分段来发起图15所示的主2D流形遍历处理。此外,可以在2D网格的特定分段处中止图15所示的主2D流形遍历处理(在步骤1530处)。图14所示的处理确定在主2D流形遍历处理中是否剩余任何被中止的遍历(步骤1420)以及是否应该在这些被中止的分段上重新发起主2D流形遍历处理(步骤1430及随后的步骤)。
如果在判决步骤1420确定不存在其上已经中止了2D网格遍历的主要部分的分段,则处理流程行进至终止针对该楔的2D网格遍历的步骤 1425,从而完成了2D关于楔的可见性图的构造。
如果在判决步骤1420确定存在其上主2D网格遍历已经被中止(图 15的步骤1530中)的2D网格分段,则处理流程行进至判决步骤1430以确定在由中止的分段(SEG)和作为视单元顶点(SV-ME楔)或视单元边(SE-ME楔)的视单元元素(VCE)形成的轴中是否存在任何三角形。可替代地,如果该楔是SE-MV类型,则出于该算法的目的,实际上根据被视为“VCE(点)”的内侧拐角网格轮廓顶点来解决。
如果在判决步骤1430中确定在SEG与VCE之间的轴中没有三角形,则处理流程行进至步骤1455以在连接至当前中止分段的分段形成的2D 网格(多义线)上的包含点。
处理流程行进至步骤1460,其中在先前的中止分段上重新发起2D网格遍历。
如果在判决步骤1430确定在SEG与VCE之间的轴中存在三角形,则处理流程行进至步骤1435以确定在SEG-VCE轴中是否有任何未遍历的三角形/分段。
如果在判决步骤1435中确定在SEG-VCE轴中存在未遍历的三角形/ 分段,则处理流程行进至步骤1440,其中在SEG-VCE轴中的较近的未遍历的三角形/分段上“跳转”或重启2D网格遍历。该步骤(其还出现在图15所示的主2D遍历处理的步骤1530中)确保了在继续遍历以前以及在做出停止遍历(因为中止分段从VCE看去被完全遮挡)的决定之前已经处理了所有潜在地遮挡的三角形/分段。
如果在判决步骤1435中确定在SEG-VEC轴中不存在未遍历的三角形,则处理流程行进至步骤1445以确定当前(中止)分段是否位于任何多义线聚合本影(PLAU)内,其表示楔的从楔的VCE(或在SE-MV楔情况下的内侧拐角轮廓顶点)看去被遮挡的一个或多个多边形子区。在一些实施方式中,该测试使用图25所示的修改的多面体的点包容性测试的 2D版本。该修改的多面体的点包容性测试使用一阶事件面(一阶楔)或在2D情况下的对应的楔线(WL);可选地,高阶本影多边形(UBP)或在2D情况下的对应的本影边界线(UBL)。该测试允许对多面的点包容性问题或多边形的点包容性问题的隐式解而不必构造整个多面体/多边形。
如果在判决步骤1445中确定中止分段上的点位于PLAU内,则处理流程行进至步骤1450,其中没有在中止分段上重新发起遍历并且不再将中止分段标记为中止。
如果在判决步骤1445中确定中止分段没有位于任何PLAU内,则处理流程行进至步骤1455,其中构造相关联的2D网格的包含点并且如前所述重新发起遍历。
2D网格遍历实施:2D遍历的主处理(图15)
如前所述,如图14所示的处理用于对在图15中详细示出并且在步骤 1415中被称为主2D网格遍历处理的发起、重新发起和终止进行控制。
在一些实施方式中,图15所示的处理从步骤1505开始,其中关于楔的网格三角形分段的2D网格(多义线)遍历开始于未遍历的分段的遍历。从分段到分段的多义线遍历是顺向的,沿着从分段到相邻分段的两个方向之一行进。三角形网格的对应的3D遍历(在图20的讨论中有详细描述) 能够穿过三个相邻边界发生,并且例如在洪水填充(flood-fill)或广度优先遍历中行进。
处理流程行进至判决步骤1510以确定在当前分段与支撑视单元元素之间的2D轴(分段-视单元元素轴或SEG-VCE轴)中是否存在任何未遍历(通过当前的2D网格遍历处理)的三角形/分段。单个初始楔与多个可见的网格三角形的相交部能够产生多个多义线段和潜在地多个对应的 2D轴。在一种实施中,针对这些分段中的每一个分段来构造2D轴 (SEG-VCE轴)。可以有以下替代实施方式:将包围多个连接的分段的单个的保守轴用于加速步骤1510的轴-包含测试。如果在较大的包含轴中存在任何未遍历的三角形/分段,则处理可返回至针对每个分段的各个轴。
在一些实施方式中,通过采用层次空间细分(和/或层次包围盒结构) 来组织3D多边形网格几何图形以进一步加速步骤1510的轴包括测试。使用数据库的任何层次组织易于将轴包括测试的成本从大约N*M减少至约NLog(M),其中M是模型中的多边形数目并且N是所测试的轴的数目。
根据一些实施方式,如果初始楔是SV-ME楔,则对应的SEG-VCE 轴根据分段与支撑视单元顶点之间的支撑线形成。在另外的实施方式中,如果初始楔是SE-MV楔,则对应的SEG-VCE轴根据分段与所支撑的网格轮廓顶点之间的支撑线形成,这是因为在这种情况下,可见性是从视单元边而且穿过网格轮廓顶点看去的。如果原始楔是生成在所支撑的轮廓边与支撑视单元边平行的特殊情况下的SE-ME类型,则SEG-VCE轴是根据分段与支撑视单元边之间的支撑线形成。
如果在SEG-VCE轴中存在未遍历的分段,则处理流程行继续至步骤 1530,其中2D遍历跳转至SEG-SILE轴中较近的分段。这两个步骤执行从前到后的处理次序。如将描述的,这与针对3D网格遍历处理的步骤2010 和步骤2030类似。注意图15与图20之间的相似性。尽管3D遍历使用 3D网格三角形-视单元(TRI-VC)轴来测试较近的未遍历元素,本2D 遍历采用2D SEG-VCE轴来测试较近的未遍历元素。
如果在判决步骤1510中确定在SEG-VCE轴中不存在未遍历的分段,则处理流程行进继续至步骤1515以确定当前遍历的分段是否包含遮挡边界(OB)点或包含边界点。
包容边界点出现在多义线段与楔的边界的相交处。
OB点表示2D多义线流形上从VCE看去可见与从VCE看去被遮挡之间的边界。OB点可以出现在WL与楔上的多边形网格分段的相交处。 WL和与多边形网格分段的每个相交部是对应的2D(关于楔的)不连续性网格的1D元素(点)。与任何可见性事件面一样,WL表示从特定的源特征(2D情况下的顶点)看去的可见性。根据一些实施方式,在SE-ME 楔情况下如果VCE是视单元边,则除了在对应的轮廓顶点上的WL的原点处极限中以外,WL不是必需地表示楔上从视单元边看去可见与从视单元边看去被遮挡的区之间的边界。
这是因为对于任何从区看去的可见性问题,空间的从区看去(在 SE-ME楔的2D情况下作为视单元边的区)被遮挡的实际部分不仅是通过事件面(WL)与网格多边形的相交部来确定而且通过WL与其他WL 的相交部来确定。这些相交部一起形成了包围从视单元边看去的本影区的 1-流形面。将这些1-流形面称为多义线聚合本影(PLAU)。根据可以由对应的WL构造的被称为本影边界线(UBL)的分段来形成PLAU。
从而,不是所有的2D不连续性网格点(2DDM)点(位于WL与关于楔的三角形分段的相交处)都是遮挡边界(OB)点。在随后将详细讨论的步骤1563中做出对实际的OB点的识别。
如果在判决步骤1515中确定出当前分段包括OB点,则处理流程行进至步骤1535以中断在OB点处的当前2D网格遍历。在另外的实施方式中,处理流程从步骤1535行进至处理15-1,其将处理流程返回至步骤 1525。类似地,在判决步骤1515处,确定2D网格的当前分段是否包括包含边界。该边界点是2D网格与楔的边界线的相交部,如在图14中的步骤1410或1455(控制图15的主2D遍历处理的处理)中确定的。如果在判决步骤1515中确定当前的2D网格分段包括包含点,则处理流程行进至步骤1535,其中在包含边界点处中断2D网格遍历。接着步骤1535, 2D网格(多义线)遍历可以继续穿过其他非包含或非遮挡顶点。
如果在判决步骤1515中确定当前分段不包含OB点或包含点,则处理流程行进至步骤1520以确定SEG是否具有一阶从视单元看去的轮廓顶点。在一些实施方式中,如果顶点对应于当前楔与一阶从视单元看去的轮廓边的相交部则将该顶点确定为轮廓顶点。该点是复合轮廓顶点(CSV),其是当前楔与入射在从视单元看去的轮廓边上的楔的相交部。
如果在判决步骤1520确定在当前分段上不存在轮廓顶点,则处理流程行进至步骤1525,其中2D网格遍历使用2D网格的广度优先遍历或洪水填充遍历来行进至与当前分段共享非轮廓顶点的下一个未遍历的分段。
如果当前分段具有轮廓顶点,则2D网格的正常的广度优先遍历或洪水填充遍历没有在轮廓顶点处继续。替代地,如果在判决步骤1520中确定当前分段包括一阶轮廓顶点,则处理流程行进至步骤1545以通过旋转至支撑当前楔的视单元元素(VCE)来构造轮廓顶点(CSV)上的楔线 (WL)。
如果正在处理的当前楔是SV-ME楔,则步骤1545中的WL通过从 CSV旋转至在其上构造当前楔的视单元顶点来构造步骤154中的WL。在图41A和图41B中示出并且结合这些图进行详细讨论了用于识别CSV 和构造用于SV-ME楔的楔线的该处理的用途。在一些实施方式中,如果正在处理的当前楔是SE-MV楔,则通过从CSV旋转至在其上构造当前楔的(内侧拐角)网格轮廓顶点(或其他CSV)来构造步骤1545中的 WL。
在其他实施方式中,在网格轮廓边与支撑视单元边平行的情况下,如果正在处理的当前楔是SE-ME楔,则通过从CSV旋转至属于在其上构造当前楔的支撑视单元边的支撑顶点来构造WL。在图41C中示出并且结合该图详细地讨论了识别CSV和构造用于SE-ME楔的楔线的该处理的用途。
在后续判决步骤中,确定当前正在处理的楔是否是SE-MV类型。在这种情况下,通过旋转至内侧拐角网格轮廓顶点来在步骤1545中构造对应的WL。如果在判决步骤1550中确定正在处理的当前楔是SE-MV楔,则处理流程行进至步骤1553,否则处理流程直接行进至步骤1555。
在步骤1553中,将WL延伸至(SE-MV)楔的支撑视单元边。在一些实施方式中,将WL与楔的支撑视单元边的相交部存储为对于该楔的 SVV。该点用于发起会最终构造对当前楔与在构造WL的CSV处与当前楔相交的楔进行连接的SE-MV楔的扫掠。如果正在处理的当前楔是 SV-ME楔,则SVV是楔的用于构造该楔的SVV。如果正在处理的当前楔是SE-ME楔,则SVV是用于构造该楔的视单元边的顶点之一。在这两种情况下,简化了对支撑WL的明确的SVV点的确定。
该SVV用作针对最终生成对当前正在处理的楔与入射在CSV的楔进行连接的SE-MV楔的扫掠处理的“开始”SVV。这些“辅助”连接楔是例如在图12(不连续性网格实施)的步骤1240中以及在图20(通过3D 网格遍历直接构造可见性图)的步骤2060中生成的。
在后续步骤1555中,在步骤1545中生成的WL与网格三角形/分段 (所有都与当前楔相交)相交以寻找与当前楔相交的最近的从点看去可见的三角形。在一种实施方式中,采用了加速该射线投射确定的技术,包括前面所述的对三角形网格数据进行层次空间细分。
WL与在步骤1545中识别的最近的网格三角形之间的相交部是2D 保守本影不连续性网格的与从支撑WL的视单元顶点(或在SE-MV情况下的网格轮廓顶点)看去的可见性对应的顶点或点(2DDM_POINT)。因为轮廓顶点是从视单元看去而不是从视单元元素看去,所以结果的2D不连续性网格是保守的。
处理流程行从步骤1555行进至判决步骤1563以确定“2DDM_点”是否从对应VCE的除了支撑WL的顶点以外的所有其他“部分”看去被遮挡。
如果在其上正在构造该2D不连续性网格的楔是SV-ME类型,则由于VCE自身是个点,所以“2DDM_点”是从对应的VCE看去“以别的方式被遮挡”。再一次,在本上下文中,“除此以外被遮挡”意味着“2DDM_ 点”是从VCE的除了支撑对应的WL的顶点以外的所有其他部分看去被遮挡。这对于与SE-MV楔对应的“2DDM_点”也是成立的。
在这两种情况下,因为源“区”是点,所以“2DDM_点”对应于关于楔的从“区”看去的可见性图的遮挡边界(OB)点。
在SE-ME楔的情况下,但是,VCE是实际区(线段)。在这种情况下,因为OB点是对应的2D可见性图上的表示“从区看去(VCE)被遮挡”和“从区看去(VCE)不被遮挡”之间的边界的点,所以“2DDM_ 点”不必是遮挡边界(OB)点。
在图16中给出了在步骤1563中示出的处理细节并且结合该图对其进行了详细的讨论。
如果在判决步骤1563中确定“2DDM_点”是从VCE看去以别的方式被遮挡,则在步骤1568中将该点作为OB点添加到(最近的)相交的三角形/分段。否则不将“2DDM_点”作为OB点添加到该分段并且处理从步骤1563行进至步骤1580以确定在当前“遍历”中是否存在任何未处理的/未遍历的分段。在该情况下,(2D)“遍历”被定义为通过非轮廓顶点连接至当前分段的一组分段。
如果在判决步骤1580中确定在遍历中存在未遍历的分段,则处理流程行进至步骤1525,其中对下一个未遍历的分段进行处理。
另一方面,如果在判决步骤1580中确定在遍历中不存在未处理的分段,则处理流程行进至步骤1583,其中限制包括由当前遍历生成的OB 点的分段以有效地移除分段的位于OB点的“从VCE看去”被遮挡侧的部分并且由对应的OB点终止该分段。
添加至分段这些OB点是与随后例如在步骤1515中的包括该片段的 2D网格遍历期间识别的遮挡边界相同的遮挡边界。
处理流程从步骤1583行进至步骤1585以继续OB点的未被遮挡侧上的2D网格遍历。因为来自一个三角形/分段流形的WL可以在不同的(不连接的)三角形/分段流形上的OB点,这表示在由OB点处的WL形成的两个流形的“遮挡物融合”形成的新连接的流形上(多义线聚合本影或 PLAU)继续遍历。
在本方法的一种实施中,三角形网格对象的整个集合由封闭的网格对象包含。该封闭的网格对象类似与通常用于环绕针对交互性可视化应用的网格对象的“天空盒”。2D中的本网格遍历方法(以及有关的3D网格遍历方法)将封闭天空盒视为任何其他的三角形网格流形。该方法确保遍历实现了整个数据库的全向遍历,即使当在数据库中没有呈现其他网格对象。使用该封闭网格使得当前方法具有输出敏感性,这是因为仅需要处理遇到的未被遮挡的网格,不需要必需地处理数据库中的每个网格。此外,本方法自然地识别天空盒本身的未被遮挡区,因为它大小和位置,其通常或者是明显的透支源。
图15及有关的图示出了构造从区看去的可见性图的方法,其中对对应的本影不连续性网格的每个生成的分段进行测试以确定该分段实际上是否是从区看去的可见性图的分段(即,从视单元看去的遮挡边界)。替代的实施方式使用3D和2D网格遍历处理来构造由生成在所遇到的轮廓边上的楔产生的不连续性网格分段。在该替代的实施方式中,接着对每个结果的不连续性网格区进行测试以确定该结果的不连续性网格区是否是遍历受限的本影区,或遍历不受限的非本影区。该确定可以采用使用一阶楔或高阶UBP的修改的多面体的点包容性测试。
图41A是示出了使用图15及有关的图的方法来针对简单的SV-ME 楔确定关于楔的可见性的处理的图。
图41B也是示出了针对SV-ME楔确定关于楔的可见性的处理的图。在这种情况下,楔与多边形网格相交使得结果的轮廓顶点是一阶轮廓周线的尖端。
图41C是示出了使用图15及有关的图来针对SE-ME楔确定关于楔的可见性的处理的图。
在有关的图的讨论中给出了细节。
图16:用于确定2D不连续性网格点是否是从楔的对应视单元元素 (VCE)看去以别的方式保守地被遮挡的处理。
在图15中示出的主2D网格遍历处理中,步骤1563是确定“2DDM_ 点”是否从楔的VCE的所有其他部分看去被遮挡的判决测试。图16示出了实施该测试的细节一种实施方式。
楔的VCE是确定关于楔的可见性的点或线段。根据惯例,“2DDM_ 点”从VCE的对应的支撑点看去被遮挡。实际上,“2DDM_点”位于从 VCE的对应点看去被遮挡与未被遮挡之间的边界上。
如果VCE自身是单个点(SV-ME或SE-MV型楔),则对应的“2DDM_ 点”从VCE的“所有部分”看去被遮挡,这是因为作为一个点,VCE没有其他部分。
在一些实施方式中,图16所示的处理开始于判决步骤1610,其中确定要测试的与“2DDM_点”对应的楔是否是SE-ME楔。
如果在判决步骤1610确定对应的楔不是SE-ME类型,则处理流程行进至步骤1615以将“2DDM_点”设置成从VCE看去以别的方式被遮挡。如在图15中示出的,步骤1563和步骤1568,这使得所测试的“2DDM_ 点”成为OB点。
如果在判决步骤1610确定对应的楔是SE-ME楔,则处理流程行进至步骤1620以在正在测试的“2DDM_点”与在这种情况下是视单元的边的VCE之间形成2D轴(2DDM_VCE轴)。
处理流程行进至判决步骤1625以确定在步骤1620中所构造的 2DDM_VCE轴中的是否存在任何未遍历的(通过2D遍历)三角形/分段。
如果在判决步骤1625中确定在2DDM_POINT-VCE轴中存在未处理的三角形/分段,则处理行进至步骤1630,其中2D遍历跳转至“2DDM_ 点-VCE”轴中较近的未处理的三角形/分段,并且图16所示的处理终止。
另一方面,如果在判决步骤1625中确定在2DDM_点-VCE”轴内没有未遍历的三角形分段,则处理流程行进至步骤1635以识别2DDM_点 -VCE”轴中的所有WL,并且将每个识别的WL放置在称为LIST的列表中。在实施方式中,在图15所示的主2D遍历步骤1545中已经构造了这些WL。
处理流程从1635行进至判决步骤1640以处理在步骤1635中识别的每个楔线并且将其放置在LIST中以确定WL是否是一阶楔线或高阶 WL。随在本说明书中结合图17和图18详细地讨论了调整一阶WL以形成背投影的高阶WL的处理。
对于列表中在判决步骤1640中处理的每一个WL,如果确定所处理的WL是高阶WL,则处理流程行进至步骤1645,其中在步骤1640中所识别的高阶WL与位于2DDM_点-轴”和形成在WL与VCE之间的轴中的所有其他的WL相交。在一些实施方式中,高阶WL的该分段与其他潜在地相交的WL的相交部产生了从VCE看去的本影边界线(UBL)的对应部分。尽管WL反映了从VCE看去的单个顶点的可见性,但是对应的UBL反应了从整个VCE(在这种情况下VCE是视单元边)看去的可见性(被遮挡或未被遮挡)。UBL可以具有从VCE看去被遮挡和从VCE 看去未被遮挡的分段,上述分段基于UBL的WL与其他WL的相交部。
处理流程从步骤1645行进至判决步骤1647以确定在“列表”中是否有任何未处理的WL。如果在“列表”中有未处理的WL,则处理返回步骤1640。
如果在判决步骤1640中确定所处理的WL是一阶WL,则处理流程直接行进至步骤1647以确定在“列表”中是否剩余任何未处理的WL。如果在“列表”中有未处理的WL,则处理流程返回步骤1640。
如果在判决步骤1647中确定“列表”为空,则处理流程行进至步骤 1650,其中使“2DDM_点”经受修改的多边形的点包容性测试以确定其是否从VCE看去被遮挡。如在前面在实施方式中所讨论的,结合图14 中的步骤1445,该测试采用图25所示的修改的多面体的点包容性测试的 2D版本,结合该图对其进行了讨论。该修改的多面体的点包容性测试使用一阶事件面(一阶楔),或2D情况下的对应的楔线(WL),并且可选地,为高阶本影边界多边形(UBP),或2D情况下的对应的本影边界线 (UBL)。该测试允许对多面体的点包容性测试或多边形的点包容性测试的隐式解而不必构造整个多面体/多边形。
处理流程从步骤1650行进至步骤1655以检查步骤1650的该修改的多边形的点包容性测试的结果。如果“2DDM_点”被遮挡,则处理流程行进至步骤1660以返回是,否则处理流程行进至1665以返回否。
图17:2D网格遍历:通过背投影来构造高阶楔
在图14、图15和图16及有关的图所描述的用于确定关于楔的可见性的2D网格遍历处理采用一阶楔线(在图15的步骤1454中所构造的)。
在SV-ME楔和SE-MV楔的情况下,对应的楔线是精确的从点看去的可见性事件面。在这些情况下,因为源“区”是退化成点,所以WL 还是对于“从区看去”的可见性问题的从区看去的本影边界线(UBL)。
但是,在SE-ME楔的情况下,关于楔的可见性的确定是实际的从区看去的可见性问题,其中根据视单元来确定可见性。在这种情况下,在一些实施方式中,构造在视单元的顶点上的一阶可见性事件面(实际上是自由度为1的面:楔线)仅保证保守地近似对应的精确的事件面,它们不必是相同的线。
这是因为一阶WL的构造假设整个源或视区(在这种情况下为视单元边)从构造楔线的轮廓顶点看去可见。在这种情况下,因为该假设对于单个视点总是成立,所以本实施方式中在多面体/多边形环境中开发的可见性传播的一阶模型在一些方面将视区视为“视点”。
但是,对于视区,该假设可能不成立。实际上,当从支撑WL的轮廓顶点观察时,用于构造WL的支撑视单元顶点(SVV)可能实际上被遮挡。在这种情况下,精确的WL和一阶WL不相同。
在一些实施方式中,为了确定更加精确的入射在相同一阶轮廓顶点上的WL,将一阶轮廓顶点用作视点采用从点看去的背投影处理。在背投影方法中,使用网格的某个结构作为视单元源(在2D情况下是一阶轮廓顶点),在视区自身上(在该2D关于楔的可见性情况下是视单元边)构造不连续性网格或可见性图。
本方法采用了聚焦式保守的背投影方法以识别在其上构造WL的保守的(从轮廓顶点看去)可见的支撑视单元顶点(VSVV)。对WL的该“调整”仅应用在以下情况:用于原始的正投影一阶WL的构造中的支撑视单元顶点(SVV)从支撑轮廓顶点看去被遮挡。否则,一阶事件面 (WL)是精确的。
实施方式采用计算背投影的2D网格遍历方法,与针对关于楔的正投影(从视单元元素看去)关于楔的可见性的情况在图14、图15和图16 中示出的方法类似。
寻找VSVV的关于楔的背投影问题经常是从点看去的可见性问题,这是因为关于楔的从VCE轮廓结构(背投影源)看去经常是点。
在一些实施方式中,识别关于楔、从轮廓顶点看去VSVV的处理在 SVV被遮挡的情况下从选择种子网格三角形/分段的步骤1705(图17)开始。
对于背投影的2D网格遍历:仅采用正投影-未被遮挡的三角形/分段的方法
在一些实施方式中,在背投影中仅使用在正投影(从视单元边看去) 中可见的那些三角形/分段。在该方法中,在正投影中可见的三角形/分段使它们的面取向相对于背投影计算为反向。通常,当从作为对于背投影的“源”点的网格轮廓顶点观察时,正投影轮廓顶点和背投影轮廓顶点是相同的顶点。在这种情况下,应用取向反转之前,不存在面向背投影源点(一阶轮廓顶点)的正投影-未被遮挡的分段。
在其他情况下,不是所有的正投影可见网格元素可以相对于重投影源点背面对。在这些情况下,如果三角形/分段的取向被反转,则它会相对于背投影源点背面对。这使得它相对于该点背面对,因此,创建了三角形 /分段具有不一致取向的网格。在这种情况下,将会发展相对于背投影点为背面对取向的三角形/分段从网格中移除。
未能包括在背投影中潜在地遮挡的几何图形可能减小所计算的 VSVV的精度以及WL的有关调节。但是,仍然确保保守的结果,这是因为任何潜在地遮挡的几何图形的消除仅会使得所计算的VSVV是对 SVV的更加保守的估计。此外,通过仅采用正投影-可见的三角形/分段,明显地减少了背投影处理的成本,这是因为有关的正投影-可见的三角形/ 分段已经在针对特定的网格轮廓顶点发起背投影处理的时候决定了。
在该方法中,正投影可见的网格元素实际上被用作计算背投影的虚拟遮挡物。
因此在步骤1705中,根据在正投影中可见(未被遮挡)网格集做出种子2D网格的选择。
对于背投影的2D网格遍历:在高阶可见性下轮廓顶点的回缩
在本方法的一种实施方式中,背投影仅由那些背投影源确定,在这种情况下,上述背投影源即网格轮廓顶点,当从VCE观察时,其是正投影中的一阶轮廓顶点。在该实施中,通过背投影仅对附接至一阶、正投影轮廓顶点的那些WLS进行“调整”以反映高阶关于平面的可见性。经调整的WL保持附接至原始的网格轮廓顶点。
实际上,当作为从SVV观察的一阶、正投影轮廓顶点的任何顶点是从VSVV观察时,由于共享该顶点的三角形/分段可以相对于VSVV背面对,所以该顶点不再是轮廓顶点。在这种情况下,正投影轮廓顶点(背投影源)实际上从视单元元素看去(在这种情况下为边)被遮挡。在这种情况下,实际的(精确的)从区看去的本影事件面不受该正投影轮廓顶点支撑,但是受位于相同1-流形上距视单元较近的顶点支撑。一阶从视单元看去的轮廓的朝着视单元的迁移或“回缩”是由背投影确定的高阶可见性的潜在效果。在一些情况下,未能解释该轮廓迁移可能会减小所计算的 VSVV和WL的对应调整的精度。但是,因为相比附接至对应的回缩的轮廓的对应事件面,附接至正投影一阶轮廓顶点的经调整的可见性事件面 (在这种情况下是WL)总是会产生更加保守的本影事件面,所有仍然确保了保守的结果。
通过保持附接至其原始的一阶正投影轮廓顶点的经调整的WL,经调整的WL在轮廓顶点与VSVV之间的“支撑分段”能够通过穿透网格面来潜在地违反其所驻存的网格的“局部可见性”。精确地,在这种情况下轮廓顶点会易于朝着视单元迁移以使得网格的较近的连接顶点之一会产生不违反局部可见性的调整WL并且这样的顶点变成“精确的”轮廓顶点。
为了保持附接至其原始一阶正投影轮廓顶点的保守的经调整的WL,将背投影处理设计成通过经调整的WL来防止局部可见性的违反。这发生在当经调整的WL起源于正投影一阶轮廓顶点以使得WL位于网格三角形1-流形(多义线)的内部。这是1-流形的一类自遮挡,其可以通过对与正投影轮廓顶点形成连接的组件的所有网格元素(在这种情况是多义线段)进行检测来防止,其中连接的组件完全位于VCE边分段与顶点之间的轴的内部。这可以使用从该顶点开始并且当分段与轴边界相交时结束的对多义线的简单遍历来进行。这些网格元素是能够产生引起轮廓顶点的回缩的自遮挡类型的网格元素。通过根据背投影确定来识别并且消除这些元素,背投影会产生保守的“经调整的”WL,其保持附接至原始的正投影轮廓顶点但是解释了使得SVV从该轮廓顶点看去被遮挡的高阶可见性效果。
因此,在图17的步骤1705,不考虑针对背投影的种子2D网格元素即可以潜在地引起背投影-源顶点的自遮挡的那些网格元素的选择。
该方法简化了2D网格遍历的关于楔的可见性的本情况下的实施。当在3D网格遍历的关于视单元的可见性情况(如结合图19、图20和图21 所讨论的)下采用该方法时甚至会实现更大的简化。通过在3D网格遍历情况下采用该方法,事件面(楔多边形)保持附接至原始的一阶正投影轮廓周线以确保构造连续的、保守的从区看去的本影边界面。
再一次,可以有以下替代的实施方式:对自遮挡的解释使得能够进行轮廓顶点的回缩。例如,一种寻找“回缩”轮廓顶点的方法是根据初始的正投影、一阶轮廓顶点来计算背投影并且确定与所计算的VSVV对应的 WL是否违反局部可见性。如果违反局部可见性,则当考虑高阶效果时该顶点实际上从视单元看去不可见并且将距VCE边较近的相邻顶点用作对于背投影的源点以确定与新点的VSVV对应的WL是否违反局部可见性。可以重复该处理直至遇到不违反局部可见性的WL。将该WL用作经调整的高阶WL。
一般地,尽管所增加的背投影复杂度能够很明显,但是仅由轮廓顶点的回缩产生附加的从区看去的遮挡量通常很小。保持固定至原始正投影、一阶轮廓顶点的正投影WL并且通过背投影来计算与VSVV对应的“经调整的”WL,背投影是解释了以很小的增加成本解释大多数高阶可见性效果的一种方法。
如前面所强调的,仅当原始的SVV从一阶轮廓顶点看去被遮挡时才应用高阶背投影调整。在一些实施方式中,采用简单的测量来确定一阶 WL与对应的经调整的高阶WL之间的最大可能偏差。例如,由一阶WL (即,支撑线)和轮廓顶点与VCE之间的对应的分离线形成的角度是一阶WL和高阶WL之间的最大角度偏差;由于使用该方法,如果VSVV 是分离点,则高阶WL能够在极限情况下仅等同于分离线。该角度自然易于随着距VCE的距离的增加而增加。即,视区从背投影源看起来更加“点状”。从而,由背投影方法确定高阶可见性效果在距视区较大距离处变得不太重要。在一些实施方式中,将角度测量用于确定是否应该针对任何给定的投影、一阶轮廓顶点来计算高阶效果。
现再回到图17,其示出了用于发起、重新发起和终止2D背投影遍历的总体控制处理,选择一些初始的关于楔的2D网格的种子三角形/分段来发起如1705所示的遍历。
如在正投影实施中(图14的步骤1405),对很可能是暴露遮挡物的初始的种子三角形/分段的选择加速了该处理。
处理流程从1705行进至步骤1710以使用射线投射来构造种子网格上的包含点。关于楔的背投影问题被限制在由背投影源点(网格轮廓顶点) 和VCE(在这种情况下的视单元边)形成的2D轴内的区。因此,在一些实施方式中,使用该轴的作为用于射线投射的射线的边来识别步骤1710 中的包含点。
处理流程行进至步骤1715以调用用于确定该轴中的可见分段的从顶点看去的2D网格遍历方法的主处理。
如同从边看去的2D网格遍历方法的主处理(在图15中示出),从点看去的背投影网格遍历的主处理能够引起中止(例如图18的步骤1830 的中止)。处理流程行进至判决步骤1720以确定是否存在来自从顶点看去的背投影2D网格遍历的主处理(图18)的中止遍历。
由于背投影处理设计在原始源VCE上构造可见性图,所以图17所示的步骤与图14所示的步骤类似(正投影、关于楔的可见性图构造)。同样地,除了在背投影情况下源是顶点而在正投影情况下源是边(SE-ME 楔情况),图17所述的步骤(背投影、关于楔的可见性图)与图18所示的步骤(正投影、关于楔的可见性图)类似。
图17所示的流程图示出了发起、重新发起和停止在图18中详细示出并且在本说明书的后续部分详细地描述的主2D遍历处理的处理的流程图。
如果在判决步骤1720中确定不存在2D网格遍历的主要部分已经中止的分段,则处理流程行进至步骤1725,其中对于楔的2D网格遍历被终止,从而完成了2D关于楔的可见性图的构造。
如果在判决步骤1720中确定存在主要的2D网格遍历已经中止的分段(在图18的步骤1830中),则处理流程行进至判决步骤1730以确定由中止分段(SEG)和背投影源顶点形成的轴中是否存在任何三角形。
如果在判决步骤1730中确定在由SEG与源顶点之间的轴中没有三角形,则处理流程行进至步骤1755以构造由连接至当前中止分段的分段形成的2D网格(多义线)上的包含点。
处理流程行进至步骤1760以重新发起对先前中止分段的2D网格遍历。
如果在判决步骤1730中确定在由SEG与源顶点之间的轴中存在三角形,则处理流程行进至步骤1735以确定在SEG-VCE轴中是否有任何未遍历的三角形/分段。
如果在判决步骤1735中确定在“SEG-顶点”轴中存在未遍历的三角形/分段,则处理流程行进至步骤1740,其中在“SEG-顶点”轴中的较近的未遍历的三角形/分段上“跳转”或重新开始2D网格遍历。也出现在图 18所示的背投影主2D遍历处理步骤1830中的该步骤确保在该遍历继续之前并且在做出停止遍历(因为中止分段从源顶点看去被完全遮挡)的确定之前已经处理完所有潜在地遮挡的三角形/分段。
如果在判决步骤1735中确定在“SEG-顶点”轴中不存在未遍历的三角形,则处理流程行进至步骤1745以确定当前(中止)分段上的点是否位于表示楔的从楔的源顶点看去被遮挡的一个或多个多边形子区的任意多义线聚合本影(PLAU)内。在一些实施方式中,该测试采用在图25 中示出的修改的多面体的点包容性测试的2D版本。该修改的多面体的点包容性测试使用一阶事件面(一阶楔),或2D情况下的对应的楔线(WL),和可选地,高阶本影边界多边形(UBP),或2D情况下的对应的本影边界线(UBL)。该测试允许对多面体的点包容性测试或多边形的点包容性测试的隐式解而不必构造整个多面体/多边形。
如果在判决步骤1745中确定中止分段上点位于PLAU内,则处理流程行进至步骤1750,其中遍历没有在中止分段上重启并且中止分段不再被标记为中止。处理流程在1750处终止。
如果在判决步骤1745确定中止分段没有位于任何PLAU内,则处理流程行进至步骤1755,其中构造相关联的2D网格的包含点。处理流程行进至1760以结合对应的图14的步骤1460如前所述重新发起遍历。
图18:背投影、从顶点看去的2D网格遍历主处理
根据一些实施方式,关于楔、从顶点看去的背投影2D网格遍历处理的主处理与在图15中示出的关于楔、从顶点看去的背投影2D网格遍历处理类似。
在一些实施方式中,图18所示的处理开始于步骤1805,其以对未遍历分段的遍历开始关于楔的网格三角形分段的2D网格(多义线)遍历。从分段至分段的多义线遍历是顺向的,沿着从分段至相邻分段的两个方向之一行进。三角形网格的对应3D遍历(在图20的讨论中进行了详述) 能够穿过三个相邻边界之一发生,并且例如以洪水填充或广度优先遍历行进。
处理流程行进至步骤1810以确定在当前分段与源顶点之间的2D轴中是否存在任何未遍历(通过当前的2D网格遍历处理)的三角形/分段。单个初始楔与多个可见的网格三角形的相交部能够产生多个多义线段和潜在地多个对应的2D轴。在一种实施中,针对这些分段中的每一个来构造2D轴(“SEG-顶点”轴)。以下替代实施方式是可能的:包围多个连接的分段的单个保守轴用于加速步骤1810的轴包含测试。如果在较大的包含轴中存在任何未遍历的三角形/分段,则处理可以回到针对每个分段的各个轴。
在一些实施方式中,通过采用层次空间细分(和/或层次包围盒结构) 来组织3D多边形网格几何图形来进一步加速步骤1810的轴包含测试。使用数据库的任何层次组织易于将轴包含测试的成本从约N*M减少至约 NLog(M),其中M是模型中的多边形的数目,N是所测试的轴的数目。
如果在“SEG-顶点”轴中存在未遍历的分段,则处理流程继续至步骤1830,其中2D遍历跳转至“SEG-顶点”轴中的较近分段。这两个步骤执行从前到后的处理次序。
如果在判决步骤1810中确定在“SEG-顶点”轴中不存在未遍历的分段,则处理流程行进至步骤1815以确定当前所遍历的分段是否包含背投影遮挡边界(BOB)点或是否包含包含边界点。
根据一些实施方式中,背投影边界(BOB)点表示2D多义线流形上从顶点看去可见与从顶点看去被遮挡之间的边界。BOB点出现在背投影楔线(BWL)与楔上的多边形网格分段相交部处。BWL与多边形网格分段的每个相交部是对应的2D(关于楔)不连续性网格的1D元素(点)。
如果在判决步骤1815中确定当前分段包含BOB点,则处理流程行进至步骤1835以在BOB点处停止当前2D网格遍历,其中图18所示的处理被中断。在另外的实施方式中,处理流程从步骤1835行进至处理 18-1,其将处理流程返回至步骤1825。
类似地,在判决步骤1815中确定当前2D网格分段是否包含包容边界。该边界点是2D网格与楔的如在图17的步骤1710或1755(控制图 17的主背投影2D遍历处理的处理)中确定边界线的相交部。如果在判决步骤1815中确定当前2D网格分段包括包含点,则处理流程行进至步骤1835,其中在包容边界点处中断2D网格遍历。在另外的实施方式中,处理流程从步骤1835行进至处理18-1,其将处理流程返回至步骤1825。如果在判决步骤1815中确定当前分段不包含BOB点或包含点,则处理流程行进至步骤1820以确定当前分段是否包含轮廓顶点。
因为背投影源是顶点(点),步骤1820的确定等同于寻找位于当前分段的顶点处的从点看去的轮廓。
如果在判决步骤1820中确定在当前分段上不存在轮廓顶点,则处理流程行进至步骤1825,其中2D网格遍历使用2D网格的广度优先或洪水填充遍历行进至与当前分段共享非轮廓顶点的下一个未遍历的分段。
如果当前分段具有一阶轮廓点,则2D网格的正常的广度优先或洪水填充遍历不在轮廓顶点处继续。替代地,如果在判决步骤1820中确定当前分段包含一阶轮廓顶点,则处理流程行进至步骤1845以通过旋转至对应的支撑视单元来构造入射在一阶轮廓顶点上的背投影楔线(BWL)。
在步骤1845,楔线(WL)通过对与背面分段(如上所限定的)共线的线进行旋转来形成,其中旋转是沿着远离对应多边形的外面至源顶点的方向进行。
处理流程从步骤1845行进至步骤1855,其中步骤1845中生成的WL 与都与当前楔相交的网格三角形/分段相交,以寻找最近的与当前楔相交的从点看去可见的三角形。在一种实施方式中,可以使用射线投射利用 BWL作为射线来确定该相交部。在一些实施方式中,采用前述的包括三角形网格数据库的层次空间细分的加速该射线投射确定的技术。
BWL与最在步骤1855中识别的最近的网格三角形之间的相交部是与从源顶点看去的可见性对应的2D保守的本影不连续性网格的顶点或点 (“2DDM_点”)。因为这是从点看去的可见性问题,所以这样的“2DDM_ 点”都是还是BOB点。
处理流程从步骤1855行进至判决步骤1880以确定在当前“遍历”中国是否存在任何未处理/未遍历的分段。在该情况下,将(2D)“遍历”限定为通过非轮廓顶点连接至当前分段的一组分段。
如果在判决步骤1880中确定在该遍历中存在未遍历的分段,则处理流程行进至步骤1825,其中对下一个未遍历的分段进行处理。
另一方面,如果在判决步骤1880中确定在该遍历中没有未处理的分段,则处理流程行进至步骤1883,其中限制包括由当前遍历生成的BOB 点的分段以有效地移除分段的位于BOB点的“从顶点看去”被遮挡侧上的部分并且该分段由对应的BOB点终止。
添加至分段的这些BOB点是与以下遮挡边界相同的遮挡边界:例如随后在步骤1815中对包含该分段的2D网格的遍历期间所识别的遮挡边界。
在后续步骤1885中,在BOB点的未被遮挡侧上继续2D网格遍历。因为来自一个三角形/SEG流形的BWL可能在不同(不连接的)三角形 /SEG流形上产生OB点,所以这表示对两个流形的通过BOB点处的BWL 的“遮挡物融合”所形成的新连接流形(背投影多义线聚合本影或PLAU) 的遍历的继续。(对于3D中的遮挡物融合的描述,参见Durand等人 (2000),其全部内容通过引用合并到本申请中)
图19:3D网格遍历
现参考图19及有关的图20和图21,对用于构造一阶从视单元看去的可见性图的3D网格遍历处理(2-流形的遍历)进行了描述。
3D网格遍历处理解决了3D、从视单元看去的可见性问题。3D网格遍历处理的输出是由使用保守的线性化本影事件面(CLUES)构造的从视单元看去被遮挡的多边形分段组成的保守的线性化本影可见性图。如所描述的,在一些实施方式中,CLUES对应于根据图1以及图3至图6的示例性流程图的方法构造的线性化保守的可见性事件面或“楔”。
不同于在现有技术的不连续性网格化方法中所用的楔,在本方法中所采用的CLUES或一阶楔是基于一阶可见性传播的保守模型来限定的。在一阶可见性方法中,仅通过多边形网格的轮廓特征和视单元特征来限定楔的结构;插入在这两个结构之间的几何图形不影响一阶楔的结构。
3D网格遍历方法的总体组织是进行流形网格元素(例如,流形三角形网格的三角形)的遍历以确保对于正在遍历的任何网格元素,首先识别能够完全或部分地遮挡正在遍历的网格元素的所有网格元素。在对正在遍历的原始网格元素的遍历进行之前,首先处理(通过3D网格遍历递归地处理)这些潜在地遮挡的网格元素。在3D网格遍历处理期间,在潜在地遮挡的元素的未遮挡的一阶轮廓边上构造源于这些潜在遮挡的网格元素上的本影事件面。这些事件面可以与网格三角形相交,引起可能与能够限制遍历处理的从视单元看去的遮挡边界对应的本影不连续性。
该从前到后的处理次序很大程度上将可见性事件面(楔)的构造限制在入射在可见的轮廓边上的那些楔,这减小了进行网格遍历的时间量。该方法还很大程度上将遍历限制到被遮挡的网格三角形,使得处理在实际上从视单元看去可见的元素的数目上是输出敏感的。根据一些实施方式,部分地遮挡未被遮挡的元素。
这与图12所示的一阶保守本影不连续性网格构造方法相反,在图12 所示的方法中,在所有的一阶轮廓边上构造一阶楔,甚至是被遮挡的一阶轮廓边。在图12的输出不敏感方法中,由这些被遮挡的一阶轮廓边形成的不连续性网格区最终被确定为被遮挡。但是,因为事件面形成在所有一阶轮廓边上,所以形成所有可能的本影不连续性网格区并且随后在实际上确定不连续网格的布置的后处理步骤中针对实际的从区看去的可见性对上述不连续性网格区进行检查。
在本方法的一种实施方式中,假设视单元是凸的。还假设多边形网格是三角形网格并且三角形网格是流形的(每个边精确地由两个三角形共享)。网格三角形与楔或UBP的相交部可以产生更加复杂的网格多边形。可以使用确立的多边形三角剖分将这些更加复杂的多边形转变成三角形。 (参见M.de Berg,M.van Dreveld et.al in“ComputationalGeometry Algorithms and Applications,Springer c.1997,page 45,其全部内容通过引用合并到本申请中)。三角形网格本表示为有向图。该方法除了适于三角形以外还适合多边形,但是使用三角形能够简化该遍历方法。这些假设简化了实施,但是放宽这些假设的其他实施也是可能的。
3D网格遍历处理的输出是由从视单元看去可见的网格多边形(和多边形分段)组成的保守可见性图。这些多边形分段连同入射在从视单元看去的轮廓边上的本影边界多边形(UBP)包括多面体聚合本影(PAU)的边界,其是从视单元看去被遮挡的空间体积,其中被遮挡的体积可能被保守地低估。可以将各个2-流形“融合”至来自较近流形的UBP与更远流形相交的其他2-流形中,从而实现遮挡融合。
在本3D网格遍历方法中,可以不必明确地构造与楔对应的UBP的情况下对该类型的遮挡物融合进行识别。在本方法中,仅必须确定对应于楔与三角形网格的相交部的不连续性网格分段是否从视单元看去被遮挡。如果是,则该不连续性网格分段是PAU分段,从而是从视单元看去的遮挡边界。相比明确地构造所有的UBP(其需要楔-楔相交部),该方法具有较低的计算成本。
如在后续图22、图23和图24中所示,将与高阶或“经调整的”楔对应的UBP的明确构造用于解释高阶可见性效果。
图19所示的处理控制如20所示的3D遍历的主处理的发起、重新发起和停止。这些处理与图14和图15所示并且在前面所讨论的对应的2D 遍历的控制和主处理类似。
根据一些实施方式,图19所示的处理开始于1905以在种子网格中选择种子三角形。选择“强可见”的网格和/或网格三角形(在网格/三角形和视单元形成的轴中没有其他三角形)加速了总体的遍历处理,但是也可以选择任意网格/三角形。
当选择了种子三角形时,处理流程行进至1915以发起3D网格遍历的主处理。在图20中详细示出了3D网格遍历的主处理的实施方式。总体上,图20所示的主3D网格遍历处理是通过图19所示的控制处理来发起的。此外,在一些实施方式中,3D遍历处理的主处理(图20所示)能够在网格特定三角形处被中止(步骤2030)。图19所示的处理确定在主 3D流形遍历处理中是否剩余任何中止的遍历(步骤1920)以及9D网格遍历的主处理是否应该在这些中止的分段上被重新发起(步骤1930及随后的步骤)。
如果在判决步骤1920中确定不存在已经中止3D网格遍历的主要部分的三角形,则处理流程行进至步骤1925,其中终止对于楔的3D网格遍历,从而完成3D从视单元看去的可见性图的构造。
如果在判决步骤1920中确定存在3D网格的已经中止主3D网格遍历的三角形(图20的步骤2030),则处理流程行进至判决步骤1930以确定在由中止三角形(TRI)和视单元形成的轴中是否存在任何三角形。
如果在判决步骤1930中确定在中止三角形与视单元之间的轴中没有三角形,则处理流程行进至步骤1960以对先前中止的分段重新发起2D 网格遍历。处理流程在1960处终止。
如果在判决步骤1930中确定在中止三角形与视单元之间的轴中有三角形,则处理流程行进至步骤1935以确定在中止三角形-视单元轴中是否有任何未遍历的三角形。
如果在判决步骤1935中确定在中止三角形-视单元轴中存在未遍历的三角形,则处理流程行进至步骤1440,其中在中止三角形-视单元轴中的较近的未遍历的三角形/分段上“跳转”或重新开始3D网格遍历。该步骤 (其也在图20所示的主3D遍历处理的步骤2030中出现)确保在遍历继续前以及做出停止遍历(因为中止的三角形从视单元看去完全被遮挡)的决定之前已经处理完所有潜在地遮挡的三角形。
如果在判决步骤1935中确定在SEG-VCE轴中不存在未遍历的三角形,则处理流程行进至步骤1945以确定当前(中止)三角形上的点是否位于任何多面体聚合本影(PAU)内,并且因此从视单元看去保守地被遮挡。在一些实施方式中,该测试采用图25所示的修改的多面体的点包容性测试。
该修改的多面体的点包容性测试使用一阶事件面(一阶楔),并且可选地,高阶本影边界多边形(UBP)。该测试允许对于多面体的点包容性问题的隐式解而不必构造整个多面体。结合图25给出该测试的细节。
如果在判决步骤1945中确定中止三角形上的点位于PAU内,则处理流程行进至步骤1950,其中对中止三角形重新发起遍历并且不再将该中止三角形标记为中止。处理流程在1950处终止。
如果在判决步骤1945中确定中止三角形没有位于任何PAU内,处理流程行进至步骤1960,其对中止三角形重新发起遍历。处理流程在1960 处终止。
如果没有网格三角形是可见性图(PAU)的连接组件的一部分,则整个网格被VM/PAU遮挡或不被VM/PAU遮挡。从而,在一些实施方式中,为了确定这种楔的所有多边形的可见性,使用它图19以及例如图25的方法来确定仅一个网格顶点的相对于具体的完成的VM/PAU或对应的连接组件的可见性。但是,如在本说明书中的别处所详细描述的,通过结合包含所有的模型几何图形的大的包围盒或封闭网格对象使用3D网格遍历方法,其中包围盒多边形可能被细分成较小的多边形,自然地避免了这些测试中的许多测试。
图20A是示出了使用3D网格遍历来构造保守线性化从视单元看去的可见性图的主处理的流程图。
线转向图20A,主3D网格遍历处理以图在初始步骤2005中示出的流形三角形或其他多边形网格的广度优先或洪水填充遍历开始。在图19 的流程图中示出的控制处理中选择开始整个处理的初始三角形。
在一种实施方式中,网格是每个边精确地由两个三角形共享的流形三角形网格。网格的其他定义也是可能的,包括不封闭的网格。网格三角形与楔或UBP的相交部可以产生更加复杂的网格多边形。可以使用确立的多边形三角剖分方法将这些更加复杂的多边形转变成三角形。将三角形网格表示成有向图。该方法除了适合三角形还适合网格多边形,但是使用三角形简化该遍历方法。图20A所示的方法采用每个边精确地由两个三角形共享的流形三角形网格。
在一些实施方式中,图20A所示的处理流程从2005开始,其中指出了网格三角形的遍历。遍历可以广度优先或洪水填充图遍历次序来行进。使用三角形网格的广度优先遍历,遍历从初始三角形向外扩展形成遍历三角形层。由非轮廓边连接的三角形可以说成属于相同的“遍历”。
其他遍历次序是可能的。选择用于发起一个或多个多边形网格的三角形不影响遍历的输出。但是,通过选择完全可见的并且靠近视单元的初始三角形,处理易于进行得更好。在保持有向图遍历的处理中,步骤2005 指示遍历限于网格中未遍历的三角形。
处理流程行进至判决步骤2010以确定在由当前三角形和视单元形成的3D轴(该轴被称为TRI-VC轴)内是否有任何未遍历的三角形。如果在该轴中有一个或多个未遍历的三角形,则处理流程继续至步骤2030,其中遍历立即跳转至较近的未遍历的三角形。在一种实施方式中,使用层次空间细分结构来组织网格多边形。这使得步骤2010的轴测试能够通过产生对于轴测试的LogN性能来迅速地识别先前遍历的网格多边形的大分组。
步骤2030有效地执行针对单个网格对象或针对多个网格对象的网格元素的严格的从前到后处理。将遍历跳转至较近的潜在地遮挡的三角形的处理能够产生由三角形的循环交叠引起的无尽循环。在Weiler-Atheron 可见性算法中也遇到这样的循环,并且能够通过维护交叠关系的有向图表示来检测并且消除这样的循环。在图13中提出了该方法并且结合该图对该方法进行了详细的讨论。
步骤2030确保源于当前三角形的三角形-视单元轴中的较近的未遍历的三角形上的事件面在当前三角形的遍历以前被识别并构造。这些事件面可以是从视单元看去的遮挡边界(其在步骤2045至步骤2068中针对这些较近的轮廓边被确定),其限制了当前三角形的遍历(步骤2035)。通过执行到较近的未遍历的三角形/轮廓边的跳转,步骤2010确保可以限制当前三角形的遍历的任何从视单元看去的遮挡边界在当前三角形的遍历之前被构造。处理流程在2030处被中止,在三角形-视单元轴中的较近的、未遍历的网格三角形处重新发起。
如果在TRI-VC轴中没有未遍历的三角形,则处理流程行进至判决步骤2015以确定正在遍历的当前三角形是否包含从视单元(“从-VC”)看去的遮挡边界。本影不连续性网格(DM)分段一般在网格三角形与楔的相交处形成多义线。每个DM分段是楔与三角形的相交部,其中分段从楔的支撑视单元元素(顶点或边)看去保守地可见。这被称为“关于楔”的可见相交部。因为关于楔的可见分段是使用从视单元看去的轮廓顶点 (而不是“从楔的支撑视单元元素看去的”轮廓顶点)来确定的(在图 15的2D网格遍历处理中),所以关于楔的可见分段保守地可见。因为分段实际上相对于楔的支撑视单元元素可能背面对而不是相对于视单元正面对(因此是从视单元看去可见),所以相对于楔的支撑视单元顶点实际上背面对的一些分段可以作为DM分段而被包括。
在随后的步骤2055中通过图15及有关的图所描述的2D网格遍历来对关于楔的可见相交部或不连续性网格分段进行识别。
DM_SEG包括保守的线性化本影不连续性网格的多义线。这些多义线可以或可以不是实际的从视单元(“从-VC”)看去的遮挡边界(将从视单元看去保守地可见的多边形分段和从视单元看去被遮挡的多边形分段分离的边界,其中本影体积的大小被保守地低估)。每个DM_SEG可以或可以不是从视单元看去的遮挡边界(OB_SEG)。OB_SEG是作为从视单元看去的多面体聚合本影(PAU)的面的从视单元看去的本影边界多边形(UBP)的实际边。
在步骤2015中遇到的从视单元看去的遮挡边界是在步骤2063中已经确定为从视单元看去的遮挡边界分段(OB_SEG)的不连续性网格(DM) 多义线段(DM_SEG)。随后提出步骤2063的细节。步骤2063确定哪些 DM多义线段是从视单元看去的遮挡边界并且该步骤实际上是在随后在步骤2015中会遇到从视单元看去的遮挡边界以前被执行的。
网格三角形与楔的“关于楔”的可见相交部表示本影不连续性网格的可以或可以不与从视单元看去的遮挡边界(OB)对应的分段。在步骤2063 (或不在步骤2063)中将每个DM多义线确定为从区看去的遮挡边界并且使用DM多义线来存储该结果。因为每个DM多义线在步骤2015中被遇到以前其是由步骤2063来处理的,所以步骤2015中的判决所需的信息被预先确定并且在步骤2063中被针对遇到的DM多义线段来存储。
如果在判决步骤2015中确定当前三角形不包括遮挡边界(OB)分段,则处理流程行进至步骤2035以在OB分段(OB SEG)处中断当前3D网格遍历。遍历可以穿过三角形的其他非OB分段来继续。处理在2035处被中断。在另外的实施方式中,处理流程行从2035行进至处理20-1,其将处理返回至步骤2025。然后,网格遍历能够穿过不是遮挡边界分段的其他网格三角形边行进。
如果在判决步骤2015中确定当前三角形不包含OB分段,则处理流程行进至步骤2020以确定当前三角形是否具有轮廓边。该确定基于图3 所示的针对一阶从视单元看去的轮廓边的测试。
如果在判决步骤2020中确定当前三角形不具有轮廓边,则处理流程行进至步骤2025,其中行进至与流形三角形网格对应的有向图的广度优先遍历中的下一个未遍历的三角形。
如果在判决步骤2020中确定正在处理的三角形包括轮廓边,则处理流程行进至步骤2045,其中与三角形网格对应的有向图的广度优先遍历在轮廓边处被停止并且使用楔构造的旋转和扫掠方法的一阶方法(图1 至图6)来构造入射在轮廓边上的一次楔。将所构造的一次楔添加到被称为“楔_列表”的列表中。一次楔是使用旋转和扫掠方法在所遇到的一阶轮廓边上构造的那些楔。在初始构造时,在一些实施方式中,所有的楔是还没有通过关于楔的可见性步骤来进一步限制的初始楔。步骤2045中的初始的一次楔构造对应于在图12的输出敏感方法的步骤1210中示出的初始的一次楔构造。
以下替代实施方式是可能的:没有使用本实施方式的旋转和扫掠方法来构造一阶楔(在步骤2045和随后的步骤2060中构造的)而是替代地使用将SV-ME楔平面延伸至相交处的不太精确的方法来构造一些楔(如 Teller等人在1992年描述的,其中仅在入口序列边上生成这样的平面)。本实施方式包括以下技术:可以在内侧拐角顶点处对由旋转和扫掠方法以及相交平面方法产生的本影体积的差进行估计。在该技术中(在图20B 中对其进行了详细描述),基于对所期望的精度与由附加的SE-MV遮挡边界分段所产生的结果的可见性图的增加了的复杂度进行平衡的启发法来选择用于构造入射在内侧拐角顶点上的连续的保守本影事件面的方法。
处理流程从步骤2045行进至步骤2050,其中选择“楔_列表”中的楔并且提交至后续的处理步骤2055至2068。
处理流程行进至步骤2055,其是对“楔_列表”中的楔进行处理的第一步骤,其中对与楔相交的网格三角形的关于楔的可见分段进行确定。
在图15中提出了该关于楔的可见性问题的有效的输出敏感2D网格遍历解决方案。图15的方法实际上是在当前图20中示出的方法的2D实施,在一些实施方式中,将关于楔的可见分段存储为不连续网格分段 (DM_SEG)。该关于楔的可见性确定方法还识别后续步骤2060所需的复合轮廓顶点(CSV)。
处理流程从步骤2055行进至步骤2060以在早先的步骤2055期间在每个楔上识别的CSV处构造二次楔。CSV是在步骤2055期间在楔与一阶从视单元看去的轮廓边的关于楔的可见相交部处(如在早先的步骤 2055中识别的)生成CSV。每个CSV是楔与一阶轮廓边的关于楔的可见相交部。这些点与复合的从区看去的轮廓周线的t接头对应。
在步骤2060中,根据一些实施方式,在所识别的每一个CSV上构造 SE-MV楔。源于CSV上的这些楔被称为二次楔。这些楔使用楔构造的旋转和扫掠方法的扫掠操作来构造的。在该步骤中生成的所有这些楔都是在扫掠处理中生成的SE-MV类型。该扫掠在相交与CSV处的原始楔的SVV 之间进行。由扫掠处理构造的楔成连续的保守本影面,其连接相交于CSV处的原始楔。在替代的实施方式中,可以延伸两个原始边以使其相交来形成不太精确但仍然保守的本影边界。
如前面所限定的,每个CSV对应于楔与被支撑在相交的轮廓边上的另一个楔的相交部。这些楔在CSV点处相交。
如果相交在CSV处的两个SV-ME楔旋转至相同的视单元顶点,则两个楔精确地在它们的边处相交并且不构造新的SE-MV楔。
如果相交在CSV处的两个楔是通过旋转至相同的视单元区的两个顶点来形成,则CSV上的扫掠和旋转构造的结果是单个SE-MV楔。在这种情况下,如果相交在CSV处的两个原始楔是SV-ME类型,则构造在 CSV处连接SE-MV楔保守地近似由视单元边(连接两个支撑视单元顶点) 和与CSV的相交楔对应的两个SV-ME轮廓边形成的二次曲面。在这情况下构造CSV上的单个SE-MV楔保守地近似由S-EEE事件形成的对应的二次曲面。实际上,所构造的SE-MV三角形可以被解释为具有无线节距的退化的二次曲面。
如果相交在CSV处的两个楔是通过旋转至属于不同视单元边的顶点来形成,则CSV上的旋转和扫掠构造的结果是边连接的SE-MV楔序列。在这种情况下,如果相交在CSV处的两个原始楔是SV-ME类型,则构造CSV上的连接SE-MV楔的集合保守地近似由于连接的视单元边和与 CSV的相交SV-ME楔对应的两个其他轮廓边形成的二次曲面。再一次,可以将每个SE-MV楔认为是对应的具有无限节距的退化的二次曲面。
还可以在与SE-MV楔与从视单元看去的轮廓边的相交部对应的CSV 处生成二次楔。
将在步骤2060中构造的所有二次楔(入射在CSV上的那些楔)添加至WEDGE_LIST,其意味着它们会最终由步骤2055来处理以找到关于楔的可见分段。
处理流程从步骤2060行进至判决步骤2063以确定DM_SEG从对应的视单元的处了支撑包含DM_SEG的楔的支撑视单元结构(顶点或边) 以外的所有其他“部分”看去是否被遮挡。在图21中公开了该测试的实施方式。简要地,该测试涉及将DM_SEG与已经构造的所有潜在地相交的楔相交并且然后通过修改的多面体的点包容性测试来确定结果的子分段是否位于从视单元看去的PAU内。
如果DM_SEG从视单元看去的所有其他部分以别的方式被遮挡(除了支撑DM_SEG的楔的SVV以外),则DM_SEG是与从视单元看去的PAU的边对应的实际的从视单元看去的遮挡边界(OB)。
因此,如果在判决步骤2063中确定DM_SEG是从视单元看去以别的方式被遮挡(使用图21的处理),则处理流程行进至2068,其中将 DM_SEG作为OB_SEG添加至相交的三角形。
另一方面,如果DM_SEG不是从视单元看去的所有其他部分以别的方式被遮挡,则DM_SEG不是实际的从视单元看去的遮挡边界(OB)并且处理流程行进至步骤2070以确定在“楔_列表”中是否剩余任何的未处理的楔。如果在判决步骤2070中确定在楔列表中剩余未处理的楔,则处理流程返回至步骤2050。
另一方面,如果在步骤2070中确定在“楔_列表”中没有剩余未处理的楔,则处理流程行进至步骤2080以确定在当前“遍历”(通过非轮廓边连接至当前三角形的三角形集合)中是否存在任何未处理的三角形。如果在判决步骤2080中确定在遍历(通过非轮廓边连接至当前三角形的三角形集合)中存在未遍历的三角形,则处理流程行进至步骤2050,其中对下一个未遍历的三角形进行处理。
如果在判决步骤2080中确定在遍历中不存在未处理的三角形,则处理流程行进至步骤2083,其中对与在当前遍历中生成的OB分段相交的那些三角形进行识别并且使用相交的OB分段对那些三角形进行重新三角化。该步骤能够有效地限制随后在步骤2015中遇到的遮挡边界处的3D 网格遍历,从而将遍历限制到非被遮挡的区,进一步加强了本方法的输出敏感特征。
处理流程行进至步骤2085以在由遍历生成的OB分段的未被遮挡侧上继续3D网格遍历。处理流程在2085处终止。因为来自一个2-流形的楔可以在不同的(不连接的)2-流形上产生OB点,所以这表示在通过 OB段处的楔线由两个流形的“遮挡物融合”形成的新连接的流形(PAU 的一部分)上的遍历的继续。
如前所述,在本方法的一种实施方式中,三角形网格对象的整个集合由封闭的网格对象包含。该封闭的网格对象类似与通常用于环绕针对交互性可视化应用的网格对象的“天空盒”。3D中的本网格遍历方法将封闭的天空盒视为除了位于封闭网格对象内的视单元以外的任何其他的三角形网格流形。图20K示出了这样的标记为“天空盒”的封闭的网格对象,其包括其他的多边形网格。标记为“法线”的箭头表示:不同于其他多边形网格,封闭网格具有被定向成它们的法线局部地指向该网格的内部的所有网格多边形。结合图20K对图20K的其他细节进行了详细的讨论。
该方法确保遍历继续整个数据库的全向遍历,即使当其他网格对象没有出现在数据库中。该封闭网格的使用有助于使得当前方法为输出敏感。即,因为仅处理所遇到的未被遮挡的网格,所以不需要对数据库中的每个网格进行处理。此外,本方法可以自然地识别天空盒自身的未被遮挡的区,由于天空盒的大小和位置,其通常或是明显透支的源。
总之,图19、图20及有关的图21所概述的方法的总体结构是连贯的广度优先流形遍历结构,其通常由以下三个条件之一中断:1)未遍历的潜在地遮挡的网格三角形(步骤2010),2)在三角形中存在从视单元看去的遮挡边界(步骤2015),或3)在三角形上存在一阶轮廓边(步骤 2020)。
步骤2010确保严格的从前到后的流形处理。步骤2015与步骤2085 一起防止遍历在网格的实际上被遮挡的区上进行。同时,这些步骤通过预防许多被遮挡的网格边及它们的正在被处理的轮廓边来产生输出敏感性能。
步骤2020识别可见的轮廓边并且开始以下处理:生成一次楔和相关联的二次楔(在CSV处)以及确立这些楔与网格三角形之间的相交部的关于楔的可见分段。这些可见分段变成保守的一阶本影不连续性网格分段,后续将对其进行测试(步骤2063,在图21中示出了该测试的细节) 以确定它们是否与包括在可见性图中的从视单元看去的遮挡边界对应。
2D网格遍历方法与3D网格遍历方法之间的相似性在当与图14至图 19、图15至图20、和图16至图21比较时是明显的。在表VII(3D遍历方面)、表VIIIa(2D遍历方面)和表VIIIb(1D遍历或射线投射方面) 中还详述了这些相似性。
比较3D网格遍历方面、2D网格遍历方面和1D网格遍历(射线投射) 方面
表VII
用于从视单元看去的网格遍历、保守的点遮挡(从视单元看去)查询和从轮廓边看去的背投影的3D网格遍历方法的方面
表VIII
用在关于楔的可见性、保守的点遮挡(从边看去)的查询和从轮廓顶点看去的背投影的2D 网格遍历方法的方面
表VIIIb
1D网格遍历(射线投射)的方面
图20B示出使用在内侧拐角顶点处估计的由旋转和扫掠方法及相交平面法产生的本影体积的差的估计值的方法,该差用于确定在内侧拐角顶点处构造连续的本影事件面的方法。
根据一些实施方式,当遇到简单的内侧拐角轮廓顶点或复合轮廓顶点 (CSV)时,图20B所示的处理从步骤2087开始。在实施方式中,这发生在图20的步骤2020和2055处。
处理流程行进至步骤2089以通过使与轮廓顶点相邻的SV-ME楔的平面相交来构造线。还是在步骤2089中,构造SE-MV楔的入射在内侧拐角轮廓顶点上的边并且确定与相交平面形成最小角度的SE-MV边。在一个示例中,图9D所示,该角度是由线L1(相交平面的线)和线L2产生的角度,线L2是对应的SE-MV楔的边。该角度是根据这两条线在顶点ICSV处的相交部来测量的。将该最小角度存储在变量“DIFF_角度”。
处理流程行进至判决步骤2090以确定角度“DIFF_角度”是否超过预定值。
如果在判决步骤2090中确定“DIFF_角度”大于预定值,则处理流程行进至步骤2092以构造入射在内侧拐角简单或复合轮廓顶点上的 SE-MV事件面。处理流程在2092处终止。
如果在判决步骤2090中确定“DIFF_角度”不大于预定值,则处理流程行进至步骤2094,其中通过使相邻SV-ME楔的平面相交来构造入射在内侧拐角简单或复合轮廓顶点上的连续的保守的本影事件面。处理流程在2094处终止。
图20C至图20J是多边形网格和视单元的图。这些图用于说明在图 20及有关图的流程图中示出的3D网格遍历处理的一种实施方式的示例。
图20C至图20J是示出了从两个不同的视角来看的两个多边形网格和视单元的图。在每张图的上部图(图20C、图20E、图20G、图20I) 中,沿着从多边形网格朝着视单元来观察上述结构。在底部图(图20D、图20F、图20H、图20J)中,透视图总体上是从视单元朝着多边形网格来看的。
图20A的处理假设选择初始三角形来开始3D网格遍历。图20C和图20D示出了将标记为TB1的三角形选择为开始三角形的示例。TB1是标记为“网格B”的多边形网格的网格多边形。在该示例中,实施方式采用广度优先遍历,尽管也可以采用其他遍历次序。
图20A的判决步骤确定在由当前三角形和视单元形成的3D轴内是否有任何未遍历的三角形。图20E和图20F示出了形成在三角形TB1与视单元之间的3D轴。该三角形-视单元轴由八个三角形形成。在一些实施方式中,该轴是三角形与视单元之间的凸包。可以采用现有技术的凸包构造方法来构造三角形与视单元之间的轴,或任何其他凸视区。(参见 O’Rourke,Computational Geometry in C Second edition Cambridge University Press1998,其全部内容通过引用合并到本申请中)。在一种实施方式中,结合图1至图5及有关的图描述的旋转和扫掠方法适于通过附加地构造还位于网格的外侧拐角上的SE-MV支撑多边形来构造该轴。
图20E和图20F示出了轴TRI-VC-1与包括属于“网格A”的三角形TA1的其他网格三角形相交。在该示例中,处理流程行进至图20A的步骤2030。
在该示例中,“网格B”的遍历在步骤2030中中止并且在与轴 TRI-VC-1相交的三角形TA-1处重新发起网格遍历。
在三角形TA1处重新发起广度优先遍历之后,处理流程行进至步骤2005,遇到未遍历三角形。
处理流程行进至判决步骤2010,其中在该示例中对形成在三角形TA1 和视单元之间的轴中的任何未处理的网格三角形进行检测。在该示例中,三角形TA1与视单元之间的轴为空,使得处理流程行进至判决步骤2015。
在该示例中判决步骤2015确定三角形TA1是否包含任何从视单元看去的遮挡边界。因为三角形TA1不包括从视单元看去的遮挡边界,所以处理流程行进至步骤2020以确定三角形TA1是否具有任何一阶从视单元看去的轮廓边。
在该示例中,因为三角形TA1不具有任何一阶轮廓边,所以处理流程行进至步骤2025以识别多边形网格中的下一个未遍历的三角形。
在该示例中,在步骤2025中从三角形TA1行进的广度优先遍历遇到边连接的三角形TA2。步骤2010中针对三角形TA2所确定的可以表示在 TA2与视单元之间的三角形-视单元轴中没有网格多边形。
在该示例中,步骤2015表示不存在入射在三角形TA2上的遮挡边界边,使得处理流程行进至步骤2020,其中确定三角形TA2具有标记为E2 的一阶轮廓边。
处理流程行进至图20A中的步骤2045。在该示例中,步骤2045的执行导致边E2上的楔构造。在步骤2045中构造的位于一阶轮廓边E2上的一阶旋转(SV-ME)楔在图20G和图20H中被标记为W2。楔W2是在步骤2045中使用用于构造如在图4及有关图中所描述的旋转楔的方法来构造的旋转(SV-ME)楔。用于构造W2的支撑视单元顶点在该示例中是标记为SVV的视单元顶点。
在导致步骤2055中楔W2的处理的该示例中,处理流程行进到图20A 中的步骤2050。在步骤2055中,确定楔上的可见分段。在一种实施方式中,该确定使用如在图15及有关的图中描述的网格遍历方法的2D版本。在该示例中,针对楔W2的楔上的相对于点(在该示例中相对于SVV) 的可见分段确定的结果是标记为OBE1的不连续性网格分段(DM_SEG)。在该示例中,OBE1是楔W2的从SVV可见的唯一相交部。
在该示例中确定了DM-SEG OBE1后,处理流程行进至步骤2060,步骤2060在该示例中是确定一次楔W2没有与任何一阶轮廓边交叉。因此在该示例中,没有复合轮廓顶点(CSV)产生并且不需要构造二次楔。
在该示例中,处理流程行进至判决步骤2063以确定DM_SEG OBE1 从视单元看去是否以别的方式可见。该测试确定DM-SEG OBE1是否为实际的从视单元看去的遮挡边界分段。在一种实施方式中,该测试利用图 21A及有关的图的处理,该处理包括构造DM-SEG之间的3D轴和确定在该轴中是否存在任何未遍历的网格多边形,如在步骤2110中所表示的。在该示例中,OBE1与视单元之间的3D轴被示出为标记轴SEG-VC-1。在一种实施方式中,接着流程图图24A、图24B的处理流程;在OBE1 的示例中,处理不会识别轴SEG-VC-1中的任何其他楔,其会潜在地分割 OBE1。此外,在该示例中,使用DM_SEG OBE1上的点来进行修改了的图25的多面体中的点测试;在该示例中,会确定DM_SEG OBE1实际上是从视单元看去的遮挡边界分段,也因此会被添加到多边形“多边形3”,将图20C和图20D所示的初始的多边形“多边形3”(在该情况下为四边形)再划分成多边形“多边形3R”。
继续由图20A的实施方式所进行的处理,将遍历“网格A”的所有可见的三角形,在该情况下,“网格A”的已遍历的网格三角形的集合对应于相对于至少一个视单元顶点正面对的所有网格三角形。最终,广度优先遍历在“网格A”的包括E2的第一侧影轮廓处中止,其引起“网格B”上的遮挡边界OBE1。在该示例中,一阶轮廓边E3(在图20I和图20J 中示出)同样引起“网格B”上的遮挡边界边OBE2(在图20J中示出) 和OBE3(在图20I和图20J中示出)。
这些遮挡边界边包括连续的遮挡边界,其随后在遮挡边界边OBE2 和遮挡边界OBE3处限制对“网格B”多边形3(其在OBE1处已经被再划分)以及“网格B”的其他多边形的遍历。在重新三角化步骤2083 之后,网格遍历在“网格B”上继续,并且仅在该遮挡边界的未遮挡侧上继续,如步骤2085所表示的。
图20K是示出了与在图20C至图20J中的视单元和多边形网格“网格A”和“网格B”相同的视单元和多边形网格“网格A”和“网格B”的透视图。此外,图20K示出了标记为“天空盒”的封闭多边形网格。在该透视图中没有示出相对于视点背面对的包围网格的多边形以使得观察者能够看见标记为“天空盒”的包围网格的内部。标记为“法线”的箭头表示:不同于其他多边形网格,包围网格具有定向成使得它们的法线被局部地指向网格的内部的所有网格多边形。没有与其他多边形网格交叉的楔最后会与封闭网格交叉。与任何其他楔-网格交叉点一样,利用对楔-网格交叉点是否是视区的遮挡边界(步骤2063)的确定,按照根据图20A的示例性流程图来对楔-封闭网格交叉点进行处理,并且最终在遮挡边界的未遮挡侧上出现网格遍历(步骤2063),在这里标记为“天空盒”的封闭网格的面向内部的一侧上出现遍历。
图21A和图21B是用于确定不连续性网格分段从视单元看去是否被遮挡(即,不连续性网格分段是否从区看去的遮挡边界)的方法的流程图。
在图20中示出的主要的3D网格遍历处理中,步骤2063是确定从视单元的其他“部分”来看2DDM_SEG是否被遮挡的判决测试。图21示出了该测试的一种实施方式。
在一些实施方式中,如果除了用于构造与DM分段对应的楔的支撑视单元元素以外从DM分段来看没有视单元的部分是可见的,则不连续性网格(DM)分段是从视单元看去的遮挡边界。在本方法中,该测试能够组织为使用DM分段作为线光源并且确定视单元的可见性的背投影型可见性查询。
在图21中示出了该测试。
根据一些实施方式,图21所示的处理起始于判决步骤2110处,在其中,使用了测试的DM_SEG之间的3D轴和视单元(“DM_SEG-视单元”轴)。
如果在判决步骤2110中确定在DM_SEG-VC轴中存在未遍历的三角形,则处理流程行进到步骤2115处以中止处理,并且3D网格遍历处理的主要部分跳转至DM_SEG-VC轴中较近的未遍历三角形。该跳转确保了:在进行实际上确定DM_SEG是否为从视单元看去的遮挡边界(OB) 的背投测试之前,对作为从视单元看去的遮挡边界的能够影响DM-SEG 状态的所有潜在的遮挡几何形状进行识别和处理。处理流程在步骤2115 处终止。
如果在判决步骤2110中确定在DM_SEG-VC轴中没有未遍历的三角形存在,则处理流程行进至步骤2120,其中DM_SEG与DM_SEG-VC 轴中的其他楔交叉。该交叉点可以将初始的DM_SEG分成多个 DM_SUBSEG,其中每个都具有统一的从视单元看去的可见性。
处理流程行进至判决步骤2125以确定当前DM_SEG或 DM_SUBSEG是否与已经确定了从视单元看去的可见性状态(被遮蔽或未被遮蔽)的DM_SEG或DM_SUBSEG直接相连。
如果在判决步骤2125中确定当前DM_SEG或DM_SUBSEG直接与已经明确地确定了从视单元看去的遮挡状态的DM_SEG或DM_SUBSEG相连,则处理流程行进至步骤2130,其中当前DM_SEG 或DM_SUBSEG的遮挡状态被设置成与具有已知的从视单元看去的可见性状态并且直接与当前的DM_SEG或DM_SUBSEG相连的DM_SEG或 DM_SUBSEG的状态相同,并且将该状态返回至调用函数。处理流程在步骤2130处终止。
如果在判决步骤2125中确定当前DM_SEG或DM_SUBSEG没有直接与具有已知的从视单元看去的可见性状态的DM_SEG或 DM_SUBSEG相连,则处理流程行进至步骤2135以选择DM_SUBSEG 上的点。
处理流程行进至步骤2140,在步骤2135中选择的点与视单元之间形成轴并且处理行进至步骤2145,其中对在DM_SEG-VC轴中的所有的楔进行标识并且将其放置在列表“楔列表”以用于随后的处理。这些楔是在图20中的步骤2045和步骤2060中生成的楔,主3D网格遍历处理生成了正投影的一阶楔。
处理流程行进至步骤2148,其中“楔列表”中的每个楔由后续步骤来处理。
处理行进至步骤2150,其中对于“楔列表”中的每个楔,确定该楔是否是一阶楔或高阶楔。图20的主3D网格遍历处理使用步骤2045和步骤2060处的楔的旋转和扫掠构造来生成一阶楔。可选地,可以使用在本说明书随后的部分结合图22、图23和图24所详细描述的反向投影处理来构造高阶楔。根据一些实施方式,楔的阶是根据用于构造该楔的处理来确定的。例如,使用反向投影处理构造的楔是高阶楔,而不是使用反向投影处理构造的楔是一阶楔。如果在判决步骤2150中确定该楔是高阶楔,则处理流程行进至步骤2155。
另一方面,如果在判决步骤2150中确定该楔不是高阶楔,则处理流程直接行进至步骤2158。
在步骤2155处,通过使高阶楔与位于楔-视单元(“楔-VC”)轴和点 -视单元轴两者中的所有其他楔和UBP相交,来构造实际的从视单元看去的与高阶楔对应的本影边界多边形(UBP)。对于在步骤2150中标识的高阶楔,该处理有效地构造对应的UBP的位于点-视单元轴内部的部分。在一些实施方式中,可以通过使对应的楔与在楔与视单元之间形成的轴中的所有其他的楔/UBP相交来根据该对应的楔构造UBP。在步骤2155之后,处理流程行进至步骤判决步骤2158以确定“楔列表”是否为空。如果“楔列表”为空,则处理流程返回至对“楔列表”中的下一个楔进行后续处理的步骤2148。
如果在判决步骤2150中确定楔是一阶楔,则处理流程直接行进至如上所述的步骤判决步骤2158。
如果在判决步骤2158中确定“楔列表”为空,则处理流程行进至步骤2160,其中对在步骤2135中选择的DM_SUBSEG点进行修改的多面体中的点测试以确定其是否从视单元看去被遮蔽。
在图25中示出了给修改的多面体的点包容性测试的实施方式并且结合该图对其进行了详细描述。简要地,该修改的多面体的点包容性测试确定该测试点是否位于从视单元看去的PAU的内部。在点位于视单元面上的情况下,该测试与传统的多面体的点包容性测试在选择已知位于PAU 外部的第二点方面有些相似。在该测试点与该外部点之间构造有线段并且该线与多面体的多边形相交。该线的子分段的状态(该多边形内部或外部) 将基于与网格多边形分段和包括PAU的UBP的相交部来变化。在一阶楔的情况下,在一阶楔不必与其他楔相交以形成的对应的UBP(因为这些一阶楔在它们的未遮挡侧不能够与其他楔相交)。此外,因为只有位于测试点视单元轴内的这些PAU面才可以与测试线段相交,所以不必构造整个PAU来完成测试。
接着步骤2160,处理流程行进至处理21-1,其开始于步骤2165处(图 21B)。
在判决步骤2165中,对修改的多面体的点包容性测试(步骤2160) 的结果进行检查。
如果在判决步骤2165中确定测试点被遮蔽,则处理流程行进至步骤 2175,其中总体处理返回测试的DM_SEG被遮挡的结果。将该结果返回至图20中的步骤2063中。
如果在判决步骤2165中确定测试点没有被遮蔽,则处理流程行进至步骤2170,其中总体处理返回测试的DM_SEG没有被遮挡的结果。将该结果返回至图20中的步骤2063。处理流程在步骤2170和步骤2175处终止。
图19、图20和图21的方法构造保守的一阶从视单元看去的可见性图。该方法利用了在一阶轮廓边上入射的保守的线性化本影事件面 (CLUES),并且确定对应的不连续性网格分段实际上是否为从视单元看去的遮挡边界(PAU的分段)。
在该方法中,根据一些实施方式,本影DM边界的连接结构用于明显地加快确定DM边界是否为从视单元看去的遮挡边界(对应的VM的边)。结构(例如,DM多义线)的可见性状态(从视单元看去被遮挡或没有被遮挡)可以仅当该结构与可见性事件面相交时才改变。对于DM多义线,这仅发生在该DM多义线与另一个DM多义线相交的情况下。在这些相交之间,DM多义线的可见性状态不改变。从而,为了确定DM多义线的在相交部之间的多个分段的可见性状态,只需要确定一个分段的状态。对于DM多义线的相交部之间的相邻分段,仅生成潜在地遮挡/暴露的事件面。这是通过在每个DM多义线段与视单元之间的轴以确定在该轴中是否存在有任何未处理的潜在地遮挡的几何图形来保证的。与本实施方式中的所有轴测试一样,几何图形的数据库的简单的层次空间组织能够确保O(nLogn)性能。
总体上,保守的线性化本影可见性图的输出敏感构造采用以下方法:其使用了从多边形网格2维流形(体现在3D中)到流形的突变轮廓周线和遮挡边界的遍历。该遍历有效地级联完流至以实现输出敏感可见性级联的方式与可见性事件面(楔/UBP)相交的其他的流形上的轮廓周线。
图21C示出了按照强可见、非遮挡或始终正面对来对PVS多边形进行分类。
根据一些实施方式,PVS由保守的可见性图的可见多边形分段组成,该保守的可见性图是通过图20及相关图的3D遍历方法和图26的使用 UBP的替代实施方式来生成的。替代地,从图12的本影不连续网格方法来导出PVS。
不管使用实施方式中的哪一个,使用本方法的对象空间的从视单元看去的可见性来生成的PVS多边形分段都是基于它们与视单元的可见性关系来方便地分类的。
在一些实施方式中,图21中示出的处理开始于判决步骤2180以确定可见性图的多边形是否从视单元看去为强可见。在一些实施方式中,将从视单元看去为强可见的多边形定义为以下多边形:在该多边形与视单元之间的3D轴没有包含其他的多边形。在一些实施方式中,该确定是在对于每个多边形分段的可见性图构造处理(图20)期间做出的。从而,如果如在步骤2183中所示进行标识,在构造VM期间可以将强可见标识(步骤2180)和标记为“没有z比较”。如果三角形不是强可见,则处理流程行进至步骤2184,其中没有标记三角形。
因为只要视点位于构造VM/PVS的视单元中任何被如此标记的多边形就不会被任何其他的多边形遮挡,所以随后可以对任何被如此标记的多边形进行渲染,而不需要在对于该多边形的Z缓冲区中计算z比较操作。
在后续的判决/分类步骤2185中,确定VM中的该多边形是否位于 VM中的任何其他多边形的多边形-视单元轴中的。如果当前的多边形没有位于VM中的任何其他多边形的多边形-视单元轴中,则处理行进至将多边形标记为“没有z写入”的步骤2187。否则,处理流程行进至没有标记三角形的步骤2186。
没有位于VM中的任何其他多边形的多边形-视单元轴中的多边形不能遮挡VM/PVS中的任何多边形,所以在没有z比较或z写入的情况下对该多边形进行渲染,这能够明显地减小渲染该多边形的成本。
最终,可以通过确定多边形的平面是否与视单元相交的判决/分类步骤2190将VM/PVS中的每个多边形分类。如果在判决步骤2190中确定该多边形的平面没有与视单元相交,则处理行进至将VM/PVS多边形标记为“无背面剔除”的步骤2190。
这些多边形从用于构造VM/PVS的视单元中的任何视点看去都不能是背面的。从而,在对PVS中具有该标记的多边形进行渲染期间不需要背面剔除,从而减小了渲染多边形的成本。如果步骤2190的测试确定三角形的平面与视单元相交,则处理行进至步骤2190并且不标记该三角形。
图22是示出了用于3D网格遍历方法的控制处理的流程图,该3D网格遍历用于构造反向投影的、从轮廓边看去的可见性图,该图用于确定从轮廓边看去的可见支撑视单元顶点(VSVV)和可见支撑视单元轮廓周线 (VSVSC)。
图19、图20和图21的前述方法仅使用在一阶从视单元看去的轮廓边上入射的一阶、保守的、线性化本影事件面(CLUES)。
在图22、图23和图24的方法中,一阶CLUES被“调整”为更加准确地反映高阶的从视单元看去的可见性相交部。
在一些实施方式中,本方法使用了聚焦的保守性背投影方法以标识在其上构造高阶楔的保守性(从轮廓边看去)可见支撑视单元顶点(VSVV)。在一些实施方式中,楔的该“调整”仅应用在以下情况:用在初始正向投影的一阶楔的构造中的支撑视单元顶点(SVV)被所支撑的轮廓边遮挡。否则一阶事件面(楔)是精确的。
一般地,仅将该调整应用于一阶楔的不精确的那些部分。一阶SV-ME 楔的不精确的那些部分与所支撑的轮廓边被支撑视单元顶点(SVV)遮挡的那些部分对应。通过检查形成在该楔的轮廓边与SVV之间的支撑三角形容易地确定这些部分。
类似地,一阶SE-MV楔的不精确部分对应于楔的这些部分:支撑视单元轮廓周线(SVSC)从所支撑的网格轮廓顶点看去被遮挡。还通过对楔的网格轮廓顶点与SVSC分段之间的支撑扫掠三角形进行检查来确定该部分。
一般地,在图22、图23和图24的本方法中,通过将楔的所支撑轮廓边用作光源的背投影方法来确定对一阶SV-ME楔的调整,并且应用从区看去的3D网格遍历可见性级联方法来构造视单元面上的保守的从边看去的可见性图。该可见性图可以包括(从边看去的)可见支撑视单元顶点 (VSVV),使用VSSVV替代SVV来支撑对应的高阶楔。视单元面上的每个从边看去的背投影可见性图可以具有对应的可见支撑视单元轮廓周线(VSVSC)。
同样地,在一阶可见性中,可以经由通过延伸视单元支撑视单元周线 (SVC)所支撑的扫掠支撑三角形来形成的SE-MV楔连接相邻的SV-ME 楔。为了“调整”入射在网格轮廓顶点上的一阶SE-MV楔,还通过背投影来确定可见支撑视单元轮廓周线(VSVSC):构造从轮廓边看去的关于视单元的可见性图。该背投影法使用共享作为光源的网格轮廓顶点的轮廓边。如在本说明书的后续部分所详述的,连接两个相邻的高阶或“经调整的”SV-ME楔的高阶SE-MV楔的构造取决于与SV-ME楔对应的两个 VSVCS的关系,如在背投影处理中所确定的。
因此,图22、图23和图24的从边看去的背投影法的目的是构造从轮廓边看去的关于视单元的可见性图,根据其推导对应的高阶楔。在一些实施方式中,该保守的可见性图是使用结合图19、图20和图21已经讨论的可见性级联的3D网格遍历方法的变型来构造的。尽管图19、图20 和图21的方法使用视单元作为可见性源,图22、图23和图24的方法使用具体的一阶轮廓边(或边的分段)作为“源”或视区来解决可见性问题。因为这两者是从区看去的可见性问题,所以在对应的处理(和对应的图) 之间存在明显的相似性。
从视单元看去的正投影可见性解决方案与从边看去的背投影可见性方法之间的重要差别是:虽然正投影方法必须解决所有的从视单元看去的可见性,但是背投影法仅确定潜在地影视单元的从边看去的可见性的从轮廓边看去的可见性。因此,从轮廓边看去的背投影问题被限制于形成在轮廓边与视单元之间的轴。
对于背投影的3D网格遍历:仅采用正投影-未被遮挡三角形的方法
在该方法的一种实施中,在背投影中仅使用在正投影(从视单元看去的)中可见的那些三角形/分段。在该方法中,在正投影中可见的三角形相对于背投影计算反转它们的面取向。通常,正投影轮廓边和背投影轮廓边(当从作为针对背投影的“源”点的网格轮廓边看去)是相同的边。在这种情况下,实际上在应用取向反转之前不存在面向背投影源边(一阶轮廓边)的正投影-未被遮挡的三角形。
在其他情况下,不是所有的正投影可见网格元素可以相对于重投影源边背面对。在这些情况下,如果三角形的取向被反转,则其会变为相对于背投影源边背面对。这会使得其相对于对源背面对,从而使用具有不一致取向的三角形来创建网格。在这种情况下,将会发展相对于背投影点的背面对取向的三角形从网格移除。
在背投影中未能包括潜在地遮挡的几何图形可以减小所计算的 VSVV和楔的有关调整的精度。但是仍然确保保守的结果,这是因为任何潜在地遮挡的几何图形的消除仅会使得所计算的VSVV是SVV的更加保守的估计。此外,通过仅采用背投影-可见的三角形,明显地减少了背投影处理的成本,这是因为在针对特定的网格轮廓边发起背投影处理的时候已经确定了相关的正投影-可见的三角形。
在该方法中,正投影可见的网格元素实际上用作计算背投影的虚拟遮挡物。
因此,在步骤2205中选择种子3D网格,该选择是从在正投影中可见的(未被遮挡的)网格集合中做出的。
针对背投影的3D网格遍历:高阶可见性下的轮廓边的回缩
在本方法的一种实施方式中,仅根据作为正投影(当从视单元观察时) 中的一阶轮廓顶点的那些背投影源(在这种情况下是网格轮廓边)来确定背投影。在该实施中,通过背投影仅对附接至一阶正投影轮廓顶点的那些楔进行“调整”以反映高阶关于平面的可见性。经调整的楔保持附接至原始网格轮廓边。
实际上,当从VSVV来观察作为一阶正投影轮廓边(当从SVV来观察)的任何边,由于共享该边的两个三角形相对于VSVV背面对,所以该边不再是轮廓边。在这样的情况下,正投影轮廓边(背投影源)实际上从视单元看去被遮挡。在这种情况下,实际的(精确的)从区看去的本影事件面不是由该正投影轮廓边来支撑而是由位于相同的2-流形上距视单元较近的边来支撑。一阶的从视单元轮廓边看去的朝着视单元的该迁移或“回缩”是如由背投影确定的高阶可见性的潜在效果。未能解释该轮廓迁移在一些情况下可能减小所计算的VSVV和楔的对应调整的精度。但是,因为附接至正投影一阶轮廓边的经调整的可见性事件面(在该情况下是楔)总是会产生相比附接至回缩轮廓的对应事件面更加保守的本影事件面。
通过保持附接至其原始的一阶正投影轮廓边的经调整的楔,经调整的楔的位于轮廓边与VSVV之间的“支撑分段”能够通过穿透网格面来潜在地违反其所在的网格的“局部可见性”。在这样的情况下,精确地,轮廓边会倾向与朝着视单元迁移使得网格的较近的连接的边产生不违反局部可见性的经调整的楔,并且这样的调整楔变成“精确的”轮廓边。
为了保持附接至其原始一阶正投影轮廓边的保守的调整楔,将背投影处理设计成通过调整楔来防止违反局部可见性。这发生在以下情况:调整楔源于正投影一阶轮廓边上使得楔位于网格三角形2-流形的内部。这是能够通过对与正投影轮廓边形成连接的组件的所有网格元素(在该情况下是三角形)来防止的2-流形自遮挡类型,其中所连接的组件完全位于视单元与边之间的轴内。在一些实施方式中,可以使用开始于边并且当三角形与轴边界相交时结束的简单的三角形网格遍历来进行。这些网格元素是能够产生引起轮廓边的回缩的类型的自遮挡的那些网格元素。通过根据背投影确定来识别和消除这些元素,背投影会产生保持附接至原始的正投影边的保守的“经调整的”楔,但是其解释使得SVV成为从轮廓边看去被遮挡的高阶可见性效果。
因此,图22的步骤2205选择用于背投影的种子3D网格元素,不考虑这些可以潜在地引起背投影-源轮廓边的自遮挡的那些网格元素。
该方法还简化了在使用2D网格遍历的关于楔的可见性情况下的实施,如结合图17所讨论的。当该方法用在使用3D网格遍历的从视单元看去的可见性的本情况下时实现了甚至更大的简化。通过在3D网格遍历情况下采用该方法,事件面(楔多边形)保持附接至原始的一阶正投影轮廓周线以确保构造连续、保守的从区看去的本影边界面。
再一次,替代的实施方式是可能的:通过解释自遮挡而循序轮廓边的回缩。例如,一种寻找“回缩”轮廓边的方法根据初始投影、一阶轮廓边来计算背投影并且确定与所计算的VSVV对应的楔是否违反局部可见性。如果违反局部可见性,则当考虑高阶效果时候选轮廓边实际上从视单元看去是不可见的,并且距视单元较近的相邻边则用作背投影源以确定楔(与新的候选边的VSVV对应)是否违反局部可见性。可以重复该处理直至遇到不违反局部可见性的楔。将该楔用作经调整的、高阶楔。
一般地,尽管背投影处理的增加的复杂度能够是很明显的,但是仅由轮廓边的回缩产生附加的从区看去的遮挡量通常是很小。保持固定至原始正投影一阶轮廓边的正投影楔并且通过背投影计算入射在相同轮廓边(与 VSVV对应)上的“经调整的”楔是以很小的增加成本解释了大多数高阶可见性效果的一种方法。
如前面所强调的,高阶背投影调整仅应用在当原始的SVV从一阶轮廓边或其分段看去被遮挡。在另外的一些实施方式中,采用测量来确定一阶楔与对应的经调整的高阶楔之间的最大可能偏差。例如,由一阶楔(包含在支撑平面上)与位于轮廓边与视单元之间的对应的分离平面形成的角度是一阶楔与高阶楔之间的最大可能角度偏差;因为使用本方法,所以高阶楔在极限情况下能够位于分离平面上(如果VSVV是分离点)。该角度自然地倾向于随着距视单元的距离的增加而减小(视区从背投影源看起来更加“尖状”)。从而,通过背投影方法确定的高阶可见性效果在距视区较远处变得不太重要。该角度度量能够用于确定是否应该针对给定的正投影一阶轮廓边计算高阶效果。
现返回图22,对调用背投影3D遍历的主要部分的控制处理(步骤 2215)进行讨论。除了与控制从视单元看去的3D网格遍历方法(图19) 类似以外,图22所示的方法还与先前所描述的图14所示的控制从顶点看去(2D网格遍历)的背投影的方法非常相似。
图22所示的流程图示出了发起、重新发起和停止主从轮廓边看去的背投影3D遍历处理的处理,在图23中详细示出了该处理并且在本说明书的后续部分对其进行了详细的描述。
在一些实施方式中,图22所示的处理开始于2205,其中选择“种子”三角形以针对单个轮廓边发起从轮廓边看去的3D网格遍历处理,如在步骤2205中所示。当处于正投影处理时,选择很可能是暴露遮挡物的初始种子三角形加速该处理。
在步骤2205中,只有位于轮廓边与视单元之间的轴(SILE-VC轴) 中的那些三角形网格才是种子网格候选者。
处理流程行进至步骤2210以通过边-视单元轴的边界多边形和种子网格三角形的相交部来识别3D种子网格的包容分段。
当识别了种子3D网格和种子网格上的包容分段时,则处理流程行进至步骤2215以调用背投影3D网格遍历的主处理。在图23中示出了对于背投影的主3D网格遍历处理的实施方式。
处理流程行进至判决步骤2220以确定是否存在已经中止了3D网格遍历的主要部分的三角形。如果不存在中止的3D网格三角形,则处理流程行进至步骤2225,其中3D网格遍历被终止,从而完成了3D关于视单元的可见性图的构造。
如果在判决步骤2220中确定存在已经中止了主3D网格遍历的3D网格三角形(在图23的步骤2330中),则处理流程行进至判决步骤2230以确定在由中止的三角形(TRI)和源轮廓边(SILE)形成的轴中是否存在任何三角形。
如果在判决步骤2230中确定在当前三角形与源轮廓边(SILE)之间的轴中没有三角形,则处理流程行进至步骤2255以在由连接至当前中止三角形的三角形形成的3D三角形网格上构造包容分段。
处理流程行进至步骤2260以对先前中止的三角形重新发起3D网格遍历。
如果在判决步骤2230中确定在由当前三角形与源轮廓边之间的轴中存在三角形,则处理流程行进至步骤2235以确定在TRI-SILE轴中是否有任何未遍历的三角形。
如果在判决步骤2235中确定在TRI_SILE轴中存在未遍历的三角形,则处理流程行进至步骤2240,其中在TRI-SILE轴中的较近的未遍历的三角形上将3D网格遍历“跳转”或重新发起。该步骤(其还发生在图23 所示的背投影主3D遍历处理的步骤2330中)确保在遍历继续以前以及在做出停止遍历(因为中止的三角形从源边看去被完全地遮挡)的决定以前处理完所有潜在地遮挡的三角形。
如果在判决步骤2235中确定在TRI-SILE轴中不存在未遍历的三角形,则处理流程行进至步骤2245以确定当前(中止)三角形上的点是否位于表示从源轮廓边看去被遮挡的一个或多个多面体体积的任何多面体聚合本影(PAU)内。在一些实施方式中,该测试能够采用图25所示的修改的多面体的点包容性测试。该修改的多面体的点包容性测试使用一阶事件面(一阶楔);并且可选地,高阶本影边界多边形(UBP)。该测试允许对于多面体的点包容性测试的隐式解而不必构造整个多面体/多边形。
如果在判决步骤2245中确定中止三角形上的点是位于PAU内,则处理流程行进步骤2250以对中止三角形重新发起遍历,并且不再将中止三角形标记为中止。
如果在判决步骤2245中确定中止三角形不位于任何PAU内,则处理流程行进至步骤2255,其中如前所述构造相关联的3D网格的包容分段并且重新发起遍历。
如在图22所示的,处理流程在步骤2225、2240、2250和2260处终止。
图23是示出了构造用于确定从轮廓边看去的可见支撑视单元顶点 (VSVV)和可见支撑视单元轮廓周线(VSVSC)的背投影从轮廓边看去的可见性图的3D网格遍历方法的主处理的流程图。
从轮廓边看去的背投影3D网格遍历可见性级联方法的主处理与从视单元看去的3D网格遍历处理(图20)有些相似。
现在转向图23,在一些实施方式中,主背投影3D网格遍历处理以如在初始步骤2305中示出的以流形三角形或其他多边形网格的广度优先或洪水填充遍历来开始。在图22的流程图中示出的控制处理中使用发起整个处理的初始三角形。
可以将从轮廓边看去的背投影处理应用至整个一阶轮廓边。此外,可以细分每个一阶轮廓边(SILE)并且针对每个子分段计算背投影。在各个轮廓边的自适应细化中采用该方法,其中细化单个保守的楔以产生收敛于入射在轮廓边上的精确的可见性事件面(通常是二次曲面)的保守的线性化可见性事件面。在图22、图23和图24中,轮廓边(SILE)可以指单个一阶轮廓边或其子分段。
如前所述,在一种实施方式中,网格是流形三角形,其中每个边精确地由两个三角形来共享。网格的其他限定也是可能的,包括不闭合的网格。网格三角形与楔或UBP的相交部可以产生更加复杂的网格多边形。可以使用所确立的多边形三角剖分法将这些更加复杂的多边形转变成三角形。将三角形网格表示为有向图。该方法除了适合三角形还适合网格多边形,但是使用三角形简化了该遍历方法。图23的方法采用了每条边精确地由两个三角形共享的流形三角形网格。
步骤2305指示至网格三角形的遍历。可以以广度优先或洪水填充次序来进行遍历。使用广度优先的三角形网格遍历,遍历从初始三角形朝外扩展以形成所遍历三角形的层。通过非轮廓边连接的三角形被说成属于相同的“遍历”。
其他遍历次序是可能的。选择用于发起一个或多个多边形网格的遍历的三角形不影响遍历的输出。但是,通过选择完全可见并且靠近视单元的初始三角形,处理易于执行得更好。在保持有向图遍历的处理中,步骤 2305表示遍历限于网格中的未遍历三角形。
处理流程从步骤2305行进至判决步骤2310以确定在由当前三角形和源轮廓边形成3D轴(该轴被称为TRI-SILE轴)内是否有任何未遍历的三角形。如果在该轴中有一个或多个未遍历的三角形,则处理流程行继续至步骤2330,其中遍历立即跳转至较近的未遍历的三角形。在一种实施方式中,使用层次空间细分结构来组织网格多边形。这使得步骤2310的轴测试能够迅速地识别前面所遍历的网格多边形的大的分组。
步骤2330实际上针对当个网格或多个网格对象执行严格的从前到后的网格元素处理。将遍历跳转至较近的潜在地遮挡的三角形的处理能够产生因三角形的循环交叠引起的无尽循环。在Weiler-Atherton可见性算法中也遇到这样的循环并且可以通过维护交叠关系的有向图表示来对这样的循环进行检测和消除。在图13中提出并且结合该图详细地对该方法的实施方式进行了讨论。
步骤2330确保在当前的三角形的遍历以前对源于当前三角形的三角形X轮廓边(TRI-SILE)轴中的较近的未遍历三角形上的事件面进行识别和构造。这些事件面可以是从视单元看去的遮挡边界(在步骤2345至 2368中针对这些较近的轮廓边来确定),其实际上可以限制当前三角形的遍历(步骤2335)。通过迫使跳转至较近的未遍历三角形/轮廓边,步骤 2310确保在当前三角形遍历之前构造可以限制当前三角形遍历的任何从轮廓边看去的遮挡边界。处理流程在步骤2330处终止。
如果在TRI-SILE轴中没有未遍历的三角形,则处理流程行进至判决步骤2315以正在遍历的当前三角形是否包含从轮廓边看去(“从-SILE”) 的遮挡边界或包含边界(表示SILE-VC中的包含)。本影不连续性网格 (DM)分段一般在网格三角形与楔的相交处形成多义线。每个DM分段是楔与三角形的相交部,其中该分段从楔的支撑源元素(点或边)看去并且通过楔的所支撑的轮廓元素(点或边)可见。这被称为“关于楔”的可见相交部。该相交部是保守的本影不连续性网格的分段并且可以或可以不是多面体聚合本影(PAU)边。这些关于楔的可见分段包括保守的线性化本影不连续性网格的多义线。这些多义线可以是或可以不是实际的从源看去(在这种情况下从轮廓边看去)的遮挡边界(上述边界将从源(SILE)看去保守地可见的多边形分段与从源看去被遮挡的多边形分段分离,其中本命体积的大小被保守地低估)。
在步骤2315中遇到的从源看去的遮挡边界是已经在步骤2363中被确定为从视单元看去的遮挡边界的不连续性网格(DM)多义线段。随后给出步骤2363的细节。步骤2363确定哪些DM多义线段是从轮廓边看去的遮挡边界,并且实际上在随后步骤2315中会遇到从视单元看去的遮挡边界之前进行步骤2363。
网格三角形与楔的“关于楔”的可见相交部表示本影不连续性网格的分段,其可以或可以不对应与从轮廓边看去的遮挡边界(OB)。在步骤 2363中将每个DM多义线确定为从区看去的遮挡边界(或不确定为从区看去的遮挡边界)并且与DM多义线存储在一起。因为在步骤2315中遇到每个DM多义线之前由步骤2363来处理每个DM多义线,所以用于步骤2315中的判决的信息预先在步骤2363中已经被确定并且针对所遇到的 DM多义线段被存储。
如果在判决步骤2315中确定当前的三角形包含遮挡边界(OB)分段或包含边界分段,则处理流程行进至步骤2335以在OB分段(OB SEG) 或遮挡边界处中断当前3D网格遍历。遍历可以穿过三角形的其他非OB 分段来继续。处理流程行进至步骤2335。在另外的实施方式中,处理流程从2335行进至处理23-1,其将处理流程返回至步骤2325。
如果在判决步骤2315中确定当前三角形不包含OB分段,则处理流程行进至步骤2320以确定当前三角形是否具有轮廓边。在一些实施方式中,该确定基于图3所示的对于一阶从边看去的轮廓边的测试。
如果在判决步骤2320中确定当前三角形不具有轮廓边,则处理流程行进至步骤2325以处理与流形三角形网格对应的有向图的广度优先遍历中的下一个未遍历的三角形。
如果在判决步骤2320中确定正在处理的三角形包含轮廓边,则处理行进至步骤2345,其中与三角形网格对应的有向图的广度优先遍历在轮廓边处停止,并且使用楔构造的旋转和扫掠方法的一阶方法(图1至图6) 来构造入射在轮廓边上的一次楔。在实施方式中,将所构造的一次楔添加至称为“楔_列表”的列表中。一次楔是使用旋转和扫掠方法构造在所遇到的一阶轮廓边上的那些楔。在初始构造时,所有的楔都是还没有受关于楔的可见性步骤进一步的限制的初始楔。在一些实施方式中,步骤2345 中的初始一次楔的构造与图12中的步骤1210所示的初始一次楔构造(输出不敏感方法)对应。
以下替代实施方式是可能的:没有使用本发明的旋转和扫掠方法而是替代地使用延伸SV-ME楔平面至相交的不太精确的方法(如由Teller等人在1992年所描述的)来构造一阶楔(在步骤2345和随后步骤2360中构造)。
处理流程行进从步骤2345行进至步骤2350,其中选择“楔_列表”中的楔并且提交到处理步骤2355至2368。
在对“楔_列表”中的楔的处理的第一步骤中,步骤2355,确定与楔相交的网格三角形的关于楔的可见分段。在一些实施方式中,该确定使用以下处理:将所有的网格三角形与每个楔相交,随后使用Weiler-Atherton 来确定2D关于楔的可见性。该方法用在现有技术的不连续性网格方法以及用在图12的较简单的输出不敏感的保守本影不连续性网格方法。可替代地,在图15中给出了对于该关于楔的可见性问题的更有效的输出敏感的2D网格遍历解决方案。处理流程从步骤2355行进至步骤2360,其中正在处理的入射在楔上的复合轮廓顶点(CSV)被识别为楔与一阶从视单元看去的轮廓边的任何关于楔的可见性相交部。
每个CSV是楔与一阶轮廓边的关于楔的可见相交部。这些点对应于对应的复合从区看去的轮廓周线的t接头。复合轮廓周线由可以不是通过原始流形上的顶点直接相连的轮廓边形成。
此外在步骤2360中,在所识别的每个CSV上构造SE-MV楔。将这些源于CSV的楔称为二次楔。使用楔构造的旋转和扫掠方法的扫掠操作来构造这些楔。在一些实施方式中,在该步骤中生成的所有这些楔是在扫掠处理中生成的SE-MV类型。这些楔成连续、保守的本影面,其连接在对应CSV处相交的SV-ME楔。可替代地,可以延伸两个SV-ME楔至相交以形成不太精确地担仍然是保守的本影边界。
采用通过延伸相邻SV-ME楔至相交的方法的楔构造的替代实施方式是可能的。在这种实施中,不构造SE-MV楔。
如前面所定义的,每个CSV对应于楔与支撑在相交的轮廓边上的另一个楔的相交部。这些楔在CSV点处相交。
此外,如果在CSV处相交的两个SV-ME楔旋转至相同的轮廓边顶点,则两个楔在它们的边处精确地相交并且不构造新的SE-MV楔。
将在步骤2360中构造的所有二次楔(入射在CSV上的)添加至“楔 _列表”中。其意味着它们最终会由步骤2355来处理以找到关于楔的可见分段。
处理流程从步骤2360行进至判决步骤2363以确定DM_SEG从对应的轮廓边(SILE)的除了支撑包含DM_SEG的楔的顶点以外的所有其他“部分”看去是否被遮挡。在图21中公开了该测试的实施方式。简要地,该测试涉及将DM_SEG与所有与已经构造的所有潜在地相交的楔相交,然后通过修改的多面体的点包容性测试来确定结果的子分段是否位于从源看去(在这种情况下从轮廓边看去)的PAU内。
如果DM_SEG是从轮廓边看去的所有其他部分(除了支撑DM_SEG 的楔的SVV)以别的方式被遮挡,则DM_SEG是实际的与从边看去的 PAU对应的从轮廓边看去的遮挡边界(OB)。
因此,如果在判决步骤2363中确定DM_SEG是从SILE看去以别的方式被遮挡(使用图21的处理),则处理流程行进至2368,其中将 DM_SEG作为OB_SEG添加至相交的三角形。
另一方面,如果DM_SEG不是从SILE的所有其他部分看去以别的方式被遮挡,则DM_SEG不是实际的从边看去的遮挡边界(OB)并且处理流程行直接行进至步骤2370以确定在“楔_列表”中是否剩余任何未处理的楔。如果在判决步骤2370中确定在楔列表中剩余未处理的楔,则处理流程返回至步骤2350。
另一方面,如果在步骤2370中确定在楔列表中没有剩余未处理的楔,则处理流程行进至步骤2380以确定在当前“遍历”(通过非轮廓边连接至当前三角形的三角形的集合)中是否存在任何未处理的三角形。如果在判决步骤2380中确定在遍历(通过非轮廓边连接至当前三角形的三角形的集合)中存在未遍历的三角形,则处理流程行进至步骤2325,其中对下一个未遍历的三角形进行处理。
如果在判决步骤2380中确定在遍历中没有未遍历的三角形,则处理流程行进至步骤2383,其中对与在当前遍历中生成的OB相交的三角形进行识别并且使用相交的OB分段对其进行重新三角化。该步骤能够有效地将3D网格遍历限制在当随后在步骤2315中遇到的遮挡边界处,因此将遍历限制到不被遮挡的区,进一步加强了该方法的输出敏感特征。
处理流程行进至步骤2385以在根据遍历生辰光的OB分段的未被遮挡侧上继续3D网格遍历。因为来自一个2-流形的楔可以产生位于不同(不连接的)2-流形上的OB点,这表示在通过OB分段处的楔线实现的两个流形的“遮挡物融合”形成的新连接的流形(PAU的一部分)上继续遍历。处理流程在步骤2385处终止。
如前所述,在本方法的一种实施方式中,三角形网格对象的整个集合被封闭的网格对象包含。该封闭的网格对象类似与通常用于环绕对于交互性可视化应用的网格对象的“天空盒”。在图23的从轮廓边到视单元的背投影方法中,以与天空盒对象类似的方式将视单元自身视为三角形流形。将视单元用作三角形流形保持当前方法为输出敏感,这是因为仅处理遇到的未被遮挡的网格(在SILE-VC轴中),对轴中的每个网格进行处理。当然,本方法自然地识别视单元自身的根据其确定VSVV和VSVSC的未被遮挡的区。
背投影处理的替代实施方式仅采用SV-ME背投影(从网格轮廓边看去)楔。在该方法中,将背投影的SV-ME楔延伸至相交;将背投影的 SV-ME楔的平面延伸至相交,简化了结果的关于视单元的背投影可见性图。
此外,正如可以通过延伸相邻的SV-ME楔的平面至相交来选择性地消除一阶SE-MV楔,可以通过将相邻的高阶SV-ME楔的平面延伸至相交来保守地、选择性消除高阶楔。
图24A和图24B示出了在采用3D网格遍历的从轮廓边看去的可见性图背投影的构造中使用的确定“DM_段”是否从轮廓边看去源以别的方式被遮挡的处理。
图24A和图24B所示的处理实施在图23的步骤2363中调用的查询。即,确定在关于视单元的可见性图的从一阶轮廓边的背投影构造中生成的 DM_SEG是否从轮廓边看去源看去以别的方式被遮挡。
图24A和图24B的处理遵循图21A和图21B所示的方法,确定在从视单元看去的可见性图的正投影从视单元看去的构造中生成的DM_SEG 是否从视单元源看去除了在图24A和图24B的情况下源是轮廓边而不是视单元以外以别的方式地被遮挡。
转向图24,在一些实施方式中,该测试以判决步骤2410开始,其中采用正在测试的DM_SEG与轮廓边之间的3D轴(DM_SEG-SILE轴)。
如果在判决步骤2410中确定在DM_SEG-SILE轴中有未遍历的三角形,则处理流程行进至步骤2415,其中处理被中止并且正投影3D网格遍历处理的主要部分跳转至DM_SEG-SILE轴中较近的未遍历的三角形。该跳转确保能够影响DM_SEG的作为从SILE看去的遮挡边界的状态的所有潜在地遮挡的几何图形在进行实际上确定DM_SEG是否是从SILE 看去的遮挡边界(OB)之前被识别并被处理。
如果在判决步骤2410中确定在DM_SEG-SILE轴中不存在未遍历的三角形,则处理流程行进至步骤2420,其中DM_SEG与DM_SEG-SILE 轴中的其他楔相交。该相交部可以将原始的DM_SEG细分成多个 DM_SUBSEG,每个都具有统一的从SILE看去的可见性。
处理流程行进至步骤2425以确定当前DM_SEG(或DM_SUBSEG) 是否直接与已经确定了从SILE看去的可见性状态(以别的方式被遮挡或以别的方式未被遮挡)的DM_SEG或DM_SUBSEG相连。
如果在判决步骤2425中确定当前DM_SEG或DM_SUBSEG直接与已经确定了从SILE看去的遮挡状态的DM_SEG或DM_SUBSEG相连,则处理流程行进至步骤2430。
在步骤2430中,将当前DM_SEG或DM_SUBSEG设置成与具有已知的从SILE看去的可见性状态并且与当前DM_SEG或DM_SUBSEG直接相连的DM_SEG或DM_SUBSEG的状态相同的状态,并且将该状态返回至调用函数。
如果在判决步骤2425中确定当前DM_SEG或DM_SUBSEG没有直接与具有已知的从SILE看去的可见性状态的DM_SEG或DM_SUBSEG 相连,则处理流程行进至步骤2435,其中选择DM_SUBSEG上的点,并且处理流程行进至步骤2440以形成位于在步骤2435中选择的点与SILE 之间的轴,并且处理流程行进至步骤2445,其中DM_SEG-SILE轴中的所有楔被识别并且被放置在列表“楔列表”中以用于随后的处理。这些楔是在图23的步骤2345和2360(生成正投影一阶楔的主3D网格遍历处理) 中生成的楔。
处理流程行进至步骤2448,其中“楔列表”中的每个楔由后续步骤来处理。
处理流程行进至步骤2450,其中对于“楔列表”中的每个楔,确定楔是否是一阶楔或高阶楔。
图23的主3D网格遍历处理使用步骤2345和2360处楔的扫掠和旋转构造来生成一阶楔。可以使用在本说明书的随后部分中结合图22、图 23和图24详细讨论的正投影处理来可选地构造高阶楔。
如果在判决步骤2450中确定楔是高阶楔,则处理流程行进至步骤 2455。
另一方面,如果在判决步骤2450中确定楔不是高阶楔,则处理流程直接行进至步骤2458。
在步骤2455,通过使高阶楔与所有其他楔以及位于楔-SILE(“楔 -SILE”WEDGE-SILE)轴和点-SILE轴两者中的UBP相交来构造实际的与高阶楔对应从SILE看去的本影边界多边形(UBP)。针对在步骤2450 中识别的高阶楔,该处理有效地构造对应的UBP的位于点-SILE轴内的部分。可以通过使对应的楔与所有其他楔/位于形成在该楔与视单元之间的轴中的UBP相交来根据对应的楔构造UBP。在一些实施方式中,仅构造UBP的子区,即位于点-SILE轴中的那部分以回答修改的多面体的点包容性测试,其是处理的随后步骤2460。在步骤2455之后,处理流程行进至判决步骤2458以确定楔列表是否为空。如果“楔列表”不为空,则处理流程行进至步骤2448,其中“楔列表”中的下一个楔经受后续处理。
如果在判决步骤2450中确定楔是一阶楔,则处理流程直接行进至上述判决步骤2458。
如果在判决步骤2458中确定“楔列表”为空,则处理流程进至步骤 2460以对在步骤2435中选择的DM_SUBSEG点进行修改的多面体的点包容性测试以确定其是否从SILE看去的以别的方式被遮挡。
在图25中示出了该修改的多面体的点包容性测试的实施方式并且结合该图对其进行详细的讨论。简要地,该修改的多面体的点包容性测试确定测试点是否位于从SILE看去的PAU内部。该测试与常规的多面体的点包容性测试在选择已知位于PAU外的第二点(在这种情况下是位于 SILE上的点)方面有些相似。在测试点与外点之间构造线段并且该线与多面体的多边形相交。该线的子分段的状态(位于多面体内或外)会基于与网格多边形分段和包括PAU的UBP的相交部来改变。在不必与其他楔相交以形成对应的UBP(因为它们不能与位于它们的未被遮挡侧的其他楔相交)的一阶楔的情况下,该测试稍微被简化。此外,在一些实施方式中,因为仅位于测试点-视单元轴内的那些PAU面能够与测试线段相交,所以不构造整个PAU来完成测试。
处理流程从步骤2460行进至处理24-1,其从步骤2465(图24B)处开始。
在判决步骤2465中,对修改的多面体的点包容性测试的结果进行检查(步骤2460)。
如果在判决步骤2465中确定该测试点被遮挡,则处理流程行进至步骤2475,其中,总体的处理返回所测试的DM_SEG被遮挡的结果。将该结果返回至图23中的步骤2363中。
如果判决步骤2465中确定测试点未被遮挡,则处理流程行进至步骤 2470。
在步骤2470中,总体处理返回所测试的DM_SEG未被遮挡的结果。将该结果返回至图23中的步骤2363。处理流程在2470和2475处终止。
图24C:使用从轮廓边看去背投影可见性图来构造包含与相邻的轮廓边对应的VSVV的保守的可见支撑视单元轮廓周线(VSVSC)。
在针对特定的轮廓边子分段构造了从轮廓边看去的背投影可见性图之后,通过图22、图23和图24所示的处理例确定VSVV。VSVV是从轮廓边看去可见的点,该点是从SILE看去的关于视单元的可见性图(以及视单元的边或面)的支撑从轮廓边被旋转至视单元的平面的顶点。
如果每个一阶轮廓边或其分段经受背投影处理,则其会产生对应的入射在相同的轮廓边或子分段上调整的或高阶SV-ME楔。高阶SV-ME是受VSVV支撑。
除了产生每个轮廓边或子分段所应用的VSVV,从轮廓边看去的背投影还产生作为关于视单元的可见性图的一部分的可见支撑视单元轮廓周线(VSVSC)。
为了构造连接相邻高阶SV-ME的SE-MV,使用在对应的轮廓边的从边看去的背投影期间所产生的VSVSC。
如前所述,SV-ME楔表示包含所支撑的轮廓边的多边形沿着该边的遮挡的可见性限制。相比之下,因为顶点实际上不能遮挡任何从区看去源的光/可见性,所以SE-MV楔不反映所支撑的轮廓顶点处的遮挡的相同方面。点不能够遮挡任何面光源。替代地,在轮廓周线的内侧拐角处,从区看去的可见性受源/视单元的面上的光包含/视点的限制。入射在轮廓顶点上的对应的SE-MV楔反映了该包含的限制。
在本可见性方法的一阶实施中,一般仅在内侧拐角轮廓顶点(和被视为虚拟内侧拐角的复合轮廓顶点)处构造SE-MV楔。高阶SV-ME楔可以通过一个或多个SE-MV边来构造即使SV-ME楔没有严格地在内侧拐角处连接。例如,该情况出现在单个一阶轮廓边被自适应地细分并且针对每个子分段确定各个高阶SV-ME楔。
连接相邻SV-ME的SE-MV楔是从相邻的高阶楔的VSVSC导出的并且具体取决于VSVSC如何彼此相交。在一阶情况下,轮廓边共享共用的SVSC,以及轮廓边首先通过与视单元面的平面的相交部来细分。
因此,VSVSC的结构及其与来自相邻轮廓边的VSVSC的关系确定在连接两个对应的轮廓边/子分段的点处连接两个相邻的高阶楔的SV-MV 的集合。
在一阶正投影中,实际的用于构造“扫掠”一阶SE-MV楔的支撑视单元轮廓周线(SVSC)经常是由视单元的1个至最多大约6个边组成的简单的凸多义线。
相比之下,在从轮廓边看去的背投影处理期间,内接在视单元上的可见支撑视单元轮廓周线(VSVSC)可以变得任意地复杂。取决于源轮廓边与视单元之间的轴中的网格多边形的布置,VSVSC能够变成非凸多义线或甚至是具有大量分段的多个不连接的多义线。
因为高阶背投影方法的目的是提供对SV-ME楔的简单保守的高阶“调整”和可以连接上述SV-ME楔的SE-MV楔,所以本方法采用大量的技术来最小化VSVSC的复杂度。这些技术能够在不引入太多的附加事件面的情况下对高阶可见性进行细化以提高一阶结果的精度。
在实施方式中,采用两个策略来确保在背投影处理中避免VSVSC:1) 对以下情况的识别:对于连接的轮廓边的每个VSVSC都是简单的并且它们简单地有关以及2)复杂VSVSC的凸简化。首先讨论第一方法。
与连接的轮廓边(或相同边的细分的子分段)对应的两个VSVSC经常是简单的并且它们是简单地有关。考虑出于高阶细化目的而被细分的相同的轮廓边的两个子分段(A和B)。这两个分段的SVV是相同的(支撑平面的定义)。分段A的VSVV很有可能位于视单元的边上。如果两个 VSVV位于视单元的边上(不必是相同的边),则共用的、相交的VSVSC 的用于生成连接A和B的SE-MV楔的有关组件是原始SVSC(视单元的边)连接VSVV A和VSVV B的一部分。在该普通情况下,在扫掠处理的修改中构造连接SE-MV楔,其中在两个VSVV之间进行扫掠。(图24C 的步骤2480和2483)。
在先前描述的情况中,如果A和B两者的VSVV位于是单元的相同边上,并且这些VSVV都是由出现在相同的居间(背投影)轮廓边上的背投影可见性事件面的相交部产生的,则分段A和分段B位于原始的正投影轮廓边的区上,对于上述原始的正投影轮廓边的精确的从视单元看去的本影事件面是由轮廓边、居间背投影轮廓边和视单元边产生的二次曲面。正投影轮廓边的该区的自适应细分产生一组SV-ME楔及它们的保守地近似该二次曲面的连接SE-MV楔,并且在细分的极限情况下收敛于二次曲面。
如果VSVV位于视单元的不同边上(但是由相同的居间背投影轮廓边产生),则结果的SE-MV楔(连同相邻的SV-ME楔)是n个二次曲面的保守表示,其中n是两个VSVV之间的视单元边的数目。这些二次曲面一般由所共享的生成元边连接。通过进一步细分两个轮廓分段和背投影,连接的二次曲面的集合可以自适应地近似于初始的子分段。由 Drettakis等人和Durand等人(可见性骨骼)所描述的三重四面体楔或轴测试能够可选地用于寻找精确的连接生成元边边界,但是这不是本方法所需的。
分段A和分段B的情况对应于源-EEE可见性事件二次曲面,由多边形网格的两条边和视单元的一条边形成的事件面,由Drettakis等人在他们的完全的不连续性网格的描述中所描述的。按照指定的,本从轮廓边看去的背投影方法能够容易地识别与高阶、S-EEE事件面对应的情况并且用保守的多边形近似来近似这些面。
其他相邻的轮廓边/分段可以导致具有不位于视单元的边上而属于视单元的面的内部的对应的VSVV的对应的VSVSC。如果两个VSVSC都是凸的并且位于视单元的相同面上,并且一个被包含在另一个里面,则形成连接两个VSVV的线段。该线段与共享的轮廓顶点形成扫掠三角形,其产生连接两个相邻的调整SV-ME楔的保守的SE-MV。(图24C的步骤 2485、2487和2489)。
尽管一些从轮廓边看去的背投影产生相对地简单的VSVSC,但是其他的从轮廓边看去的背投影可以产生复杂的并且具有不在视单元的边上而是在视单元的面之一内部的VSVV的VSVSC。根据连接的轮廓边的背投影的每个VSVSC可以是非凸的并且可以具有不连接的组件。此外, VSVSC可以甚至不相交。这使得在所共享的轮廓顶点处的扫掠操作不被限定。
在这种情况下,由相邻的轮廓边子分段支撑的SV-ME(或SE-MV) 可以通过任意复杂的一系列SE-MV来连接,其反映了连接两个VSVV的 VSVC的复杂度。实际上,两个VSVV可能实际上不是在可以具有不止一个连接组件的VSVC上相连。
为了简化连接相邻分段上的SV-ME楔的SE-MV楔的集合,对与每个分段对应的VSVSC进行了保守的简化。(图24C的步骤2485和2491)。
该简化涉及寻找针对每个子分段的VSVV或VSVE(可见支撑视单元边),然后对应地延伸SV-ME或SE-MV的平面以通过与由VSVV或 VSVE形成的楔平行的平面来将视单元一分为二。
针对每个相邻的轮廓边分段进行视单元的该二等分。每个结果的 VSVSC具有与视单元的SVSC的简单关系:新的视单元轮廓周线是被平面切割的原始视单元轮廓周线的子集。因为原始的的SV-ME楔由与各个边平行的支撑视单元结构支撑,所以入射在轮廓边上的该切割的原始 SV-ME楔被转变成SE-ME楔。在视单元的二等分之后,VSVSC通常具有简单的关系:一个是另一个的子集(除非新的VSVE在视单元上相交,这在当它们对应于当个细分的轮廓边时不可能发生,这是因为它们在那种情况下会是平行的)。
因为相邻分段所支撑的SE-ME是由支撑视单元轮廓周线(SVSC) 上的点支撑的,所以SE-ME能够通过由SVSC的连接两个对应的新 VSVSC(保守的轮廓周线)的对应SE-ME的分段生成的SE-MV连接。
但是,穿过两个连接的轮廓子分段所共享的点的这些SE-MV每个都会与边声的SE-ME之一连接并且不会与另一个SE-ME在边上相交而是精确地面上。
为寻找两个SE-ME,形成在两个VSVSC之间的所有SE-MV的集合根据对应的扫掠三角形来形成,SE-MV楔彼此以及与SE-ME相交以寻找连续的连接多边形面。注意,这些SE-MV楔可以与SE-ME楔相交,不仅是边-边而且是在楔的内部相交。同样地,SE-MV扫掠楔还可以在楔的内部彼此相交。
可以采用保守地简化由背投影生成的复杂VSVSC的其他方法。在一种方法中,非凸VSVSC可以由对于多义线的凸简化的任何方法来处理。 VSVSC的与单个轮廓边的背投影对应的不连接的组件可以通过在视单元上形成它们的凸包来保守地连接。同样地,VSVSC的与相邻轮廓边的背投影对应的不连接的组件可以通过形成它们在视单元上的凸包来保守地连接。简化的凸VSVSC产生了连接经调整的SV-ME的简化了的SE-MV。
连接对于相邻分段的两个VSVSV的共用VSVSC的凸简化能够明显地减小结果的从区看去的可见性结构(DM、VM或PAU)的复杂度。
在一些情况下,对于两个连接的轮廓边的VSVV从边看去可见(对应的SV-ME是精确的),但是视单元边的支撑与连接的SE-MV对应的扫掠支撑三角形的部分可能从所共享的轮廓顶点看去被遮挡。在这种情况下,可以使用利用将共享的轮廓顶点作为源的背投影处理来生成的关于视单元的从点看去的可见性图来构造VSVSC。从点看去的背投影采用图22 和图23的方法的简化了的实施方式。在从点看去的背投影情况下,所有的楔是从点看去的UBP并且使用从点看去的轮廓边的定义来生成,在楔构造中没有使用扫掠操作并且每个DM_SEG已知是OB_SEG,所以不使用图24A和图24B的测试。
VSVSC被限制到视单元面。遮挡边界实际上可以跨越视单元的一个或多个面,但是被视为映射上的连续的多义线。
在一种技术中,为了简化背投影实施,首先可以通过使视单元面平面相交以形成分段来对用作背投影源的网格轮廓边进行细分。对于这样的分段的每个子分段,对应的VSVSC一般地被限制至视单元面的相同集合。此外,任何分段的细分都可以由先前讨论的误差度量来驱动,该误差度量对一阶楔与对应的高阶楔的偏差进行估计。
应当注意,此处所指定的从轮廓边看去的背投影处理自身采用了可见性传播的一阶模型。从而,它产生了对一阶正投影SV-ME楔和连接它们的SE-MV楔的保证了的保守但不必是精确的调整。可以在背投影处理自身中使用高阶细化方法。这会对与Drettakis等人(1994)所描述的非发光体-EEE时间对应的关于视单元的可见性图中的二次曲面进行近似。因为这些非源EEE事件极少明显地促成从视单元看去的本影体积,所以该方法能够明显地使得实施复杂并且不大可能充分地提高一阶背投影结果的精度。表IX示出了使用以下方法来解释的事件面的类型(使用表I的命名法):一阶方法、在背投影中使用一阶可见性传播的背投影方法和使用高阶可见性的背投影方法。在后一种情况下,通过背投影来确定源(网格轮廓边)从(从分段看去)网格轮廓边看去可见的部分。如前所述,在一些情况下使用可见性传播的一阶模型生成的E-EV面对应于不连续性网格化的E-EV事件面。在其他情况下,通过一阶方法生成的E-EV面不与使用现有技术的不连续性网格化方法(其中E-EV事件面不是必需地生成连续的本影事件面)构造的任何事件面对应。
表IX
在正投影和背投影中使用一阶可见性传播方法来近似四种类型的可见性事件面
总之,背投影处理能够产生非凸并且可以具有多个不连接的组件的 VSVSC。这能够充分地增加入射在由相邻的网格轮廓边子分段共享的顶点上的SE-MV楔的复杂度。如果VSVSC具有多个不连接的组件,则可见性问题不再是从区看去的而是实际上“从多个区看去”。因此,将保守地连接VSVSC的多个不连接的组件的方法以及单个VSVSC的凸简化方法用于控制结果的可见性图或PAU的复杂度。
再一次,本方法使得用户能够选择在从视单元看去的可见性解决方案中使用特定的高阶可见性效果(轮廓回缩,高阶背投影等)。此外,可以通过考虑一阶结果与高阶结果之间的最大可能偏差基于特定高阶效果的启发法来对特定的轮廓边的高阶效果的使用进行指导。
对于从区看去的可见性的3D和2D网格遍历算法的总结
如根据前面的描述很清晰的是,3D情况(例如,从视单元看去的PVS) 和2D情况(例如,关于楔的可见性)下构造可见性图的输出敏感的网格遍历方法是非常相似的。
此外,用于细化一阶可见性图的背投影方法也采用3D和2D遍历方法,但是使用不同的源、遮挡物和目标。
下表总结了3D和2D网格遍历算法并且总结了如何采用不同的源(视区)、遮挡物和目标组合将它们用在正投影和背投影模式两者中。从这个意义上将,目标是在其上构造可见性图遮挡边界元素(3D算法中的分段和2D算法中的点)的几何图形。
表X
对于视单元的可见性的3D网格遍历算法的变型
表XI
针对关于楔的可见性的2D网格遍历的变型
表XII示出了针对3D和2D网格遍历方法的对应的面和区元素。
表XII
对于3D和2D从区看去的可见性的面和区元素
元素 3D 2D
从源特征看去的本影边界元素 楔线(WL)
从源看去的本影边界元素 本影边界多边形(UBP) 本影边界线(UBL)
从源看去的本影边界区 多面体聚合本影(PAU) 多义线聚合本影(PLAU)
图25:使用一阶楔和高阶楔的点遮挡测试方法
图19和图20所示的构造保守的线性化本影可见性图的方法使用确定不连续性网格区上的点是否为从视单元看去被遮挡或从视单元看去未被遮挡(例如,在图19的步骤1945处)的测试。该点遮挡测试被系统地阐述为修改的多面体的点包容性测试并且被视为图25的流程图。
在实施方式中,处理流程从步骤2505处开始,其中线段形成为连接测试点(TP)与视单元面上的点。假设位于视单元面上的该点从视单元看去未被遮挡。
处理流程行进至步骤2510,该线段与潜在地与所有网格三角形、一阶楔和高阶楔UBP相交。网格三角形包含不被计算为相交部的测试点。
注意,尽管在该测试中可以使用一阶楔,但是首先必须将任意高阶楔与其他楔相交以形成对应的高阶UBP。这是所需要的,因为不同于一阶楔,高阶楔的未被遮挡侧能够与其他楔相交。该事实意味着高阶楔的关于楔的可见性可以具有包括交叠孔的复杂结构,上述交叠孔是由在高阶楔的未被遮挡侧与高阶楔相交的交叠楔造成的。从而,首先通过构造对应的高阶UBP来确定高阶楔的关于楔的可见性结构。则在点遮挡测试中使用高阶UBP而不是高阶楔。
处理流程行进至步骤2512,其中从视单元面上的点开始并行进至测试点来对在步骤2510中生成的相交部进行测试。
处理流程行进至判决步骤2515,其中对相交部的类型进行检查以确定其是否对应于网格三角形相交部。
如果在判决步骤2515中确定该相交部对应于网格三角形相交部,则处理流程行进至步骤2520,其中将表示包含该相交部的线段LS的新的子分段的可能遮挡状态的变量(“LS_状态”)的值设置为状态“被遮挡”。
如果在判决步骤2515中确定该相交部不对应于网格三角形,则处理流程行进至步骤2525以确定该相交部是否对应于一阶楔或高阶UBP。在判决步骤2525中,如果该相交部对应于一阶楔,则处理流程行进至步骤 2545以确定当线段被考虑成沿着从视单元面朝着测试点TP的方向时该相交部应于与楔的被遮挡侧还是未被遮挡侧。
如果在判决步骤2545中确定该相交部对应于楔的未被遮挡侧,则处理流程行进至步骤2550,其中不改变“LS_状态”的值。
如果在判决步骤2545中确定该相交部对应于一阶楔的被遮挡侧,则处理流程行进至步骤2555。
如果在判决步骤2555中“LS_状态”的当前值是“未被遮挡”,则处理流程行进至步骤2560。在步骤2560中,保持“LS_状态”的值不变。
如果在判决步骤2555中,“LS_状态”的当前值是“被遮挡”,则处理流程行进至步骤2565。在步骤2565中,将“LS_状态”的值设置为“未被遮挡”。
如果在判决步骤2525中确定相交的结构是高阶UBP,则处理流程行进至步骤2530以确定当线段LS被考虑成沿着从视单元面朝着测试点TP 的方向时相交部是与UBP的被遮挡侧的相交部还是与未被遮挡侧的相交部对应。
如果在判决步骤2530中确定该相交部位于UBP的被遮挡侧,则处理流程行进至步骤2540以将“LS_状态”的值设置成“未被遮挡”。
如果在判决步骤2530中确定该相交部位于UBP的未被遮挡侧,则处理流程行进至步骤2535以将“LS_状态”的值设置成“被遮挡”。
当处理完所有的相交部时,则通过“LS_状态”的最终值量表示所测试点的从视单元看去的可见性。处理流程在步骤2520、2535、2540、2560 和2565处终止。
在实施方式中,图25的点遮挡查询回答取决于源、遮挡物和目标的选择的2D遮挡查询和3D遮挡查询两者。表XIII示出了如针对在正投影和背投影(高阶)中的3D和2D从区看去的可见性问题期间遇到的各种遮挡查询来如何使用点遮挡查询。
表XIII
3D和2D点遮挡查询的变型
图26:使用3D网格遍历根据本影边界多边形(UBP)来构造多面体聚合本影(PAU)的方法的替代实施方式
图20及有关图所示的3D网格遍历处理的替代实施方式采用UBP替代楔。
在该方法中,在步骤2045至2060中构造的每个一次楔和二次楔与其他潜在地相交的楔/UBP相交以形成对应的UBP。这建立在以下条件上:潜在地相交的楔中的每一个还与它们的潜在地相交的楔相交。
因为每个UBP是从视单元看去PAU的边界,所以UBP和网格多边形的每个相交分段是遮挡边界(OB_SEG)。
在图26中示出了该替代的实施方式。图26的方法与图20A的3D网格遍历方法非常相似。在两种情况下,使用图19的方法来发起遍历。
图26的方法接着在结合图20A所描述的精确的对应步骤直至步骤 2661。对于这些对应步骤的细节,参见图20A的讨论。
步骤2661是以下步骤:将每个楔与潜在地相交的UBP相交以确定楔的哪一部分是UBP。与当前楔相交的那些楔和UBP位于由该楔和视单元形成的轴中。如果当前楔是一阶楔,则应该已经构造了潜在地相交的楔(借助于确保潜在地遮挡的楔首先被处理的步骤2610)。可以递归地进行步骤 2661以识别影响当前UBP的所有UBP。在实施方式中,除了在这种情况下步骤2661是针对一阶和高阶楔来执行以外,步骤2661与图21的步骤 2155是相同的。
在当前楔是高阶楔的替代实施方中,因为入射在该轴中的多边形上的楔/UBP可能与当前高阶楔相交,所以遍历跳转至楔-视单元轴中的较近的未遍历多边形。
在后续的判决步骤2663中确定楔的DM_SEG(在步骤2655中确定的)是否也是根据该楔构造的UBP的分段。
如果在判决步骤2663中确定DM_SEG是否是对应的UBP的分段,则处理流程行进至步骤2688,其中将DM_SEG作为遮挡边界分段 OB_SEG来添加至相交的网格三角形。该步骤与图20的对应步骤2068 相同。图26的处理中的后续步骤与图20的对应步骤相同。
图26的方法通过明确地构造相关的UBP来确定DM_SEG是否是 OB_SEG。因此,不需要将确定DM_SEG是否从视单元看去以别的方式被遮挡(图21)的测试分离。
如果采用UBP,则确定点是否位于任何PAU(步骤1945)内的测试使用传统的多面体的点包容性测试。如果采用一阶楔(如在图20中),则步骤1945采用修改的多面体的点包容性测试(在图25中示出)。
对构造CLUDM(使用图12的非输出敏感方法)和CLUVM(使用图20&图15的输出敏感方法)的计算成本的估计。
以下项用于后续的方程式中:
M=模型中的多边形的数目
N=视单元中的边的数目
S=环境中的一阶轮廓边的数目
SShaft=形成在单个一阶轮廓边与视单元之间的轴中的一阶轮廓边的数目
MV=模型中的可见多边形的数目
SV=环境中的可见一阶轮廓边的数目
SVShaft=形成在单个一阶轮廓边与视单元之间的轴中的可见的一阶轮廓边的数目
Vw=所有多边形与单个楔之间的相交部的顶点的数目
Mw=与楔相交的网格多边形的数目
Vsvw=关于楔的(从点看去或从边看去)可见的轮廓顶点的数目
Segvw=网格多边形与楔之间的相交部的关于楔的可见分段的数目
以下方程式假设没有背投影的一阶可见性传播。这等式反映了对构造从区看去的可见性解的计算成本的估计,它们不必是精确的。
方程式A是使用常规的不连续性网格构造方法(图12)构造保守的本影不连续性网格的计算成本的上界的近似的表达式。方程式A(图12 的输出非敏感方法):
成本=(N*S*SShaft)*LogM/*将所有楔与多边形相交*/
+(N*S*SShaft)Vw*Mw/*使用2D Weiler-Atherton时的2D关于楔的可见性*/
+(M2*N2*S2*SShaft 2)Log(N*S*SShaft)/*DM区的从视单元看去的可见性*/
方程式A的第一项是将所有的网格三角形与所有楔相交的成本。该项假设使用造成相交O(nLogn)的3D空间层次结构来组织几何图形。
第二项是使用现有技术的不连续性网格化所采用的2D Weiler-Atherton方法来确定楔-三角形相交部的可见分段的成本。该项指示对于生成的每个楔,相交网格三角形分段的所有顶点(V)会生成必须与相交于楔(Mw)的其他网格三角形相交的射线。Mw是所有网格三角形 (M)的(一般很小)子集。确定Mw的成本表达在第一项中。如在表中所示出的,所生成的楔的数目是N*S*SShaft
第三项是针对通过网格化创建的所有不连续性网格区确定该区是从视单元看去被遮挡还是未被遮挡。对于这样的测试,必须针对所有的楔对每个不连续性网格区中的单个点与视单元面之间的线进行测试。因为一般地,n个楔与任何面相交在该面上形成n2个区,所以该项中的第一因子是由任何轮廓边生成的楔的数目的二次方。第二个因子反映了需要测试的事件面的数目。
方程式B(图20和图15的输出敏感的3D和2D网格遍历方法)
成本=Mv*LogM/*可见三角形与其他三角形之间的3D轴测试*/
+N*SV*SVShaft*(Segvw*LogM+Vsvw*LogM)/*2D关于楔的可见性遍历*/
+(MV 2*N2*SV 2*SVShaft 2)Log(N*SV*SVShaft)/*从视单元看去的可见性遮挡边界多义线*/
方程式B是使用本发明的3D遍历方法来构造一阶保守的线性化本影可见性图的成本的近似的表达式。
第一项是针对每个所访问/遍历的网格三角形的三角形-视单元轴中的未处理的三角形的测试成本。该项还假设使用3D空间层次结构来组织几何图形。
第二项表示确定楔上的三角形分段的可见性的2D网格遍历的总体成本。因为仅在可见轮廓边上通过3D遍历生成楔,所以成本与可见轮廓SV的数目而不是所有轮廓S的数目成比例,如在方程式A的第二项中。使用2D网格遍历确定每个可见楔上的可见性的成本与楔上的可见轮廓顶点 (Vsvw)(其产生与网格三角形M相交的射线)的数目和可见网格三角形相交分段(Segv)(其产生了针对与网格三角形M的相交部检查的2D轴) 的数目成比例。如同3D网格遍历自身,2D网格遍历仅生成入射在可见结构(分别是分段和轮廓顶点)上的相交结构(2D轴和射线)。
最后一项是确定所生成的不连续性网格遮挡边界分段是从视单元看去被遮挡或是从视单元看去未被遮挡。可以将该点遮挡测试与用在方程式的第三项的点遮挡测试进行比较。一种非输出敏感不连续性网格方法。这两个点遮挡测试线与所生成楔的测试点。重要的差别在于:对于3D网格遍历方法,所需的测试数目是可见轮廓边的数目的函数,而不是轮廓边的总数目的函数。因此,对于3D网格遍历方法,针对每个点遮挡测试必须相交的楔的数目一般远小于现有技术方法的所需的数目(N*SV*SVShaft vs N*S*SShaft)。
在通常复杂的3D模型中,全部轮廓边的数目一般远大于可见轮廓边的数目,并且通常大于可见网格多边形的数目。从而,相比方程式A,方程式B表示更加输出敏感的成本函数。这反映了3D/2D不连续性网格构造方法的有利的、输出敏感的性能特征。
对构造PAU的计算成本的估计(使用图26的输出敏感方法)
如前面所述的,根据楔的UBP构造需要涉及楔x楔相交的附加步骤。但是,该处理的最终输出是可能由从视单元看去仅相切地可见的UBP连接的未被遮挡的正面网格多边形组成的一个或多个(保守的)PAU。因为在PAU中不呈现非本影边界,图26的处理输出的PAU一般远比由图12 的处理输出的保守的不连续性网格简单。从而,PAU方法产生许多需要从视单元看去的可见性测试的许多较小的“区”并且该测试是较简单的多面体的点包容性测试。
方程式C是使用3D/2D网格遍历方法构造保守的PAU的上界的近似表达。
这些项是:
M=模型中的多边形的数目
N=视单元中的边的数目
S=环境中的一阶轮廓边的数目
SShaft=形成在单个一阶轮廓边与视单元之间的轴中的一阶轮廓边的数目
MV=模型中的可见多边形的数目
SV=环境中的可见一阶轮廓边的数目
SVShaft=形成在单个一阶轮廓边与视单元之间的轴中的可见的一阶轮廓边的数目
Vw=所有多边形与单个楔之间的相交部的顶点的数目
Mw=与楔相交的网格多边形的数目
Vsvw=关于楔的(从点看去或从边看去)可见的轮廓顶点的数目
Segvw=网格多边形与楔之间的相交部的关于楔的可见分段的数目
方程式C(用于构造PAU的输出敏感网格遍历方法):
成本=Mv*LogM/*可见三角形与其他三角形之间的3D轴*/
+N*SV*SVShaft*(Segvw*LogM+Vsvw*LogM)/*2D关于楔的遍历*/
+(N*SV*SVShaft)Log(N*SV*SVShaft)/*关于UBP的相交部*/
+(MV 2*N2*SV 3*SVShaft 2)*Log(N*SV*SVShaft)/*多面体的点包容性测试*/
第一项是位于遍历的网格多边形与视单元之间的轴中的未遍历网格多边形的测试成本。该项与针对保守的不连续性网格构造的3D网格遍历方法的方程式B中的第一项相同。
第二项是确定关于楔的可见性的成本并且也与方程式B的第二项相同。
第三项是构造楔-楔相交以根据楔成UBP并且解决UBP的布置的成本。在一些实施方式中,因为该布置是针对每个UBP来解决的,所以该成本的数目级高于相对于对应的不连续性网格的成本的数目级,对于对应的不连续性网格,不直接计算三维空间中的被遮挡和可见的体积的布置,而是仅计算可见网格流形的面上的布置。
最后一项是确定流形网格是否被现有的PAU遮挡的成本。没有被3D 网格遍历/PAU构造的总体处理遍历的任何流形区从视单元看去完全可见或完全位于PAU内。在一般情况下,未遍历的流形区的数目远小于倾向于是楔数目的二次方的不连续性网格区数目。从而,UBP方法所必需的多面体的点包容性测试的总体成本倾向于远小于不连续性网格区的从视单元看去的可见性测试。
网格遍历实施:轴相交最佳化以及差轴
在网格遍历方法中,每次遍历一个网格“元素”。在图20所示的网格遍历方法的一种实施方式中,所遍历的网格元素是多边形(三角形)。从而,在该实施方式中,在步骤2010中在所遍历的三角形与视单元之间形成轴。可以有以下替代实施方式:轴测试使用围绕所遍历的多边形的集群(潜在的被遮挡物)的包围盒。在该实施方式中,在该包围盒与视单元之间形成轴。位于该轴内的网格元素可以遮挡潜在的被遮挡物,并且在对潜在的被遮挡物的遍历之前根据步骤2030对位于该轴内的网格元素进行遍历。如果在该包围盒-视单元轴内没有任何元素,则使用单个包围盒-视单元轴来解决潜在的被遮挡物的整个集群的潜在遮挡问题。因为轴相交测试是网格遍历方法的内循环的一部分,所以这些测试任何最佳化都能够明显地提升网格遍历的性能。
如果仔细地选择潜在的被遮挡物多边形的集群,则能够进一步简化该轴测试。形成集群的连接的网格多边形可能自遮挡。如果在集群内可以出现自遮挡,则集群包围盒与视单元之间的简单的轴测试不会识别自遮挡,这是因为自遮挡出现在包围盒内。但是,如果潜在的被遮挡物集群不包含从区看去的轮廓边,则集群内的自遮挡不能出现并且包围盒会识别所有潜在的遮挡物。在网格遍历方法的一种实施方式中,将多边形集群限定为不具有从区看去的轮廓边的多边形的连接分组。可以使用能够进一步加速轴测试的包围盒层次结构来进一步组织这些集群。
网格遍历方法还能够使用层次包围盒或其他层次空间细分结构来将潜在的遮挡物多边形组织成层次分组或元素。这还能够明显地加速轴相交 (以及楔-楔多边形和其他相交测试)。
在图20所示的网格遍历方法的实施方式中,如果发现潜在的遮挡元素与由潜在的被遮挡物元素和视单元形成的轴相交,则遍历“跳转”至潜在的遮挡元素。当这种跳转发生时,遍历则以通常的洪水填充(广度优先) 模式行进至相邻的网格多边形。
提升轴相交测试的性能的另一种技术采用了差轴。由网格上的相邻多边形形成的多边形-视单元轴可以是非常相似的,尤其是当多边形相对于视单元很小时。在这种情况下,可以更加有效地针对一个多边形进行轴相交测试,然后构造针对相邻多边形的差轴。该差轴是使用简单的处理针对相邻的三角形来构造的。在该处理中,多边形被假设为凸,实际上,在该实施方式中被指定为三角形。
两个三角形,三角形A和三角形B共享共用边。A与视单元之间的轴被称为轴A,B同样如此。如果A和B沿着它们的共用边E连接,则结果是四边形Q。使用形成有关的SV-ME和SE-MV支撑多边形的旋转和扫掠处理以通常方式来构造Q与视单元之间的轴(被称为轴Q)。该轴不包含入射在边E上的SV-ME支撑多边形,这是因为E位于四边形和该轴的内部。形成在边E与视单元之间的轴(再次使用用于构造支撑多边形的旋转和扫掠方法)形成对于轴A和轴B两者为共用的体积的边界。因此,该表示轴B减去轴A的差轴可以通过从轴B减去轴Q来构造。形成轴Q的支撑多边形包含入射在三角形A和B两者上的支撑多边形。实际上,Q的为A的支撑多边形的那些支撑多边形精确地将轴Q与B减A 的增量轴分离。该关系导致构造差轴的简单而有效的处理:B减去A,其中已经构造了轴A(或A减去前一个轴的差轴)。
对于新的三角形B,通过旋转来构造入射在三角形B的不与三角形A 共享的边上的两个SV-ME支撑多边形。然后通过扫掠了构造入射在B的不是边E的顶点的顶点上的所有SE-MV支撑多边形。识别轴A的入射在 E上的单个SV-ME支撑多边形。对该多边形的法向量进行反转。该SV-ME 支撑多边形变成B减A轴的一个边界。其他边界多边形是入射在边E上的SE-MV支撑多边形。这些多边形通过从边E的顶点扫掠至与B的其他 SV-ME支撑多边形对应的支撑视单元顶点来形成。
该处理使得能够通过反转所共享的边的SV-ME(先前构造的)支撑多边形以及将该支撑多边形连接至新三角形的SE-MV支撑多边形来简单而有效地构造两个相邻三角形的差轴。该处理完全避免了以下需要:计算两个轴的差的通用目的构造立体几何法。
图27A是示出了支撑多边形的被遮挡分段和对应的一阶轮廓边支撑不精确楔的分段
使用在第一实施方式中描述的一阶旋转和扫掠方法构造的楔是精确的本影可见性事件面,其中对应的支撑多边形或扫掠三角形不与网格多边形相交。
相反,如果与SV-ME楔对应的支撑多边形(或与SE-MV楔对应的扫掠三角形)与多边形网格相交,则楔的对应部分可能不是精确的本影可见性事件面。这是因为如果支撑多边形与网格多边形相交,则当从对应的所支撑的轮廓结构(对于SV-ME楔的轮廓边,和对于SE-MV楔的轮廓顶点)来观察时可能遮挡支撑视单元元素(对于SV-ME楔的顶点,和对于SE-MV楔的边)。
现在转向图27A,图27A是示出了视单元和标记为“网格E”和“网格D”的两个多边形网格对象。
将“网格D”上的相对于视单元的一阶轮廓边标记为SE1,并且将该一阶轮廓边细分成分段SE1O和SE1U。
将入射在SE1上的一阶可见性事件面标记为“楔4”并且将“楔4”细分成两部分“楔4-精确”和“楔4-近似”。
入射在SE1上的一阶SV-ME支撑三角形是SP4。SP4是点SVV2与 SE1之间的整个三角形。
SVV2是SP4(以及“楔4”)的支撑视单元顶点。SP4在点INTE处与三角形网格“网格E”相交。当从支撑一阶轮廓边的分段SE1U来观察时SVV2未被遮挡。因此,楔的对应部分“楔4-精确”是精确的本影可见性事件面。
当从支撑一阶轮廓边的分段SE1O(O相对于被遮挡)观察时,SVV2 被遮挡(被“网格E”)。因此,楔的对应部分“楔4-近似”不是精确的本影可见性事件面而是保守的本影可见性事件面。当且仅当一阶楔的对应的支撑多边形不与任何几何图形相交时,一阶楔才是精确的。同样地,如果支撑多边形的对应部分不与任何几何图形相交则一阶楔的部分是精确的。
在本发明的实施方式中将该关系用作有效的测试来确定一阶楔的那些精确的部分和那些近似的部分。结合图28对该测试进行了描述。在在一些实施方式中,对于一阶楔那些不精确的部分,使用在本说明书中公开的背投影方法之一来进行显影的可见性事件面的高阶细化。
对扫掠三角形和对应的SE-MV楔进行类似的分析。在该情况下,根据一些实施方式,使用从点看去(从轮廓点看去)的可见性方法来确定视单元边的被遮挡部分。扫掠三角形的被遮挡子分段具有SE-MV楔的能够使用在本说明书中随后描述的高阶背投影方法来细化的不精确分段。
支撑边与轮廓边平行的SE-ME楔情况使用从分段看去的可见性方法来确定轮廓边的从源边看去被遮挡的那些子分段。在该情况下,网格多边形与四边形支撑多边形的相交不是必需地产生任何子分段轮廓边的从视单元边看去的遮挡。
在任意情况下,如果支撑或被支撑边的分段从被支撑或支撑点看去被遮挡,则一阶楔的对应部分是不精确的。在这种情况下,视单元的支撑元素(支撑视单元顶点或扫掠三角形的边)实际上从网格轮廓边看去的对应元素(一阶轮廓边或一阶轮廓顶点)不可见。
在支撑视单元顶点(SVV)从对应的一阶轮廓边的分段看去被遮挡的情况下,对应的一阶SV-ME楔是不精确的,而是入射在一阶轮廓边的该分段上的可见性事件边界的保守表示。入射在这样的一阶轮廓边上的更加精确的SV-ME楔在一些实施方式中是通过细分分段并且对针对每个子分段的可见支撑视单元顶点(VSVV)进行识别。
VSVV是视单元的实际上从一阶轮廓边的分段看去可见并且为视单元的该可见部分与一阶轮廓边子分段之间的支撑部分的那部分。从轮廓边子分段到对应的VSVV的旋转产生“经调整的”或“高阶”楔,其保守地解释了视单元的从边看去的部分可见性。
在实施方式中,使用结合图22、图23、图24和有关图描述的一阶背投影方法来针对轮廓边来寻找VSVV。
图27B是示出了与图27A的视图相同的视图,并且图27B示出了通过细分分段并且对子分段进行一阶背投影以识别与每个子分段对应的 VSVV来在不精确的一阶轮廓边分段(SE1O)上构造高阶本影事件楔的处理。
在图27A中标记为SE1O的不精确的一阶轮廓边分段在图27B中被细分成两个子分段SE1O-A和子分段SE1O-B。
使用子分段SE1O-1作为线光源或线性视区并且接着构造一阶可见性事件面的特定方法,在边SE2(其还是相对于SE1O-A的一阶轮廓边)上形成的(背投影)SV-ME楔。该楔精确地在点SVV2处与视单元相交。因此,对于子分段SE1O-A,VSVV还是SVV(SVV2)。从而,对应的楔 (SV-ME 1)与精确的楔“楔4-精确”位于同一平面。
使用子分段SE1O-B作为线光源并且接着构造一阶可见性事件面的特定方法,在边SE2(其还是相对于SE1O-B的一阶轮廓边)上再次形成 (背投影)SV-ME楔。该楔与视单元精确在点VSVV1处相交。在“点A “与VSVV1之间示出的线与SE2相交。由VSVV1支撑的对应楔SV-ME 2是“经调整的”或高阶楔。
点A是子分段SE1O-A与子分段SE1O-B的相交部。使用图24C所示的方法来构造入射在“点”上的SE-MV楔,在图24C所示的方法中,对连接对于对应的相邻子分段的VSVV的支撑轮廓周线(VSVSC)进行“扫掠”以生成连接SE-MV楔。在图27B的情况下,两个VSVV(对于SE1O-A的SVV2以及对于SE1O-B的VSVV1)位于视单元的实际边和单个SE-MV楔上,SE-MV 1是通过图24C的处理来构造的。
该单个楔连接SV-ME 1和SV-ME 2来形成连续的本影事件面,其更好地近似了入射在一阶轮廓边分段SE1O上的精确的(二次的)本影事件面。
除了以下所述以外图27C示出了与图27B的视图相同的视图:现在通过将一阶轮廓的对应分段细分成4个子分段而不是2个来细化原始的一阶楔的不精确部分,以产生对该区中实际的本影事件面(二次曲面)的更加精确的近似。
使用与图27B所述的相同方法,对于4个子分段中的每一个子分段的VSVV是通过将每个子分段视为线光源并且进行一阶的从源看去的可见性来识别视单元的从子分段看去可见的部分来识别的。
在图27C的情况中,4个子分段具有4个对应的所示出的VSVV。例如,与支撑SV-ME 3的子分段对应的VSVV是VSVV1。这能够通过使用位于SV-ME3的左手边上的直边来验证,延伸的线与VSVV1和SE2相交。
使用对应的VSVV之间的扫掠处理来构造连接SE-MV楔。例如,通过SVV2与VSVV2之间的扫掠来构造楔SE-MV 2,对应的支撑(扫掠) 多边形被示出为这两个点和连接SV-ME 1A和SE-MV 2的点之间的细线。
通过使用不精确的一阶轮廓边分段的高阶细分,获得了对精确的本影事件面的更加精确的近似。
实际上,细分不精确分段并且构造一阶的从子分段看去的可见性来构造高阶楔的方法相当于保守地近似单个精确的二次曲面的方法,其中 VSVV位于视单元边上并且有一个居间边。
不同与前面二次曲面构造方法(例如,点-线-平面参数化法),使用一阶背投影的本方法确保所构造的面保守地近似精确的二次本影事件面。
图27D以不同的视角(稍微从视单元后面)示出了图27A的结构的相同的结构的图,其示出了具有分段SE1U和SE1O的一阶轮廓边从视单元一阶看去可见。
图28:通过检查一阶楔与精确楔之间的最大可能偏差并且通过识别轮廓边的一阶楔不精确的分段来控制从边看去的背投影处理的方法
图28是示出了是示出了识别一阶轮廓边的从其对应的SVV看去被遮挡的分段并且通过背投影来确定对于所述分段的每一个分段的VSVV的总体处理的流程图。
在实施方式中,当遇到一阶轮廓边时处理流程从步骤2805开始。该遇到可以发生在图20所示的3D遍历处理期间,尤其是在步骤2020中。
处理流程行进至步骤2810以使用图4所示的处理来构造支撑多边形。该步骤会作为初始楔的构造的一部分来执行,例如在图20的步骤2045 中。
处理流程行进至判决步骤2812以确定支撑多边形与分离多边形之间的角度是否超出预定值(VAL)。入射在一阶轮廓边上的分离平面是通过使用在构造支撑多边形中采用的相反的旋转方向的至视单元的旋转来形成的。
根据一些实施方式,使用背投影处理,当在背投影中计算的VSVV 靠近与入射在轮廓边上的分离平面相交的视单元顶点时,出现能够实现 SV-ME楔的最大可能调整。
该最大偏差取决于是单元的大小和轮廓边距视单元的距离。一般地,尤其是针对小的视单元,该最大角度偏差随着距视单元的距离增加而减小,这是因为视单元距作为背投影光源的轮廓边变得更加“点状”。
因此,如果在判决步骤2812中确定支撑多边形与分离平面之间的角度小于指定的值(VAL),处理行进至步骤2814,其中将SV-ME楔视为精确的并且不对楔进行“调整”处理来反映高阶可见性。
另一方面,如果在判决步骤2812中确定支撑多边形与分离平面之间的角度大于指定的值(VAL),处理行进至判决步骤2815以确定支撑多边形是否与任何网格多边形相交。如果支撑多边形不与任何网格多边形相交,则对应的一阶楔是精确的并且处理流程行进至步骤2820。
在一些实施方式中,变量VAL的值是由用户来选择的。VAL的高的值会易于导致使用一阶楔,其可能不太精确但是可以较快地生成。VAL 的低的值会使处理偏向生成高阶楔,其更加精确但是一般花费较长时间来构造。
步骤2820表示不进行楔的调整。
如果在判决步骤2815中确定支撑多边形与任何网格多边形相交,则处理流程行进至步骤2825,其中对网格轮廓边的SSV从其看去被遮挡的分段进行确定。如果支撑多边形是三角形,则该问题等同于识别轮廓边的从SVV看去被遮挡的分段。这是在一些实施方式中能够使用图15所示的 2D网格遍历处理的简化实施来解决的2D可见性问题。在该实施中,因为需要精确的从点看去的可见性解,所以2D网格遍历处理在步骤1520 中采用从点看去(SVV)的轮廓顶点。
在一些实施方式中,在SE-ME四边形支撑多边形特殊情况下也采用该方法。在该情况下,该处理确定支撑视单元元素(在这种情况下VCE 是边)从被支撑的轮廓边看去可见的分段。在该情况下,在图15的步骤 1520中采用的轮廓边定义是从边看去的。在这两种情况下,通过旋转至作为SV-ME支撑多边形情况下的视单元点或作为对于SE-ME支撑多边形的轮廓边来构造楔线。在SE-ME情况下,对于支撑四边形的该确定的结果是视单元边的包括从轮廓边到视单元边上的背投影可见性图的分段集合。
将在步骤2825中识别的被遮挡的子分段存储在SEG_LIST中。
在后续步骤2835至2855中,对SEG_LIST的分段进行处理。
处理流程行从步骤2825行进至步骤2835,其中一节轮廓边的对于其 SVV被遮挡的分段(或,在SE-ME支撑四边形情况下,支撑视单元边的分段)被设置成对于背投影处理的线光源。
处理流程行进至步骤2840,其中使用步骤2835的线光源来构造与正在处理的分段对应的关于视单元的可见性图。在一些实施方式中,该可见性图的构造使用在图22、图23、图24和有关的图中示出的对于从边看去的背投影的3D网格遍历处理。
处理流程行进至步骤2845以根据VM确定从分段看去可见的支撑视单元轮廓周线(VSVSC)。
处理流程行进至步骤2850以确定与作为在步骤2845中确定支撑顶点 VSVSC的分段对应的可见支撑视单元顶点(VSVV)。如前所述,产生最小旋转角度的顶点VSVSC是VSVV。
处理流程行进至步骤2855以调整由分段支撑的一阶楔以使得楔不是由VSVV而是由SVV来支撑。
图29是示出了通过检查一阶楔与精确楔之间的最大可能偏差并且通过识别对于其一阶SE-MV楔是不精确的简单、复合内侧拐角轮廓顶点来对从边看去的背投影处理进行控制的流程图。
图29是示出了识别视单元边的分段的总体处理的流程图,上述分段从支撑轮廓顶点与视单元边之间的扫掠三角形(通过扫掠处理来在简单或复合内侧拐角轮廓顶点与视单元边之间形成的支撑多边形)的简单或复合的内侧拐角轮廓顶点看去被遮挡。
在实施方式中,处理流程从2905处开始,其中遇到网格轮廓周线的内侧拐角顶点。如前所述,该内侧拐角可以是简单的轮廓周线的顶点或它可以是作为由楔和网格轮廓边的相交造成的复合轮廓顶点(CSV)的顶点。如前所述,使用形成拐角顶点的轮廓边的有关取向来确定内侧拐角状态。
处理流程行进至步骤2910以使用图5A和图5B所示的处理来如前所述在内侧拐角顶点与极值视单元轮廓周线之间形成扫掠三角形。该步骤可以作为例如在图20的步骤2045和2060中的初始的一次和二次楔的构造的一部分。
处理流程行进至2912以确定支撑多边形与分离多边形之间的角度是否超出预定值(VAL)。入射在一阶轮廓边上的分离平面通过使用在构造支撑多边形中所采用的相反旋转方向旋转至视单元来形成。对于SE-MV 楔,这通过检查相邻的SV-ME楔来确定。
因此,如果在判决步骤2912中确定相邻支撑多边形与分离平面之间的角度小于指定值(VAL),则处理流程行进至步骤2914,其中SE-MV 楔被视为精确的并且不对楔进行“调整”处理来反映高阶可见性。通过限定的相邻的SV-ME支撑多边形位于由对应的一阶轮廓边和支撑视单元顶点形成的支撑平面中。该支撑平面与分离平面(通过围绕相同的一阶轮廓边朝着视单元但是沿着相反的方向进行旋转来形成的)之间的角度给出了对应的一阶楔与它的对应的高阶或经调整的楔之间的最大可能偏差。
另一方面,如果在判决步骤2912中确定支撑多边形与分离平面之间的角度大于指定的值(VAL),则处理流程行进至判决步骤2915以确定支撑多边形是否相交与任何网格多边形。如果支撑多边形不与任何网格多边形相交,则对应的一阶楔是精确的并且处理行进至步骤2920以表示不对楔进行调整。在该情况下,不对入射在轮廓边上的楔进行调整。
如果在判决步骤2915中确定支撑多边形与任何网格多边形相交,则处理流程行进至步骤2925,其中构造用于共享内侧拐角轮廓顶点的轮廓边的背投影可见性图VM。在实施方式中,该可见性图的构造使用图22、图23、图24及有关的图所示的针对从边看去的背投影的3D网格遍历处理。如果对于相邻轮廓边中的一个或两个的对应的VM已经被构造(例如,通过图28的处理),则处理流程行进至步骤2935,其中根据在步骤 2925构造的VM来确定VSVSC。每个VSVSC的根据VM的构造在一些实施方式中可以包括凸简化步骤。
处理流程行进至步骤2940,其中检查根据相邻边的VSVSC之间的关系并且检查连接对于每个相邻边的对应SVV和/或VSVV的保守复合 VSVSC。该步骤采用图24C的处理来确定是否应该执行凸简化来确保连接两个对应的SVV和/或VSVV的保守的可见支撑视单元轮廓周线。
处理流程行进至步骤2945以通过扫掠与相邻的轮廓边对应的SVV和 /或VSVV来构造入射在内侧拐角网格轮廓顶点上的经调整的SE-MV楔。该扫掠连接所共享的、在步骤2940中确定的VSVSC(VSVSC的保守的简化)上的SVV和/或VSVV。
结果的SE-MV楔反映当从内侧拐角轮廓顶点来观察时部分地遮挡视单元的几何图形的高阶效果。处理流程在2945处终止。
图30A、图30B和图30C包括示出了识别可见性图中的具有高效动态遮挡的从视单元看去被遮挡的区的方法以及保守地简化被遮挡的区边界和对应的网格轮廓周线的处理的流程图。
3D网格遍历(图20及有关的图)是构造保守的从视单元看去的可见性图的有效方法。线性化背投影技术(图23及有关的图)的选择性使用使得结果的可见性图(及有关的PVS)能够在线性化可见性事件面充分地偏离精确的可见性事件面(一般是二次曲面)的区中增加。该自适应细化以增加线性化事件面(也因此是所使用的可见性图遮挡边界(OB))的数目为代价。
一般地,因为识别和移除了更多的被遮挡的多边形面积,所以从以高精度计算的可见性图中导出的PVS在运行时间渲染期间导致较小的透支。
但是,遮挡图的每个OB分段还产生了附加的添加至可见性图/PVS 的多边形,这是因为与该OB分段相交的原始三角形的重新三角化。(对于一种重新三角化方法,参见M.deBerg,M.van Dreveld et.al in “Computational Geometry Algorithms andApplications,Springer c.1997, page 45,其全部内容通过引用合并到本申请中)。该附加的几何图形易于简单地通过增加提交至图形流水线的初始几何图形阶段的基元数目来减慢运行时间渲染。
为了减少运行时间渲染的总体成本,实施方式包括对由被遮挡的区产生的栅格化减少的成本与因为被遮挡区引入的附加几何图形引起的几何图形处理的增加的成本进行平衡的方法。
该方法采用称为有效静态遮挡(ESO)的启发法来消除与小面积的被遮挡区对应的被遮挡的区,尤其是当它们引入了较大量的附加三角形。
在有关的方法中,ESO还用于指导遮挡边界的保守简化的同时尝试最大化被遮挡区的表面积。
在一些实施方式中,将图30A和图30C的处理作为离线可见性预计算来进行。该结果是最佳化的从区看去的可见性图及有关的PVS。结合图31、图34和有关的图提出了:通过将网格多边形的特定边周线标记为与具有高效遮挡的被遮挡区相关联的轮廓边来有效地存储可见性图的结构的有关方法。在该方法中,能够使用预标记的轮廓边在运行时间根据相邻(包含)视单元的可见性图/PVS来有效地计算对于视单元的可见性图 /PVS。图30A至图30C的方法包括不仅简化可见性图的遮挡边界而且将该信息存储为原始网格对象的对应的简化了的轮廓周线的步骤。作为预计算来进行该处理以使用图36及有关图的运行时间方法准备可见性图/PVS 数据的实际增量构造。
在一些实施方式中,当遇到可见性图的被遮挡区(OR)时处理流程从步骤3005处开始。
处理流程行进至步骤3007以确定在该OR中完全地被遮挡的原始网格三角形的数目。在替代的实施方式中,确定部分地被遮挡的原始网格三角形的数目。也是在步骤3007中,使用位于构造可见性图的视单元内的视点来对该OR中部分地被遮挡的原始网格三角形和完全地被遮挡的原始网格三角形的图像空间面积进行构造。
处理流程行进至步骤3010以确定由OR边界处的原始网格三角形的重新三角化产生的附加三角形(位于毗连当前OR的未被遮挡的区)的数目。
处理流程行进至步骤3013,其中采用在步骤3007和3010中确定的测量值来确定针对整个OR的被称为有效静态遮挡(ESO)的启发式变量。
在一些实施方式中,ESO是被确定为与OR中被遮挡的三角形/三角形片段的图像空间面积(ISA)成一定比例的变量。在另外的实施方式中, ESO启发还包括反映栅格化的运行时间成本的该项的系数。
根据一些实施方式,ESO被确定为与由于OR边界处的重新三角化而在网格中产生的附加的未被遮挡的三角形的数目成一定反比。在另外的实施方式中,ESO启发还包括反映几何处理的运行时间成本的该项的系数以及反映附加三角形的存储和传输成本的另一个系数。尽管使用了图36及有关图的增量运行时间PVS构造方法,但是可以通过在运行时间进行重新三角化来消除这些附加的三角形的存储/传输成本。
根据一些实施方式,通过以下公式来表示ESO:ESO=F(被遮挡多边形的数目、被遮挡多边形的图像空间面积、1/在遮挡边界处添加的新可见多边形的数目)。在另外的实施方式中,可以用任何期望的函数来表示 ESO。
本方法的其他实施方式是可能的:其包括具体OR的在生成实际上产生提升了的运行时间渲染性能的遮挡的“有效性”确定中的附加变量。
处理流程从3013行进至判决步骤3015以确定ESO是否大于或等于指定的值“值1”。如果在判决步骤3015中确定ESO不大于或等于值“值 1”,则处理流程行进至步骤3017,其中从VM中移除整个OR并且存储多边形网格的原始的、未重新三角化的三角形。对此,在实施方式中,如果与OR相关联的ESO不大于或等于“值1”,OR不是有效的遮挡边界。例如,随着通过重新三角化处理创建的新三角形的数目的增加,ESO值减小,这表示可能没有有效地保持引起重新三角化处理的OR。处理流程在3017处终止。
以下替代实施方式是可能的:仅重新存储部分地被遮挡的那些原始的网格三角形而保持OR。部分地被遮挡的三角形是通过OR边界(OB) 处的重新三角化来产生的那些附加三角形。通过仅存储这些三角形,减少了VM中的三角形数目而且仍从VM/PVS中移除了完全被遮挡的三角形。
另一方面,如果在判决步骤3015中确定ESO大于或等于值“值1”,则处理流程行进至步骤3019以确定在毗连当前OR的被遮挡区中由于OR 边界而构造的三角形的附加数目是否超过“值2”。
如果在判决步骤3019中确定所构造的三角形的附加数目不大于或等于“值2”,则处理流程行进至步骤3018,其中当前OR(和通过当前OR 的边界上的重新三角化产生的三角形)保持不修改。对此,如果附加三角形的数目很小,则可以更加有效地保持OR。
另一方面,如果在步骤3019中确定所构造的三角形的附加数目大于或等于“值2”,则处理流程行进至步骤3020。
步骤3020至3026实施以下方法:尝试通过保守地移除OR和VM的与OR的遮挡边界相交的相邻的暴露区中的三角形来减少在相邻的未被遮挡的区上引起的附加三角形的数目。使用该方法,现在将相邻的未被遮挡的区中的先前限制在OR遮挡边界处的三角形认为是完全被未被遮挡,并且使用原始的网格三角形来取代这些受限的三角形。这通过消除遮挡边界处的重新三角化保守地增加了从对应视单元看去未被遮挡的面积并且减少了三角形的数目。
处理流程行进至步骤3020,其中将“边界_三角形”识别为与VM遮挡区的遮挡边界相交或毗连的那些三角形。
处理流程行进至步骤3021,其中将“边界_三角形”从OR中移除并且将对应的(重新三角化的)边界三角形从相邻的VM暴露区移除并且使用原始的、较大的未重新三角化的网格三角形来取代。这些较大的三角形包括原始地仅被包括在被遮挡的区中的一些表面积,但是在未重新三角化步骤3021后,将较大的原始三角形认为是完全地被遮挡,即使只有上述三角形的部分可能位于被遮挡的区中。
处理流程行进至步骤3022,其中将OR与相邻的暴露区之间的新边界设置成由OR的与在步骤3021中识别的原始的网格三角形相邻的三角形形成的多义线边界。该步骤保守地将OR的边界重新限定为位于原始地计算的OR内。通过保守地重新限定OR边界还潜在地减小了边界的复杂度并且减少了OR中的三角形的数目。
后续的判决步骤3023与判决步骤3015类似,并且在该情况下确定如在步骤3020至3022中确定的沿着原始网格三角形的边的遮挡边界的保守的重新限定是否产生了遮挡足够数目的三角形和/或遮挡具有足够的图像空间面积的三角形的遮挡区。
如果在判决步骤3023中确定被遮挡的三角形的数目和/或图像空间面积超过预定值(例如,“值44”),则处理流程行进至步骤3024,其中将遮挡区和相邻的暴露区保持在它们的当前状态。
另一方面,如果确定OR中三角形的ISA(图像空间表面积)没有超过预定的值,则处理流程行进至处理5-1,其从确定OR中的三角形细分水平是否超过特定值(例如,“值4”)的判决步骤3025(图30B)开始。
如果在判决步骤3025中确定OR中的三角形细分水平没有超过预定的值,则处理流程行进至步骤3026,其中对OR的三角形进行进一步的细分(例如,使用中点-边细分来根据1个三角形创建4个三角形)。伴随 3025的测试的该过程使得还延伸至相邻的暴露区的OR中的巨大数目的三角形被逐渐细分成较小的三角形直到被遮挡区中的三角形的数目和/或三角形的ISA超过“值4”(步骤3023)或直到细分的水平超过“值4”。处理流程从3026行进至处理30-2,其将处理流程返回至步骤3020(图 30A)。
如果在判决步骤3025中确定OR中的三角形细分水平超过预定值,则处理流程行进至步骤3027以保守地简化OR遮挡边界。执行这些简化以增加OR的ESO。
在步骤3027中,将形成轮廓周线(根据其来构造包括当前OR的边界的遮挡边界(OB)分段)的轮廓边的按次序的列表存储为数组“SIL_ 列表”。对于任何内侧拐角轮廓顶点(无论简单或复合),VSVSC的相关联的视单元轮廓边也被存储在“SIL_列表”中,这是因为它们也具有与促成OR边界的对应楔。
处理流程行进至步骤3028以将数组的初始分段存储在变量SIL中。
处理流程行进至步骤3029以将“SIL_列表”中的下一个分段存储在变量“下一个_SIL”中。
处理流程行进至判决步骤3031以确定SIL和“下一个_SIL”是否形成轮廓周线的外(凸)拐角。
如果在判决步骤3031中确定SIL和“下一个_SIL”形成轮廓周线(和对应的OR边界)的外(凸)拐角,则处理流程行进至处理30-4,其从在连接SIL和“下一个_SIL”的非共享顶点的线段上构造SV-ME楔的步骤3040处开始。使用先前指定的VM图构造方法,将楔与网格多边形相交以形成DM_SEG,针对从视单元看去的可见性对上述DM_SEG进行测试以确定上述DM_SEG是否是VM的有效OB_SEG。这些新的保守的 OB_SEG可以与网格三角形相交并且其他的OB_SEG没有与原始的OR 边界相交。
处理流程行进至步骤3042,对新的OB与原始的OB之间的区的ESO 进行确定并且将其存储在变量D_ESO(表示新旧OB之间的差区的ESO) 中。该ESO对刚刚通过OB的保守换位已经被移除了的遮挡区的“有效性”进行估计。
处理流程行进至步骤3050以确定D_ESO是否小于预定值“值3”。
如果在判决步骤3050中确定D_ESO小于预定的“值3”,则处理流程行进至步骤3060。如果差区的D_ESO很低,则在差区中被遮挡的三角形的数目很小和/或它们具有相对地小的表面积。此外,低的D_ESO值可以指示在差区中存在通过重新三角化会引起附加的几何图形的许多部分地被遮挡的网格三角形。
在步骤3060中,因为差区具有相对地低的D_ESO值,所以将OR 的在步骤3040中重新计算的保守边界存储为对于该图的区的新OR边界。
处理流程行进至步骤3070,其中可选地,还可以存储通过新OR边界引入的重新三角化的三角形。再一次可以将部分地被遮挡的网格三角形保守地认为是未被遮挡,从而减少了会通过重新三角化产生的新几何图形的量。
处理流程行进至步骤3080,其中将对于已经被有效地折叠成单条保守的轮廓边的两条轮廓边SIL和“下一个_SIL”的数据从表示网格对象的被标记的从视单元看去的轮廓周线的链式列表中移除。如结合图31及实施方式的有关图所详细讨论的,将被标记的轮廓数据存储为与简单的轮廓顶点和CSV对应的数据结构的链式列表。在步骤3080中,对链式列表的单个节点(“周线_节点”)进行修改以反映边的折叠。
如果在判决步骤3050中确定差区的D_ESO不小于预定的值,则处理流程行进至步骤3084,其中保持原始的OB,这是因为在不因为OR边界处的重新三角化而引入太多附加三角形的情况下,差区易于有效地遮挡相对地大的数目的网格三角形或网格三角形的具有相对地大的表面积的部分。
处理流程行进至步骤3090,其中将SIL设置成“下一个_SIL”并且处理流程行进至处理30-5,其将处理流程返回至步骤3029,其中通过将“下一个_SIL”设置成“SIL_列表”中的下一个未处理的边来有效地增大“SIL_列表”。
如果在判决步骤3031中确定SIL和“SIL_列表”形成与OR的边界对应的轮廓周线的内侧拐角,则处理流程行进至处理30-3,其从确定正在处理的、与“SIL_列表”对应的当前周线是被遮挡区(OR)的外周线还是该区的内周线。
如果在判决步骤3035中确定当前周线是外周线,则处理流程行进至步骤3037以将变量“最佳侧”设置成值“内侧”。
如果在判决步骤3035中确定当前周线不是外周线,则当前周线是内周线并且处理流程行进至步骤3039以将变量“最佳侧”设置成“外侧”。
处理流程行进至步骤3045,其中识别位于SIL或“SIL_下一个”的两侧的两个轮廓边使得上述边仅可能近地位于周线上(在周线数组“SIL_ 列表”)以及使得上述边的对应楔平面相交以形成在周线的“最佳侧”上相交的线;其中“最佳侧”是对于外周线的周线的“内侧”和对于内周线的周线的“外侧”。这确保了内侧拐角轮廓顶点(简单或复合)的区中的周线的保守简化。该处理可以以由变量N指定跨度一次“折叠”不止一个边。
处理流程行进至步骤3055,其中确定新OB与原始OB之间的区的 ESO并且存储在变量D_ESO(表示旧OB与新OB之间的差区的ESO) 中。该ESO对已经通过对OB的保守换位移除了的遮挡区的“有效性”进行估计。
处理流程行进至判决步骤3065以确定D_ESO是否小于预定值“值 3”。
如果在判决步骤3065中确定D_ESO是否小于预定的“值3”,则处理流程行进至步骤3075。如果差区中的D_ESO很小,则差区中被遮挡的三角形的数目很小和/或它们具有相对地小的表面积。此外,低的D_ESO 值可以表示在差区中有会通过重新三角化引起附加的几何图形的许多部分地被遮挡的网格三角形。
在步骤3075中,因为差区具有相对地小的D_ESO值,所以将OR 的在步骤3045中重新计算的保守边界作为对于图的区的新OR边界来存储并且由新的OR边界引入的重新三角化的三角形还可选地被存储。再次,可以将部分地被遮挡的网格三角形认为是未被遮挡,从而减少了将会通过重新三角化产生的新几何图形的量。
处理流程行进至步骤3089,将对于N个轮廓边的被有效地折叠成了包括延伸的轮廓边的保守宽度的数据从表示网格对象的标记的从视单元看去的轮廓周线的链式列表中移除以及从SIL_LIST中移除。如结合图 31及有关图的讨论中,将所标记的轮廓边存储为与简单的轮廓顶点和 CSV对应的数据结构链表。随后在处理流程中,在步骤3080中,可以对链式列表的节点(“周线_节点”)进行修改以表示折叠的边。
如果在判决步骤3065中确定差区的D_ESO不小于预定值,则处理流程行进至步骤3091,其中因为处差区往往实际上遮挡相对地大的数目的网格三角形或网格三角形的具有相对地大的表面积的部分,而不会因为 OB边界处的重新三角形化引入太多附加的三角形,所有保持原始的OB。
处理流程行进至步骤3095,其中将SIL设置成“下一个_SIL+N”, N表示由步骤3045的保守简化处理取代或折叠的边的跨度。处理流程行进至处理30-5,其将处理流程返回至步骤3029,其中实际上通过将“下一个_SIL”设置成“SIL_列表”中下一个未处理的边来增加“SIL_列表”。
图30的方法适用于简单和复合轮廓周线两者。对于复合轮廓周线,内侧拐角轮廓顶点可以是CSV。将该方法作为后处理应用至已完成的可见性图。从而,对与OB_SEG对应的轮廓边进行标记。如前面所描述的,在从视单元看去的可见性图的构造期间,最终可以将三角形网格上的单个一阶轮廓边细分成多个可见的子分段。另外,这些分段的每一个分段可以支撑与另一个轮廓边相交以生成与SE-MV扫掠楔相关联的CSV的 SV-ME楔。在本方法中,“SIL_列表”由反映简单或复合的轮廓周线的可见复杂度的各个子分段组成。
图30D是示出了视单元和标记为“网格F”和“网格G”的两个多边形网格的3D隐藏线图。该图是具有总体上布置在观察者与视单元之间的网格对象的透视图。
MESH F是表示具有六个边的盒状对象的三角形网格。“网格F”的每个矩形面被建模为两个三角形。在“网格F”中12个三角形,仅示出了6个,其他6个被遮挡从而未示出。“网格F”的一个三角形由标记为 V1、V2和V3的顶点来形成。
“网格G”是具有21个多边形的多边形网格,这些多边形中的一些用三角形来表示,而其他多边形则用矩形来表示。在视图中,这些多边形的中的一些多边形被遮挡。
图30E是示出了与图30D的透视图相同的透视图的3D隐藏线图。在图30E中,示出了将视单元用作源的从视单元看去的可见性图的一部分。构造“网格G”的一阶轮廓边上的楔与“网格F”相交以产生标记为 OR-G的遮挡区。在此不示出上述楔。遮挡区OR-G被由7个遮挡边界分段组成的遮挡边界包围。OR-G完全位于由定点V1、V2和V3形成的原始的网格三角形内。
在一种实施方式中,根据图20A及有关的图的3D网格遍历处理来构造包围OR-F的遮挡边界分段的构造。具体地,在图20A所示的示例性流程图中的步骤2068中将这些遮挡边界分段添加至相交的多边形。
如在图20A的示例性流程图中的步骤2083中所描绘的3D网格遍历处理的另一个步骤中,将与遮挡边界分段相交或包含遮挡边界分段的三角形重新三角化成被遮挡区和未被遮挡区。图30E示出了使用OR-G的遮挡边界分段的对原始的网格三角形V1-V2-V3进行该示例性重新三角化的结果。在该重新三角化期间,原始的三角形V1-V2-V3被重新划分成10 个新的三角形,其中7个与OR-GE的7个遮挡边界边一一对应,3个另外的三角形是因为OR-G进一步将三角形V1-V2-V3细分成由OR-G的顶点限定的3个区而产生的。
因为遮挡区OR-G完全位于MESH F的单个原始三角形(V1-V2-V3) 内,所以它不包含完全的三角形。即,引入“网格F”上的OR-GE的遮挡边界的多边形网格(“网格G”)不完全遮挡甚至是将“视单元”作为源的“网格F”的单个网格多边形。因此,被OR-G完全遮挡的网格三角形的数目为0。
三角形V1-V2-V3部分地由“网格G”遮挡。该部分遮挡的区是OR-G 的区。在该示例中,OR-G的表面积相对于包含三角形V1-V2-V3的表面积很小。
在该示例中,OR-G没有完全遮挡任何网格多边形,并且遮挡仅单个多边形的相对地小的表面积。因为遮挡区的有效静态遮挡(ESO)与被遮挡区完全遮挡的多边形的数目和完全或部分地被遮挡的多边形的表面积成一定正比,所有通过这些因子不充分地增加OR-G的ESO。
遮挡区的ESO与由在对应的遮挡边界处的重新三角化创建的新多边形的数目成一定正比地变化。在OR-G的示例中,遮挡边界处的重新三角化产生了被划分成10个新三角形的单个原始三角形。
因此,在该示例中,ESO的正比因子(被完全遮挡的多边形的数目和被遮挡的多边形的表面积)以及反比因子(例如,由遮挡边界处的重新三角化生成的新多边形的数目)两者往往会产生对于OR-G的ESO相对地小的值。
如在图30A至图30C的示例性流程图中所描述的,在一种实施方式中,可以将具有小ESO的OR-G完全从可见性图中移除(步骤3017)。可替代地,根据图30A至图30C的示例性流程图可以简化OR-G的遮挡边界并且重新确定对于简化了的遮挡边界的ESO。在一种简化方法中,通过将遮挡边界等同于遮挡区内的完全被遮挡的原始网格三角形的连接集的边界来使得遮挡边界较小(步骤3020至步骤3022)。这导致对如暴露的任何部分地被遮挡的多边形进行重新限定。在该情况下,从从视单元看去的可见性图和显影的PVS消除仅完全地被遮挡的多边形。在另一种简化实施方式中,保守地简化遮挡区的实际遮挡边界(步骤3023至3095)。
如在所描述的一种实施方式中的一种确定ESO的方法采用测量遮挡的因子。在一种实施方式中,ESO的确定还包括反映通过在对应的遮挡边界处的重划分生成的新多边形的数目的因子。该方法适合以下实施方式:可以基于复合每个因子权重的系数来调整各个因子的相对重要性。
操作原理:使用标记的轮廓边的增量PVS信息的有效存储以及可见性图/PVS的增量运行时间构造。
PVS数据,尤其如果是从高精度可见性图推导出的PVS数据可以具有高的存储成本。如前所述,增量PVS是通过仅存储相邻视单元的PVS 之间的差来减少PVS数据的存储成本的现有技术方法。在Chhugani等人 (2005)的增量PVS方法中,增量PVS是针对每个视单元边界存储的多边形基元ID(称为增量I)的列表。使用行程编码来存储由两个组件:增量G+(新近可见的基元)和增量G-(新近被遮挡的基元)组成的增量I。即使使用该压缩,但是,增量PVS数据很大。对于具有1300万个三角形和500,000个视单元的动力装置,需要7GB来存储增量PVS对象ID。
实施方式包括使用隐式方案来有效地存储增量PVS的方法,其中通过比较对应的可见性图来对模型的产生几何图形的针对具体的视单元-视单元过渡的明显暴露或明显遮挡的轮廓边进行识别。在离线可见性预处理中识别并且表姐这些动态地遮挡或动态地暴露的轮廓周线。该标记采用利用一阶轮廓边的定义来实现明显的算法压缩的有效的行程编码。结合图 31及有关的图详细地给出了该行程标记方法。
在运行时间,通过以下处理根据相邻视单元的可见性图/PVS来构造用于视单元的可见性图/PVS:
1)进行相邻视单元的可见性图的修改的3D网格遍历。该快速遍历使用标记的明显地遮挡或明显地暴露的轮廓周线来迅速地构造新近构造的可见性图上新的遮挡边界。结合图32、图33、图34和有关的图给出细节。
使用这些新的遮挡边界,在运行时间遍历处理期间不对新近被遮挡的三角形进行遍历。因为在新的PVS中仅表示出了遍历的三角形,所有该方法实际上使得能够生成移除了新近被遮挡的三角形的PVS。结合图35、图36及有关的图给出了细节。通过消除了在大多数情况下对明确地存储增量G-信息(例如,新近被遮挡的三角形的大的列表)的需要来减少了增量数据存储和传输的成本。
2)将新近暴露的几何图形作为可以包括与具体的视单元过渡相关联的ID和/或实际的几何图形的增量G+分组来添加,其中新近暴露的几何图形“附接”至与VM的与新暴露相关联的边界。因为可以以视单元-三角形-分段精度来计算从区看去的可见性图,所有新近可见的三角形中的许多三角形可以是原始网格三角形的分段。根据相邻VM的VM增量构造的本方法适合在运行时间遍历/VM构造期间对三角形进行重新三角化的技术,其避免了必须将三角形分段存储在增量G+分组中。
在一些实施方式中,本方法使用层次地布置的视单元。相对地大的父视单元包含较小的子视单元。使用先前描述的增量构造方法根据对于相邻的大的视单元和另外的增量G+数据来构造用于大的视单元的VM/PVS。因为对于大的视单元之间的视单元过渡之间的增量G+数据往往很大,所有自然地集群上述数据,从而减小了加载增量G+所需的磁盘访问次数。
通过在运行时间进行修改的3D网格遍历来根据父(包含)视单元的 VM/PVS导出对于子(被包含的)视单元的VM/PVS。因为子视单元的 VM/PVS是父视单元的VM/PVS的子集,所以用于根据父VM构造子VM 的运行时间3D网格遍历方法仅使用标记的动态地遮挡的轮廓周线来构造遮挡边界,其绕过在从父到子的过渡中被遮挡的几何图形。这使得在不需要附加的增量G+数据的情况下构造用于运行时间显示的更加精确的 VM/PVS。
视单元的层次组织还有利于增量PVS数据的有效流处理。在一些实施方式中,仅需要传输与相对地大的父视单元之间的过渡对应的增量G+ 数据分组。仅使用增量G-信息(在运行时间根据标记的轮廓信息来生成) 来根据父视单元的VM/PVS来构造对应的子视单元的VM/PVS。因为通常寻找、访问和传输数据单元所需的总体时间随着分组的大小的增加而减小,所以仅处理父增量G+信息是更加有效的。
使用所体现的标记的轮廓信息和相关联的增量PVS数据分组,根据相邻(同胞)视单元的VM/PVS来有效地构造精度受控的VM/PVS(使用增量G+分组和运行时间3D网格遍历来绕过新近被遮挡的三角形)。对于父视单元至子视单元过渡,因为使用绕过新近被被遮挡的三角形的标记的轮廓边暗示信息通过对父视单元的VM的重新遍历可导出对于子视单元的整个VMS/PVS,所以不需要增量G+分组。
根据一些实施方式,将运行时间处理作为预取操作来进行。在交互性漫游中,将当前视点的位置用于基于视单元(其还是模型的导航单元)的连接性以及当视点速度和其他因子来预测可能的未来视单元位置。使用该知情推测预取,增量地构造并且维持在当前视单元(即,包含当前实际的或预测的视点的视单元)可到达附近处的父视单元的VM/PVS。在指定的时间段内从当前视单元可到达的视单元的集合可以是包括观察者的移动的固有导航约束的受约束因子,包括如最大实际或预测的视点速度和加速度以及调整速度和加速度等因子。建模环境的包括障碍物和其他冲突限制的局部结构还能够影响可以访问视点的可到达附近处的相邻视单元的速度,这是因为构造一般不需要对增量G+数据进行流处理。
本方法实现了用于经由本地或远端服务器的交互性内容的流传输的有效的基于可见性的编解码器。该编解码器利用交互性漫游的固有的动态或临时的可见连贯性来最小化所请求的流处理所需的带宽。
不同于基于图像的流处理方法,对可见性事件几何图形和纹理信息进行流处理所需的带宽相对地独立于显示器分辨率。实际上本方法倾向于以高分辨率来增加运行时间渲染性能,这是因为以在运行时间增量地构造 VM的相对地小的CPU成本,维持提升几何图形和栅格化CPU性能两者的非常精确的PVS。此外,因为该编解码器可以实施为推测预取;所以它不同于基于图像的流处理方法,它的性能相对地独立于客户端-服务器连接延迟。
图31A、图31B和图31C示出了标记轮廓边的方法所采用的数据结构
如在前面的章节中所描述的,实施方式包括以下方法:识别动态地遮挡或动态地暴露的网格轮廓边并且在离线的后处理中对它们进行标记;随后使用标记轮廓边来在运行时间实现增量的VM/PVS。
如结合图30所描述的,还可以基于VM中对应的遮挡边界分段的有效静态遮挡来对从区看去的轮廓周线进行简化。如在图30中示出的,可以将简化了VM边界存储为简化了标记轮廓周线(随后会根据其在运行时间构造简化的VM边界)。
图31A包括用于标记简单和复合轮廓周线的数据结构。
在一些实施方式中,三角形流形网格的简单的轮廓周线是包括多义线的边的连接序列。多义线可以或可以不形成循环。
假设简单的轮廓周线未被遮挡,则仅使用一阶从视单元看去的轮廓边的定义;可以通过标记周线的单条边来有效地标记整个简单的轮廓周线。给定单个标记的开始边(或指向该边的数据结构),可以通过简单地寻找连接边以及确定哪条连接边是一阶轮廓边来识别整个连接的一阶轮廓周线。在本方法中采用该事实以通过在运行时间识别大多数轮廓周线边来减少存储标记轮廓周线的成本。
从视单元看去的轮廓周线可以是复合轮廓周线。如果从区看去的可见性事件面(例如,UBP)与(不同的)轮廓边相交,则产生复合的轮廓周线。该相交部是复合轮廓顶点或CSV。
周线的每个内侧拐角顶点,不管是简单的还是复合的,都可以因扫掠处理而导致不止一个的从区看去的SE-MV本影事件面(楔/UBP)。从而,可以有比周线中的边或顶点的数目更多的入射在周线上的事件面。
在一些实施方式中,将用于标记轮廓周线的数据结构组织为与入射在实际的轮廓边和顶点的实际事件面对应的数据结构数组。因为在运行时间能够迅速地识别相邻轮廓边以及在运行时间能够生成UBP(和可见性图的对应的OB_SEG),所以实际上不需要存储数组元素中的许多元素。
通过在运行时间识别/生成周线元素来实现固有的算法压缩而产生的减少了的存储成本能够相对于直接使用所讨论的图31A的周线节点信息生成该信息的运行时间成本被平衡。该信息用于在运行时间加速生成未存储的数据。图31A和图31B示出了用于标记轮廓周线的数据结构的实施方式。
在一些实施方式中,针对每条周线来存储数据结构“Contour”。该数据结构包括分别至特定的网格对象、网格的边和边的顶点的三个字段。在存储形式中,所有的参考是对于特定的元素数组的整型索引,尽管这些引用可能变成指针。结构“Contour”还包含字段intnode_array,其是对类型Contour_Node的具体的数据结构数组的索引。“struct Contour”还包含给出了对于周线的node_array的长度的整型字段num_nodes。
数据结构“Contour”还包含整型字段VMinfo,其是对于类型 VM_Info的数据结构数组中的特定元素的索引。VM_info(在本说明书的随后部分对其进行详细的描述)包含提供特定网格的信息并且与UBP相交的网格三角形与Contour_Node相关联。通过预计算该信息并且将其与跨度的初始轮廓元素存储在一起,如果相关联的UBP与相同的三角形网格相交,则能够在运行时间迅速地构造与由Contour_Node编码的轮廓元素的整个跨度相关联的所有可见性图OB_SEG。(结合图35及有关的图来对采用相交多面体流形的固有连贯性的该处理进行详细的描述)。
数据结构“Contour”还包含整型字段“last_contour”,其是“Contour”结构数组中的表示当前“Contour”连接在其尾端的特定“Contour”的索引。数据结构“Contour”还包含整型字段“next_contour”,其是“Contour”结构数组中表示当前“Contour”连接在其头端的特定“Contour”的索引。
数据结构“Contour_Node”存储关于周线的各个元素的信息。如前面所表示的,因为可以算法地生成入射在周线上的事件面中的许多事件面,所以不需要明确地存储它们。从而,相比实际的轮廓周线具有的边和本影事件面,Contour所指的Contour_Node阵列通常具有较少的元素。
数据结构“Contour_Node”包含字符型字段“node_type”,其表示在该节点中包含什么类型的轮廓周线信息。如果节点对应于轮廓周线的外侧拐角,则将该字段的值设置为1。如果节点对应与轮廓周线的简单的内侧拐角,则将该字段的值设置为2。如果节点对应于复合轮廓顶点(CSV),则将该字段的值设置为3。
数据结构“Contour_Node”还包含字符型字段span_type,其表示与节点对应的跨度类型。如果节点表示对于周线的外侧拐角轮廓边的跨度,则将值设置为1。如果节点表示可以包括外侧拐角和内侧拐角两者的跨度,则将值设置为2。如果节点表示要被“跳过”以简化周线的轮廓边的跨度(如结合图30中的步骤3080和3089所描述的)。
数据结构“Contour_Node”还包括表示所代表的跨度的长度的整型字段。一般地,这对应于生成在该跨度中遇到的轮廓边和顶点上生成的本影事件面的数目,从而,可以大于跨度中的轮廓顶点的数目。
数据结构“Contour_Node”还包含整数字段ninfo,其是对于数据结构数组的存储了对于节点的附加信息的特定元素的索引,取决于字段 node_type的值。
数据结构“OC_Info”可以存储由具有等于1的node_type的 Contour_Node所指的附加数据。字符字段svsc存储对于视单元的支撑对应于跨度中一阶轮廓边的本影事件面(UBP)的特定顶点的索引的参考。该可选信息可以加速UBP的运行时间生成但是增加了存储大小。因为可以使用单条周线来在运行时间生成与多个视单元对应的多个UBP,该附加数据可以在运行时间一次构造而不是作为标记轮廓周线信息用数据库来存储。
数据结构“IC_Info”可以存储由具有等于2的node_type的 Contour_Node所指代的附加数据。可选的字符字段ic_type是表示说应该采用哪种类型的构造策略(相邻SV-ME平面的旋转和扫掠或相交)来在运行时间生成入射在内侧拐角声的SE-MV事件面的暗示。尽管可以在运行时间使用先前描述的启发法来做出该判决,但是可以使用预先存储的数据来避免运行时间测试。注意,还能够通过存储对于Contour_Node的 span_type(值4表示对于跨度中的所有内侧拐角轮廓顶点的旋转和扫掠 vs值5表示针对跨度中所有的内侧拐角轮廓顶点的相邻SV-ME平面的相交)的不同值来针对轮廓顶点的整个跨度来存储该暗示数据。
数据结构“IC_Info”可以包含可选的字符数组字段SVSC[4],其表示形成在其上构造内侧拐角轮廓顶点的SE-MV事件面的支撑视单元轮廓周线的特定视单元的暗示。
IC_Info数据结构中所包含的所有信息在运行时间生成,从而实际上不需要用网格数据库来存储。
数据结构CSV_Info可以存储由具有等于3的Contour_Node指代的附加数据。整型字段“mesh”存储对于与周线中的当前UBP相交的特定三角形网格的索引。整型字段“edge”存储对于相交的三角形网格的特定边的索引。这两个字段用于限定形成在由轮廓周线的当前元素所支撑的 UBP与另一条轮廓边的相交部处的CSV。再一次,因为在半数情况下(沿着使得相关联的UBP/VM周线“离开”更远的网格的方向处理当前周线的情况下)很容易确定与UBP相交来形成CSV的轮廓边,所以字段“网格”和“边”是可选的。在沿着使UBP和对应的VMOB_SEG被构造成遇到新网格的方向来在运行处理周线的其他情况下
“mesh”和“edge”字段可以充分地减少新的VM周线的增量构造的运行时间成本。
数据结构CSV_Info还可以可选地将CSV的x、y、z值存储在双数组字段point[3]中。CSV_Info结构还可以包含可选字段char ic_type和 char SVSC[4],如结合数据结构IC_Info所描述的。
因为CSV_Info的所有字段都是可选的,所以不是每个Contour_Node 都可以链接至CSV_Info数据结构,再一次减少了存储成本。
数据结构VM_Info存储关于Contour数据结构的初始轮廓元素相关联的可见性图遮挡边界分段的信息。可以使用网格和边两者的与这些轮廓元素相关联的UBP与VM相交的存储来在运行时间计算VM的对应 OB_SEG。当确定了OB_SEG时,则在运行时间迅速地生成与轮廓周线对应的VM遮挡边界多义线的后续OB_SEG。这与CSV_Info数据结构中的用于加速VM数据的运行时间构造的网格和边参考的存储类似。
下面还再现了在图31A和图31B以及图31中示出对于标记轮廓周线的数据结构。
图31D是示出了采用增量G+数据的示例性实施方式的数据结构的图。
在一种实施方式中,信息的增量G+分组可以与每个视单元-视单元过渡相关联。示例性数据结构DeltaGplus_Header包括表示针对相关联的过渡的开始视单元(view_start)和结束视单元(viewcell_end)以及特定面 (transition_face)的字段。另一个数据元素DeltaGplus_array是对实际上包含或指代网格几何图形的DeltaGplus数据结构数组的指代。在将 DeltaGplus_array存储在主存储器中的一些实施方式中,可以通过指针来访问DeltaGplus_array。在其他情况下,DeltaGplus_array变量可以是数组阵列的索引,例如,对由增量G+数据形成的磁盘存储。另一个字段 DeltaGplus_count在DeltaGplus_array中存储DeltaGplus数据结构的数目。附加的packet_size表示相关联信息的存储与传输字节大小。
DeltaGplus_Header指代一个或多个DeltaGplus数据结构,其又指代对于对应的多边形网格的几何图形、材料、纹理信息。对于该信息的示例性数据结构被示为数据结构三角形、边、顶点。
图32A和图32B是示出了使用对于标记轮廓周线的数据结构来识别轮廓周线的边和顶点的流程图。
图32的流程图示出了在给定简单或复合的、从视单元看去的轮廓周线的已经使用图31的数据结构标记了的一些边的情况下迅速地识别该周线的所有边的方法。
图32的方法利用以下事实:轮廓周线一般在流形网格上形成多义线。因为利用相关联的连接信息网格表示为有向图(使用翼边数据结构或类似的数据结构),所以简化了对连接至其他边的边的识别。
现转向图32A并且使用图31的数据结构,其中数据元素被存储在数组中并且通过些数组的索引来访问这些数组(替代实施方式可以将这些指代投射为运行时间指针)。在一些实施方式中,处理流程从步骤3205开始,其中使用来自对于当前Contour的数据结构的索引contour.vertex来识别当前顶点c_vertex。这是网格的边数目contour.mesh。
处理流程行进至步骤3207,其中使用实际的contour.edge来类似地访问当前边。此外在步骤3207中,将用于更新Contour_Node型数组中的索引的整数设置成0。
处理流程行进至步骤3209以使用索引contour.node_array[ni]访问当前周线节点c_node。
处理流程行进至判决步骤3211以确定c_node.type是否不为3。如果该类型不是3,则当前节点表示对于简单的周线节点的数据并且处理流程行进至步骤3213以将计数器segi设置为0。
处理流程行进至判决步骤3217以确定c_node.span_type是否等于3。如果c_node.span_type等于2,则当前周线跨度的分段可以包括外侧拐角从视单元看去的轮廓顶点和内侧拐角从视单元看去的轮廓顶点,并且处理流程行进至步骤3220。
在判决步骤3220中使用前面所指定的识别内侧拐角简单轮廓顶点的方法来确定由c_edge和next_edge共享的顶点是否为内侧拐角轮廓顶点。
如果在判决步骤3220中确定两个轮廓边形成内侧拐角,则处理流程行进至步骤3224。
在步骤3224中,将整数值p设置成等于入射在如通过应用SE-MV 楔的扫掠构造确定的内侧拐角顶点(步骤3228)上入射的SE-MV楔的数目。
处理流程行进至步骤3232,其中将表示针对周线宽度构造的可见性事件面的数目的计数器segi增加入射在CSV上的SE-ME事件面的数目。
处理流程行进至判决步骤3229以确定segi的值是否等于当前周线节点的跨度长度。
如果在判决步骤3229中确定segi的值等于跨度长度,则宽度已经处理了跨度并且处理流程行进至判决步骤3233。
在判决步骤3233中确定作为对于周线的当前周线节点的索引的整数变量ni的值是否等于周线中节点的数目。
如果在判决步骤3233中确定当前节点是周线的最后一个节点,则处理流程行进至步骤3237,其中对下一个周线进行处理。处理流程在步骤 3237处终止。
另一方面,如果在判决步骤3233中确定当前节点不是周线的最后一个节点,则处理流程行进至步骤3245。
在步骤3245中,推进在步骤3209中使用的节点计数器以访问下一个节点。
如果在判决步骤3217中确定当期当前节点的span_type表示在跨度上不存在内侧拐角节点,则处理流程行进至步骤3221。
同样地,如果在判决步骤3220中确定当前的轮廓边和下一个轮廓边没有形成内侧拐角,则处理流程行进至步骤3221。
在步骤3221中,形成与入射在当前边上的单个SV-ME UBP对应的 VM分段(使用图36、图37及有关图的在本说明书的随后部分所详细讨论的方法)。
处理流程行进至步骤3225以将变量segi增加与构造轮廓边上的单个本影可见性事件面一致的1。
处理流程从步骤3225行进至已经描述了的判决步骤3229。
如果在判决步骤3221中确定节点的类型是与复合轮廓顶点(CSV) 一致的类型3,则处理流程继续至处理32-1,其开始于步骤3250(图32B)。
处理流程行进至步骤3250以使用存储在cnode.ninfo中的数组索引来指代CSV_Info节点中的附加数据。该信息给出了包含CSV的更远网格的网格数目。
处理流程行进至步骤3255以通过CSV_Info访问与当前UBP相交(其中相交部是当前CSV)的边的边数目。
处理流程行进至3260以计算作为当前UBP和C_EDGE的相交部的 CSV。可替代地,可以预计算该值并且将其存储在对应的CSV_Info结构的浮点CSV_Info.point[3]字段中。
处理流程行进至步骤3265,将C_Vertex设置成CSV顶点(位于未被遮挡侧上)之后的下一个顶点的索引,并且处理流程行进至处理32-2,其将处理流程返回至步骤3215。
总体上,图32A的方法使得能够仅使用一些标记的边来识别轮廓周线的多个边。从而,该标记方案使用非常少的存储。该方法利用轮廓周线的自然连贯性以有利于根据一些标记的轮廓边和相关联的暗示信息来在运行时间迅速地生成VM分段。结合图36和图37来详细讨论VM/PVS 的使用标记的轮廓边的该运行时间构造。
图39A、图39B分别示出示例遮挡物和当从连接的视单元A和B观察时由简单的遮挡物形成的遮挡的增量区(DR)。图33A和图33B的流程图示出了对流形三角形网格的当从视单元B观察时被遮挡而从视单元A观察时不被遮挡的连接的区进行识别的方法。该过程提供了对确定流形三角形网格的当从视单元A观察时暴露而当从视单元B观察时不暴露的连接的区的问题的解决方案。
在一些实施方式中,将流形三角形网格的从一个视单元看去暴露而从另一个邻接(或被包含的)视单元看去被遮挡的连接的区称为增量区 (DR)。
将与流形三角形网格的当从视单元B观察时被遮挡而从视单元A观察时不被遮挡(即,位于视单元A的可见性图)的连接的区对应的增量区指定为DRoAB(从A到B的遮挡增量区)。
这与流形三角形网格的当从视单元A观察时暴露(即,位于视单元A 的可见性图)而当从视单元B观察时被遮挡的连接的区对应的增量区相同。这样的增量区被指定为DReBA(从B到A的暴露增量区)。
当然DRoAB=DReBA。
因此,尽管图33A和图33B的方法示出对DRoAB的确定(从视单元A到视单元B的遮挡增量区的确定),但是通过反转所处理的视单元的次序来将该方法应用于确定暴露增量区。
图39A示出了用作遮挡图39B中的较大的多边形网格的遮挡物的示例多边形网格O。
图39B示出了在标记为3910的简单网格的面上引起的可见性图。 3910是由两个三角形形成的矩形多边形网格,没有示出上述三角形以简化该图。
在一些实施方式中,标记为“遮挡区视单元A”的阴影六边形图是在图39A中示出的简单遮挡物的使用视单元A作为源并且使用一阶可见性图构造方法来生成的从视单元看去的遮挡区。注意,由于SE-MV楔仅生成在原始的5边遮挡物O的内侧拐角,所以遮挡区的边比遮挡物O的边多一个。
类似地,标记为“遮挡区视单元B”的无阴影六边形图是在图39A 示出的简单遮挡物的使用视单元B作为源以及使用以及一阶可见性图构造方法生成的从视单元看去的遮挡区。
将“遮挡区视单元B”的位于“遮挡区视单元A”外的部分标记为 DROAB(从A到B的遮挡增量区)和DREBA(从B到A的暴露增量区)。
标记为3920的区位于这两个遮挡区外面,并且因为它位于从视单元 A和视单元B看去可见的区3910内,所以区3920从视单元A和视单元 B看去可见并且不是增量区。
图40示出了除了“遮挡区视单元A”的位于“遮挡区视单元B”外面的被标记为DROBA(从B到A的遮挡增量区)和DREAB(从A到B 的暴露增量区)的部分以外与图39B所示的统一的从区看去的可见性图相同的可见性图。此处,将在其上内接可见性图边界的网格标记为4010,其与图39中的3910相同。“遮挡区视单元A”的黑色部分表示“遮挡区视单元A”的与“遮挡区视单元B”共用的部分。标记为4020的区位于这两个遮挡区的外部,并且因为它位于从视单元A和视单元B看去可见的区4010内,所以区4020基于视单元A和视单元B两者可见并且不是增量区。
从而,在一些实施方式中,但从视区B向视区A移动时,增量分组可包括视区B与视区A之间的可见部分的差DREAB(即,增量区)。因此,通过传输仅包括增量区的增量分组,由于不需要重新传输对于每个视单元的可见图形元素的整个集合,所以减少了传输图形信息的带宽需求。
图41A是示出了对识别CSV和构造用于SV-ME楔的楔线的关于楔的可见性方法(图14、图15和图16)的使用。
图41A示出了图15的关于楔的可见性方法的细节。具体地,图41A 示出了识别CSV的步骤1520的使用以及构造入射在CSV上的楔线(WL) 的步骤1545的使用。
图41A是是示出了标记为4101的视单元的自顶向下的正视图。将多边形网格的一些多边形的一阶轮廓边标记为4104。入射在一阶轮廓边 4104上的SV-ME楔由4104和边4015以及4106包围。使用其中从4104 到标记为4102的支撑视单元顶点(SVV)进行旋转的旋转方法来构造该楔。
在该示例中,一阶轮廓边4104和视单元顶点4102两者位于正视图的平面中。其他标记的视单元顶点4103和4111位于该平面(其在该正视图中不是很明显)的下面。
SV-ME楔与不同的多边形网格对象相交。该相交形成了包围标记为 4112的内部区(位于对应的多边形网格内)的标记为4107的多义线。
标记为4108的点是从视单元元素看去(在该情况下位从点看去)的轮廓顶点。
在这种情况下标记为4108的点还恰巧是从视单元看去的轮廓边上的点。
使用图15的旋转步骤(即,旋转至支撑与当前楔相交的一阶轮廓边的视单元顶点)来构造入射在CSV 4115上的楔线(WL)4109。
标记为4108的点是CSV。该点与SV-ME楔(入射在4104上并且由边4105和4106来定界)与从视单元看去的一阶轮廓边的相交部对应。该一阶轮廓边进出该图的平面。该相交部出现在点4108处。
虚线4110对应于入射在在点4108处进出该图的平面的一阶从视单元看去的轮廓边上的一阶楔的侧视图。该一阶楔是具有标记为4103的支撑视单元顶点的SV-ME楔。
WL 4109与虚边4110之间的三角形区不必是楔的一部分。如果支撑楔的视单元顶点(顶点4109)和支撑相交的一阶轮廓楔的视单元顶点(顶点4103)都不在与楔的平面相同的平面中,则不位于当前楔(由边4104、 4105和4106定界)的平面中的一个或多个SE-MV楔会将当前SV-ME 楔与在虚线4110处从侧面看到的另一个SV-ME楔进行连接。
这些SV-ME楔是在CSV处使用扫掠方法在3D网格遍历处理(步骤 2060)期间形成的。
虚线4113示出了连接两个SV-ME楔的SE-MV楔之一的边界边。在该示例中,通过从视单元顶点4103到4111的扫掠来形成SE-MV楔。该 SE-MV直接连接至共享边4110的SV-ME楔。这是与当前楔在点4108 (CSV)处相交的楔。
通过4111与4102之间的扫掠形成的第二SE-MV楔由虚线4113和位于4109之上的另一条线来定界。第三SE-MV楔通过位于线4109上面的线与线4109自身之间的扫掠连接至边4109。在图14中从侧面将该 SE-MV楔看成是重叠线4109。
在该示例中,三个SE-MV楔用于与当前楔在CSV点4108处相交的 SV-ME楔来连接当前SV-ME楔。
在该情况下,当前楔是SV-ME楔并且可见性问题是从点看去的可见性。在该情况下,每个关于楔的2D不连续性网格点(楔线与网格多边形的相交部)与从VCE(点)看去的遮挡边界点对应。因此,不需要执行步骤1563中的附加测试。
图41B是示出了关于楔的可见性处理的图,包括针对连接SE-MV楔在形成一阶轮廓周线的尖端的轮廓顶点处与多边形网格相交的情况下的楔线构造。
图41B是示出了与图41A的一阶网格轮廓边(标记为4104)相同的一阶网格轮廓边(标记为4123)。两幅图中的SV-ME楔精确地由相同的点(在图42B中标记为4121,在图42A中标记为4102)来支撑。由于支撑点和被支撑的轮廓边是相同,所以结果的SV-ME楔也相同。
在图42B的情况下,视单元比图41A的视单元的大。
在图42B的情况下,从视单元元素看去的轮廓顶点(4127)不与从视单元看去的一阶轮廓边对应。从而,由通过扫掠处理构造该顶点上的 SE-MV楔成的面与多边形网格在该顶点处相交。该相交部是一阶轮廓周线的尖端。图41D示出了3D中的一阶轮廓周线的尖端(标记为CUSP),结合图对细节进行讨论。
在图42B的示例中,在WL 4129与线4131之间形成SE-MV楔。该 SE-MV通过视单元顶点4121(支撑当前楔)和支撑在标记的网格顶点4128 处进出的图的平面的一阶网格轮廓边上的SV-ME楔的视单元顶点4122 之间的扫掠来形成。在其他情况下,该SE-MV楔可以不位于当前楔的平面中。清楚地,该SE-MV楔在多边形网格在关于楔的从视单元元素看去的轮廓顶点4127处相交。从而,在多边形网格4126上出现不连续性网格边界,并且该边界的一个分段包含还是当前楔的内部顶点的顶点4127。因此,点4127是位于多边形网格的可见部分的点并且是位于一阶轮廓周线上的初始点两者,从而使其称为周线的尖端。
虚线4130与形成在一阶轮廓边4128(出入图的平面)上的SV-ME 楔对应。一般地该楔的从视单元看去可见的部分通过由SE-MV楔 (4129-4127-4131)与多边形网格相交来创建的不连续性网格边界来连接至当前楔。在该情况下,位于多边形网格的表面上的不连续性网格边界连接两个另外的不连接的一阶轮廓周线来形成连续的本影事件面。
图41C示出了使用图15及有关的图的2D网格遍历处理的对于 SE-ME楔的关于楔的可见性的处理。
4165是视单元。在该情况下,视单元的具有端点4163和4167的边是对于一阶网格轮廓边4172的支撑视单元边。在该情况下,边4172与支撑视单元边精确地平行并形成SE-ME楔。该SE-ME楔由一阶轮廓边4172 以及线4174和4176组成。后两条线是通过对对应的SE-ME支撑多边形的对角线边进行延伸来形成的。
三个网格对象4170、4188和4186与该楔相交。入射在一阶轮廓顶点上的一阶UBL被示出为虚线4178、4190和4192。
网格4188与楔的包含边界在点4193处相交。在2D网格遍历处理的一种实施方式中,在与先前处理的楔(例如,共享边4147的另一个楔,未示出)相交的点处发起遍历。在该情况下,网格4188的包含点4193的多义线段是2D遍历的开始分段。
遍历行进至标记为4194的下一个分段。分段4194与支撑视单元边之间的轴包含网格4170的分段,所以中止对网格4188的遍历并且将遍历跳转至4170(步骤1510)。
在对网格4170的遍历期间,在对应的从视单元边看去的轮廓顶点(步骤1520和1545)处构造WL 4178和4192。
对于WL中的每一个,通过射线投射来寻找与最近的多边形网格对象的相交部(步骤1555)。被标记为4182和4184的这些相交部分别是潜在的遮挡边界点。
对这些点中的每个点进行测试以确定其从在该情况下为边的支撑视单元元素(VCE)看去是否以别的方式被遮挡(步骤1563)。该测试采用图25的修改的多面体的点包容性测试的2D版本(多边形的点包容性测试)。
在点4182和4184的情况下,使用网格多边形分段和其他一阶WL(包括4190)通过修改的多面体/多边形的点包容性测试证明这些点是从视单元看去以别的方式被遮挡。因此,上述点不是遮挡边界点并且不限制遍历。
最终在被发现具有轮廓顶点的边4194上重新发起遍历。在步骤1545 中,在该从视单元边看去的轮廓顶点(以及从视单元看去的轮廓边)上构造WL 4190。在步骤1555中,将该WL与最近的网格多义线段的相交部确定为点4180。
在步骤1563中,将点4180确定为从支撑视单元边看去不是以别的方式可见,从而是遮挡边界点。该点防止遍历进入到2D网格4186的被遮挡部分。将该被遮挡部分标记为4195。
遍历最终在OB点4180的未被遮挡侧上行进(步骤1583和1585) 直至遇到包含边界点4196。
图41D是示出了多边形网格、视单元和一阶轮廓周线的包括尖端和复合轮廓顶点的部分。将该多边形网格标记为“网格B1”。在一种实施方式中,“网格B1”是流形三角形网格。在图41D中,未示出网格多边形边中的一些边以简化图。
对三个一阶轮廓边和它们的相关联的SV-ME楔(支撑顶点楔)进行标记。没有以这些楔的整个半无限范围来示出这些楔。楔SV-ME-WB2 入射在一阶轮廓E2上。楔SV-ME-WB3入射在一阶轮廓边E2上。这两个楔都是由标记为SVV-B2的视单元顶点来支撑。
将另一个一阶轮廓边的一部分示为标记为VB的网格顶点与比标记为CSV-B的复合轮廓顶点之间的线段。在该视图中,该一阶轮廓边的另一部分被遮挡。(其被楔SE-MV-WB12遮挡)。楔SV-ME-WB1是入射在该一阶轮廓边的整体上的支撑顶点楔。楔SV-ME-WB1具有对应的标记为SVV-B1的支撑视单元顶点。
标记为CUSP-B的网格顶点是MESH-B1的内侧拐角顶点。标记为 SE-MV-WB12的支撑边楔入射在CUSP-B上并且具有对应的标记为 SVE-B12的支撑视单元边。
由顶点VB与顶点CUSP-B之间的线段限定的网格多边形边不是一阶轮廓边,这是因为共享该边的网格多边形都不是相对于所有的“视单元”顶点背面对。因此,包括边E3和E2的连接的一阶轮廓边的链在CUSP-B 处结束。
但是,由楔以及由它们与网格多边形的相交部形成的保守的线性化本影事件面在CUSP-B处是连续的。在这种情况下,连续性是由入射在 CUSP-B上的楔SE-MV-WB12来创建的。楔SE-MV-WB12与网格多边形相交以形成标记为OB-B的遮挡边界分段。楔SE-MV-WB12还与由VB 和CSV-B形成的线上的一阶轮廓边相交。楔SE-MV-WB12与该一阶轮廓边的相交部是复合轮廓顶点CSV-B。在CSV-B处,楔SE-MV-W12将相交的一阶轮廓边分成未被遮挡的分段(由VB和CSV-B限定的分段)和被遮挡的分段(未示出)。
三个线段E2、OB-B和CSV-B在支撑对应的连续的线性化本影事件面(楔SV-ME-WB2、SE-MV-WB12和SV-ME-WB1)的“网格B1”上形成连续的一阶本影周线。
将楔SE-MV-WB12(其在该视图中突出在楔SV-ME-WB1的“上方”) 与SV-ME-WB1的相交部示出成标记为“边1”的交线。构造与这些CLUES 对应的PAU的实施方式确定该相交部。其他实施方式如构造从区看去的可见性图的实施方式可以不明确地确定该相交部。
图33A、图33B、图33C和图33C包括示出了对表示从一个视单元到有关的视单元的过渡的统一可见性图中的VM感兴趣区(ROI)进行识别的方法以及用于对与具有高效遮挡的那些ROI的遮挡边界对应的轮廓周线进行标记的方法的流程图。
图33A、图33B和图33D示出了识别流形三角形网格的称为感兴趣区或ROI的连接的区的方法的实施方式,ROI反映了在视单元过渡(例如,从VC A到VC B)期间的可见性的变化。
该流程图还示出了识别与遮挡边界(OB)或限定ROI的边界对应的轮廓周线的方法。此外,该流程图示出了标记这些轮廓周线(使用图31 的Contour数据结构和相关联的数据结构)并且存储附加的与周线相关联的信息(例如,图31A的VM_Info数据)。
根据一些实施方式,将图33A至图33D的方法作为离线或预计算处理来进行。本方法能够识别增量PVS数据的增量G+和增量G-组件,可以在根据现有的PVS增量地构造新的PVS的运行时间处理期间使用上述组件。可替代地,图33A至图33D的方法能够识别和标记与ROI的边界对应的轮廓周线。随后可以使用该标记轮廓周线信息来在运行时间构造增量G+和增量G-。相比明确地存储/传输增量G+和增量G-分组,该方法可以显著地需要较少的存储/传输资源。
如果视单元之一被完全包含在另一个视单元中,则ROI对应于仅从被包含的视单元看去可见的区。在一些实施方式中,使用与这些类型的 ROI对应的标记轮廓周线来在运行时间根据父视单元的VM来构造子视单元VM(使用暗示的、简化的3D网格遍历),从而避免了在特定情况下对增量G-信息的明确存储。
如果两个视单元共享面并且一个视单元没有被包含在另一个视单元内(称为“邻接”的关系),则ROI对应于增量区(DR)。对于从VC A 到VC B的视单元过渡(称为AB过渡),DR具有两种类型。一种类型的增量区DROAB(从A到B的遮挡增量区)包含从视单元A看去可见而从视单元B看去不可见的网格三角形分段。DROAB也是DREBA(从B 到A的暴露增量区)。同样地,DROAB=DREBA。DROAB对应于针对 AB过渡的增量G-数据,而DREBA对应于针对AB过渡的增量G+数据。可以使用与这些ROI的边界对应的标记轮廓周线来在运行时间构造增量 G+和或增量G-数据(还使用暗示的、简化的3D网格遍历),从而避免了在特定情况下对增量G+和增量G-多边形分段信息的明确存储。
现转向图33A至图33D,在处理的第一阶段,指定针对具体视单元过渡要识别的ROI的类型。ROI是具体的统一可见性图的表示视单元过渡的特定区。对于AB过渡的统一可见性图是包含从视单元A和视单元B 看去可见的网格三角形分段和对于视单元中的每一个的从视单元看去的 VM的OB_SEG的可见性图。
在一些实施方式中,处理流程从步骤3305开始,在该步骤中确定以下视单元是否具有父子(包含-被包含)关系:要确定针对具体单元过渡的增量可见性信息。
如果在判决步骤3305中确定对于要确定增量可见性信息的视单元具有父子关系,则处理流程行进至步骤3307。
在步骤3307中,要识别的ROI是从针对具体的视单元过渡的被包含 (子)视单元看去可见的区。因为对于子视单元的VM总是父视单元的子集。所以在一些实施方式中使用针对过渡计算的明确的增量G-信息来构造子VM。但是,如果子视单元明显地小于父视单元,则对应的增量 G-信息会相对地大。可替代地,在本方法中,可以将对于这样的过渡的感兴趣区(ROI)设置成仅从子视单元看去可见的那些区。通过识别这些区的种子三角形和边界,通常能够通过对统一可见性图进行以种子三角形开始的简化的、暗示的3D网格遍历使用更少的信息根据父视单元的VM来确定子视单元的VM/PVS。
如果在判决步骤3305中确定要确定增量可见性信息的视单元不具有父子关系,则处理流程行进至步骤3309。
步骤3309表示两个视单元是邻接的(视单元共享面并且一个视单元煤没有被包含在另一个视单元内)。父子和邻接关系是两个视单元的两个特殊布置,其中从一个视单元到另一个视单元的过渡出现在完全被包含在两个视单元的联合中的空间体积。使用这两个视单元步骤,保证了如随后在处理中构造的ROI完全和保守地反映了新近可见和新近暴露的区(例如,因为在有关的视单元之间没有“间隙”,所以错过了短暂可见的几何图形)。
处理流程行进至步骤311以表示ROI是可见性增量区(DR)。
处理流程行进至判决步骤3313以枚举DR的各种类型。如果在判决步骤3313中确定要识别的DR从VC A看去可见并且从视单元B看去不可见,则处理流程行进至步骤3315。
在步骤3315中,要识别的ROI是DROAB和DREBA。
如果在判决步骤3313中确定要识别的DR从VC B看去可见而从视单元A看去不可见,则处理流程行进至步骤3317。
在步骤3317中,要识别的ROI是DREAB和DROBA。
在一些实施方式中,步骤3305至步骤3317取决于过渡视单元之间的关系以及增量可见性信息的期望用途仅枚举出针对具体的视单元过渡要识别的ROI的类型。对于邻接视单元A和B之间的沿着AB方向的具体过渡,通常识别这两类ROI,DREAB和DROBA。这两类ROI一起完全描述了对于视单元过渡的可见性变化(增量VM/增量PVS)。
从步骤3319中开始,开始的统一可见性图中的这些ROI区的实际识别。
在步骤3319中,确定对于包括视单元A和视单元B的联合的视单元的VM(例如,使用先前描述的从视单元看去的VM构造方法中的任何方法)。还可以使用该VM的任何超集作为随后构造与针对过渡的两个视单元的从视单元看去可见性图对应的OB_SEG(步骤3321)的开始VM。该事实使得能够使用从区看去的可见性问题的有效的层次分解来解决增量可见性信息(明确的增量G分组或对应的标记的周线数据)的确定。在该层次方法中,可以将从包含视单元A和视单元B两者的任何视单元看去可见的三角形分段用作构造用于视单元A和视单元B的统一的VM 的VM。(还可以使用该事实来减少增量PVS存储需求,这是因为对于许多视单元过渡的增量PVS最终可以根据与包含其他视单元的视单元对应的单个统一可见性图的数据来生成)。
处理流程行进至步骤3321,其中在从视单元(A+B)看去可见的三角形分段上构造与根据视单元A确定的从视单元看去的可见性图对应的 OB_SEG、和与根据视单元B确定的从视单元看去的可见性图对应的 OB_SEG。将从视单元(A+B)看去可见的三角形分段连同从视单元A 看去的OB_SEG和从视单元B看去的OB_SEG的集合被称为针对视单元 A和视单元B的统一可见性图。在一些实施方式中,这些OB_SEG的构造采用先前描述的对于从视单元看去的VM构造3D/2D网格遍历方法(图 20和有关的图)。
当然,如果视单元A是视单元B的父,在步骤3319中构造的从视单元(A+B)看去的可见性图已经包含从视单元A看去可见的所有网格三角形分段以及与从视单元A看去的轮廓周线对应的OB_SEG。在步骤 3321中添加与视单元B对应的OB_SEG。在两个视单元邻接和/或所使用的开始VM是VM(A+B)的超集的情况下,在步骤3321中一般必须构造两个OB_SEG集合。
处理流程从步骤3321行进至处理33-1,其从步骤3323(图33B)开始。在步骤3323中,对统一可见性图进行遍历以限定由从视单元A和视单元B两者看去的OB_SEG布置形成的VM区。在该遍历中,选择三角形并且遍历行进至由OB_SEG形成的边界。在该步骤中,3D网格遍历作为已经构造的统一可见性图的广度优先遍历来进行。遍历行进至遍历受限的轮廓周线及对应的遮挡边界。该简单的遍历方法确保了对具体的ROI 的所有三角形/分段遍历至ROI的边界,即使ROI具有内部孔或跨越多个单独的三角形网格。(VM的前面的构造最终可以将三角形网格的部分“融合”成具有内部孔的单一ROI,上述ROI对应于更远的网格三角形的、穿过由内轮廓周线包围的较近的三角形网格中的孔可见的未被遮挡区)。
处理流程行进至步骤3325以确定在当前遍历/VM区是否剩余任何未遍历的三角形(即,连接至当前三角形的未遍历的三角形,其中连接不需要穿过遮挡边界)。如在步骤3325中确定在当前遍历中存在未遍历的三角形,则处理流程行进至步骤3327,遍历中的下一个三角形。
另一方面,如果在判决步骤3325中确定在当前遍历中没有剩余三角形,则因为已经遍历完当前VM的所有三角形,所以处理流程行进至步骤3328。
在步骤3328中确定在遍历步骤3323和3325中识别的统一VM区是从视单元A看去,还是从视单元B看去,还是从两者看去可见。在一些实施方式中,使用简化了的图25的多面体的点包容性测试来对此进行确定。在父子有关的视单元过渡的情况下,因为所有的遍历的区从父视单元看去可见所以可以对该测试进行一些简化。
以下替代实施方式是可能的:在VM区中发起遍历(步骤3323)以前首先对VM区中的单个点进行确定(步骤3328和3331)。该方法使得能够在不对VM区进行全遍历的情况下识别不是ROI的VM区。
处理流程行进至判决步骤3331以确定VM的遍历的区是否对应与先前针对特定的视单元过渡在早先的步骤3305至3317中确立的感性区 (ROI)。这是通过对步骤3328的结果(例如,从A看去可见、从B看去可见、或从两者看去可见、或从两者看去都不可见;后者仅当所使用的 VM是VM(A+B)的超集时才有可能)与在早先的步骤3305至3317中确定的ROI的限定进行比较来确定。
如果在判决步骤3331中确定统一VM的遍历的区不是ROI,则处理流程行进至判决步骤3349以确定在VM是否有任何未遍历的三角形。
如果在判决步骤3349中确定在统一可见性图中剩余任何未遍历的三角形,则处理流程行进至步骤3337,其中选择统一VM中的下一个三角形(属于新的VM区)以用于处理。
如果在判决步骤3349中确定在统一VM中没有剩余未遍历的三角形 (不再有要处理的统一VM区),则处理流程行进至步骤3352。处理流程在3352处终止。
如果在判决步骤3331中确定VM的遍历的区是ROI,则处理流程行进至步骤3332。
在判决步骤3332中确定当前ROI是否是对于视单元过渡的遮挡增量区(DR_O)。如果ROI是DRO,则处理流程行进至步骤3334。
在步骤3334中,使用先前针对被遮挡区描述的度量来确定ROI的有效静态遮挡。将称为有效动态可见性(EDV)的变量的值设置成ROI的 ESO。
如果在判决步骤3332中确定当前ROI不是DRO,则处理流程行进至步骤3333。
在判决步骤3333中确定当前ROI是否是针对视单元过渡的遮挡增量区(DR_E),如果ROI是DRE,则处理流程行进至步骤3336。
在步骤3336中,使用先前针对被遮挡区描述的度量来确定环绕当前 ROI的被遮挡区(称为环绕被遮挡区或SOR)的有效静态遮挡(ESO)。将称为有效动态可见性的变量的值设置为SOR的聚合ESO。
如果在判决步骤3333中确定ROI不是暴露增量区,则处理流程行进至步骤3335。
在判决步骤3335中确定当前ROI是否对应于从针对特定的父子视单元过渡的子视单元看去可见的区对应。如果ROI是子区,则处理流程行进至步骤3338。
在步骤3338中,使用先前针对被遮挡区描述的度量来确定环绕当前 ROI的被遮挡区(称为环绕被遮挡区或SOR)的有效静态遮挡(ESO)。将称为有效动态可见性的变量的值设置成SOR的聚合ESO。注意,对于 DRE和子ROI的情况进行相同的处理,但是为了说明,在此处它们是不同的。
接着步骤3334、3336或3338,处理流程行进至步骤3346。
在判决步骤3346中确定对于ROI的EDV(当前ROI在表示对于特定视单元的增量可见性上的“有效性”或效率的量度)是否大于预定值(例如,VALUE2)。
如果在判决步骤3346中确定对于ROI的EDV不大于预定值 (VALUE2),则处理流程行进至步骤3340。
如果在判决步骤3340中确定如果当前感兴趣区的边界(以及对应的轮廓周线)是否能够被明显地简化(例如,使用图30的方法,其中将ESO 用作指导边界的保守简化的度量)。如果ROI是DRO,则图30的方法可以直接应用至该区。如果ROI是DRE或子区,则将图30的方法应用于环绕当前ROI的被遮挡区(SOR)。SOR可以被限定为紧邻ROI的遮挡区。可选地,SOR可以包括连接至该SOR集合的其他遮挡区。该方法使得保守的简化处理能够扩展到相邻区以最终实现充分地简化了的ROI。
如果在判决步骤3340中确定边界能够被简化,则在判决步骤3346 中对由简化了的遮挡边界包围的区的新的保守表示的EDV进行确定。
另一方面,如果确定当前ROI的边界不能被简化来实现目标的EDV 值,则处理流程行进至步骤3343。
在步骤3343中,当前ROI被确定为具有低的EDV,从而被作为针对当前视单元过渡的增量可见性的显著组件而被忽略。在该步骤中,如果 ROI对应于DREAB,则位于区内的对应的网格三角形被保守地包括在对于视单元A的VM中。在没有通过DR的边界分段引入新的三角形的情况下将原始三角形包括在内。如果当前ROI对应于DROAB,则区的对应的网格三角形保守地被包括在对于视单元B的VM中。在没有通过DR 的边界分段引入新三角形的情况下将原始三角形包括在内。
如果统一可见性图ROI对应于父子视单元过渡并且区的EDV为低,则环绕被遮挡区的几何图形保守地被包括在ROI中,并且可以重新计算扩展区的EDV。对于DRE的情况,可选地,可以延伸SOR区至相邻的区以超出紧毗连的SOR。该方法能够识别以下极端情况:父VM和子VM 没有明显地不同。在这种情况下完全地将子ROI移除。
步骤3346、3340和3343一起使得能够确定区的ESV,并且如果ESV 的值太低,则可以尝试保守地简化边界从而增加ESV。如果ESV仍然低于预定值,则不认为ROI对应与针对视单元过渡的增量可见性的明显区,并且可以忽略视单元过渡。
使用ESV(根据ESO获得)作为ROI的有效性的度量明显地减少了该方法所需的存储和计算时间。因为在许多情况下,小的遮挡或暴露区会由于ROI边界的重新三角化而引入大量的环绕ROI的新三角形,所以这是成立的。这些区往往具有低的ESO,从而使用本方法不会将其认为是有效的遮挡(或暴露)区。替代地,例如,将针对特定AB过渡的基元的新近可见集简单保守地认为是对于视单元A的VM/PVS。
如果在判决步骤3346确定当前的ROI的EDO超过预定值(例如, VALUE2),则处理流程行进至处理33-2,其开始于步骤3355。
在步骤3355中,对增量G+和/或增量G-(其可以是包括指代实际的新近被遮挡的多边形的指针或索引信息的增量I-信息)或子视单元数据 (如果视单元过渡是父-子)的存储大小进行估计,并且将变量SS的值设置成与该存储大小成一定正比。包含许多三角形/三角形分段的ROI往往具有对于对应的增量G+或增量G-分组的高存储成本。方法所使用的替代的存储格式用对限定对应的ROI的轮廓周线/VM边界的标记来取代增量 G分组的明确存储。仅当需要使用简化的3D网格遍历来生成实际的增量 G信息,上述简化的3D网格遍历采用根据针对具体的视单元过渡的标记轮廓周线信息来生成的统一VM区边界。
处理流程行进至步骤3358,其中对SS的值与预定值(例如,VALUE3) 进行比较。如果在判决步骤3358中确定SS的值不大于VALUE3,则处理流程行进至步骤3361。
在步骤3361中,直接存储对于ROI的增量G数据并且处理流程行进至判决步骤3388。
判决步骤3388与先前描述的步骤3349相同。
如果在判决步骤3358中确定SS的值大于预定值VALUE3,则处理流程行进至步骤3364。
步骤3364至3385是识别与形成ROI的边界(因为ROI可以包含孔,所以是外边界和内边界两者)的OB_SEG对应的轮廓周线的步骤。在这些步骤中,标记对应的轮廓周线(其是原始三角形网格的边和顶点加与内侧拐角简单和复合轮廓顶点处的SE-MV楔对应的一些附加边),并且识别和存储与ROI的连接组件一对一的种子三角形。
从步骤3364开始,对形成与从视单元A看去的OB_SEG和从视单元B看去的OB_SEG对应的ROI的外边界和轮廓周线的这些OB_SEG 进行识别。
处理流程行进至步骤3367,其中包围ROI的OB_SEG彼此相交并且将相交部指定为IP并且使用对于对应的轮廓周线的对应VM_INFO数据结构(在图31A中给出的数据结构)来存储。
处理流程行进至步骤3370,其中对于ROI的外边界对应的轮廓周线进行标记并且用先前结合图31A、图31B和图31C描述的数据结构(可选地包括DeltaGplus_attach_polyline info)来存储。
处理流程行进至步骤3373,其中对形成与从视单元A看去的 OB_SEG和从视单元B看去的OB_SEG对应的ROI的内边界和轮廓周线的这些OB_SEG进行识别。
处理流程行进至步骤3376,其中形成ROI的内边界的OB_SEG彼此相交并且相交部被指定为IP并且使用对于对应轮廓周线的对应 VM_INFO数据结构(图31A中给出的数据结构)来存储。
处理流程行进至步骤3379,其中对与ROI的内边界对应的轮廓周线进行标记并且使用先前几何图31A、图31B和图31C描述的数据结构来存储。
处理流程从步骤3379行进至处理33-4,其从步骤3382开始(图33D)。在步骤3382中,对与针对具体的视单元过渡的ROI对应的所有(可能简化了的)外轮廓周线和内轮廓周线进行标记并且与具体的视单元过渡相关联。
处理流程行进步骤3385,其中,将对于ROI的每个连接的组件的一个三角形存储在针对具体的视单元过渡的“TRI_种子_列表”中。
接着,处理流程行进至步骤3388和3390(如果在VM中不存在未遍历的三角形)。在一些实施方式中,这些步骤分别与先前描述的步骤3349 和步骤3352相同。如果在VM中存在未遍历的三角形,则处理流程行进至处理33-3,其开始于步骤。
与父-子视单元过渡对应的ROI从以下意义上来讲不是增量区:对于该类型的ROI的种子三角形从针对父-子视单元过渡的两个视单元看去可见。使用该类型的ROI,可以使用根据ROI的对应的标记轮廓周线构造的外边界和内边界来根据父VM有效地构造子视单元的VM/PVS。该构造使用图36和图37的暗示的、简化的3D网格遍历方法。
相比之下,与邻接视单元之间的过渡对应的ROI是可见性增量区 (DR)。使用该类型的ROI,可以根据从视单元A+B看去可见的网格三角形/分段连同ROI的根据对应的标记轮廓周线来构造的外边界和内边界来有效地构造增量G+和增量G-。该构造也使用图36和图37的暗示的、简化的3D网格遍历方法。
图34A和图34B:使用单条周线的标记轮廓周线信息来在运行时间迅速地构造可见性图遮挡边界分段的方法。
如前面所描述的,识别对于视单元过渡(例如,从A到B)的有效增量区(DR),确立(使用图33的方法)生成DR遮挡边界的对应的轮廓周线以及使用图31A和图31B的数据结构来标记上述轮廓周线。将该标记作为离线处理来进行。
当存储标记轮廓周线信息(如与三角形网格相关联的数据)时,能够在运行时间使用该数据根据连接的或包含视单元的已知可见性图构造与特定的视单元对应的可见性图。
图34A和图34B是示出了使用先前存储针对特定的视单元过渡的标记轮廓周线信息根据与连接的或包含视单元对应的已知可见性图来构造与特定视单元对应的可见性图的方法的流程图。
在一些实施方式中,处理流程从步骤3405处开始,使用与网格相关联的用于采用图30和图33A以及图33B的标记方法来存储标记轮廓周线信息的数据结构(图31A和图31B)来识别标记轮廓周线(先前针对所考虑的特定视单元过渡生成和存储的)。
处理流程行进至步骤3410以及将当前流形三角形网格(“网格”)设置成由图31的Contour数据结构的Contour.mesh字段指代的具体网格。
处理流程行进至步骤3415以将“当前_边”(流形三角形网格边)设置成由图31A的Contour数据结构的Contour.edge字段指代的具体边。
处理流程行进至步骤3420以将“顶点”(流形三角形网格顶点)设置成由图31A的Contour数据结构的Contour.vertex字段指代的具体顶点。
处理流程行进至步骤3425以将变量“节点计数”设置成0。
处理流程行进至步骤3430,其中构造与“当前_边”对应的所有可见性图遮挡边界分段(VM OB_SEG)。使用图35所示并且结合该图详细讨论的处理来构造这些VM OB_SEG。
处理流程行进至步骤3435以将变量“节点”设置成指代由当前周线的第一个节点指代的具体的Contour_Node数据结构。
处理流程行进至步骤3450以确定当前Contour_Node数据结构(图 31A)的NODE.node_type是类型3。如果node_type是类型3,则节点对应于复合轮廓顶点并且处理流程行进至处理34-1,其从图34B中的步骤 3455处开始。
在步骤3455中,现将“网格”变量(在步骤3410中被初始化)设置成由当前节点指代的CSV_INFO[NODE.NINFO].mesh指代的具体网格, node_type为3的当前节点是复合轮廓顶点(CSV)节点。
处理流程行进至步骤3460,其中将变量“下一个_边”(表示轮廓周线多义线中的下一个边)设置成由当前周线节点指代的CSV_Info数据结构的CSV_INFO[NODE.NINIFO].edge字段指代的边。
处理流程行进至步骤3465以将变量“顶点”设置成由当前周线节点指代的CSV_Info数据结构的CSV_INFO[NODE.NINFO].point字段指代的顶点。
步骤3455、3460和3465的效果是在单个点(复合轮廓顶点)处将一个或多个流形三角形网格的面上的两个多义线连接在一起。在设置了当前“网格”、“下一个_边”和“顶点”变量以反映至复合轮廓周线的该融合后,处理流程行进至处理34-2,其将处理流程返回至步骤3480(图34A)。
如果在判决步骤3450中确定“节点_类型”不是3(即,该节点不对应于复合轮廓顶点),则处理流程行进至步骤3470。
在步骤3470中,将变量“边计数”的值初始化成0。
处理流程行进至步骤3475以将变量“下一个_边”设置成指代流形三角形网格的连接至当前边并且还是(一阶、从视单元看去的)轮廓边的边。可以基于流形网格的连接性和一阶轮廓边的定义(参见图3)来容易地对该边进行识别。可替代地,将“下一个_边”识别为连接至当前边的边,其中连接的边已经被标记为标记轮廓周线边。“下一个_边”的该定义用在以下情况中:轮廓周线没有充分地偏移或迁移(因为前面所描述的轮廓边的“回缩”)。在情形是在预处理期间确立的并且存储在struct Contour数据结构的next_edge_type字段中。如果next_edge_type具有0值,则“下一个_边”被识别为先前已经标记了的下一个连接的边。另一方面,如果 next_edge_type值为1,则“下一个_边”被识别为是(一阶)轮廓边的下一个连接的边。
处理流程行进至步骤3480以将“当前_边”设置成“下一个_边”。
处理流程行进至步骤3480,其中可见性图遮挡边界分段(VM OB_SEG)由受当前楔支撑的本影可见性事件面与流形三角形网格的相交部产生。可见性图的从标记轮廓周线的当前边导出的这些元素是使用在图 35的流程图并且结合该图详细讨论的方法来构造的。
当构造由当前轮廓边生成的VM OB_SEG时(使用在图35的流程图中示出的方法),处理流程行进至步骤3485。
在步骤3485中,增大变量“边计数”。
处理流程行进至步骤3488以确定“边计数”是否小于在图31A的 Contour_Node数据结构中指定的对于当前节点的span_length (NODE.span_length)。
如果在判决步骤3488中确定“边计数”小于span_length,则处理流程返回至步骤3475,其中识别下一个边。
另一方面,如果在判决步骤3488中确定“边计数”不小于span_length,则处理流程行进至判决步骤3490。
在判决步骤3490中确定“节点计数”是否小于周线中由数据字段 CONTOUR.num_nodes给出的节点数目,其中CONTOUR是对正在被处理的当前标记轮廓周线的指代并且采用图31A所示的数据结构Contour。
如果在判决步骤3490中确定“节点计数”小于CONTOUR.num_nodes,则处理流程行进至步骤3492。
在步骤3492中,增大“节点计数”并且处理返回至步骤3435,其中选择下一个节点并且处理继续。
另一方面,如果在判决步骤3490中确定“节点计数”不小于 CONTOUR.num_nodes,则处理流程行进至步骤3495。
步骤3495表示已经处理了标记轮廓周线并且处理应该行进至下一个标记轮廓周线。处理流程在步骤3495处终止。
通过图36所示并且结合该图详细讨论的处理来对针对特定视单元的所有标记轮廓周线的处理进行总体控制。
图35A和图35B:示出了构造从标记轮廓周线的单条轮廓边导出的可见性图遮挡边界分段的方法的流程图。
图34是在给定使用图31A的数据结构针对整个周线存储的少量数据的情况下用于识别标记轮廓周线的各个边的流程图。图35是构造从标记轮廓周线的单条边导出的VM OB_SEG的处理的流程图。
通过在对轮廓周线的处理(图34的步骤3482)期间调用图35的处理,图34的处理有效地导致了针对整个标记轮廓周线的所有 VM_OBSEGD的构造。
在一些实施方式中,当遇到标记的轮廓边时,处理流程从步骤3510 开始。这对应于调用图34的处理的步骤3482。
处理流程行进至判决步骤3520以确定当前标记轮廓周线节点(“节点”,从调用处理传递)并且在图31所指定的Contour_Node.node_type 数据字段中指定的span_type是否等于值1。
如果在判决步骤3520中确定当前标记轮廓周线节点的span_type等于值1(表示在使用图31A的Contour_Node.node_type数据字段的标记轮廓周线上形成外侧拐角),则处理流程行进至步骤3450。
在步骤3540中,使用先前结合图4描述的旋转处理来构造SV-ME 楔。
处理流程行进至步骤3580以确定已经构造了楔的当前轮廓边是否是周线中的第一条边。
如果在判决步骤3580中确定轮廓边是周线中的第一条边,则处理流程行进至步骤3592。
在步骤3592中,根据在图31A的数据结构中指定的 CONTOUR.VMinfo.point、CONTOUR.VMinfo.mesh和 CONTOUR.VMinfo.tri数据字段来获得预存储的楔-网格三角形相交信息。该点对应于楔与特定网格三角形的预计算和预存储的相交部,其中该相交部是包括与标记轮廓周线相关联的VM边界的VM OB_SEG链的初始OB_SEG。在识别对于特定视单元过渡的轮廓周线的、产生具有最小有效动态遮挡值的离线处理期间预先预计算并且存储该信息(图33的步骤3381)。因此,如果该边是标记轮廓周线中的第一条边,则步骤3592 生成对应的VM边界第一OB_SEG。
另一方面,如果在判决步骤3580中确定正在处理的轮廓边不是周线中的第一条边,则处理流程行进至步骤3585。
在判决步骤3585中,确定当前节点是否具有与其相关联的 CSV_Info,即,当前轮廓边是否支撑与另一个可见轮廓边相交的楔。如果是,则Contour_Node.node_type值会等于3(图31A)并且 Contour_Node.ninfo值会是CSV_Info数据结构数组(图31B)中的索引。在一种实施方式中,不用标记轮廓周线存储CSV_Info数据而是替代地将每条周线的初始点限定在CSV处,从而将对应的数据存储在 Contour.mesh、Contour.triangle和Contour.vertex字段中。
如果在判决步骤3585中确定当前节点与CSV_Info数据相关联,则处理流程行进至步骤3590。
在步骤3590中,从CSV_Info[Contour_Node.inifo].mesh、 CSV_Info[Contour_Node.inifo].edge和 CSV_Info[Contour_Node.inifo].point数据结构中读取初始的VMOB_SEG数据。
另一方面,如果在判决步骤3585中确定当前节点不与CSV_Info相关联,则处理流程行进至步骤3595。
在步骤3595中,使用来自周线中的最后一个轮廓边的VM OB_SEG 网格、三角形和点相交数据来构造与当前轮廓边对应的VM OB_SEG。因为VM OB_SEG形成流形三角形网格的面上的多义线,所以来自相邻边的OB_SEG的构造是多面体上的多义线的直接分段构造。
接着步骤3590或步骤3595,处理流程行进至处理35-1和处理35-2,其从图35B的判决步骤3596开始。在判决步骤3596中,确定 VM_INFO.RETRIANGULATE_HINT字段是否不等于0。这是图31A的 VM_INFO数据结构的字段,并且如果确定毗连可见性图区的有效动态遮挡会通过遮挡边界处的重新三角化而增加,则在可见性图的运行时间构造期间将该字段设置成值1。
如果在判决步骤3596中确定 VM_INFO.RETRIANGULATION_HINT的值不等于0,则处理流程行进至步骤3597。
在步骤3597中,在边界处对毗连对应的遮挡边界的三角形进行重新三角化。
另一方面,如果在判决步骤3596中确定 VM_INFO.RETRIANGULATION_HINT等于0,则处理流程行进至步骤 3599。
在步骤3599中,没有在边界处对毗连对应的遮挡边界的三角形进行重新三角化。在该情况下,将包括轮廓周线的三角形“链接”至部分地被遮挡三角形而不进行重新三角化。处理流程在步骤3599处终止。
如果在判决步骤3520中确定NODE.span_type不等于值1,则处理流程行进至步骤3525。
在判决步骤3525中确定NODE.span_type是否等于值2,如果等于值2,则处理流程行进至步骤3545。如果node_type等于值2,则周线可以包括外侧拐角轮廓顶点和内侧拐角轮廓顶点。从而,处理流程顺序地继续至3545以确定当前轮廓边是否涉及在与周线的下一条轮廓边的外侧拐角或内侧拐角中。
如果在判决步骤3545中确定轮廓周线的当前边和下一条边形成外侧拐角,则处理流程行进至步骤3540,如前面所描述的。
另一方面,如果在判决步骤3545中确定轮廓周线的当前边和下一条边的形成内侧拐角,则处理流程行进至步骤3555。
在步骤3555中,使用先前结合图5A和图5B描述的扫掠处理来形成入射在内侧拐角轮廓顶点上的SE-MV楔。从而,处理流程行进至步骤 3580,如前所述。
如果在判决步骤3525中确定NODE.span type不等于值2,则处理流程行进至步骤3530。
在判决步骤3530中确定NODE.span_type的值是否等于3。如果在判决步骤3530中确定NODE.span_type的值等于3,则处理流程行进至步骤3560。在这种情况下,span_type表示应该通过在本影楔/VMOB_SEG 构造期间跳过周线的边的子集来简化周线。如在图30B的步骤3075和 3089中的识别DR的差别有效静态遮挡(也称作有效动态遮挡)和简化轮廓周线期间对该信息进行预计算并且将该信息预存储在对应的 Contour_Node.span_type和Contour_Node.span_length数据结构中。
在步骤3560中,将NODE.span_length与变量SPAN_COUNTER(在遇到周线以前被初始化为0)进行比较以确定应该在轮廓周线的那些顶点之间构造简化的本影可见性事件面和对应的VM OB_SEG。如果在判决步骤3560中确定SPAN_COUNTER小于NODE.span_length,则处理流程行进至步骤3565,其表示没有在当前边上形成楔。
处理流程然后行进至步骤3570,其中将当前轮廓边直接链接至针对整个轮廓周线的单个OB_SEG,其当判决步骤3560指导处理朝着步骤 3545或步骤3540时最终在步骤3540或3545中构造。
如果在判决步骤3530中确定NODE.span_type不等于值3,则处理流程行进至步骤3535。
在判决步骤3535中确定NODE.span_type是否等于值3。
如果在判决步骤3535中确定NODE.span_type等于值3,则处理流程行进至步骤3575。在该情况下,span_type表示不应该使用扫掠处理来构造入射在周线的内侧拐角轮廓顶点上的本影事件面,而是应该使用将相邻SV-ME楔的平面相交的较简单的方法来构造。
从而,在步骤3575中,使用相邻SV-ME楔的的平面的相交来构造 SE-MV楔(以及对应的VM OB_SEG)并且处理流程行进至先前所描述的步骤3580。
图36是示出了对使用根据预存储的标记轮廓周线构造的ROI边界来构造可见性图ROI的运行时间处理进行控制的处理的流程图,其中ROI 边界限定/定界了对ROI进行遍历的简化的、暗示的、运行时间3D网格遍历处理。
如先前结合图33A至图33D所描述的,可以将针对特定视单元过渡的增量可见性数据描述为统一可见性图中包含从两个视单元看去可见的网格三角形分段并且还包含与两个视单元对应的从视单元看去的遮挡边界的感兴趣区(ROI)。
增量可见性数据的类型取决于对应的ROI的构造,其取决于两个视单元的描述视单元过渡的关系。
如果视单元之一完全被包含在另一个视单元中,则ROI可以对应于仅从被包含的视单元看去可见的区。可以将与这些类型的ROI对应的标记轮廓周线用于在运行时间根据父视单元的VM来构造子视单元的VM (使用暗示的、简化的3D网格遍历),从而避免了在特定情况下对增量 G-信息的明确存储。
如果两个视单元共享面并且一个视单元没有被包含在另一个视单元内(称为“邻接”的关系),则ROI对应于增量区(DR)。对于从VC A 到VC B的视单元过渡(称为AB过渡),DR有两种类型。一种类型的增量区DROAB(从A到B的遮挡增量区)包含从视单元A看去可见而从视单元B看去不可见的网格三角形分段。DROAB也是DREBA(从B到 A的暴露增量区)。同样地,DREAB=DROBA。DROAB对应于针对AB 过渡的增量G-数据而DREAB对应于针对AB过渡的增量G+数据。可以将对应于这些ROI的边界的标记轮廓周线用于在运行是构造增量G+和/ 或增量G-数据(也使用暗示的、简化的3D网格遍历),从而避免在特定情况下对增量G+和增量G-多边形分段信息的明确存储。
在一些实施方式中,处理流程从步骤3605中开始,其中将针对特定的视单元过渡的所有标记轮廓周线的列表作为数组“LAB_CON_列表”来访问。
处理流程行进至步骤3610,其中“LAB_CON_列表”中的标记的周线中的每一个都经受进一步的处理。
在对“LAB_CON_列表”中的标记轮廓周线进行处理的第一个步骤中,处理流程行进至步骤3615,其中使用图34的流程图所示的处理来识别标记轮廓周线的边,并且将上述边存储在“LAB_SIL_边_列表”中。
处理流程行进至步骤3620,其中“LAB_SIL_边_列表”的边经受进一步的处理。
在对“LAB_SIL_边_列表”中的边进行处理的第一步骤中,处理流程行进至步骤3625,其中使用图35的流程图中所示的处理来构造与“LAB_SIL_边_列表”的边对应的VMOB_SEG。
处理流程行进至判决步骤3630以确定“LAB_SIL_边_列表”是否为空。如果在“LAB_SIL_边_列表”中有更多的边要处理,则选择下一个未处理的边并且并且处理返回至步骤3620。
如果在判决步骤3630中确定在“LAB_SIL_边_列表”中没有更多的边要处理,则处理流程行进至步骤3635。
在判决步骤3635中确定在“LAB_CON_列表”中是否有任意更多的标记的周线要处理。如果在判决步骤3635中确定在“LAB_CON_列表”中有更多的标记的周线要处理,则选择下一个未处理的周线并且处理流程返回至步骤3610。
另一方面,如果在判决步骤3635中确定在“LAB_CON_列表”中没有更多的标记的周线要处理,则处理流程行进至步骤3640。
在步骤3640中,将作为对于与特定的视单元过渡对应的每一个增量区的一个三角形的指代的预计算的列表的三角形种子列表(在图33B中的步骤3383中预计算和预存储)设置成称为“TRI_种子_列表”的数组。在该情况下,三角形种子列表包含来从视单元A(包含视单元)看去未被遮挡并且从视单元B看去未被遮挡的每个VM区的一个三角形。从VM A 的从视单元A和视单元B看去可见的每个VM区选择一个种子三角形以使得发起对种子三角形的集合的遍历确保在图37的运行时间简化的3D 网格遍历期间遇到针对AB过渡的相关的(标记的)轮廓周线。种子三角形的该选择确保使用以下遍历处理根据视单元A的VM来构造视单元B 的VM:使用标记轮廓周线信息在AB过渡中在几何图形周围“避开”。
处理流程行进至步骤3645,其中“TRI_种子_列表”的三角形经受处理。
处理流程行进至步骤3650,其中使用“TRI_种子_列表”的三角形来发起如在图37的流程图所示并且结合该图详细地讨论的简化的流形网格遍历。该遍历通过对从视单元A看去可见的三角形(那些在“TRI_种子_ 列表”中的三角形)的小子集的遍历来识别从视单元B看去可见的所有三角形。
处理流程行进至判决步骤3660以确定在“TRI_种子_列表”中是否有任何更多未处理的三角形。
如果在判决步骤3660中确定在“TRI_种子_列表”中有未处理的三角形,则选择“TRI_种子_列表”中的下一个未处理的三角形并且处理流程返回至步骤3645。
另一方面,如果在判决步骤3660中确定在“TRI_种子_列表”中没有更多未处理的三角形,则处理流程行进至步骤3665。
步骤3665表示已经通过简化的运行时间遍历构造了与所需的增量可见性信息对应的特定ROI。如前面所讨论的,当对应的视单元过渡是父到子的过渡时,该增量可见性信息实际上可以是从子视单元看去可见的三角形/分段的集合。可替代地,该ROI信息可以对应于针对邻接的视单元之间的视单元过渡的增量G+和增量G-数据,从而使得当需要时可以选择生成增量G分组而不是存储针对每次视单元过渡的所有增量G分组。处理流程在步骤3655处终止。
图37是使用简化的、暗示的运行时间3D网格遍历处理来根据预存储的标记轮廓周线信息构造ROI并且构造针对该ROI的连接的组件的种子三角形列表的主处理。
图37是示出了在图36示出的控制处理的步骤3650中调用的受指导的运行时间3D遍历处理的实施方式的流程图。
图37的流程图所示的处理与图20A的一般3D网格遍历处理十分相似。图20A的处理一般作为离线预处理来进行以处于预计算并存储PVS 和标记轮廓周线数据的目的来构造可见性图。
相比之下,图37的3D网格遍历处理是在运行时间进行并且用于生成针对特定视单元过渡的统一可见性图的ROI。这些ROI对因为这些特定的视单元过渡而引起的可见性的变化进行描述。
在一种类型的视单元过渡中,从父视单元到被包含的子视单元,ROI 仅包含从子视单元看去可见的那些三角形/分段。当所提供的种子三角形是包括来自包含从子视单元看去可见的三角形的那些ROI的每个连接的组件的一个三角形的三角形集合时,可以根据图37的简化的、暗示的3D 网格遍历处理来生成该类型的ROI。
使用这些种子三角形以及根据标记轮廓周线生成的有关ROI边界,使得简化的、暗示的3D网格遍历处理绕过或“避开”在特定的视单元过渡期间(例如,从视单元A到视单元B,其中视单元B被包含在视单元 A内)变得新近被遮挡的多边形或多边形分段。这使得能够在不明确地存储要移除的多边形列表的情况下移除新近被遮挡的多边形和/或多边形分段。如果要移除的多边形列表相对于可见多边形的数目很大,则相比使用明确的要移除的多边形的列表,这可以是更加有效。
还可以使用暗示的遍历方法来直接生成针对两个邻接的视单元之间的视单元过渡的增量G-和增量G+分组两者,其中一个视单元没有被包含在另一个视单元内而是两个视单元具有共用的面。在这种情况下,开始的 VM必须包含从组合视单元A+B看去可见的所有多边形或多边形分段。此外,开始VM必须包含对于视单元A和视单元B的有关遮挡边界(这些遮挡边界都是根据标记的轮廓边来生成的)。将这样的可见性图称为统一可见性图。对于两个连接的视单元的统一可见性图包含从视单元A看去可见并且从视单元B看去可见的(或从布尔加视单元A+B看去可见) 的所有多边形分段。此外,统一可见性图包含与视单元A和视单元B两者对应的从视单元看去的遮挡边界。
为了生成针对A到B的过渡(也称为AB过渡)的增量G+分组,使用针对从A看去被遮挡而从B看去可见的VM区的每个连接的组件的种子三角形来对对应的统一VM进行遍历。该类型的区称为DREAB。使用这些种子三角形发起遍历并且遍历行进至与视单元A或视单元B对应的遮挡边界。视单元A边界在被遮挡侧上遇到而视单元A边界在暴露侧上遇到。这对应于在图40中以浅灰色示出的DReAB区。
表XIV总结了发起用于生成对于邻接视单元的增量G+和增量G-分组的暗示的运行时间遍历所需的种子三角形的集合并且示出了所遇到的遮挡边界的侧。
该方法使得能够根据针对视单元过渡的统一VM和对应的VM遮挡边界周线(其可以根据标记轮廓周线来生成)生成增量G+和增量G-分组两者。使用该方法,不需要针对每次视单元过渡明确地存储对于每次视单元过渡的增量G+和增量G-分组。更具体地,可以在需要分组以前的任何时间通过暗示的遍历方法来生成分组。
此外,在分布式客户端-服务器实施中,生成增量可见性信息的运行时间3D遍历方法可以更加有效。在高的时空可见相关性的区中,可以针对相同区中的若干特定的视单元频繁地使用相同的标记的周线信息。因此,对基于标记的轮廓信息的运行时间3D网格遍历能够以相比针对每次视单元过渡使用要移除的直接的多边形增量G-列表所需的传输数据而言较少的传输数据来计算增量的可见性图/PVS。
现转向图37,在简化的运行时间遍历的第一个步骤中,处理流程从步骤3705开始,其中针对特定的视单元过渡在“TRI_种子_列表”中的特定三角形处发起遍历。
处理流程行进至判决步骤3715以确定所遍历的三角形是否包含从视单元看去的遮挡边界。会在图36的步骤3620中构造这些边界。
如果在判决步骤3715中确定所遍历的三角形包含从视单元看去的遮挡边界,则处理流程行进至步骤3735。
处理流程行进至步骤3735,其中在遮挡边界处中断遍历。在另外的实施方式中,处理流程从3735行进至处理37-1,其将处理流程返回至步骤3725。
另一方面,如果在判决步骤3715中确定当前所遍历的三角形不包含遮挡边界,则处理流程行进至步骤3720。
在判决步骤3720中确定当前所遍历的三角形是否具有与对于所正在考虑的特定视单元过渡的标记的轮廓边对应的轮廓边。这些标记的轮廓边对应于统一VM的对应ROI的内边界。
如果在判决步骤3720中确定当前所遍历的三角形是否具有轮廓边,则处理流程行进至步骤3725。
在步骤3725中,选择网格中下一个(连接的)未遍历的三角形并且将其提交至步骤3715和后续步骤以用于处理。
另一方面,如果在判决步骤3720中确定当前三角形不包含针对当前视单元过渡的标记的轮廓边,则处理流程行进至步骤3780。
在判决步骤3780中确定在当前“遍历”中是否存在任何未处理(未遍历的)三角形,其中在此处将遍历定义为通过非标记的轮廓边连接并且位于如在图36的步骤3625中构造的针对特定视单元过渡的遮挡边界的未被遮挡侧上的网格多边形的集合。
如果在判决步骤3780中确定在当前遍历有未遍历的三角形,则处理流程行进至步骤3725,其中选择遍历的下一个三角形以用于如前述的数据。
另一方面,如果在判决步骤3780确定在当前遍历中没有未遍历的三角形,则处理流程行进至步骤3788。
在步骤3788中,在图36的步骤3625中所构造的遮挡边界分段的未被遮挡侧上继续遍历;其中所述遮挡边界对应于在步骤3720中遇到的标记的轮廓边。该继续可以涉及在被重新三角化(即,在遮挡边界处精确地被修剪)的三角形上继续遍历,或可以涉及没有在边界处被重新三角化的三角形的未被遮挡侧上继续遍历。处理流程在步骤3788处终止。
图38:将与针对特定视单元过渡的新近暴露的网格元素对应的增量 G+子网格附接至对应的标记轮廓周线的开始边界的方法。
对于任何视单元过渡,可以在构造从视单元看去的可见性图和对应的可见性增量区的离线处理(图33)期间确定并存储与新近暴露的子网格的附接曲线对应的多义线。可以使用图31B的 DeltaGplussummesh_attach_polyline数据结构来存储这些多义线。可以存储在该数据并且随后在图36和图37所述的增量可见性图/PVS构造的运行时间处理期间使用该数据。具体地,为了使用在运行时间3D网格遍历期间通过“避开”来确定新近被遮挡的网格元素的运行时间方法,在附接多义线处将任何新近暴露的网格元素连接至先前暴露的元素以确保将连接的流形呈现给运行时间遍历。
注意,在一些实施方式中,当将图36和图37的方法用于通过绕开在运行时间计算新近被遮挡的几何图形时,使用图38的方法。
在一些实施方式中,处理流程行进至步骤3805,其中对于针对特定视单元过渡的标记的轮廓边(开始的)相关联的 DeltaGplussummesh_attach_polyline数据结构进行访问并且用变量AP来指代该数据结构。
处理流程行进至判决步骤3810,其中确定附接类型是否对应于0。如果在判决步骤3810中确定附接类型对应于0,则处理流程行进至步骤 3815。
在步骤3815中,将增量G+子网格(此处简称为子网格)的边直接连接至主网格的对应边。从AP.submesh_edgelist和AP.mainmesh_edgelist 中列出的单一边开始沿着对应的网格的自由边(仅具有一个组件多边形的边)行进在AP.edgenumber个边之间做出该连接。在该模式下,针对每个edgelist仅需要预存储单个边。
处理流程行进至判决步骤3820以确定附接类型是否对应于1。如果在判决步骤3820中确定附接类型对应于1,则处理流程行进至步骤3825。
在步骤3825中,将增量G+子网格(此处简称为子网格)的边直接连接至主网格的对应的边。从AP.submesh_edgelist和AP.mainmesh_edgelist中列出的第一边开始顺序地贯穿整个边列表在 AP.edgenumber个边之间做出该连接。
处理流程行进至判决步骤3830以确定附接类型是否对应于2。如果在判决步骤3830中确定附接类型是等于2,则处理流程行进至步骤3835。
在步骤3835中,将增量G+子网格(此处简称为子网格)的边“链接”至主网格的对应边,其中链接可以是从一个多义线段到另一个多义线的一到多的映射。在预处理期间对这些链接进行识别以使得它们在运行时间3D遍历期间呈现对应的网格的保守表示。从AP.submesh_edgelist和 AP.mainmesh_edgelist中列出的单一边开始沿着对应网格的自由边(仅具有一个组件多边形的边)行进在AP.edgenumberge个边之间做出该链接。在该模式下,对于每个edgelist仅需要存储与存储单个边。
处理流程行进至判决步骤3840以确定附接类型是否为3。如果在判决步骤3830中确定附接类型对应于3,则处理流程行进至步骤3845。
在步骤3845中,将增量G+子网格(此处简称为子网格)的边“链接”至主网格的对应的边,其中链接可以是从一个多义线段到另一个多义线的一到多的映射。在预处理期间对这些链接进行识别使它们在运行时间 3D遍历期间呈现对应的网格的保守表示。从AP.submesh_edgelist和 AP.mainmesh_edgelist中列出的第一边处开始并且顺序地贯穿整个边列表行进在AP.edgenumber个边之间做出该链接。
在任何情况下,处理流程针对下一此视单元过渡行进至步骤3850。在步骤3850中,可以根据当前视单元过渡的结束边界导出下一个视单元边界的开始边界,并且处理针对下一次视单元过渡行进至判决步骤3810。处理流程在步骤3850处终止。
在一些实施方式中,除了使用对于新近暴露的多边形的增量G+几何图形分组,在不需要明确的增量G+多边形的情况下,在运行时间程序地重构一些新近暴露的面。在一些实施方式中,采用该方法在新近暴露的增量区中生成单个大的多边形(或棋盘格状面)例如地板或天花板的新近可见部分。在该情况下,具体地使用指导运行时间处理程序地在整个增量区中生成面的新近暴露的部分的标记来标记轮廓周线。
图42A和图42B是示出了使用层次视单元的方法的流程图。
根据先前从视单元看去的可见性图来增量构造从视单元看去的可见性图的方法(图34至图38)使得能够通过在简化期间有效的绕过或避开可见性图的新近被遮挡的区来确定新近被遮挡的三角形。该方法使得能够在不具体地存储或传输针对新近被遮挡的三角形的信息的情况下移除新近被遮挡的几何图形。替代地,使用针对动态遮挡轮廓周线(DOSC)的被标记轮廓周线信息来构造绕过被遮挡的几何图形的新的可见性图遮挡边界。
使用图31A和图31B的数据结构编码的标记轮廓周线往往具有非常低的针对高动态可见性相关性的增量区的存储需求,这主要是因为在许多次视单元过渡期间可以重复使用相同的周线。从而,相比针对每此视单元过渡必须存储/传输对于每个新近被遮挡的三角形的信息的常规的增量 PVS方案,增量可见性图维护方法可以具有充分地较小的存储/传输成本。
当采用以下方法时这尤其是成立的:使用视单元的层次组织,其中一些视单元与其他视单元相邻并且其他视单元被完全包含在其他视单元中 (即,它们是父视单元的子视单元)。
使用该视单元布置,根据相邻的大视单元的可见性图来构造用于大的视单元的可见性图;并且根据父视单元的可见性图来构造子视单元的可见性图。在后一种情况下,可以不使用增量G+信息来构造子视单元的可见性图,这是因为当从父视单元移动到被包含的子视单元时,没有几何图形会变得新近可见。与子视单元对应的可见性图的根据父视单元的可见性图的增量构造仅需要确定新近被遮挡的几何图形,该确定可以使用运行时间增量可见性图构造(图34至图38)来实现,其仅使用导致新近被遮挡的三角形“避开”的标记的DOSC数据。
对较大的相邻视单元的使用还能够提高从供应增量G+和增量G-信息的服务器到渲染客户端的数据访问及传输效率。这是因为磁盘访问/寻找次数往往支配小的数据分组的总体读取时间,从而使得较大的数据分组的传输更加有效。
在一些实施方式中,处理流程从步骤4210开始,在步骤4210中确定要编码(使用图33的方法)增量VM/增量PVS信息的视单元过渡是否在父视单元与(被包含的)子视单元之间。
如果在判决步骤4210中确定视单元过渡对应于从父视单元至子视单元的过渡,则处理流程行进至步骤4230。
在步骤4230中,与视单元过渡对应的增量VM/增量PVS信息(使用图33及有关的图的方法来确定)对应于DOSC标记轮廓周线信息。
如果在判决步骤4210中确定视单元过渡对应于不是从父视单元至子视单元的过渡,则处理流程行进至步骤4220。
在步骤4220中,与视单元过渡对应的增量VM/增量PVS信息(使用图33及有关的图的方法来确定)对应于DOSC、DESC和增量G+子网格信息。处理流程在步骤4220和4230处终止。
实施方式采用较大的父视单元来计算更远的几何图形的可见性而采用较小的子视单元来计算较近的几何图形的可见性。因为随着视点运动的可见性变化(例如,以新近暴露和新近被遮挡面发展的速度)一般随着距视单元的距离的增加而变小,所以该方法是有效的。
现转向图42B,处理流程从步骤4240开始以确定相对于正在确定动态可见性(对于视单元过渡的增量VM/增量PVS数据)的特定几何图形的距离视单元的大小是否很小。
如果在判决步骤4240中确定相对于几何图形的距离视单元的大小很小,则处理流程行进至步骤4260。
在步骤4260中,距视单元的预定的较远距离处的特定几何图形不包括在对于涉及当前视单元的视单元过渡的增量VM/增量PVS计算。该几何图形可以包括在对于涉及当前视单元的父视单元的视单元过渡的增量 VM/增量PVS计算中。
如果在判决步骤4240中确定相对于几何图形的距离视单元不是很小,则处理流程行进至步骤4250。
在步骤4250中,在距视单元的预定的较远距离处的特定几何图形包括在对于涉及当前视单元的视单元过渡的增量VM/增量PVS计算中。处理流程在步骤4250和4260处终止。
图43A和图43B示出了针对使用增量VM/PVS数据的增量VM/PVS 维护的数据结构。
图43A和图43B示出了用于通过客户端和服务器处理来进行的增量可见性图PVS维护的方法的数据结构。无论客户端和服务器处理是否驻存在通过网络连接的不同的物理设备上,都可以应用此处的数据结构。可以替代地,可以在相同的计算设备上进行两个处理的实施中采用这些数据结构。
DDL是目的显示列表(也可以称为动态显示列表)。该列表可以由表示多边形网格对象的数据结构的一个或多个列表或数组组成。这些包括三角形(DDL_Tri)、边(DDL_Edge)、顶点(DDL_Vertex)和潜在地其他相关联的数据如材料和纹理说明等。用于实施DDL方法的其他数据结构可以在本发明人的美国专利No.6,111,582中的表XIII中找到。
在美国专利No.6,111,582的方法中,将DDL数据结构用于实施维护对于单个图像的动态显示列表的从视点看去的每图像DDL方案。相比之下,对于本发明,采用DDL方法来维护与基本上位于用户的当前视点附近(或位于连接至该附近区的扩展区中)的视单元的保守PVS对应的DDL 集合。然而可以在两种方法中采用包括关于材料、纹理、过程性纹理和其他等的数据结构的一些数据结构。
使得DDL集合可用于客户端处理。DDL与对于视点附近的视单元的如由导航预测算法确定的PVS集对应。用图43B的struct PVS数据结构指代DDL。
在图44A、图44B、图44C和有关的图中示出并且结合那些图详细讨论的方法使用了图43A所示的Global_to_DDL_Linkmap_Edge、 Global_to_DDL_Linkmap_Tri、Global_to_DDL_Linkmap_Vertex数据结构。
图44A、图44B和图44C示出了支持使用从远程服务器发送的增量 VM/PVS(增量G+子网格)数据的增量VM/PVS维护的数据存储及传输方法。
在本发明的一种实施方式中,将所有的数据存储在永久的、非核存储器(例如,磁盘),包括图31A和图31B的增量G+子网格、VM_Info、 DeltaGplussubmesh_attach_polyline、Contour和其他数据结构,以使得所存储的元素使用全局的ID指代符号来指代网格三角形、边和顶点。全局ID是在表示完整的3D模型的整个所存储的数据库中对于每个元素(例如,单个三角形、边、顶点)的唯一整数。全局ID是对于整个模型的元素数组(多个网格、三角形、边和顶点)中的索引。三角形的全局ID是对于整个模型的全局三角形数组中的三角形索引。边的全局ID是对于整个模型的全局边数组中的边索引。同样地,顶点的全局ID是对于整个模型中的全局顶点数组中的顶点索引。
图44A至图44C的流程图给出的方法使得能够通过以下客户端处理/ 机器进行运行时间渲染:其在任何一个时刻在称为目的显示列表(DDL) 的数据结构中仅存储整个图形数据库的小的子集。DDL包含由当前存储在客户端上的对于视单元的所有VM/PVS指代的图像元素(几何图形和纹理信息)。通过针对由服务器处理读取的所有增量G+子网格数据的服务器处理来进行图44A至图44C的方法。图44A至图44C的方法具有两个主要功能:1)将全局ID指代符转换成直接的DDL指代符,2)防止至客户端DDL的数据传输冗余。
现给出方法的一般描述,接着基于图44A、图44B和图44C的流程图来对该方法进行详细的描述。
服务器处理从客户端接收视点位置数据并且基于推测的导航预取来读取与特定视单元过渡对应的预存储的增量VM/PVS数据。服务器维护由当前VM/PVS数据集合指代的DDL集合,使用通过服务器处理发送至客户端处理的增量VM/PVS分组来在客户端处理上维护当前VM/PVS数据集合。在将增量VM/PVS数据发送至客户端处理之前,服务器处理将所有的全局ID转换成对DDL的直接索引或其他指代符的局部ID。此外,服务器处理检查每个所访问的增量G+子网格分组与DDL以确定增量G+ 子网格分组中的三角形或其他图形元素是否已经呈现在对应的DDL中。如果该元素已经呈现在对应的DDL中,则不需要将该元素添加至DDL。
如果服务器处理和客户端处理位于物理地不同的计算设备(例如,通过网格协议连接)上,则客户端DDL是由服务器维护的DDL的镜像。在该情况下,服务器检查增量G+子网格分组中的元素以确定它们是否出现在DDL中的前述方法可以消除从服务器到客户端的冗余传输,从而充分地减小了服务器维护DDL的最新拷贝所需的连接带宽。
对于在相同的物理计算设备(共享处理装置、内存和外存)上进行客户端和服务器处理的实施方式,可以维护单份DDL拷贝。在这种情况下,因为由于内存储的视单元往往位于模型的相同的周围地区而导致单个元素(例如,三角形)很有可能出现在当前存储在内存中的若干对于视单元的VM/PVS中,所以DDL减小了内存存储成本。因此,相比如果针对每个VM/PVS独立地存储每个元素,使用DDL来存储由若干VM/PMS数据结构共享的图形元素一般具有较低的存储成本。
针对在视单元过渡期间从外存储存取的所有增量G+子网格数据通过服务器处理来进行图44A至图44C的处理。一般地,客户端处理通过经由鼠标、游戏键盘控制器等来自用户的实时输入来控制视点导航。服务器处理接收关于视点的当前位置的数据并且采用该数据进行使用包括航位推算和碰撞约束的导航预测方法的环绕视单元的推测导航。该预测导航基于在预测导航期间遇到的对应的视单元边界(即,视单元过渡)来驱动对增量G+子网格数据的推测访问。
现转向图44,在一些实施方式中,处理流程从4401开始,其中将增量G+子网格的所有三角形放置在称为“三角形”的列表中。通常从非内存(磁盘)存储器读取增量G+子网格的三角形[例如,在分布式客户端- 服务器实施(图46,标记存储4605)中,或在客户端和服务器运行在相同的物理机器上的实施(图47,标记存储4705)中]。
处理流程行进至步骤4403以将“三角形列表”中的第一个三角形设置成变量指代符“三角形”。
处理流程行进至步骤4406,其中将三角形的全局ID(如存储在图 31C的Triangle数据结构中)读取到变量GLOBAL_ID中。
处理流程行进至判决步骤4408以确定“三角形”的DDL ID(根据图43A的Global_to_DDL_Linkmap_Tri数据结构确定)是否等于0值。 0值表示“三角形”当前没有存储在包括类型DDL_Tri(图43A)的数据结构数组的三角形DDL中。因为Global_to_DDL_Linkmap_Tri数组上的所有值被初始化为0值,所以这是成立的。
如果在判决步骤4408中确定Global_to_DDL_Linkmap_Tri数组的对于当前“三角形”的值不是0,这对应于以下情形:当前“三角形”已经存储在DDL_Tri数组中(在索引LOCALID处),并且处理行进至步骤 4410和4412。
在步骤4412中,将增量G+子网格的当前TRI存储在对于对应的视单元的VM/PVS中,上述对应的视单元存储作为包括三角形DDL的 DDL_Tri数据结构数组的索引的LOCALID。
处理流程行进至判决步骤4414以确定在“三角形列表”中是否剩余任何未处理的三角形。
如果在判决步骤4414中确定在“三角形列表”中没有剩余未处理的三角形,则处理流程行进至步骤4416,其中对下一个增量G+子网格进行处理。
另一方面,如果在判决步骤4414中确定在“三角形列表”中剩余未处理的三角形,则处理流程行进至步骤4418,其中选择“三角形列表”中的下一个三角形进行处理。
如果在判决步骤4408中确定Global_to_DDL_Linkmap_Tri数组的对于当前TRI的值是0,则这对应于以下情形:当前TRI还没有存储在 DDL_Tri中,并且处理流程行进至步骤4420和4422。
在步骤4422中,对DDL_Tri结构(包括三角形DDL)的数组的未使用的位置进行识别并且将变量OPENINDEX设置成该未使用的数组元素的索引。
在后续步骤4424中,将Global_to_DDL_Linkmap_Tri[GLOBAL_ID] 的值设置成OPENINDEX,因此表示当前TRI要存储在三角形DDL的 OPENINDEX索引中。
在后续步骤4426中,将TRI数据存储在DDL_Tri数据结构数组中,并且将使用增量G+子网格数据添加至对于对应的视单元的VM/PVS数据的索引OPENINDEX和三角形设置成指代DDL_Tri数据,并且处理流程继续至处理44-1,其从图44B的步骤4428开始。
在步骤4428中,将当前“三角形”的边存储在“边列表”中。
在后续步骤4430中,将变量“边”设置成指代“边列表”的第一条边。
在后续步骤4432中,通过指代包括增量G+子网格数据结构的边数据结构的Edge.global_id字段来将变量EGLOBAL_ID设置成边的全局 ID,在图31中指定了上述两种数据结构。
在后续判决步骤4434中确定“边”的DDL ID(根据图43A的 Global_to_DDL_Linkmap_Edge数据结构来确定)是否等于0值。0值表示EDGE当前没有存储在包括类型DDL_Edge的数据结构数组(图43A) 的边DDL中。
因为Global_to_DDL_Linkmap_Edge数组的上的所有值都被初始化 0值,所这是成立的。
如果在判决步骤4434中确定Global_to_DDL_Linkmap_Edge数组的对于当前边的值不为0,则这对应于以下情形:当前边已经被存储在 DDL_Edge数组中(在索引ELOCALID处),并且处理流程行进至步骤 4438和4440。
在步骤4440中,增量G+子网格的当前“边”存储在对于对应视单元的存储ELOCALID的VM/PVS中,ELOCALID是包括边DDL的DDL_Edge数据结构数组的索引。
在后续的判决步骤4442中确定在“边列表”中是否剩余任何未处理的边。
如果在判决步骤4442中确定在“边列表”中没有剩余任何未处理的边,则处理返回至步骤4414,其中确定在“三角形列表”中是否剩余任何未处理的三角形。
另一方面,如果在判决步骤4442中确定在“边列表”中剩余未处理的边,则处理流程行进至步骤4443,其中选择“边列表”中的下一个边进行处理。
如果在判决步骤4434中确定Global_to_DDL_Linkmap_Edge的对于当前边的值为0,则这对应于以下情形:当前EDGE还没有存储在 DDL_Edge数组中,并且处理流程行进至步骤4444和4446。
在步骤4446中,对DDL_Edge结构(包括边DDL)的数组中未使用的位置进行识别并且将变量EOPENINDEX设置成该未使用的数组元素的索引。
在后续步骤4448中,将 Global_to_DDL_Linkmap_Edge[EGLOBAL_ID]的值设置成EOPENINDEX,因此表示要将当前“边”存储在边DDL的EOPENINDEX 索引处。
在后续步骤4450中,将EDGE数据存储在DDL_Edge数据结构数组和索引EOPENINDEX中,并且将已经添加了增量VM/PVS数据(以增量Gplussubmesh_edge数据的形式)的VM/PVS设置成指代对应的 DDL_Edge数组。
随后,处理流程继续至处理44-3,其从图44C的步骤4452开始。
在步骤4452中,将当前“边”的顶点存储在VLIST中。
在后续的步骤4454中,将变量“顶点”设置成指代“顶点列表”的第一个顶点。
在后续步骤4458中,通过指代包括增量G+子网格数据结构的Vertex 数据结构的Vertex.global_id字段来将变量VGLOBAL_ID设置成VERT 的全局ID,在图31C中指定了上述两种数据结构。
在后续的判决步骤4460中确定“顶点”的DDL ID(根据图43A的Global_to_DDL_Linkmap_Vertex数据结构数组确定)是否等于0值。0 值表示“顶点”当前没有存储在包括类型DDL_Vertex(图43A)的数据结构数组的顶点DDL中。因为Global_to_DDL_Linkmap_Vertex数组上的所有值都被初始化为0值,所以这是成立的。
如果在判决步骤4460中确定Global_to_DDL_Linkmap_Vertex数组的对于当前“顶点”的值不为0,则这对应于以下情形:当前“顶点”已经存储在DDL_Vertex数组中(在索引VLOCALID处),并且处理流程行进至步骤4462和4464。
在步骤4464中,将增量G+子网格的当前“顶点”存储在对于对应视单元的存储VLOCALID的VM/PVS中,VLOCALID是包括顶点DDL 的DDL_Vertex数据结构数组的索引。
在后续的判决步骤4468中确定在“顶点列表”中是否剩余任何未处理的边。
在判决步骤4468中确定在“顶点列表”中没有剩余未处理的顶点,则处理流程行进至处理44-2,其将处理流程返回至步骤4442,其中确定在“边列表”中是否剩余任何未处理的边。
另一方面,如果在判决步骤4468中确定在“顶点列表”中剩余未处理的顶点,则处理流程行进至步骤4469,其中选择“顶点列表”中的下一个顶点进行处理。
如果在判决步骤4460中确定Global_to_DDL_Linkmap_Edge数组的对于当前边的值为0,则这对应于以下情形:当前VERT还没有存储在 DDL_Vertex数组中,并且处理流程行进至步骤4470和4472。
在步骤4472中,对DDL_Vertex结构(包括顶点DDL)的数组中未使用的位置进行识别并且将变量VOPENINDEX设置成该未使用的数组元素的索引。
在后续步骤4474中,将 Global_to_DDL_Linkmap_Vertex[VGLOBAL_ID]的值设置成 VOPENINDEX,因此表示要将当前VERT存储在顶点DDL的 VOPENINDEX索引处。
在后续步骤4478中,VERT数据存储在DDL_Vert数据结构数组和索引VOPENINDEX中,并且将添加至VM/PVS的VERT数据设置成指代VOPENINDEX处对应的DDL_Vert数组。
接着,处理流程行进至前面所述的步骤4468。
图44A至图44C的方法示出了与三角形网格的三角形、边和顶点对应的增量G+子网格数据。类似地,使用结合在美国专利No.6,111,582(其内容通过引用合并到本申请中)的XIII的附加数据结构来管理其图形元素如纹理等。
图45A、图45B和图45C示出了支持使用从远程服务器发送的增量 VM/PVS(增量G-子网格)数据的增量VM/PVS维护的数据存储及传输方法。
增量G-子网格数据对应于针对特定的视单元过渡变得新近被遮挡的图形元素的全局ID。在步骤4715(或4725)将这些全局ID转换成DDL 索引。可以替代或除通过使用标记轮廓周线的前述方法来对新近被遮挡的图形元素进行确定之外,将该预存的增量G-子网格信息用于在运行时间“避开”被遮挡的元素。
图45A至图45C示出了使用与特定视单元相关联的增量G-子网格信息通过移除在对应的视单元过渡期间变得被遮挡的特定图形元素来更新 VM/PVS数据。
现转向图45A,在一些实施方式中,处理流程从4501开始,其中将增量G-子网格的所有三角形放置在称为“三角形列表”的列表中。通常从非内存(磁盘)存储中读取增量G-子网格的所有三角形。例如,在分布式客户端-服务器实施(图46中标记存储4605)中,或在客户端和服务器运行在相同的物理机器上的实施(图47中标记存储4705)中。
在后续的步骤4503中将“三角形列表”中的第一个三角形设置成变量指代符“三角形”。
在后续步骤4506中将三角形的全局ID(如存储在图31C的Triangle 数据结构中)读取到变量GLOBAL_ID中。
在后续的判决步骤4508中确定是否要移除特定的“三角形”,如所存储在DDL_TRI数组中的“三角形”仍然由其他VM/PVS数组(使用 DDL_TRI[LOCALID].num_using字段来确定,该字段被维护成等于当前指代DDL_TRI数组中的特定“三角形”的VM/PVS数据结构的数目) 来指代。当三角形新近由VM/PVS数据指代(新近暴露)时增加对于 DDL_TRI的该变量的值,并且当对应的三角形新近未由VM/PVS数据指代(新近被遮挡)时减小该变量的值。
如果在判决步骤4508中确定DDL_TRI[LOCALID].NUM_USING值 -1(减小的值)不等于0,则处理流程行进至步骤4510。这对应于以下状况:即使在将“三角形”从特定的VM/PVS移除之后,它仍然出现在其他VM/PVS中。
在步骤4512中,对特定的VM/PVS中的“三角形”的索引进行识别并且将其读取到变量A1中。
在后续步骤4513中,通过将数组的在索引AI处的元素表示为空来将三角形“三角形”从特定的VM/PVS数组中移除。
在后续的判决步骤4514中确定在“三角形列表”中是否剩余有任何未处理的三角形。
如果在判决步骤4514中确定在“三角形列表”中没有剩余未处理的三角形,则处理流程行进至步骤4516,其中对下一个增量G-子网格进行处理。
另一方面,如果在判决步骤4514中确定在“三角形列表”中剩余未处理的三角形,则处理流程行进至步骤4518,其中选择“三角形列表”中的下一个三角形进行处理。
如果在判决步骤4508中确定DDL_TRI[LOCAID].NUM_USING值 -1(减小了的值)等于0,则处理流程行进至步骤4520。
步骤4520对应于以下状况:在从特定的VM/PVS移除“三角形”之后,其不再由任何其他VM/PVS指代。
在步骤4522中,将OPENINDEX的值设置成DDL_TRI的对于TRI 的索引,表示DDL_TRI的该具体的数组元素现在未被使用。
在后续步骤4524中,将数组元素 GLOBAL_TO_DDL_LINKMAP_TRI[GLOBALID]的值设置成0,表示在DDL_TRI数组元素中不在表示特定的“三角形”。
在后续步骤4526中,对特定VM/PVS的“三角形”的索引进行识别并且将其读取到变量AI。
在后续步骤4527中,通过将数组的在索引AI处的元素表示为空来将三角形“三角形”从特定的VM/PVS数组中移除。
处理流程从步骤4527行进至处理45-1,其从步骤45-1(图45B)开始。在步骤4528中,将三角形“三角形”的所有边都放置在称为“边列表”的列表中。
在后续步骤4530中,将“边列表”的第一条边设置成变量引用符 EDGE。
在后续步骤4532中,将边的全局ID(如存储在图31C的Edge数据结构中)读取到变量GLOBAL_ID中。
在后续判决步骤4534中确定特定的“边”是否要移除,如所存储在 DDL_EGGE数组中的“边”仍然由其他VM/PVS数组(使用 DDL_EDGE[LOCALID].num_using字段来确定,该字段被维护成等于当前指代DDL_EDGE数组中的特定EDGE的VM/PVS数据结构的数目) 来指代。当边新近由VM/PVS数据指代(新近暴露)时增加对于 DDL_EDGE的该变量的值,并且当对应的边新近未由VM/PVS数据指代 (新近被遮挡)时减小该变量的值。
如果在判决步骤4534中确定 DDL_EDGE[LOCALID].NUM_USING-1(减少的值)不等于0,则处理流程行进至步骤4538。这对应于以下状况:即使在从特定的VM/PVS移除了EDGE之后,它仍然存在于其他VM/PVS中。
在步骤4538中,对特定VM/PVS中的“边”的索引进行识别并且将其读取到变量AI中。
在后续步骤4539中,通过将数组的在索引AI处的元素表示为空来将边“边”从特定的VM/PVS数组移除。
在后续的判决步骤4542中确定在“边列表”中是否剩余任何未处理的边。
如果在判决步骤4542中确定在“边列表”中没有剩余未处理的边,则处理返回至步骤4514。
另一方面,如果在判决步骤4542中确定在“边列表”中剩余未处理的边,则处理流程行进至步骤4543,其中选择“边列表”中的下一个边进行处理。
如果在判决步骤4534中确定DDL_EDGE[LOCALID].NUM_USING 的值-1(减小了的值)等于0,则处理流程行进至步骤4544。
步骤4544对应于以下状况:在将“边”从特定的VM/PVS移除之后,它不再由任何其他的VM/PVS来引用。
在步骤4546中将OPENINDEX的值设置成DDL_EDGE对于EDGE 的索引,表示DDL_EDGE的该具体的数组元素现在未被使用。
在后续步骤4548中将数组元素 GLOBAL_TO_DDL_LINKMAP_EDGE[GLOBALID]的值设置成0,表示在DDL_EDGE数组元素中不在表示特定的“边”。
在后续的步骤4550中,对特定的VM/PVS中的“边”的索引进行识别并且将其读取到变量AI中。
在后续步骤4551中,通过将数组的在索引AI处的元素表示为空来将边“边”从特定的VM/PVS数组中移除。
处理流程行从步骤4551行进至处理45-3,其从步骤4552开始。在步骤4552中,将三角形“三角形”的所有顶点防止在称为“三角形列表”的列表中。
在后续步骤4554中,将“三角形列表”中的第一边设置成变量引用符VERT。
在后续步骤4558中,将顶点的全局ID(如存储在图31C的Vertex 数据结构中)读取到变量GLOBAL_ID。
在后续判决步骤4560中确定特定是否要移除特定的VERT,如所存储在DDL_VERTEX数组中的VERT仍然由其他VM/PVS数组(使用 DDL_VERTEX[LOCALID].num_using字段来确定,该字段被维护成等于当前指代DDL_VERTEX数组中的特定VERTEX的VM/PVS数据结构的数目)来指代。当顶点新近由VM/PVS数据指代(新近暴露)时增加对于DDL_EDGE的该变量的值,并且当对应的顶点新近未由VM/PVS 数据指代(新近被遮挡)时减小该变量的值。
如果在判决步骤4560中确定 DDL_VERTEX[LOCALID].NUM_USING值-1(减小了的值)不等于0,则处理流程行进至步骤4562。这对应于以下状况:即使从特定的VM/PVS 移除了VERT之后,它仍然出现在其他VM/PVS中。
在步骤4562中,对特定的VM/PVS中的VERT的索引进行识别并且将其读取到变量AI。
在后续步骤4564中,通过将数组的在索引AI处的元素表示为空来将顶点VERT从特定的VM/PVS数组中移除。
在后续的判决步骤4568中确定在“三角形列表”中是否剩余有任何未处理的顶点。
如果在判决步骤4568中确定在“三角形列表”中没有剩余未处理的顶点,则处理返回至步骤4542。
另一方面,如果在判决步骤4568中确定在“三角形列表”中剩余未处理的顶点,则处理流程行进至步骤4596,其中选择“三角形列表”中的下一个顶点进行处理。
如果在判决步骤4560中确定 DDL_VERTEX[LOCALID].NUM_USING的值-1(减小了的值)等于0,则处理流程行进至步骤4570。
步骤4570与以下状况对应:在从特定的VM/PVS移除了VERT之后,它不再由任何其他的VM/PVS来引用。
在步骤4572中,将OPNEINDEX的值设置成DDL_VERTEX的对于VERT的索引,表示DDL_VERTEX的该具体的数组元素现在未被使用。
在后续步骤4574中,将数组元素 GLOBAL_TO_DDL_LINKMAP_VERTEX[GOBALID]设置成0,表示在 DDL_VERTEX数组元素中不在表示特定的VERT。
在后续步骤4576中,对特定的VM/PVS中的VERT的索引进行识别并且将其读取到变量AI中。
在后续步骤4578中,通过将数组的在索引AI处的元素表示为空来将顶点VERT从特定的VM/PVS数组中移除。
在步骤4578之后,处理流程行进至已经描述了的判决步骤4568。
图45A至图45C示出了与三角形网格的三角形、边和顶点对应的增量G-子网格数据。类似地,使用结合在美国专利No.6,111,582(通过引用将其合并到本申请中)的表XIII中的附加数据结构来管理其他图形元素如纹理等。
图46是分布式客户端-服务器实施,其中服务器访问存储的外存增量 G子网格数据,将全局ID转变为DDL ID并且维护服务器和客户端两者上的DDL、VM/PVS数据。
图46是示出了执行在服务器设备上的服务器处理和执行在单独的客户端设备上的客户端处理的实施方式的图。图46示出了从服务器设备发送到客户端设备的数据。在一些实施方式中,该数据通过局域网格连接或分布式网格连接如因特网来进行传递。
服务器设备由标记为4601的暗色矩形来表示。客户端设备由标记为 4602的暗色矩形来表示。
外存或磁盘存储位于服务器设备中并且被标记为4605。该存储设备存储包括与特定的视单元过渡对应的增量VM/PVS数据的增量G子网格数据(增量G+子网格数据和增量G-子网格数据两者)。在另外的实施方式中,标记轮廓周线信息被存储并且用于使用图36和图37的简化了的遍历方法根据对应的统一可见性图来生成增量G+或增量G-子网格数据。
当由当前视点位置(从客户段发送给服务器)引导的推测导航算法(由服务器执行)遇到视单元过渡时,如在步骤4610中所示,从外存存储存取对应的增量G+子网格数据(对应于新近暴露的图形元素)和增量G- 子网格数据(对应于新近被遮挡的图形元素)。另外地和/或可替代地,增量G+和/增量G-子网格数据可以在预取期间使用标记轮廓周线信息(使用图33的作为预计算来将其生成并且存储为外存数据)来生成。在一些实施方式中,使用图37的简化了的网格遍历处理根据标记的轮廓信息来生成增量G+和增量G-子网格数据。
将图37的简化了的遍历方法应用至给定的统一可见性图(包含对于两个连接的视单元如A和B的轮廓周线/遮挡边界),根据一些实施方式使用种子三角形的一个集合来构造增量G+子网格,而使用种子三角形的补集来构造增量G-子网格。
例如,考虑包含对于两个连接的视单元A和B的轮廓周线和对应的遮挡边界多义线的具体统一可见性图。下表示出了如何能够使用取决于种子三角形集合/列表的选择的标记周线来生成或绕过增量G+和增量G-子网格。
表XIV
使用图36和图37的方法来根据对于视单元A和视单元B的统一可见性图生成增量G+和增量G-子网格数据
因此,由于增量G+(和增量G-)子网格数据可以在运行时间根据对于对应的视单元过渡的标记轮廓周线来生成,所以不需要存储增量G+(和增量G-)子网格数据。因为在许多情况下相比增量G子网格数据,标记周线信息可以具有远远较少的存储成本,所以该方法充分地减少总体存储需求。这尤其是在以下情况下成立:将选择的轮廓周线针对若干视单元过渡重复利用,其在有效动态遮挡(EDO)局部地高的时是成立的,对应于模型的局部动态可见连贯性高的区。这在以下情况也是成立的:增量G 分组中的新近暴露或新近被遮挡的三角形的数目非常大(相对于限定对应的增量区的遮挡边界的复杂度)。
根据一些实施方式,为了在运行时间生成对于视单元过渡的增量G+ 或增量G-子网格信息,将所有的多边形网格数据(从特定视单元看去可见)和标记轮廓周线信息(对应于特定视单元过渡)呈现在快速可存取(内存)存储器中。
为了确保在增量G子网格生成处理之前从外存中预加载该信息,服务器处理直接访问从包含要生成增量G子网格数据的特定视单元的较大视单元看去可见的多边形集合或多边形分段。该数据相对于对于视单元的直接PVS,但是通过预计算和存储对于数目相对小的大视单元的这些直接PVS数据来最小化存储需求,根据大视单元在预取期间使用简化了的网格遍历处理和标记轮廓周线信息来生成对于更大数目的被包含的视单元的PVS。可替代,可以通过存取对于父到父的视单元过渡的增强G子网格数据根据先前针对相邻的大视单元(本身是其他子视单元的父视单元)构造的现有VM/PVS来构造用于大的父视单元本身的PVS。
此外,服务器处理还访问对于要生成增量G子网格信息的特定子单元的标记轮廓周线信息。
当用于构造增量G子网格数据的多边形网格信息和标记轮廓周线信息呈现在内存中,外存存取不中断由服务器处理进行增量G子网格数据的生成。
父和子视单元数据的使用是利用存在与层次单元之间的简单的可见性层次结构的示例:从子视单元看去的所有多边形/分段也从包含父视单元看去可见。在父视单元的该应用中,包括实际上位于父视单元的所有多边形/分段是很重要的。最终地,通常对终端叶子视单元进行构造使其包含很少或不包含几何图形,使得它们的VM/PVS排他性地“从视单元看去”并且较少地“被包含在视单元中”。
由于能够预确定任何网格的从任何视单元看去的曲面细分水平,所以标记轮廓周线的方法容易地适于细化的面。
结合图52提出了该层次处理的另外的细节。
在后续步骤4615中,使用近似的Global_to_DDL_Linkmap来确定每个所访问的元素的DDL索引。
在判决步骤4620中确定新近访问的数据是否已经呈现在对应的DDL 中(关于几何图形元素的细节,参见图44的步骤4408、4434和4460)。
如果在判决步骤4620中确定所访问的数据已经呈现在对应的DDL 中,则处理流程直接行进至步骤4625。
在步骤4625中,使用数据的预先存在的DDL索引将所访问的数据写入到近似的VM/PVS数据的服务器拷贝和客户端拷贝两者中。
另一方面,如果在判决步骤4620中确定所访问的数据还没有呈现在对应的DDL中,则处理流程行进至步骤4630。
在步骤4630中,对对应DDL的服务器拷贝的空位置进行识别,并且在步骤4635中,将所访问的数据写入DDL的服务器拷贝和客户端拷贝两者上的该位置(例如,参见图44的步骤4420至步骤4426)。
DDL中的特定图形元素(例如,三角形或纹理)经常在任一时刻呈现在存储在客户端设备上的VM/PVS数据中的不止一个中。这是因为使用推测导航预取方法,客户端往往存储与彼此接近的视单元对应的 VM/PVS数据集合。
因为服务器处理首先检查以确定所访问的增量G子网格数据在将数据发送到客户端以前已经出现在对应的DDL中的,所以避免了冗余传输。该充分地减小了客户端与服务器之间所需的连接带宽。
图47是示出了服务器处理和客户端处理位于相同的设备上并且使用单份DDL拷贝的布置的框图/流程图。
图47是示出了执行在与客户端处理的计算设备相同的计算设备上的服务器处理的图。该配置除了增量G+子网格和增量G-子网格外存数据存储在与客户端渲染系统的设备相同的设备上以外与图46的配置相同。
该配置消除了对DDL和VM/PVS数据的客户端和服务器拷贝的需要。4710至4725的处理除了以下之外相同:仅需要写对应数据的一份拷贝。
在该情况下,DDL的主要功能是减少VM/PVS的存储成本并且简化全局ID到局部数组(DDL)索引的转换。
图48A是示出了发送减小水平的详细增量可见性信息以防当前视点很快就会穿透还没有读取/发送增量可见性信息的视单元边界的服务器处理的框图/流程图。
图48A的框图和流程图示出了传递增量可见性信息的客户端-服务器处理的附加细节。无论客户端和服务器是实施在通过网络连接连接的不同物理设备中(如在图46中),还是客户端和服务器是实施在相同的物理设备中(如在图47中),都可以实施这些步骤。
在图48A中,框图将客户端和服务器功能分成不同的处理,而不考虑这些处理是否执行在不同的物理设备上。
标记为4802的框包含客户端处理,标记为4855的框包含服务器处理。
在第一步中,客户端处理获得当前视点并且将当前视点存储在数据位置4805中。可以通过连接至客户端处理的包括鼠标、控制杆、游戏控制垫或修改当前视点位置的其他输入设备的输入设备来对给出了当前视点位置的数据进行修改。
客户端处理将对数据位置的4805的入口提供给服务器处理,其将数据拷贝到数据位置4810中。该拷贝可以发生在本地存储器或贯穿网格。
在步骤4815中,服务器处理使用当前视点数据来预测视点的未来位置。该预测可以采用航位推算和碰撞约束、速度与加速度限制、和根据当前视点位置预测未来视点位置的其他方法,例如在计算游戏或其他模拟器中通常用于确定非玩家格斗者或人工智能代理的导航的现有技术的领航方法。(参见“Tactical Pathfinding Using A*”,Van DerSterren,William in Game Programming Gems 3,Charles River Media 2002,其全部内容通过引用合并到本申请中)。
在步骤4820中,使用所预测的未来视点位置来确定所预测的视单元过渡,视单元过渡是对视单元边界的穿过。该步骤采用来自步骤4815的数据和针对模型的视单元的已知布置两者。可以通过随后的步骤中的服务器处理来读取与每个所穿过的视单元边界(即,每次视单元过渡)对应的增量可见性数据(也称作可见性事件信息)。
在步骤4825中,对针对当前视点的到达与正在处理的所预测的视单元过渡对应的视单元边界的最少时间进行确定。该时间是当前视点位置和速度、最大可能的加速度和速度以及局部碰撞和其他导航约束的函数。将该值存储在变量“穿透时间”中。
在步骤4830中,对读取和传输与正在处理的未来视单元过渡对应的增量可见性信息的最大时间进行确定。该值是基于对应的增量可见性分组、至客户端的可用传输带宽以及可能的其他因子来确定的。将该值存储在变量“传输时间”中。
在后续的判决步骤4835中确定变量“传输时间”是否大于变量“穿透时间”。如果在判决步骤4835中确定变量“穿透时间”大于“传输时间”,则处理流程行进至步骤4840。
在步骤4840中,从外存中读取低的细节层次(LOD)版本的增量可见性数据(例如,增量G+子网格数据)并且使其可用于客户端处理,其使用该数据来对与视单元对应并且存储在标记为4850的数据位置中的可见性图/PVS数据进行更新。在实施方式中,该相对地低的细节层次的增量可见性数据包括具有相对地层次的几何图形细节、较低层次的纹理分辨率或其他方法的减少了的细节的数据。另外的实施方式包括应用至这种较低的细节层次的信息以屏蔽低细节层次特征的滤波器。例如,规则模型可以包括由超过1百万个网格三角形组成的多边形网格。在一些实施方式中,规则图像的低的细节层次版本可以仅包括10%的网格三角形。对于生成不同细节层次上的模型的现有方法,参见Leubke,David;Reddy,Martin et.al,“Level of Detail for 3D Graphics”Morgan Kauffman 2003, ISBN:1-55860-838-9,其全部内容通过引用合并到本申请中。
如果在判决步骤4835中确定变量“传输时间”不大于变量“穿透时间”,则处理流程行进至步骤4845。
在步骤4845中,从外存读取较高细节层次版本的增量可见性数据(例如,增量G+子网格数据)并且使其可用于客户端处理,其使用该数据对与视单元对应并且存储在标记为4850的数据位置中的可见性图/PVS数据进行更新。
步骤4815至4840确保:仅当在更新对于视单元的PVS所需的所有的增量可见性信息已经由客户端处理接收以前当前视点很有可能进入该视单元时,才采用增量可见性分组中的相对地低的细节层次的几何图形信息和/或纹理信息。
在情形下对较低的细节层次信息的使用减少了将增量可见性信息读取并传输至客户端处理所需的时间,从而减少了在增量地构造用于视单元的PVS所需的所有增量可见性信息已经被读取和传输以前视点进入该视单元的可能性。
此外,在该情形下的对该较低细节层次信息的使用不太可能被用户检测。这是因为所提供的增量可见性信息(例如,增量G+子网格信息)对应于新近暴露的面,其在该情形下暴露了非常短暂的时间;并且以下是公知的:人类视觉系统对于暴露了短暂时间的面具有低的视觉敏感性。
图49是示出了作为暴露时间和暴露面积的函数的对比度敏感性(视觉敏感性的量度)的图,结合该图对其进行了详细的讨论。
因此,本方法是以下方法:初始地使用相对地低的细节层次的增量可见性信息来对当前视点在可以提供对应的较高细节层次以前很有可能穿透的视单元的PVS进行更新。在实施方式中,在随后的时间发送相对地较高的细节层次增量可见性信息,如增量G+子网格面增加的暴露时间,对应于以下暴露时间:用户的视觉系统的时间依赖性空间灵敏度会使得用户理解较高细节层次的几何和/或纹理信息。在一些实施方式中,发送较高细节层次的可见性信息的时间受人类感知对象的能力的限制。
相比较高细节层次的信息,低细节层次的图形信息更加快速地传递至客户端单元。当图形信息的延迟到达客户端是威胁时通过在短暂的时段期间传递低细节层次的信息,本方法充分地防止了图形信息的延迟到达。可以将图形信息的延迟到达认为是基于可见性的预取系统的感知地未期望的失败,这是因为错过的图形元素(或它们后来的突然重现)很容易被观察者感知到并且是视觉地令人厌恶的。
通过初始地在这些时段期间传递低细节层次的图形信息并且随后发送能够用于增加初始图形信息的细节层次的附加图形信息,该方法能够防止图形信息的延迟到达,并且当替换时间表匹配或超过在图49中示出的视觉灵敏度VS暴露时间曲线时仍然能够实现知觉上无损的性能恶化。
如果替换时间表接近在图49中示出的视觉灵敏度VS暴露时间曲线,则用户会体验到感知上适度的性能恶化。该性能恶化在用较高细节层次图形信息替换较低细节层次图形信息期间会被体验为离散的替换。随着替换时间表接近图49的视觉灵敏度VS暴露时间曲线,该替换时间会变得对于用户来说更难感知。在任何情况下,替换事件胜过图形信息的延迟到达 (以及会由图形信息的延迟到达引起的后续的突然重现)。
从而,该方法在可视化期间短暂地低的时空可见连贯性的情况下,产生了感知上无损或感知上适度的性能恶化。该可视化的短暂地低的时空可见连贯性可能由模型的可见性往往以高速改变的区(例如,从室内移动到户外的门附近的区)中的短暂地高的视点速度或局部地低的可见相关性引起。该方法在处理以下情形也是有用的:可用的传输带宽短暂地减小,或服务器性能短暂地降低。
在一种重要的情形即高视点速度的情形下,增量G+子网格面的暴露时间可能不会增加至使得用户能够完全分辨新近暴露的面的持续时间。这是因为在高视点速度下,新近暴露的面逗留在视口期间的时间可以是短暂的。
因为图46和图47的方法采用基于预取未来视点位置的增量可见性信息的推测预取,所以高视点速度往往会产生性能恶化,这是因为对于高视点速度,所必须读取和传输的增量可见性信息量会超过服务器的读取能力或可用的传输带宽。
图48A的本方法通过自然地使得本方法的性能恶化相对地难以感知的方式来对本方法的性能与人类视觉系统的性能进行匹配以最小化这些性能恶化。
因为本方法采用基于导航预测的可见性事件数据的预取与高速缓存,所以通常将可见性事件分组从服务器单元发送至客户端单元,这是因为实际上是用作预测用户的视点的导航预测算法代理穿过了视单元过渡边界而不是用户的视点本身穿过了视单元过渡边界。
由于该推测预取,根据用户的视点测量的许多低空间可见相关性的短暂时段实际上不会产生可见性事件分组的延迟到达,这是因为这些相同的分组会由于急于导航的推测预取(也称作基于可见性的预取)已经被发送并高速缓存。
仅当延迟的可见性事件分组实际上被预测时,如图48A的步骤4820 至4830中所确定的,本方法发送较低细节层次的信息以防止延迟分组到达。
图49是示出了暴露时间对人类分辨空间细节的能力的影响的图。
图49是有人类视觉性能研究所再现的数据(Luntinen,O.,et.al. (1995).Modeling the Increase of Contrast Sensitivity with Gating Area and Exposuretime.Vision Res.Vol.35,No.16,pp.2339-2346.Elsevier Science Ltd.)。
该研究显示了暴露时间对于对比灵敏度的显著效果,尤其是对于直至 1000ms的高空间频率。
图49示出了4幅图(A至C),其中对比灵敏度被绘制成从0秒到 10秒的暴露时间的函数。在每幅图中,关系是针对所观察的面(栅格图案)的不同的总暴露面积来绘制的。每幅图表示对于所表示的四个空间频率之一的关系。该研究显示少的暴露时间和小的暴露面积减小了对比灵敏度。注意,在该情况下对比灵敏度随着空间频率的增加而增加是因为所测量的低频率低于关于在所采用的实验条件下的空间对比灵敏度曲线的“峰值”空间频率。根据该数据明显的是,人类视觉系统分辨高的空间频率数据的能力是甚至超过1000ms的暴露时间的函数。这会使得的低细节层次增量可见性信息的用途被初始地使用并且后续用作为增加的对应的增量 G+子网格数据的暴露时间的相对较高的细节层次的增量可见性信息来替代上述低细节层次增量可见性信息。
图48A的针对具有少的暴露时间的几何图形/纹理来读取/传输低细节层次的增量可见性数据的方法能够利用由图49给出的灵敏度VS暴露关系数据以确定相对较高的细节层次的增量可见性数据在随后的时间是否应该以及何时被读取/传输。
图50A是在与增量可见性信息对应的新近可见的几何图形和/或纹理的图像空间速度高到足以引起对于移动的几何图形和/或纹理的减小了的视觉灵敏度的情况下降低了的细节层次的增量可见性信息的服务器处理的框图/流程图。
图50A的框图/流程图示出了传递增量可见性信息的客户端-服务器处理的附加细节。无论客户端和服务器实施在通过网格连接连接的不同物理设备中(如在图46中),还是客户端和服务器处理实施在相同的物理设备中(如在图47中),都能够实施这些步骤。
图50A中,框图将客户端处理和服务器处理分离成不同的处理,而不考虑这些处理是否执行在不同的物理设备上。
标记为5002的框包含客户端处理,标记为5055的框包含服务器处理。
在第一步骤中,客户端处理获得当前视点并且将当前视点存储在数据位置5005中。可以通过连接至客户端处理的包括鼠标、控制杆、游戏控制垫或修改当前视点位置的其他输入设备的输入设备来对给出了当前视点位置的数据进行修改。
客户端处理将数据位置5005的入口提供给服务器处理,其将数据拷贝到数据位置5010中。该拷贝可以发生在本地存储或贯穿网格。
在步骤5015中,服务器处理使用当前视点数据来预测视点的未来位置。该预测可以采用航位推算和碰撞约束、速度与加速度限制、和根据当前视点位置预测未来视点位置的其他方法。
在步骤5020中,使用所预测的未来视点位置确定所预测的视单元过渡,作为视单元边界的穿过的视单元过渡。该步骤采用来自步骤5015的数据和针对模型的已知视单元布置两者。可以在随后的步骤中通过服务器处理来读取与每个所穿过的视单元边界即每个视单元过渡对应的增量可见性数据。
在步骤5025中,对与增量可见性信息(例如,对于特定视单元过渡的增量G+子网格数据)对应的几何元素的图像空间速度进行确定,并且使用变量“元素_速度”存储上述结果。
在后续步骤5030中,将所估计的元素的视网膜速度作为图形空间速度的函数来确定,并且使用变量“估计_视网膜_速度”存储上述结果。可以采用已知的用于对元素的作为该元素的图像空间速度和其他因子(例如,图像空间加速度、运动的可预测性和其他可能的因子)的函数的视网膜速度进行预测的传递函数来估计视网膜速度。
在后续判决步骤5035中确定变量“估计_视网膜_速度”是否大于预定的变量“值_R”。如果在判决步骤5035中确定“估计_视网膜_速度”大于“值_R”,则处理流程行进至步骤5840。
在步骤5840中从外存读取低细节层次(LOD)版本的增量可见性数据(例如,增量G+子网格数据)并且使其可用于客户端处理,其使用该数据对与视单元对应并且存储在标记为5850的数据位置中的可见性图 /PVS数据进行更新。
如果在判决步骤5835中确定变量“估计_视网膜_速度”不大于变量“值_R”,则处理流程行进至步骤5845。
在步骤5845中,从外存读取较高细节层次版本的增量可见性数据(例如,增量G+子网格数据)并且使其可用于客户端处理,其使用该数据对与视单元对应并且存储在标记为5850的数据位置中的可见性图/PVS数据进行更新。
步骤4815至步骤4840确保仅当新近可见的几何图形和/或纹理具有产生减小观察者的对于新近可见的元素的空间视觉灵敏度的视网膜速度的图像空间速度时,才采用增量可见性分组中相对低的细节层次几何图形信息和/或纹理信息。
高的视点速度可以产生几何图形元素的高的图像空间速度。如前面所讨论的,在高视点速度的情况下,当前视点很有可能在更新对于视单元的 PVS所需的所有增量可见性信息被客户端处理接收前进入该视单元。
在该情形下对较低细节层次信息的使用减少了向客户端处理读取和传输增量可见性信息所需的时间,从而减小了视点会在增量构造用于视单元的PVS所需的所有增量可见性信息已经被读取/传输之前进入该视单元的可能性。
此外,在该情形下对较低细节层次信息的使用不大可能被用户检测到。这是因为所提供的增量可见性信息(例如,增量G+子网格信息)对应于具有减小观察者的如图51所示的分辨空间细节的能力的高图像空间速度和对应的高预测的视网膜速度的几何图形元素和/或纹理元素。
图50B是图50A所示的方法的替代实施方式。在图50B中,处理使用不同的测试来确定何时降低正在发送的图形信息的细节层次。在该实施方式中,所使用的测试不是基于过估计的视网膜速度,而是基于发送可见性事件数据所需的带宽和可用带宽的比较。
在图50A中,框图将客户端功能和服务器功能分离成不同的处理,而不考虑这些处理是否执行在不同的物理设备上。
标记为5052的框包含客户端处理,标记为5099的框包含服务器处理。
在第一步骤中,客户端处理获得当前视点并且将当前视点存储在数据位置5055。可以通过连接至客户端处理的包括鼠标、控制杆、游戏控制垫或修改当前视点位置的其他输入设备的输入设备来对给出了当前视点位置的数据进行修改。
客户端处理将数据位置5055的入口提供给服务器处理,其将数据拷贝到数据位置5060中。该拷贝可以发生在本次存储器或贯穿网络。
在步骤5065中,服务器处理使用当前视点数据来预测视点的未来位置。该预测可以采用航位推算和碰撞约束、速度与加速度限制、和根据当前视点位置预测未来视点位置的其他方法。
在步骤5070中,使用所预测的未来视点位置确定所预测的视单元过渡,作为视单元边界的穿过的视单元过渡。该步骤采用来自步骤5065的数据和针对模型的已知视单元布置两者。可以在随后的步骤中通过服务器处理来读取与每个所穿过的视单元边界即每个视单元过渡对应的增量可见性数据。
在步骤5075中,对传输基于在步骤5070中确定所预测的未来视点位置的可见性事件数据所需的持续带宽进行确定。这可以根据与视单元过渡对应的可见性事件数据的已知的分组大小连同导航预测算法穿透视单元边界的速度来确定。
在步骤5080中,确定可用带宽。
在后续的判决步骤5085中,将持续的带宽需求与可用带宽进行比较。
如果在判决步骤5085中确定持续的所需带宽超过可用带宽,则处理流程行进至步骤5090。
在步骤5090中,服务器发送处于充分地低的细节层次的增量可见性数据(可见性事件数据)。这会减小持续的所需带宽和减轻延迟分组到达。
如果在判决步骤5085中确定持续的所需的带宽没有超出可用带宽,则处理流程行进至步骤5095。
在步骤5095中,以相对较高或正常细节层次来发送可见性事件数据。
用于可见性事件流处理的持续的所需带宽往往与可视化的暂时可见连贯性的成反比。低的暂时可见连贯性的持续条件可以由相对地高的用户视点速度来产生,相对地高的用户视点速度易于产生对于可视化的图形元素的相对地高的视网膜图形速度,如结合图50A所讨论的。
如在结合图48A和图49所讨论的短暂地低的暂时可见连贯性的情况下,当持续的可见连贯性增加时,可以使用无损、渐进的几何图形和纹理压缩方法来发送附加图形信息以增加先前传输的图形元素的细节层次。
再一次,因为本方法采用了可以由将持续的数据高速缓存在客户端单元上的导航预测算法驱动的基于可见性的预取方案,所以可以低的细节层次来初始地发送图形信息,然后在其变为用户可见之前将其替换。
图51是示出了作为视网膜速度的相对的空间视觉灵敏度的图,结合该图对该相对的空间视觉灵敏度进行了详细的讨论。
因此,本方法是使用与具有高预测视网膜速度的新近可见的元素对应的相对地低的细节层次的增量可见性信息的方法。
因为图46和图47的方法采用增量可见性信息的基于预测的未来视点位置的推测预取,所以高视点速度往往会产生性能下降,这是因为对于高视点速度,所必须读取和传输的增量可见性信息量会超过服务器的读取能力或可用的传输带宽。
图50A的本方法通过将本方法的性能与人类视觉系统的另一个性能限制即动态视觉灵敏度进行匹配来最小化这些性能下降。动态视觉灵敏度反映了对于具有相对地高的视网膜速度的元素的减小了的空间灵敏度。从而,该方法易于产生适度的性能下降。
图48示出了使用导航限制来避免延迟的可见性事件分组和恢复客户端VM/PVS或增量G数据的方法。
图48A、图50A和图50B的方法用于通过在低的暂时可见性相关性的时段期间发送低细节层次分组来帮助防止所感知的分组延迟。一般地,本文所指定的方法采用可见性事件分组(例如,增量G分组)的基于导航的预取。防止分组延迟到达的替代方法是调节观察者导航速度。通过减慢视点速度,能够增加暂时的可见连贯性。
在漫游类型的应用期间,若干因子可以自然地限制导航速度。如肌肉疲劳、引擎过热或用于控制导航的远程信号的不充分接收等因子自然地易于限制高速度导航期间或紧在其之后的速度。这些高速度导航时段对应于低的暂时可见相关性的时段,在该时段期间视点导航可能超过所预取的可见性事件分组的极限,从造成分组的延迟传递或客户端VM/PVS数据高速缓存的耗尽。在本方法中,可以使用这些因子来无缝地调整视点速度以易于防止可见性事件分组延迟并且恢复VM/PVS或增量G数据的客户端高速缓存。
图48B是示出了施加导航限制以防止可见性事件分组的延迟到达的方法的示例性流程图。
现转向图48B,在一些实施方式中,处理流程从判决步骤4850开始,其中确定可见性事件数据是否会在被客户端单元访问和显示之前到达。
如果在判决步骤4860中确定可见性事件信息不会在延迟到达,则结束处理。
另一方面,如果确定可见性事件数据会在被安排由客户端单元访问/ 显示之后到达,则处理流程行进至步骤4865,其中减小视点速度。在客户端单元上所允许的对视点速度的减小降低了与新近可见的图形信息对应的可见性事件信息被传输到客户端单元所必须的速度,从而易于防止延迟分组到达。
处理流程行进至可选步骤4870,其中使得减小的速度的指示器由客户端单元显示。该指示器可以包括物理疲劳、引擎疲劳、不足的动力或导航阻碍如障碍物或糟糕的路况等的指示器。对减小了的速度状态的显示使得速度对于客户端用户显得更加自然和可预测。
在替代的实施方式中,图48B的示例性流程图的方法可以由服务器单元或客户端单元或者工作在一起的上述两个单元来进行。
图51是示出了作为视网膜速度的函数的相对的空间视觉灵敏度的图。
可以根据以下文献给出的数据来重现图51的图:Eckert,M.P.and Buchsbaum,G.(1993).The Significance of Eye Movements and Image Acceleration for CodingTelevision Image Sequences.In Digital Images and Human Vision,Watson,A.B.(Ed.),MIT Press,chapter 8,pp.89-98。
该数据示出了人类视觉系统的分辨具有高的视网膜速度的元素的细节的能力的明显下降。
动态视觉灵敏度是人类视觉系统的空间-时间极限(参见Brown,B. (1972b)Dynamic Visual Acuity,Eye Movements and Peripheral Acuity for movingtargets.Vision Res.Vol.12,pp.305-321.Pergamon Press 1972.),其表达了视觉系统的对于运动对象的灵敏度。经历视网膜接收器上的光流的图形元素产生对视网膜的短暂刺激和可能不会满足完全分辨运动图形元素所需的积分时间的较高处理元素。所以,视觉系统糟糕地分辨高的视网膜图形速度。
眼睛运动往往通过追逐和注视的动眼策略来减小所跟踪的图形元素的视网膜图形速度。无论对于具有高的图像空间速度、高的图像空间加速度还是不可预测的图像空间运动的对象,动眼跟踪都不是完全地精确的并且产生降低运动元素的可分辨率的视网膜图像运动。描述动眼追逐的效力的将视网膜图像速度关联为图像空间加速度和可预测性的函数的关系(如 Lisberger et al.(1987)Annual Review of Neuroscience 1987,10:97-129)是已知的并且用于基于所跟踪元素的图像空间速度和/或加速度来估计视网膜速度。
图52是示出了以下客户端和服务器处理的流程图/框图:服务器访问对于父视单元的预存储的增量G子网格并且使用该信息来构造用于父视单元的可见性图/PVS,然后使用上述可见性图/PVS连同对于子视单元过渡的预存储的轮廓周线信息来构造用于子视单元过渡的增量G子网格数据。
相比存储对于每个视单元的PVS,使用在本说明书中描述的增量G+ 子网格和增量G-子网格数据的增量PVS存储方案具有充分地较低的存储成本。然而,即使使用基于有效静态遮挡(ESO)和有效动态遮挡(EDO) 的精度控制启发法,对于具有许多视单元的大的数据库而言,对于增量 PVS数据的存储成本对于往往仍然是非常大的。
减小预计算的增量PVS数据库的大小的一种方法是仅存储对于相对地大的“父”视单元的增量G子网格数据并且使用预存储的标记轮廓周线信息来在运行时间生成对于子视单元的增量G子网格数据。
结合图46和图47的讨论来引入该方案并且在此给出附加的细节。
现转向图52,图52是示出了执行在服务器设备上的服务器处理和执行在单独的客户端设备上的客户端处理的图。除了以下所述以外图52与图46非常相似:虽然在图46的方法中,可以直接从外存读取所有的增量 G子网格。但是在图52的方法中直接从存储器中读取仅对于父视单元的增量子网格数据。使用该父增量G子网格数据连同先前的父VM/PVS来构造用于当前父视单元的VM/PVS。使用该新的父VM/PVS连同对于子视单元过渡的标记轮廓信息来在运行时间生成对于子单元的增量G子网格数据。
相比直接存储针对每次子视单元过渡的增量G子网格数据,使用图 31的数据结构及有关的算法(图32至图37)的标记轮廓周线信息可以具有更小的存储成本。此外,图37的简化了的3D网格遍历算法确保能够在运行时间快速地构造对应的对于子单元的增量G子网格数据。使用该方法,可以实现存储成本与运行时间的计算成本之间的最佳平衡。
现转向图52,服务器由标记为5201的暗色矩形来表示。客户端设备由标记为5202的暗色矩形来表示。
服务器设备中的外部存储器或磁盘存储器被标记为5205和5207。存储器5205存储对于特定的父视单元过渡的增量G子网格数据(增量G+ 子网格数据和增量G-子网格数据两者)。
在步骤5210中使用该数据根据先前的父视单元VM来构造父可见性图(VM)。
标记为5207的外存存储器或磁盘存储器存储对于子视单元的视单元过渡的标记轮廓周线信息。
在步骤5214中使用该数据来使用父视单元的VM和图37的简化了的3D网格遍历以及结合表XIV来构造用于子视单元过渡的增量G+子网格和增量G-子网格数据。
将图36和图37的简化的3D多边形网格遍历方法应用至给出的统一可见性图(包含对于两个连接的视单元例如A和B的轮廓周线/遮挡边界),可以使用种子三角形的一个集合来构造增量G+子网格,而使用种子三角形的该集合的补集来构造增量G-子网格。
例如,考虑包含对于两个连接的视单元A和B的轮廓周线和对应的遮挡边界多义线的具体的统一可见性图。下表示出了如何能够使用取决于种子三角形集合/列表的选择的标记周线来生成或绕过增量G+子网格或增量G-子网格。
因此,由于增量G+(和增量G-)子网格数据可以在运行时间根据对于对应的视单元过渡的标记轮廓周线来生成,所以不需要存储增量G+(和增量G-)子网格数据。因为相比增量G子网格数据,标记轮廓周线信息通常具有更小的存储成本,所以该方法能够充分地减小外存数据的总体存储需求。这尤其是当针对若干视单元过渡重复使用所选择的轮廓周线时成立,其在当有效动态遮挡(EDO)局部地高的地方成立,对应于模型的局部动态可见连贯性高的区。
为了在运行时间生成对于视单元过渡的增量G+或增量G-子网格信息,重要的是所有的多边形网格数据(从特定视单元看去可见)和标记轮廓周线信息(对应于特定的视单元过渡)已经出现在快速可存取的(内) 存储器中。
为了确保在增量G子网格生成处理之前从外存存储器预加载该信息,服务器处理能够直接访问从包含要生成增量G子网格数据的特定视单元的较大视单元看去可见的多边形或多边形分段的集合。该数据相当于对于视单元的直接PVS数据,但是通过预计算和存储对于相对少的数目的大视单元的这些直接PVS数据来最小化存储需求,根据上述直接PVS数据在预取期间使用简化的网格遍历处理和标记轮廓周线信息来生成对于更大量的被包含的视单元的PVS。可替代地,可以通过访问对于父到父的视单元过渡的增量G子网格数据根据先前针对相邻大视单元(自身是其他子视单元的父视单元)构造的现有VM/PVS来构造父视单元。
此外,服务器处理还访问对于要生成增量G子网格信息的特定的子视单元的标记轮廓周线信息。
当在内存储器中呈现构造增量G在网格数据所需的多边形网格信息和标记轮廓周线信息时,外存存储器访问不能中断服务器的增量G子网格数据的生成。
对父视单元和子视单元数据的该用途是采用存在于层次单元之间的简单的可见性层次结构的示例:从子视单元看去可见的所有多边形/分段也从包含父视单元看去可见。在父视单元的该申请中,重要的是包括实际上位于父视单元内的所有多边形/分段。最终地,通常将终端叶视单元构造成包含很少或不包含几何图形,使得它们的VM/PVS排他地“从视单元看去”和较少地“被包含在视单元中”。
步骤5220及较高的步骤与图46示出的步骤4620及较高步骤相同。
如前所述,本方法的增量PVS方案采用对于相邻视单元(例如,相邻的父视单元)之间以及父视单元与子视单元之间的视单元过渡的明确的增量可见性信息。
在一种实施方式中,对于父到父的视单元过渡的增量可见性信息使用明确的增量G+和/或增量G-数据集合,而对于父到子和/或子到子的视单元过渡使用中间的标记轮廓周线信息。该布置使得能够在存储大小与运行时间传输/处理成本之间进行平衡。这些布置的多级层次结构可以进一步减小存储成本。
此外,图52的客户端-服务器实施顺从以下替代实施方式:客户端处理和服务器处理呈现在相同的设备中(类似与图47)。该实施方式在将整个数据库存储在与客户端的计算设备相同的计算设备上的外存中的计算游戏和其他应用程序中具有效用。
图54是示出了以下客户端和服务器处理的流程图/框图:服务器访问预存储对于父视单元的增量G子网格并且使用该信息来构造用于父视单元的可见性图/PVS,然后使用该可见性图/PVS连同预存储对于子视单元过渡的轮廓周线信息来构造用于子视单元过渡的增量G子网格数据,在该实施方式中,服务器可选地将包含标记轮廓周线的增量G数据直接提供给客户端。
图54示出了与图52的实施方式类似的一种实施方式。
标记为5405的外存储区包含增量G信息以及对于对应的增量G数据的标记轮廓周线信息(例如,与增量G+数据存储在一起的标记轮廓周线信息)。
在图54的实施方式中,可选地,可以将该数据直接发送至远程客户端处理。
在步骤5440中,客户端处理根据对应的增量G数据构造PVS数据。
在步骤5450中,客户端处理使用图36和图37的简化的、暗示的3D 网格遍历处理(其使用了所包括的标记轮廓周线信息)根据父PVS数据来构造子PVS数据。
除此之外,对应的标记步骤和存储区与图52的相同。
图54的实施方式能够通过使用所包括的标记轮廓周线信息来传输较少的、相对地大的增量G分组以减少传输成本。在该方法中,客户端处理构造较小的、子视单元的PVS,从而消除了发送对于子视单元的对应的增量G分组的需要。在许多情况下,相比对于子视单元的对应的增量 G分组,标记轮廓周线信息具有更小的存储和传输成本。
在该实施方式中,以根据标记轮廓周线来生成子PVS数据的附加客户端运行时间处理为代价来减少传输成本。在可用的传输带宽受限的情况下,能够采用该方法来加速向客户端传递可见性事件信息。
重复使用对于多次视单元过渡的标记轮廓周线的方法
在模型的具有高的可见性连贯性的区中,对于若干相邻的视单元的一阶轮廓周线可以是相同或非常相似的。如果对于若干次视单元过渡,对应的标记周线是相同的,则可以简单地重复使用单个标记周线。
当标记周线充分地相似时,存储并且使用最保守的标记周线,从而减少存储和传输成本。
可替代地,可以对两个轮廓周线之间的差异进行编码(例如,通过仅标记不同的多义线段)并且将该信息用于在运行时间/预取阶段根据现有的轮廓周线来增量地构造一个轮廓周线。
当预测客户端具有不充分的可见性事件数据时使用较少的增量可见性分组的方法
总体上,大的增量可见性分组易于减小总体的存储大小,减小元素的重复传输以及最小化寻找时间。这易于以传递增量可见性数据的较高延迟为代价来提高吞吐量。相反,小的增量可见性分组一般具有较高的存储成本、增加的重复传输和较高的寻找时间,但是可以以较低的延迟传递他们。
在本方法的客户端-服务器实施中,可以基于当前的可见性事件流的瞬时延迟要求来动态地选择增量可见性数据的分组大小。特殊地,如果预测(通过服务器的基于导航的推测预取)当前视点在对应的增量可见性数据能够被传输到客户端以前穿透特定的视单元,则服务器可以将与较小视单元(例如,子视单元)的过渡对应的增量可见性信息。该分组可以根据需要由服务器(例如,使用父到子标记轮廓周线来“绕过”特定的多边形) 来生成。然后将对应的较小的增量可见性分组发送给客户端。如果传输带宽受限,则该方法能够有效地减小传递分组的时间。
该方法可以结合在漫游的低可见相关项强调可用连接时的这些时段期间降低细节层次的方法来使用。
提高实施的鲁棒性的方法
本方法所要求的各种多边形-多边形和其他几何图形相交部确定受在大多数浮点几何图形计算中遇到的相同的数字精度限制。这些限制之一与在退化情况下(例如,一个多边形的边位于另一个多边形的平面和内部) 的相交部的可判定性有关。
因为本方法确定保守的结果,所以能够通过将视单元稍微增大一定的小的整数值来有效地消除这样的退化情况。一般地,这会移除退化而保留保守的解。
通过使用层次可见性来提高实施的有效性的方法
来自子视单元的保守的线性化本影不连续性网格、可见性图和PAU 是根据包含子视单元的父视单元确定的线性化本影不连续性网格的子集。
从而,用于通过这些方法中的任意方法确定从子视单元看去可见的多边形/分段的集合的多边形/多边形分段的可见集可以限于从包含父视单元看去可见的那些多边形/多边形分段。
通过使用遮挡物选择来提高可见性预计算效率的方法
在构造了可见性图之后,应用前面描述的使用ESO度量来指导结果的可见性图的简化的方法。
在可见性图的构造之前应用简化可见性图的另一种方法。在该方法中,使用简单的度量对各个网格对象(或紧密地分隔的网格对象分组)的遮挡可能性进行估计。这些度量可以包括对象的最大对向角或对象的包围盒。可替代地,度量可以是对形成在视单元与网格对象的包围盒之间的简单的PAU的估计。使用网格对象的遮挡可能性的这样的估计,可以在构造可见性图之前移除许多无效的遮挡物。
注意到,基于各个网格对象的遮挡可能性的该类型的遮挡物选择可能不解释在由具体的网格对象遮挡物被融合到其他网格对象遮挡物时所产生的较大PAU所导致的较大的聚合遮挡。因此,当检查其他附近遮挡物的邻近和位置时遮挡物选择启发法变得更加有效。
使用根据PAU导出的虚拟遮挡物的方法
在图26所示的构造从视单元看去的PAU的方法的修改中,将PAU 与一个或多个平面相交。PAU与平面的相交部限定了多边形虚拟遮挡物。这些虚拟遮挡物能够以类似于在运行时间构造PVS的Koltun等人(2000) 的方式来使用。
本方法的优点在于它实现了全3D实施,而Koltun等人(2000)的方法是2.5D。
使用多边形虚拟遮挡物的方法是以下前述方法的替代方法:标记轮廓周线(包括保守地简化的周线)有效地用于定界虚拟遮挡物。
显然,鉴于以上教示,可以对本进步进行各种修改和变型。因此,应当理解,除非在本文中具体地描述,否则可以在所附权利要求范围内实现所述进步。

Claims (19)

1.一种使用所存储的信息来确定第一网格多边形集合的方法,所述网格多边形形成多边形网格,来自所述网格多边形的第一网格多边形集合从第一视区看去可见,所述方法包括:
检索从第二视区看去可见的第二网格多边形集合,所述第二视区包含所述第一视区;
检索指示至少一个第一网格多边形的信息,所述至少一个第一网格多边形属于相连网格多边形集合,所述相连网格多边形集合从所述第一视区看去可见;
检索指示所述至少一个相连网格多边形集合的至少一个边界边的信息;
遍历属于所述第二网格多边形集合的所述至少一个相连网格多边形集合,所述遍历包括:
在所述至少一个第一网格多边形处开始所述遍历,以及
当在所述遍历期间遇到所述至少一个边界边时中断所述遍历。
2.根据权利要求1所述的方法,其中,所述指示所述至少一个边界边的信息包括指示至少一个一阶轮廓边的信息,所述至少一个一阶轮廓边是相对于所述第一视区的一阶轮廓边,所述至少一个一阶轮廓边包括:
共享所述至少一个一阶轮廓边的第一多边形和第二多边形,
所述第一多边形背面对来自所述多个视区顶点的每个视区顶点,
所述第二多边形正面对来自所述多个视区顶点的至少一个视区顶点,并且
所述第一多边形和所述第二多边形相对于彼此具有背面对取向。
3.根据权利要求1所述的方法,其中,所述指示所述至少一个边界边的信息包括指示至少一个复合轮廓顶点的信息,所述至少一个复合轮廓顶点是相对于所述第一视区的复合轮廓顶点,所述复合轮廓顶点包括由所述第一视区支撑的楔与至少一个一阶轮廓边之间的相交部,所述至少一个一阶轮廓边包括:
共享所述至少一个一阶轮廓边的第一多边形和第二多边形,
所述第一多边形背面对所述第一视区的每个视区顶点,
所述第二多边形正面对所述第一视区的至少一个视区顶点,并且
所述第一多边形和所述第二多边形相对于彼此具有背面对取向。
4.根据权利要求1所述的方法,其中,所述指示至少一个边界边的信息包括指示第一从视区看去的遮挡边界边的信息,所述第一从视区看去的遮挡边界边是通过由所述第一视区支撑的至少一个楔与所述第一网格多边形集合的相交而形成的边,所述至少一个楔是入射在一阶轮廓边上的楔,所述一阶轮廓边是相对于所述第一视区的一阶轮廓边,所述一阶轮廓边包括:
共享所述一阶轮廓边的第一多边形和第二多边形,
所述第一多边形背面对所述第一视区的每个视区顶点,
所述第二多边形正面对所述第一视区的至少一个视区顶点,并且
所述第一多边形和所述第二多边形相对于彼此具有背面对取向。
5.一种使用所存储的信息来从形成多边形网格的网格多边形中确定从第一视区看去可见的第一网格多边形集合的方法,所述方法包括以下步骤:
检索从第二视区看去可见的第二网格多边形集合,所述第二视区包含所述第一视区;
检索指示至少一个第一网格多边形的信息,所述至少一个第一网格多边形属于相连网格多边形集合,所述相连网格多边形集合从所述第一视区看去可见;
检索指示遮挡边界边的序列中的第一从视区看去的遮挡边界边的信息,所述第一从视区看去的遮挡边界边是相对于所述第一视区的一阶遮挡边界边,所述序列包括相对于所述第一视区的一阶遮挡边界;
检索指示与所述第一从视区看去的遮挡边界边对应的第一一阶轮廓边的信息;
构造遮挡边界边的所述序列中的至少一个第二从视区看去的遮挡边界边,所述构造至少一个第二从视区看去的遮挡边界边包括以下步骤:
识别所述第一从视区看去的遮挡边界边的顶点,所述第一从视区看去的遮挡边界边的所述顶点通过第一楔与第二网格多边形的相交而形成,所述第一楔由所述第一视区支撑并且入射在所述第一一阶轮廓边上;
识别第三网格多边形,所述第三网格多边形与所述第一网格多边形具有共享边,所述共享边包括所述第一从视区看去的遮挡边界的所述顶点,
在所述第一一阶轮廓边上构造所述第一楔;
构造通过所述第一楔与所述第三多边形的相交而形成的所述至少一个第二从视区看去的遮挡边界边;
遍历属于所述第二网格多边形集合的所述至少一个相连网格多边形集合,所述遍历包括:
在所述至少一个第一网格多边形处开始所述遍历,以及
当遇到所述一阶遮挡边界时中断所述遍历。
6.一种使用所存储的信息来从形成多边形网格的网格多边形中确定从第一视区看去可见的第一网格多边形集合的方法,所述方法包括以下步骤:
检索从第二视区看去可见的第二网格多边形集合,所述第二视区包含所述第一视区;
检索指示至少一个第一网格多边形的信息,所述至少一个第一网格多边形属于相连网格多边形集合,所述相连网格多边形集合从所述第一视区看去可见;
检索指示一阶轮廓边的序列中的至少一个第一一阶轮廓边的信息,所述至少一个第一一阶轮廓边是相对于所述第一视区的一阶轮廓边,所述序列包括相对于所述第一视区的一阶轮廓周线;
识别一阶轮廓边的所述序列中的至少另一个一阶轮廓边,所述至少另一个一阶轮廓边连接至所述至少一个一阶轮廓边,每个所述一阶轮廓边包括:
共享对应的所述一阶轮廓边的第一多边形和第二多边形,
所述第一多边形背面对所述第一视区的每个顶点,
所述第二多边形正面对来自所述第一视区的至少一个视区顶点,并且
所述第一多边形和所述第二多边形相对于彼此具有背面对取向;以及
遍历属于所述第二网格多边形集合的所述至少一个相连网格多边形集合,所述遍历包括:
在所述至少一个第一网格多边形处开始所述遍历,以及
当遇到所述至少一个一阶轮廓边或所述至少另一个一阶轮廓边时中断所述遍历。
7.一种使用所存储的信息来从形成多边形网格的网格多边形中确定从第一视区看去可见的第一网格多边形集合的方法,所述方法包括:
检索从第二视区看去可见的第二网格多边形集合,所述第二视区包含所述第一视区;
检索指示至少一个第一网格多边形的信息,所述至少一个第一网格多边形属于相连网格多边形集合,所述相连网格多边形集合从所述第一视区看去至少部分地可见;
检索指示至少一个遮挡边界边的信息,所述遮挡边界边包括所述相连网格多边形集合的边,所述遮挡边界边从所述第一视区看去不可见,所述指示至少一个遮挡边界边的信息包括边遇到数,所述边遇到数的值等于遇到所述至少一个遮挡边界边所需的对所述相连网格多边形集合的广度优先遍历的迭代的数目,所述广度优先遍历从所述至少一个第一网格多边形开始;
遍历属于所述第二网格多边形集合的所述至少一个相连网格多边形集合,所述遍历包括:
在所述至少一个第一网格多边形处开始广度优先遍历;
在所述广度优先遍历的迭代的数目等于所述边遇到数之后中断所述广度优先遍历。
8.一种使用所存储的信息从形成多边形网格的网格多边形中确定从第一视区看去可见的第一网格多边形集合的方法,所述方法包括以下步骤:
检索从第二视区看去可见的第二网格多边形集合,所述第二视区包含所述第一视区;
检索指示至少一个第一网格多边形的信息,所述至少一个第一网格多边形属于相连网格多边形集合,所述相连网格多边形集合从所述第一视区看去可见;
检索指示至少一个一阶轮廓边的信息,所述至少一个一阶轮廓边是相对于所述第一视区的一阶轮廓边,所述指示至少一个一阶轮廓边的信息包括边遇到数,所述边遇到数的值等于遇到所述至少一个一阶轮廓边所需的对所述相连网格多边形集合的广度优先遍历的迭代的数目,所述广度优先遍历从所述至少一个第一网格多边形开始,所述至少一个一阶轮廓边包括:
共享所述一阶轮廓边的第一多边形和第二多边形,
所述第一多边形背面对所述第一视区的每个顶点,
所述第二多边形正面对来自所述第一视区的至少一个视区顶点,并且
所述第一多边形和所述第二多边形相对于彼此具有背面对取向;
遍历属于所述第二网格多边形集合的所述至少一个相连网格多边形集合,所述遍历包括:
在所述至少一个第一网格多边形处开始广度优先遍历;
在所述广度优先遍历的迭代的数目等于所述边遇到数之后中断所述广度优先遍历。
9.一种使用所存储的信息来确定第一网格多边形集合的方法,所述第一网格多边形集合形成多边形网格,所述第一网格多边形集合从第一视区看去可见,所述方法包括:
检索从第二视区看去可见的第二网格多边形集合,所述第二视区包含所述第一视区;
检索指示至少一个第一网格多边形的信息,所述至少一个第一网格多边形属于相连网格多边形集合,所述相连网格多边形集合从所述第一视区看去不可见;
检索指示所述至少一个相连网格多边形集合的至少一个边界边的信息;
遍历属于所述第二网格多边形集合的所述相连网格多边形集合,所述遍历包括:
在所述至少一个第一网格多边形处开始所述遍历;
当遇到所述至少一个边界边时中断所述遍历。
10.根据权利要求9所述的方法,其中,所述指示至少一个边界边的信息包括至少一个从视区看去的遮挡边界边,所述至少一个从视区看去的遮挡边界边是通过至少一个楔与所述网格多边形的相交而形成的边,所述至少一个楔入射在一阶轮廓边上,所述一阶轮廓边是相对于所述第一视区的一阶轮廓边,所述一阶轮廓边包括:
共享所述一阶轮廓边的第一多边形和第二多边形,
所述第一多边形背面对所述第一视区的每个顶点,
所述第二多边形正面对来自所述第一视区的至少一个视区顶点,并且
所述第一多边形和所述第二多边形相对于彼此具有背面对取向。
11.一种使用所存储的信息来从形成多边形网格的网格多边形中确定从第一视区看去不可见的第一网格多边形集合的方法,所述方法包括以下步骤:
检索从第二视区看去可见的第二网格多边形集合,所述第二视区包含所述第一视区;
检索指示至少一个第一网格多边形的信息,所述至少一个第一网格多边形属于相连网格多边形集合,所述相连网格多边形集合从所述第一视区看去被至少部分地遮挡;
检索指示至少一个暴露边界边的信息,所述暴露边界边包括所述相连网格多边形集合的边,所述暴露边界边从所述第一视区看去可见,所述指示至少一个暴露边界边的信息包括边遇到数,所述边遇到数的值等于遇到所述至少一个暴露边界边所需的对所述相连网格多边形集合的广度优先遍历的迭代的数目,所述广度优先遍历从所述至少一个第一网格多边形开始;
遍历属于所述第二网格多边形集合的所述至少一个相连网格多边形集合,所述遍历包括:
在所述至少一个第一网格多边形处开始所述广度优先遍历;
在所述广度优先遍历的迭代的数目等于所述边遇到数之后中断所述广度优先遍历。
12.一种使用所存储的信息来确定第一网格多边形集合的系统,所述网格多边形形成多边形网格,来自所述网格多边形的第一网格多边形集合从第一视区看去可见,所述系统包括:
数据库,所述数据库存储从第二视区看去可见的第二网格多边形集合、指示属于相连网格多边形集合的至少一个第一网格多边形的信息、以及指示所述至少一个相连网格多边形集合的至少一个边界边的信息;以及
具有处理器的解码器,所述处理器被配置成:
检索从第二视区看去可见的第二网格多边形集合,所述第二视区包含所述第一视区,
检索指示至少一个第一网格多边形的信息,所述至少一个第一网格多边形属于相连网格多边形集合,所述相连网格多边形集合从所述第一视区看去可见,
检索指示所述至少一个相连网格多边形集合的至少一个边界边的信息,以及
遍历属于所述第二网格多边形集合的所述至少一个相连网格多边形集合,所述遍历:
在所述至少一个第一网格多边形处开始,以及
当在所述遍历期间遇到所述至少一个边界边时中断。
13.根据权利要求12所述的系统,其中,所述指示所述至少一个边界边的信息包括指示至少一个一阶轮廓边的信息,所述至少一个一阶轮廓边是相对于所述第一视区的一阶轮廓边,所述至少一个一阶轮廓边包括:
共享所述至少一个一阶轮廓边的第一多边形和第二多边形,
所述第一多边形背面对来自所述多个视区顶点的每个视区顶点,
所述第二多边形正面对来自所述多个视区顶点的至少一个视区顶点,并且
所述第一多边形和所述第二多边形相对于彼此具有背面对取向。
14.根据权利要求12所述的系统,其中,所述指示所述至少一个边界边的信息包括指示至少一个复合轮廓顶点的信息,所述至少一个复合轮廓顶点是相对于所述第一视区的复合轮廓顶点,所述复合轮廓顶点包括由所述第一视区支撑的楔与至少一个一阶轮廓边之间的相交部,所述至少一个一阶轮廓边包括:
共享所述至少一个一阶轮廓边的第一多边形和第二多边形,
所述第一多边形背面对所述第一视区的每个视区顶点,
所述第二多边形正面对所述第一视区的至少一个视区顶点,并且
所述第一多边形和所述第二多边形相对于彼此具有背面对取向。
15.根据权利要求12所述的系统,其中,所述指示至少一个边界边的信息包括指示第一从视区看去的遮挡边界边的信息,所述第一从视区看去的遮挡边界边是通过由所述第一视区支撑的至少一个楔与所述第一网格多边形集合的相交而形成的边,所述至少一个楔是入射在一阶轮廓边上的楔,所述一阶轮廓边是相对于所述第一视区的一阶轮廓边,所述一阶轮廓边包括:
共享所述一阶轮廓边的第一多边形和第二多边形,
所述第一多边形背面对所述第一视区的每个视区顶点,
所述第二多边形正面对所述第一视区的至少一个视区顶点,并且
所述第一多边形和所述第二多边形相对于彼此具有背面对取向。
16.一种使用所存储的信息来确定第一网格多边形集合的方法,所述网格多边形形成多边形网格,来自所述网格多边形的第一网格多边形集合从第一视区看去可见,所述方法包括:
检索从第二视区看去可见的第二网格多边形集合,所述第二视区包含所述第一视区;
检索指示至少一个第一网格多边形的信息,所述至少一个第一网格多边形属于相连网格多边形集合,所述相连网格多边形集合从所述第一视区看去可见;
检索指示所述至少一个相连网格多边形集合的至少一个边界边的信息;
遍历属于所述第二网格多边形集合的所述至少一个相连网格多边形集合,所述遍历包括:
在所述至少一个第一网格多边形处开始所述遍历,以及
当在所述遍历期间遇到所述至少一个边界边时中断所述遍历。
17.根据权利要求16所述的方法,其中,所述指示所述至少一个边界边的信息包括指示至少一个一阶轮廓边的信息,所述至少一个一阶轮廓边是相对于所述第一视区的一阶轮廓边,所述至少一个一阶轮廓边包括:
共享所述至少一个一阶轮廓边的第一多边形和第二多边形,
所述第一多边形背面对来自所述多个视区顶点的每个视区顶点,
所述第二多边形正面对来自所述多个视区顶点的至少一个视区顶点,并且
所述第一多边形和所述第二多边形相对于彼此具有背面对取向。
18.根据权利要求17所述的方法,其中,所述指示所述至少一个边界边的信息包括指示至少一个复合轮廓顶点的信息,所述至少一个复合轮廓顶点是相对于所述第一视区的复合轮廓顶点,所述复合轮廓顶点包括由所述第一视区支撑的楔与至少一个一阶轮廓边之间的相交部,所述至少一个一阶轮廓边包括:
共享所述至少一个一阶轮廓边的第一多边形和第二多边形,
所述第一多边形背面对所述第一视区的每个视区顶点,
所述第二多边形正面对所述第一视区的至少一个视区顶点,并且
所述第一多边形和所述第二多边形相对于彼此具有背面对取向。
19.根据权利要求16所述的方法,其中,所述指示至少一个边界边的信息包括指示第一从视区看去的遮挡边界边的信息,所述第一从视区看去的遮挡边界边是通过由所述第一视区支撑的至少一个楔与所述第一网格多边形集合的相交而形成的边,所述至少一个楔是入射在一阶轮廓边上的楔,所述一阶轮廓边是相对于所述第一视区的一阶轮廓边,所述一阶轮廓边包括:
共享所述一阶轮廓边的第一多边形和第二多边形,
所述第一多边形背面对所述第一视区的每个视区顶点,
所述第二多边形正面对所述第一视区的至少一个视区顶点,并且
所述第一多边形和所述第二多边形相对于彼此具有背面对取向。
CN201710146760.7A 2010-06-30 2011-06-29 使用所存储的信息确定第一网格多边形集合的方法和系统 Pending CN107093202A (zh)

Applications Claiming Priority (13)

Application Number Priority Date Filing Date Title
US36028310P 2010-06-30 2010-06-30
US61/360,283 2010-06-30
US38205610P 2010-09-13 2010-09-13
US61/382,056 2010-09-13
US38428410P 2010-09-19 2010-09-19
US61/384,284 2010-09-19
US201161452330P 2011-03-14 2011-03-14
US61/452,330 2011-03-14
US201161474491P 2011-04-12 2011-04-12
US61/474,491 2011-04-12
US201161476819P 2011-04-19 2011-04-19
US61/476,819 2011-04-19
CN201180042082.0A CN103080984B (zh) 2010-06-30 2011-06-29 确定从视区看去可见的网格多边形或所述网格多边形的分段的集合的方法及系统

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201180042082.0A Division CN103080984B (zh) 2010-06-30 2011-06-29 确定从视区看去可见的网格多边形或所述网格多边形的分段的集合的方法及系统

Publications (1)

Publication Number Publication Date
CN107093202A true CN107093202A (zh) 2017-08-25

Family

ID=45497377

Family Applications (5)

Application Number Title Priority Date Filing Date
CN201710146760.7A Pending CN107093202A (zh) 2010-06-30 2011-06-29 使用所存储的信息确定第一网格多边形集合的方法和系统
CN201710146418.7A Pending CN107123155A (zh) 2010-06-30 2011-06-29 确定并存储描述第一网格多边形集合的信息的方法和系统
CN201710146762.6A Pending CN107093203A (zh) 2010-06-30 2011-06-29 图形信息的基于导航的预取发送或接收的控制方法和系统
CN201710146079.2A Active CN107103639B (zh) 2010-06-30 2011-06-29 确定网格多边形或网格多边形的分段的集合的方法和系统
CN201180042082.0A Active CN103080984B (zh) 2010-06-30 2011-06-29 确定从视区看去可见的网格多边形或所述网格多边形的分段的集合的方法及系统

Family Applications After (4)

Application Number Title Priority Date Filing Date
CN201710146418.7A Pending CN107123155A (zh) 2010-06-30 2011-06-29 确定并存储描述第一网格多边形集合的信息的方法和系统
CN201710146762.6A Pending CN107093203A (zh) 2010-06-30 2011-06-29 图形信息的基于导航的预取发送或接收的控制方法和系统
CN201710146079.2A Active CN107103639B (zh) 2010-06-30 2011-06-29 确定网格多边形或网格多边形的分段的集合的方法和系统
CN201180042082.0A Active CN103080984B (zh) 2010-06-30 2011-06-29 确定从视区看去可见的网格多边形或所述网格多边形的分段的集合的方法及系统

Country Status (4)

Country Link
US (4) US9472019B2 (zh)
EP (1) EP2589023B1 (zh)
CN (5) CN107093202A (zh)
WO (1) WO2012012161A2 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108421257A (zh) * 2018-03-29 2018-08-21 网易(杭州)网络有限公司 不可见元素的确定方法、装置、存储介质和电子装置
CN112270679A (zh) * 2020-11-19 2021-01-26 浙江大学 一种结合凹点与凹边的凸多边形轮廓的图像分割方法
CN113706706A (zh) * 2021-10-28 2021-11-26 自然资源部第一海洋研究所 数据的处理方法、装置及电子设备

Families Citing this family (73)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9053562B1 (en) 2010-06-24 2015-06-09 Gregory S. Rabin Two dimensional to three dimensional moving image converter
US9892546B2 (en) 2010-06-30 2018-02-13 Primal Space Systems, Inc. Pursuit path camera model method and system
US10109103B2 (en) * 2010-06-30 2018-10-23 Barry L. Jenkins Method of determining occluded ingress and egress routes using nav-cell to nav-cell visibility pre-computation
US9916763B2 (en) * 2010-06-30 2018-03-13 Primal Space Systems, Inc. Visibility event navigation method and system
CN107093202A (zh) 2010-06-30 2017-08-25 巴里·林恩·詹金斯 使用所存储的信息确定第一网格多边形集合的方法和系统
US8847965B2 (en) * 2010-12-03 2014-09-30 The University Of North Carolina At Chapel Hill Methods, systems, and computer readable media for fast geometric sound propagation using visibility computations
GB201116438D0 (en) * 2011-09-22 2011-11-02 Advanced Risc Mach Ltd Occlusion queries in graphics processing
WO2013184215A2 (en) 2012-03-22 2013-12-12 The University Of North Carolina At Chapel Hill Methods, systems, and computer readable media for simulating sound propagation in large scenes using equivalent sources
US9058347B2 (en) 2012-08-30 2015-06-16 Facebook, Inc. Prospective search of objects using K-D forest
US9053191B2 (en) * 2012-08-30 2015-06-09 Facebook, Inc. Retroactive search of objects using k-d tree
US8941676B2 (en) * 2012-10-26 2015-01-27 Nvidia Corporation On-chip anti-alias resolve in a cache tiling architecture
US10438314B2 (en) 2012-10-26 2019-10-08 Nvidia Corporation Two-pass cache tile processing for visibility testing in a tile-based architecture
US9311749B2 (en) * 2012-12-07 2016-04-12 Donya Labs Ab Method for forming an optimized polygon based shell mesh
US9208257B2 (en) * 2013-03-15 2015-12-08 Oracle International Corporation Partitioning a graph by iteratively excluding edges
US10198856B2 (en) * 2013-11-11 2019-02-05 Oxide Interactive, LLC Method and system of anti-aliasing shading decoupled from rasterization
US9344733B2 (en) 2013-12-27 2016-05-17 Samsung Electronics Co., Ltd. Feature-based cloud computing architecture for physics engine
US9986225B2 (en) * 2014-02-14 2018-05-29 Autodesk, Inc. Techniques for cut-away stereo content in a stereoscopic display
US9558533B2 (en) 2014-05-30 2017-01-31 Apple Inc. 3D asset performance enhancement
US10679407B2 (en) 2014-06-27 2020-06-09 The University Of North Carolina At Chapel Hill Methods, systems, and computer readable media for modeling interactive diffuse reflections and higher-order diffraction in virtual environment scenes
US9977644B2 (en) 2014-07-29 2018-05-22 The University Of North Carolina At Chapel Hill Methods, systems, and computer readable media for conducting interactive sound propagation and rendering for a plurality of sound sources in a virtual environment scene
US10154072B2 (en) * 2014-09-17 2018-12-11 Microsoft Technology Licensing, Llc Intelligent streaming of media content
US10216750B2 (en) * 2014-10-14 2019-02-26 Microsoft Technology Licensing, Llc Annotated geometry
US9756375B2 (en) * 2015-01-22 2017-09-05 Microsoft Technology Licensing, Llc Predictive server-side rendering of scenes
US10803089B1 (en) * 2015-02-20 2020-10-13 Amazon Technologies, Inc. Grid based pathfinding
US10347038B1 (en) 2015-02-20 2019-07-09 Amazon Technologies, Inc. Determining visibility in virtual environments
KR20170127505A (ko) 2015-03-01 2017-11-21 넥스트브이알 인코포레이티드 환경 측정들을 하고 및/또는 3d 이미지 렌더링에서 이러한 측정들을 사용하기 위한 방법들 및 장치
US10706615B2 (en) * 2015-12-08 2020-07-07 Matterport, Inc. Determining and/or generating data for an architectural opening area associated with a captured three-dimensional model
US10289771B2 (en) * 2015-12-16 2019-05-14 Dassault Systemes Modification of a constrained asymmetrical subdivision mesh
US9868212B1 (en) * 2016-02-18 2018-01-16 X Development Llc Methods and apparatus for determining the pose of an object based on point cloud data
US9786027B1 (en) 2016-06-16 2017-10-10 Waygate, Inc. Predictive bi-adaptive streaming of real-time interactive computer graphics content
US10376794B2 (en) * 2016-08-26 2019-08-13 Minkonet Corporation Method of providing observing service using event prediction in game
US10372840B2 (en) * 2016-09-15 2019-08-06 Polaris Wireless, Inc. Simplification of data for representing an environment via the expansion of polyhedrons that define structures represented in the data
US10366181B2 (en) * 2016-09-15 2019-07-30 Polaris Wireless, Inc. Simplification of data for representing an environment, via the reduction of vertices that define structures represented in the data
US10372835B2 (en) * 2016-09-15 2019-08-06 Polaris Wireless, Inc. Simplification of data for representing an environment, based on the heights and elevations of polyhedrons that define structures represented in the data
US10733695B2 (en) * 2016-09-16 2020-08-04 Intel Corporation Priming hierarchical depth logic within a graphics processor
US10176630B2 (en) 2016-12-06 2019-01-08 Biosense Webster (Israel) Ltd. Updating an electroanatomical map
CN110249291A (zh) * 2017-02-01 2019-09-17 Pcms控股公司 用于在预捕获环境中的增强现实内容递送的系统和方法
US10248744B2 (en) 2017-02-16 2019-04-02 The University Of North Carolina At Chapel Hill Methods, systems, and computer readable media for acoustic classification and optimization for multi-modal rendering of real-world scenes
KR101892642B1 (ko) 2017-03-13 2018-10-04 동부엔지니어링 주식회사 하천의 만곡부 지역에서의 계획 홍수위 측선 연장선 간 교차점을 이용한 침수범위 결정 방법 및 이를 기록한 기록매체
CN106898051B (zh) * 2017-04-14 2019-02-19 腾讯科技(深圳)有限公司 一种虚拟角色的视野剔除方法和服务器
US10825238B2 (en) * 2017-05-03 2020-11-03 Microsoft Technology Licensing, Llc Visual edge rendering using geometry shader clipping
US9865085B1 (en) * 2017-05-08 2018-01-09 Analytical Graphics, Inc. Systems and methods for 3D modeling using skipping heuristics and fusing
EP3621519A1 (en) * 2017-05-10 2020-03-18 Boston Scientific Scimed Inc. Region-of-interest representations for electroanatomical mapping
US10115231B1 (en) * 2017-06-30 2018-10-30 Dreamworks Animation Llc Traversal selection of components for a geometric model
CN107977495B (zh) * 2017-11-21 2021-04-02 王征 一种基于操作点探测器的墙体多边形绘制的系统和方法
US10504280B2 (en) * 2018-01-10 2019-12-10 Qualcomm Incorporated Accelerated occlusion computation
CN108257103B (zh) * 2018-01-25 2020-08-25 网易(杭州)网络有限公司 游戏场景的遮挡剔除方法、装置、处理器及终端
CN108337034B (zh) * 2018-01-29 2020-06-09 郑州航空工业管理学院 全双工无人机移动中继系统及其路径优化方法
CN108594764B (zh) * 2018-03-19 2021-06-29 华侨大学 一种三角网格模型的等残留高度刀触点轨迹生成方法
GB201806015D0 (en) 2018-04-11 2018-05-23 Electronic Arts Inc Cloth self collision with predictive contacts
CN108804383B (zh) * 2018-05-30 2022-04-12 深圳大学 基于度量空间的支撑点并行枚举方法及装置
US10754516B2 (en) * 2018-06-05 2020-08-25 Ge Inspection Technologies, Lp User interface
CN113168737A (zh) * 2018-09-24 2021-07-23 奇跃公司 用于三维模型共享的方法和系统
US10924525B2 (en) 2018-10-01 2021-02-16 Microsoft Technology Licensing, Llc Inducing higher input latency in multiplayer programs
US10650482B1 (en) 2018-11-09 2020-05-12 Adobe Inc. Parallel rendering engine
CN109754454B (zh) * 2019-01-30 2022-11-04 腾讯科技(深圳)有限公司 物体模型的渲染方法、装置、存储介质及设备
WO2020191101A1 (en) * 2019-03-18 2020-09-24 Geomagical Labs, Inc. Virtual interaction with three-dimensional indoor room imagery
US11170569B2 (en) 2019-03-18 2021-11-09 Geomagical Labs, Inc. System and method for virtual modeling of indoor scenes from imagery
US10460516B1 (en) * 2019-04-26 2019-10-29 Vertebrae Inc. Three-dimensional model optimization
US11568062B2 (en) * 2019-10-10 2023-01-31 Baidu Usa Llc Methods to protect neural network models
US11436783B2 (en) 2019-10-16 2022-09-06 Oxide Interactive, Inc. Method and system of decoupled object space shading
US11481974B2 (en) 2020-01-22 2022-10-25 Vntana, Inc. Mesh optimization for computer graphics
CN111773685A (zh) * 2020-06-16 2020-10-16 网易(杭州)网络有限公司 动态生成游戏角色视野的方法和装置
CN112084280B (zh) * 2020-09-04 2023-07-21 广州南方智能技术有限公司 一种多尺度地形的裁剪及拼接方法
CN112200900B (zh) * 2020-12-02 2021-02-26 成都完美时空网络技术有限公司 一种体积云渲染方法、装置、电子设备及存储介质
CN112231020B (zh) * 2020-12-16 2021-04-20 成都完美时空网络技术有限公司 模型切换方法和装置、电子设备和存储介质
CN112837328B (zh) * 2021-02-23 2022-06-03 中国石油大学(华东) 一种二维多边形图元的矩形视窗剪裁绘图方法
US11511190B2 (en) 2021-05-03 2022-11-29 Sony Interactive Entertainment Inc. Merge computer simulation sky box with game world
CN113223149A (zh) * 2021-05-08 2021-08-06 中煤(西安)航测遥感研究院有限公司 三维模型纹理生成方法、装置、设备及存储介质
US20220410002A1 (en) * 2021-06-29 2022-12-29 Bidstack Group PLC Mesh processing for viewability testing
CN115631320B (zh) * 2022-12-23 2023-02-28 腾讯科技(深圳)有限公司 预计算单元格显示方法、预计算单元格生成方法及装置
CN115984442B (zh) * 2023-03-20 2023-06-23 浙江闪铸三维科技有限公司 一种通过特征阵列生成表面3d纹理的方法
CN117649675B (zh) * 2024-01-29 2024-03-29 广州亚信技术有限公司 一种表格生成方法、装置、设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6611267B2 (en) * 1996-10-16 2003-08-26 Viewpoint Corporation System and method for computer modeling of 3D objects or surfaces by mesh constructions having optimal quality characteristics and dynamic resolution capabilities
CN1655191A (zh) * 2005-02-25 2005-08-17 浙江大学 基于可编程图形硬件的多边形网格模型的快速体素化方法
CN1835022A (zh) * 2005-03-18 2006-09-20 微软公司 使用3d模型生成2d过渡
CN101156456A (zh) * 2005-04-14 2008-04-02 株式会社东芝 用于为三维图像显示产生多视点图像的方法及其程序
US20080180440A1 (en) * 2006-12-08 2008-07-31 Martin Stich Computer Graphics Shadow Volumes Using Hierarchical Occlusion Culling
US20100060640A1 (en) * 2008-06-25 2010-03-11 Memco, Inc. Interactive atmosphere - active environmental rendering

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0591325B1 (en) 1991-06-28 2007-12-05 LIM, Hong Lip Improvements in visibility calculations for 3d computer graphics
US5553206A (en) * 1993-02-12 1996-09-03 International Business Machines Corporation Method and system for producing mesh representations of objects
JP2669599B2 (ja) * 1994-09-16 1997-10-29 インターナショナル・ビジネス・マシーンズ・コーポレイション 陰影描画方法及び3次元グラフィック・コンピュータ・システム
AU2663597A (en) * 1996-04-12 1997-11-07 Multigen, Inc. Methods and apparatus for rendering three-dimensional images
WO1998000811A1 (en) * 1996-06-28 1998-01-08 Resolution Technologies, Inc. Fly-through computer aided design method and apparatus
US6057847A (en) 1996-12-20 2000-05-02 Jenkins; Barry System and method of image generation and encoding using primitive reprojection
US6111582A (en) 1996-12-20 2000-08-29 Jenkins; Barry L. System and method of image generation and encoding using primitive reprojection
US6259452B1 (en) * 1997-04-14 2001-07-10 Massachusetts Institute Of Technology Image drawing system and method with real-time occlusion culling
US6028608A (en) 1997-05-09 2000-02-22 Jenkins; Barry System and method of perception-based image generation and encoding
US6377229B1 (en) * 1998-04-20 2002-04-23 Dimensional Media Associates, Inc. Multi-planar volumetric display system and method of operation using three-dimensional anti-aliasing
US6636633B2 (en) 1999-05-03 2003-10-21 Intel Corporation Rendering of photorealistic computer graphics images
US6822658B1 (en) * 1999-10-25 2004-11-23 Intel Corporation Rendering a silhouette edge
EP1264281A4 (en) * 2000-02-25 2007-07-11 Univ New York State Res Found ARRANGEMENT AND METHOD FOR PROCESSING AND PLAYING A VOLUME
US6774895B1 (en) * 2002-02-01 2004-08-10 Nvidia Corporation System and method for depth clamping in a hardware graphics pipeline
JP4031306B2 (ja) * 2002-07-12 2008-01-09 日本放送協会 3次元情報検出システム
US7268779B2 (en) * 2002-12-24 2007-09-11 Intel Corporation Z-buffering techniques for graphics rendering
US6933946B1 (en) 2003-05-07 2005-08-23 At&T Corp. Method for out-of core rendering of large 3D models
US7656418B2 (en) 2003-06-11 2010-02-02 Koninklijke Philips Electronics N.V. User control of 3d volume plane crop
US7154500B2 (en) * 2004-04-20 2006-12-26 The Chinese University Of Hong Kong Block-based fragment filtration with feasible multi-GPU acceleration for real-time volume rendering on conventional personal computer
CN100349467C (zh) 2004-05-13 2007-11-14 三洋电机株式会社 立体图像处理方法及立体图像处理装置
JP4196889B2 (ja) 2004-06-30 2008-12-17 日本電気株式会社 画像表示装置及び携帯端末装置
US7586490B2 (en) 2004-10-20 2009-09-08 Siemens Aktiengesellschaft Systems and methods for three-dimensional sketching
US7595799B2 (en) * 2005-08-04 2009-09-29 Dassault Systemes Process for creating from a mesh an isotopologic set of parameterized surfaces
WO2007109269A2 (en) * 2006-03-20 2007-09-27 Scate Mvv Llc Human vision analysis system
EP2023292B1 (en) * 2006-05-11 2020-02-26 Panasonic Intellectual Property Management Co., Ltd. Processing device
DE102006043894B3 (de) * 2006-09-19 2007-10-04 Siemens Ag Detailtiefenstufen-Einstellung mehrdimensionaler Bilddaten mit einem Client/Server-basierten Bildrenderingsystem
GB0710795D0 (en) * 2007-06-05 2007-07-18 Arm Norway As Method of and apparatus for processing graphics
CN100514369C (zh) * 2007-10-17 2009-07-15 北京航空航天大学 一种基于非均匀空间划分的场景可见性裁剪方法
US8629871B2 (en) * 2007-12-06 2014-01-14 Zynga Inc. Systems and methods for rendering three-dimensional objects
CN101241602B (zh) * 2008-03-05 2011-01-05 罗笑南 一种计算机三维网格图形的简化方法
GB0808023D0 (en) * 2008-05-02 2008-06-11 British Telecomm Graphical data processing
CN101419721B (zh) * 2008-10-30 2012-02-15 上海大学 一种基于视域剔除的复杂室内场景快速绘制方法
JP5008703B2 (ja) * 2009-08-18 2012-08-22 株式会社ソニー・コンピュータエンタテインメント コンテンツ作成支援装置、画像処理装置、コンテンツ作成支援方法、画像処理方法、および画像表示コンテンツのデータ構造
CN107093202A (zh) 2010-06-30 2017-08-25 巴里·林恩·詹金斯 使用所存储的信息确定第一网格多边形集合的方法和系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6611267B2 (en) * 1996-10-16 2003-08-26 Viewpoint Corporation System and method for computer modeling of 3D objects or surfaces by mesh constructions having optimal quality characteristics and dynamic resolution capabilities
CN1655191A (zh) * 2005-02-25 2005-08-17 浙江大学 基于可编程图形硬件的多边形网格模型的快速体素化方法
CN1835022A (zh) * 2005-03-18 2006-09-20 微软公司 使用3d模型生成2d过渡
CN101156456A (zh) * 2005-04-14 2008-04-02 株式会社东芝 用于为三维图像显示产生多视点图像的方法及其程序
US20080180440A1 (en) * 2006-12-08 2008-07-31 Martin Stich Computer Graphics Shadow Volumes Using Hierarchical Occlusion Culling
US20100060640A1 (en) * 2008-06-25 2010-03-11 Memco, Inc. Interactive atmosphere - active environmental rendering

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108421257A (zh) * 2018-03-29 2018-08-21 网易(杭州)网络有限公司 不可见元素的确定方法、装置、存储介质和电子装置
CN112270679A (zh) * 2020-11-19 2021-01-26 浙江大学 一种结合凹点与凹边的凸多边形轮廓的图像分割方法
CN112270679B (zh) * 2020-11-19 2022-04-22 浙江大学 一种结合凹点与凹边的凸多边形轮廓的图像分割方法
CN113706706A (zh) * 2021-10-28 2021-11-26 自然资源部第一海洋研究所 数据的处理方法、装置及电子设备

Also Published As

Publication number Publication date
EP2589023A4 (en) 2017-09-13
US9852538B2 (en) 2017-12-26
EP2589023B1 (en) 2021-05-19
US20170076490A1 (en) 2017-03-16
CN103080984B (zh) 2017-04-12
CN107103639B (zh) 2021-05-18
US20130207976A1 (en) 2013-08-15
CN107093203A (zh) 2017-08-25
CN107123155A (zh) 2017-09-01
CN107103639A (zh) 2017-08-29
WO2012012161A2 (en) 2012-01-26
US20120229445A1 (en) 2012-09-13
US20160005214A1 (en) 2016-01-07
US9472019B2 (en) 2016-10-18
EP2589023A2 (en) 2013-05-08
WO2012012161A3 (en) 2012-03-15
CN103080984A (zh) 2013-05-01

Similar Documents

Publication Publication Date Title
CN103080984B (zh) 确定从视区看去可见的网格多边形或所述网格多边形的分段的集合的方法及系统
Airey Increasing update rates in the building walkthrough system with automatic model-space subdivision and potentially visible set calculations
US10109103B2 (en) Method of determining occluded ingress and egress routes using nav-cell to nav-cell visibility pre-computation
Schaufler et al. Conservative volumetric visibility with occluder fusion
Zhang et al. Visibility culling using hierarchical occlusion maps
CN103221993B (zh) 传输和控制包括渲染的几何、纹理和光照数据的流交互媒体
Décoret et al. Billboard clouds for extreme model simplification
US9171396B2 (en) System and method of procedural visibility for interactive and broadcast streaming of entertainment, advertising, and tactical 3D graphical information using a visibility event codec
EP2076888B1 (en) Pixel color determination in a ray tracing image processing system
Govindaraju et al. Fast and reliable collision culling using graphics hardware
CN113781626B (zh) 遍历在射线追踪中使用的数据的技术
US20080122838A1 (en) Methods and Systems for Referencing a Primitive Located in a Spatial Index and in a Scene Index
CN113808245B (zh) 用于遍历光线追踪加速结构的增强技术
CN113781625A (zh) 适用于光线追踪的基于硬件的技术
Duguet et al. Robust epsilon visibility
Li et al. A GPU-based voxelization approach to 3D Minkowski sum computation
CN113808241A (zh) 共享顶点的射线追踪图元的硬件加速
Wilson et al. Simplifying complex environments using incremental textured depth meshes
Cohen-Or et al. Visibility, problems, techniques and applications
Yılmaz et al. Conservative occlusion culling for urban visualization using a slice-wise data structure
Heo et al. Conservative visibility preprocessing for walkthroughs of complex urban scenes
Bittner Hierarchical techniques for visibility determination
Khorramabadi A walk through the planned CS building
Novello et al. Riemannian Ray Tracing
CN117689793A (zh) 用于光线追踪的部分加速结构的生成和遍历

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20170825

WD01 Invention patent application deemed withdrawn after publication