CN101609562B - 在高深度复杂性场景中绘制透明面的系统和方法 - Google Patents
在高深度复杂性场景中绘制透明面的系统和方法 Download PDFInfo
- Publication number
- CN101609562B CN101609562B CN2009100039462A CN200910003946A CN101609562B CN 101609562 B CN101609562 B CN 101609562B CN 2009100039462 A CN2009100039462 A CN 2009100039462A CN 200910003946 A CN200910003946 A CN 200910003946A CN 101609562 B CN101609562 B CN 101609562B
- Authority
- CN
- China
- Prior art keywords
- face
- depth
- value
- faces
- synthetic
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/503—Blending, e.g. for anti-aliasing
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
- Processing Or Creating Images (AREA)
Abstract
描述了用于绘制包括透明面的三维场景的系统、方法和计算机可读存储介质,包括用于利用场景几何体中的部分排序来有效绘制透明面的两种技术。第一技术(混合型层剥离)可以通过有效的方式结合未排序网格与已排序网格,并且可以适于绘制诸如具有嵌入式透明网格的体的场景。第二技术(连贯层剥离)可以在一次迭代中针对给定的像素有效地检测和绘制正确排序的分段序列,这允许少于传统深度剥离的通过次数。可以执行对场景中一些或者全部面的预排序和/或周期排序,但是可以不需要完全排序。该方法可以通过硬件、软件或其组合来实现,诸如通过在一个或多个CPU和/或GPU上可执行的程序指令来实现。
Description
优先权信息
本申请要求2008年1月23日提交的美国临时申请No.61/022,897的优先权,在此通过引用并入其全部内容。
背景技术
透明面的有效绘制一直以来都是计算机图形学中的一个问题。在绘制包括半透明面的3D场景时,由图形学硬件执行的典型方法是光栅化方案,其中每个三角形被描绘投影到相机平面,并依次被描绘到屏幕。在这些系统中,称为z缓冲区(z-buffer)的结构针对屏幕上的每个像素来跟踪在该像素处最接近相机的面。如果所有三角形都是不透明的,则在描绘新三角形(或者描绘新三角形的一部分)或者其距离观察者较近时,z缓冲区将仅通过替换像素来解决遮挡问题。在绘制不透明几何体时,对每个三角形进行光栅化,并依次将其转换为像素颜色和深度,并且z缓冲区测试确保在每个像素处显示最近的面颜色。因此,被其他三角形所遮挡或者隐藏的三角形将是不可见的,并且只有那些可见的面出现在屏幕上。对于经过z缓冲的不透明几何体,无需按深度对三角形排序。然而,对于包括半透明面的场景,不能直接使用z缓冲,因为排序是有影响的。不能以任何随意的顺序提交三角形。
多年前开发了一种用于这种绘制的简单解决方案,一种称为“画家算法”的技术。画家算法开始于按照从相机处观察从后到前的顺序的方式对场景中的几何体(例如,三角形和/或对象)进行排序。首先绘制距离相机最远的面,并且在其上绘制每个后续透明层,这非常类似于画家作画的方式。使用该方法,逐层地缓慢构建场景,直到场景完成。使用混合(blending)模式,可以正确地刻画出透明效果。该方法存在两个主要缺点。首先,必须将面排序为遮挡顺序,第二,在相交处或是在排序期间出现可见性循环时,必须对三角形或者其他几何基元进行切分。这两个问题中的后一问题可能使该过程的代价特别高。可以将画家算法分类为用于透明面绘制的对象级方法,因为其是通过对诸如三角形的高级基元进行排序来工作的。
备选的算法类型在像素级工作。这些算法对按照通过每个像素中心看到的面进行排序来工作。这种像素级技术之一称为深度剥离。深度剥离通过多次绘制几何体以积累最终结果来进行工作。绘制的每次迭代剥离掉通过每个像素可见的单个面深度层。该核心算法相对于画家算法的优势在于:其无需对几何基元预先排序。此外,无需对象级透明度技术情况中的几何切分。然而,深度剥离需要的迭代次数是最差(也即,最复杂)像素的透明深度复杂性。例如,假定通过像素看到的n个透明面,深度剥离的最差情况算法复杂性是O(n2),因为需要n次剥离,并且每次剥离绘制所有n个面。
随着个人计算机系统的能力和复杂性的提高,越来越多地使用称为图形处理单元(GPU)的专用图形学绘制设备来执行图形学操作,诸如z缓冲、深度剥离、光栅化等所需的那些图形学操作。在此使用的术语“图形处理单元”和“图形处理器”可互换使用。GPU通常在经由标准总线(例如,AGP或者PCI Express)耦合至主板的可移动图形卡中使用。GPU还可以在游戏控制台中以及集成化图形解决方案(例如,用于某些便携式计算机和廉价桌面型计算机)中使用。尽管GPU的能力有所不同,其通常可以用来执行诸如以下任务:二维(2D)图形数据的绘制、三维(3D)图形数据的绘制、图形用户界面(GUI)显示元素的加速绘制以及数字视频回放。GPU可以实现一个或多个应用程序员接口(API),该API允许程序员调用GPU的功能。
GPU可以包括用于将数字图像绘制到成像设备的各种内置及可配置结构。数字图像可以包括光栅图形、矢量图形及其结合。光栅图形数据(在此也称为位图)可以作为个体图片元素(称为像素)的栅格来存储和操纵。位图可以通过其宽度和高度(以像素为单位)来表征,也可以通过每个像素的位数来表征。通常,在RGB(红、绿、蓝)颜色空间中定义的颜色位图对于红、绿和蓝通道中的每一个可以每个像素包括1到8个位。阿尔法(Alpha)通道可以用来存储附加数据,诸如每个像素的透明度值。
矢量图形数据可以作为利用几何基元构建的一个或多个几何对象来存储和操纵。几何基元(例如,点、线、多边形、曲线和文本字符)可以根据数学方程式来表达数字图像中的矢量图形数据的部分。几何对象通常可以位于二维或者三维空间中。为了在基于光栅的成像设备(例如,多数显示设备和打印机)上绘制矢量图形,通常在称为光栅化的过程中将几何对象转换为光栅图形数据。
发明内容
公开了用于在复杂三维场景中绘制透明面的系统、方法和计算机可读存储介质的各种实施方式。在某些实施方式中,方法可以检测到至少某些面处于正确的深度顺序(也即,正确的遮挡顺序),并且可以利用这种情况来改进性能。例如,该方法可以包括:仅对尚未按照顺序的深度层范围内的面执行深度剥离。可以使用诸如反向画家算法的其他技术来处理处于正确深度顺序的面的跨距,以便在一次通过中将其合成到最终图像中。相对于传统的深度剥离技术,该技术的使用可以极大地改进在各种图形应用中绘制这类图像的性能,因为可以无需在每个像素处以及针对每个深度层应用深度剥离。
在此描述的用于绘制具有顺序无关的透明度的场景的方法可以包括基于对象的方法和基于像素的方法二者的某些最佳特征。公开了用于透明面绘制的两个像素级技术以及多个备选变形。两种技术都是对利用几何体中有序结构的传统深度剥离的增强。一种技术尤其可以适用于将未排序网格与排序网格相结合。第二技术对于大部分(或者至少部分)排序的网格集合利用给定像素处正确排序的层序列。将近似模型空间排序与每次通过的增强剥离逻辑相结合的结合方法可以支持用于正确绘制高深度复杂性场景的极大的性能改进。在各种实施方式中,该技术可以在目前可用的CPU和/或图形处理单元(GPU)上有效地实现。在其他实施方式中,该技术可以适于利用对硬件特征的最小改动,例如可以在下代GPU上提供。
如上所述,在一些实施方式中,在此描述的方法可以包括标准深度剥离的增强方法,其可以在面至少部分排序时更为有效地执行。该方法可以不需要高代价的剪切或者完全排序,而该方法的性能可以取决于对数据排序的程度。例如,在一些实施方式中,如果数据完全排序,该方法可以在单次迭代中绘制正确的结果。另一方面,当数据反向排序时,该方法可以类似于深度剥离,但是每次迭代可能具有稍高的成本。
在此描述的技术可以在使用硬件、软件或其结合的各种实施方式中。例如,在一些实施方式中,在一个或者多个处理器(例如,CPU或者GPU)上可执行以实现该方法的程序指令可以被编码和存储在计算机可读的存储介质上。在其他实施方式中,这种程序指令可以存储在计算机系统的存储器中,该计算机系统包括被配置用于访问该指令以及执行该指令以实现所述方法的一个或多个处理器。
附图说明
图1是示出了根据一个实施方式的用于执行混合型层剥离的方法的流程图。
图2示出了根据一个实施方式的针对部分排序的面序列来确定剥离范围。
图3是示出了根据一个实施方式的用于绘制合成透明面的方法的流程图。
图4是示出了根据一个实施方式的用于使用GPU来绘制合成透明面的方法的流程图。
图5是示出了根据一个实施方式的用于使用GPU来绘制合成透明面的第二方法的流程图。
图6A-图6F是根据各种实施方式的可以应用标准深度剥离、混合型层剥离以及连贯层剥离各种场景。
图7是示出了根据各种实施方式的标准深度剥离、混合型层剥离以及连贯层剥离的相对性能的图表。
图8是示出了被配置用于在复杂三维场景中绘制透明面的图形处理单元(GPU)的一个实施方式的框图。
图9是示出了被配置用于在复杂三维场景中实现绘制透明面的系统和方法的实施方式的计算机系统的组成元件的框图。
在附图中以示例的方式示出了具体实施方式并且在此对其进行详细描述。然而应当理解,附图及其详细描述并非意在将本发明限于所公开的具体形式,相反,意在涵盖落入所附权利要求书限定的精神和范围之内的所有修改、等效物以及备选方案。例如,尽管将给出的多个算法描述为按照从前到后的方式来合成图像,该技术也可以应用于以从后到前的方式来执行合成的层剥离机制。在一些实施方式中,从后到前合成方案的使用可以允许支持混合模式的不同集合。
具体实施方式
以交互式速率在具有高复杂性的3D场景中正确绘制透明度可能具有挑战性。使用在此描述的系统和方法的实施方式,可以在已有的硬件上和/或使用图形处理单元(GPU)来有效地绘制包括顺序无关的透明度的场景。在传统的基于对象的方法中,例如在画家算法中,通常对面进行排序,并且按照从后到前或者从前到后的顺序来描绘面。这种排序可能是高计算代价的,因为可能必须在每次相机位置或者场景改变时执行它,并且当面互相穿透或者循环重叠时,其需要剪切。
画家算法可能例如不适于对空间中彼此相交的三角形进行操作。例如,场景可以包括以45度角彼此切入的两个三角形。如果它们都是透明的,则无法对其进行排序(例如,有时,一个在另一个之前,反之亦然)。为了使画家算法在这种情况下正确工作,必须将三角形沿着相交部分切分为子三角形。当沿着所有这种交线对几何体进行切割时,产生了更多的三角形,并且算法可以将这些子三角形排序为遮挡兼容的顺序。该方法可能是代价很高的,特别是在场景中存在数以百万计的三角形时。指出空间中哪些三角形相交以及哪些重叠可能是非常大的计算量。
画家算法不适用的另一种情况是面循环重叠时。例如,多个三角形可能以如下方式布置:它们彼此在深度中循环重叠,从而使每个三角形在连续循环中处于的每个其他三角形之前。这类似于扇形展开一副扑克牌,并且使其转回自己之上。在这种情况下,即使三角形不能在空间中彼此切入,也无法恰当地对其排序。
开发了称为深度剥离的算法,以试图解决这个问题。该算法在每个像素级别处工作,类似于上文描述的包括z缓冲区的算法。该算法尝试构建通过每个像素的面的正确排序。为了该算法的目的,从前到后地执行合成(这不同于画家算法,其是从后到前进行操作)。为了该算法,可以修改混合算法,以便替代地使用从前到后的排序来进行混合,而在计算机上混合算法通常在任一方向中同样良好地工作。因为该算法在像素级进行工作,其无需对几何体进行排序。其通过每个像素对事物正确地排序并且进行正确的合成(每个像素级别的排序)。注意,基于像素的方法(诸如深度剥离)通常所需的通过数据的次数是覆盖屏幕上任何给定像素的面的最大数目,但是在这种方法中可以不需要剪切。
下面描述传统的深度剥离。如果使用z缓冲区在绘制场景,在已经对场景进行一次绘制之后,观察到:如观察者看到的可见的最先一组面的深度现在是可用的。换言之,对于每个像素,在首次进入场景之后,z缓冲区所保存的是通过屏幕中该像素的第一个面的深度值。也即第一深度层。如果你具有该第一深度层,则可以再次绘制该场景而排除位于该第一深度层的面(在将其“剥离”掉之后)。在该第二次通过绘制几何体之后,z缓冲区存储下一组可见面。例如,当绘制球体时,将看到的第一深度层将是球体的前半部分,因为其朝着相机或者观察者突出。在下一次通过中,在将第一深度层剥离掉之后,相机或者观察者将看到指向远离他们的球体部分(也即,后半部分)。该算法工作良好,并且能够处理相交和重叠的三角形。通过每个像素,每次将依次剥离掉一个深度层,以绘制场景。每次剥离掉深度层时,如果对于该层的透明值是已知的,可以以从前到后的方式开始合成,逐层解决场景中的透明度,每次一个。如上所述,该算法需要通过几何体的次数与存在的深度层数一样多。例如,球体具有两个层,因为不论如何观察球体,穿过球体的光线在两个位置与球体接触(也即,光线总是通过两个面)。所以,为了能够得到解决,球体可以绘制两次(因为其具有两个层)。
如上所述,深度剥离通常是代价很高的,因为其需要很多次通过,并且如果所绘制的场景在深度上具有多个透明的层,则必须多次提交几何体以得到正确的答案。考虑这种方法的研究者看到,这是相当低效的。一些研究者已经提出对问题进行细分来改进性能的方法。理论上,他们觉得他们能够降低它以接近线性时间。在一个提议中,如果场景的深度范围是已知的,算法可以指出接近观察者的所有几何体并对其进行剥离。例如,该算法可以对场景的深度范围的前半部分或者深度范围的前四分之一应用深度剥离。换言之,可以针对场景来分割深度范围。该算法可以确定哪些是距离相机或者观察者最近的面以及哪些是最远的面,并将其聚合在一起(例如,聚合到距离观察者较近的一个或多个面群组中,或者距离观察者较远的一个或多个面群组中)。使用该方法,可以对第一组面执行深度剥离,继而独立地对第二组面执行深度剥离,并将结果合成在一起。例如,如果场景中有两个球体,一个远在另一个之后,传统的深度剥离算法可能需要四次通过来剥离这两个球体的所有层。但是如果球体在空间中没有重叠,可以通过第一球体执行深度剥离,并且可以独立地对第二球体执行深度剥离,继而算法可以将这两个结果合成在一起。该方法的基本思想是将问题细分为子问题,并且对每个子问题独立地执行深度剥离(例如,对不同的深度范围和/或对象),并继而最终对结果进行合成以得到正确的解决方案。注意,该方法可以应用于任意数目的深度层群组,但是可能仍然是代价很高的,这取决于场景的总体复杂度。
在一些实施方式中,与传统的深度剥离技术以及仅仅将问题划分为子问题的深度剥离技术相比,在此公开的系统和方法可以在绘制包括半透明面的场景时显著地改进图形应用的性能。在此公开的方法包括多个像素级技术,用于正确地绘制具有顺序无关的透明度的复杂场景。可以将这些技术视为对传统深度剥离的增强,当面的流包括正确排序的面的一个或多个连续跨距时,这些算法更为高效地运行。换言之,该技术可以利用至少部分排序的面的存在,但是其可以不需要完全的排序。例如,在一个实施方式中,该方法可以包括事先对对象和/或三角形执行排序操作,从而在应用深度剥离和/或其他技术之前对其部分排序。在该排序操作之后,在一些位置可能存在少数乱序的面(例如,通过一些像素),但是大部分面进行了排序。在其他实施方式中,该方法可以利用包括完全排序的面的一个或多个跨距的输入几何体。该算法可以通过每个像素来保持跟踪这些连贯的、有序的流,从而使其可以在单次迭代中将多个层合成在一起。换言之,在一些实施方式中,该方法可被配置用于发现面何时处于正确的顺序和/或利用完全排序的面的跨距。在最佳情况下,如果空间中存在正确排序的多个几何基元,该算法将检测到其是正确排序的,并且将仅仅进行一次迭代来产生输出图像。
在一些实施方式中,用户或者预处理操作可以在绘制几何体之前部分地对几何体进行排序。在这种实施方式中,该方法可以不需要在相交处切断三角形,或者说能够在循环重叠的情况下对面进行排序。假定存在任何这种相交和重叠,排序操作可配置用于尽可能地对几何体进行排序。在一些实施方式中(例如,如果相机不是快速移动),可以周期性地(或者仅仅不频繁地)重复排序操作,以维护连贯性。然而,即使面仅仅是多数(或者部分)排序,该算法也能有效地工作。当算法检测到面的串处于正确顺序时,其可以在单次通过中应用简单的方法(例如,反向画家算法)来将那些正确排序的面合成在一起。当算法遇到乱序的面时,该算法可以仅对那些乱序的面应用深度剥离。如同利用传统的深度剥离,可以在通过每个像素的每次通过中应用该算法。换言之,对于屏幕上的每个像素,该算法可以配置用于确定哪些面处于正确的顺序,哪些面没有,以便在单次通过中合成按序的面,并且将乱序的面剥离掉。在一些实施方式中,该方法与传统的深度剥离相比可以得到显著的性能改进,因为可以无需对每个像素以及针对每个深度层来应用深度剥离。
在此描述利用场景中几何体的部分排序的、用于透明面的有效绘制的各种技术。如上所述,一些技术可以在略微老旧的硬件上执行,诸如目前可用的CPU和/或第一代GPU,而其他技术可能在较为现代的图形硬件上执行时更为有效。一种称为混合型层剥离的技术可以通过有效的方式将未排序的网格与已排序的网格相结合,并且在一些实施方式中,其可以适于绘制诸如具有嵌入透明网格的体的场景。在各种实施方式中,可以使用旧有的或者现代的硬件来实现混合型层剥离。另一种称为连贯层剥离的技术可以在一次迭代中针对给定的像素有效地检测和绘制正确排序的片段序列,对于典型的场景,这允许比传统深度剥离更少的通过次数。在此描述连贯层剥离的多个变形,包括可以通过较旧硬件实现的一个变形,以及当使用较为现代的硬件实现时更为有效的另一个变形。
尽管代价比混合层剥离高出恒定的因子,在各种实施方式中,连贯层剥离可以应用于更广泛类型的场景,包括单个网格或者网格集合。由于其不依赖于任何完全排序的面跨距的存在,连贯层剥离可以不需要高代价的剪切或者完全排序。然而,该方法的性能可能至少部分地取决于数据排序的程度。如前所述,最佳情况下,在一些实施方式中,该方法可以在一次迭代中绘制正确的透明度,由此得到O(n)的运行时间。当数据被反向排序时,该方法的复杂性可能类似于标准的深度剥离方法。还公开了针对理想化光栅化架构而设计的连贯层剥离的修改形式。在各种实施方式中,这种方法即使在最坏情况下也能够匹配深度剥离的性能,同时当正确排序的序列存在时,仍然对其加以利用从而优于深度剥离。
如前所述,已经进行了很多研究来改进传统深度剥离的性能。在上文概括的研究中,已经指出:在很多情况下,可以通过将问题分解为子问题来将深度剥离的渐近复杂性降低为O(n)。例如,在一个方法中,对象被放置在堆(heap)中,以O(n lgn)从前到后地对其有效地排序。在该方法中,将固定的少量对象从堆中提取到集合中,以形成批次的集合。如果每个批次的深度范围没有重叠,则对每个批次执行传统的深度剥离,并且完成(从前到后的)合成以累积解。在重叠批次的情况下,使用剪切平面来定义当前批次的z范围。在处理当前批次时,还必须包括跨过该范围的任何对象(即使是不在该批次中的对象)。如上所述,当批次彼此之间在深度上不是十分重叠时,该算法工作良好。由于该算法不需要完全的对象级排序,可以通过线性时间的桶排序来替代堆排序,以便针对多数场景获得O(n)的运行时间。通过桶排序,基于z范围通过每个像素来观察面。当使用这样的方法时,继而可以对每个z范围桶来分离地应用深度剥离。使用该方法,通常将面置于所有z范围桶中,其是重叠的。该算法得到近似O((n/b)b2)=O(bn)的运行时间,其中b是每个桶中的面数。当选择了大量的桶、并且对z的线性桶排序可以对z中的数据正确排序时,该算法取得其最佳性能。然而,在一些情况下,简单的桶排序无法有效地对数据进行排序。例如,这可能发生大部分面放在(land)在相同桶中时。此外,该方法需要对每个帧上的面进行桶排序。
另一个最近提出的方法包括使用图形硬件和遮挡查询扩展来执行对象级排序。当数据可以恰当排序时,这种方法工作良好。然而,当存在可视性循环时,仍然需要剪切来解决面排序。已经提出了对硬件的多种扩展,以允许更为有效地处理透明面。例如,一些已经提出了延迟流的概念,用以改进图形硬件中处理透明面的效率。
另一方法包括对到达给定像素的片段的列表及其颜色和深度进行排序。一组研究者引入了F缓冲区的概念,其通过中间表示捕获通过每个像素的片段流。可以在附加的通过中解决这些分段的排序。已经描述了F缓冲器的实践硬件实现。这一概念的更为严格的形式称为k缓冲区,其限制在每个像素处存储的片段的大小,并且为该列表提供受限的读-修改-写操作。另一备选方案使用图形硬件已有的多采样特征以及模板打线(stencil routing)来存储每个像素的分段列表。然而到目前,这些扩展尚未实现,或者在消费硬件中尚未广泛应用。
不同于上面描述的一些技术,在此公开的方法可以仅需要能够绘制到模板和浮点缓冲区中的简单的已有硬件。下面描述对高效深度剥离问题的解决方案的详细描述,并且描述在一些实施方式中适于实践该方法的硬件特征。此外,在此描述可以用来在已有硬件上实现该方法的有效的基于GPU的方法的详细例子。还描述了两个备选实施方式,一个依赖于浮点混合操作,另一个可以在理想的光栅化架构上实现。
在各种图形学应用中,相对普遍的是具有简单排序的透明几何体,诸如通过体数据集的切片或者屏幕对齐精灵(sprite)。然而,这些经常会与其他网格(诸如,半透明的iso面或者治疗束)在几何上相交。如上所述,对于完全排序的几何体,可以仅需要一遍绘制。然而,只要场景包括重叠的未排序几何体,可以应用更为一般性的技术,诸如深度剥离。对于高深度复杂性场景,这可能导致非常大的通过次数。
对深度剥离的扩展可以利用如下观察:可以将方法划分为备选步骤。该技术称为混合型层剥离,其在一些实施方式中可能是理想的,诸如图6A中所示的场景,其中表示光束的半透明面与体分片的一般排序栈相交。换言之,混合型层剥离可以适于应用于这样的几何体,该几何体被划分为或者可以被划分为一组或者多组未排序的面以及一组完全排序的面。这种方法的一个实施方式由图1的流程图示出。在此例子中,如在100中,接收表示场景的几何体。该场景可以包括一个或多个三维几何基元。如图1所示,如在110中,混合型层剥离技术在一些实施方式中可以将接收到的几何体划分为已排序分段和未排序分段。注意,在一些情况下,在各种实施方式中,几何体可以在接收时包括一组完全排序的面和其他组未排序的面,或者该方法可以包括在绘制场景之前对场景中三维几何基元的所有或者部分面进行预排序或者部分预排序的操作。该方法继而可以在每一次通过中对刻画场景的图像的所有可应用像素(也即,所有这样的像素,该像素的值反应了该像素位置处场景中几何基元的各个面)应用混合型层剥离。注意,图1示出了包括在混合型层剥离算法的一次通过中的预处理操作和操作。在这一通过期间,对每个批次的每个受影响像素执行120-140中所示的操作。如从决策块155的肯定出口到块120的反馈循环所示,可以针对其他面重复附加的通过(其包括如120-150示出了操作)。
在一个步骤中,如在120中,对于所有像素,该方法可以包括:通过使用传统深度剥离将一个或多个未排序面绘制到当前剪切深度图中来找到最近的面。在第二步骤,如在步骤130中,对于所有像素,可以将几何体的当前剪切深度与先前剪切深度之间的已排序分段合成到用于该图像的颜色缓冲区中。换言之,在该例子中,合成操作可以将经过剪切的面绘制到先前剥离深度和当前剥离深度(其对应于完全排序面的跨距)之间的z范围。如图1所示,如在140中,可以将未排序分段(也即,如块120中所述的被剥离的那些分段)合成到颜色缓冲区中。在此例子中,如在150中,继而可以将当前剪切深度图复制到先前剪切深度图之中,用来定义用于后续通过的剪切z范围。此时,已经在这次通过中对所有受影响的像素位置一起进行了处理。如果没有更多面要剥离,如决策块155的出口退出所示,可以在160中输出图像。例如,表示混合型层剥离技术结果的图像可以显示在屏幕上和/或可以保存在存储器中以便进一步处理(例如,在后续通过中)。否则,如所示,可以针对其他面来重复块120-150中所示的操作。在此例子中,步骤的数目可以由未排序面的深度复杂性来确定。
可以使用下面的伪代码更为详细地描述混合型层剥离技术:
1:for all pixel sample locations do
2: zPeel←zNear
3:end for
4:while gChanged=true do
5: for all pixel sample locations do
6: zPeelNext←zOpaque
7: end for
8: for all unsorted geometry fragments do
9: if zPeel<zFragment<zPeelNext then
10: zPeelNext←zFragment
11: gChanged←true //occlusion query
12: end if
13: end for
14: for all sorted geometry fragments do
15: if zPeel<zFragment<zPeelNext then
16: Composite fragment into color buffer
17: end if
18: end for
19: if gChanged=true then
20: for all non-sorted geometry fragments do
21: if zFragment=zPeelNext then
22: Composite fragment into color buffer
23: end if
24: end for
25: swap(zPeel,zPeelNext)
26: end if
27:end while
该方法的总迭代次数可以由仅未排序几何体所需的层剥离数目来确定,而不是由包括已排序分段在内的最坏情况像素的总体深度复杂性来确定。在一些实施方式中,这可以得到与排序几何体的深度复杂性成比例的渐近性能改进,在体栈的情况下,这可以非常高的。不幸地,只有有限类别的场景可以通过混合型层剥离来加速,也就是其中一组场景几何体被完全排序的那些场景。该方法的更一般类型可以在存在已正确排序的分段序列的每个像素处自动地利用该已正确排序的分段序列,并且在未排序分段序列出现时对其进行正确绘制。下面描述这样的方法。
在理想情况下,用于正确绘制半透明面的技术可以以线性时间来执行。例如,假设存在透明面的列表S(也即,集合),其中透明面与通过近平面和远平面之间的像素中心射出相机之外的线段相交。为了正确地将这些面合成在一起,必须通过从前到后或者从后到前的顺序对其进行混合。在任一情况下,该操作可能需要根据深度对S中的面进行排序。对于随意放置的面的集合,排序可以在O(n lgn)中完成。在桶排序有效时,可以在O(n)中对这些面进行排序。然而,这些需求均对面的放置进行了假设。
与进行这些假设不同,在此描述的系统和方法可以使用连贯性的性质。在一些实施方式中,可以假设:S中的面开始是大部分或者至少部分按照已排序顺序的,并且仅有少量恒定数目的面的排序需要定位。在实践中,该假设经常是成立的,因为可以根据给定的相机视图预先对数据进行排序,并在相机移动和/或场景变化时对数据周期性地进行更新。对于具有平滑移动的相机和几何体的实践场景,面不太可能在帧之间变成完全乱序的。如上所述,在此所描述技术的渐近性能可以与列表S中已正确排序的不间断跨距的数目相联系。
可以通过示例来进一步描述用于正确绘制具有顺序无关的透明度的复杂场景的系统和方法。在此示例中,令s0...sn-1∈S是大部分(或者部分)已排序面的列表,其中面与通过近平面和远平面之间的给定像素中心射出相机之外的光线段相交。对于任意的si∈S,令D(si)表示面的z深度。在此示例中,假设面是按照从前到后的方式大部分排序的,并且已经对直到一些面sc进行了深度剥离。图2示出了大部分已排序的面s1到s10(元素201-210)的一个这样的序列。在一些实施方式中,在此描述的方法可以用来找到z范围(D(sc),∞]中下一个乱序面的深度。在图2所示的例子中,最后剥离的面由s4给出,并且序列中下一个乱序面是s9。在此示例中,剥离范围250[D(s3),D(s10)]中的所有面由其定义保证是按照正确顺序的。
图3的流程图示出了用于绘制具有顺序无关的透明度的复杂场景(诸如图2中的面所示出的场景)的方法的一个实施方式。在此示例中,如上所述,对于所有受影响的像素,可以对直到面sc(包括)的面(例如,sc对应于图2中的s4或者元素204)执行标准深度剥离。这在块310中示出。在此示例中,可以将D(Sn)定义为最后被剥离的层sc之后按照深度而言的第一个面。
在图3所示的实施方式中,该方法可以包括:如在320中,对于所有受影响的像素,找到在序列中位于sn之前的、深度范围(D(sn),∞]中的最近乱序面。在一些实施方式中,这可以包括检查在sn之前提交的面的集合。根据定义,列表中在sn之前到来的、其深度大于sn的任何面都是乱序面。该面的列表可以定义如下: 该方法可以包括找到任何这种面的最近深度,如果其存在的话。这可以这样给出:
z_min_prev=∞,否则
在此示例中,深度z_min_prev可以提供对按序面的深度范围的宽松界限。现在可以假设任何连贯的面列表落在范围[D(sn),z_min_prev)之内。
在图3所示的实施方式中,该方法可以包括:对于所有受影响的像素,如在330中,找到在序列中位于sn之后的、在深度范围(D(sn),∞]之内的最近乱序面。在一些实施方式中,该方法可以包括考虑列表中在sn之后出现的面的集合,并且在该列表中找到sn之后的任何乱序面的最近深度。该面列表可以如下给出:
在此示例中,列表中在sn之后出现的任何面的最近深度如下给出:
z min post=∞,否则
在一些实施方式中,深度z_min_post可以提供连贯面的深度范围的宽松界限。在此示例中,现在可以给出剥离范围的严格界限:([D(sn),min(z_min_prev,z_min_post)]。
在一些实施方式中,如图3的块340所示,该方法可以包括:通过针对所有像素合成n个深度层来绘制中间图像(例如,针对直到但是不包括剥离范围的面)。如果给出剥离范围间隔,在一些实施方式中,该方法可以包括将经剪切的面S绘制到剥离范围。在此示例中,确保剥离范围内的面是按照正确的从前到后顺序的,因此可以在对数据的一次通过处理中完成合成。
注意,在一些实施方式中,连贯层剥离技术可以包括用以对场景中的三维图像的全部或者部分面进行预排序或者部分进行预排序的操作,如上文关于混合型层剥离所描述的。该方法继而可以对刻画场景的图像的每个像素应用基于像素的连贯层剥离。在其他实施方式中,可以对包括一些预排序面和一些未排序面的接收到的图像数据应用连贯层剥离,并且连贯层剥离技术可以不包括显式的排序操作。在又一实施方式中,连贯层剥离技术可以包括两个或更多排序操作。例如,排序操作可以对场景元素的面的子集(例如,给定z范围内的那些)进行预排序,并且可以将该子集内被排序为深度顺序的那些面合成到图像缓冲区中,而无需执行深度剥离。继而可以如上所述地对面子集内未被按照深度顺序排序的那些面应用深度剥离。在处理面的一个子集之后,可以使用排序操作对面的另一子集进行预排序,并且在此描述的技术可以应用于第二子集的已排序和/或未排序面。在一些实施方式中,这可以针对面的多个子集(例如,z范围)进行重复,并且可以将结果合成到一起以产生最终图像。
在一些实施方式中,可以使用现代图形硬件来实现图3中所示的方法。例如,图4示出了方法的一个实施方式,其中可以将参考图3描述的操作映射到GPU上。在此示例中,该方法可以包括如410中的初始化操作。在一些实施方式中,为了绘制效率,初始化可以包括将三维场景中不透明的面从透明面中分离出来。例如,可以将不透明对象绘制到称为opaque_depth的深度图中。在此示例中,该方法还可以包括将用于透明面的深度图(称为D(sc))初始化到z-near平面。在此示例中,这两个缓冲区可以对深度范围进行编码,其中要对该深度范围之间的透明排序进行求解。
如在图3中所示的示例中,图4中所示的方法可以包括:找到在序列中位于sn之前的、深度范围(D(sn),opaque_depth)内的最近乱序面。在图4所示的例子中,将该步骤分为两次通过。在一些实施方式中,对该步骤的输入可以包括存储在图中的间隔(D(sc),opaque_depth),并且该步骤的输出可以是间隔(D(sn),z_min_prev)。如图4中的块420中所示,该步骤可以包括:对更新z缓冲区值、并且其深度值位于范围(D(sc),opaque_depth)内的面数进行计数。在此示例中,可以使用模板缓冲区来存储该计数。在一些实施方式中,可以在简单的分段着色器(shader)中来完成深度范围剪切。在一个实施方式中,用于绘制该次通过(也即,通过1)所需的OpenGL声明如下:
glClearStencil(0);
glClearDepth(1.0);
glStencilMask(0xFF);
glClear(DEPTH_AND_STENCIL_BUFFER_BITS);
glEnable(DEPTH_TEST);
glDepthFunc(LESS);
glEnable(STENCIL_TEST);
glStencilFunc(ALWAYS,0,0xFF);
glStencilOp(KEEP,KEEP,INCR);//fail,zfail,zpass
drawTransparentObjects(); //draw transparent objects
由于该方法可以包括在分段着色器中对范围(D(sc),opaque_depth)的剪切,模板计数过程可以仅受到面si(其中i≤n)的影响。只要面sn流过,便可以将D(sn)写到深度缓冲区,并且所有后续面(例如,si:i>n)可能无法通过z测试。在该通过的结尾,模板可以保存更新过z缓冲区的面数的计数。在一些实施方式中,该计数可以包括sn对z缓冲区的更新。在此示例中,深度缓冲区可以保存D(sn),其可以在后续步骤中使用。
在图2所示的例子中,后面的面更新模板缓冲区:s1、s2和s3。由此,根据图4所示的方法,可以将模板缓冲区设为3,而将深度缓冲区设为D(s3)。
注意,在一些实施方式中,如果处于不正确顺序的面多于255个,则模板计数可能失效,并且计数可以溢出。尽管这种情况可能在非常复杂的场景中发生,但是在多数情况下,可以通过提供面的高层排序来防止它,其中面的高层排序实际上可以消除模板溢出的机会。下面将讨论一种更为鲁棒的方法,该方法可以利用可用的浮点混合。
如图4的块430所示,该方法可以包括:将模板缓冲区向下计数回1,以找到范围(D(sc),opaque_depth]内的任何曲面si:i<n的最小深度。为此,在一些实施方式中,可以使用相同的深度比较逻辑再次绘制几何体,将模板向下计数,并且仅在模板计数大于1的情况下通过模板测试。在此示例中,该过程的结果将z_min_prev记录到z缓冲区中。在一个实施方式中,用于绘制通过(也即,通过2)的OpenGL声明可以如下:
glClearColor(1.0,1.0,1.0,1.0);
glClear(COLOR_AND_DEPTH_BUFFER_BITS);
glEnable(DEPTH_TEST);
glDepthFunc(LESS);
glEnable(STENCIL_TEST);
glStencilFunc(LESS,1,0xFF);
glStencilOp(KEEP,KEEP,DECR);
drawTransparentObjects(); //draw transparent objects
在图2所示的例子中,绘制可以略过s1并且在s2停止,因为在绘制s2并将深度设为D(s2)之后,模板计数达到1,并且不再对像素进行更新。
如图3(块330)中所示的示例中,图4所示的方法可以包括:找到序列中位于sn之后的、在深度范围[D(sn),min(z_min_prev,opaque_depth)]内的最近乱序面。再次,在一些实施方式中,该步骤可以包括两次通过。在一些实施方式中,对于这两次通过,可以使用简单的分段着色器对落入范围[D(sn),min(z_min_prev,opaque_depth)]内的所有面分段进行剪切。注意,如从图3中块320中描述的步骤中得出的,i<n的所有面si落入该范围内。因此,其在通过3和通过4中不起作用。
如图4中的块440所示,该方法可以包括:对范围[D(sn),min(z_min_prev,opaque_depth)]内直接在sc之后的面的已存储最长连贯跨距(也即,正确排序的面的数目)进行计数。在一些实施方式中,这可以通过将z测试设为GREATER(大于)以及在面每次通过z测试时递增模板计数来实现。在这种实施方式中,没有通过z测试的第一个面将对模板值取逆,并使模板测试剔除掉所有剩余的面分段。在此示例中,该通过(通过3)的结果可以是给出sc之后处于正确深度顺序的面的数目上界的模板值。在一个实施方式中,该次通过的伪代码可以如下:
glClearStencil(0);
glClearDepth(0);
glClear(DEPTH_AND_STENCIL_BUFFER_BITS);
glEnable(DEPTH_TEST);
glDepthFunc(GREATER);
glEnable(STENCIL_TEST);
glStencilFunc(GREATER,128,0xFF);
glStencilOp(KEEP,INVERT,INCR); //fail,zfail,zpass
drawTransparentObjects();
在图2所示的例子中,模板缓冲区针对面s3、s5、s6和s7递增。因此,在此示例中,面s9可以对从4到251的模板值取逆,并且将深度设为D(s9)。
注意,在一些实施方式中,该通过中可能没有任何溢出问题。如果正确顺序的面多于128个,当模板计数达到128时,计数停止,并且可以假设最后的面是乱序的。因此,在一些实施方式中,该通过在方法的一次迭代中最多可以处理128个面。
如上所述,在通过3中,可以对直接在D(sc)之后的已排序的z连贯面的最长跨距中的已排序z连贯面的数目进行计数。然而,可能存在打断该连贯跨距的其他面sj:j>n(例如,图2中的面s10)。在此示例中,在通过4中,可以计算这种面的最小深度,如图4的块450中所示。可以将该值存储为z_min_post。在一个实施方式中,下面包括的用于通过4的逻辑可以用以使用模板测试以及在每次模板测试失败时递增模块来从最长连贯跨距(在通过3中计数)中剔除掉前k个面。在此示例中,一旦模板值达到255,剩余的面可以流过管道(pipeline),并且可以使用具有LESS(小于)的z缓冲来找到最小深度。
glClearColor(1.0,1.0,1.0,1.0);
glClearDepth(1.0);
glClear(COLOR_AND_DEPTH_BUFFER_BITS);
glDepthFunc(LESS);
glStencilFunc(EQUAL,255,0xFF);
glStencilOp(INCR,KEEP,KEEP);//fail,zfail,zpass
drawTransparentObjects();
在图2所示的例子中,通过4可以跳过面s3、s5、s6和s7,并且可以绘制面s9和s10。
如图3的块340中所示的例子中,图4中所示的方法可以包括:合成n深度层,这在一些实施方式中包括两次通过。如上所述,位于间隔[D(sn),min(z_min_post,z_min_prev,opaque_depth))内的面可以确保处于不间断的正确深度顺序。因此,在一些实施方式中,标准的合成通过可以使用分段着色器来剪切该范围,以便将这些面积累到最终图像中。该通过(通过5)被示为图4中的块460。
注意,在一些实施方式中,位于剥离范围上界的面可能是乱序面(例如,在没有设置z_min_post的情况下,例如,如果图2中的面s3直接在面s2之后)。在这种实施方式中,由于该深度是已知的,该方法可以包括将该面剥离掉,以及在附加的合成通过(例如通过6,未示出)中使用z相等测试。在这种情况下,该方法在每次过程迭代中可以剥离掉(在最坏情况下)两层。
如图4所示,一旦已经合成了面的连贯范围,则可以将D(sc)更新为z_min_prev、z_min_post和opaque_depth的最小值。如块470所示。在一些实施方式中,可以重复块420-470所示的过程,直到没有剩余的面要剥离。这由从决策块480的肯定出口到块420的反馈循环示出。在一些实施方式中,该方法可以包括在合成阶段(未示出)使用遮挡查询来检测何时发生这种情况。一旦没有更多的面要剥离,如块408的否定出口所示,可以输出最终的合成图像,如490中。例如,表示连贯层剥离技术的该次通过的结果的图像可以显示在屏幕上和/或可以保存在存储器中,以用于进一步处理(例如,在后续通过中)。
注意,在一个实施方式中,该方法可以包括:在通过2之后,以深度图opaque_depth绘制全屏多边形以获得min(z_min_prev,opaque_depth),并继而在通过4之后以得到的图min(z_min_prev,opaque_depth)绘制多边形。在这样的实施方式中,有可能在通过1-通过4的分段着色器中消除一次比较,以及在通过5中消除两次比较。
如上所述,上面描述方法的备选实施方式可以利用浮点图像混合来达到通过次数的减少。例如,可以通过单次通过来替代通过1和通过2,这使得总计数变为5。图5中示出了一个这样的实施方式。如块510中所示,如上文描述的实施方式,该方法可以包括初始化各种缓冲区(例如,深度图)。
如前面的例子中,图5中所示的方法可以再次包括找到序列中在sn之前的、在深度范围(D(sn),opaque_depth)之中的最近乱序面。如块520中所示,可以将深度和颜色信道初始化为具有z-far的值。在此示例中,如在530中,浮点混合可以用来将先前距离相机最近的面的深度存储在颜色通道中。在绘制几何体中,该方法可以包括将颜色设为1.0、1.0、1.0以及将alpha设置为分段深度。在一些实施方式中,通过使用将源颜色乘以目的alpha的混合方法,可以将帧缓冲区中的先前面的深度移动到该帧缓冲区的颜色通道。在此示例中,这次通过的结果可以将z_min_prev的值存储到颜色通道中。在一个实施方式中,用于绘制这次通过所需的OpenGL声明如下:
glClearStencil(0);
glClearDepth(1.0);
glClearColor(1.0,1.0,1.0,1.0);
glClear(COLOR_AND_DEPTH_BUFFER_BITS);
glEnable(DEPTH_TEST);
glDepthFunc(LESS);
glEnable(BLEND);
//multiply source color by destination alpha
//set alpha to source alpha
glBlendFuncSeparate(ZERO,DEST_ALPHA,ONE,ZERO);
drawTransparentObjects(); //draw transparent objects
如图5所示,该方法可以还包括:找到序列中在sn之后的、深度范围[D(sn),min(z_min_prev,opaque_depth))中的最近乱序面。在此示例中,该步骤可以涉及两个绘制目标,一个用于计算合成图像,第二个用于计算过程的下一阶段的新的z剥离深度。在此示例中,该方法可以包括两次提交每个分段,一次作为朝前分段,第二次作为朝后分段,如块540中所示。在一些实施方式中,可以清空缓冲区,以具有z-far的深度和为1的模板。使用“比目的地的分段更接近或者相等”的z测试通过,该方法可以包括绘制比z_min_prev更接近而比z-剥离(z-peel)更远离的分段。
在一些实施方式中,可以根据如下规则、使用对从后到前的顺序的估计来绘制多边形:
●对于分段配对的第一分段(也即,向后分段):
○将颜色设置为0.0、0.0、0.0,并将alpha设为1。如果描绘该分段,则将颜色重置为黑,其中将在其上合成其他颜色。
○模板测试:大于零。如果模板失败:模板保持。如果模板通过并且z通过:模板保持。如果模板通过并且z失败:模板保持。
●对于分段配对的第二分段(也即,向前分段):
○颜色是面颜色,alpha是面alpha。
○模板测试:总是为真。如果模板通过而z失败:将模板设为1。如果模板通过且z通过:清空模板。
如块540中所示,该步骤可以成功地计算z_min_prev与z剥离之间的面的合成颜色。然而,其可能没有计算正确的透明度值,因为经过翻转的分段的alpha被设为了1.0(透明度为0)。为了解决该问题,如在块550中,该方法可以包括第二绘制目标,其执行与第一目标相同的合成,但是将朝前分段颜色设置为分段透明度值,并将朝后分段颜色设置为1。在一些实施方式中,该方法使用将源颜色乘以目的颜色的混合规则。在一些实施方式中,第三绘制目标可以使用相同的规则,但是可以将朝后分段设置为具有颜色“z-frag”以及alpha“1.0”,并将朝后分段设为具有颜色“0”以及alpha“0”。在这样的实施方式中,第三绘制目标可以使用过混合模式。
如块560中所示,该方法可以包括将结果从先前步骤合成为全局合成图像(按照从前到后的顺序)。在一些实施方式中,这可以通过全屏四边形来实现。如在前面的例子中,重复块520到560中所述的操作,直到没有更多要剥离的面。这在图5中示为从决策块580到块520的反馈循环。一旦没有更多要剥离的面,该方法可以包括输入最终图像,如在590中。例如,表示连贯层剥离技术的这次通过的结果的图像可以显示在屏幕上和/或可以保存在存储器中以用于进一步处理(例如,在后续通过中)。
在一些实施方式中,上面描述的方法每次迭代可以需要5次几何体通过,并且每次迭代可以剥离至少两层。下面描述的另一实施方式可以将几何体通过的数目减少为2,其只需要对已有硬件进行微小的改动。
在一个实施方式中,理想光栅化引擎可以允许几何体的有效光栅化,同时允许访问光栅化着色器中的多个目标缓冲区。在一个这样的实施方式中,光栅化着色器可以是通用着色器的部分,其同时计算颜色和alpha。在另一实施方式中,其可以在亚像素采样级别以更为精细的尺度来执行,其中面材料着色器分摊在多个像素的子采样上,如有时在目前的GPU中完成一样。注意,在一些目前的GPU中,光栅化着色器被限制为有限的帧缓冲区状态机。在一些实施方式中,在此描述的方法可以实现为对这种状态机的扩展。
在该备选实施方式中,光栅化着色器可以具有用于采样位置处的分段的可用的插值Z,以及在绘制目标的等效物中可以读和写的多个z值和其他整数值(等同于模板)。在这样的实施方式中,光栅化着色器可以按照每个像素子采样的光栅化顺序针对每个分段来执行。这种系统可以能够将传统GPU的多次通过结合为单次通过。在一个实施方式中,可用于光栅化着色器的输入可以包括:
●zFragment:采样位置处的分段的插值深度
●zPeel:来自过程的先前通过的最终剥离深度
●zOpaque:最近不透明面或者z-far中距离相机最近的一个的深度
●z1,z2,z3:一组全精度缓冲区,用来存储z值(在各种实施方式中,或者是浮点或者是定点)
●gChanged:单个全局改变的位,用来确定类似于遮挡查询的终止
这种用于连贯层剥离的方法的一个示例由下面的伪代码给出:
1:for all pixel sample locations do
2: z3←zNear
3:end for
4:gChanged←true
5:while gChanged=true do
6: gChanged←false;
7: for all pixel sample locations do
8: z1←zOpaque;
9: z2←zOpaque;
10: zPeel←z3;
11: zPostFlag←false
12: end for
13: for all geometry sample locations do //Pass 1
14: if(zPeel<zFragment<z2)then
15: gChanged←true;
16: if zFragment<z1 then
17: z2←z1
18: z1←zFragment
19: z3←z1 //Reset the state for post
20: zPostFlag←false
21: else ifzPostFlag=true then
22: if zFragment<z3 then
23: z3←zFragment
24: end if
25: else
26: if zFragment<z3 then
27: zPostFlag←true
28: end if
29: z3←zFragment
30: end if
31: else if zFragment=zPeel then
32: Composite fragment into color buffer
33: end if
34: end for
35: if gChanged=true then
36: for all geometry sample locations do //Pass 2
37: if(zPeel<zFragment<z3)then
38: Composite fragment into color buffer
39: end if
40: end for
41: end if
42:end while
如上所述,用于绘制透明面的不同方法可以适于不同的应用和/或输入场景。图6A-图6F示出了各种场景,其包括已经应用了在此描述的各种方法的透明面。
为了评价不同方法的价值,可以考虑多个量度。一个量度可以是在当前现有技术硬件上的性能的绝对时间,第二个量度可以是绘制具有正确透明度的特定场景所需的几何体通过的次数。出于显然的原因,在实践中可能在短期内对绝对性能特别感兴趣。可能在理论上对所需的通过次数更为感兴趣,因为假设光栅化硬件的进一步优化,则其可以表明混合型层剥离或者连贯层剥离的价值。这种优化例如可以通过支持理想化连贯层剥离方法或者通过改进或合并目前基于GPU方法的通过来实现。
通常,可以通过混合型层剥离来绘制的所有场景也可以通过连贯层剥离和传统深度剥离来绘制。为了确定方法如何随深度复杂性而伸缩,使用在此描述的各种方法绘制了与表示治疗束的圆锥体相交的、表示体的alpha调制明面的栈。由于圆锥体具有非常低的深度复杂性,这种情况可能非常适于混合绘制和连贯层剥离。图6A示出了测试场景,其中跨过体的分片的数目是可设置的参数。图7示出了与使用各种方法来绘制测试场景相关联的执行时间,其中跨过体的分片数目是可配置的参数。在此示例中,该图示出了对于每个不同算法的绝对时间以及所需剥离的次数。如图7所示,对于传统层剥离,剥离次数随着体层的数目线性增长。传统深度剥离的总时间的增长快于线性时间。相反,混合型层剥离和连贯层剥离所需的通过次数保持恒定,而绘制时间随着层数线性增长。对于256个层,混合型层剥离相对于深度剥离而言实现了52比1的速度改进。连贯层剥离由于近似为6的恒定因数而较慢。这可以归因于该方法每次迭代的较大数目的几何体通过,以及需要在每次通过中绘制体层。在此示例中,对于混合型层剥离,仅需要针对合成通过来绘制体分片,而不需要针对深度剥离通过。
为了针对更为一般性的场景来考察混合型层剥离相对传统深度剥离的性能,使用了各种模型。传统深度剥离所需的总层数部分地取决于相机的位置。在一些情况下,对一些模型的顶视图和侧视图进行了比较。在这些示例中,基于上文描述方法的连贯层剥离得到了相对于传统深度剥离高达3倍的速度改进。取决于模型,该方法的浮点变形慢于或者快于基于模板的版本。变化可以归因于浮点混合方法的较少几何体通过相对于去往帧缓冲区的代价较高的带宽的相对代价。表1中描述的性能测量是基于Marko Dabrovic提供的模型(例如,Sponza模型)、斯坦福大学计算机图形学实验室提供的模型(例如,Dragon和Lucy模型)或者可公开获得的模型(例如,Engine和Car模型)。图6A中所示的模型(头部体数据集)是基于从Simens Magnetom上取得数据并且得到了Simens Medical System,Inc.,Iselin,NJ的允许。
表1(下面)示出了使用连贯层剥离方法A、利用浮点混合的高级版本B以及标准深度剥离方法来绘制的各种模型的帧率、迭代次数以及几何体通过次数。
模型图 | 面顶点 | 连贯剥离A | 连贯剥离B | 标准深度剥离 |
引擎(图6C) | 133K面120K顶点 | 22fps7次迭代42个几何体 | 23fps7次迭代35个几何体 | 21fps22次迭代44集合体 |
Dragon正面 | 150k面749K顶点 | 51fps3次迭代18个几何体 | 53fps3次迭代15个几何体 | 35fps14次迭代28个几何体 |
Dragon侧面(图6D) | 150K面749K顶点 | 51fps3次迭代18个几何体 | 53fps3次迭代15个几何体 | 35fps14次迭代28个几何体 |
Lucy对端 | 250K面125K顶点 | 37fps3次迭代18个几何体 | 41fps3次迭代15个几何体 | 15fps22次迭代44个几何体 |
Lucy正面(图6F) | 250K面125K顶点 | 36fps3次迭代8个几何体 | 40fps3次迭代15个几何体 | 27fps12次迭代24个几何体 |
Sponza对端 | 66K面61K顶点 | 36fps3次迭代18个几何体 | 40fps3次迭代15个几何体 | 12fps26次迭代52个几何体 |
Sponza正面(图6E) | 66K面62K顶点 | 56fps3次迭代18个几何体 | 50fps3次迭代15个几何体 | 35fps16次迭代32个几何体 |
Car正面(图6B) | 730K面365K顶点 | 0.28fps11次迭代66个几何体 | 0.34fps11次迭代55个几何体 | 0.27fps36次迭代72个几何体 |
表1多种方法对各种模型的相对性能
如上所示,混合型层剥离可能在某种程度上可应用性稍窄。然而,其示出了相对于传统深度剥离的显著性能改进,并且可以易于在目前的GPU上实现。连贯层剥离可以应用于较宽类型的部分排序的场景,并且示出了在目前硬件上针对典型测试模型的上至3倍的速度加速。其还可以作为将来改进的绘制硬件的基础,改进的绘制硬件允许其至少在最坏情况下与传统深度剥离匹配,并且对于具有良好但是不完全排序的高速度复杂性场景渐近地具有更好性能。
在此描述的方法主要关注于混合型层剥离和连贯层剥离的光栅化逻辑。如本文所述,连贯层剥离可以受益于良好排序的场景。备选实施方式可以包括确定理想的排序算法以及其他启发式算法,例如当连贯层剥离是核心光栅化算法时的几何体切割。在此描述的各种实施方式使用三角形重心的简单的桶排序。然而,其他实施方式中可以应用其他排序方法。其他实施方式可以在GPU的改进可用时对其加以利用,并且可以得到显著的加速。其他实施方式可以包括研究如何增强帧缓冲区状态机以降低通过的次数,以及在适当硬件变得可用时的理想方法的备选实现。在一些实施方式中,Z剔除(Z-culling)可以促进传统深度剥离的效率,并且在连贯层剥离的上下文中可以解决对z剔除的利用。最后,当其变得可实际用来绘制具有高透明深度复杂性的场景时,这种绘制可以在可视化中被有效地使用。
如前所述,在此描述的用于正确绘制具有顺序无关透明度的复杂三维场景的方法可以使用诸如图形处理单元或称GPU的现代图形硬件来实现。图8是示出了被配置用于绘制这种场景的GPU 600的一个实施方式的框图。GPU 600可以包括与计算机相关联的专用图形绘制设备。用于与GPU结合使用的适当计算机系统900的例子在图9中示出。图8中所示的GPU 600可以包括多个专用部件,其配置用于优化绘制图形输出的速度。例如,GPU 600可以包括用于绘制三维模型、用于对面应用纹理等的专用组件。然而,为了说明目的,在图8的示例GPU 600中仅示出了有限的组件选择。可以预计,不同于图8的示例架构的GPU架构可以适于实现在此描述的技术。GPU 600可以实现允许程序员调用GPU功能的一个或多个应用程序员接口(API)。适当的CPU可以从诸如NVIDIA公司、ATI Technologies以及其他供应商处购得。
GPU 600可以包括主机接口660,其被配置用于与数据源680(例如,主计算机900的通信总线和/或处理器910,或者主机系统本身)通信。例如,数据源680可以向GPU 600提供输入数据(例如,包括一个或多个几何对象的场景,其中对象包括一个或多个透明面)和/或可执行程序代码。在一些实施方式中,主机接口660可以允许GPU600与数据源680之间的双向数据移动。GPU 600还可以包括显示接口670,用于向数据目标690提供输出数据。例如,数据目标690可以包括显示设备952,并且GPU 600(以及图形组件和/或接口956)可以通过来自屏幕缓冲区(例如,图像缓冲区650)的特定速率提供图形数据来“驱动”显示器952。
在一个实施方式中,GPU 600可以包括内部存储器610。GPU存储器610在此也称为“视频存储器”或者“VRAM”,其可以包括其他GPU组件可访问的随机访问存储器(RAM)。如下文更为详细描述的,在一些实施方式中,GPU存储器610可以用来存储各种类型的数据和指令,诸如输入数据、输出数据、中间数据、用于执行各种任务的程序指令等。在一个实施方式中,GPU 600还可以被配置用于经由主机接口660来访问主计算机系统900的存储器920。
在一个实施方式中,程序指令940可以存储在主计算机系统900的存储器920中,并与主计算机系统900执行,以根据输入数据685来生成输出图像695。如在此所述,输入数据685可以包括表示包括一个或多个几何对象的场景的数据,其中几何对象具有按照已排序顺序或者任意顺序的一个或多个透明面。
在一个实施方式中,GPU 600可以包括GPU程序代码620,其可由GPU 100来执行,以执行在此描述的技术的方面。例如,在绘制过程(包括GPU程序代码620在GPU 600上的执行)期间,可以将输入数据685中的几何对象光栅化为像素。GPU程序代码620的元素可以由主计算机系统(例如,数据源680)提供给GPU 600,和/或GPU600本源的。在一个实施方式中,GPU程序代码620可以包括一个或多个着色器622(例如,顶点着色器、像素着色器、分段着色器或者光栅化着色器)。如图8中所示,在各种实施方式中,GPU程序代码620可以包括如在此所述的混合功能621、标准深度剥离功能623以及增强的深度剥离功能624中的一个或多个。在生成示出图像695中,这些功能的任何功能或者GPU程序代码620中包括的其他功能可以在图形学流水线中的各个点执行。
GPU存储器600可以包括一个或多个缓冲区,并且每个缓冲区可以包括像素数据(例如,颜色值)和/或像素元数据(例如,深度值、模板值等)的二维数组。每个缓冲区可以包括像素数据(例如,颜色值)和/或像素元数据(例如,深度值、模板值等)的二维数组。例如,如图8中所示,GPU存储器610可以包括图像缓冲区650。图像缓冲区650可以存储在绘制过程中生成的中间或者最终像素值。在一个实施方式中,图像缓冲区650可以包括单采样缓冲区,其中缓冲区中的每个像素由颜色和alpha值的单一集合表示(例如,针对红通道的一个颜色值,针对绿通道的一个颜色值,针对蓝通道的一个颜色值,以及针对一个或多个阿尔法通道的适当值)。在另一实施方式中,图像缓冲区650可以包括多采样缓冲区,其可用于自动反走样。
如图8所示,GPU存储器610可以包括各种其他缓冲区,诸如在此讨论的深度缓冲区(也即,Z缓冲区)640、模板缓冲区665、深度图D(sc)以及opaque_depth图645。在一个实施方式中,图像缓冲区650可以是与数据目标690的目标分辨率相同的分辨率。图像缓冲区650可以包括屏幕缓冲区,其直接被提供给数据目标690。在一个实施方式中,图像缓冲区650和深度缓冲区640可以是相同的分辨率,并且图像缓冲区中的每个位置(也即,像素)可以对应于深度缓冲区640中的相应位置。深度缓冲区640中存储的每个值可以指明相对于视点的相应像素的相对深度或者距离。
GPU 600可以包括用以辅助作品绘制的各种内置功能。在一个实施方式中,GPU 600可以包括Z测试(也即,深度测试)功能,其可操作以执行对Z值(也即,深度缓冲区640中深度值)的比较并相应地采取动作(例如,保持或者丢弃像素)。在一个实施方式中,GPU600可以包括模板测试功能,其可操作以执行对模板值(例如,在模板缓冲区中)的比较并相应地采取动作(例如,保持或者丢弃像素)。诸如Z测试和模板测试的功能可以被启用、禁用和/或通过对GPU API中适当功能的调用和/或反走样程序代码620的操作来进行配置。
如上所述,程序代码620可以包括标准深度剥离功能623以及增强的深度剥离功能624。在一些实施方式中,增强的深度剥离功能624可以包括可由GPU执行以实现在此描述的用于正确绘制顺序无关的透明面的方法的程序指令。在其他实施方式中,程序指令940(在图9中示出)可以用来实现这些方法。在又一实施方式中,图形学应用的操作,包括在此描述的用于绘制顺序无关的透明面的一些操作,可以在一个或多个CPU和/或GPU之间划分以便执行。例如,用于确定绘制参数的计算在CPU上可能比较简单,并且可以在GPU上的像素着色器中使用较少的指令。此外,GPU和/或CPU中的计算对于图形学应用所执行的特定计算可以更为鲁棒。可以选择各种实施方式来匹配特定GPU 600(例如,GPU 600可以缺少着色器或者图8中所示的其他组件)的能力。
图9是示出了计算机系统900的组成元件的框图,其中计算机系统900被配置用于实现用于绘制具有一个或多个顺序无关的透明面的复杂场景的系统和方法的实施方式。计算机系统900可以包括一个或多个处理器910,其是使用任何期待的架构或者芯片集来实现的,诸如来自Intel公司或者Advanced Micro Devices的SPARCTM架构、x86兼容的架构或者能够处理数据的其他架构或者芯片集。计算机系统900上可以运行任何期望的操作系统,诸如各种版本的Unix、Linux、来自微软公司的来自苹果公司的或者支持软件在硬件平台上运行的任何其他操作系统。处理器910可以通过至少一个通信总线耦合至一个或多个其他示出的组件,诸如存储器920。
在一个实施方式中,专用图形卡或者其他图形组件956可以耦合至处理器910。图形组件956可以包括GPU,诸如图8中所示的GPU600。而且,计算机系统900可以包括一个或多个成像设备952。该一个或多个成像设备952可以包括各类基于光栅的成像设备,诸如监视器和打印机。在一个实施方式中,一个或多个显示设备952可以耦合至图形组件956,以用于显示图形组件956所提供的数据。
在一个实施方式中,可以由处理器910执行以实现在此所描述技术的方面的程序指令940在任何时间点可以部分或者全部地驻留在计算机系统900处的存储器920中。存储器920可以使用任何适当的介质来实现,诸如任何类型的ROM或者RAM(例如,DRAM、SDRAM、RDRAM、SRAM等)或其组合。程序指令还可以存储在可从处理器910访问的存储设备960上。在不同的实施方式中,多种存储设备960中的任何设备可以用来存储程序指令940,包括任何期望类型的永久性和/或易失性存储设备,诸如独立的盘、盘阵列、光设备(例如,CD-ROM、CD-RW驱动器、DVD-ROM、DVD-RW驱动器)闪存设备、各类RAM、全息存储等。存储设备960可以通过一个或多个存储接口或者I/O接口耦合至处理器910。在一些实施方式中,可以经由包括上面描述的存储器920和存储设备960在内的任何适当的计算机可读存储介质将程序指令940提供给计算机系统900。
计算机系统900还可以包括一个或多个附加的I/O接口,诸如用于一个或多个用户输入设备950的接口。此外,计算机系统900可以包括一个或多个网络接口954,其提供对网络的访问。应当注意,计算机系统900的一个或多个组件可以位于远程,并且通过网络来访问。在各种实施方式中,可以使用任何期望的编程语言、脚本语言或者编程语言和/或脚本语言的结合来实现程序指令,例如C、C++、C#、JavaTM、Perl等。对于本领域的普通技术人员易见的是,计算机系统900还可以包括图9中未示出的多种元件,这由所示的椭圆来表示。
在各种实施方式中,图1和图3-图5中所示的操作可以按照不同于所示顺序的顺序来执行。总体上,在这些图中描述的任何操作可以可编程地执行(也即,由计算机根据计算机程序来执行)。在图1中以及图3-图5,所描述的任何操作可以自动执行(也即,无需用户干预)。
尽管已经对实施方式进行了详细描述,但是只要完全理解了上述公开内容,则多种变形和修改对于本领域技术人员来说将是易见的。意在将所附权利要求书解释为涵盖所有这些变形和修改。
Claims (26)
1.一种用于绘制透明面的计算机实现的方法,包括:
接收数据,所述数据表示包括一个或多个三维几何基元的场景;
通过在每个像素处执行对最接近观察者的面的深度剥离,将至少一个面绘制到当前深度缓冲区中;
将与一个或多个其他面相关联的值合成到用于相应像素的图像缓冲区中,而不执行对所述一个或多个其他面的深度剥离;
将与所述至少一个面相关联的值合成到用于所述像素的所述图像缓冲区中;以及
根据合成到所述图像缓冲区中的值来生成表示所述场景的输出图像。
2.根据权利要求1所述的方法,
其中所述至少一个面是透明面或者半透明面;以及
其中所述合成与所述至少一个面相关联的值以及所述合成与所述一个或多个其他面相关联的值,包括计算用于所述图像缓冲区中所述像素的合成透明度值。
3.根据权利要求1所述的方法,进一步包括:确定所述一个或多个其他面相对于观察方向是否处于正确的遮挡顺序;
其中响应于确定所述一个或多个其他面相对于观察方向处于正确的遮挡顺序,来执行所述合成与所述一个或多个其他面相关联的值。
4.根据权利要求3所述的方法,其中所述确定包括确定在所述至少一个面之后的最近乱序面。
5.根据权利要求4所述的方法,其中所述确定在所述至少一个面之后的所述最近乱序面包括对处于遮挡顺序的面的最长连贯跨距进行计数。
6.根据权利要求1所述的方法,进一步包括:确定所述至少一个面相对于给定面是否处于正确的遮挡顺序;
其中响应于确定所述至少一个面相对于所述给定面没有处于正确的遮挡顺序,来执行所述绘制至少一个面。
7.根据权利要求1所述的方法,进一步包括:在所述绘制至少一个面之前,至少执行对所述一个或多个三维几何基元的两个或者更多面的部分排序,使其处于遮挡顺序。
8.根据权利要求7所述的方法,其中所述部分排序得到由针对所述图像的至少一部分的遮挡优先级进行顺序排序的、所述两个或者多个面的至少一部分。
9.根据权利要求7所述的方法,
其中对给定深度范围内的所述两个或者更多面的子集执行所述部分排序;以及
其中所述生成输出图像包括仅根据所述两个或者更多面的所述子集生成中间输出图像。
10.根据权利要求9所述的方法,进一步包括:
在所述合成与所述至少一个面相关联的值之后,对第二深度范围内的所述两个或者更多面的第二子集执行部分排序;以及
重复所述绘制至少一个面、所述合成与一个或多个其他面相关联的值、所述合成与所述至少一个面相关联的值以及所述生成输出图像,以根据所述两个或者更多面的所述子集以及所述两个或者更多面的所述第二子集来生成第二中间输出图像。
11.根据权利要求1所述的方法,
其中所述将至少一个面绘制到当前深度缓冲区中包括:通过将两个或者更多未排序的面绘制到所述当前深度缓冲区中,来确定所述至少一个面之后的最近乱序面;以及
其中所述合成与所述一个或多个其他面相关联的值包括:根据所述最近乱序面以及所述至少一个面来合成与深度范围内的一个或多个面相关联的值。
12.根据权利要求11所述的方法,
其中所述深度范围内的面数大于或者等于二;以及
其中所述合成与所述深度范围内的所述一个或多个面相关联的值在单个操作中执行。
13.根据权利要求1所述的方法,进一步包括:在所述绘制至少一个面之前,将表示所述场景的所述数据分离为表示透明面的数据和表示不透明面的数据;
其中针对所述透明面来执行所述绘制至少一个面、所述合成与所述一个或多个其他面相关联的值以及所述合成与所述至少一个面相关联的值;以及
其中所述方法进一步包括:在所述生成输出图像之前,将合成与所述不透明面相关联的值的结果、所述合成与所述一个或多个其他面相关联的值的结果以及所述合成与所述至少一个面相关联的值的结果合并到所述图像缓冲区中。
14.一种用于绘制透明面的系统,包括:
装置,用于接收数据,所述数据表示包括一个或多个三维几何基元的场景;
装置,用于通过在每个像素处执行对最接近观察者的面的深度剥离,将至少一个面绘制到当前深度缓冲区中;
装置,用于将与一个或多个其他面相关联的值合成到用于相应像素的图像缓冲区中,而不执行对所述一个或多个其他面的深度剥离;
装置,用于将与所述至少一个面相关联的值合成到用于所述像素的所述图像缓冲区中;以及
装置,用于根据合成到所述图像缓冲区中的值来生成表示所述场景的输出图像。
15.根据权利要求14所述的系统,
其中所述至少一个面是透明面或者半透明面;以及
其中所述合成与所述至少一个面相关联的值以及所述合成与所述一个或多个其他面相关联的值,包括计算用于所述图像缓冲区中的所述像素的合成透明度值。
16.根据权利要求14所述的系统,进一步包括:装置,用于确定所述一个或多个其他面相对于观察方向是否处于正确的遮挡顺序;
其中响应于确定所述一个或多个其他面相对于观察方向处于正确的遮挡顺序,来执行所述合成与所述一个或多个其他面相关联的值。
17.根据权利要求16所述的系统,其中所述确定包括确定在所述至少一个面之后的最近乱序面。
18.根据权利要求17所述的系统,其中所述确定在所述至少一个面之后的所述最近乱序面包括对处于遮挡顺序的面的最长连贯跨距进行计数。
19.根据权利要求14所述的系统,进一步包括:装置,用于确定所述至少一个面相对于给定面是否处于正确的遮挡顺序;
其中响应于确定所述至少一个面相对于所述给定面没有处于正确的遮挡顺序,执行所述绘制至少一个面。
20.根据权利要求14所述的系统,进一步包括:装置,用于在所述绘制至少一个面之前,至少执行对所述一个或多个三维几何基元的两个或者更多面的部分排序,使其处于遮挡顺序。
21.根据权利要求20所述的系统,其中所述部分排序得到由针对所述图像的至少一部分的遮挡优先级进行顺序排序的、所述两个或者更多面的至少一部分。
22.根据权利要求20所述的系统,
其中对给定深度范围内的所述两个或者更多面的子集执行所述部分排序;以及
其中所述生成输出图像包括仅根据所述两个或者更多面的所述子集生成中间输出图像。
23.根据权利要求22所述的系统,进一步包括:
装置,用于在所述合成与所述至少一个面相关联的值之后,对第二深度范围内的所述两个或者更多面的第二子集执行部分排序;以及
装置,用于重复所述绘制至少一个面、所述合成与一个或多个其他面相关联的值、所述合成与所述至少一个面相关联的值以及所述生成输出图像,以根据所述两个或者更多面的所述子集以及所述两个或者更多面的所述第二子集来生成第二中间输出图像。
24.根据权利要求14所述的系统,
其中所述将至少一个面绘制到当前深度缓冲区中包括:通过将两个或者更多未排序的面绘制到所述当前深度缓冲区中,来确定所述至少一个面之后的最近乱序面;以及
其中所述合成与所述一个或多个其他面相关联的值包括:根据所述最近乱序面以及所述至少一个面来合成与深度范围内的一个或多个面相关联的值。
25.根据权利要求24所述的系统,
其中所述深度范围内的面数大于或者等于二;以及
其中所述合成与所述深度范围内的所述一个或多个面相关联的值在单个操作中执行。
26.根据权利要求14所述的系统,进一步包括:装置,用于在所述绘制至少一个面之前,将表示所述场景的所述数据分离为表示透明面的数据和表示不透明面的数据;
其中针对所述透明面来执行所述绘制至少一个面、所述合成与所述一个或多个其他面相关联的值以及所述合成与所述至少一个面相关联的值;以及
其中在所述生成输出图像之前,将合成与所述不透明面相关联的值的结果、所述合成与所述一个或多个其他面相关联的值的结果以及所述合成与所述至少一个面相关联的值的结果合并到所述图像缓冲区中。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US2289708P | 2008-01-23 | 2008-01-23 | |
US61/022,897 | 2008-01-23 | ||
US12/177,709 | 2008-07-22 | ||
US12/177,709 US8217934B2 (en) | 2008-01-23 | 2008-07-22 | System and methods for rendering transparent surfaces in high depth complexity scenes using hybrid and coherent layer peeling |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101609562A CN101609562A (zh) | 2009-12-23 |
CN101609562B true CN101609562B (zh) | 2013-08-21 |
Family
ID=40876117
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100039462A Active CN101609562B (zh) | 2008-01-23 | 2009-01-23 | 在高深度复杂性场景中绘制透明面的系统和方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8217934B2 (zh) |
CN (1) | CN101609562B (zh) |
Families Citing this family (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4956574B2 (ja) * | 2009-03-24 | 2012-06-20 | 株式会社東芝 | 立体画像描画装置および描画方法 |
EP2509527A1 (en) * | 2009-12-08 | 2012-10-17 | Koninklijke Philips Electronics N.V. | Ablation treatment planning and device |
US20110279448A1 (en) * | 2010-05-16 | 2011-11-17 | Zebra Imaging, Inc. | Rendering Transparent Geometry |
US20110279447A1 (en) * | 2010-05-16 | 2011-11-17 | Zebra Imaging, Inc. | Rendering Transparent Geometry |
CN102376078A (zh) * | 2010-08-25 | 2012-03-14 | 北京中科亚创科技有限责任公司 | 对场景自动标记的排序方法及装置 |
US9524572B2 (en) * | 2010-11-23 | 2016-12-20 | Microsoft Technology Licensing, Llc | Parallel processing of pixel data |
US8629886B2 (en) | 2010-12-07 | 2014-01-14 | Microsoft Corporation | Layer combination in a surface composition system |
US20120243031A1 (en) * | 2011-03-25 | 2012-09-27 | Konica Minolta Laboratory U.S.A., Inc. | Gpu accelerated color analysis and control system |
CN102737404B (zh) * | 2011-05-06 | 2017-03-01 | 新奥特(北京)视频技术有限公司 | 一种实现透明三维物体渲染的方法 |
WO2013086137A1 (en) | 2011-12-06 | 2013-06-13 | 1-800 Contacts, Inc. | Systems and methods for obtaining a pupillary distance measurement using a mobile computing device |
US9286715B2 (en) | 2012-05-23 | 2016-03-15 | Glasses.Com Inc. | Systems and methods for adjusting a virtual try-on |
US9483853B2 (en) | 2012-05-23 | 2016-11-01 | Glasses.Com Inc. | Systems and methods to display rendered images |
US9378584B2 (en) | 2012-05-23 | 2016-06-28 | Glasses.Com Inc. | Systems and methods for rendering virtual try-on products |
US9324182B2 (en) * | 2012-08-01 | 2016-04-26 | Microsoft Technology Licensing, Llc | Single pass radiosity from depth peels |
US9524008B1 (en) * | 2012-09-11 | 2016-12-20 | Pixelworks, Inc. | Variable frame rate timing controller for display devices |
EP2801971A1 (en) * | 2013-05-10 | 2014-11-12 | Rightware Oy | A method of and system for rendering an image |
US20170291261A1 (en) * | 2015-06-12 | 2017-10-12 | Ashok Chand Mathur | Method And Apparatus Of Very Much Faster 3D Printer |
EP3602504A4 (en) | 2017-07-10 | 2020-12-02 | Hewlett-Packard Development Company, L.P. | GENERATION OF OBJECT MODEL SLICES |
CN109903347B (zh) * | 2017-12-08 | 2021-04-09 | 北大方正集团有限公司 | 一种颜色混合的方法、系统、计算机设备及存储介质 |
CN109035375B (zh) * | 2018-06-22 | 2023-11-10 | 广州久邦世纪科技有限公司 | 一种基于OpenGL的3D眼镜渲染方法及其系统 |
CN109447928B (zh) * | 2018-10-16 | 2020-11-06 | 西安邮电大学 | 一种基于定点像素数据的图像Alpha混合方法 |
EP4084474A1 (en) * | 2021-04-28 | 2022-11-02 | Koninklijke Philips N.V. | Low complexity multilayer images with depth |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1441940A (zh) * | 2000-07-24 | 2003-09-10 | 索尼计算机娱乐公司 | 并行z缓冲器体系结构与透明度 |
CN1559054A (zh) * | 2001-09-26 | 2004-12-29 | �ձ������ȷ湫˾ | 图像产生装置和计算机程序 |
CN1664865A (zh) * | 2004-02-18 | 2005-09-07 | 哈曼贝克自动系统股份有限公司 | 图像处理器 |
EP1785942A2 (en) * | 2005-11-09 | 2007-05-16 | Adobe Systems, Inc. | Method and apparatus for rendering semi-transparent surfaces |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6670955B1 (en) * | 2000-07-19 | 2003-12-30 | Ati International Srl | Method and system for sort independent alpha blending of graphic fragments |
US6744433B1 (en) * | 2001-08-31 | 2004-06-01 | Nvidia Corporation | System and method for using and collecting information from a plurality of depth layers |
US6989840B1 (en) * | 2001-08-31 | 2006-01-24 | Nvidia Corporation | Order-independent transparency rendering system and method |
US7015914B1 (en) * | 2003-12-10 | 2006-03-21 | Nvidia Corporation | Multiple data buffers for processing graphics data |
US7505036B1 (en) * | 2004-07-30 | 2009-03-17 | 3Dlabs Inc. Ltd. | Order-independent 3D graphics binning architecture |
-
2008
- 2008-07-22 US US12/177,709 patent/US8217934B2/en active Active
-
2009
- 2009-01-23 CN CN2009100039462A patent/CN101609562B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1441940A (zh) * | 2000-07-24 | 2003-09-10 | 索尼计算机娱乐公司 | 并行z缓冲器体系结构与透明度 |
CN1559054A (zh) * | 2001-09-26 | 2004-12-29 | �ձ������ȷ湫˾ | 图像产生装置和计算机程序 |
CN1664865A (zh) * | 2004-02-18 | 2005-09-07 | 哈曼贝克自动系统股份有限公司 | 图像处理器 |
EP1785942A2 (en) * | 2005-11-09 | 2007-05-16 | Adobe Systems, Inc. | Method and apparatus for rendering semi-transparent surfaces |
Non-Patent Citations (1)
Title |
---|
罗月童等.基于"深度剥离"的透明渲染技术及其应用.《中国仪器仪表学会第九届青年学术会议论文集》.2007,593-596. |
Also Published As
Publication number | Publication date |
---|---|
CN101609562A (zh) | 2009-12-23 |
US20090184960A1 (en) | 2009-07-23 |
US8217934B2 (en) | 2012-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101609562B (zh) | 在高深度复杂性场景中绘制透明面的系统和方法 | |
US8760450B2 (en) | Real-time mesh simplification using the graphics processing unit | |
CN107750373B (zh) | 使用光线跟踪渲染以生成可见性流 | |
US7463261B1 (en) | Three-dimensional image compositing on a GPU utilizing multiple transformations | |
CN102667850B (zh) | 图像处理技术 | |
CN104885123B (zh) | 用于图形渲染的几何图形处理方法和图形渲染系统 | |
CN104025181B (zh) | 用于去耦合采样的基于分类的块延迟着色体系结构 | |
CN101533522B (zh) | 用于处理计算机图形的方法和设备 | |
CN105321143A (zh) | 来自片段着色程序的采样掩膜的控制 | |
CN103810742A (zh) | 图像渲染方法和系统 | |
US20090102837A1 (en) | 3d graphic rendering apparatus and method | |
CN102648450A (zh) | 用于并行命令列表生成的硬件 | |
CN104519339B (zh) | 图像处理设备和方法 | |
CN103886634A (zh) | 利用每像素着色器线程的高效超级采样 | |
US9858708B2 (en) | Convex polygon clipping during rendering | |
WO2005104042A1 (en) | Block-based fragment filtration with feasible multi-gpu acceleration for real-time volume rendering on standard pc | |
CN102096907A (zh) | 图像处理技术 | |
EP1410337A2 (en) | Method, apparatus and article of manufacture for determining visible parts of surfaces of three-dimensional objects and their parameters of shading while accounting for light and shadow volumes | |
KR101106391B1 (ko) | 투명 렌더링을 위한 시스템 및 방법 | |
KR20160068204A (ko) | 메시 지오메트리를 위한 데이터 처리 방법 및 이를 기록한 컴퓨터 판독 가능 저장 매체 | |
CN103617594A (zh) | 面向噪声等值面绘制的多gpu渲染并行处理装置及其方法 | |
KR101407639B1 (ko) | 3차원 그래픽 렌더링 장치 및 방법 | |
US8643666B2 (en) | Stenciled layer peeling graphics processing | |
US8130222B1 (en) | System and method for resolving visual priority among coincident primitives | |
CN104599304A (zh) | 图像处理技术 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |