CN104050710B - 用隐式几何体进行3d图形渲染的方法和系统 - Google Patents
用隐式几何体进行3d图形渲染的方法和系统 Download PDFInfo
- Publication number
- CN104050710B CN104050710B CN201410087919.9A CN201410087919A CN104050710B CN 104050710 B CN104050710 B CN 104050710B CN 201410087919 A CN201410087919 A CN 201410087919A CN 104050710 B CN104050710 B CN 104050710B
- Authority
- CN
- China
- Prior art keywords
- light
- implicit
- intersection
- test
- solid
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-tracing
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/12—Bounding box
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
Abstract
各方面涉及在3D场景中对光线进行追踪,所述场景包括通过或用隐式几何体定义的对象。在示例中,诱捕元素定义其中存在隐式几何体的3D空间的一部分。当发现光线与诱捕元素相交时,执行诱捕元素程序。所述诱捕元素程序可以包括使光线行进穿过3D体积和针对所述光线的每个当前3D位置对定义所述隐式几何体的函数进行求值。检测到的与所述隐式几何体的相交可以被发现与针对同一条光线的与显式定义的几何体的多次相交并行,并且对这些与所述光线的相交进行描述的数据可以被存储并被求解。
Description
技术领域
以下内容涉及光线追踪,并且在特定应用中涉及使用位移几何体的计算机图形的光线追踪。
背景技术
用光线追踪对来自3D场景描述的逼真2D图像进行渲染在计算机图形学技术领域内是众所周知的。光线追踪通常涉及获得由几何形状组成的场景描述,这些几何形状对场景中的结构的曲面进行描述。从一个视点(“摄像机”)追踪虚拟光线进入该场景;发出每条光线行进穿过2D展示的对应像素,该光线会对该像素产生影响。对光线进行与几何形状的相交测试以对每条光线的最近的交点(如果有的话)进行标识。
这些几何体形状可以由多个图元组成,如三角形图元。使用三角形图元展示形状提供了一种可以被某些光线追踪渲染器轻易消耗掉的展示,并且可以根据多种算法完成对光线进行与三角形的相交测试。然而,对于高质量的渲染,例如,为了从虚拟3D场景中产生HD分辨率图像,如对于高质量视频游戏或动画而言,精细的对象模型是有益的。与其他展示相比,仅使用三角形图元定义的精细对象模型会消耗大量内存。例如,仅使用三角形图元展示对象的光滑曲面通常将比基于样条的展示消耗比较更大的内存。另一个示例是景观的地形特征。例如,如许多精细特征所需要的,仅使用三角形图元展示实际的山脉会是内存密集的。
位移贴图是一种可以用来对这些情景进行定址的技术。位移贴图是指在一个或多个方向上对所定义的几何体数据进行移位,从而使得根据位移策略对最终用来对3D场景进行渲染的几何体进行修改。可以认为本几何体是经位移的几何体。在光线追踪中,使用经位移几何体的渲染涉及到对位移几何体进行相交测试。这与凹凸贴图形成对照,凹凸贴图涉及对光线进行与源几何体的相交测试,并且在标识出交点后,可以执行凹凸贴图过程。因此,凹凸贴图需要更少的相交测试的计算,因为对光线进行与简化的源几何体的相交测试而不进行与可能具有更多图元的位移几何体的相交测试。然而,凹凸贴图允许实现更有限的行为集合。
发明内容
在一个方面中,一种对光线进行与隐式曲面的相交测试的方法包括使光线进入包围3D体积的壳体的曲面。该壳体定义了隐式定义的几何体在该壳体内的最大范围。该方法包括沿着光线的路径迭代地使光线当前的3D位置步进穿过该壳体定义的3D体积。对于每个当前的3D位置而言,光线当前的3D位置投射到该壳体包围的显式定义的曲面上的当前2D位置上,并且使用该显式定义的曲面上的当前2D位置产生当前3D位置处的隐式定义的几何体的数据。使用所产生的数据将光线表征为或者碰撞或者错过当前3D位置处的隐式定义的几何体。光线数据结构可以存储为检测到的与隐式定义的几何体相交而产生的数据。可以首先在参考坐标系中表达该相交,并且将其转换到整体坐标系上以便与其他检测到的相交进行比较。
包围元素可以围住该壳体。可以用标记对该包围元素进行标识,该标记指示应使用隐式几何体相交遍历该包围元素。步进的步长可以不同。可以基于光线微分或细节层次指示设置步长。可以在包围元素内定义体积排斥元素的集合,每个体积排斥元素排斥该包围元素与该隐式几何体的范围之间的3D体积的一部分。可以在与执行步骤过程中定义体积排斥元素集合并联合用于3D场景的加速结构对其进行存储。这些是以下详细描述中所包括的示例方面。
附图说明
图1描绘了与美术师提供的向量相关联的显式定义的几何体元素的示例,这些向量用于对光线进行与隐式定义的曲面相交测试的方法中;
图2描绘了基于根据图1的美术师提供的向量而定义的壳体;
图3描绘了使光线遍历使用显式几何体和隐式几何体定义的3D场景的示例过程;
图4描绘了一种使光线遍历可以包含隐式定义的几何体的3D体积的示例方法;
图5描绘了带有包围元素和诱捕元素的加速结构;
图6描绘了被诱捕元素包围的示例壳体;
图7A描绘了图6的示例壳体的子体积;
图7B描绘了可以用来定义该示例壳体的子体积的双线性面片;
图8描绘了一组可以用来定义该示例壳体的子体积的形状;
图9描绘了遍历子体积和将光线当前的3D位置投射到2D位置上以便确定一个或多个隐式几何体特征的示例;
图10描绘了包围元素内的隐式定义的最终几何体曲面的示例;
图11描绘了基于图10的最终几何体曲面在包围元素内形成的体积排斥元素的示例;
图12描绘了几何体的实例被围在诱捕元素内的情况
图13描绘了几何体程序的预执行的过程或隐式几何体定义数据的其他求值以便确定最终几何体的范围;
图14描绘了在3D空间中重叠的包围元素内的相交测试的过程;
图15描绘了诱捕元素设置和转换过程;
图16描绘了一个示例系统,其中可以实现所披露的各方面;
图17描绘了可以包括在根据图16的系统实现方式内的有界函数电路的示例;
图18描绘了可以在其中执行光线路径的多个部分的并行相交测试的相交消歧的示例过程;
图19描绘了吞吐量计算单元的示例操作;以及
图20描绘了实施意识到服务质量的吞吐量计算的示例。
具体实施方式
可以使用向量位移来实现经位移的几何体。向量位移允许任意向量或向量控制场景几何体的元素或其一部分的位移。在一些实现方式中,向量位移允许完全任意地对几何体的任一元素进行移位。例如,可以在任意方向上对几何体的元素移位任意量值。因此,向量位移提供了对位移的高度控制,但提出了一项比较困难的渲染任务。
在此处的一些方面中,隐式地将位移限制在一定界限内,该界限基于一个或多个预定义向量而设置,在该界限中可以为这些向量设置最大位移。在一个示例方法中,美术师提供的向量可以与对源几何体进行定义的顶点相关联。美术师可以是任何人、机器或生成向量的过程。该术语用来将这些向量与可能与源几何体相关联的其他向量,如可以与源几何体的顶点和图元相关联的法线,区分开。针对2D曲面上的任意点,可以将位移限制成沿着通过内插与该2D曲面相关联的美术师提供的两个或更多个向量而确定的向量。因此,完全通用的位移可以被限制到由内插向量和最大位移极限确定的分析结果。
为了基于源几何体的给定元素来确定位移几何体,美术师提供的针对两个或更多个对源几何体的元素进行定义的顶点的向量可以用来控制如何或者以另外的方式用于对源几何体的元素上的具体位置的可能的位移的限制进行定义。可以根据某个过程和根据所确定的控制向量对源几何体进行移位。然后位移几何体可以用于光线相交测试中,和视情况用于其他目的。
本披露的一些方面涉及通过其可以对源几何体进行移位的示例性系统和过程以及可以在对位移几何体进行相交测试中使用的技术。
图1描绘了一个与几何法线相关联的三角形图元10,(该图元进而可以由形成该图元的卷绕顺序的顶点和那些顶点在空间中的位置定义(这些顶点的位置建立了一个具有法线方向的平面,并且惯例建立了法线点沿着该法线方向的哪个方向)。在图1中,形成图元10的顶点还与美术师提供的向量13-15相关联。在此,“美术师提供的”是指这种概念:这些向量不需要定义图元10的曲面或位置或其与其他图元(如图元网格)的关系。而是根据下述技术使用这些向量。
图2描绘了图元网格18(例如,看图元网格的横截面粗糙地定义了一个球体)。对图元10连同美术师提供的向量14和15进行标识。在这些美术师提供的向量14和15之间示出了内插向量16。形成该球体的图元的美术师提供的向量用来共同定义一个壳体20。将壳体20描绘成光滑的形状;然而,将通过是否以及将原始图元中的每个图元细分到什么程度而将壳体20分面到可确定的程度。在一个示例中,没有对这些图元进行细分,并且壳体20针对每个原始图元将具有一个小平面。在其他示例中,每个图元在壳体20内将具有对应的多个小平面。根据以下披露,根据示例壳体20的壳体可以用来促进光线追踪隐式定义的几何体。位移几何体提供根据本披露的隐式几何体的示例。在此,隐式几何体包括在以某种方式用来产生最终几何体曲面之间的“运行时间”之前存储几何体数据集的方法。在一个示例中,函数可以与图元10相关联,并且可以基于在运行时间期间产生的一个或多个输入来对该函数进行求值,以便对在具体体积内或在3D空间内的一点处对最终几何体的存在进行求值。
图3对如何在具有隐式定义的和显式定义的几何体的3D场景内追踪光线的概述进行了描绘。在步骤302,确定对穿过3D空间内的体积的一条或多条光线进行追踪。这种体积可以是3D场景的整体或其一部分。例如,可以通过在对图像进行渲染过程中发出光线来实施这种确定。在步骤205,这种一条或多条光线开始(或继续)遍历加速结构。该加速结构包括多个元素的图表,每个元素包围该3D场景的对应部分。对该图表的遍历允许对最终的几何体子集进行标识,针对该几何体对这条或这些条光线进行相交测试。在一些实现方式中,这种遍历不按光线在场景中行进的顺序进行。举例来讲,可以对每条光线进行广度优先测试,可以对光线进行分组和重新分组以便根据标准进行测试,并且一起发出的光线的遍历可以不一起开始。因此,在典型用法中,给定光线可以具有不按距离顺序标识的候选相交,并且应该对这种相交进行进一步的处理以便最终标识出该光线最近的相交。
在207,该遍历引起对该光线进入的一个或多个元素进行标识,并且因此需要对其进行进一步的处理以确定那儿是否存在每条这种光线的相交。在209,确定该元素是否为诱捕元素。诱捕元素可以具有与其他加速结构元素相同的形状,但可以与将其状态指示为诱捕元素的标记相关联。图5描绘了具有非诱捕元素(例如,包围元素303、305、307、315和316)和诱捕元素309-313两者的加速结构。显示这些元素中的每个元素具有一条与至少一个其他元素的连接,并且将位于3D空间内。一些实现方式可以具有单种诱捕元素类型;其他实现方式可以具有多种诱捕元素类型。这种实现方式可以具有被分配用于指示诱捕元素类型的多个位元。在一些示例中,指示该元素为诱捕元素致使执行诱捕元素程序211。当实现方式包括多种诱捕元素类型时,可以针对每种类型执行不同的诱捕元素程序。诱捕元素还可以存储在单独的加速结构内,可以从一个包围显式定义的几何体单独地/附加地对该加速结构进行遍历。在此,诱捕元素类型涉及当进入该诱捕元素时应遵循什么程序或不同的计算协议。例如,可以提供诱捕元素以非均匀有理B样条(NURBS)曲面或细分曲面进行求值,从而确定细节层次(LOD)、执行运动模糊计算等等。如以下将进一步解释的,加速结构可以包含用于不同目的的多个元素。例如,诱捕元素309-311可以围住同一几何体的不同细节层次的展示。如以下解释的,本披露的一些方面提供可以选择性地遍历加速结构的测试仪电路(诸如在没有发出被遍历光线的通用可编程计算单元或程序的干涉的情况下)。
如果该元素不是诱捕元素,则在215,确定该元素是否直接包围几何体(例如,其是同类加速结构中的叶节点)。如果没有,则在205,继续对后续元素进行遍历(例如,之前标识的元素的子元素)。如以下解释的,对引用计数进行更新(233)。如果存在直接被包围的几何体,则在217,对该几何体进行与这条或这些条光线的相交测试,并且在219,输出这种测试的结果。相交测试的结果可以包括用于图元与每一条或每多条光线相交的标识符、到交点的距离、为相交曲面确定的参数坐标、它们的某种组合、或其他数据及其组合。
在使用诱捕元素中,彻底完成光线的遍历会涉及创建多个不同的光线段,用对应的不同光线数据结构定义每个光线段。引用计数可以保持在每个诱捕元素内并且还横跨所使用的所有光线段以彻底追踪给定的光线(例如,沿着光线的路径可能有不同的原点和/或终点的光线)。例如,诱捕元素可以具有与3D场景的主加速结构分离开的加速结构,该光线段可以位于该加速结构内若干个元素内;为该诱捕元素求解了引用计数之后,可以完成该光线段,但可能没有完成整体光线(该光线段是其一部分)。
由于已经对每条光线的其他交点进行了标识,所以在221,可以对针对每条光线追踪的一个交点或多个交点进行更新。例如,如果对比之前标识的最近交点更近的交点进行了标识,则保持新的最近交点来支持(in favor of)前一个交点。在223,根据该遍历对用于这些光线中的每条光线的一个或多个引用计数进行更新。具体地,可以为每条光线保持计数,该计数对有多少个加速结构元素内当前存在光线进行追踪(其中多个段用于一条光线,然后可以保持和最终求解分布式引用计数)。例如,当完成了光线与元素的测试时,计数递减,但如果指示该光线用于针对子元素的测试,则计数递增。达到零的计数指示光线已经完成了遍历(取决于实现方式,尽管该光线与所有几何体的测试可能还没有完成)。
返回209和211,诱捕元素可以用来指示在该诱捕元素包围的3D体积内存在隐式定义的几何体。关于图3以后的图披露了多个过程和系统方面。关于图3的剩余部分,诱捕元素程序的输出可以包括对光线与几何体(隐式或显式)的最近交点的指示;当最近的交点是所希望的时,这定义了需要对光线进行追踪的最大距离。如以下解释的,该光线还可以与最小距离信息相关联,其可以用来排斥加速结构元素或几何体。这些交点最终会馈送到过程部分213内。在218,如果完成了相交测试,则在225,可以对一个或多个交点进行标识用于着色,并且在227,可以执行着色程序代码。在一些实现方式中,可以为单个交点提供不只一个交点值,并且在229,可以选择这些值其中之一用于用作在231出现的子光线发射的原点。例如,如以下解释的,可以为反射光线而不是折射光线选择不相同的交点值。
图4描绘了用于对光线和隐式几何体之间的交点进行标识的过程的第一示例。在一个示例中,发现相交的诱捕元素包围如关于图1和图2所披露的壳体(以及用于该壳体的源几何体)。在245,找出每一条或每多条光线与壳体表面之间的交点。从而在确定这条或这些条光线将要进入该诱捕元素之后,可以在一个或多个点处将光线投射到该壳体的曲面上。
图6描绘了包围着分面壳体323的诱捕元素534。可以通过沿着美术师提供的向量(图1和图2)定义的方向突出图元集合来形成分面壳体323。例如,可以突出图元332来定义壳体323的段324。因此,在一种方法中,壳体的小平面与源几何体的原始图元之间存在1:1的对应。图7A描绘了如由源几何体的图元332和将图元332连接到小平面325上的双线性面片的集合构成的段324。例如,如图7B中所示,双线性面片350分别将图元332的顶点355和356连接到小平面325的顶点358和359上。使用双线性面片定义每个段的边通过允许这些段的边相互不平行来允许这些段彼此不平行。图8描绘了壳体的段的一种替代性构造。在图8的示例中,提供了一组共同对该段进行定义的包围形状365-367(例如,四面体)。
图6还描绘了可以对壳体323的一段的入口330进行追踪,该入口与出口点331对应。段324具有入口点339和出口点340。在一些情况下,光线可以进入该壳体但不离开该壳体,在该壳体内,该光线将首先与源几何体图元相交。这些入口点中的任意入口点(包括该壳体的第一入口点)和进入的每个段可以被认为是一个入口点或与壳体曲面相交。关于壳体的每个段的入口点,当光线进入该壳体的不同段时进行追踪允许特定几何体过程与每个图元相关联并且执行该过程以对该壳体的那个段内的隐式几何体进行求值。
返回图4,这些光线然后步进穿过该壳体围住的体积以便为每条光线建立当前3D位置。该步进具有一定间隔(ε)。在239,可以对ε进行设置。举例来讲,可以根据各种输入对ε进行设置,如细节层次指示符235或光线微分237。ε可以是固定的或可变的;图4包括可变ε实现方式的描述。对于图4的剩余部分,描述了单条光线,尽管可以并行处理多条光线。在247,使该光线步进。在248,确定该光线是否在该壳体内的体积排斥元素的曲面处。体积排斥元素定义该壳体内的空间的子部分,在该子部分内将不存在隐式几何体。关于图10和11,提供了体积排斥元素的进一步的描述。简言之,可以通过确定该壳体内的隐式几何体的最终范围并且然后对围住没有几何体的空间区域的包围体的集合进行定义来对体积排斥元素进行标识。这些包围体的大小可以不同,以便拟合在该隐式几何体的最终范围的不同部分内。
如果该光线已经进入体积排斥元素内,则在249,确定来自该体积排斥元素的出口点,并且在250,该光线当前的3D位置被递增至该出口点,并且在248再次执行该确定。如果该当前3D位置没有在体积排斥元素内,则在251,将该当前3D位置投射到该图元的曲面上,该曲面被投射用来定义该壳体的那个部分。图9中描绘了这种投射的一个示例。图9描绘了使光线335沿着该光线的行进方向步进了多次(以对当前3D位置405进行标识),并且为每个当前3D位置对图元332上的相应2D位置406进行了标识。可以将这些2D位置中的每个位置表达为例如参数坐标对,或使用重心坐标。这些2D位置可以用作到程序几何体着色程序410的输入,该着色程序执行以便为这些2D位置中的每个位置产生隐式几何体特征(共同用图9中的415表示)。如关于图3解释的,可以基于每条光线的细节层次指示符设置步长。光线微分也可以用作对步长进行设置的输入。
设置步长是一种对光线前进过程中使用的计算量进行调整的方式。在某种意义上,可以基于给定隐式几何体渲染所希望的细节程度来调整该计算量。然而,在其他情况下,可以通过在较大步长之间找出相交区域并且然后细化该相交来减少计算总量。在一些实现方式中,基于细节层次或光线微分,3D位置的区域可以对齐(snap)到同一2D位置上。例如,即使将步长设置成一个大小,光线的若干个步进也可以对齐来基于同一函数进行求值。在另一个示例中,可以采取更大的步进,并且可以从该步进末尾内插一个或多个中间步进。例如,当细节层次低时,可以采取较大的步长,该2D曲面的较大区域可以全都求值到同一函数值,或者可以采取内插值用于中间值,或这些选项的某种组合。
在一个示例中,这些2D位置还可以用作到函数的输入,该函数输出用于该2D位置的隐式几何体的高度。在此,高度可以指沿着路径的距离;这种路径可以是线段。可以通过内插美术师定义的向量(见图1和图2)定义该线段。在其他示例中,可以通过与源图元相关联的函数或程序或者其一部分来定义该路径。当实现方式沿着线段移位时,可以通过对3D空间内该光线在该曲面上方的当前高度与针对该2D位置而被求值的隐式几何体函数生成的高度进行比较来检测相交。在一个示例中,这种比较可以包括减法。当减法的结果改变符号时,则可以得出以下结论:该光线在之前和当前步进之间的某个地方已经与该隐式几何体相交。这些操作是图4中描绘的操作的示例,包括在253,运行几何体过程来确定所投射的当前光线点的几何体特征和比较255。该减法实施了重叠确定257。如果没有重叠(例如,该光线的高度仍然比给定点处的隐式几何体更大),则该过程返回269以执行该光线的另一步进。如果检测到重叠(例如,减法结果的符号改变),则在259,可以进行平分过程以便进一步细化该交点。在261,可以对描述包含该交点的光线的间隔的一对3D位置进行标识。在263,可以返回这些点作为展示该光线与隐式几何体的交点。由于比该相交隐式几何体更近的几何体可能有待于被测试,所以有待确定此交点是否为最近的交点。
不是比较高度,可以使用碰撞检测算法来对当前3D位置与该隐式几何体进行比较。可以将该当前3D位置建模成具有一定范围的球体或形状。可以由距离层次信息、光线微分或它们的某种组合来控制此范围。在一些应用中,进行相交测试的隐式几何体可以源自体数据集。例如,可以将该体数据集表达为均匀或层级体元结构内的数据。例如,数据可以源自3D扫描技术(如医学成像扫描仪,如计算机断层(CT)扫描仪)和类似技术。
图10描绘了展示隐式定义的几何体的最终曲面的曲线430(出于清晰性,以2D示出)。包围元素429围住此几何体(如果提供,则为壳体和诱捕元素)。关于诱捕元素,诱捕元素的大小和总体维度会受到对诱捕元素的形式(例如,轴对准盒、正方形、球体等)的限制的影响。这种限制可能影响对于给定壳体能够实现的拟合紧密性。图11描绘了对最终几何体430与包围元素429之间的空间进行填充的排斥元素(特别标识的431和432)。还可以根据对可以用于这些元素的形状的限制来确定这些排斥元素的大小并且对其进行定位。进一步的限制可能涉及专用于这些元素的内存量。例如,可能要求元素的最小大小,或可以对存储对具体诱捕元素内的排斥元素进行定义的数据所需的最大内存大小进行设置。可以基于将要实施步进算法的计算平台的特征作出这些决定,包括内存带宽和大小特征、功耗限制、对等待时间的要求、吞吐量等。图13描绘了一个示例过程,可以通过该过程产生体积排斥元素。在451,对隐式几何体的一部分进行标识(例如,程序上定义的位移)。可以在预执行环境下进行这种标识,在预执行环境下可以将源几何体与一个或多个函数、一个或多个程序、或其他当需要时(例如,用于相交测试)将如何确定隐式几何体的定义一起提交。在455,视情况对这些函数、程序等进行求值或者执行,以便获得最终几何体范围。在一些情况下,这种最终几何体范围将取决于仅在运行时间期间可用的信息,或更普遍地,取决于尚不可用的信息(例如,该求值取决于在查找操作过程中检索(retrieve)到的值)。在这种情况下,该源几何体、函数或程序可以与可以从该查找预料到的一系列值的信息相关联。在其他实现方式中,可以提供对该查找返回的值进行描述的表达式,并且可以基于这些来源的联合求值来对隐式几何体的最终范围进行求值。
在457,基于此求值,在该最终几何体的最大范围内和在壳体(见图6)内定义排斥体积。排斥体积的实现方式的示例包括体元结构,这些体元结构可以是分层的,如八叉树。在一种替代性实现方式中,可以忽略壳体,并且将基于将包围该最终几何体的诱捕元素的范围来定义排斥体积。如果忽略该壳体,则将通常预料到将需要大量体积排斥元素,因为诱捕元素将不会像该壳体那样紧密地包围该最终几何体。在459,存储这些排斥体积的定义以供稍后访问。除了在预通过中定义排斥体积以外,还可以基于对隐式几何体曲面进行描述的函数的特性来排斥体积部分。
图12描绘了关于诱捕元素可以如何用于隐式几何体的相交测试并且更普遍地用于使3D空间的部分抽象化的更多细节。作为附加示例用法,诱捕元素可以用来使同一几何对象的实例抽象化,即使它们没有使用隐式几何体。图12给出了为几何对象的树的玩具示例,其中本几何对象的实例405-407被对应的诱捕元素434-436包围。这些诱捕元素进而可以被包围体420(见图5)包围。显示实例431与实例432重叠。这种在3D场景下的重叠可以是这些树实例的分支缠结的情况,从而使得它们占用了空间的重叠体积。在该场景中遍历光线438。图3描绘了使用诱捕元素程序211的过程;图15描绘了诱捕元素程序211的示例。
在图15中,当光线遇到诱捕元素时,为了对该光线进行与该诱捕元素内的几何体的相交测试,在461,将该光线转换到该诱捕元素参考的坐标系。在463,执行一个或多个过程。基于该诱捕元素的特征,这些过程可以显著不同。例如,可以执行隐式几何体过程。或者,可以对该诱捕元素内包围的几何体进行测试。最后,在465,产生结果数据。举例来讲,基于所测试的几何体或执行的过程,此结果数据是发现的最近交点。作为诱捕元素内的相交测试的结果,可以产生各种数据,包括重心坐标、到该交点的距离、3D空间内对相交点进行标识的点或该交点位置的另一种表达式。
当此数据包含位置信息时,可以在该诱捕元素参考的坐标系内对其进行表达。在467,将该位置信息和相关联的信息从该参考坐标系转换到整体坐标系上(或其他有待执行的操作共用的另一个坐标)。可以立即执行这种转换,但在另一个实现方式中,可以提供将允许在稍后时间使该转换生效的转换矩阵。例如,结果数据结构可以包含该参考坐标系和转换矩阵内的结果数据。稍后在相交消岐或分类过程的过程中,可以将该转换矩阵应用到该结果数据上。当执行该相交测试的功能单元可能不具有执行矩阵转换能力或不能高效地执行这种转换时,此实现方式可能是合适的。如果诱捕元素没有参考整体坐标系以外的坐标系,则可能不需要转换矩阵。
返回到图12,在本图中,光线起源于诱捕元素434和诱捕元素435两者内。在根据本披露的一些系统中,可以是以下情况:在确定光线438也与诱捕元素434(和/或434内的几何体)相交之前,发现诱捕元素435(和/或435内的几何体)与光线438相交(例如,如果每条光线在层级加速结构的根部开始测试,则光线438会首先访问诱捕元素435)。这种情况之所以会出现是由于一些相交测试的等待时间或测试的中间结果的迟延传播的缘故,或者例如仅仅基于如何计划该测试。因此,可以在实例431之前针对相交对实例432进行求值,即使实例431的多个部分离光线438的原点更近。图14描绘了一种对这些情况进行解释的相交测试的示例方法。
图14描绘了在411产生与隐式几何体相交测试的结果,并且在413产生对同一条光线与隐式几何体进行测试的结果。在图14的过程中,存在多个可供给定光线使用的相交结果。更常见地,可能期望保持光线的单个最近交点,并且每次对该光线的相交结果进行标识,将其与该最近的交点进行比较,并且保持该单个最近交点。在此,然而,在表达这些结果所在的分辨率下(例如,单个精确浮点),简单的距离求值可能不足以立即区分出哪个交点最近,或者在其他情况下,可能存在具有不可相互区别开的距离的两个交点。在这些情况下,一种提供可再现结果的方法会是重要的,即使存在不止一种“有效的”解决方案。在加速结构元素(诱捕或规则的)的情况下,如果该元素的体积的任意部分与最小距离定义的范围以及当前最近的交点重叠,则将不排斥该加速元素进入用于测试(加速结构元素没有建立光线的最近交点(即,最大值t))。
图14描绘了在415确定多个相交结果中的任意两个或更多个结果在无差别的距离处。在目前情况下可能存在一些所求值的明显不是最近的几何体交点的几何体交点。可以排斥这些交点;如果在图14的过程之前执行它们,则可以针对那些交点忽略确定415,但仍然会需要对重叠的加速结构元素进行标识或保持用于测试。如果所有的几何体相交结果在不同的相交距离处,则可以使用最近的交点(交点组)(在此,一组交点可以是例如按照对光线与曲面的相交进行划界返回的一对点,如从关于图9讨论的光线前进返回的结果)。
在419,访问与比较对象相比具有无差别的距离的每个对象(例如,加速结构元素或图元)的ID。基于这些对象的ID,可以从进一步的处理中排斥、或选择一个或多个对象。在423,基于421对该光线的相交信息进行更新。在425,对该光线的引用计数进行更新。如果之前针对测试有指示,当针对加速结构元素的测试添加该光线的引用计数时,该光线的引用计数增加,并且当被清除或当从测试中排斥出元素时,其减少。
更加详细地考虑421,如果加速结构元素的标识符指示其已经进入用于测试,则可以从进一步的处理中排斥出该加速结构元素。可以通过对该加速结构元素的标识符的至少一部分与所存储的或与该光线相关联的标识符信息进行比较来对此进行确定。这种与该光线一起存储的信息可以包括该加速结构元素的在已经被输入用于该光线的标识符序列中具有最高值的标识符(例如,所有这些标识符具有相对的顺序,并且该光线保持最高顺序元素的标识)。可以关于光线440考虑一个特定示例。可以看到光线440首先进入诱捕元素434。当进入该诱捕元素后,将为该诱捕元素建立最小值t。光线440还与诱捕元素435相交,但到该交点的距离不同于与诱捕元素434的交点。然而,与诱捕元素435的交点保持在诱捕元素434的体积内也是这种情况。因此,在此情况下,可以重新进入诱捕元素434或对其进行处理。所以在一种方法中,最小值t可以用来从重新测试中排斥出被不与另一元素重叠的包围元素包围的几何体。
同一几何体的实例可以遍布3D场景,其中每个实例被不同的诱捕元素围住。每个诱捕元素包括世界空间坐标位置(和/或范围)。每个诱捕元素大小可以不同并且可以定向不同。例如,可以缩放和转动诱捕元素。每个实例空间可以使用一个参考坐标系。每个诱捕元素还可以包括关于有待应用在光线上的转换的信息,该转换是为了在世界空间和该实例的参考坐标系之间进行平移。如上解释,每个诱捕元素还可以包括对该诱捕元素内的对象或其他数据的引用,例如,隐式几何体和其他数据。在另一个示例中,加速结构的每个元素可以具有一识符,并且展示诱捕元素封装同一几何体的加速结构元素可以共同具有一定数量的位元。可以收集与这些不同实例元素相交的光线,并且其可以一起开始相交测试。当每个诱捕元素具有对实例空间的引用时,则该引用可以用来收集将需要对所引用的实例空间进行测试的光线。当引用同一实例空间的元素共享标识符的一部分时,该标识符部分可以用来收集光线。
图16描绘了可以实施本文披露的各方面的系统501。系统501包括一个可以具有一组核心的计算集群502,每个核心能够执行来自对应独立的指令流的指令。每个核心可以具有专用高速缓存并且可以与一个或多个其他核心共享次级高速缓存;可以实现其他高速缓存配置。例如,核心503和504每个具有专用L1高速缓存,分别为505和506。核心503和504可以共享L2高速缓存507。计算集群502可以从加速结构存储器509和从几何体存储器508中进行读取。可以执行各种算法来辅助计算集群502,如吞吐量计算单元515的渲染算法。计算单元515包括任务收集器521、多个光线/图元相交测试单元520和多个光线/盒测试单元516。这些单元中的每个单元可以被配置成用于执行一个或多个定义的相交算法。当光线源自盒外时,可以实施光线/盒测试单元516从而使得它们产生从光线原点到与盒的交点的距离。当该光线起源于该盒内时,还可以实施光线/盒测试单元516从而使得它们返回该光线行进到盒的出口点的距离(例如,光线438起源于诱捕元素435内,并且可以使光线/盒测试单元516返回到出口诱捕元素435的距离)。光线/盒测试单元为用于具体种类形状的测试单元的示例。可以为其他种类的形状提供测试单元,或者除盒测试单元之外或者对其进行替代。
在一些示例中,每个测试单元包括执行给定相交算法的至少一部分的固定功能电路。示例图元测试包括与三角形图元的相交测试,如重心坐标测试。被进行相交测试的盒可以是例如轴对准包围盒。加速结构测试的其他方法包括kd树测试。除了这些相交测试单元以外,计算单元515可以包括一组(一个或多个)有限可编程性电路512,这些电路可以与对应的测试单元相关联或包括在任务收集器521内。
每个相交测试单元可以使用对应的本地光线数据存储器514。作为具体示例,光线数据518包括多个光线定义数据集。每个光线定义数据集包括最小距离标识(最小值t)。在一个示例中,如以上解释的,该最小距离可以用来步进穿过一组元素,而不必在同一过程中针对每一个步进全都对它们进行测试。还可以存储最大距离标识(最大值t),该标识对该光线的最近当前交点进行标识。可以存储关于当前最近交点的数据,如交点的内插变化、重心坐标、以及图元标识符。通常,可以基于将针对光线执行着色程序所需的数据选择所存储的数据(如果该数据涉及的交点是触发着色程序执行的交点)。当交点使包围盒元素(例如,诱捕元素)涉及到参考坐标系时,可以存储对整体和局部坐标之间的映射进行描述的转换矩阵。
如上解释的,任务收集器521形成计算分组(例如,可以一起被测试的光线分组)。光线分组可以对有待测试的加速结构进行标识。在一些示例中,加速元素可以是对对应LOD下的给定对象(或其一部分)进行定义的元素。这些元素可以在重叠空间内包围这种不同的LOD几何体。在一个实现方式中,这些元素可以是诱捕元素。光线可以与LOD标识符、光线微分、扩展因数相关联,或可以存在另一种用于决定有待展示的几何体所在的LOD的机制。有限可编程性电路可以选择一个或多个收集,每个收集与对应的有待将光线置入其内的加速元素相关联。例如,即使所测试的加速结构元素可以具有多个子加速结构元素,但该有限可编程电路仅选择那些子加速结构元素的一个子集。例如,可以选择与具体细节层次(LOD)相关联的加速结构元素。在一些示例中,光线可以在两个细节层次之间的过渡区内,并且可以将该光线添加到两个收集上,从而使得在多个细节层次下的几何体内遍历该光线。可以基于该有限可编程性电路的所做所为来对该光线的衰减进行调整,如降低源自单条原始光线的多条光线中的每条光线的重要性。举另一示例来讲,有限可编程性电路可以忽略将光线添加到任何收集上,即使与父元素相交。因此,有限可编程性电路可以影响或控制光线的后续测试。
系统501还可以提供结果返回路径511。在一些情况下,结果可能需要进一步的处理,该进一步的处理通过与生成引起该结果的任务的程序代码不同的程序代码执行。然而在一些情况下,该进一步的处理可以使用生成该任务的程序代码共用的数据的某一部分。取决于计算集群502的架构并且作为一个特定的示例,取决于从一个核心到另一个核心移动数据的效率(如跨不同的L2高速缓存507),结果返回路径可以被配置成用于将结果返回至使用L2高速缓存507的核心,该高速缓存已经存储了有待在该进一步的处理中使用的数据。在一些实现方式中,当生成该任务时,目的标识符可以与任务相关联,并且该目的标识符可以用来将结果引导回该任务的来源时。
图17描绘了一个或多个有限可编程性电路550的示例,这个或这些电路可以用来实现图16中所描绘的有限可编程性电路512。一个或多个电路550可以包括多个预定义数学函数552和多个可编程函数实现方式554。这些预定义数学函数552可以包括可以针对这些函数的一个或多个独立变量而被求值出不同值的函数集合。这种预定义数学函数可以包括根据提供到该有限可编程性电路的转换矩阵的3D空间的矩阵转换。在另一个示例中,可编程函数实现方式可以执行或多次重复一个预定义操作或操作集合。
电路如何可以是有限可编程性的示例包括:电路能够执行有限数量的指令、或者以另外的方式需要在固定时间段完成;程序避免循环或分支;或电路没有指令取出管线。在一个示例中,通过执行穿过代码段的多条路径并且然后选择结果或掩蔽不希望的结果来支持分支。当该有限可编程性电路不支持指令取出时,可以通过控制路径预加载指令集。如以上解释的,可以提供有限内存用于存储这些指令,并且可以将其设计成用于支持执行的最大等待时间或时间段(timeframe)。因此,有限可编程性电路可以结合测试单元工作,以便实现前进、迭代、逐步求精、平分、逐次逼近法、位移、向量图形、体积效应等。
图18描绘了在一个示例实现方式中的光线信息的总体流程。着色程序代码580和着色程序代码582每个可以发射光线;可以由光线数据结构内包含的数据定义这种光线。光线数据结构内的数据可以由着色程序代码模块产生,这些模块可以使用API 575提交该数据。例如,API 575可以具有接受用于光线的数据集的光线发射调用。收集跟踪函数584可以从这些光线数据结构接收数据并收集每条新光线以便用一条或多条其他光线开始遍历。发射光线与在收集中跟踪该光线之间可以存在各种中间步骤或函数元素,并且图18并非暗示直接链接。
可以发射或提交收集跟踪函数584产生的光线收集以开始遍历(例如,收集586和588)。相交测试函数590(在一个示例中,其可以通过图元测试单元和加速结构元素测试单元实现)可以接收这些收集用于遍历。对于其中有待遍历隐式几何体或对其进行相交测试的一个或多个实例而言,相交测试函数590可以激活隐式几何体着色程序函数592。
相交测试函数590和隐式几何体着色程序函数592各自都可以产生光线数据结构更新,来自几何体着色程序函数592的那些光线数据结构更新被编号为594-596,来自相交测试函数590的那些光线数据结构更新被编号为600-602。相交消岐函数606可以从这些来源(或其他来源,如果有的话)接收这些数据结构更新,并且产生一个输出,所述输出对在进一步的遍历(寻找最近的交点)过程中将在其中对光线进行追踪(608)的光线收集进行更新,和发起光线着色(609)(针对所标识的最近交点),这会引起发射有待遍历的进一步的光线。产生数据结构更新会是一种合适的实现方式,在该实现方式中,通过与相交测试590耦联的有限可编程性或固定功能元素实现该几何体着色程序函数或其至少某些部分。在这种实现方式中,可能不会针对该几何体着色程序函数调用代码的通用部分,或者代码的这种通用部分可以设置该有限可编程性单元,但不执行所有计算。图18描绘了替代性实现方式的各方面,在该实现方式中,可以通过在通用计算元素上执行的代码实现几何体着色程序函数592。在这种实现方式中,可以认为几何体着色程序函数592是着色程序代码580和582的“同级”,因为如代码580和582能做的一样,可以响应于光线相交而调用几何体着色程序函数592,并且这种几何体着色程序函数592的输出会受到使用API 575的光线发射调用的影响。因此,在光线完成相交测试后,可以使用与用于调用着色程序一样的语义来调用几何体着色程序函数592。然而,在相交测试的中间阶段过程中运行几何体着色程序函数592以便为对光线与隐式几何体进行测试产生结果。可以用通过API 575发射的新光线携带该测试的结果。因此,在对给定光线路径进行遍历的整个过程中,可以发射多条不同的光线,并且可以在整个路径上累积相交。一些实现方式可以使用该几何体着色程序函数592对与引起该着色程序调用的光线相关联的交点进行比较,并且最终确定新标识的交点是否距该光线路径的原点更近,并且仅保持较近的交点。在其他实现方式中,测试单元520可以将存储在本地化光线数据514内的交点与到达光线数据结构内标识的交点进行比较,并且保持较近的交点。在这种实现方式中,通过对来自几何体着色程序函数592和/或来自其自己的测试操作的交点进行比较,测试单元520为其本地化光线数据514内的最近交点保持当前的候选者。
相交消岐函数606采取给定光线路径的交点集合,并从该交点集合之间确定最近的交点。例如,当给定的光线路径已经遍历了诱捕元素的一个或多个实例时,对于该诱捕元素可以存在一个局部交点,同时还可以存在该光线与没有被诱捕元素包围的几何体的交点,在该光线的并行测试过程中会发现以上情况。这些交点可以存储在不同数据结构内,这些交点被收集用于比较目的。例如,多条单独实例化的光线可以最终用于完全对单条光线路径进行追踪,并且可以在该场景中并行地对那些光线进行追踪。在其他实现方式中,可以连续地对单条光线路径的多个部分进行追踪,当一条光线完成时(即,数据结构沿着光线路径定义光线,但很可能仅沿着有限的光线路径段),并且发出另一条光线,并且其携带着与相交测试的完成部分相关的信息。当每个段完成时,还可以保持跨光线路径的这些多个部分的引用计数。可以在固定功能硬件内或在可配置硬件内或在软件编程的硬件内实现关于图18披露的函数。
进一步关于诱捕元素,上述披露提供了与位移几何体相关的示例。可以提供诱捕元素用于处理多种情况。例如,可以通过使用与光线相关联的时间值来执行计算以测试与移动对象的相交在时刻序列下发生在哪儿,从而在诱捕元素内实现运动模糊。然后,可以混合这些结果以便确定运动模糊特征。尽管诱捕元素可以参考除了世界空间坐标系以外的坐标系,但诱捕元素也可以使用世界空间坐标。
图19描绘了吞吐量计算单元515的示例操作。将有待处理的任务705输入到计算单元515。举例来讲,每项任务可以包括收集密钥710、数据引用711和任选的优先化指示符712。在一些实现方式中,密钥710对将在多个计算过程之间共享的计算问题的输入或一部分进行标识。在一些实现方式中,数据引用711将有待处理的数据部分标识为数据元素的向量内的一个数据元素,其中由密钥710标识输入或计算问题。举例来讲,密钥710可以对加速结构元素进行标识,而数据引用711可以对有待进行与加速结构元素元素相交测试的光线进行标识。密钥710可以对有待在数据引用711参考的数据上或用其执行的程序或过程进行标识。举另一例来讲,密钥710可以对有待乘以数据引用711所标识的数据的系数进行标识。在该系统中可以使用其他对任务705进行描述的数据,或将该数据提供在数据结构内,但不是可以在吞吐量计算单元515内到处一起移动所有这些数据。例如,每项任务可以与有待基于该任务的结果在进一步的处理中使用的附加数据相关联,但该附加数据对该任务本身的执行而言是不必要的。
可以向任务收集器521(图16)提供这些任务705(或这些任务的说明性信息的多个部分,如密钥710、数据引用711、以及优先化712),此处当包含收集形成/更新模块715时示出了以上情况。可以用存储数据引用711的收集的高速缓存联合对应的密钥710来实现模块715。举例来讲,多个数据引用可以联合单个密钥一起存储。作为以上内容的总结,图19描绘了包括多个密钥720-723的收集存储器718,每个密钥具有与其相关联的数据引用箱。可以基于与每项任务相关联的优先化指示符712为每个收集产生优先级,每项任务的数据引用与该收集相关联。举例来讲,可以基于该该收集内的最高优先级任务给予每个收集一个优先级。同一项任务(例如,来自该任务的数据引用)可以存在于多个收集内。在光线追踪的背景下,每个收集可以与有待进行与光线集合相交测试的形状相关联,该光线集合被收集到与该形状相关联的收集内。在实现方式中,收集存储器718可以包括交叉高速缓存,其中密钥(例如720-723)是散列的或被掩蔽以便对该密钥的收集可以放置的候选位置进行标识。可以通过逐出收集来解决各收集之间的碰撞。
调度程序733使用收集存储器718内的数据来形成包括来自不同任务的数据的包,这些任务与来自收集存储器718的收集内的给定密钥相关联。调度程序733可以与收集形成/更新模块715进行通信以便协调收集的形成和从收集存储器718内的逐出。调度程序733可以将等待发射的包存储到一个或多个包队列(描绘了两个队列734和735)。当使用多个队列时,可以基于包的优先级对包进行分类。多个队列可以在非瞬态内存内实现为先进先出内存、链表、环形缓冲区等。可以分发来自队列734和735的包(例如,分发包719)。将分发包719描绘成包括包ID、包优先级、和密钥集合、以及多个相关联的数据引用。在一个示例中,包可以包括对有待执行的程序进行标识的单个密钥、有待在执行过程中使用的数据元素、或两者。
可以用多种方式实现优先化指示符712。指示符712可以仅仅是对任务发射时的相对顺序或时间进行指示的序列标识符(例如,递增数字)。在一种方法中,本序列标识符允许每项任务完成的最低服务质量。任务还可以具有可被解释为比最低服务质量水平更高或更低优先级的对应指示符712。即使普通情况提供了递增标识符,但任务不需要具有唯一标识符712。例如,可以通过对离当前任务间隙号(如关于图20解释的)更近的序列标识符进行复制来实现新发射任务的相对更高的优先级,并且根据本披露的实现方式可以在与之前发射的具有相同序列标识符的任务相同优先级下处理新发射任务。其他实现方式可以提供序列标识符和单独的优先化字段。
测试单元516/520(见图16)在对应的输入缓冲区740-742接收输入。可以选择这些输入用于基于测试单元中的哪些测试单元存储用于与那些输入相关的执行的本地化数据来在测试单元516/520进行分配。例如,通过特定数据引用711标识的光线的定义数据可以存储在测试单元516/520中的仅一个单元的本地内存中,并且该数据引用将与对有待关于该光线进行测试的形状或形状数据的引用一起分配到该测试单元。可以由这个或这些有限可编程性电路550实现任务状态反馈749。在对穿过加速结构的光线进行遍历的示例中,该反馈可以包括从多个子元素中选择下次应针对哪些子元素来收集光线。那会受到针对每个子元素为任务提供密钥710的影响。更普遍地,一个或多个电路550可以对程序的引用或地址、加速结构元素、或有待在后续处理中使用的或有待按照具体数据引用711的下一步骤处理的数据元素进行计算。
在一个示例中,代码模块可以在计算集群502上执行以便在测试单元516/520的本地内存中设置相关数据。然而,在一些实现方式中,基于到达任务定义中的信息,任务存储器维护模块716可以在那些本地内存中设置数据。例如,模块716可以从共享相干内存到测试单元516/520的本地内存安排直接内存转移请求。在意识到调度程序733已经对哪些包进行了排队的情况下可以对这些转移进行调度。尽管对测试单元716/720何时执行给定任务的准确定时可能不是确定性的,但可以提供小的高速缓存以缓冲从共享内存检索的数据,直到被使用并且然后被舍弃。
图20描绘了实施意识到服务质量的吞吐量计算的示例。如图19中所示,任务收集器可以产生有待在计算元素集合上执行的任务的收集。该任务收集器可以建立任务的分组,可以针对那些任务的至少某个部分而并行地执行那些任务。该任务收集器可以延迟开始执行具体任务,有利于整体增加任务完成的吞吐量。然而,如果仅考虑吞吐量而选择任务用于执行,则某些任务可能不能及时完成。在光线追踪的背景下,相对少量的光线会在3D场景的极少访问的部分中结束。因此,不能得到充足的光线用于为那些部分进行充分收集,并且所以如果执行调度启发法来选择充分收集以便使计算并行性最大化,则可以不将这些光线调度用于进一步的遍历。在一般计算场景中,代码模块集合、例程、或段可以具有比其他部分访问地频繁得多的部分。可以通过以下内容对这些代码元素的执行进行调度:收集对这种执行的请求和至少基于针对不同代码元素收集的对应请求数量来选择收集。并且在此,如果仅在吞吐量决定上完成调度,则一些请求会变弱。
在一个示例中,从任务发射点631开始,可以给予定义的任务(定义为625的定义任务)递增的标识符。可以针对吞吐量考虑来选择和处理任务,但此外,必须保持任务间隙点632。任务间隙点632对该标识符序列中的有待优先化用于完成的所有较低任务标识符所在的位置进行标识。如图20中所描绘的,可以已经完成一些比任务间隙点632更大的任务(例如,任务642)。当点632移动时,图19的调度程序733可以对包含该任务的收集存储器718内的收集进行标识(644),选择那些收集用于逐出,并且按照相应的包进行分发(644)(例如,在快包队列中,例如735)。可以获得(646)任务结果,并且基于那些结果作出如任务是否已经完成的决定。如果任务没有完成,则选择/更新(650)有待将该任务放在其内的进一步的收集中。如果完成了该任务,则可以针对其他任务继续(651)进行处理。
在根据图20的调度方法中,可以主要基于吞吐量执行调度,但保证在将给定任务向前推进之前,给定的任务不会拖延得比预先确定的时间(例如,处理器周期)更长。通过给予该任务比发给其他任务的序列标识符更低的序列标识符来完成给予任务更高的优先级,这致使该任务达到间隙点632比其将以另外的方式到达得更快。如以上解释的,还可以保持单独的优先级指示符。在动画的特定背景下,可以对帧序列进行渲染。任务标识符可以包括与帧数相关的数据(例如,飞行状态下的帧的绝对或相对数量),该帧数可以用于优先化。还可以通过这种技术对光线的级别进行优先化,如来自某一着色程序模块的光线、某种类型的光线等。实现方式可以为单向任务或多类任务、光线或多类光线提供等待时限。为了推广到计算任务,可以给予多类任务(如源自具体来源的任务、或引用具体数据集的任务)特定的等待时限。可以在通常对吞吐量进行优先化的实现方式中提供其他对光线或任务进行相对优先化的方式,但也可以避免超过计算的单个元素的等待时限。
任务间隙点632与任务发射点631之间的多项任务是可选的并且可以根据实时系统条件对其进行调制。例如,如果在还可以间歇地执行更多对时间要求严格的数字信号处理任务的处理系统上实施渲染,或当可用的内存当前受到限制时,则可以使任务间隙点632更加跟紧发射点631。
如果在固件和/或软件中实施,则功能可以被展示为计算机可读介质上的一个或多个指令或代码,在一个示例中,该介质是非瞬态的。示例包括用数据结构编码的计算机可读介质和用计算机程序编码的计算机可读介质。机器可读介质包括非瞬态机器可读介质。其他种类的介质包括传输介质。非瞬态介质可以是任何可以被机器访问的有形介质。举例来讲,但不具有限制性,这种计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储器、磁盘存储器、或其他磁存储装置、或任何可以用来以指令或数据结构的形式存储所希望的程序代码和可以被机器访问的其他介质。
提供各方面的特征的描述用来使本领域的技术人员能够制作和使用这些系统和装置以及执行所披露的方法。各种修改将对本领域的技术人员是明显的,在不背离本披露的精神和范围的情况下可以将本文件内描述的原理应用到其他方面。因此,本说明书并不旨在限制权利要求书。相反,将使权利要书求符合与在此披露的原理和新颖性特征一致的范围。
附图包括结构的相对安排和过程组件的排序,仅作为帮助理解本说明书。这些相对安排和编号不是暗示要特定限制权利要求书中的元素和步骤的排序或安排。在不背离本披露的范围的情况下可以顺序地互换过程限制,权利要求书并且装置加功能短语旨在涵盖被描述为执行所引用的功能、不仅包括结构等效物而且还包括等效结构。
尽管使用了各种示例和其他信息来解释所附权利要求书的范围内的多个方面,但不应基于这种示例中的具体特征或安排而暗示对权利要求书的限制,因为普通技术人员将能够使用这些示例导出很多种实现方式。进一步地,并且尽管以结构特征和/或方法步骤的示例专用的语言描述了某个主题,但应理解到,所附权利要求书中限定的主题不必局限于这些描述的特征或动作。例如,这种功能性可以分布在与除了在此标识的组件以外的组件、附加的组件或更少的组件中,或在其中执行。相反,公开了所述特征和步骤是作为所附权利要求书的范围内的系统和方法的组件的示例。
Claims (21)
1.一种对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,包括:
使光线进入包围在所述3D空间中的3D体积的壳体的曲面,所述壳体定义了隐式定义的几何体在所述壳体内的最大范围;
沿着所述光线的路径迭代地使所述光线当前的3D位置步进穿过所述壳体定义的所述3D体积;
对于每个当前3D位置,
将所述光线的所述当前的3D位置投射到所述壳体中包围的并且在所述3D空间中的显式定义的2D曲面上的当前位置上,
在所述3D空间中的所述显式定义的2D曲面上使用所述当前位置产生用于所述隐式定义的几何体的数据,以及
使用所产生的数据将所述光线表征为或者碰撞或者错过在所述3D空间中的所述当前3D位置处的所述隐式定义的几何体,其中所述光线表征被用于在视觉显示器上渲染所述场景。
2.根据权利要求1所述的对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,其中,产生用于所述隐式定义的几何体的数据包括:执行程序以针对在所述显式定义的2D曲面上的所述当前位置确定隐式定义的几何体的高度。
3.根据权利要求2所述的对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,其中,执行所述程序包括对接受与在所述显式定义的2D曲面上的所述当前位置相关的数据作为输入的函数进行求值。
4.根据权利要求1所述的对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,进一步包括:确定所述光线与围住所述壳体的3D包围体相交,以及响应地发起隐式几何体相交测试过程。
5.根据权利要求1所述的对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,进一步包括:根据一个细节层次指示对所述迭代步进中使用的步长进行设置。
6.根据权利要求1所述的对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,进一步包括:响应于指示所述壳体内的预定义体积部分中没有隐式几何体的数据,在所述预定义体积部分上进行步进。
7.根据权利要求1所述的对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,其中,所述壳体包括子体积集合,并且所述光线前进穿过这些子体积,直到标识出相交。
8.根据权利要求1所述的对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,进一步包括:确定所述光线与围住所述壳体的3D包围体相交,以及将进入所述3D包围体的所述光线的进入点投射到所述壳体的进入点。
9.根据权利要求1所述的对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,其中,通过互连图元的网格定义所述壳体,对这些图元进行与所述光线的相交测试。
10.根据权利要求1所述的对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,其中,所述壳体由针对与所述光线的交互而被测试的互连图元的网格定义,并且所述互连图元在对所述显式定义的曲面进行定义的源几何体集合内具有对应的相应图元,并且所述壳体包括由所述源几何体集合内的相应图元与互连图元的所述网格内的其图元连接起来的曲面定义的多个子体积。
11.根据权利要求10所述的对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,其中,所述将所述源几何体集合内的图元与所述网格内的图元连接起来的曲面是双线性面片。
12.根据权利要求1所述的对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,其中,所述壳体由针对与所述光线的交互而被测试的互连图元的网格定义,并且所述互连图元在源几何体集合内具有对应的相应图元,并且所述源几何体集合内的每个图元与对应的隐式几何体定义函数相关联。
13.根据权利要求1所述的 对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,进一步包括将用于所述光线的数据结构内的细节层次参数传递至为所述隐式定义的几何体产生数据的程序。
14.根据权利要求1所述的对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,其中,产生用于所述隐式定义的几何体的数据包括:使用在所述显式定义的2D曲面上的所述当前位置作为参数用于对确定所述当前3D位置处的隐式几何体的范围的表达式进行求值。
15.根据权利要求1所述的对光线进行与要被渲染的计算机图形场景的3D空间中的隐式曲面的相交测试的计算机实现的方法,进一步包括:对发现所述光线错过所述隐式定义的几何体所在的第一3D点和发现所述光线碰撞所述隐式定义的几何体所在的第二3D点进行标识,以及选择所述第一3D点和所述第二3D点其中之一作为子光线的原点,但要根据所述子光线的光线类型。
16.一种对用于基于光线追踪的对3D空间中的计算机图形场景进行渲染的隐式曲面进行展示的计算机实现的方法,包括:
使隐式曲面的描述与图元相关联,其中,能够针对所述图元的表面上的不同坐标对所述隐式曲面的描述进行求值;
使光线沿着在基于所述图元的范围定义的预定义3D体积内的方向前进;
针对所述光线在所述3D体积内的每个位置,
将所述光线的3D位置进行投射,以便确定所述位置在所述图元上的表面坐标;
针对曲面坐标,对所述隐式曲面的所述描述进行求值;以及
基于所述求值,指示所述光线在所述3D体积内的那个位置处是否碰撞或错过所述隐式曲面,其中所述光线指示被用于在视觉显示器上渲染所述场景。
17.根据权利要求16所述的对用于基于光线追踪的对3D空间中的计算机图形场景进行渲染的隐式曲面进行展示的计算机实现的方法,进一步包括收集多条光线并针对所述多条光线并行地对所述隐式曲面的描述进行求值。
18.一种对光线进行与隐式曲面的相交测试的系统,包括:
可编程执行单元集群,能够执行在执行过程中发射出有待在3D场景中进行相交测试的光线的着色程序代码;
多个测试单元,用于以构成位于所述3D场景内的对象的图元对一条或多条光线进行测试;
多个与对应的测试单元相关联的本地内存;以及
多条与对应的测试单元耦联的可编程电路,所述可编程电路能够被配置成用于使光线行进穿过所述3D场景中的体积并且对指示所述光线与所述体积内的隐式定义的曲面存在或不存在相交的函数进行求值,
其中对所述函数进行求值包括:
针对所述光线在3D体积内的每个位置,
将所述光线的3D位置进行投射,以便确定所述位置在所述图元上的表面坐标;
针对曲面坐标,对隐式曲面的描述进行求值;以及
基于所述求值,指示所述光线在所述3D体积内的那个位置处是否碰撞或错过所述隐式曲面,其中所述光线指示被用于在视觉显示器上渲染所述场景。
19.根据权利要求18所述的对光线进行与隐式曲面的相交测试的系统,其中,通过设置为所述光线的前进定义步长的参数,所述可编程电路为可编程的所述参数。
20.根据权利要求18所述的对光线进行与隐式曲面的相交测试的系统,其中,可以通过为有待求值的多项式函数设置或多个系数,所述可编程电路是可编程的。
21.根据权利要求18所述的对光线进行与隐式曲面的相交测试的系统,其中,所述可编程电路可配置成用于接收通过投射所述光线的当前3D位置而产生的2D坐标,并且针对所述2D坐标对所述函数进行求值。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910750240.6A CN110458933B (zh) | 2013-03-14 | 2014-03-11 | 追踪3d场景内的光线的方法、系统和计算机可读介质 |
CN201910750777.2A CN110458934B (zh) | 2013-03-14 | 2014-03-11 | 用隐式几何体进行3d图形渲染 |
CN201910749980.8A CN110490963B (zh) | 2013-03-14 | 2014-03-11 | 用隐式几何体进行3d图形渲染 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361783754P | 2013-03-14 | 2013-03-14 | |
US61/783,754 | 2013-03-14 |
Related Child Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910749980.8A Division CN110490963B (zh) | 2013-03-14 | 2014-03-11 | 用隐式几何体进行3d图形渲染 |
CN201910750240.6A Division CN110458933B (zh) | 2013-03-14 | 2014-03-11 | 追踪3d场景内的光线的方法、系统和计算机可读介质 |
CN201910750777.2A Division CN110458934B (zh) | 2013-03-14 | 2014-03-11 | 用隐式几何体进行3d图形渲染 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104050710A CN104050710A (zh) | 2014-09-17 |
CN104050710B true CN104050710B (zh) | 2019-08-23 |
Family
ID=50482721
Family Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910750777.2A Active CN110458934B (zh) | 2013-03-14 | 2014-03-11 | 用隐式几何体进行3d图形渲染 |
CN201410087919.9A Active CN104050710B (zh) | 2013-03-14 | 2014-03-11 | 用隐式几何体进行3d图形渲染的方法和系统 |
CN201910750240.6A Active CN110458933B (zh) | 2013-03-14 | 2014-03-11 | 追踪3d场景内的光线的方法、系统和计算机可读介质 |
CN201910749980.8A Active CN110490963B (zh) | 2013-03-14 | 2014-03-11 | 用隐式几何体进行3d图形渲染 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910750777.2A Active CN110458934B (zh) | 2013-03-14 | 2014-03-11 | 用隐式几何体进行3d图形渲染 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910750240.6A Active CN110458933B (zh) | 2013-03-14 | 2014-03-11 | 追踪3d场景内的光线的方法、系统和计算机可读介质 |
CN201910749980.8A Active CN110490963B (zh) | 2013-03-14 | 2014-03-11 | 用隐式几何体进行3d图形渲染 |
Country Status (3)
Country | Link |
---|---|
CN (4) | CN110458934B (zh) |
DE (1) | DE102014003463A1 (zh) |
GB (4) | GB2549217B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9984492B2 (en) * | 2015-04-02 | 2018-05-29 | Qualcomm Incorporated | Efficient hierarchy traversal in ray tracing applications |
EP3501010B1 (en) | 2016-08-19 | 2023-11-01 | Movidius Ltd. | Rendering operations using sparse volumetric data |
CN110580736B (zh) * | 2018-06-07 | 2023-10-20 | 中国科学院深圳先进技术研究院 | 一种板模式非均匀有理样条曲面的光线追踪方法及其系统 |
CN110599579B (zh) * | 2019-09-20 | 2023-02-24 | 山东师范大学 | 基于光子重采样的随机渐近光子映射图像渲染方法及系统 |
US11257280B1 (en) * | 2020-05-28 | 2022-02-22 | Facebook Technologies, Llc | Element-based switching of ray casting rules |
US11373358B2 (en) * | 2020-06-15 | 2022-06-28 | Nvidia Corporation | Ray tracing hardware acceleration for supporting motion blur and moving/deforming geometry |
CN111784843A (zh) * | 2020-07-01 | 2020-10-16 | 上海电气集团股份有限公司 | 管道网格模型的三维显示方法及系统 |
CN111967174A (zh) * | 2020-07-30 | 2020-11-20 | 北京应用物理与计算数学研究所 | 基于光线网格的激光动力学求解方法及系统 |
CN112206517B (zh) * | 2020-10-22 | 2024-03-12 | 网易(杭州)网络有限公司 | 一种渲染方法、装置、存储介质及计算机设备 |
CN113628318B (zh) * | 2021-07-20 | 2023-09-15 | 北京智源人工智能研究院 | 一种基于光线追踪的分布式实时神经元渲染方法和系统 |
CN114119849B (zh) * | 2022-01-24 | 2022-06-24 | 阿里巴巴(中国)有限公司 | 三维场景渲染方法、设备以及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7567248B1 (en) * | 2004-04-28 | 2009-07-28 | Mark William R | System and method for computing intersections between rays and surfaces |
CN101751690A (zh) * | 2008-12-05 | 2010-06-23 | 国际商业机器公司 | 使用环境遮挡的真实感成像的系统和方法 |
CN102947865A (zh) * | 2010-04-29 | 2013-02-27 | 柯斯提克绘图公司 | 用于光线跟踪中的图元相交的系统和方法 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8018457B2 (en) * | 2006-09-19 | 2011-09-13 | Caustic Graphics, Inc. | Ray tracing system architectures and methods |
US7830379B2 (en) * | 2006-09-19 | 2010-11-09 | Caustic Graphics, Inc. | Architectures for parallelized intersection testing and shading for ray-tracing rendering |
US8139060B2 (en) * | 2006-11-28 | 2012-03-20 | International Business Machines Corporation | Ray tracing image processing system |
US7773087B2 (en) * | 2007-04-19 | 2010-08-10 | International Business Machines Corporation | Dynamically configuring and selecting multiple ray tracing intersection methods |
CN104112291B (zh) * | 2008-03-21 | 2017-03-29 | 想象技术有限公司 | 用于光线追踪渲染的并行相交测试及着色的架构 |
US9349214B2 (en) * | 2008-08-20 | 2016-05-24 | Take-Two Interactive Software, Inc. | Systems and methods for reproduction of shadows from multiple incident light sources |
US8421801B2 (en) * | 2008-09-09 | 2013-04-16 | Caustic Graphics, Inc. | Ray tracing using ray-specific clipping |
KR101076807B1 (ko) * | 2009-05-29 | 2011-10-25 | 주식회사 실리콘아츠 | 레이 트레이싱 장치 및 방법 |
US8797322B2 (en) * | 2009-06-24 | 2014-08-05 | Imagination Technologies, Limited | Systems and methods of defining rays for ray tracing rendering |
CN101819684B (zh) * | 2010-04-12 | 2012-06-20 | 长春理工大学 | 一种动画电影虚拟三维场景的空间加速结构及其创建与更新方法 |
CN102243074B (zh) * | 2010-05-13 | 2014-06-18 | 中国科学院遥感应用研究所 | 基于光线追踪技术的航空遥感成像几何变形仿真方法 |
CN102346922B (zh) * | 2010-07-30 | 2013-09-18 | 中国科学院遥感应用研究所 | 航天遥感载荷成像几何畸变三维可视化仿真方法 |
US8339409B2 (en) * | 2011-02-16 | 2012-12-25 | Arm Limited | Tile-based graphics system and method of operation of such a system |
CN102169366B (zh) * | 2011-03-18 | 2012-11-07 | 汤牧天 | 三维立体空间中的多目标跟踪方法 |
FR2974213B1 (fr) * | 2011-04-12 | 2013-05-24 | Real Fusio France | Procede et systeme de rendu d'une scene virtuelle en trois dimensions |
CN102184517A (zh) * | 2011-05-06 | 2011-09-14 | 南京工程学院 | 动态场景中一种快速求交算法 |
-
2014
- 2014-02-25 GB GB1709391.5A patent/GB2549217B/en active Active
- 2014-02-25 GB GB1610625.4A patent/GB2541505B/en active Active
- 2014-02-25 GB GB1709390.7A patent/GB2549020B/en active Active
- 2014-02-25 GB GB1403242.9A patent/GB2513699B/en active Active
- 2014-03-11 CN CN201910750777.2A patent/CN110458934B/zh active Active
- 2014-03-11 CN CN201410087919.9A patent/CN104050710B/zh active Active
- 2014-03-11 CN CN201910750240.6A patent/CN110458933B/zh active Active
- 2014-03-11 DE DE102014003463.1A patent/DE102014003463A1/de active Pending
- 2014-03-11 CN CN201910749980.8A patent/CN110490963B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7567248B1 (en) * | 2004-04-28 | 2009-07-28 | Mark William R | System and method for computing intersections between rays and surfaces |
CN101751690A (zh) * | 2008-12-05 | 2010-06-23 | 国际商业机器公司 | 使用环境遮挡的真实感成像的系统和方法 |
CN102947865A (zh) * | 2010-04-29 | 2013-02-27 | 柯斯提克绘图公司 | 用于光线跟踪中的图元相交的系统和方法 |
Non-Patent Citations (2)
Title |
---|
Displacement Mapping on the GPU-State of the Art;László Szirmay-Kalos, Tamás Umenhoffer;《Computer Graphics Forum》;20080104;第27卷(第6期);第12页 |
Shell maps;Serban D. Porumbescu, Brian Budge, Louis Feng, Kenneth I. Joy;《ACM Transactions on Graphics (TOG)》;20050703;第24卷(第3期);第1-8页 |
Also Published As
Publication number | Publication date |
---|---|
GB2541505A (en) | 2017-02-22 |
CN110458934A (zh) | 2019-11-15 |
CN110458934B (zh) | 2023-12-19 |
GB201403242D0 (en) | 2014-04-09 |
GB2549217B (en) | 2017-11-22 |
GB2549217A (en) | 2017-10-11 |
CN110490963A (zh) | 2019-11-22 |
CN110490963B (zh) | 2023-06-30 |
GB2549020A (en) | 2017-10-04 |
CN104050710A (zh) | 2014-09-17 |
GB2513699B (en) | 2017-01-11 |
GB2549020B (en) | 2017-11-08 |
GB201709390D0 (en) | 2017-07-26 |
GB201709391D0 (en) | 2017-07-26 |
GB2513699A (en) | 2014-11-05 |
CN110458933A (zh) | 2019-11-15 |
GB201610625D0 (en) | 2016-08-03 |
GB2541505B (en) | 2017-08-02 |
CN110458933B (zh) | 2023-06-02 |
DE102014003463A1 (de) | 2014-09-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104050710B (zh) | 用隐式几何体进行3d图形渲染的方法和系统 | |
Delmerico et al. | A comparison of volumetric information gain metrics for active 3D object reconstruction | |
US20240221285A1 (en) | 3-d graphics rendering with implicit geometry | |
CN110827384B (zh) | 用于对数据路径调度的高速缓存请求进行高效分组的方法 | |
US7961934B2 (en) | Probable reconstruction of surfaces in occluded regions by computed symmetry | |
CN105957134B (zh) | 用于3-d场景加速结构创建和更新的方法和装置 | |
JP5271416B2 (ja) | 光線固有のクリッピングを使用したレイトレーシング | |
US8384723B2 (en) | Method and system of rendering parallel global illumination | |
US20100231583A1 (en) | Image processing apparatus, method and program | |
KR20100094532A (ko) | 광선 추적법을 이용하는 렌더링 시스템 및 방법 | |
US20160350960A1 (en) | Processor and method for accelerating ray casting | |
US11854141B2 (en) | Early release of resources in ray tracing hardware | |
KR20220154706A (ko) | 광선 추적 다중 샘플 앤티-에일리어싱 | |
Pan et al. | A global generalized maximum coverage-based solution to the non-model-based view planning problem for object reconstruction | |
Deng et al. | An automatic body length estimating method for Micropterus salmoides using local water surface stereo vision | |
Zhong et al. | Real-time semantic 3d dense occupancy mapping with efficient free space representations | |
CN109977628A (zh) | 一种在Unity中高效模拟激光雷达的方法 | |
Palla et al. | Fully Convolutional Denoising Autoencoder for 3D Scene Reconstruction from a single depth image | |
Zhang et al. | Optimization for 3D model-based multi-camera deployment | |
Wang et al. | AGR-Fcn: Adversarial generated region based on fully convolutional networks for single-and multiple-instance object detection | |
Höss et al. | coVoxSLAM: GPU Accelerated Globally Consistent Dense SLAM | |
Jia et al. | An Efficient Projection-Based Next-best-view Planning Framework for Reconstruction of Unknown Objects | |
Qadeer et al. | Multi-camera tracking of mechanically thrown objects for automated in-plant logistics by cognitive robots in Industry 4.0 | |
He | Neural Radiance Fields Methods and Improvement Approaches | |
Mobasher | A novel NeRF-based approach for extracting single objects and generating synthetic training data for grasp prediction models |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |