CN117726732A - 减少包围体层次结构中的假阳性光线遍历 - Google Patents

减少包围体层次结构中的假阳性光线遍历 Download PDF

Info

Publication number
CN117726732A
CN117726732A CN202310103242.2A CN202310103242A CN117726732A CN 117726732 A CN117726732 A CN 117726732A CN 202310103242 A CN202310103242 A CN 202310103242A CN 117726732 A CN117726732 A CN 117726732A
Authority
CN
China
Prior art keywords
ray
node
bounding
intersection
traversal
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
CN202310103242.2A
Other languages
English (en)
Inventor
G·穆特乐
J·伯吉斯
M·安德森
I·孔
E·比达尔夫
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.)
Nvidia Corp
Original Assignee
Nvidia Corp
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 Nvidia Corp filed Critical Nvidia Corp
Publication of CN117726732A publication Critical patent/CN117726732A/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/06Ray-tracing
    • 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/10Geometric effects
    • G06T15/30Clipping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/21Collision detection, intersection

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Geometry (AREA)
  • Image Generation (AREA)

Abstract

本公开涉及减少包围体层次结构中的假阳性光线遍历。公开了适用于光线追踪硬件加速器的技术,用于遍历分层加速结构并具有减少的假阳性光线相交。假阳性的减少可以基于以下一项或更多项:有选择地对包围体进行二次高精度相交测试,识别和剔除退化为点的包围体,以及参数化地剪裁超过某些经配置的距离阈值的光线。

Description

减少包围体层次结构中的假阳性光线遍历
相关申请的相交引用
本申请与以下共同转让的美国专利和专利申请相关,其全部内容通过引用合并到本文中:
·专利号为10,235,338、标题为“树数据结构的短堆栈遍历(Short StackTraversal of Tree Data Structures)”的美国专利;
·专利号为9,582,607、标题为“基于块的包围体层次结构(Block-BasedBounding Volume Hierarchy)”的美国专利;
·专利号为9,552,664、标题为“基于块的包围体层次结构的相对编码(RelativeEncoding for A Block-Based Bounding Volume Hierarchy)”的美国专利;
·专利号为9,569,559、标题为“光束追踪(Beam Tracing)”的美国专利;
·专利号为10,025,879、标题为“基于多个本地坐标系的树数据结构(Tree DataStructures Based on a Plurality of Local Coordinate Systems)”的美国专利;
·专利号为10,866,990、标题为“几何图形数据的基于块的无损压缩(Block-Based Lossless Compression of Geometric Data)”的美国专利;
·专利号为10,580,196标题为“用于在没有着色器干预的情况下,在相交处连续进行包围体层次结构遍历的方法(Method for Continued Bounding Volume HierarchyTraversal on Intersection Without Shader Intervention)”的美国专利;
·专利号为11,157,414、标题为“用于对数据路径调度的高速缓存请求进行有效分组的方法(Method for Efficient Grouping of Cache Requests for DatapathScheduling)”的美国专利;
·专利号为11,138,009、标题为“鲁棒的、高效的多处理器-协处理器接口(ARobust,Efficient Multiprocessor-Coprocessor Interface)”的美国专利;
·专利号为10,867,429、标题为“树遍历的查询特定行为修改(Query-SpecificBehavioral Modification of Tree Traversal)”的美国专利;
·专利号为10,825,230、标题为“保守的水密光线三角形相交(ConservativeWatertight Ray Triangle Intersection)”的美国专利;
·专利号为10,740,952、标题为“处理乱序的不透明和阿尔法光线/图元相交的方法(Method for Handling Out-of-Order Opaque and Alpha Ray/PrimitiveIntersections)”的美国专利;
·专利号为10,885,6982、标题为“用于硬件中树遍历机制的前进和可编程超时的方法(Method for Forward Progress and Programmable Timeouts of Tree TraversalMechanisms in Hardware)”的美国专利;
·专利申请号为16/898,98,标题为“遍历光线追踪加速结构的增强技术(Enhanced Techniques for Traversing Ray Tracing Acceleration Structures)”的美国专利申请。
·专利号为11,302,056,标题为“用于遍历光线追踪中使用的数据的技术(Techniques for Traversing Data Employed in Ray Tracing)”的美国专利;以及
·专利号为11,282,261,标题为“利用可替代世界变换的光线追踪硬件加速(RayTracing Hardware Acceleration with Alternative World Transforms)”的美国专利。
技术领域
本技术涉及计算机图形,尤其涉及光线追踪器。更具体地,该技术涉及包括光线追踪的计算机图形处理的硬件加速。本文的示例非限制性技术还涉及减少假阳性相交的光线相交测试。
背景技术
光线追踪是指将光线投射到场景中,并确定该光线是否以及在何处与场景的几何形状相交。此基本光线追踪可见性测试是以计算机图形学中各种渲染算法和技术为基础的基本图元。通常,光线追踪是一种渲染方法,其中光线用于确定场景中各种元素的可见性。光线追踪用于各种渲染算法中,算法包括例如路径追踪和梅特罗波利斯(Metropolis)光传输。在示例算法中,光线追踪通过对遍历场景的光传输进行建模来模拟光的物理现象以使用光线光学计算所有全局效应(包括例如来自发亮表面的反射)。在这样的光线追踪的用法中,当光线遍历三维场景从潜在的多个光源传播到视点时,可能会尝试追踪成百上千的光线中的每一个。通常,遍历场景相对于眼睛追踪此类光线,并针对场景中所有几何形状(geometry)的数据库进行测试。可以从光到眼睛向前追踪光,或者从眼睛到光反向追踪光,或者可以追踪光线以查看从虚拟相机开始并从眼睛开始的路径是否具有清晰的视线。该测试可以确定最近的相交(以便确定从眼睛可见的东西),也可以追踪从物体表面朝向光源的光线,以确定是否有任何干涉会阻止光到空间中该点的透射。因为光线与现实中的光的光线相似,所以它们提供了许多现实效果,而这些效果是使用许多其他3D图形技术无法实现的。由于来自场景中每个光源的每个照明光线在遍历场景中的每个对象时都经过评估,因此得到的图像看起来就像是在现实中拍摄的一样。因此,这些光线追踪方法长期以来一直在专业图形应用程序(例如设计和电影)中使用,其中在基于光栅的渲染方面它们占据了主导地位。
光线追踪可用于确定沿光线是否有任何东西可见(例如,测试几何图元上的阴影点与光源上的点之间的遮挡物),还可用于评估反射(例如,可能涉及执行遍历以确定沿视线的最近可见表面,以便在流处理器上运行的软件可以评估与所命中的事物相对应的材质着色功能——其反过来根据相交的对象的材料属性又可以向场景中发射一个或更多个附加光线)以确定沿光线返回向眼睛的光。在经典的递归光线追踪(Whitted风格)光线追踪中,光线是从视点通过像素网格射入场景的,但是其他路径遍历也是可能的。通常,对于每条光线,找到最接近的对象。然后,可以通过将光线从相交点发射到场景中的每个光源并发现它们之间是否存在任何对象来确定该相交点是被照明还是处于阴影中。不透明的对象会挡住光,而透明的对象会减弱光。可以从相交点产生其他光线。例如,如果相交表面是发亮的或镜面的,则在反射方向上产生光线。光线可以接受相交的第一个对象的颜色,然后对它的相交点进行阴影测试。递归地重复此反射过程,直到达到递归限制或后续反弹的潜在贡献降至阈值以下。光线也可以在透明固体对象的折射方向上生成,然后再次递归地进行评估。因此,光线追踪技术允许图形系统依据物理规律开发正确的反射和阴影,其并不经受扫描变换技术的限制和伪像。
光线追踪的主要挑战通常是速度。光线追踪要求图形系统为每一帧计算和分析照射在构成场景的每个表面上(并可能被其反射)的数百万条光光线中的每一条。过去,如此庞大的计算复杂性无法实时执行。
现代GPU 3D图形管线如此快地渲染着色的、纹理映射的表面的原因之一是它们有效地使用了相干性。在常规的扫描变换中,假定所有内容都可以通过公共图像平面中的公共窗口查看并向下投影到单个有利点。每个三角形或其他图元通过图形管线发送,并覆盖一定数量的像素。可以针对从该三角形渲染的所有像素共享所有相关计算。因此,对应于遍历窗口的相干视线的像素的矩形图块可以对应于在同一流处理器中以锁步方式运行的线程组。假定落在三角形的边之间的所有像素都是运行相同着色器并从相同纹理获取相邻纹理像素组的相同材质。相反,在光线追踪中,光线可能在公共点(光源或虚拟相机镜头)处开始或结束,但是当它们在场景中传播并与不同的材质相交时,它们会迅速发散。例如,每条光线执行搜索以找到最接近的对象。可以执行对结果的一些高速缓存和共享,但是由于每条光线都可能命中不同的对象,因此不存在GPU传统上已经与纹理映射的、着色的三角形结合利用的那种相干性(例如,共同的优势点、窗口和图像平面没有用于光线追踪)。与其他图形方法相比,这使光线追踪在计算上更具挑战性,因此在交互基础上执行起来要困难得多。
在2010年,NVIDIA利用NVIDIA GPU和其他高度并行架构的高度并行性来开发OptiXTM光线追踪引擎。参见Parker等人的“OptiX:通用光线追踪引擎(A General PurposeRay Tracing Engine)”(ACM图形学汇刊(ACM Transactions on Graphics),第29卷,第4期,第66条,2010年7月)。除了改进API(应用编程接口)之外,OptiXTM提供的一项进步是改进了用于找到光线与场景几何形状之间的交点的加速数据结构。这种加速数据结构通常是光线追踪遍历算法使用的有效地搜索可能与给定光线相交的图元的空间或对象层次结构。OptiXTM提供了应用程序可以从中选择的许多不同的加速结构类型。节点图中的每个加速结构可以是不同的类型,从而可以将高质量的静态结构与动态更新的结构组合在一起。
OptiX TM可编程光线追踪管线提供了显著的进步,但是其自己通常仍然无法在相对便宜的用于复杂3D场景的计算平台上对用户输入提供实时交互响应。自那时候起,NVIDIA已经在开发用于光线追踪的硬件加速功能。参见,例如,US 9582607、US 9569559、US20160070820、US 20160070767;以及以上引用的其他美国专利和专利申请。
大多数光线追踪器的基本任务是针对场景中的所有图元(在一个实施例中通常为三角形)测试光线,并报告最接近的命中(根据沿光线测量的距离)或仅报告所遇到的第一个(不一定是最接近的)命中,具体取决于用例。朴素贝叶斯算法将是O(n)暴力搜索。但是,由于任意复杂度的3D场景中有大量的图元,因此对于光线追踪器而言,测试场景中的每个几何图元与给定光线的相交通常是无效或不可行的。
通过预处理场景几何形状并预先构建合适的加速数据结构,然而,可以将平均情况的复杂度降低到O(log n)。加速数据结构(例如包围体层次结构或BVH)允许快速确定哪些包围体可以忽略,哪些包围体可以包含相交的几何图元,哪些相交的几何图元对于可视化很重要,而哪些则不重要。使用简单的体(例如盒子)包含更复杂的对象可提供计算和存储器效率,这有助于使光线追踪实时进行。
图1A-1C示出了在包括几何形状网格120的包围体110的背景下的光线追踪相交测试。图1A示出了在虚拟空间中包括包围体110和115的光线102。为了确定光线102是否与在网格120中的几何形状相交,可以直接针对光线102测试每个几何图元(例如三角形)。但是,为了加速该过程(因为对象可能包含成千上万的几何图元),首先针对包围体110和115测试光线102。如果光线102不与包围体相交,则它不与包围体内部的任何几何形状相交,并且出于该光线的目的,可以忽略该包围体内部的所有几何形状。因为在图1A中,光线102错过了包围体110,所以不需要针对相交测试该包围体内的网格120的任何几何形状。虽然包围体115被光线102相交,但是包围体115不包含任何几何形状,因此不需要进一步的测试。
另一方面,如果诸如图1B所示的光线104之类的光线与包含几何形状的包围体110相交,则该光线可能会或可能不会与包围体内部的几何形状相交,因此需要对几何形状本身执行进一步的测试以找到可能的相交。因为图1B和图1C中的光线104、106与包含几何形状的包围体110相交,所以需要执行进一步的测试以确定包围体内部是否有任何(和哪些)图元被相交。在图1B中,进一步测试与图元的相交将表明,即使光线104遍历包围体110,它也不会与包围体所包围的任何几何形状相交(或者,如上所述,包围体110可以进一步按体积细分,以便可以使用包围体相交测试来揭示光线不与任何几何形状相交,或更具体地,光线可以与哪些几何图元相交)。
图1C示出了光线与包围体110相交并且包含光线106与其相交的几何形状的情况。为了执行实时光线追踪,相交测试器测试相交的包围体110内的每个几何图元,以确定光线是否与该几何图元相交。
现代光线追踪器常使用的加速数据结构或加速结构(“AS”)是包围体层次结构(BVH),其包括嵌套的轴向对齐的包围盒。BVH的叶节点包含要测试相交的图元(例如三角形)。BVH通常由图形或树结构数据表示来表示。
BVH AS以将有助于帮助快速确定可能与每个特定光线相交的对象或场景的那个部分并快速拒绝光线不会与之相交的场景的大部分的方式来表示和/或引用对象或场景的3D模型。BVH数据结构表示具有包围体的场景或对象,并将包围体细分为越来越小的包围体,这些包围体终止于包含几何图元的叶节点。包围体是分层级的,这意味着最上级将其下级包围起来,该下级将其下级包围起来,依此类推。在每一级,对父包围体的子包围体的聚合可能会也可能不会完全填充由父包围体所定义的空间。在一个实施例中,叶节点可以潜在地与包围体层次结构中的其他叶节点重叠。在光线追踪中,当使用这样的AS时,对于n个对象来说,用于找到光线的最接近(或者对于阴影,任何)相交的搜索通常是O(log n)阶。例如,通常用于现代光线追踪加速数据结构的包围体层次结构(BVH)通常具有O(log n)的搜索行为。
NVIDIA的RTX平台包括光线追踪技术,该技术可为内容创作者和游戏开发者带来实时的电影品质的渲染。请参阅https://developer.nvidia.com/rtx/raytracing。在包括NVIDIA RT核心在内的许多或大多数示例实现方式中,图1A-1C中所示的AS的包围体使用轴对齐的包围盒(“AABB”),该包围盒可以紧凑地存储(它们可以只使用六个值来指定)并高效地测试光线相交。随着光线追踪器沿着BVH树向下追踪,其从搜索中去除非相交的包围盒,并将相交的包围盒细分为越来越小的体积,直到其遇到包围几何体的叶节点包围盒为止。针对AABB包围盒的光线包围体相交测试趋向于是便宜的。如果光线与叶节点包围盒相交,则使用光线-几何体相交测试对相交的叶节点包围盒所包围的底层几何体进行测试。如果光线未与叶节点包围体相交,则无需针对光线来测试叶节点包围体内的底层几何体。如图1A-1C所示,AABB的层次结构增加了单个AABB包围盒测试的剔除效果。这允许有效的遍历和快速减少感兴趣的几何体。
应用的BVH AS可包括许多包围盒。此外,包围盒和几何体之间的空间关系不需要(而且在一般情况下不会)是精确的。也就是说,包围盒必须完全包含它所包围的几何体(因此,可以依赖负的光线-包围盒相交结果,因为其意味着光线没有与包围体内的任何几何体相交),但是包围体可以(并且通常是)大于它所包含的几何体。因此,为了更高效地使用存储器空间和带宽,指定包围体的参数(例如,表示包围体的盒的顶点坐标)通常被存储为已经被四舍五入的低精度数字数据,以确保包围盒完全包含几何体。作为低精度数字数据存储的顶点坐标比高精度数据占用更少的存储/存储器空间,这使得BVH可以以更压缩的方式存储。例如,由以8位精度数字数据格式存储的特定数量的包围体的顶点坐标所占用的存储/存储器空间的数量可以只是由以32位高精度数字数据格式存储的相同数量的包围体所占用的空间的四分之一。
光线-盒相交需要确定光线是否命中了包围体的任何表面。光线具有无限小的宽度。当考虑具有距离包围体很远的原点的光线时,光线原点的距离可能会引入四舍五入的误差,其偶尔会导致如下的实例:由于在包围体的顶点坐标中使用了低精度的数字,交点测试结果为“未命中”,尽管同一包围体的高精度表示会导致“命中”。因为光线遍历的工作方式是将所有在相交测试中未命中的包围体从该光线的遍历中剔除,因此,不准确的未命中导致错误地剔除了由被剔除的包围体所涵盖的所有几何体。这种被错误剔除的几何体可能会导致在渲染的场景中显示出不希望出现的伪影(例如,在这种几何体上呈现出不正确的光线效果)。
为了避免或减少因光线原点较远而导致的这种几何体的错误剔除,一些NVIDIA光线追踪实现在相交测试之前对光线引入了“膨胀(bloat)”。通过确保如果光线能够命中三角形则它也必定命中保守地环绕该三角形的包围盒,可以改善遍历。但是,除了提供保守的包围盒之外,出于光线-包围盒相交测试的目的,这还可能给无限小的光线有限的横截面体积。膨胀的结果是,光线被认为更像是锥形的光束,其在光线原点开始是一个点,随着距离的增加而变宽。在图1D中,光线108被显示为锥形光束109,其从光线原点107开始并且周长随距离增长。光束——其(与光线不同)具有体积——对以较低精度定义的包围盒顶点的容忍度更高。如图1D所示,尽管光线108没有与包围体110相交,但构成“膨胀”光线的光束109确实与包围体110相交。在上面提到的NVIDIA光线追踪实现中,这种给光线引入膨胀的技术在大多数情况下成功地减少了假阳性的光线-盒相交,这补偿了由包围盒顶点压缩引入的误差。
然而,当使用这种光线膨胀时,随着光线原点离正在考虑的特定包围体越来越远,相交点处的光束宽度可能会增长到过大,并且除了被对应光线相交和/或接近被相交的包围体之外,还涵盖一些包围体。例如,如果图1D中的光束109更宽(即因为光线原点离包围体更远),它也可能与包围体130相交,尽管光线108显然没有与该包围体相交。在这种光束宽度过宽的情况下,所有被光束相交但本不应该被对应光线相交的包围体都是“假阳性相交”,因为这种不正确地相交的包围体不涵盖最终会被光线遍历的几何体。这种假阳性相交不会引入图像伪影,但在不必要的额外测试方面,其会导致极大的低效。
光线追踪通过自上至下到每个相交的包围体来遍历BVH的层次结构。当遍历到达BVH的叶节点时,通常以更高精度的数据进行光线-几何体测试,以准确地确定命中和未命中。因此,光线-几何体测试结果不会受到低精度包围盒表示的影响。然而,对包围体的假阳性命中可能会导致进行不必要的光线-包围体和光线-图元相交测试,从而不必要地增加处理成本和光线遍历时间。在距离光线原点很远的地方,光线膨胀可能会变得过大,以至于光线-包围盒相交测试无法剔除任何东西。例如,想一想地球表面的激光对准月球。由准直光构成的激光束在穿过地球大气层时将保持紧密的聚焦。但是,月球距离地球大约38.4万公里。由于光在这样的距离上分散,因此,当激光束到达月球时,它的直径将膨胀到7公里左右。如果同样的激光束对准火星(距地球约5500万公里),由此产生的激光束的膨胀可能涵盖整个星球。
在光线追踪器中的光线膨胀的上下文中,这种膨胀的结果是太多的相交包围体,在这些包围体下可能没有实际的几何相交。在光线-包围体相交和光线-图元相交中的过量遍历会导致性能下降过于急剧,以至于它们可以被称为“性能悬崖”。
以前的或替代的水密性保证的解决方案可能使用全精度的包围盒相交而不是有损的低精度相交测试。这种方法的优点是不需要那么多(或任何)保守的光线膨胀。然而,如上所述,更高精度的包围盒表示具有更高的存储和更高的数学数据路径区硬件成本的缺点,这可能会减慢光线遍历。
为了更高效地执行实时光线追踪,希望在某些场景(例如,在光线的原点远离包围体的场景)中减少假阳性的光线-盒相交。
附图说明
图1A-1C示出了示例简化的光线追踪测试,以确定光线是否通过包含几何形状的包围体,并且光线是否与包围体内的几何形状相交。
图1D示出了在相交测试之前向光线引入“膨胀”的示例场景。
图2示出了根据一些实施例的具有硬件加速的示例非限制光线追踪图形系统。
图3A示出了示例加速数据结构的一部分。
图3B示出了可以修改图3A的示例加速数据结构的方式,以增加存储器使用为代价支持某些可编程光线操作。
图4A是根据一些实施例的示例非限制光线追踪图形管线的流程图。
图4B是根据一些实施例的示例非限制基于硬件的光线追踪操作的流程图。
图5A和图5B示出了根据一些实施例的更详细的光线追踪管线。
图6示出了根据一些实施例的包括树遍历单元(TTU)的简化的示例非限制遍历协处理器。
图7示出了根据一些实施例的用于减少假阳性光线遍历的过程,该过程可以包括变换盒测试、点退化剔除和光线剪切技术中的一个或更多个。
图8示出了根据一些实施例的使用变换盒测试的技术来减少假阳性光线遍历的过程。
图9A和图9B示出了根据一些实施例的用于包括图8所示的变换盒测试技术中所使用的参数的节点数据结构。
图10A、图10B和图10C示出了根据一些实施例的可用于光线-包围体相交测试的平板测试(slab test)。
图11示出了根据一些实施例的通过使用点退化剔除技术来减少假阳性光线遍历的过程。
图12A和图12B示出了根据一些实施例的包括图11所示的点数字剔除技术中所使用的参数的数据结构。
图13示出了根据一些实施例的通过使用光线剔除技术来减少假阳性光线遍历的过程。
图14A概念性地示出了根据一些实施例的光线剪裁技术。
图14B示出了根据一些实施例的包括图13所示的光线剪裁技术中所使用的参数的数据结构。
图15示出了根据一些实施例的GPU的示例并行处理单元。
图16A示出了根据一些实施例的图15的并行处理单元内的示例通用处理集群(GPC),该通用处理集群中的每个流式多处理器被耦合到硬件光线追踪加速设备。
图16B示出了图15的并行处理单元的示例存储器分区单元。
图17示出了图16A的示例流式多处理器。
图18A是使用图15的并行处理单元(PPU)实现的处理系统的示例概念图。
图18B是示例性系统的框图,在该系统中可以实现前面各个实施例的各种架构和/或功能。
具体实施方式
NVIDIA RTX技术的已经高效的光线追踪能力,它提供了针对场景中包括对象几何形状以及底层对象几何形状的分层布置的包围盒对光线的硬件加速测试,也可以例如,通过减少假阳性光线包围体相交(如上所述,这可能导致大量不必要的BVH遍历和相交测试)来更多地提升该能力。
本公开的某些示例性实施例提供了一种光线追踪协处理器硬件设备,其实现了硬件加速的光线追踪,并减少了假阳性的光线包围体相交。尽管诸如以全精度浮点算术执行所有相交测试的技术可能有助于减少假阳性相交,但这种技术显著增加了存储包围体信息所需的存储空间以及处理全精度相交计算的电路所需的硬件区域。在被配置为每个周期执行许多(例如24个)光线包围体相交的协处理器硬件设备中,针对所有光线包围体相交实现全精度(例如32位浮点数学对8位浮点数学)所需的额外电路区域会被禁止。本公开描述了三种技术,它们可以结合使用或单独使用,通过这些技术,在不大幅增加电路区域的情况下减少了假阳性光线-包围体相交。
这三种技术中的第一种在此被称为“变换盒测试"(TBT)。在TBT技术中,光线追踪协处理器硬件设备被配置为,针对BVH的选定节点,在确定是否遍历该节点之前,使用顶点坐标的较高精度数字表示和配置为较高精度数学的电路执行光线-包围体相交测试,并使用配置为较低精度数学的电路执行光线-包围体相交测试,其中包围体的顶点坐标被定义在较低精度数字表示中。如果使用较高精度的相交测试结果是未命中,那么该节点就会被剔除而不被遍历。只有在更准确的相交测试结果是命中的情况下才可以进行遍历节点,其包括使用较低精度的相交测试。以这种方式,任何假阳性光线-包围体相交(如图1D所示的包围体110)都被消除了。例如,由此产生的假阳性光线-包围体相交的减少可以提供更高效的实时渲染。实际上,TBT技术提供了使用有损的、低精度的相交测试的组合,以获得更好的性能,并以全精度测试为后盾,避免过多的假阳性。
这三种技术中的第二种在此被称为“点退化剔除"(PDC)。在PDC技术中,如果与BVH的一个或更多个节点组相关联的包围体从光线原点的距离来看退化为一个点,则使BVH的一个或更多个节点组被剔除。这里使用的“点”是几何点,在现实的浮点精度限制下,它的体积为零。剔除评价为点的包围体可以减少假阳性相交,因为由退化为点的包围体所含钙的几何体也是点,而且这些点不会被光线相交。PDC技术提供了使用关于后续相交测试的信息,以剔除使用该特定的相交测试的可证明不与它们下面的任何东西相交的包围体相交。
这三种技术中的第三种在此被称为“光线剪裁"。光线剪裁是如下一个过程:当光线原点超出预配置的距离阈值时,参数化地将光线原点移近包围体,从而使膨胀不产生宽的光束。通过提供减少的膨胀,光线剪切技术产生了减少的假阳性相交。在一些实施例中,光线剪裁避免了将光线剪裁到实例包围盒的硬件加速协处理器和处理器之间的往返,从而减少光线-包围盒和光线-三角形图元相交测试的必要膨胀。
针对BVH的选定节点,除了那些以通常的较低精度数字格式定义的顶点坐标外,示例实施例提供将以较高的精度数字格式指定的顶点坐标。一些实施例通过与该遍历中的另一操作基本上并行地执行该测试来减少与所选节点的额外相交测试(高精度测试)相关联的处理时间开销。
上面提到的三种技术可以结合使用,或者单独使用,以减少假阳性光线遍历。可以利用本文所述的实施例来减少光线包围体相交和光线图元相交二者中的假阳性遍历,这些假阳性遍历导致了由于过量遍历而导致的上述性能急剧下降,同时也与相交测试所要求的水密性保证相一致。
示例系统框图
图2示出了用于使用包括如下所述构造的加速数据结构的场景或对象的三维(3D)数据生成图像的示例性实时光线交互追踪图形系统200。
系统200包括输入设备210、处理器220、图形处理单元(GPU)230、存储器240和显示器250。图2所示的系统可以采取任何形式的因素,包括但不限于个人电脑、智能手机或其他智能设备、视频游戏系统、可穿戴虚拟或增强现实系统、基于云的计算系统、车载图形系统、片上系统(SoC)等。
处理器220可以是多核中央处理单元(CPU),可操作地执行对输入设备210的实时交互响应的应用程序,其输出包括用于在显示器250上显示的图像。显示器250可以是任何种类的显示器,如固定式显示器、头戴式显示器,如显示眼镜或护目镜、其他类型的可穿戴显示器、手持式显示器、车载式显示器等。例如,处理器220可以基于从输入设备210(例如,操纵杆、惯性传感器、环境光传感器等)接收的输入来执行应用程序,并指示GPU 230生成显示应用程序进度的图像以在显示器250上显示。
基于在处理器220上执行应用程序,处理器可以为GPU 230发布指令以使用存储在存储器240中的3D数据生成图像。GPU 230包括用于加速实时生成图像的专门硬件。例如,由于GPU有能力比传统的软件驱动的CPU更快地执行重复和高度并行的专门计算任务(如多边形扫描转换),因此GPU 230能够实时处理数千或数百万的图形图元(多边形)的信息。例如,与可能有多个核心的处理器220(其带有可以同时处理少量软件线程的许多高速缓存存储器)不同的是,GPU 230可能包括数百或数千个并行运行的处理核心或“流式多处理器”(SM)232。
在一个示例性实施例中,GPU 230包括多个可称为“流式多处理器”(“SM”)232的可编程高性能处理器,以及包括图形图元引擎234和光栅引擎236的基于硬件的图形管线。GPU230的这些组件被配置为使用称为“扫描转换光栅化”的技术进行实时图像渲染,以在二维显示器250上显示三维场景。在光栅化中,三维场景的几何构件(例如,点、线、三角形、四边形、网格等)被映射到显示器的像素(通常通过帧缓冲区存储器)。
GPU 230将3D模型的几何构件(即多边形图元,如三角形)转换为2D图像的像素,并为每个像素指派初始颜色值。图形管线可以通过定义或调整像素的颜色值对图像的部分应用阴影、透明度、纹理和/或颜色效果。最终的像素值可以是抗锯齿化的、经过滤的并提供给显示器250进行显示。多年来,许多软件和硬件的进步已经在一个或更多个显示器250上通过使用光栅化技术以例如4096x 2160像素或更多的高显示器分辨率的实时图形所需的帧速率(即每秒30至60帧)改善了主观图像质量。
为了使GPU 230能够以高效的方式实时执行光线追踪,GPU提供耦合到一个或更多个SM 232的一个或更多个“TTU”238。TTU 238包括配置为执行(或加速)光线追踪算法中常用的操作的硬件组件。TTU 238的目标是加速光线追踪中使用的操作,以至于它将光线追踪的力量带到实时图形应用程序(例如游戏),实现高质量的阴影、反射和全局照明。由TTU238产生的结果可与在GPU 230中执行的其他图形相关操作一起使用或作为其替代。
更具体地说,SM 232和TTU 238可以合作将光线投射到3D模型中,并确定该光线是否以及在何处与模型的几何形状相交。直接模拟光线在虚拟环境或场景中穿行。光线相交的结果与表面纹理、观察方向和/或照明条件一起被用来确定像素颜色值。由SM 232与TTU238合作进行的光线追踪允许计算机生成的图像以与真实世界的照片或视频无法区分的方式捕捉阴影、反射和折射。由于光线追踪技术比光栅化技术的计算量更大,部分原因是需要追踪大量的光线,因此TTU 238能够在硬件上加速该过程中某些计算量更大的方面。
给定如上所述构建的BVH,TTU 238执行树状搜索,其中光线所访问的树中的每个节点对于每个下降的分支或叶都有一个包围体,并且光线只访问它所相交的对应包围体的下降分支或叶。这样,TTU 238显式地只测试少数图元的相交,即那些位于被光线相交的叶节点中的图元。在示例的非限制性实施例中,TTU 238同时加速了树形遍历(包括光线-体测试)和光线-图元测试。作为遍历的一部分,它还可以处理至少一级的实例转换,将光线从世界空间坐标转换为实例网格的坐标系。在示例性非限制性实施例中,TTU 238以MIMD方式完成所有这些,这意味着一旦在TTU内,光线便被独立处理。
在示例的非限制性实施例中,TTU 238作为SM(流式多处理器)232的服务者(协处理器)运行。换句话说,在示例性非限制性实施例中,TTU238不独立运行,而是遵循SM 232的命令比SM 232自己能执行的高效得多地执行某些计算密集型的光线追踪相关任务。在其他实施例或架构中,TTU 238可以具有更多或更少的自主性。
在所示的实施例中,TTU 238通过SM 232指令接收命令并将结果写回SM寄存器文件。对于许多用例(例如,具有最多两级实例化的不透明三角形),TTU 238可以在不与SM232进一步交互的情况下服务于光线追踪查询。更复杂的查询(例如,涉及经过阿尔法测试的三角形、三角形以外的图元或超过两级的实例化)可能需要多次往返(尽管这里的技术通过为TTU 238提供自主执行光线-包围-体相交测试的增强能力,减少了对某些种类的几何体的这种“往返”的需要,而不需要向调用的SM寻求帮助)。除了追踪光线外,TTU 238还能进行更一般的空间查询,其中AABB或两个AABB之间的挤压体代替了光线的位置。因此,虽然TTU 238特别适合于加速相关的任务,但它也可以用来执行光线追踪以外的任务。
因此,TTU 238自主地针对广泛的包围体执行每个光线的测试,并可以剔除任何不与该光线相交的包围体。从包围场景中一切事物的根节点开始,遍历协处理器针对较小的(可能是重叠的)子包围体测试每条光线,这些子包围体反过来包围BVH的后代分支。光线沿着光线命中的包围体的子节点指针到达其他节点,直到到达BVH的叶或终端节点(体)为止。
一旦TTU 238遍历加速数据结构以到达与光线相交并包含几何图元的终端或“叶”节点(可由一个或更多个包围体表示),它就会执行加速的光线-图元相交测试以确定光线是否与该图元相交(从而与该图元定义的对象表面相交)。光线-图元测试可以提供关于与光线相交的图元的额外信息,这些信息可以用来确定着色和可视化所需的表面的材料属性。通过加速数据结构的递归遍历使遍历协处理器能够发现与光线相交的所有对象图元,或者与光线相交的最接近(从视点的角度)的图元(在某些情况下是沿光线从视点可见的唯一图元)。例如,见Lefrancois等人,NVIDIA Vulkan光线追踪教程(NVIDIA Vulkan RayTracing Tutorial),2019年12月,https://developer.nvidia.com/rtx/raytracing/vkray。
在示例性实施例中,TTU 238被配置为通过在硬件中实现变换盒技术、点退化剔除技术和光线剪裁技术中的一个或更多个来减少加速数据结构的假阳性光线遍历。在示例性实施例中,加速数据结构包括节点和/或完成体(complets),这些节点和/或完成体由BVH的构建者通过利用在硬件中实现变换盒技术、点退化剔除技术和光线剪裁技术中的一个或更多个的信息编程。
构建包围体层次结构
如上所述,加速数据结构包括递归地封装越来越小的包围体细分的包围体的层次结构(包围体层次结构或BVH)。最大的体(volumetric)包围体可以称为“根节点”。这种包围体(“叶节点”)的层次结构的最小细分包含项。这些项可以是定义对象表面的图元(例如,诸如三角形之类的多边形)。或者,项(item)可能是包含世界的整个新级别(作为项存在)的球体,因为它没有被添加到BVH中(想象《黑衣人》中猫的魔力项圈,其内部包含整个微型星系)。如果该项包含图元,则遍历协处理器在到达相交的叶节点时,将光线针对与叶节点关联的图元测试光线,以确定哪些对象表面与光线相交以及沿光线哪些对象表面可见。
建立BVH可以在两个部分发生:静态和动态。在许多应用程序中,对复杂的场景进行预处理,并且基于场景的静态几何形状创建BVH。然后,使用包括动态创建和操纵的运动对象在内的交互式图形生成,BVH的另一部分(或其他链接的BVH)可以由驱动程序或在实时交互式图形系统上运行的其他软件实时构建(例如,在每个帧中)。BVH的构建不需要硬件加速(尽管在某些非限制性实施例中可以),但可以使用在流式多处理器(SM)(例如SM 232)和/或CPU(例如CPU 220)和/或其他开发系统(例如在应用程序开发期间)上运行的高度优化的软件例程来实现。
BVH加速结构构建的第一阶段获取参考几何形状的包围盒。这是通过针对对象中的每个几何图元执行包围盒程序来实现的,该包围盒程序为其输入图元返回保守的轴对齐的包围盒(AABB)。与例如定向包围盒(OBB)、包围球或其他方法相比,将包围盒与几何形状的相关坐标系的轴对齐可以为实时几何形状操作(例如相交测试和坐标变换)提供增加的效率。但是,本领域技术人员将理解本文所述的示例非限制性方法也可以应用于更昂贵的包围构造,例如OBB,包围球和其他包围体技术。
已经细分的包围体(其确实包括场景中的几何形状的至少一部分)可以进一步递归地细分-就像从苏斯博士戴帽子的猫回来了(The Cat In The Hat Comes Back)(1958)的帽子中出现的越来越少的猫系列中的每一个一样。递归细分的数量和配置将取决于要建模的3D对象的复杂性和配置以及其他因素,例如所需的分辨率、对象与视点的距离等。一个示例细分方案是所谓的8-ary细分或“八叉树”,其中每个体都细分为八个较小的统一大小的体,但是已知许多其他空间层次结构和细分方案,例如二叉树、四叉树、k-d树,二进制空间分区(BSP)树和包围体层次结构(BVH)树。参见,例如,USP 9582607。
在某个细分的级别下(对于BVH的不同部分可以是不同的级别),BVH的构建过程会遇到构成要建模的封装对象的几何形状。使用一棵树的类比,连续的体细分是树干、树枝、大树枝和小树枝,并且几何形状最终在树的最顶端(即叶)处显现出来。这样,例如本文的示例非限制性实施例的BVH构建过程在此阶段使用启发式或其他分析技术(在一些实施例中可包括人工智能和/或神经网络)执行优化,以认出那些叶节点,这些叶节点就其所包含的几何形状而言,呈现的拟合度很差。
这个过程继续进行,直到包含几何形状的所有包围体被充分细分以为每个包围体提供合理数量的几何图元。使用BVH的实时光线追踪器将通过比较每个图元的顶点的空间xyz坐标与光线的xyz坐标,以确定光线和该图元定义的表面是否占据相同的空间,从而确定光线-图元的相交。光线-图元相交测试可能需要大量计算,因为可能要测试许多三角形。在许多情况下,进一步按体细分可能会更有效,从而将任何“叶节点”中的图元数量限制为16个或更少。
将包括压缩的treelet(“complet”)的所得压缩树写出到存储器中的数据结构中,以供以后由图形处理硬件/软件在例如包括实时光线追踪的实时图形处理期间使用。
图3A和图3B示出了3D场景的递归细分的包围体(图3A)和光线追踪器可以访问并用于硬件加速操作的对应树数据结构(图3B)。树数据结构可以存储在存储器中,并且可以基于查询按需检索。
包围体的划分可以在层次树数据结构中表示,其中大包围体由树的父节点表示,而较小的包围体由包括父节点的树的子节点表示。最小包围体表示为树中的叶节点,并标识这些最小包围体中包含的一个或更多个几何图元。
树数据结构包括以层次结构布置的多个节点。树结构的根节点N1对应于包围所有图元O1-O8的包围体N1。根节点N1可以标识包围体N1的顶点和根节点的子节点。
在图3A中,将包围体N1细分为包围体N2和N3。图3B的树结构的子节点N2和N3对应于并表示图3A所示的包围体N2和N3。树数据结构中的子节点N2和N3标识空间中各个包围体N2和N3的顶点。在该特定示例中,包围体N2和N3中的每一个被进一步细分。包围体N2被细分为包含的包围体N4和N5。包围体N3被细分为包含的包围体N6和N7。包围体N7包括两个包围体N8和N9。包围体N8包括三角形O7和O8,包围体N9包括叶包围体N10和N11作为其子包围体。叶包围体N10包括图元范围(例如,三角形范围)O10,以及叶包围体N11包括项范围O9。图3B树结构的各个子节点N4、N5、N6、N8、N10和N11对应于并表示图3A在空间中的包围体N4、N5、N6、N8、N10和N11。
在此特定示例中图3B的树只有三到六层(level)深,因此包围体N4、N5、N6、N8、N10和N11构成“叶节点”-即树中没有子节点的节点。图3A示出了叶节点包围体N4、N6和N8,其各自包含场景中几何形状的两个三角形。例如,体细分N4包含三角形O1和O2;体细分N6包含试验(trial)O5和O6;体细分N8包含三角形O7和O8。图3A还示出了叶节点包围体N5包含单个圆柱体O3,如图所示,其对于虚线所示的AABB包围体N5没有提供良好的拟合。因此,在本文的示例非限制性实施例中,不是将较大的AABB包围体N5用于光线-包围体相交测试,而是TTU238针对多个较小的AABB包围体来测试光线,所述多个较小的AABB包围体被布置、定位、定尺寸并定向为更紧密地配合圆柱体O3。
图3B所示的树结构通过将这些叶节点N4、N5、N6和N7与场景几何形状的图元O1-O8中的适当一些相关联来表示它们。为了访问这种场景几何形状,TTU 238向下遍历图3B的树数据结构到叶节点。通常,树的不同部分可以并且将具有不同的深度,并且包含不同数量的图元。与不包含几何形状的体细分相关联的叶节点无需在树数据结构中明确表示(即,树被“修剪”)。
根据一些实施例,以N7为根的子树可以表示一组包围体或BVH,其在与对应于节点N1-N3的包围体不同的坐标空间中定义。当包围体N7与它的父包围体N3在不同的坐标空间中时,实例节点N7'提供遍历以N7为根的子树所必需的光线变换,实例节点N7'可以将树的其余部分连接到以N7为根的子树。实例节点N7'通过定义从N1-N3的坐标空间(例如,世界空间,世界坐标空间)到N7等的坐标空间(例如,对象空间,对象坐标空间)的变换,将与节点N1-N3相对应的包围体或BVH与和节点N7相对应的包围体或BVH连接起来。
在一些实施例中,以N1为根的树或子树与作为实例节点的父节点N1’相关联。实例节点N1’可以包含,或者可以与用于将光线从一个坐标空间转换到另一个坐标空间的变换相关联。在一些实施例中,N1’可以将来自世界空间的变换指定为替代世界空间,并且可以被称为“顶层实例节点”,例如在上面提到的专利US 11,282,261中描述的。
更详细地,请参见https://developer.nvidia.com/rtx/raytracing/dxr/DX12-Raytracing-tutorial-Part-1,它描述了顶层加速数据结构(TLAS)和底层加速数据结构(BLAS)以及使用它们创建BVH的方法。在本文的一个示例实现中,对于每个对象或对象集,可以在对象周围定义BLAS包围体-以及在运动几何形状的情况下,可以为不同的时刻定义多个包围体。该包围体在对象空间中,并且可以紧密适合对象。所产生的BLAS包含几何形状的完整定义,其以适合于有效地找到与该几何形状的光线相交方式进行组织。
在对象空间中定义BLAS。在创建BVH时,所有这些个体对象(每个对象都在其各自的对象空间中)和关联的子treelet使用变换放置到世界空间中。因此,BVH为每个BLAS子树指定从对象空间到世界空间的变换。着色器使用这些变换将每个对象平移/旋转/缩放到世界空间中的3D场景中。
同时,BVH定义了世界空间中的TLAS包围体。可以将TLAS视为加速数据结构之上的加速数据结构。因此,顶部的TLAS层实现包围体和光线-complet测试,并且在一个实施例中不需要变换,因为光线是在世界空间中指定的。然而,在本文的示例非限制性实施例中,还可以利用多个空间位置对运动中的对象的TLAS包围体进行时间编码,以允许硬件电路出于光线-包围体相交测试的目的计算出在光线的瞬间下的特定空间位置。
当光线追踪系统向下遍历树中的某个点并遇到实例节点时,模式从TLAS(在世界空间中)切换为BLAS(在对象空间中)。在一个实施例中,对象顶点在对象空间中被定义为BLAS包围体(其可以与TLAS包围体不同)。complet中的变换信息用于将光线从世界空间变换到对象空间,以针对BLAS子树进行测试。在一个实施例中,用于TLAS光线-包围体相交测试的相同插值硬件也可以用于BLAS光线-包围体相交测试,并且可以为顶点插值和在BLAS层上进行的光线-图元相交测试提供不同的(例如,更高精度的)硬件。
如上所述构造的加速结构可以通过在传统通用计算机上运行的基于软件的图形管线处理而有利地使用。然而,当前公开的非限制性实施例在基于硬件的图形处理单元的上下文中有利地实现上述技术,所述基于硬件的图形处理单元包括诸如一个或更多个流式多处理器(“SM”)的高性能处理器和一个或更多个遍历协处理器或“树遍历单元”(“TTU”)-3D图形处理管线的一个或一组流式多处理器SM的子单元。以下内容描述了诸如包括TTU238的系统的整体结构和操作,TTU 238可加速支持交互式光线追踪的某些过程,其包括光线-包围体相交测试、光线-图元相交测试以及用于实时光线追踪的光线“实例”变换以及其他应用程序。
示例光线追踪过程
图4A示出了可以由SM 232执行并由TTU 238加速的示例性光线追踪着色管线400。光线追踪着色管线400由SM 232调用光线生成410并向TTU 238发出对应的光线追踪请求来开始。光线追踪请求识别投射到场景中的单条光线,并要求TTU 238搜索具有SM 232也指定的加速数据结构的相交。TTU 238遍历(图4A的框420)加速数据结构以确定光线与体细分以及加速数据结构所表示的相关三角形之间的相交或潜在相交。潜在的相交可以通过在加速数据结构中找到与光线相交的包围体来识别。非相交包围体的后代不需要检查。
对于相交的包围体内的三角形,TTU 238光线-图元测试块620(参见图6)执行相交430过程以确定光线是否与图元相交。TTU 238将相交信息返回给SM 232,SM 232可以响应于相交确定执行“任何命中”着色操作530。例如,SM 232可以对相交的图元执行(或让其他硬件执行)纹理查找,并基于适当的纹理像素的值决定如何为可视化光线的像素着色。由于TTU 238可以按任意顺序返回与场景中的不同几何形状的多个相交点,因此SM 232会追踪此类结果。
图4B是流程图,其概述了TTU 238如上所述与SM 232协同执行的示例光线追踪操作。图4B的操作由TTU 238与和其交互的SM 232配合进行。因此,TTU 238可以从SM 232接收对光线的识别并且遍历状态,该遍历状态枚举该光线必须遍历的一个或更多个BVH中的一个或更多个节点。TTU 238确定光线与BVH数据结构的哪个包围体相交(“光线complet”测试472)。TTU 238随后还可以确定光线是否与相交的包围体中的一个或更多个图元相交以及相交了哪些三角形(“光线-图元测试”478)–或如果TTU自身执行起来很复杂,SM 232也可以用软件执行此测试。在示例非限制性实施例中,complet指定包围体层次结构的根或内部节点(即,体),包围盒层次结构具有为其他complet的子项或每个complet单一类型的叶节点。
首先,TTU 238检查光线的遍历状态。如果TTU 238为光线维持的堆叠是空的,则遍历完成。如果栈顶上有条目,则遍历协处理器238向存储子系统发出请求以检索该节点。然后,遍历协处理器238执行包围盒测试472以确定BVH数据结构的包围体是否与SM 232指定的特定光线相交(步骤472、474)。如果包围盒测试确定包围体不与光线相交(步骤474中为“否”),则无需执行任何进一步的可视化测试,并且TTU 238可以将此结果返回给发出请求的SM 232。这是因为,如果光线错过包围体(如图1A中的包围体110所示),则光线将错过被测试的包围体内的所有其他较小的包围体以及该包围体包含的任何图元。
如果由TTU 238执行的包围盒测试显示包围体与光线相交(在步骤474中为“是”),则TTU确定是否可以将包围体细分为较小的包围体(步骤476)。在一个示例实施例中,TTU238本身不必执行任何细分。而是,BVH中的每个节点都有一个或更多个子项(其中每个子项是BVH中的叶或分支)。对于每个子项,都有一个或更多个包围体和指向分支或叶节点的指针。当光线使用TTU 238处理节点时,它正在针对该节点的子项的包围体进行自我测试。光线只将那些其代表性包围体被命中的分支或叶的堆栈条目推入其堆栈。在示例实施例中,当光线获取节点时,它不会针对该节点的包围体进行测试,而是针对该节点的子节点的包围体进行测试。TTU238按由光线配置确定的顺序将其包围体被光线命中的节点推到光线的遍历堆栈上。例如,可以按节点在存储器中出现的顺序,或它们沿着光线的长度出现的顺序或其他某种顺序将节点推到遍历堆栈上。如果存在包围体的进一步细分(在步骤476中为“是”),则访问包围体的那些进一步细分,并且对每个所得到的细分的包围体执行包围盒测试,以确定哪些细分的包围体与光线相交而哪些不与光线相交。在该递归过程中,一些包围体可以通过测试474来消除,而其他包围体可以导致通过TTU 238递归地应用步骤472-476来对进一步的细分进行相交测试。
一旦TTU 238确定与光线相交的包围体是叶节点(步骤476中为“否”),则TTU 238和/或SM 232执行图元(例如,三角形)相交测试478以确定光线是否与相交的包围体中的图元相交,以及光线与哪些图元相交。因此,TTU 238执行相交的后代分支节点的深度优先遍历,直到到达叶节点为止。TTU 238处理叶节点。如果叶节点是图元范围,则TTU 238或SM232将它们相对于光线进行测试。如果叶节点是实例节点,则TTU 238或SM 232应用实例变换。如果叶节点是项范围,则TTU 238将它们返回给请求的SM232。在示例非限制性实施例中,SM 232可以命令TTU 238执行不同种类的光线-图元相交测试并根据来自应用程序(或在其上运行该应用程序的软件栈)的操作报告不同的结果,并由SM中继到TTU。例如,SM 232可以命令TTU 238报告相交测试揭示的最近的可见图元,或报告与光线相交的所有图元,而不管它们是否是最近的可见图元。SM 232可以将这些不同的结果用于不同类型的可视化。或者,一旦TTU 238已经报告了光线-complet测试结果,SM 232即可自行执行光线-图元相交测试。TTU 238处理完叶节点后,可能会有其他分支节点(较早推送到光线的堆栈上的分支节点)要测试。
示例TTU 238和SM 232的实例化管线实现
下面描述在示例实施例中的TTU 238如何执行实例化和相关联的变换。
图5A更详细的光线追踪管线流程图示出了代表性用例的组件之间的数据流和互动:针对包含几何图元的场景追踪光线,在硬件中处理实例变换。在一个非限制性实施例中,图5A的光线追踪管线基本上是软件定义的(在实施例中意味着它是由SM 232确定的),但广泛使用TTU 238的硬件加速。关键部件包括SM 232(和计算管线的其余部分)、TTU 238(作为SM的协处理器)以及L1高速缓存和下游存储器系统,TTU从其中获取BVH和三角形数据。
图5A中所示的管线显示,包围体层次结构的创建502可以由开发系统提前执行。它还显示光线创建和分布504由SM 232或示例实施例中的其他软件执行或控制,作为着色(可以包括照明和纹理化)。该示例管线包括“顶层”BVH树遍历506、光线变换514、“底层”BVH树遍历518和光线/三角形(或其他图元)相交526,它们中的每一个由TTU 238执行。这些不必按所示顺序执行,因为TTU 238和SM 232之间的信号交换确定了TTU 238做什么和以什么顺序。
SM 232一次向TTU 238呈现一条或更多条光线。SM 232呈现给TTU238用于遍历的每个光线可以包括光线的几何参数、遍历状态以及光线的光线标志、模式标志和光线操作信息。在示例性实施例中,光线操作(RayOp)提供或包括辅助算术和/或逻辑测试,以抑制、覆盖和/或允许存储相交。(见美国专利号10,867,429)。遍历堆栈也可由SM 232用来将某些状态信息传达给TTU 238,以便在遍历中使用。新的光线查询可以用显式的遍历堆栈开始。然而,对于一些查询,可以提供少量的堆栈初始化器,用于开始给定类型的新查询,例如:从完成体开始的遍历;光线与三角形范围的相交;光线与一定范围的三角形的相交,然后是从完成体开始的遍历;从三角形缓冲区获取给定三角形的顶点,等等。在一些实施例中,使用堆栈初始化器而不是显式堆栈初始化可以提高性能,因为堆栈初始化器需要较少的流处理器寄存器,并减少需要从流处理器传输到TTU的参数数量。
在图5A所示的例子中,TTU 238执行顶层树的遍历506和底层树的遍历518。在示例性实施例中,BVH的两级遍历使能对动态场景变化的快速光线追踪响应。
在一些实施例中,在进入顶层树遍历时,或在顶层树遍历中,在BVH中遇到了指定顶层变换的可选实例节点505。实例节点505如果存在,则向TTU指示,根植于实例节点505的子树与另一个世界空间坐标系对齐,从世界空间到改坐标系的变换被定义在实例节点505中。在美国专利第11,282,261号中描述了顶层实例节点及其使用,该专利题为“利用替代世界空间变换的光线追踪硬件加速(Ray Tracing Hardware Acceleration withAlternative World Space Transforms)”,该专利通过引用被全部合并于此。
加速结构的顶层(TLAS)包含世界空间坐标的几何体,加速结构的底层(BLAS)包含对象空间坐标的几何体。TTU为TLAS遍历和BLAS遍历单独地维护光线状态和堆栈状态,因为它们实际上是独立的遍历。
如上所述,SM在启动新的光线查询或重新启动光线查询时,通过将堆栈初始化完成体包括在传输到TTU的光线查询中来通知TTU在BVH中的位置,以便开始光线遍历。堆栈初始化完成体包括指向要被遍历的子树的根的指针。
光线变换514通过将可在第一坐标空间(例如世界空间)的顶层遍历中使用的光线变换到底层遍历的BVH的不同坐标空间(例如对象空间)来提供从顶层树遍历506到底层树遍历518的适当过渡。使用两级遍历的BVH遍历技术的示例在以前的文献中有所描述,例如,见Woop,“用于动态场景的光线追踪硬件架构(A Ray Tracing Hardware Architecturefor Dynamic Scenes)”,Universitat des Saarlandes,2004,但本实施例不限于此。
示例顶层树遍历
由TTU 238进行的顶层树遍历506从L1高速缓存512接收完成体,并向光线变换514提供实例以进行变换,或者向SM 232提供未命中/结束输出513以由SM进行最接近命中着色器515处理(该块也可以基于非叶节点/无命中条件递归地操作)。在顶层树形遍历506中,下一个完成体取回步骤508从存储器和/或高速缓存层次结构中取回要在步骤510中测试光线相交的下一个完成体,并且在取回的完成体中的包围体上进行光线-包围体相交测试。
如上所述,实例节点将一个BVH连接到处于不同的坐标系中的另一个BVH。当相交的包围体的子节点是实例节点时,光线变换514能够从L1高速缓存516检索适当的变换矩阵。TTU 238使用适当的变换矩阵,将光线变换到子BVH的坐标系。已经通过引用并入的美国专利第10,025.879号描述了将树中的第一组节点连接到第二组节点的变换节点,其中第一组节点和第二组节点处于不同的坐标系中。示例性实施例中的实例节点可以类似于美国专利第10,025.879号中的变换节点。在图5B所示的TTU 238的另一种非实例化模式中,TTU不执行“底层”树遍历518,并且非实例化树BVH遍历通过例如只使用一个堆栈来由块508、510执行。TTU 238可以基于其从BVH和/或查询类型中读到的内容,在图5A的实例化操作和图5B的非实例化操作之间切换。例如,特定的查询类型可以限制TTU只使用非实例化操作。在这样的查询中,任何相交的实例节点将被返回给SM。
在一些非限制性的实施例中,在步骤510中的光线-包围体相交测试是在取回下一个完成体(complet)之前对取回的完成体中的每个包围体进行的。其他实施例可以使用其他技术,例如,以深度优先的方式遍历顶层遍历BVH。已经通过引用并入的美国专利第9,582,607号描述了可用于示例性实施例的一个或更多个完成体结构和内容。美国专利第9,582,607号还描述了完成体的示例性遍历。
当确定包围体将与光线相交时,追踪相交的包围体的子包围体(或对它们的引用),以用于与光线相交的后续测试并用于遍历。在示例性实施例中,一个或更多个堆栈数据结构被用于追踪将被随后测试与光线相交的子包围体。在一些示例性实施例中,可使用小尺寸的遍历堆栈来追踪要通过顶层树遍历506的操作来遍历的完成体,以及要测试相交的图元,而较大的本地堆栈数据结构可用于追踪底层树遍历518中的遍历状态。
示例底层树遍历
在底层树遍历518中,下一个完成体取回步骤522从存储器和/或高速缓存层次结构520中取回要在步骤524中测试光线相交的下一个完成体,并且对取回的完成体中的包围体进行光线包围体相交测试。如上所述,底层树遍历可以包括具有与上层树遍历的包围体不同的坐标系中的包围体的完成体。底层树形遍历还从L1高速缓存中接收完成体,并且可以根据非叶/未命中条件在自身内部递归或迭代操作,也可以根据未命中/结束检测与顶层树遍历506一起操作。光线与下层BVH中的包围体的相交可以通过变换为检索的下层完成体的坐标系的光线来确定。然后将在下层树遍历中发现的与光线相交的叶包围体提供给光线/三角形相交526。
底层树遍历518的叶输出被提供给光线/三角形相交526(其具有L0高速缓存访问以及通过L1高速缓存528检索三角形的能力)。L0完成体和三角形高速缓存可以是TTU 238内部的小型只读高速缓存。当到达某些叶节点而不遍历实例化的BVH时,光线/三角形相交526也可以从顶层树遍历506接收叶输出。
在图元范围内的所有图元被处理之后,相交点管理单元检查结果队列的状态和将发送至堆栈管理单元和/或光线管理单元的工艺包,以更新光线的属性和遍历状态,设置光线的下一个遍历步骤,和/或将光线返回到SM232(如果必要的话)。如果结果队列包含在处理图元范围期间发现的不透明或阿尔法相交,则相交管理单元将结果队列中最近的不透明相交的参数长度(t)用信号发给光线管理单元,以记录为光线的tmax,从而缩短光线。为了更新遍历状态以设置光线的下一个遍历步骤,相交管理单元向堆栈管理单元发出信号,其指示结果队列中是否存在来自图元范围的不透明相交、结果队列中是否存在一个或更多个阿尔法相交,结果队列是否已满、是否在图元范围内发现了未返回给SM且不存在于结果队列中的额外的阿尔法相交,以及在SM消耗了结果队列的内容之后,要测试的光线的图元范围内的下一个阿尔法图元的索引(在结果队列中来自当前图元范围的具有最高存储顺序的阿尔法图元之后的范围的下一个图元的索引)。
当堆栈管理单元740收到来自相交管理单元722的分组时,堆栈管理单元740检查该分组以确定完成遍历步骤并开始下一个步骤所需的下一个动作。如果来自相交管理单元722的分组指示在图元范围内发现了不透明的相交,并且光线模式位指示一旦发现任何相交,光线将完成遍历,则堆栈管理单元740将光线及其结果队列返回到SM,其遍历状态指示遍历已经完成(设置了完成标志和/或空顶层和底层堆栈)。如果来自相交管理单元722的分组指示在结果队列中存在不透明或阿尔法相交,并且在未存在于结果队列中的图元范围中还有剩余的阿尔法相交,这些相交是光线在处理还没有被返回到SM的图元范围期间遇到的,堆栈管理单元740将光线和结果队列返回给SM,其遍历状态被修改为设置剔除不透明位,以防止进一步处理图元范围中的不透明图元,图元范围起始索引被推进到来自图元范围的最高alpha图元相交返回到光线的结果队列中的SM之后的第一个alpha图元。如果来自相交管理单元722的分组指示在光线处理图元范围时没有发现不透明或阿尔法相交,则堆栈管理单元740将堆栈顶部条目(对应于完成的图元范围)从活动遍历堆栈中弹出。如果来自堆栈管理单元740的分组指示或者在结果队列中有不透明的相交,并且光线模式位没有指示一旦发现任何相交则光线就要完成遍历,和/或在结果队列中有阿尔法相交,但在结果队列中不存在的图元范围中没有发现剩余的阿尔法相交,而这些相交尚未返回SM,堆栈管理单元740从活动的遍历堆栈中弹出堆栈顶部条目(对应于已完成的图元范围),并修改结果队列的内容,以指示结果队列中存在的所有相交都来自处理已完成的图元范围。
如果活动堆栈是底层堆栈,并且底层堆栈为空,则堆栈管理单元740将活动堆栈设置为顶层堆栈。如果顶层堆栈是活动堆栈,并且活动堆栈是空的,那么堆栈管理单元740将光线及其结果队列返回到SM,其遍历状态指示遍历已经完成(设置了完成标志和/或空的顶层和底层堆栈)。如果活动堆栈包含一个或更多个堆栈条目,则堆栈管理单元740检查顶层堆栈条目并开始下一个遍历步骤。测试图元和/或图元范围与光线的相交并将结果返回给SM 232,在题为“保守的水密光线三角形相交(Conservative Watertight Ray TriangleIntersection)”的美国专利第10,825,230号和题为“处理失序的不透明和阿尔法光线/图元相交的方法(Method for Handling Out-of-Order Opaque and Alpha Ray/PrimitiveIntersections)”的美国专利第10,740,952号中有描述,在此通过引用全部合并于此。
示例非限制性TTU 238硬件实现
图6示出了TTU 238的示例简化框图,该TTU 238包括配置为执行如上所述的加速遍历操作的硬件。在一些实施例中,TTU 238可以使用采用支持的叶节点图元的相交测试的短堆栈遍历以及阿尔法图元和不支持的叶节点图元(项)的中间遍历返回,执行包围体层次结构的深度优先遍历。TTU 238包括确定光线是否与包围体相交的专用硬件,以及确定光线是否与树数据结构的图元相交的专用硬件。
更详细地,TTU 238包括相交管理块622、光线管理块630和堆栈管理块640。这些块中的每一个(以及图6中的所有其他块)可以构成由逻辑门、寄存器、硬件嵌入式查找表或其他组合逻辑等实现的专用硬件。
光线管理块630负责管理关于由SM 232向光线管理块指定的光线的信息并执行与之相关的操作。堆栈管理块640与遍历逻辑612一起工作以管理关于BVH加速数据结构的遍历的信息并执行与之有关的操作。遍历逻辑612由光线-complet测试块610的结果指导,该光线-complet测试块610根据需要使用实例变换来测试光线管理块630指示的光线与BVH表示的体细分之间的相交。光线-complet测试块610经由作为TTU 238的一部分的L0 complet高速缓存652从存储器240检索关于BVH的附加信息。光线-complet测试块610的结果通知遍历逻辑612是否需要进一步的递归遍历。堆栈管理块640维护堆栈,以在遍历逻辑612从BVH的一层遍历到另一层时追踪状态信息,其中随着遍历逻辑遍历到更深的BVH,堆栈管理块640将项推入堆栈,以及随着遍历逻辑在BVH中向上遍历,将项从堆栈中弹出。堆栈管理块640能够在SM请求的任何时间向请求SM 232提供状态信息(例如,中间或最终结果)。
相交管理块622使用所需的实例变换来管理关于光线和图元之间的交点的信息并执行与之相关的操作。光线-图元测试块620根据需要通过作为TTU 238一部分的L0图元高速缓存654从存储器240中检索关于几何形状的信息。向相交管理块622通知光线-图元测试和变换块620执行的相交测试的结果。因此,光线-图元测试和变换块620将相交结果提供给相交管理块622,相交管理块622向请求SM 232报告几何形状命中和相交。
堆栈管理单元640检查遍历状态以确定需要检索什么类型的数据以及哪个数据路径(complet或图元)将消耗它。在包括一个或更多个光线-complet测试块610和一个或更多个遍历逻辑块612的TTU 238的光线-complet测试路径中确定包围体的相交。complet指定包围体的根节点或内部节点。因此,complet可以为光线-complet测试定义一个或更多个包围体。在本文的示例实施例中,complet可以定义多个“子”包围体(无论它们是否表示叶节点),它们不一定每个都具有后代,但是TTU将并行测试其与光线-包围体的相交,以确定是否需要测试与多个包围体关联的几何图元的相交。
TTU 238的光线-complet测试路径识别光线与哪些包围体相交。与光线相交的包围体需要进一步处理,以确定与相交的包围体关联的图元是否相交。在包括一个或更多个光线-图元测试和变换块6120以及一个或更多个相交管理块622的光线-图元测试路径中确定图元的相交。
TTU 238从一个或更多个SM 232接收执行树遍历操作的查询。该查询可以请求光线是否与BVH数据结构中的包围体和/或图元相交。该查询可以识别光线(例如,光线的原点、方向和长度)以及BVH数据结构和遍历状态(短堆栈),其包括引用该光线将要访问的一个或更多个包围体层次结构中的节点的一个或更多个条目。该查询还可以包括关于在遍历期间光线如何处理特定类型的相交的信息。可以将光线信息存储在光线管理块230中。可以基于光线-图元测试的结果来更新所存储的光线信息(例如,光线长度)。
TTU 238可以请求从TTU 238外部的存储器中检索在查询中标识的BVH数据结构。BVH数据结构的检索出的部分可以高速缓存在TTU内238的零级(L0)高速缓存650中,因此该信息可用于其他时间相关的TTU操作,从而减少了存储器640的访问。光线-complet测试所需的BVH数据结构的部分可被存储在L0complet高速缓存652中,并且光线-图元测试所需的BVH数据结构的部分可被存储在L0图元高速缓存654中。
在complet高速缓存652中获得请求的遍历步骤所需的complet信息之后,光线-complet测试块610确定与光线相交的包围体。在执行此测试时,可以将光线从包围体层次结构的坐标空间变换到相对于complet定义的坐标空间。针对与complet的子节点关联的包围盒测试光线。在示例非限制性实施例中,未针对complet自己的包围盒测试光线,因为(1)TTU238先前在测试引用此complet的父包围盒子项时针对相似的包围盒测试了光线,并且(2)complet包围盒的目的是定义一局部坐标系,在该局部坐标系中子包围盒可以以压缩形式表示。如果光线与任何子包围盒相交,则将结果推入遍历逻辑以确定将对应的子指针推入遍历堆栈的顺序(进一步的测试可能需要遍历逻辑612向下遍历到BVH的下一层)。递归地重复这些步骤,直到遇到BVH的相交叶节点为止。
光线-complet测试块610可以向遍历逻辑612提供光线-complet相交。使用光线-complet测试的结果,遍历逻辑612创建要被推送到堆栈管理块640的堆栈条目。堆栈条目可以指示内部节点(即,包括一个或更多个子节点的节点),需要由光线-complet测试块610针对光线相交进行进一步测试的内部节点和/或在相交的叶节点中标识的三角形,需要由光线-图元测试和变换块620针对光线相交测试该相交的叶节点。光线-complet测试块610可以在堆栈中标识的内部节点上重复遍历,以确定与光线相交的BVH中的所有叶节点。在示例非限制性实施例中,光线-complet测试块610执行的精确测试将由模式位、光线操作(参见下文)和命中剔除来确定,并且TTU 238可以将中间以及最终结果返回至SM 232。
光线-图元相交测试
再次参考图6,TTU 238还具有加速相交测试的能力,该相交测试确定光线是否与特定几何形状或图元相交。对于某些情况,几何形状足够复杂(例如,与例如顶点相比,由曲线或其他抽象构造所定义),以致在某些实施例中,TTU 238可能无法帮助进行光线-图元相交测试。在这种情况下,TTU 238只是将光线-complet相交测试结果报告给SM 232,而SM232本身会执行光线-图元相交测试。在其他情况下(例如,三角形),TTU 238自身可以执行光线-三角形相交测试,从而进一步提高了整个光线追踪过程的性能。为了完整性,下面描述TTU 238如何执行或加速光线-图元相交测试。
如上所解释的,所找到的与光线相交的叶节点识别(包围)可能与光线相交或不与光线相交的图元。TTU 238的一种选择是向SM 232提供例如在相交的叶节点中识别出的一系列几何形状以进行进一步处理。例如,SM 232自身可以基于TTU 238作为TTU遍历BVH的结果而提供的信息,确定所识别出的图元是否与光线相交。为了从SM 232卸载该处理并从而使用TTU 238的硬件对其进行加速,堆栈管理(SMU)块640可以发出对光线-图元的请求,并且变换(RTT)块620对TTU的光线-complet测试(RCT)块610识别出的相交的叶节点内的图元执行光线-图元测试。在一些实施例中,SM 732可以发出对光线-图元测试的请求以测试特定范围的图元至RTT块620,而与如何识别该几何形状范围无关。
在确保请求的光线-图元测试所需的图元数据在图元高速缓存654中可用之后,RTT块620可使用存储在光线管理(RMU)块630中的光线信息确定与光线相交的图元。RTT块620向IMU块622提供确定为与光线相交的图元的识别。
IMU块622可以将光线-图元测试的结果返回给SM 232。光线-图元测试的结果可以包括相交图元的标识符,交点距离光线原点的距离以及其他与相交图元的属性有关的信息。在一些实施例中,IMU块622可以基于来自RTT块620的先前相交结果来修改现有的光线-图元测试(例如,通过修改光线的长度)。
IMU块622还可以追踪不同类型的图元。例如,不同类型的三角形包括在相交时将阻挡光线的不透明三角形,以及在相交时可能会或可能不会阻挡光线或可能需要SM进行其他处理的α三角形。光线是否被透明三角形阻挡可能例如取决于映射到三角形上的纹理、该纹理所占据的三角形面积以及纹理修改三角形的方式。例如,在某些实施例中,透明度(例如,染色的玻璃)要求SM 232追踪透明的对象命中,以便可以按光线参数顺序对其进行分类和着色,并且通常不会实际上阻挡光线。同时,α“修剪”允许基于映射到图元的纹理形状来修剪图元的形状,例如,将叶形状切成三角形。(请注意,在光栅图形中,透明度(transparency)通常称为“α混合”,而修剪则称为“α测试”)。在其他实施例中,TTU 238可以将透明命中推送到存储器中的队列以供SM 232以后处理,并通过向纹理单元发送请求来直接处理修剪后的三角形。每个三角形可包括指示符,以指示三角形的类型。IMU块622被配置为维持用于追踪不同类型的相交三角形的结果队列。例如,结果队列可以在一个队列中存储一个或更多个相交的不透明三角形标识符,并且在另一队列中存储一个或更多个透明三角形标识符。
对于不透明的三角形,可以在TTU 238中完全确定针对不太复杂的几何形状的光线相交,因为不透明的三角形的区域会阻挡光线遍历三角形的表面。对于透明三角形,在某些实施例中,无法在TTU 238中完全确定光线相交,因为TTU 238基于三角形的几何形状执行相交测试,并且可能无法访问三角形的纹理和/或纹理所占据的三角形面积(在其他实施例中,可以通过图形管线的纹理映射块向TTU提供纹理信息)。为了完全确定三角形是否相交,可以将关于光线-图元和变换块620确定为相交的透明三角形的信息发送到SM 232,以便SM全面确定该三角形是否影响沿光线的可见性。
SM 232可以确定光线是否与和透明三角形相关联的纹理相交和/或光线是否将被该纹理阻挡。在一些情况下,SM 232可以基于该确定将修改的查询发送到TTU 238(例如,如果光线被纹理阻挡则缩短光线)。在一个实施例中,TTU 238可以被配置为将确定为与光线相交的所有三角形返回给SM 232,以进行进一步处理。因为就接口和线程同步而言,将每个三角形相交返回到SM 232进行进一步处理都是昂贵的,所以TTU 238可以配置为隐藏相交但可证明能够被隐藏而不会对所得场景造成功能上的影响的三角形。例如,因为向TTU 238提供了三角形类型信息(例如,三角形是不透明的还是透明的),所以TTU 238可以使用三角形类型信息来确定沿着光线被另一个相交的不透明三角形遮挡的相交三角形,并且因此不必将其包含在结果中,因为它们不会影响沿光线的可见性。如果TTU 238知道三角形被不透明的三角形沿光线遮挡,则可以从结果中隐藏被遮挡的三角形,而不会影响所得场景的可视化。
相交管理块622可以包括结果队列,该结果队列用于存储与三角形ID相关联的命中以及与光线命中三角形的点有关的信息。当确定光线与不透明三角形相交时,可以将三角形的身份和交点与光线原点的距离存储在结果队列中。如果确定光线与另一个不透明三角形相交,则如果交点到光线原点的距离大于已存储在结果队列中的相交的不透明三角形的距离,则可以从结果中忽略该另一个相交的不透明三角形。如果交点距光线原点的距离小于已存储在结果队列中的相交的不透明三角形的距离,则另一个相交的不透明三角形可以替换结果队列中存储的不透明三角形。测试了查询的所有三角形之后,可以将在结果队列中存储的不透明三角形信息和相交信息发送到SM 232。
在一些实施例中,一旦识别出不透明三角形交点,则相交管理块622可以缩短存储在光线管理块630中的光线,以使得相交的不透明三角形(沿着光线)后面的包围体(其可以包括三角形)将不会被识别为与光线相交。
相交管理块622可以将关于相交的透明三角形的信息存储在单独的队列中。所存储的关于相交的透明三角形的信息可以被发送到SM 232,以供SM确定光线是否与和三角形相关联的纹理相交和/或该纹理是否阻挡光线。SM可以基于该确定,将该确定的结果返回给TTU 238和/或修改查询(例如,如果该光线被纹理阻挡,则缩短该光线)。
减少假阳性的光线包围体相交点
图7示出了根据一些示例性实施例的用于减少假阳性光线-包围体相交的过程700的流程图。过程700可以完全或部分地在硬件电路中实现,例如,TTU 238。在示例性实施例中,在减少光线遍历中遇到的假阳性光线=包围体相交时,可以以不同于所示的顺序执行一个或更多个操作702-720,或者可以不执行。
过程700可以在BVH的遍历期间启动,同时应用程序正在诸如上述系统200的系统中被处理。图4A示出了高水平处的光线追踪管线,其具有光线生成操作410和BVH遍历操作420以确定光线是否与任何几何图元相交(见操作450)。图4B示出了图4A的BVH遍历操作420是通过递归地沿着各自的路径下降BVH来执行光线-包围体相交测试472,直到在BVH的叶节点没有更多的包围体分区,并执行光线图元相交测试478以确定在选定的路径中是否发生几何图元撞击。图5A更详细地示出了光线遍历,其中显示遍历路径包括顶层加速结构(TLAS)遍历506,它通过实例节点连接到底层加速结构(BLAS)遍历518。如上所述,实例节点定义了来自世界空间的变换514,其中TLAS被定义到各自几何体的坐标空间。在本文的描述中,术语实例加速结构(IAS)和几何加速结构(GAS)分别与TLAS和BLAS可互换使用。需要注意的是,尽管与图5A相关的BVH在从BVH的根部、通过TLAS到BLAS的叶节点的遍历路径中包括一个实例节点,但是一些BVH在TLAS中可能具有多个层次(例如,从TLAS的根部到TLAS的叶的路径包括一个以上的实例节点)。
在操作702,在光线遍历期间,访问一个实例节点。在本实施例中,实例节点包括用于以全精度定义的包围体的顶点的参数(例如,实例节点数据结构900中的顶点902)。实例节点还可以包括标志(例如,“aabb位”906),指示顶点字段包含有效数据和/或转换盒测试特征被启用。顶点字段可以存储包围体的坐标。
如果该标志未被设置(即,对于实例节点的变换盒测试特征未被启用),则过程700继续进行操作704,以将光线从世界空间变换到BLAS节点的坐标空间,并继续进行过程700的操作712等,而不执行变换盒测试。
如果标志被设置(即,转换盒测试特征被启用),则在所述实施例中,执行用于TBT的操作706。在所述实施例中,操作706处的变换盒测试可以与操作704处的实例节点变换基本并行地执行。在所述的实施例中,硬件光线变换电路(例如,诸如光线-图元测试和变换电路620)执行变换704。在一些实施例中,操作704和706可以并行或基本上并行地执行。例如,变换盒测试操作706可以利用光线-图元测试和变换块620的电路的第一部分来执行,同时在电路的第二区域执行将光线从世界空间变换到坐标空间。过程800示出了示例的TBT过程。下面将结合图8更详细地描述TBT过程。
在操作708,确定操作706是否导致命中。如果结果是未命中,则在操作710,实例节点和其所有子节点被剔除。光线遍历继续进行,而不按实例节点的子节点下降到GAS中。
如果操作706是命中,则在操作711,可选择地,全精度光线-包围体测试的相交信息可以被存储以备后续使用。例如,定义最小相交距离(光线确实与包围体相交的地方)的t-min可以由TTU 238本地存储,以便它可以在后续的处理中重用。
在操作712,可选择地,可以执行光线剪裁过程。尽管PDC缓解了由节点引起的对于这些节点其后续的相交测试将被证明不会导致命中的问题,但导致假阳性的进一步光线距离相关问题可能仍然存在。光线剪裁可作为进一步减少由于起点远离AABB的光线而导致的假阳性遍历的操作。过程1300是光线剪裁的示例过程。
在操作714,流程700访问是实例节点的子节点的几何加速结构。
在操作716,可选择地,可以执行点退化剔除(PDC)。上面执行的TBT可以防止遍历进入GAS,但是不剔除GAS内的任何后续的过度遍历,因为当实例包围盒被相交时有相同的长距离。PDC可以操作以补充由TGT过程所执行的剔除。PDC确定与节点相关联的包围盒是否鉴于光线原点而退化为点,如果是,则从进一步的遍历中剔除该包围体。下面结合图11描述的过程1100是用于点退化剔除的示例过程。
在操作718,执行低精度光线-包围体相交测试,以确定经变换的光线是否与BVH中定义的包围体相交。如上所述,包围体的顶点坐标以低精度存储在BVH节点中。
如果在操作718处的低精度光线-包围体相交测试结果为命中,则过程700在GAS中进一步进行。在操作720,执行光线-图元相交测试,以确定光线是否与在操作718处测试的低精度包围盒所涵盖的几何体相交,并且在执行操作706时,还与在操作706处测试的高精度包围盒相交。
而在一些实施例中,在减少假阳性光线遍历中可以执行所有操作702-720,在一些其他实施例中,可以不执行TBT过程、PDC过程和光线剪切过程中的一个或更多个。
变换盒测试
变换盒测试(TBT)特征将低精度的光线包围体相交测试与机会性地进行的第二、高精度的光线包围体相交测试相结合。根据一些实施例,TBT特征将RCT块610中的有损的宽和压缩的包围盒测试与在从世界空间到对象空间的实例变换期间在RTT块620中机会性地进行的第二全精度包围盒相交测试结合起来。
在DXR和其他API中,场景的几何体使用两级加速结构。几何体加速结构(GAS)也被称为底层加速结构(BLAS),它持有用于构建场景的一组几何体。实例加速结构(IAS),又称顶层加速结构(TLAS),持有一组GAS的实例。给定一组GAS,应用程序定义了一组实例,每个实例都指向GAS,其具有一些专业化的信息,以及一个将光线从世界空间转换到对象空间的变换。特定GAS的对象空间是该GAS中几何体的坐标空间。
在示例性实施例中,实例节点既是BVH中指向GAS的子节点,又是持有该实例信息的数据结构,包括指向GAS和变换的指针。
在实例节点数据结构中,定义用于包围实例的AABB的高精度(例如FP32)最小顶点和最大顶点与指示它们有效的“aabb位”一起被存储。绑定实例的AABB在此可称为“实例节点AABB"。见图9A和图9B。图9A示出了实例节点数据结构900,其中包括实例节点AABB的顶点(例如,最小x、y和z点以及最大x、y和z点)902。图9B示出了“aabb位”906,它指示是否(例如通过分别设置为1或0)为实例节点启用AABB剔除功能。aabb位906可以设置在实例节点数据结构900的保留字节904中。本领域技术人员将理解,顶点和aabb位在实例节点数据结构中的位置不限于图9A-图9B中所示。同样地,本发明也不限于图9A-图9B所示的实例节点数据结构的格式。
在实例节点构建期间,用于特定应用的BVH的构建器可以决定使用为该实例节点定义的高精度实例节点AABB包围实例。对于以这种方式包围的实例节点,RTT块620执行全精度光线-包围体相交测试。
在一些实施例中,该全精度光线-包围体积相交测试与实例变换并行执行。例如,在一些实施例中,RTT块620包括执行光线-三角形相交测试的硬件电路,也包括执行实例变换的硬件电路。因为在这样的示例性实施例中,RTT块620中的光线-盒相交测试的数据路径被用于其他计算,例如光线-图元(例如光线-三角形)相交,因此对于与变换本身并行进行的光线-包围体测试,在处理时间或硬件电路区域方面只有少量的额外成本(如果有的话)。
根据一些实施例,全精度光线-包围体相交测试是平板测试。参见图10A-图10C。图10A显示了对于x、y和z平面中的任何一个,光线在时间t0与包围盒的最小平面(“min平面”)相交,并在时间t1退出最大平面(“max平面”)。图10B显示了光线从包围体的最大平面进入,从最小平面退出。如图所示,在图10A中,t0<t1指示光线在最小平面进入包围体,而图10B中,t1<t0。相交测试包括确定针对每个坐标x、y和z的最小平面和最大平面的相交点,并确定它们是否在该包围体的范围内。
在平板测试中,有几个角落情况需要单独处理。首先是零方向分量,当光线沿最小或最大平面时,它可以引入NaN(“不是一个数字”)值。为了稳妥起见,一些示例性的实施例强迫任何导致NaN的相交被认为是命中。图10C示出了与包围体的最大和最小平面相关的几条光线。如图所示,任何平行于最小/最大平面但不在平面上的光线,都会导致t0和t1的值为无穷大。位于最小平面或最大平面上的光线,对于t0或t1都会产生NaN,并被视为与NaN被评估的各自平面相交。
虽然上面介绍的全精度光线-包围体相交测试是精确的,但是一些实施例可以提供额外的保守性,以便为在BLAS遍历中所做的一些保守性的膨胀腾出空间。出于这个原因,这样示例性实施例允许可编程的膨胀,以ULP的预先配置的小数量(例如,2,3,4等)增加t-min和t-max(分别为t0和t1)之间的距离。该实现方式可以使用整数加法来进行ULP加法。然而,在一些实施例中,可以使用实际的FP加法器(浮点加法器)。对于整数加法,示例实施例可以利用溢出检查来捕捉发生从FP_MAX溢出到NaN值的情况。
如果在实例节点处的全精度光线-包围体相交测试的结果是命中,则遍历继续进入BLAS。如果全精度光线-包围体测试的结果为未命中,则实例节点被剔除,并从IAS的下一个条目继续遍历。
TBT特征只是解决性能悬崖问题的一部分。TBT可以防止遍历进入GAS,但是不剔除GAS内任何后续的过度遍历,因为当实例包围盒被相交时有相同的长距离。
图8示出了用于变换盒测试(TBT)的过程800。过程800可以完全或部分地在硬件电路中实现,例如,TTU 238。在示例性实施例中,在减少光线遍历中遇到的假阳性光线-包围体积相交的过程中,一个或更多个操作802-822可以以不同于所示的顺序执行,或者可以不执行。
当在操作802处光线遍历访问实例加速结构(IAS)中BVH的节点时,过程800可以开始。在所述实施例中,被访问的节点是实例节点,但是实施例并不限于此。
在操作804,确定被访问的节点(在所述实施例中,实例节点)是否被配置为TBT特征。在示例性实施例中,是否启用TBT特征是通过检测被访问的节点包括包围体的顶点的高精度定义来确定的,该包围体涵盖被定义在以被访问节点为根的子树的叶节点中的一组几何体。在一些示例性的实施例中,可以设置被访问节点中的标志,以指示顶点是否存在于被访问节点的数据结构中,以及它们是否有效。例如,图9A和图9B显示了定义AABB的最小和最大顶点的高精度x、y、z坐标902的实例节点900,以及指示坐标902是有效的aabb位906。
如果在操作804处确定TBT特征在被访问节点处未被启用(即,未设置aabb位和/或未指定高精度顶点),则过程800进行到操作806并继续遍历。如果被访问的节点是实例节点,这可能涉及将光线从世界空间转换到被访问的节点中定义的对象空间(例如,一组底层几何体的坐标空间),并且用变换后的光线继续遍历。
另外,如果在操作806处确定在被访问节点处启用了TBT特征,则在操作808处,使用光线和被访问节点中定义的高精度包围体来执行光线-包围体相交测试。更具体的是,确定在IAS的世界空间中的光线是否与由被访问节点中指定的高精度顶点坐标定义的包围体相交。这种相交测试使用以高精度数字格式定义的顶点坐标,并在配置为高精度数学的电路上执行。
在一些实施例中,在操作808处的高精度光线-包围体相交测试与在操作806处执行的变换计算并行地执行。以这种方式,可以最大限度地减少由高精度光线-包围体相交测试产生的任何额外时间开销。在一些实施例中,例如,变换计算是在TTU 238的光线-图元测试和变换(RTT)块620中的第一组硬件电路中执行的,而高精度光线-包围体测试是在RTT620的第二组硬件电路上执行的。第一组硬件电路和第二组硬件电路可以是这样的:在典型的配置中(当TBT没有为光线遍历期间访问的节点启用时),RTT 620正在被用于变换计算和/或光线-图元测试。例如,在NVDIA GPU的一些当前实现中,TTU被配置为在光线完成体测试(RCT)块610中以低精度算术执行所有光线-包围体相交测试,并且在RTT块620中以高精度算术执行所有光线-图元相交测试。
在操作810,确定高精度相交测试是否导致命中。如果测试导致未命中,则由于测试是以高精度进行的,这意味着光线不会与AABB所涵盖的一组几何体中的任何一个相交,因此可以剔除被访问的节点,从而不需要遍历被访问节点的子节点。
如果在操作810处确定高精度相交测试导致命中,则过程800通过访问被访问节点的子节点继续进行遍历。例如,如果被访问的节点是实例节点,则通过访问子节点继续进行遍历,对于实例节点,这可能包括GAS中的根节点。
随后,在操作816处,针对涵盖一组几何体的低精度包围盒(例如,由在操作808处测试的高精度包围盒所涵盖的相同的一组几何体)测试变换后的光线(例如,从IAS的世界空间转换到GAS的坐标空间的光线,这是由访问节点中指定的变换所定义的)。
在操作816处执行的测试与在光线遍历期间对任何节点执行的光线-包围体测试相同,并且在这一点上,无论BVH遍历路径中的上游节点是否选择性地引起第二高精度光线-包围体相交测试,对所有节点的遍历是相同的。在示例性实施例中,低精度测试使用低精度顶点坐标,并在配置为低精度数学的电路上执行。这与操作808处的高精度测试形成对比,后者使用高精度顶点坐标和配置为高精度数学的电路。在示例性实施例中,高精度和低精度可以指所使用的浮点数字表示的大小(例如,32位浮点与8位浮点表示)。对“全精度”的引用是指可用于实现的最高浮动表示。在示例性实施例中,在高精度和低精度下的光线-包围体相交测试可以使用相同的平板测试(例如,图10A-图10C),使用不同的精度水平执行。此外,在示例性实施例中,在操作808处的高精度相交测试中使用的包围体和在操作816处的低精度相交测试中使用的包围体可能不是(并且通常不是)相同的,尽管它们含钙相同的一组底层几何体。
还应当注意,在操作816处的低精度测试可以是保守的测试,其中鉴于在GAS水平上执行水密性的相交的要求,它是对应于针对包围体进行测试的光线的光束(如上所述)。相比之下,在操作806处的高精度测试不需要水密性,因此可以利用光线(而不是通常用于相交的保守性的光束)进行相交确定。
在操作818处,确定在操作816处的相交测试是否导致命中(即,经变换的光线是否与低精度AABB相交)。如果结果是未命中,则可以假定作为根植于被访问的BLAS节点的子树的一部分的几何体都不会被光线相交,并且根植于被访问的节点的整个子树从进一步遍历中剔除。
另一方面,如果结果是命中,则在操作822处继续遍历被访问节点的子节点。遍历在上文关于图5A-图6的描述中。
尽管对过程800的上述描述涉及作为执行高精度相交测试的访问节点的实例节点,但实施例不限于此。在示例性实施例中,执行高精度相交测试(并且包括高精度顶点坐标和对应的aabb位)的访问节点可以是IAS中的任何节点,甚至是GAS中包括AABB所涵盖的几何体的根节点。因此,在实现中,其中通过IAS的遍历路径包括多个加速结构,因此有多个实例节点(例如,用于从世界空间变换到中间空间的第一实例节点,用于从中间空间变换到对象空间的第二实例节点),被访问的节点可以是通过IAS路径中的任何地方,不限于最上面的加速结构。
应当注意,在示例性实施例中,操作808的高精度相交测试可以在世界空间(或任何其他中间空间)或底层几何体的对象空间中执行。例如,如果执行高精度测试的访问节点是GAS的根,则测试是在对象空间中进行的,另外,如果访问节点是IAS中的任何地方,则测试是在世界空间(或者在通过IAS的多AS路径的情况下的其他中间空间)中进行的。
点退化剔除
减少由光线膨胀引起的假阳性光线-包围体相交的另一项技术在此被称为“点退化剔除”(PDC)。通过PDC,要确定正在执行遍历的光线是否与要测试相交的包围体有如此长的距离,以至于包围体退化(例如,塌陷)为点。如果确定AABB确实退化为点,则PDC特征使对应于AABB的节点被剔除。
剔除这种退化为点的AABB可以减少假阳性相交。这是因为,虽然低精度的光线-包围体相交测试仍然可能因为远处光线原点的光线膨胀而导致相交命中,但最终以高精度执行的光线-图元相交测试将导致未命中。光线-图元相交测试导致未命中的原因是,退化为点的AABB内部包含的任何几何体(由于光线原点的距离)也退化为点,而光线不与点相交。换句话说,点具有0体积,光线不能与0体积的AABB或几何图元相交。
在示例性实施例中,PDC在完成体级别被启用。用于TBT特征的平板测试可以被认为是在RCT块610中针对完成体中的压缩AABB测试光线时使用的相同平板测试。平板测试的第一步是将光线原点从包围体的顶点上减去。在光线原点与AABB尺寸相比足够大的长距离上,该操作可以将包围体折叠成点。换句话说,鉴于与光线原点的距离相对较大,由于顶点坐标的精度限制,最小顶点和最大顶点会重叠。比喻是,一辆汽车在远离观看者时逐渐变小,在离观看者一定距离时,在它从视线中消失之前,只能被视为一个点。即使包围体变成了一个点,光线-完成体相交测试(例如针对完成体对应的AABB测试光线)仍然命中该点,以便对底层几何体相交进行保守处理。
对于三角形相交测试,使用剪切空间(shear space)进行光线-三角形相交。那里的第一步是相同的从三角形顶点减去光线原点。由于三角形顶点包含在完整体中的AABB内,因此,任何经受光线-包围体相交测试且塌陷为点的AABB也将导致塌陷为点的三角形。在RTT块620中执行的光线-图元相交测试是用全精度数学进行的,而不是保守的,所以按照惯例,那些面积为0的退化点三角形不会被相交。
可以在每个完成体中添加位,以启用PDC。参见图12A和图12B,其示出了在完成体1200的“misc”字段1202中的“pdCull”位1204。该位的确切位置并不重要。pdcull位指示如果完成体包围盒减少到单个点,则该完成体下面的所有几何体都保证会被未命中。在这里描述的实施例中,使用了整个完成体包围盒,而不是该盒中的单个子AABB,只是为了减少花费的面积。为了获得更多的面积,可以对每个子AABB进行操作,这可能会导致更早的剔除,而不是必须下降到该子(或叶)。
该操作通过比较AABB最小点和AABB最大点来进行,如果它们相等且pdCull位被设置,则所有子代被报告为未命中。
在一些实施例中可以使用的另一种不那么精确但消耗电路区域较低的机制反馈掉从完成体中使用的有损压缩。在一些实施例中,完整体包围盒由最小角和x/y/z比例或外延来定义。完整体包围盒的最大角是通过将外延添加到最小角来计算的。如果所有与每个组分的原点相关的完整体最小角的指数都比完整体的x/y/z尺度大27倍以上,则用FP32数学计算,最大角将与最小角相同。通过这种方式,可以对指数使用简单的整数数学,而不是用全FP加法器计算最大角。选择值27而不是更紧的值例如24,是为了覆盖FP加法中可能发生的舍入和误差。
在示例性实施例中,关于可受制于PDC的BVH节点有一些限制。PDC不应该在IAS中使用。这是因为通过IAS的遍历路径在遍历到达GAS之前可能包括变换,而变换具有缩放能力。鉴于变换具有缩放包围盒的能力,在变换之前世界空间中的点AABB可以缩放到变换之后对象空间中的非点AABB。
在某些配置中,PDC不应被用于任何包括从树状遍历单元送回处理器(例如SM)用于相交着色器或类似的几何体的完成体,即使该几何体是三角形。SM上的相交着色器可以使用更高的精度或其他相交算法,即使对于点AABBs也能产生相交。如果在特定配置中,已知相交着色器方法对返回的几何体是保守的(例如利用低精度相交测试),那么可以使用PDC。
当使用三角形分割时,也不应该使用PDC。三角形分割的工作方式是围绕单个三角形创建多个较小的盒。这些盒可能不在同一个完成体中。围绕分割三角形的多个点退化盒可能相当于非点退化的总盒。
考虑到对其使用的上述限制,PDC可用于内部节点以及叶节点,但仅用于不在实例节点、三角形分割或返回到上述SM 232的几何体之上的节点。
TTU 238包括光线标志,允许光线改变相交的三角形范围和其他几何体的行为,以返回到SM 232而不是在TTU 238中处理。在一些实施例中,在具有设置了某些光线标志的光线的遍历过程中,可以禁用PDC,该光线标志可以将几何体送回处理器。如果该光线标志被设置,那么该光线的PDC被禁用。TTU 238可以进一步使用光线操作(见美国专利号:10,867,429)来允许该行为在每个子节点上有所不同。即使行为可以不同,PDC仍然为该光线完全禁用,因为在完成体下面的任何子代可能最终具有不同的模式,因此可能需要禁用PDC。
PDC是一种用于减少在可以保守地知道不会被命中的几何体上的性能悬崖的机制,因为该几何体上的包围体减少到一个点。
图11示出了用于点退化剔除(PDC)特征的过程1100的流程图。过程1100可以完全或部分地在硬件电路中实现,例如,TTU 238。在示例性实施例中,在减少光线遍历中遇到的假阳性光线-包围体相交时,可以按照不同于所示的顺序执行一个或更多个操作1102-1112,或者可以不执行。
当在通过GAS的光线遍历过程中,遇到针对节点和/或完成体定义的AABB时,过程1100可在操作1102处开始。在一些示例性实施例中,AABB可以是涵盖在实例节点之后访问的GAS的根节点下的所有几何体的包围体。例如,上文描述的与过程800有关的高精度光线-包围体相交测试可能已经与实例节点相关联地执行,并导致命中,并且遇到的节点可能是作为实例节点的子树的根。在对同一遇到的节点执行低精度光线-包围体相交测试(例如上述与过程800有关的低精度相交测试816)之前,可以对遇到的节点执行过程1100。
在操作1104,确定相对于光线的原点而言,AABB是否退化为点。例如,如果光线原点超出预先配置的距离阈值,则AABB被认为是点。也就是说,从光线原点的观察者的观点来看,整个AABB可能基本上等同于点,因为AABB的大小以及从AABB到光线原点的距离存在相对差异。
在操作1108,在操作1104已经确定AABB退化为点之后,确定是否为遇到的节点启用PDC特征。在一些实施例中,在节点数据结构中定义了“pdCull位"。图12A示出了完成体数据结构1200,其中misc字段1202,如图12B所示,被配置为包括完成体的pdCull位1204。在示例性实施例中,当PDC功能被启用时,pdCull位将具有1的值。如果该功能未被启用,则pdCull位可以未被定义或被设置为0。
如果在操作1108处确定pdCull位被设置,则在操作1112处遇到的节点被剔除,并且由此从遍历路径中移除根植于遇到的节点的任何子树。
然而,在一些实施例中,在对遇到的节点进行剔除之前,可以执行一个或更多个进一步的确定(除了确定光线原点超出距离阈值和启用点退化剔除特征之外)。因此,在剔除操作1112之前,可以执行可选的操作1110,以确定所遇到的节点是否是实例节点,是否受到三角形分割,或包括指示要发送到处理器的几何体。如果遇到的节点是实例节点、受到三角形分割、或者包括被指示发送到处理器的几何体中的任何一个,那么,出于上述原因,过程1100继续进行操作1106,以继续遍历而不剔除遇到的节点。
如果在操作1104、1108或1110中的任何一个,确定不应该根据点退化剔除特征对遇到的节点进行剔除,则过程1100继续进行操作1106,在不执行点退化剔除的情况下继续遍历。
光线剪裁
本发明人认为光线剪切是另一种技术,通过这种技术可以减少由光线膨胀引起的假阳性。在示例性实施例中,光线剪切的作用是将光线参数化地推进到更接近被测试几何体的新原点。实际上,光线剪切通过参数化地将光线原点移动到正在测试相交的AABB附近,减少应用于光线的膨胀(如果有的话)。将其原点参数化地移动到新原点的光线被称为剪切光线。
举例说明,在图14A中,光线1402的原点1406被显示在与包含一些几何体的AABB1409的距离处。上图显示的是光线1402未被剪裁的形式,下图显示的是光线1402被剪断后,光线原点从1406移到1408,新原点1408与AABB 1409只有一小段距离。从新原点1408延伸出来的被剪断的光线显示为1404。
用于光线-包围盒相交测试的平板测试的第一个操作是将AABB平移到光线原点相对空间。也就是说,光线原点要从AABB的min中减去。这基本上也是将三角形移入光线剪切空间进行光线-三角形相交测试的第一步。在RCT块610中为相交测试引入的膨胀是基于离光线原点的距离,并处理当它离AABB或三角形较远时可能出现的精度损失。当调整后的光线原点靠近AABB时,相交点的膨胀量(可能与原点到AABB的距离成正比)将大大低于光线原点未调整并与AABB保持相当距离时的膨胀量。在一些实施例中,当调整后的原点与AABB之间的距离小于配置的阈值时,为了进行光线-包围体相交测试和/或光线-图元相交测试,不会向光线引入膨胀。
使用来自TBT光线-盒相交测试的t-min,在利用光线剪切的实施例中,TTU可以使用光线参数方程将变换后的光线推进到实例的最边缘的新原点。
new_origin=transformed_origin+transformed_direction*(tbt_t_min-2ULP)
稍微减少的TBT t-min(例如,tbt_t_min-2ULP)成为新的t-delta,它是原始光线原点和光线剪裁原点之间的参数差。t-min被2ULP略微减少,以允许在盒子的边缘相交,因为光线三角形测试的范围测试是排他性测试,即:(t-min,t-max)。减少假设t-min至少大于t-min被略微减少的量(例如2ULP),如果不是这样,则不执行剪裁。虽然上面显示t-min被减少了2ULP,但这只是一个示例。t-min的减少量可以是可配置的。
对于接近光线原点的实例,剪裁可能没有用,并且可能引入轻微的数值差异(见下文)。为了避免这一点,可以对何时应该发生剪裁施加阈值。在示例性实施例中,可以将其与剪裁距离结合起来,该距离可以与上面的2个ULP分开。
if(tbt_t_min>=clipThreshold)then
new_origin=transformed_origin+transformed_direction*(tbt_t_min-
clipDistance)
剪裁阈值和剪裁距离可以被静态地选择,例如,分别为50,000和1.0。或者,它们可以被制成全局可编程的,以便根据使用情况进行改变。
此外,节点数据结构,例如实例节点数据结构,也可以存储每个实例的FP32剪裁阈值和剪裁距离。参见图14B。实例节点数据结构1410内的字段的确切位置并不重要。每个实例的阈值1412可以用来总是启用剪裁(剪裁阈值为0.0f或负值)或总是禁用剪裁(剪裁阈值为无穷大)。但更重要的是,当一个实例被大幅缩放时,它可以用来调整剪裁。剪裁距离1414也可以存储在实例节点1410中。剪裁阈值和剪裁距离的值可以用不同的方式表示。它们可以是全精度的FP32值,仅是指数值(以节省存储区域),或者在剪裁距离的情况下表示为ULPdelta而不是全浮点值。
缩放的实例可以创造出距离变换后的幻觉。想象一下,全尺寸的汽车模型,其所有的细节都错综复杂地组成。然后将该车缩小到玩具车大小,并将其放在靠近相机的场景中。缩小汽车尺寸的变换缩短了方向矢量,这就有效地将变换后的光线原点向后移动了参数化的距离,从而产生了这种缩放效果。因此,即使世界空间中与实例的距离可能很小,但对象空间中的有效距离可能很大。例如,在汽车模型的比例为1:100的情况下,该实例的每个实例剪裁可能有缩小的500的阈值和0.01的距离,以匹配非缩放的静态50,000和1。在一些实施例中,这种缩放可以由TTU 238的硬件电路根据对变换矩阵的检查自动完成。在一些实施例中,在软件操作中执行这种缩放可以节省一些硬件成本,特别是在处理各向异性/非均匀缩放的时候。
在一些实施例中,t-delta与光线信息和指示其是被剪裁的底部光线的位(“剪裁的有效位”)一起存储在光线管理单元(RMU)630中。存储在底层光线槽中的t-min和t-max的t-delta被移除,以便它们(t-min和t-max)符合变换后的剪裁光线。
在一些实施例中,可以使用除TBT之外的技术来获得用于光线剪裁的t-min。作为使用来自TBT的t-min的替代方法,一些实施例可以使用从RCT块610中的光线完成体测试计算的t-min。RCT测试比TBT的光线-包围盒测试更保守,因此t-min可能不会像TBT那样紧密推进。尽管如此,t-min仍能起到减少假阳性相交的作用。也可以使用其他机制来确定用于光线剪裁的t-min。
RMU 630将光线信息提供给RTT块620和RCT块610二者,用于相交测试。对于剪裁的光线,是剪裁的t-min和t-max与t-delta和剪裁的有效位一起提供的。
在RTT块620中AABB或在RTT块620中三角形(或其他图元)的任何相交将被剪裁的光线的t-hit与被剪裁的t-range进行比较。
在一些实施例中,对于配置为存储t-hit(例如,相交距离)值的AABB相交,存储通过将t-delta添加到被剪裁的t-hit而计算的未剪裁的t-hit值。在SMU 640中的后续过滤可以使用未剪裁的t-hit值。
对于RTT块620中的三角形(或其他图元)相交,计算已剪裁和未剪裁的t-hit值并将其传递给相交管理单元(IMU)622进行存储。
剪裁后的t-hit用于确定该GAS内最近的命中。添加位以确定所存储的剪裁值是有效的。IMU块622为每条光线存储该位,以指示该光线具有有效的剪裁t-hit与未剪裁的t-hit。该位在变换时或有顶层相交时被清零。如果没有设置,则剪裁的相交使用未剪裁的t,并且如果更接近,则存储其剪裁的和未剪裁的t-hit,并设置剪裁的t有效位(clipped-t-valid bit)。
当在RMU 630中缩短t-max值时,IMU 622可以提供剪裁的t-hit和未剪裁的t-hit两者。剪裁的t-hit被存储为底部光线(例如用于遍历GAS的光线)的t-max,而未剪裁的t-hit被存储为顶部光线(例如用于遍历IAS的光线)的t-max。当在SMU 640中进行过滤时,可以使用未剪裁的t-hit。
对剪裁的光线的原点的重新定位可以引入一些由于FP精度而产生的数值差异,这意味着新原点不在同一条线上。这可能导致光线路径中的轻微扰动。这些差异与使用光线原点为t-min而不是定义不同的范围时可能发生的差异相同。变换本身也受到浮点精度的限制。由于这两个原因的结合,由光线剪裁引入的数值差异被认为是可以接受的。尽管如此,为了在需要时保持更好的精度,针对每个实例,光线剪裁可以通过剪裁阈值选择性地启用。它在实例节点中的确切位置并不重要。
光线剪裁的优点是,将三角形或AABB放入光线源相对空间的初始减法的绝对值变化较小,因此保留了更多关于三角形或AABB的信息,导致需要更少的RCT膨胀的更精确的相交测试。
尽管可以在软件中进行光线剪裁,但它需要返回所有实例节点以评估光线是否应该被剪裁。这样的返回可以花费多达50%的性能,这可以通过使用剪裁阈值和距离的示例性实施例中使用的硬件实现来完全避免。
图13示出了根据一些示例性实施例的用于光线剪裁的过程1300的流程图。过程1300可以完全或部分地在硬件电路中实现,例如,TTU 238。在示例性实施例中,以减少在光线遍历中遇到的假阳性光线-包围体相交的过程中,一个或更多个操作1302-1310可以以不同于所示的顺序执行,或者可以不执行。
过程1300可以在低精度光线-包围体相交测试(例如在上述操作816处的相交测试,例如在RCT块610中)之前,在光线遍历期间执行。
过程1300可以在执行低精度光线-包围体相交测试之前在操作1302处开始。在操作1302处,确定对应于相交测试的AABB上的光线的最小相交点值。在光线遍历中的示例性实施例中,其中在光线剪裁之前执行TBT特征,t-min可以从TBT中获得。例如,过程1300可以在操作711处获得由TBT过程700存储的t-min。尽管过程700中使用的包围盒可能与用于低精度光线-包围盒相交测试的AABB不完全相同,但这里可以使用来自过程700的最小相交点信息,因为过程700的包围盒和这里的AABB涵盖了相同的一组几何体。如果TBT t-min不可用(例如,在过程1300之前没有执行TBT特征的过程800),可以用其他方式获得t-min。在示例性的实施例中,t-min是从RCT块610执行的光线-完整体包围体相交测试中获得的。一些实施例可以替代性地使用,例如,每个实例的球体而不是AABB来产生用于光线剪裁的候选t值。在一些实施例中,可以启用从软件加载t值,使得光线可以在剪裁空间中开始,而不必首先进行变换。
在操作1304处,访问用于剪裁阈值和剪裁距离的全局和/或特定实例值。可以有预先配置的全局(即应用于所有节点)定义的剪裁阈值和剪裁距离值。在一些实施例中,包围体包括预先配置的剪裁阈值和剪裁距离。图14B示出了包括预先配置的剪裁阈值1412和剪裁距离1414的实例节点数据结构。当存在针对剪裁阈值和剪裁距离的每个节点定义时,这些每个节点定义的值被考虑在全局定义的值之上,从而使改变默认行为成为可能,这可以是以特定于节点的方式的基于全局定义的剪裁距离和剪裁阈值。
在操作1306,确定光线原点是否处于大于剪裁阈值的距离。在一些实施例中,这可以通过测试最小相交点值是否大于或等于剪裁阈值来确定。在一些实施例中,最小相交点值可以是与操作1304相关描述的从TBT过程或RCT块610获得的t-min值。
在操作1308,基于变换后的光线的原点、变换后的光线的方向、最小相交距离和剪裁距离确定新的光线原点。例如:
if(tbt_t_min>=clipThreshold)then
new_origin=transformed_origin+transformed_direction*(tbt_t_min-clipDistance)
在操作1310,存储剪裁的光线原点值,以便随后在光线-包围体和光线-图元相交测试中使用。例如,由RMU块630存储指示光线与AABB的相交的被剪裁的t-min和被剪裁的t-max。在一些实施例中,t-min和t-max与t-delta(即原始原点和调整后的原点之间的距离差)和可选地“剪裁的有效位”一起被存储。剪裁有效位可用于向处理逻辑指示所存储的光线数据对应于剪裁的光线,从而使处理逻辑能够使用剪裁的光线(带有调整过的原点)或使用未调整过的光线(通过使用t-delta恢复光线)。
GPU架构示例
现在将描述其中合并了本申请中公开的具有减少假阳性的高效光线遍历的示例性的说明性架构。以下信息是为说明目的而提出的,不应被理解为以任何方式限制。以下任何特征可以选择性地合并,也可以不排除所述其他特征。
图15示出了根据实施例的并行处理单元(PPU)1500。在实施例中,PPU 1500是多线程处理器,其在一个或更多个集成电路设备上实现。PPU1500是被设计为并行处理许多线程的延迟隐藏架构。线程(例如,执行线程)是一组被配置为由PPU 1500执行的指令的实例化。在实施例中,PPU1500是图形处理单元(GPU),被配置为实现用于处理三维(3D)图形数据的图形渲染管线,以便生成二维(2D)图像数据,用于在如液晶显示器(LCD)设备的显示设备上显示。在其他实施例中,PPU 1500可被用于执行通用计算。在一些其他实施例中,PPU 1500被配置为在深度学习应用或其他高性能计算应用中实现大型神经网络。
一个或更多个PPU 1500可被配置为加速成千上万的高性能计算(HPC)、数据中心和机器学习应用。PPU 1500可被配置为加速众多的深度学习系统和应用,包括自主车辆平台、深度学习、高精度语音、图像和文本识别系统、智能视频分析、分子模拟、药物发现、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人学、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐等等。
如图15所示,PPU 1500包括输入/输出(I/O)单元1505、前端单元1515、调度器单元1520、工作分配单元1525、集线器1530、交叉杆(Xbar)1570、一个或更多个通用处理集群(GPC)1550以及一个或更多个分区单元1580。PPU 1500可以通过一个或更多个高速NVLink1510互连与主机处理器或其他PPU 1500连接。PPU 1500可以通过互连1502连接到主机处理器或其他外围设备。PPU 1500也可以连接到由若干存储器设备1504组成的存储器。在实施例中,存储器1504可以包括一些动态随机存取存储器(DRAM)设备。DRAM设备可被配置为高带宽存储器(HBM)子系统,每个设备内堆叠有多个DRAM模具。
NVLink 1510互连使系统能够扩展并包括一个或更多个PPU 1500与一个或更多个CPU的组合,支持PPU 1500与CPU之间的高速缓存一致性,以及CPU主控。数据和/或命令可由NVLink 1510通过集线器1530传输到PPU 1500的其他单元(如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出))/从PPU 1500的其他单元传输数据和/或命令。NVLink 1510将结合图18A和图18B进行更详细的描述。
I/O单元1505被配置为通过互连1502发送和接收来自主机处理器(未示出)的通信(例如,命令、数据等)。I/O单元1505可以通过互连1502直接与主机处理器通信或通过一个或更多个中间设备,如存储器桥。在实施例中,I/O单元1505可以通过互连1502与一个或更多个其他处理器,例如一个或更多个PPU 1500通信。在实施例中,I/O单元1005实现了用于通过PCIe总线进行通信的外围元件互连快递(PCIe)接口,并且互连1502是PCIe总线。在替代实施例中,I/O单元1505可以实现用于与外部设备通信的其他类型的知名接口。
I/O单元1505对通过互连1502接收的分组进行解码。在实施例中,该分组表示被配置为使PPU 1500执行各种操作的命令。I/O单元1505将解码后的命令传输到PPU 1500的各种其他单元,因为这些命令可能指定。例如,一些命令可以被传输到前端单元1515。其他命令可以被传输到集线器1530或PPU 1500的其他单元,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,I/O单元1505被配置为在PPU1500的各种逻辑单元之间路由通信。
在实施例中,由主机处理器执行的程序在缓冲区中编码指令流,该缓冲区向PPU1500提供工作负载以进行处理。工作负载可以包括几个指令和要由这些指令处理的数据。缓冲区是存储器中的区域,该区域可由主机处理器和PPU 1500二者访问(例如,读/写)。例如,I/O单元1505可以被配置为经由通过互连1502传输的存储器请求访问连接到互连1502的系统存储器中的缓冲区。在实施例中,主机处理器将命令流写入缓冲区,然后将命令流的起点的指针传输给PPU 1500。前端单元1515接收指向一个或更多个命令流的指针。前端单元1515管理一个或更多个流,从流中读取命令并将命令转发给PPU 1500的各个单元。
前端单元1515被耦合到调度器单元1520,该调度器单元配置各种GPC 1550以处理由一个或更多个流定义的任务。调度器单元1520被配置为追踪与由调度器单元1520管理的各种任务相关的状态信息。该状态可以指示任务被指派到哪个GPC 1550,该任务是活动的还是不活动的,与该任务相关联的优先级,等等。调度器单元1520管理一个或更多个GPC1550上的多个任务的执行。
调度器单元1520被耦合到工作分配单元1525,该工作分配单元被配置为在GPC1550上分派任务以执行。工作分配单元1525可以追踪从调度器单元1520收到的多个预定任务。在实施例中,工作分配单元1525为每个GPC 1550管理待定任务池和活动任务池。待定任务池可以包括包含被分配到由特定GPC 1550处理的任务的多个槽(例如,32个槽)。活动任务池可包括多个槽(例如,4个槽),用于正在由GPC 1550积极处理的任务。随着GPC 1550完成任务的执行,该任务被从GPC 1550的活动任务池中驱逐,并且从待定任务池中选择其他任务之一并安排在GPC 1550上执行。如果活动任务在GPC 1550上一直处于空闲状态,例如在等待数据依赖被解决的时候,则活动任务可以从GPC 1550中被驱逐并返回到待定任务池中,同时待定任务池中的另一个任务被选择并安排在GPC 1550上执行。
工作分配单元1525通过XBar 1570与一个或更多个GPC 1550进行通信。XBar 1570是将PPU 1500的许多单元耦合到PPU 1500的其他单元的互连网络。例如,XBar 1570可以被配置为将工作分配单元1525耦合到特定的GPC 1550。尽管没有明确示出,PPU 1500的一个或更多个其他单元也可以通过集线器1530连接到XBar 1570。
任务由调度器单元1520管理并由工作分配单元1525分派给GPC1550。GPC 1550被配置为处理该任务并产生结果。该结果可由GPC 1550内的其他任务消耗,通过XBar 1570路由到不同的GPC 1550,或存储在存储器1504中。结果可以通过分区单元1580写入存储器1504,分区单元实现了存储器接口,用于向/从存储器1504读写数据。结果可以通过NVLink1510传输到另一个PPU 1504或CPU。在实施例中,PPU 1500包括U个分区单元1580,该数量等于耦合到PPU 1500的独立和不同的存储器设备1504的数量。下面将结合图16B更详细地描述分区单元1580。
在实施例中,主机处理器执行驱动内核,该驱动内核实现应用编程接口(API),使在主机处理器上执行的一个或更多个应用程序能够调度在PPU 1500上执行的操作。在实施例中,多个计算应用程序由PPU 1500同时执行,PPU 1500为多个计算应用程序提供隔离、服务质量(QoS)和独立地址空间。应用程序可以生成指令(例如,API调用),导致驱动内核生成一个或更多个任务供PPU 1500执行。驱动器内核将任务输出到正在由PPU 1500处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,在此称为线程束。在实施例中,线程束包括可并行执行的32个相关线程。
图16A示出了根据一个实施例的图15的PPU 1500的GPC 1550。如图16A所示,每个GPC 1550包括用于处理任务的若干硬件单元。在实施例中,每个GPC 1550包括管线管理器1610,预光栅操作单元(PROP)1615,光栅引擎1625,工作分配交叉杆(WDX)1680,存储器管理单元(MMU)1690,和一个或更多个数据处理集群(DPC)1620。可以理解的是,图16A的GPC1550可以包括其他硬件单元以代替或补充图16A所示的单元。
在一个实施例中,GPC 1550的操作由管线管理器1610控制。管线管理器1610管理一个或更多个DPC 1620的配置以处理分配给GPC 1550的任务。在实施例中,管线管理器1610可以配置一个或更多个DPC 1620中的至少一个以实现图形渲染管线、神经网络和/或计算管线的至少一部分。例如,关于图形渲染管线,DPC 1620可以被配置为在可编程流多处理器(SM)1640上执行顶点着色器程序。管线管理器1610也可以被配置为将从工作分配单元1525收到的分组路由到GPC 1550内的适当逻辑单元。例如,一些分组可以被路由到PROP1615和/或光栅引擎1625中的固定功能硬件单元,而其他分组可以被路由到DPC 1620以便由图元引擎1635或SM 1640处理。
PROP单元1615被配置为将由光栅引擎1625和DPC 1620产生的数据路由到光栅操作(ROP)单元,如结合图16B更详细地描述的。PROP单元1615也可以被配置为执行用于颜色混合的优化,组织像素数据,执行地址转换等。
包括在GPC 1550中的每个DPC 1620包括M-管线控制器(MPC)1630、图元引擎1635和一个或更多个SM 1640。MPC 1630控制DPC 1620的操作,将从管线管理器1610收到的分组路由到DPC 1620的适当单元。例如,与顶点相关联的分组可以被路由到图元引擎1635,其被配置为从存储器1504中获取与顶点相关联的顶点属性。相反,与着色器程序相关联的分组可以被传输到SM 1640。
SM 1640包括可编程流处理器,其被配置为处理由若干线程表示的任务。每个SM1640是多线程的,并被配置为并发地执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,SM 1640实现了SIMD(单指令、多数据)架构,其中一组线程(例如,线程束)中的每个线程被配置为基于相同的指令集处理不同的数据集。线程组中的所有线程执行相同的指令。在另一个实施例中,SM 1640实现了SIMT(单指令、多线程)架构,其中线程组中的每个线程被配置为基于同一组指令处理不同的数据集,但线程组中的单个线程在执行期间允许发散。在实施例中,为每个线程束保持程序计数器、调用堆栈和执行状态,当线程束内的线程发生发散时,实现线程束之间的并发和线程束内的串行执行。在另一个实施例中,为每个单独的线程维护程序计数器、调用堆栈和执行状态,使所有线程之间、线程束内和线程束之间的并发性相等。当为每个单独的线程维护执行状态时,执行相同指令的线程可以被收敛并并行执行以获得最大效率。下面将结合图17更详细地描述SM 1640。
MMU 1690在GPC 1550和分区单元1580之间提供接口。MMU 1690可提供将虚拟地址转换为物理地址、存储器保护和存储器请求的仲裁。在实施例中,MMU 1690提供一个或更多个转换旁观缓冲区(TLB),用于执行虚拟地址到存储器1504中的物理地址的转换。
图16B示出了根据实施例的图15的PPU 1500的存储器分区单元1580。如图16B所示,存储器分区单元1580包括光栅操作(ROP)单元1650、二级(L2)高速缓存1660和存储器接口1670。存储器接口1670与存储器1504耦合在一起。存储器接口1670可以实现32位、64位、128位、1024位数据总线,或类似的,用于高速数据传输。在一个实施例中,PPU 1500集成了U个存储器接口1670,每对分区单元1580有一个存储器接口1670,其中每对分区单元1580连接到对应的存储器设备1504。例如,PPU 1500可以连接到多达Y个存储器设备1504,例如高带宽存储器堆栈或图形双数据率、版本5、同步动态随机存取存储器,或其他类型的持久性存储。
在实施例中,存储器接口1670实现了HBM2存储器接口,并且Y等于U的一半。在实施例中,HBM2存储器堆栈位于与PPU 1600相同的物理封装上,与传统的GDDR5 SDRAM系统相比,提供大量的功率和区域节省。在实施例中,每个HBM2堆栈包括四个存储器裸片,Y等于4,HBM2堆栈包括每个裸片的两个128位通道,总共8个通道,数据总线宽度为1024位。
在实施例中,存储器1504支持单错纠错双错检测(SECDED)纠错码(ECC)以保护数据。ECC为对数据损坏敏感的计算应用提供更高的可靠性。可靠性在大规模集群计算环境中尤其重要,在这种环境中,PPU 1500处理非常大的数据集和/或长时间运行应用程序。
在实施例中,PPU 1500实现了多级存储器层次结构。在实施例中,存储器分区单元1580支持统一的存储器,以便为CPU和PPU 1500存储器提供单一的统一的虚拟地址空间,实现虚拟存储器系统之间的数据共享。在实施例中,追踪PPU 1500对位于其他处理器上的存储器的访问频率,以确保存储器页被移动到访问页更频繁的PPU 1500的物理存储器。在实施例中,NVLink 1510支持地址转换服务,允许PPU 1500直接访问CPU的页表并提供PPU1500对CPU存储器的完全访问。
在实施例中,复制引擎在多个PPU 1000之间或PPU 1500和CPU之间传输数据。复制引擎可以为未映射到页表的地址产生页故障。然后,存储器分区单元1580可以为页故障提供服务,将地址映射到页表中,之后复制引擎可以执行传输。在传统系统中,针对用于多个处理器之间的多个复制引擎操作,存储器被钉住(例如,不可翻页),这大大减少了可用存储器。通过硬件页故障,可以将地址传递给复制引擎,而不必担心存储器页是否驻留,并且复制过程是透明的。
来自存储器1504或其他系统存储器的数据可以由存储器分区单元1580取回并存储在L2高速缓存1660中,该高速缓存位于片上并在各个GPC 1550之间共享。如所示,每个存储器分区单元1580包括与对应的存储器设备1504相关联的L2高速缓存1660的一部分。然后,较低级别的缓存可以在GPC 1550内的各种单元中实现。例如,每个SM 1640可以实现一级(L1)高速缓存。L1高速缓存是专用于特定SM 1640的私有存储器。来自L2高速缓存1660的数据可以被取回并存储在每个L1高速缓存中,以便在SM 1640的功能单元中处理。L2高速缓存1660被耦合到存储器接口1670和XBar 1570。
ROP单元1650执行与像素颜色相关的图形光栅操作,例如颜色压缩、像素混合等。ROP单元1650还与光栅引擎1625一起实现深度测试,从光栅引擎1625的剔除引擎接收与像素片段相关联的样本位置的深度。该深度与深度缓冲区中与该片段相关联的采样位置的对应深度进行测试。如果该片段通过了针对样本位置的深度测试,则ROP单元1650更新深度缓冲区,并将深度测试的结果传输给光栅引擎1625。可以理解的是,分区单元1580的数量可以与GPC 1550的数量不同,因此,每个ROP单元1650可以耦合到每个GPC 1550。ROP单元1650追踪从不同的GPC 1550收到的分组,并确定由ROP单元1650产生的结果通过Xbar 1570被路由到哪个GPC1550。尽管在图16B中ROP单元1650被包括在存储器分区单元1580内,在其他实施例中,ROP单元1650可以在存储器分区单元1580之外。例如,ROP单元1650可以驻留在GPC1550或其他单元中。
图17示出了根据实施例的图16A的流式多处理器1640。如图17所示,SM 1640包括指令高速缓存1705、一个或更多个调度器单元1710、寄存器文件1720、一个或更多个处理核心1750、一个或更多个特殊功能单元(SFU)1752、一个或更多个加载/存储单元(LSU)1754、互连网络1780、共享存储器/L1缓存1770。
如上所述,工作分配单元1525分派任务以在PPU 1500的GPC 1550上执行。任务被分配到GPC 1550内的特定DPC 1620,并且如果任务与着色器程序相关联,则任务可被分配到SM 1640。调度器单元1710从工作分配单元1525接收任务并管理指派给SM 1640的一个或更多个线程块的指令调度。调度器单元1710将线程块作为并行线程的线程束来调度执行,其中每个线程块由至少一个线程束组成。在实施例中,每个线程束包括32个线程。调度器单元1710可以管理多个不同的线程块,将不同的线程块分配到不同的线程束,然后在每个时钟周期内将指令从多个不同的合作组分派到各个功能单元(例如,核心1750、SFU1752和LSU1754)。
分派单元1715被配置为向一个或更多个功能单元传输指令。在实施例中,调度器单元1710包括两个分派单元1715,使来自同一线程束的两个不同指令在每个时钟周期内被分派。在替代实施例中,每个调度器单元1710可以包括单个分派单元1715或附加分派单元1715。
每个SM 1640包括寄存器文件1720,其为SM 1640的功能单元提供一组寄存器。在实施例中,寄存器文件1720在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件1720的专用部分。在另一个实施例中,寄存器文件1720在被SM 1640执行的不同线程束之间划分。寄存器文件1720为连接到功能单元的数据路径的操作数提供临时存储。
每个SM 1640包括多个处理核心1750。在一个实施例中,SM 1640包括大量(例如,128等)不同的处理核心1750。每个核心1750可以包括全管线、单精度、双精度和/或混合精度处理单元,其中包括浮点算术逻辑单元和整数算术逻辑单元。在实施例中,浮点算术逻辑单元实现了IEEE754-2008的浮点算术标准。
张量核心被配置为执行矩阵运算,并且在实施例中,一个或更多个张量核心被包括在核心1750中。特别是,张量核心被配置为执行深度学习矩阵运算,例如用于神经网络训练和推理的卷积运算。在实施例中,每个张量核心对4x4矩阵进行操作,并执行矩阵乘法和累积操作D=AxB+C,其中A、B、C和D是4x4矩阵。
在实施例中,矩阵乘法输入A和B是16位浮点矩阵,而累积矩阵C和D可以是16位浮点或32位浮点矩阵。张量核心对带有32位浮点累积的16位浮点输入数据进行操作。16位浮点乘法需要64次操作,并产生全精度乘积,然后用32位浮点加法与其他中间乘积进行4x4x4矩阵乘法的累积。在实践中,张量核心被用来执行更大的二维或更高维度的矩阵操作,由这些较小的元素建立起来。API,如CUDA C++API,提供了专门的矩阵加载、矩阵乘法和累积以及矩阵存储操作,以便从CUDA-C++程序中高效地使用Tensor核心。在CUDA层面,线程束级接口假定16x16大小的矩阵横跨线程束的所有32个线程。
在一些实施例中,转置硬件包括在处理核心1750或另一功能单元(例如,SFU 1752或LSU 1754)中,并被配置为生成由对角线存储的矩阵数据和/或从由对角线存储的矩阵数据生成原始矩阵和/或转置矩阵。转置硬件可以在共享存储器1770内部提供给SM 1640的注册文件1720加载路径。
在一个示例中,由对角线存储的矩阵数据可以从DRAM取回并存储在共享存储器1770中。随着使用由对角线存储的矩阵数据执行处理的指令被处理,布置在共享存储器1770和寄存器文件1720的路径中的转置硬件可以提供原始矩阵、转置矩阵、压缩的原始矩阵和/或压缩的转置矩阵。直到指令前的最后一次存储,可以保持由对角线存储的单一矩阵数据,并且由指令指定的矩阵类型在寄存器文件1720中根据需要生成。
每个SM 1640还包括多个SFU 1752,其执行特殊功能(例如,属性评估、倒数平方根等)。在实施例中,SFU 1752可以包括被配置为遍历分层树数据结构的树形遍历单元(例如,TTU 1643)。在实施例中,SFU 1752可以包括纹理单元(例如,纹理单元1642),配置为执行纹理图过滤操作。在实施例中,纹理单元被配置为从存储器1504加载纹理图(例如,纹理的2D阵列),并对纹理图进行采样,以产生采样纹理值,用于由SM 1640执行的着色器程序。在实施例中,纹理图被存储在共享内存/L1高速缓存1670中。纹理单元实现纹理操作,如使用mip-map(例如,不同细节水平的纹理图)的过滤操作。在实施例中,每个SM 1640包括两个纹理单元。
每个SM 1640还包括多个LSU 1754,其在共享存储器/L1高速缓存1770和寄存器文件1720之间实现加载和存储操作。每个SM 1640包括互连网络1780,其将每个功能单元连接到寄存器文件1720,并且将LSU 1754连接到寄存器文件1720、共享存储器/L1高速缓存1770。在实施例中,互连网络1780是交叉杆,其可被配置为将任何功能单元连接到寄存器文件1720中的任何寄存器并将LSU 1754连接到寄存器文件1720和共享存储器/L1高速缓存1770中的存储器位置。
共享存储器/L1高速缓存1770是片上存储器的阵列,其允许SM 1640和图元引擎1635之间以及SM 1640中的线程之间的数据存储和通信。在实施例中,共享存储器/L1高速缓存1770包括128KB的存储容量,并处于从SM 1640到分区单元1580的路径中。共享存储器/L1高速缓存1770可用于缓存读和写。共享存储器/L1高速缓存1770、L2高速缓存1660和存储器1504中的一个或更多个是后备存储。
将数据高速缓存和共享存储器功能结合到单个存储器块中,为两种类型的存储器访问提供最佳的整体性能。该容量可被不使用共享存储器的程序作为缓存使用。例如,如果共享存储器被配置为使用一半的容量,纹理和加载/存储操作可以使用剩余的容量。在共享存储器/L1高速缓存1770内的集成使共享存储器/L1高速缓存1770能够作为流化数据的高吞吐量管线,同时提供对经常重用的数据的高带宽和低延迟的访问。
在本公开的上下文中,SM或“流式多处理器”是指如USP7,447,873对Nordquist所述的架构的处理器,包括其改进和进步,并且例如在许多代NVIDIA GPU中实现。例如,SM可以包括多个处理引擎或核心,其被配置为并发地执行布置在多个单指令多数据(SIMD)组(例如线程束)中的多个线程,其中SIMD组中相同的线程执行由不同输入对象上的指令序列组成的相同数据处理程序,而SIMD组中相同的线程使用不同的处理引擎或核心执行。SM通常还可以提供(a)具有多个通道的本地寄存器文件,其中每个处理引擎或核心被配置为访问通道的不同子集;以及指令发布逻辑,被配置为选择SIMD组之一并将同一数据处理程序的指令之一并行地发布给多个处理引擎中的每一个,其中每个处理引擎使用其可访问的本地寄存器文件通道的子集与其他处理引擎并行地执行同一指令。SM通常进一步包括核心接口逻辑,其被配置为启动一个或更多个SIMD组的执行。如图所示,这种SM被构造成提供快速的本地共享存储器,使数据共享/重用和在SM上执行的CTA的所有线程之间同步。
当配置为通用的并行计算时,与图形处理相比,可以使用更简单的配置。具体而言,图16A中所示的固定功能的图形处理单元被绕过,这创建了更简单的编程模型。在通用并行计算配置中,工作分配单元1525直接向DPC 1620指派和分发线程块。块中的线程执行相同的程序,在计算中使用唯一的线程ID以确保每个线程产生唯一的结果,使用SM 1640执行程序并进行计算,使用共享存储器/L1高速缓存1770在线程之间进行通信,使用LSU 1754通过共享存储器/L1高速缓存1770和存储器分区单元1580读写全局存储器。当配置为通用并行计算时,SM 1640也可以写入调度器单元1520可以用来启动DPC 1620上的新工作的命令。
PPU 1500可以包括在台式计算机、笔记本电脑、平板计算机、服务器、超级计算机、智能手机(例如,无线、手持设备)、个人数字助理(PDA)、数字相机、车辆、头戴式显示器、手持电子设备等中。在实施例中,PPU1500体现在单个半导体衬底上。在另一个实施例中,PPU1500与一个或更多个其他装置,例如额外的PPU 1500、存储器1504、简化指令集计算机(RISC)CPU、存储器管理单元(MMU)、数模转换器(DAC)等一起被包括在系统芯片(SoC)中。
在一个实施例中,PPU 1500可以被包括在包括一个或更多个存储器装置1504的图形卡上。图形卡可以被配置为与台式计算机的主板上的PCIe插槽连接。在另一个实施例中,PPU 1500可以是包括在主板芯片组中的集成图形处理单元(iGPU)或并行处理器。
示例性计算系统
随着开发人员在人工智能计算等应用中暴露和利用更多的并行性,具有多个GPU和CPU的系统被应用于各种行业。具有几十到几千个计算节点的高性能GPU加速系统被部署在数据中心、研究机构和超级计算机中,以解决越来越大的问题。随着高性能系统内的处理设备的数量增加,通信和数据传输机制需要扩展以支持增加的带宽。
图18A是根据实施例的使用图15的PPU 1500实现的处理系统1800的概念图。该示例性系统1800可以被配置为实现本申请中公开的方法。处理系统1800包括CPU 1830、交换机1855和多个PPU 1500各自和各自的存储器1504。NVLink 1510在每个PPU 1500之间提供高速通信链接。尽管在图18A中说明了NVLink 1510和互连1502的特定数量的连接,但每个PPU 1500和CPU 1830的连接数量可能有所不同。交换机1855在互连1502和CPU 1830之间进行接口。PPU 1500、存储器1504和NVLinks 1510可以位于单个半导体平台上,以形成并行处理模块1825。在实施例中,交换机1855支持两个或更多个协议,以在各种不同的连接和/或链接之间进行接口。
在另一个实施例(未示出)中,NVLink 1510在每个PPU 1000和CPU1830之间提供一个或更多个高速通信链路,并且交换机1855在互连1502和每个PPU 1500之间接口。PPU1500、存储器1504和互连1502可以位于单个半导体平台上,以形成并行处理模块1825。在另一个实施例中(未示出),互连1502在每个PPU 1500和CPU 1830之间提供一个或更多个通信链路,并且交换机1855在每个PPU 1000之间使用NVLink 1510进行接口,以在PPU 1500之间提供一个或更多个高速通信链路。在另一个实施例中(未显示),NVLink 1510通过交换机1855在PPU 1500和CPU 1830之间提供一个或更多个高速通信链路。在另一个实施例中(未显示),互连1502直接在每个PPU 1500之间提供一个或更多个通信链接。一个或更多个NVLink 1510高速通信链路可以实现为物理NVLink互连或使用与NVLink 1510相同协议的芯片上或裸片上互连。
在本描述的上下文中,单个半导体平台可以指在裸片或芯片上制造的唯一的基于半导体的单元集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接性的多芯片模块,其模拟片上操作,并比利用传统的总线实现有实质性的改进。当然,各种电路或设备也可以根据用户的愿望,分别位于半导体平台或各种组合中。另外,并行处理模块1825可以作为电路板基板来实现,每个PPU1500和/或存储器1504可以是封装的器件。在实施例中,CPU 1830、交换机1855和并行处理模块1825位于单个半导体平台上。
在实施例中,每个NVLink 1510的信令速率为20至25吉比特/秒,并且每个PPU1500包括六个NVLink 1510接口(如图18A所示,每个PPU1500包括五个NVLink 1510接口)。每个NVLink 1510在每个方向提供25千兆字节/秒的数据传输率,六个链路提供1500千兆字节/秒。如图18A所示,NVLinks 1510可以完全用于PPU-to-PU的通信,或者当CPU 1830也包括一个或更多个NVLink 1510接口时,用于PPU-to-PU和PPU-to-CPU的一些组合。
在实施例中,NVLink 1510允许从CPU 1830直接加载/存储/原子访问到每个PPU的1500存储器1504。在实施例中,NVLink 1510支持一致性操作,允许从存储器1504读取的数据存储在CPU 1830的高速缓存层次结构中,这减少了CPU 1830的高速缓存访问延时。在实施例中,NVLink1510包括对地址转换服务(ATS)的支持,允许PPU 1500直接访问CPU1830内的页表。一个或更多个NVLinks 1510也可被配置为在低功耗模式下运行。
图18B示出了示例性系统1865,在该系统中可以实现前面各种实施例的各种架构和/或功能。示例性系统1865可以被配置为实现本申请中公开的方法。
如图所示,提供的系统1865包括连接到通信总线1875的至少一个中央处理单元1830。通信总线1875可以使用任何合适的协议实现,例如PCI(外围组件互联)、PCI-Express、AGP(加速图形端口)、超级传输(HyperTransport)或任何其他总线或点对点通信协议。该系统1865还包括主存储器1840。控制逻辑(软件)和数据存储在主存储器1840中,它可以采取随机存取存储器(RAM)的形式。
系统1865还包括输入设备1860、并行处理系统1825和显示设备1845,例如传统的CRT(阴极光线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器或类似物。用户输入可以从输入设备1860接收,例如,键盘、鼠标、触摸板、麦克风等。上述每个模块和/或设备甚至可以位于单个半导体平台上以形成系统1865。另外,各种模块也可以根据用户的愿望分别位于半导体平台上或在各种组合中。
进一步地,系统1865可以通过网络接口1835耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)例如互联网、对等网络、有线网络或类似的网络)以用于通信目的。
系统1865还可以包括二级存储(未显示)。辅助存储包括例如硬盘驱动器和/或可移除存储驱动器,代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入。
计算机程序或计算机控制逻辑算法可以存储在主存储器1840和/或二级存储中。这样的计算机程序,当被执行时,使系统1865能够执行各种功能。存储器1840、存储和/或任何其他存储是计算机可读介质的可能例子。
前面各图的结构和/或功能可以在一般计算机系统、电路板系统、专用于娱乐的游戏机系统、特定应用系统和/或任何其他所需系统的上下文中实现。例如,系统1865可以采取台式计算机、笔记本电脑、平板电脑、服务器、超级计算机、智能手机(例如,无线、手持设备)、个人数字助理(PDA)、数码相机、车辆、头戴显示器、手持电子设备、移动电话设备、电视、工作站、游戏机、嵌入式系统和/或任何其他类型的逻辑的形式。
应用程序可以通过由主机处理器(例如CPU)执行的应用程序来实现。在实施例中,设备驱动器可以实现应用编程接口(API),该接口定义了可由应用程序利用的各种功能,以便生成用于显示的图形数据。设备驱动程序是软件程序,包括多个控制PPU 1500操作的指令。API为程序员提供了抽象,让程序员利用专门的图形硬件,如PPU 1500,来生成图形数据,而不要求程序员利用PPU 1500的特定指令集。该应用程序可以包括被路由到PPU 1500的设备驱动程序的API调用。设备驱动程序解释该API调用,并执行各种操作以响应该API调用。在某些情况下,设备驱动程序可以通过在CPU上执行指令来执行操作。在其他情况下,设备驱动程序可以通过利用CPU和PPU 1500之间的输入/输出接口在PPU 1500上启动操作,至少部分地执行操作。在实施例中,设备驱动器被配置为利用PPU 1500的硬件来实现图形处理管线。
可以在PPU 1500内执行各种程序,以实现应用程序的各个处理阶段。例如,设备驱动器可以在PPU 1500上启动内核以在一个SM 1640(或多个SM 1640)上执行一个阶段的处理。设备驱动程序(或由PPU 1500执行的初始内核)也可以在PPU 1500上启动其他内核以执行处理的其他阶段。如果应用程序处理包括图形处理管线,则图形处理管线的一些阶段可以在固定单元硬件上实现,例如在PPU 1500内实施的光栅器或数据组装器上实现。可以理解的是,来自内核的结果在被SM 1640上的后续内核处理之前,可以由一个或更多个介入的固定功能硬件单元处理。
应用本文公开的一种或更多种技术生成的图像可以显示在监视器或其他显示设备上。在一些实施例中,显示设备可以直接耦合到生成或渲染图像的系统或处理器。在其他实施例中,显示设备可以例如经由网络间接地耦合到系统或处理器。此类网络的示例包括因特网、运动电信网络、WIFI网络以及任何其他有线和/或无线联网系统。当显示设备间接耦合时,由系统或处理器生成的图像可以通过网络流传输到显示设备。这种流传输允许例如在服务器上或在数据中心中执行渲染图像的例如视频游戏或其他应用程序,并且渲染的图像可以被传送到与服务器或数据中心物理上分离的一个或更多个用户设备(例如计算机、视频游戏控制台、智能手机、其他移动设备等)上并在其上显示。因此,本文公开的技术可以应用于增强流传输的图像并增强流传输图像的服务,例如NVIDIA GeForce Now(GFN)、Google Stadia等。
此外,应用本文公开的一种或更多种技术生成的图像可以用于训练、测试或证明用于识别现实世界中的对象和环境的深度神经网络(DNN)。这样的图像可以包括道路、工厂、建筑物、城市环境、农村环境、人类、动物以及任何其他物理对象或真实世界环境的场景。这样的图像可以用于训练、测试或认证在机器或机器人中使用的DNN,以操纵、处理或修改现实世界中的物理对象。此外,此类图像可用于训练、测试或认证在自主车辆中使用的DNN,以在现实世界中导航和移动车辆。另外,应用本文公开的一种或更多种技术生成的图像可以用于向这些机器、机器人和车辆的用户传达信息。
此外,应用本文公开的一种或更多种技术生成的图像可用于显示或传达关于虚拟环境的信息,例如元宇宙、全宇宙(Omniverse)或真实环境的数字孪生体。此外,应用本文公开的一种或更多种技术生成的图像可用于在各种设备上显示或传达信息,包括个人计算机(例如笔记本电脑)、物联网(IoT)设备、手持设备(例如智能手机)、车辆、机器人或任何包括显示器的设备。
此处引用的所有专利、专利申请和出版物均通过引用而并入,以达到所有目的,如同明确规定的那样。
如同明确提出一样,以上引用的所有专利和出版物均以引用方式并入。尽管已经结合当前被认为是最实际和优选的实施例描述了本发明,但是应当理解,本发明不限于所公开的实施例,相反,本发明旨在覆盖包括在所附权利要求书的精神和范围内的各种修改和等同布置。

Claims (19)

1.一种光线追踪加速硬件设备,包括:
存储器,其被配置为存储加速结构AS的至少部分,所述加速结构至少包括(a)几何体AS、(b)实例AS、以及(c)从所述实例AS的第一节点到所述几何体AS的第二节点的映射,其中所述第一节点包括第一数值精度的包围参数,并且所述第二节点包括不同于所述第一数值精度的第二数值精度的包围参数;
光线存储,其被配置为存储表示用于遍历所述AS的光线的数据;
相交检测电路,其被配置为执行以下操作,所述操作包括:
确定所述光线是否与所述第一节点相交;以及
一旦确定所述光线与所述第一节点相交,进一步确定所述光线是否与所述第二节点相交;以及
遍历电路,其被配置用于通过以下方式遍历所述AS:
基于确定所述光线是否与所述第一节点相交来确定是否遍历所述第二节点,并且当确定所述光线与所述第一节点相交时,继续沿着包括所述第二节点的路径进行遍历,或者当确定所述光线不与所述第一节点相交时,从进一步的遍历中剔除所述第二节点。
2.根据权利要求1所述的光线追踪加速硬件设备,其中所述相交检测电路包括第一相交电路和第二相交电路,所述第一相交电路被配置为在所述第一数值精度下操作,所述第二相交电路被配置为在所述第二数值精度下操作,并且其中所述第一相交电路被配置为执行确定所述光线是否与所述第一节点相交,以及所述第二相交电路被配置为执行确定所述光线是否与所述第二节点相交。
3.根据权利要求2所述的光线追踪加速硬件设备,其中所述第二相交电路进一步被配置为确定所述光线是否与一组几何元素中包括的几何图元相交。
4.根据权利要求1所述的光线追踪加速硬件设备,其中所述第一数值精度的包围参数和所述第二数值精度的包围参数两者都涵盖同一组几何元素,所述一组几何元素被表示为所述几何体AS中的叶节点。
5.根据权利要求1所述的光线追踪加速硬件设备,其中所述第一节点进一步包括所述第一数值精度的包围参数对第一包围盒是有效的指示。
6.根据权利要求1所述的光线追踪加速硬件设备,其中所述第一节点是实例节点并进一步包括变换信息。
7.根据权利要求6所述的光线追踪加速硬件设备,其被配置为与确定所述光线是否与由所述第一数值精度的包围参数定义的第一包围盒相交基本上并行地执行根据所述变换信息对所述光线的变换。
8.根据权利要求1所述的光线追踪加速硬件设备,其中由所述第一数值精度的所述包围参数定义的第一包围盒和由所述第二数值精度的所述包围参数定义的第二包围盒是轴对齐的包围盒AABB。
9.根据权利要求1所述的光线追踪加速硬件设备,其中确定所述光线是否与所述第一节点相交包括:基于所述光线和所述第一数值精度的包围参数执行平板测试,并且确定所述光线是否与所述第二节点相交包括:基于所述光线和所述第二数值精度的包围参数执行所述平板测试。
10.根据权利要求9所述的光线追踪加速硬件设备,其中确定所述光线是否与所述第二节点相交包括:在向所述光线添加膨胀的情况下执行所述平板测试,并且确定所述光线是否与所述第一节点相交包括:在没有向所述光线添加膨胀的情况下执行所述平板测试。
11.根据权利要求1所述的光线追踪加速硬件设备,其中所述第二节点是所述几何体AS的根节点。
12.根据权利要求1所述的光线追踪加速硬件设备,被配置为:
基于所述光线,确定所述第二数值精度的包围参数是否退化为点;
当设置了与所述第二节点相对应的点剔除指示符并且确定所述第二数值精度的包围参数退化为点时,从所述遍历中剔除所述第二节点;或者
当未设置所述点剔除指示符或确定所述第二数值精度的包围参数未退化为点时,继续在包括所述第二节点的路径中进行所述遍历。
13.根据权利要求1所述的光线追踪加速硬件设备,进一步包括光线管理电路,其被配置为基于所述光线与由所述第一数值精度的包围参数定义的第一包围盒或由所述第二数值精度的包围参数定义的第二包围盒之一的最小相交点来调整所述光线的原点,
其中所述相交检测电路进一步被配置为:在执行确定所述光线是否与所述第二节点相交时,执行第一光线-盒相交测试,以基于经调整的原点来检测所述光线是否与所述第二包围盒相交。
14.根据权利要求13所述的光线追踪加速硬件设备,进一步包括光线管理电路,其被配置用于存储来自确定所述光线是否与所述第一节点相交的第一值,以及用于提供所存储的第一值作为用于调整所述光线的所述原点的所述最小相交点。
15.一种光线追踪加速方法,包括:
在存储器中访问加速结构AS,所述加速结构至少包括(a)几何体AS、(b)实例AS、以及(c)从所述实例AS的第一节点到所述几何体AS的第二节点的映射,其中所述第一节点包括第一数值精度的包围参数,并且所述第二节点包括不同于所述第一数值精度的第二数值精度的包围参数;
在存储中访问表示用于遍历所述AS的光线的数据;
确定所述光线是否与所述第一节点相交;以及
在确定所述光线与所述第一节点相交后,确定所述光线是否与所述第二节点相交;以及
遍历电路,其被配置用于通过以下方式遍历所述AS:
基于确定所述光线是否与所述第一节点相交来确定是否遍历所述第二节点,并且当确定所述光线与所述第一节点相交时,继续沿着包括所述第二节点的路径进行遍历,或者当确定所述光线不与所述第一节点相交时,从进一步的遍历中剔除所述第二节点。
16.根据权利要求15所述的光线追踪加速方法,其中所述第一节点是实例节点,并且所述方法进一步包括:
与确定所述光线是否与所述第一节点相交基本上并行地执行根据所述实例节点中的变换信息对所述光线的变换。
17.根据权利要求15所述的光线追踪加速方法,进一步包括:
基于所述光线,确定所述第二数值精度的包围参数是否退化为点;
当设置了与所述第二节点相对应的点剔除指示符并且确定所述第二数值精度的包围参数退化为点时,从所述遍历中剔除所述第二节点;或者
当未设置所述点剔除指示符或确定所述第二数值精度的包围参数未退化为点时,继续在包括所述第二节点的路径中进行所述遍历。
18.根据权利要求15所述的光线追踪加速方法,进一步包括:
基于所述光线与由所述第一数值精度的包围参数定义的第一包围盒或由所述第二数值精度的包围参数定义的第二包围盒之一的最小相交点来调整所述光线的原点,
其中确定所述光线是否与所述第二节点相交包括执行第一光线-盒相交测试,以基于经调整的原点来检测所述光线是否与所述第二包围盒相交。
19.根据权利要求18所述的光线追踪加速方法,进一步包括:
存储来自确定所述光线是否与所述第一节点相交的第一值,
其中基于所述光线与所述第一包围盒或所述第二包围盒之一的最小相交点来调整所述光线的原点包括:使用所存储的第一值作为用于所述调整的所述最小相交点。
CN202310103242.2A 2022-09-16 2023-01-30 减少包围体层次结构中的假阳性光线遍历 Pending CN117726732A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/946,093 US20240095993A1 (en) 2022-09-16 2022-09-16 Reducing false positive ray traversal in a bounding volume hierarchy
US17/946,093 2022-09-16

Publications (1)

Publication Number Publication Date
CN117726732A true CN117726732A (zh) 2024-03-19

Family

ID=90062525

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310103242.2A Pending CN117726732A (zh) 2022-09-16 2023-01-30 减少包围体层次结构中的假阳性光线遍历

Country Status (3)

Country Link
US (1) US20240095993A1 (zh)
CN (1) CN117726732A (zh)
DE (1) DE102023124837A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230154101A1 (en) * 2021-11-16 2023-05-18 Disney Enterprises, Inc. Techniques for multi-view neural object modeling

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US1689898A (en) 1927-06-13 1928-10-30 Jr Joel Smith Vehicle tire rim
US7447873B1 (en) 2005-11-29 2008-11-04 Nvidia Corporation Multithreaded SIMD parallel processor with loading of groups of threads
US9552664B2 (en) 2014-09-04 2017-01-24 Nvidia Corporation Relative encoding for a block-based bounding volume hierarchy
US10235338B2 (en) 2014-09-04 2019-03-19 Nvidia Corporation Short stack traversal of tree data structures
US10885698B2 (en) 2018-08-10 2021-01-05 Nvidia Corporation Method for programmable timeouts of tree traversal mechanisms in hardware
US10580196B1 (en) 2018-08-10 2020-03-03 Nvidia Corporation Method for continued bounding volume hierarchy traversal on intersection without shader intervention
US11157414B2 (en) 2018-08-10 2021-10-26 Nvidia Corporation Method for efficient grouping of cache requests for datapath scheduling
US10825230B2 (en) 2018-08-10 2020-11-03 Nvidia Corporation Watertight ray triangle intersection
US11138009B2 (en) 2018-08-10 2021-10-05 Nvidia Corporation Robust, efficient multiprocessor-coprocessor interface
US10740952B2 (en) 2018-08-10 2020-08-11 Nvidia Corporation Method for handling of out-of-order opaque and alpha ray/primitive intersections
US10867429B2 (en) 2018-08-10 2020-12-15 Nvidia Corporation Query-specific behavioral modification of tree traversal
US11282261B2 (en) 2020-06-10 2022-03-22 Nvidia Corporation Ray tracing hardware acceleration with alternative world space transforms
US11302056B2 (en) 2020-06-10 2022-04-12 Nvidia Corporation Techniques for traversing data employed in ray tracing

Also Published As

Publication number Publication date
DE102023124837A1 (de) 2024-03-21
US20240095993A1 (en) 2024-03-21

Similar Documents

Publication Publication Date Title
US11704863B2 (en) Watertight ray triangle intersection
US11645810B2 (en) Method for continued bounding volume hierarchy traversal on intersection without shader intervention
US11790595B2 (en) Method for handling of out-of-order opaque and alpha ray/primitive intersections
US11182649B2 (en) Generation of synthetic images for training a neural network model
US11804000B2 (en) Query-specific behavioral modification of tree traversal
US11966737B2 (en) Robust, efficient multiprocessor-coprocessor interface
CN113808241B (zh) 共享顶点的射线追踪图元的硬件加速
US20230084570A1 (en) Accelerating triangle visibility tests for real-time ray tracing
CN113822788B (zh) 光线追踪硬件中对资源的早期释放
US11010963B2 (en) Realism of scenes involving water surfaces during rendering
US20210027520A1 (en) Performance of ray-traced shadow creation within a scene
CN117726732A (zh) 减少包围体层次结构中的假阳性光线遍历
CN117726496A (zh) 使用光线剪裁减少假阳性光线遍历
US20240095994A1 (en) Reducing false positive ray traversal using point degenerate culling

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