CN113781625A - 适用于光线追踪的基于硬件的技术 - Google Patents

适用于光线追踪的基于硬件的技术 Download PDF

Info

Publication number
CN113781625A
CN113781625A CN202110648142.9A CN202110648142A CN113781625A CN 113781625 A CN113781625 A CN 113781625A CN 202110648142 A CN202110648142 A CN 202110648142A CN 113781625 A CN113781625 A CN 113781625A
Authority
CN
China
Prior art keywords
ray
bounding
primitive
intersection
box
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.)
Granted
Application number
CN202110648142.9A
Other languages
English (en)
Other versions
CN113781625B (zh
Inventor
G·穆特乐
J·伯吉斯
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 CN113781625A publication Critical patent/CN113781625A/zh
Application granted granted Critical
Publication of CN113781625B publication Critical patent/CN113781625B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/08Volume rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/005Tree description, e.g. octree, quadtree
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/10Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/12Bounding box

Landscapes

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

Abstract

本发明公开了适用于光线追踪的基于硬件的技术。包围体用于近似对象占用的空间。如果需要超过近似的更精确的了解,则检查对象本身以确定其占用的空间。通常,将简单的体(例如,轴对齐的盒)用作包围体,以近似对象占据的空间。但是对象可以是任意的、复杂的形状。因此,简单的体通常无法很好地适合对象。这导致在对象占据的空间的近似中包括了很多未被对象占据的空间。本文公开了基于硬件的技术,例如,用于有效地使用多个包围体(例如,轴对齐的包围盒)来有效地表示任意形状的包围体以更好地适合对象,以及用于使用此类任意包围体提高应用程序的性能,例如光线追踪。

Description

适用于光线追踪的基于硬件的技术
相关专利和申请的交叉引用
本申请与以下共同转让的美国专利和专利申请相关,其每一个的全部内容通过引用合并到本文中:
●2014年12月8日提交的、申请号为14/563,872、标题为“树数据结构的短堆栈遍历(Short Stack Traversal 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)”的美国专利;
●2015年6月11日提交的、申请号为14/737,343、标题为“几何图形数据的基于块的无损压缩(Block-Based Lossless Compression of Geometric Data)”的美国申请;
●申请号为16/101,066、标题为“用于在没有着色器干预的情况下,在相交上连续进行包围体层次结构遍历的方法(Method for Continued Bounding Volume HierarchyTraversal on Intersection Without Shader Intervention)”的美国专利申请;
●申请号为16/101,109、标题为“用于对数据路径调度的高速缓存请求进行有效分组的方法(Method for Efficient Grouping of Cache Requests for DatapathScheduling)”的美国专利申请;
●申请号为16/101,247、标题为“鲁棒的、高效的多处理器-协处理器接口(ARobust,Efficient Multiprocessor-Coprocessor Interface)”的美国专利申请;
●申请号为16/101,180、标题为“树遍历的查询特定的行为修改(Query-SpecificBehavioral Modification of Tree Traversal)”的美国专利申请;
●申请号为16/101,148、标题为“保守的水密光线三角形相交(ConservativeWatertight Ray Triangle Intersection)”的美国专利申请;
●申请号为16/101,196、标题为“处理乱序的不透明和阿尔法光线/图元相交的方法(Method for Handling Out-of-Order Opaque and Alpha Ray/PrimitiveIntersections)”的美国专利申请;和
●申请号为16/101,232、标题为“用于硬件中树遍历机制的前进和可编程超时的方法(Method for Forward Progress and Programmable Timeouts of Tree TraversalMechanisms in Hardware)”的美国专利申请;
技术领域
本技术涉及计算机图形,尤其涉及光线追踪器。更具体地,该技术涉及计算机图形处理(包括但不限于光线追踪)的硬件加速。本文的示例非限制性技术还涉及针对几何图形的有效的基于光线-图元宽complet的相交测试,该相交测试不能紧密地适合(fit)到单个轴对齐的包围盒。
背景技术和发明内容
在过去的30年中,实时计算机图形学取得了巨大的进步。随着1980年代开发了提供3D硬件图形管线的功能强大的图形处理单元(GPU),基于纹理贴图的多边形图元对用户输入实时响应地来产生3D图形显示成为可能。这种实时图形处理器基于被称为扫描变换光栅化的技术而构建,这是一种从单个点或角度确定可见性的方法。使用这种方法,可以从由几何图元(通常是多边形,例如三角形)构成的表面对三维对象建模。扫描变换过程建立图元多边形顶点并将其投影到视图平面上,并填充图元边缘内部的点。参见例如Foley、VanDam、Hughes等人,《计算机图形学:原理与实践》(Computer Graphics:Principles andPractice)(第2版Addison-Wesley 1995年和第3版Addison-Wesley 2014年)。
硬件长期以来一直用于确定应如何对每个多边形表面进行着色和纹理贴图,以及对着色的、纹理贴图的多边形表面进行光栅化以进行显示。典型的三维场景通常由数百万个多边形构成。快速的现代GPU硬件可以对用户输入实时响应地有效地处理每个显示帧(每1/30或1/60秒)的数百万个图形图元。所得的图形显示已用于各种实时图形用户界面,包括但不限于增强现实、虚拟现实、视频游戏和医学成像。但是传统上,这样的交互式图形硬件无法准确地对反射和阴影进行建模和描绘。
存在另一种图形技术,其确实执行了对于反射和阴影的物理上逼真的可见性确定。这称为“光线追踪”。光线追踪是指将光线投射到场景中,并确定该光线是否以及在何处与场景的几何形状相交。此基本光线追踪可见性测试是以计算机图形学中各种渲染算法和技术为基础的基本图元。光线追踪是在1960年代末开发的,并在1980年代得到了改进。参见,例如,Appel,“用于对固体的机器渲染进行着色的一些技术(Some Techniques forShading Machine Renderings of Solids)”(SJCC 1968),第27-45页;Whitted,“一种改进的用于着色显示的照明模型(An Improved Illumination Model for Shaded Display)”,第343-349页,ACM通讯,第23卷,第6期(1980年6月);和Kajiya,“渲染方程式(TheRendering Equation)”,计算机图形学(SIGGRAPH 1986会议记录,第20卷,第143-150页)。从那时起,光线追踪已用于非实时图形应用程序中,例如设计和电影制作。任何看过《Finding Dory》(2016年)或其他皮克斯动画电影的人都可以看到光线追踪方法对计算机图形学的效果,即逼真的阴影和反射。参见,例如,Hery等人,“走向皮克斯的双向路径追踪(Towards Bidirectional Path Tracing at Pixar)”(2016)。
通常,光线追踪是一种渲染方法,其中光线用于确定场景中各种元素的可见性。光线追踪是用于各种渲染算法中的图元,算法包括例如路径追踪和Metropolis光传输。在示例算法中,光线追踪通过对穿过场景的光传输进行建模来模拟光的物理现象以使用光线光学计算所有全局效应(包括例如来自发亮表面的反射)。在这样的光线追踪的用法中,当光线穿过三维场景从潜在的多个光源传播到视点时,可能会尝试追踪成百上千的光线中的每一个。通常,穿过场景相对于眼睛追踪此类光线,并针对场景中所有几何形状(geometry)的数据库进行测试。可以从光到眼睛向前追踪光,或者从眼睛到光反向追踪光,或者可以追踪光线以查看从虚拟相机开始并在眼睛处开始的路径是否具有清晰的视线。该测试可以确定最近的相交(以便确定从眼睛可见的东西),也可以追踪从对象表面朝向光源的光线,以确定是否有会阻止光到空间中该点的传输的任何干涉物。因为光线与现实中的光的光线相似,所以它们提供了许多逼真的效果,而这些效果是使用过去三十年来实现的基于光栅的实时3D图形技术无法实现的。由于来自场景中每个光源的每条照明光线在穿过场景中的每个对象时都经过评估,因此得到的图像看起来就像是在现实中拍摄的一样。因此,这些光线追踪方法长期以来一直在专业图形应用程序(例如设计和电影)中使用,其中在基于光栅的渲染方面它们占据了主导地位。
光线追踪可用于确定沿光线是否有任何东西可见(例如,测试几何图元上的阴影点与光源上的点之间的遮挡物),还可用于评估反射(例如,其可能涉及执行遍历以确定沿视线的最近可见表面,以便在流处理器上运行的软件可以评估与所击中的事物相对应的材质着色功能-其反过来根据相交的对象的材料属性又可以向场景中发射一个或更多个附加光线)以确定沿光线返回向眼睛的光。在经典的Whitted风格光线追踪中,光线是从视点通过像素网格射入场景的,但是其他路径遍历也是可能的。通常,对于每条光线,找到最接近的对象。然后,可以通过将光线从相交点发射到场景中的每个光源并发现它们之间是否存在任何对象来确定该相交点是被照亮的还是处于阴影中。不透明的对象会挡住光,而透明的对象会减弱光。可以从相交点产生其他光线。例如,如果相交表面是发亮的或镜面的,则在反射方向上产生光线。光线可以接受相交的第一个对象的颜色,然后对它的相交点进行阴影测试。递归地重复此反射过程,直到达到递归限制或后续反弹的潜在贡献降至阈值以下。光线也可以在透明固体对象的折射方向上生成,然后再次递归地进行评估。因此,光线追踪技术允许图形系统依据物理规律开发正确的反射和阴影,其并不经受扫描变换技术的限制和伪像。
光线追踪已经与光栅化和z-缓存一起使用或作为其替代,用于采样场景几何形状。它也可以用作环境贴图和阴影纹理化的替代方法(或与之结合使用),以产生比通过纹理化技术或其他光栅“技巧(hacks)”所能实现的更为逼真的反射、折射和阴影效果。光线追踪还可以用作基本图元,以在基于物理的渲染算法(例如路径追踪、光子映射、Metropolis光传输和其他光传输算法)中精确模拟光传输。
光线追踪的主要挑战通常是速度。光线追踪要求图形系统为每一帧计算和分析照射在构成场景的每个表面上(并可能被其反射)的数百万条光光线中的每一条。过去,如此庞大的计算复杂性无法实时执行。
现代GPU 3D图形管线如此快地渲染着色的、纹理贴图的表面的原因之一是它们有效地使用了相干性(coherence)。在常规的扫描变换中,假定所有内容都可以通过公共图像平面中的公共窗口查看并向下投影到单个有利点(vantage point)。每个三角形或其他图元通过图形管线发送,并覆盖一定数量的像素。可以针对从该三角形渲染的所有像素共享所有相关计算。因此,对应于穿过窗口的相干视线的像素的矩形图块可以对应于在同一流处理器中以锁步方式运行的线程组。假定落在三角形的边之间的所有像素都是运行相同着色器并从相同纹理获取相邻纹理像素组的相同材质。相反,在光线追踪中,光线可能在公共点(光源或虚拟相机镜头)处开始或结束,但是当它们在场景中传播并与不同的材质相交时,它们会迅速发散。例如,每条光线执行搜索以找到最接近的对象。可以执行对结果的一些高速缓存和共享,但是由于每条光线都可能击中不同的对象,因此不存在GPU传统上已经与纹理贴图的、着色的三角形结合利用的那种相干性(例如,共同的有利点、窗口和图像平面没有用于光线追踪)。与其他图形方法相比,这使光线追踪在计算上更具挑战性,因此在交互基础上执行起来要困难得多。
在2010年,NVIDIA利用NVIDIA GPU和其他高度并行架构的高度并行性来开发OptiXTM光线追踪引擎。参见Parker等人的“OptiX:通用光线追踪引擎”(图形上的ACM事务(ACM Transactions on Graphics),第29卷,第4期,第66条,2010年7月)。除了改进API(应用程序编程接口)之外,OptiXTM提供的一项进步是改进了用于找到光线与场景几何形状之间的交点的加速数据结构。这种加速数据结构通常是光线追踪遍历算法使用的有效地搜索可能与给定光线相交的图元的空间或对象层次结构。OptiXTM提供了应用程序可以从中选择的许多不同的加速结构类型。节点图中的每个加速结构可以是不同的类型,从而可以将高质量的静态结构与动态更新的结构组合在一起。
OptiX TM可编程光线追踪管线提供了显着的进步,但是其自己通常仍然无法在相对便宜的用于复杂3D场景的计算平台上对用户输入提供实时交互响应。自那时候起,NVIDIA一直在开发用于光线追踪的硬件加速功能。参见,例如,US 9,582,607、US 9,569,559、US 20160070820、US 20160070767;以及以上引用的其他美国专利和专利申请。
大多数光线追踪器的基本任务是针对场景中的所有图元(在一个实施例中通常为三角形)测试光线,并报告最接近的击中(根据沿光线测量的距离)或仅报告所遇到的第一个(不一定是最接近的)击中,具体取决于用例。朴素贝叶斯算法将是O(n)暴力搜索。但是,由于任意复杂度的3D场景中有大量的图元,因此对于光线追踪器而言,测试场景中的每个几何图元与给定光线的相交通常是无效或不可行的。
通过预处理场景几何形状并预先构建合适的加速数据结构,然而,可以将平均情况的复杂度降低到O(log n)。加速数据结构(例如包围体层次结构或BVH)允许快速确定哪些包围体可以忽略,哪些包围体可以包含相交的几何图元,哪些相交的几何图元对于可视化很重要,而哪些则不重要。使用简单的体(例如盒子)包含更复杂的对象可提供计算和内存效率,这有助于使光线追踪实时进行。
图1A-1C示出了在包括几何形状网格320的包围体208的背景下的光线追踪相交测试。图1A示出了在虚拟空间中包括包围体310和315的光线302。为了确定光线302是否与在网格320中的几何形状相交,可以直接针对光线302测试每个几何图元(例如三角形)。但是,为了加速该过程(因为对象可能包含成千上万的几何图元),首先针对包围体310和315测试光线302。如果光线302不与包围体相交,则它不与包围体内部的任何几何形状相交,并且出于该光线的目的,可以忽略该包围体内部的所有几何形状。因为在图1A中,光线302错过了包围体310,所以不需要针对相交测试该包围体内的网格320的任何几何形状。虽然包围体315被光线302相交,但是包围体315不包含任何几何形状,因此不需要进一步的测试。
另一方面,如果诸如图1B所示的光线304之类的光线与包含几何形状的包围体310相交,则该光线可能会或可能不会与包围体内部的几何形状相交,因此需要对几何形状本身执行进一步的测试以找到可能的相交。因为图1B和图1C中的光线304、306与包含几何形状的包围体310相交,所以需要执行进一步的测试以确定包围体内部是否有任何(和哪些)图元被相交。在图1B中,进一步测试与图元的相交将表明,即使光线304穿过包围体310,它也不会与包围体所包围的任何几何形状相交(或者,如上所述,包围体310可以进一步按体积细分,以便可以使用包围体相交测试来揭示光线不与任何几何形状相交,或更具体地,光线可以与哪些几何图元相交)。
图1C示出了光线与包围体310相交并且包含光线306与其相交的几何形状的情况。为了执行实时光线追踪,相交测试器测试相交的包围体310内的每个几何图元,以确定光线是否与该几何图元相交。
现代光线追踪器最常使用的加速数据结构是包围体层次结构(BVH),其包括嵌套的轴向对齐的包围盒(AABB)。BVH的叶节点包含要测试相交的图元(例如三角形)。BVH通常由图形或树结构数据表示来表示。在光线追踪中,当使用这样的加速数据结构时,找到光线的最接近(或阴影,任何)相交的时间通常是n个对象的O阶(log n)。例如,通常用于现代光线追踪加速数据结构的该类型的AABB包围体层次结构(BVH)通常具有O(log n)搜索行为。
BVH加速数据结构以将有助于帮助快速确定可能与特定光线相交的对象的那个部分并快速拒绝光线不会与之相交的场景的大部分的方式来表示和/或引用对象或场景的3D模型。BVH数据结构表示具有包围体的场景或对象,并将包围体细分为越来越小的包围体,这些包围体终止于包含几何图元的叶节点。包围体是分层的,这意味着最上层将其下的层包围起来,该下层将其下的层包围起来,依此类推。在一个实施例中,叶节点可以潜在地与包围体层次结构中的其他叶节点重叠。
NVIDIA的RTX平台包括光线追踪技术,该技术可为内容创作者和游戏开发者带来实时的电影品质的渲染。请参见https://developer.nvidia.com/rtx/raytracing。在包括NVIDIA RT Cores在内的许多或大多数实现方式中,图1A-1C中所示的包围体使用轴对齐的包围盒(“AABB”),该包围盒可以紧凑地存储并易于针对光线相交进行测试。如果光线与几何形状的包围盒相交,则也将测试基础几何形状。但是,如果光线不与几何形状的包围盒相交,则不需要测试该基础几何形状。如图1A-1C所示,创建了AABB的层次结构以提高单个AABB包围盒测试的剔除效果。这样可以进行有效遍历并快速缩小感兴趣的几何形状。
如上所解释的,包围体通常用于近似对象占据的空间。如果需要超过近似的更精确的了解,,则检查对象本身以确定其占用的空间。通常,将简单的体(例如,轴对齐的盒)用作包围体,以近似对象占据的空间。但是对象可以是任意的、复杂的形状。因此,简单的体通常无法很好地适合对象。因此,尽管AABB通常并常规地被广泛用于光线追踪,但并非所有几何图形都可以紧密地适合单个轴对齐的盒。这导致在对象占据的空间的近似中包括很多未被对象占据的空间。如果几何图形适合得不是很好,则可能会产生错误的击中(hit),从而导致额外的工作。示例非限制性技术的优点在于,与当前的光线追踪加速硬件相比,其提供了单个击中行为可更好地适合包围体。先前的解决方案可能具有更多的误报,重复的几何图形,重复的测试以及额外的遍历成本。宽的压缩treelet(compressed treelet)格式表示支持的多盒解决方案有助于消除这种低效率。
最终,基础的几何图形没有被相交,并且返回未命中,但是与能够以更高的处理水平剔除作业相比,必须进行那些测试是效率低下的。有至少三个有问题的情况:
1.三角形,可能很长、很细且没有对齐,导致包围体内有死角。
2.适合得不是很好的非三角形几何形状,例如头发和曲线。
3.隐藏在实例变换下的几何形状。
在三角形的情况下,现有技术的建造者可以将行为不正常的三角形跨多盒拆分(split)。通常,三角形本身不会被分解,而是会在三角形缓冲区中重复并包括在多盒下。在这种情况下,三角形的交点可能会出现在其包围盒之外,并且可能会多次进行测试,但是在所有情况下,仅返回一个交点。例如,参见Karras,高质量包围体层次结构的快速并行构造(Fast Parallel Construction of High-Quality Bounding Volume Hierarchies),NVIDIA(2013);USP 10331632;Ganestem等人,“用于快速BVH构建的SAH指导的空间分割分区(SAH guided spatial split partitioning for fast BVHconstruction)”,《欧洲统计》第35卷(2016),第2期(2016);Havran V.等人,“为光线射击改进KD树(On ImprovingKD-Trees for Ray Shooting)”,计算机图形学冬季学院,第209-217页(2002年);Garanzha等人,“在GPU上基于网格的SAH BVH构造(Grid-based SAH BVH construction on aGPU)”,《可视计算机》,第27卷,第6-8期,第697-706页(2011年6月)。特别地,在不使用本文的示例性非限制性技术的情况下进行三角形拆分可导致相同的三角形/图元被多次返回。这在实践中没有用,可能会损害性能,但是并不一定有害(对性能的影响除外),只要处理器端的遍历算法可以处理它即可。请注意,DirectX(DXR)规范中有一模式选择,该模式选择允许查询具有相同三角形/图元的多个返回。如果该模式选择相反只允许一个交点,则必须禁用三角形拆分。如果它们正在使用一种算法,那么对于它来说,多个返回将过于复杂以至于无法处理,那么人们就会这样做。可以在https://microsoft.github.io/DirectX-Specs/d3d/Raytracing.html#d3d12_raytracing_geometry_flags找到有关DXR“D3D12_RAYTRACING_GEOMETRY_FLAG_NO_DUPLICATE_ANYHIT_INVOCATION”的参考信息:
“默认情况下,对于给定的光线-图元相交,系统可以在任何命中
着色器上自由触发多次。在某些情况下,这种灵活性有助于提高
加速结构的遍历效率。例如,如果加速结构是在内部使用包围体
实现的,则该实现可能会发现将相对长的三角形存储在多个包围
盒中而不是在较大的单个盒中是有益的。
但是,某些应用程序用例要求将相交最多一次报告给任何击中着
色器。该标志启用对给定几何图形的保证,可能会影响性能。
此标志适用于所有几何类型。”
本文的示例实现方式允许构建器在忽略该标志的同时使用三角形拆分。
在非三角形几何结构的情况下,程序化或复杂的几何形状(例如头发和曲线)可以使用一个或更多个单独的相交测试,这些测试不会被光线追踪加速硬件加速。对于复杂而昂贵的(例如,基于软件的)几何-光线相交测试,这种类型的测试通常需要中断遍历以返回到控制或其他专用过程(例如,在流式或其他多处理器上运行的软件)。中断基于硬件的遍历以及执行复杂测试对性能的影响很大。为了减少影响,通常将头发分成更线性的较小部分,以更好地适合在单个盒内。尽管如此,对齐问题仍可能导致效率低下。例如,在过去,这些较小的段被视为单独的对象,因此沿着曲线的光线可以多次积极地测试包围体相交,从而需要进行多个昂贵的光线-几何形状相交测试。
第三种情况是当使用实例变换时。典型的加速结构既包括顶层加速结构(“TLAS”),又包括多个底层加速结构(“BLAS”)。在典型的已知实现中,TLAS位于世界空间中,而BLAS使用对象空间。这样,针对单个对象的对齐可以更紧密地适合其自己的对象空间。然后通过转换将对象放置在公共世界空间中。相同的BLAS可以在TLAS之下多次使用,以表示该几何形状的多个实例。例如,一个房间中所有椅子都相同的一组椅子可以用单个BLAS表示。以这种方式对几何形状进行分组可能对构造有效,但会导致遍历效率低下,因为BLAS通常必须由单个AABB表示。例如,由单个盒包围(bound)的四条腿椅子在两腿之间以及椅子靠背前面的座椅上方将有死角。死角会导致TLAS中实例的错误命中-导致对该对象空间进行额外的转换,而仅在BLAS级别未命中。在某些情况下,可以通过旋转单个AABB来提供更好的适合,从而实现改进,但是这不适用于所有几何形状。
鉴于用于响应于例如用户输入而渲染任意复杂度的高质量图像的真正交互式实时光线追踪图形处理系统的巨大潜力,进一步的工作是可能的并且是期望的。特别地,对于任意复杂性的几何图元,增加光线追踪效率并提高性能是非常需要的。
附图说明
图1A-1C示出了示例性简化的光线追踪测试,以确定光线是否穿过包含几何形状的包围体以及光线是否与包围体内的几何形状相交。
图2A-2C、图2B1和图2C1示出了示例性几何形状,其可以使用多个包围体更紧密地适合。
图3A-3E示出了如何通过可变计数的多个包围体来封装单个对象。
图4A-4C示出了由底层加速结构中的多个包围体包围的简单线条图形,可以将其提升到顶层加速结构中,以便在变换之前更好地进行剔除。
图5A、图5B示出了内部节点,该内部节点将多条曲线包围到一个多盒,其中每条曲线在较低层的子complet中单独分解。
图6是示例非限制性加速结构构建过程的流程图。
图7A和图7B示出了示例性包围体层次结构表示。
图8示出了示例性宽complet布局格式。
图9示出了示例非限制性光线追踪图形系统。
图10是示例非限制性光线追踪图形管线的流程图。
图11是示例非限制性基于硬件的光线追踪操作的流程图。
图12示出了包括树遍历单元(TTU)的简化示例非限制性遍历协处理器。
图13和图14是示例性TTU处理的流程图。
图15示出了示例性宽complet相交测试硬件。
图16示出了示例性比较器网络布局。
图17示出了在顶层遍历开始时的函数的示例性伪代码。
图18A和图18B示出了更详细的光线追踪管线。
图19是生成图像的示例性过程的流程图。
具体实施方式
因此,本文中的技术提供了基于硬件的功能,该功能有效地加速了针对这种非适合(non-fitting)几何形状的光线追踪。本文公开了基于硬件的技术,例如,用于有效地使用多个包围体(例如,轴对齐的包围盒)来有效地表示任意形状的包围体以更好地适合对象,以及使用此类任意包围体来提高应用程序(例如光线跟踪)的性能。在一个实施例中,出于光线-体相交测试的目的,围绕对象构造的多个包围体被视为单个包围体。基于测试这种多个包围体的多个正光线-体相交结果被精简为单个光线相交指示(另一种查看方式:如果光线击中多个包围体中的任何一个,则它会击中所有包围体,因为已知多个包围体都包含相同的扩展几何形状)。对于以前需要进行昂贵的多个光线-对象相交测试的某些对象和场景,这可能会导致性能大幅提高。
在一个示例非限制性实施例中,使用宽的压缩treelet(“complet”)来构造AABB加速结构,从而允许同时测试多个(例如,在某些实施例中,多达十二个)包围体子项(children)。本文中的技术引入了多盒complet格式,该格式允许单个子项具有与其关联的多个包围体(例如,AABB),其中这些包围体上任何正数(一个或更多个)的“命中”(光线-包围体相交测试的正结果)被视为该子项的单个“命中”或相交。换句话说,传统的光线-包围体相交测试在适当的情况下(即,包围几何形状与AABB包围体不能很好地适合的情况)被说明为测试(例如,在某些实施例中在单个周期内并行)多个包围体(所有包围体都可以是AABB),而不是单个包围体。那些多个AABB包围体的位置、大小和方向要比任何单个AABB都更紧密地包围这种几何形状。多个包围体可以具有相同的尺寸和/或形状和/或方向或不同的尺寸和/或形状和/或方向。它们可以是连接的、重叠的或不相交的。这允许使用AABB近似非盒形形状或其他非轴定向形状,从而比单个ABBB更好地适合包围体。
此外,在一些实施例中,在光线与所阐明的多个包围体之一之间发生命中的情况下,几何相交测试可以以与使用单个AABB并发现与光线相交的相同方式进行。效率的提高是由于与该组光线和单个较大的AABB之间的命中数相比,在一组光线和已阐明的多个包围体(AABB)之间的命中数可能会减少。性能不受影响,特别是在本质上或实际上并行地测试所有被阐明的多个包围体的示例性实施例中,因此对所有被阐明的多个包围体执行光线-包围体相交测试所需的时间量与测试单个较大的AABB的时间量在相同的数量级。此外,在一些示例性实施例中,一旦发现与多盒之一相交,则“提前退出(early out)”算法可以消除针对对象测试其他多盒的需要。
通过进一步的说明,图2A、图2B和图2C示出了不能很好地适合单个AABB的几何形状的示例。图2A示出了圆柱体,图2B示出了弯曲的对象,并且图2C示出了三角形。这些图示出了二维视图,但是现代光线追踪系统中的实际几何形状和包围体将是三维的。图2B1和图2C1分别示出了图2B和图2C场景的3D视图。
在这些示例中:
●如果圆柱体垂直或水平对齐,则图2A的圆柱体将紧密适合在单个AABB中,但由于圆柱体的方向相对于轴线成一定角度,因此它不适用于任何AABB。
●图2B/图2B1的弯曲对象的形状使不同部分具有不同的方向,并且没有包围对象的单个AABB提供紧密的适合。
●图2C/图2C1中所示的三角形未与其中一个轴对齐,并且其形状和尺寸使得任何AABB都将包围该三角形未占用的大量空间。
在每种情况下,由虚线表示的原始AABB包围盒可用于包含几何形状,但也将包含大量空白空间。如图2A-2C、2B1、2C1所示,在每种情况下,特定的几何形状可以与由实线盒表示的多个(例如4个)较小的盒更紧密地适合。在图2A的配置中,所有较小的盒都具有相同的大小和方向,只是放置在不同的位置。在图2B/图2B1配置和图2C/图2C1配置中,较小的盒具有不同的大小和方向。
在某些情况下,例如图2A和图2C,较小的盒彼此重叠;在其他情况下,其不重叠。出于光线相交测试的目的,对于这种重叠没有实质性的惩罚,因为在示例性实施例中,与各个较小包围体的任意数量的相交将被解析为单个光线-包围体相交“命中”,这将导致针对封闭的几何形状测试光线。但是图2B示出较小的包围体不需要重叠,并且在某些情况下(例如,如果几何形状具有空隙或间隙,则被定义为特定系统的粒子,例如,以定义烟雾,雾等),可能期望包围体不相交。
在示例性实施例中,集合中的包围盒的数量是可编程的,并且每个complet都受控制。它可以由任意数量组成,但是为了便于实现,一个示例非限制性实施例选择了complet宽度的均等划分:每个子项2、3、4、6和12个盒。在每个子项2个盒的情况下,可以代表12个盒的每个complet将有6个子项。对于每个子项3个盒,可以代表12个盒的每个complet将有4个子项。依此类推,每个子项多达12个盒,只代表complet中的单个子项。根据特定的几何形状和特定的实现,可以使用不同数量的子项包围体。
图3A-3E示出了相同的对象(在这种情况下,图2A的圆柱体)如何由计数不同的多盒封装起来,其中实心盒又代表阐明多个包围体的多盒集合的组成盒,而虚线盒代表将成为单一的包围盒。图3C本质上与图2A的情景相同,但是图3A和图3B示出了使用较少(例如2或3个)AABB来包围圆柱体,图3D和图3E示出了使用更多(例如6或12个)AABB。可以看出,对于长而薄的未对齐的对象,可以通过使用更多的包围体来实现更紧密的适合(因此,错误的光线相交命中次数更少)。
对于长、细、未对齐的三角形,多盒解决方案看起来非常类似于常规的三角形拆分,因为相同的三角形包含在多盒下(内)。但是,与大多数常规的三角拆分方法不同,图3A-3E中所示的多盒场景,如通过本文的示例非限制性实施例实现的,不需要复制图元。具体而言,通常使用多个包围体而不是一个大的包围体来更紧密地适合此类三角形,但是在这种情况下,设计人员不会将三角形拆分为多个部分,因为这可能会导致几何形状出现孔并在结果图像中引入伪像。因此,先前方法为每个较小的包围体复制了三角形,这可能导致在例如与三角形的长轴对齐的光线的情况下,在三角形的每个副本上进行多次光线-几何形状相交测试。此外,如在先前的方法中那样复制三角形需要将相同的三角形存储多次,从而导致增加的存储器使用。相反,在多盒的示例非限制性方法中,三角形将(不需要)在光线-三角形相交测试中不被存储超过一次或针对光线测试不超过一次,从而实现了效率的提高。
对于诸如在图2B/图2B1中的头发和曲线,多盒解决方案允许更好的适合体,这减少了误报,误报可能导致遍历中断并导致昂贵地返回流式多处理器或其他控制软件过程。三角形拆分之类的解决方案也可以应用于曲线,但会导致同一基础对象多次返回控制过程。本文中的多盒解决方案仅允许单个返回以用于任意复杂性的封装形状。
实例变换
在许多现代的光线追踪系统中,以不同的位置、方向和比例在场景中数次或多次复制的对象可以在场景中表示为实例节点。这些实例节点将世界空间BVH中的包围盒和叶节点与可以应用于世界空间光线以将其转换为对象坐标空间的变换和指向对象空间BVH的指针相关联。实例转换避免在世界空间中多次复制对象空间BVH数据,从而节省了内存和相关的内存访问。实例转换通过将光线转换到对象空间而不是要求将几何形状或包围体层次结构转换到世界(光线)空间来提高效率,并且还与图形处理执行以可视化图元的其他常规光栅化过程兼容。
在这种实例变换的情况下,也可以使用多盒,例如从加速结构的较低层“提升”到加速结构的较高层。例如,BLAS中的包围盒可以是“提升”到TLAS中,以便在转换之前更好地进行剔除。
图4A示出了由对象或实例空间中的BLAS中的6个盒覆盖的简单简笔画图。在图4B中没有多盒的情况下,TLAS(在世界空间中)会将6个盒视为单个盒(虚线)。使用多盒的示例非限制性实现,我们基本上可以将对象空间中定义的这6个子项拉或提升为世界空间中加速数据结构的TLAS,作为6盒多盒子项(图4C中的实线)-其应该具有减少的虚假命中,其需要遍历过程下降到实例中,从而避免不必要的变换,以仅用于针对构成死区的那些量对光线进行测试。因为现在可以在世界空间中的TLAS层上使用多盒来执行多盒相交测试,所以出于多盒/光线相交测试的目的,可以避免TTU将光线转换到对象空间。此外,多盒提供了额外的优点,即与常规的(例如,虚线)单个AABB包围盒相比,它们可以更紧密地适合世界空间中的几何形状。这里没有旋转,但是可以想象图是旋转的,因此图4C中的那些顶层盒与图4A所示的BLAS中的根的方向不同。如果TLAS层上的多盒足够可靠,则无需在BLAS层的根处使用相同的多盒-尽管可以在BLAS层上将多盒技术用于其他相交测试(例如,测试与定义简笔画图示出的头部上的头发的曲线相交)。此即图4A-4C所示。
此外,可以通过除构建者将图5A的多盒从对象空间转换到世界空间以外的其他方式来定义图5B的TLAS层上的多盒。例如,为了构造图5B的多盒,构建者可以将基础几何形状转换到世界空间,然后构造TLAS世界空间多盒以更紧密地适合转换后的几何形状。
内部节点
在示例性实施例中,多盒complet格式不仅保留用于叶节点,而且还可以用于内部节点。这实际上是将多个图元或盒聚集成一束。图5A示出了内部节点,它将多个曲线捆绑到一个多盒子项中。如果针对图5A中所示的多盒结构进行的相交测试揭示了光线与任何多盒之间的相交,则BVH向下遍历到叶节点可以提供额外的多盒-在这种情况下,对于由图5A多盒包围的每个不同图元,将有不同的多盒集。因此,图5B示出了在BVH下层的子complet中每个子曲线被分别分解,使用不同的AABB包围盒集来包围每个不同的曲线或其他图元,以进行光线-complet相交测试。在此示例中,请注意,图5B的包围盒不是图5A包围盒的进一步细分。图5B的包围盒通常被完全包含在图5A的包围盒内,同时其尺寸进一步减小以更紧密地适合关联的图元,但并不一定如此。例如,不同层上的盒可以具有不同的精度,因此上层的盒可以比下层的盒小。因为如果光线不与较小的上层盒相交,则上层光线相交测试将失败,通过使下层盒比上层盒更大而导致没有遍历性能下降的结果。相反,在一些实施例中,在叶节点上执行的光线-complet相交测试是布尔联合,其中先前针对相同几何形状在上层包围盒上执行了相交测试,因为如果对上层执行的测试不显示相交,则遍历不会向下进行到叶节点。
以下内容提供了有关如何构造支持/提供多盒并可以使用宽complet格式进行编码的BVH加速结构的详细信息。其次,基于整体硬件的实时图形处理系统包括可以遍历和操纵的实时光线追踪硬件,从而公开了这种加速结构。
构建包围体层次结构
如上所述,加速数据结构包括递归地封装越来越小的包围体细分的包围体的层次结构(包围体层次结构或BVH)。最大的体(volumetric)包围体可以称为“根节点”。这种包围体(“叶节点”)的层次结构的最小细分包含项。这些项可以是定义对象表面的图元(例如,诸如三角形之类的多边形)。或者,项(item)可能是包含世界的整个新级别(作为项存在)的球体,因为它没有被添加到BVH中(想象《黑衣人》中猫的魔力项圈,其内部包含整个微型星系)。如果该项包含图元,则遍历协处理器在到达相交的叶节点时,将光线针对与叶节点关联的图元测试光线,以确定哪些对象表面与光线相交以及沿光线哪些对象表面可见。
建立BVH可以在两个部分发生:静态和动态。在许多应用程序中,对复杂的场景进行预处理,并且基于场景的静态几何形状创建BVH。然后,使用包括动态创建和操纵的运动对象在内的交互式图形生成,BVH的另一部分(或其他链接的BVH)可以由驱动程序或在实时交互式图形系统上运行的其他软件实时构建(例如,在每个帧中)。BVH的构建不需要硬件加速(尽管在某些非限制性实施例中可以),但可以使用在SM132和/或CPU120和/或其他开发系统(例如在应用程序开发期间)上运行的高度优化的软件例程来实现。
BVH加速结构构建的第一阶段获取参考几何形状(图6的204)的包围盒。这是通过针对对象中的每个几何图元执行包围盒程序来实现的,该包围盒程序为其输入图元返回保守的轴对齐的包围盒(AABB)。与例如定向包围盒(OBB)、包围球或其他方法相比,将包围盒与几何形状的相关坐标系的轴对齐可以为实时几何形状操作(例如相交测试和坐标变换)提供增加的效率。但是,本领域技术人员将理解本文所述的示例非限制性多盒方法和相关的宽complet表示也可以应用于更昂贵的边界构造,例如OBB,边界球和其他包围体技术。另一方面,根据基础几何形状的形状,使用本文所述的多盒方法聚合多个AABB可以提供对常规AABB技术和其他包围技术(例如OBB)的改进。
标准过程通常将产生图2A、图2B、图2C的虚线包围盒。已经细分的包围体(其确实包括场景中的几何形状的至少一部分)可以进一步递归地细分-就像从苏斯博士戴帽子的猫回来了(The Cat In The Hat Comes Back)(1958)的帽子中出现的越来越少的猫系列中的每一个一样。递归细分的数量和配置将取决于要建模的3D对象的复杂性和配置以及其他因素,例如所需的分辨率、对象与视点的距离等。一个示例细分方案是所谓的8-ary细分或“八叉树”,其中每个体都细分为八个较小的统一大小的体,但是已知许多其他空间层次结构和细分方案,例如二叉树、四叉树、k-d树,二进制空间分区(BSP)树和包围体层次结构(BVH)树。参见,例如,USP9582607。
在某个细分的级别下(对于BVH的不同部分可以是不同的级别),BVH的构建过程会遇到构成要建模的封装对象的几何形状。使用一棵树的类比,连续的体细分是树干、树枝、大树枝和小树枝,并且几何形状最终在树的最顶端(即叶子)处显现出来。这样,例如本文的示例非限制性实施例的BVH构建过程在此阶段使用启发式或其他分析技术(在一些实施例中可包括人工智能和/或神经网络)可能执行优化,以认出那些叶子节点,这些叶子节点(如图2A/图2B/图2C的场景)就其所包含的几何形状(图6的206)而言,呈现的适合度很差。这些适合不佳的节点可以通过应用如上所述的多盒进行优化,提供更有效的AABB-本质上是重叠或非重叠AABB的集合,它们创建新的包围体形状,比标准常规构造的AABB可以更紧密地包围几何形状(并且不需要额外的复杂性来支持非轴对齐的包围体,例如OBB)(图6的208)。
这个过程继续进行,直到包含几何形状的所有包围体被充分细分以为每个包围体提供合理数量的几何图元(图6的210)。在示例非限制性实施例中,不进一步细分多盒(即使应用于内部节点或非叶节点)。使用BVH的实时光线追踪器将通过比较每个图元的顶点的空间xyz坐标与光线的xyz坐标,以确定光线和该图元定义的表面是否占据相同的空间,从而确定光线-图元的相交。光线-图元相交测试可能需要大量计算,因为可能要测试许多三角形。在许多情况下,进一步按体细分可能会更有效,从而将任何“叶节点”中的图元数量限制为16个或更少。
将包括压缩的treelet的所得压缩树写出到存储器中的数据结构中,以供以后由图形处理硬件/软件在例如包括实时光线追踪的实时图形处理期间使用(图6的212)。
图7A和图7B示出了3D场景的递归细分的包围体(图7A)和光线追踪器可以访问并用于硬件加速操作的相应树数据结构(图7B)。树数据结构可以存储在存储器中,并且可以基于查询按需检索。
包围体的划分可以在层次树数据结构中表示,其中大包围体由树的父节点表示,而较小的包围体由包括父节点的树的子节点表示。最小包围体表示为树中的叶节点,并标识这些最小包围体中包含的一个或更多个几何图元。
树数据结构包括以层次结构布置的多个节点。树结构的根节点N1对应于包围所有图元O1-O8的包围体N1。根节点N1可以标识包围体N1的顶点和根节点的子节点。
在图7A中,将包围体N1细分为包围体N2和N3。图7B的树结构的子节点N2和N3对应于并表示图7A所示的包围体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。图7B树结构的各个子节点N4、N5、N6、N8、N10和N11对应于并表示图7A在空间中的包围体N4、N5、N6、N8、N10和N11。
在此特定示例中图7B的树只有三到六层(level)深,因此包围体N4、N5、N6、N8、N10和N11构成“叶节点”-即树中没有子节点的节点。图7A示出了叶节点包围体N4、N6和N8,其各自包含场景中几何形状的两个三角形。例如,体细分N4包含三角形O1和O2;体细分N6包含试验(trial)O5和O6;体细分N8包含三角形O7和O8。图7A还示出了叶节点包围体N5包含单个圆柱体O3,如图2A中所示,其对于虚线所示的AABB包围体N5没有提供良好的适合。因此,在本文的示例非限制性实施例中,不是将较大的AABB包围体N5用于光线-包围体相交测试,而是TTU 138针对多个较小的AABB包围体来测试光线,所述多个较小的AABB包围体被布置、定位、定尺寸并定向为更紧密地配合圆柱体O3。
图7B所示的树结构通过将这些叶节点N4、N5、N6和N7与场景几何形状的图元O1-O8中的适当一些相关联来表示它们。为了访问这种场景几何形状,TTU 138向下遍历图7B的树数据结构到叶节点。通常,树的不同部分可以并且将具有不同的深度,并且包含不同数量的图元。与不包含几何形状的体细分相关联的叶节点无需在树数据结构中明确表示(即,树被“修剪”)。
根据一些实施例,以N7为根的子树可以表示一组包围体或BVH,其在与对应于节点N1-N3的包围体不同的坐标空间中定义。当包围体N7与它的父包围体N3在不同的坐标空间中时,实例节点N7'提供遍历以N7为根的子树所必需的光线变换,实例节点N7'可以将树的其余部分连接到以N7为根的子树。实例节点N7'通过定义从N1-N3的坐标空间(例如,世界空间)到N7等的坐标空间(例如,对象空间)的变换,将与节点N1-N3相对应的包围体或BVH与和节点N7相对应的包围体或BVH连接起来。如本文所描述的,本文的示例实施例可以将多盒从N7的(对象)坐标空间“提升”到N1-N3的(世界)坐标空间,以便在一些情况下避免执行这样的变换的需要。
在示例性实施例中,由写出BVH节点的过程执行的complet格式化被扩展为包括新的,更宽的格式,该格式指定了每个子项的盒。集合由连续的子项组成。图8示出了多盒的示例布局格式。在一个实施例中,以与传统格式相同的方式来调整这些布局格式的大小以适合单个高速缓存行。在其他实现方式中,complet格式可以具有可变的而不是固定的长度,以容纳使用多盒的那些节点的更多条目。此外,虽然在示例性实施例中使用压缩来减小加速结构的大小,但是其他实施例可能不使用压缩或不使用相同类型的压缩。
示例传统格式将为子项0-子项11(child 0-child 11)中的每一个提供一个盒。如图8所示,对于每个节点具有2个盒的complet,2盒多盒格式将使用之前的子项0和子项1(采用传统格式)作为子项0,然后将其扩展为子项0盒1。类似地,将为子项2提供扩展子项2盒1,依此类推。complet同时可以包含与传统complet格式相同的附加信息。使用这种新的多盒格式,在传统方案中可以表示12个子包围体的相同数据块现在仅表示6个子项包围体–和一半一样多。因此,在示例性实施例中,此格式中省略了子项1、3、5、7、9和11,以便为扩展子盒腾出空间。这些省略的子盒可以以类似的多盒格式表示,每个子盒都有自己的扩展盒,如果他们包含的几何形状不需要多盒,则可以不使用多盒来表示。
对于每个节点具有3个盒的complet,对应于子项0的节点表示为子项0、子项0盒1和子项0盒2。类似地,对应于子项3的节点表示为子项3、子项3盒1和子项3盒2。四盒complet代表每个子项具有四个盒,六盒complet代表每个子项具有六个盒,十二盒complet代表每个子项具有十二个盒。在示例性实施例中,诸如图3E中所示的12盒的complet将占据整个数据块空间,使得仅使用表示同一子节点(0)的12个多盒的格式。
在示例性实施例中,尽管不是限制性的,但是可以并行地测试在一个块中表示的所有多盒。可以在单个高速缓存行大小的块的范围内为其他多盒格式提供一些未使用的字段(即,实施例可以具有不是12的除数的子节点数目)。也可以具有多盒格式,其中将不同的子项定义为具有不同数量的扩展盒。就选择图8格式中的哪一种在特定情况下使用,并行测试这种格式的每个盒意味着不会通过每个子项使用更少的盒而不是使用更多的盒来降低处理性能,但是如果针对给定图元使用较少的多盒,则可以节省内存带宽,并达到所需的精度(请参见图3A-3E)。
在一个示例非限制性实施例中,仅根据非多子盒complet的传统TTU行为中具有反向zlo/zhi的主子字段,由图8格式表示的多盒子项为有效或无效的。
图8的格式示出了报头信息,包括指示多盒计数的字段和包含指向BVH的继承(祖先/后代)指针的字段;指向每个“子”体的指针,其包括对每子项多盒的引用;以及扩展的报头信息。
示例实时光线追踪硬件加速的实现
如上所述构造的加速结构可以通过在传统通用计算机上运行的基于软件的图形管线处理而有利地使用。然而,当前公开的非限制性实施例在基于硬件的图形处理单元的上下文中有利地实现上述技术,所述基于硬件的图形处理单元包括诸如一个或更多个流式多处理器(“SM”)的高性能处理器和一个或更多个遍历协处理器或“树遍历单元”(“TTU”)-3D图形处理管线的一个或一组流式多处理器SM的子单元,该3D图形处理管线能够在本文描述的多盒包围体上提供宽complet相交测试。以下描述了此类系统的总体结构和操作。以下内容描述了诸如包括TTU 138的系统的整体结构和操作,TTU 138可加速支持交互式光线追踪的某些过程,其包括光线-包围体相交测试、光线-图元相交测试以及用于实时光线追踪的光线“实例”变换以及其他应用程序。已对此类TTU进行了增强,以支持宽complet和多盒光线-体相交测试,如上所述。
示例系统框图
图9示出了示例实时光线交互式追踪图形系统100,其使用包括如上所述构造的加速数据结构的场景或对象的三维(3D)数据来生成图像。
系统100包括输入设备110、处理器120、图形处理单元(GPU)130、存储器140和显示器150。图9所示的系统可以采用任何形状因子,包括但不限于个人计算机、智能手机或其他智能设备、视频游戏系统、可穿戴虚拟或增强现实系统、基于云的计算系统、车载图形系统、片上系统(SoC)等。
处理器120可以是多核中央处理单元(CPU),该多核中央处理单元可操作为,作为对输入设备110的实时交互响应执行应用程序,其输出包括用于在显示器150上显示的图像。显示器150可以是任何种类的显示器,例如固定显示器、头戴式显示器(例如显示器眼镜或护目镜),其他类型的可穿戴显示器、手持显示器、车载显示器等。例如,处理器120可以基于从输入设备110接收的输入来执行应用程序(例如,操纵杆、惯性传感器、环境光传感器等),并指示GPU 130生成显示应用程序进展的图像以在显示器150上显示。
应用本文公开的一种或更多种技术生成的图像可以显示在监视器或其他显示设备上。在一些实施例中,显示设备可以直接耦合到生成或渲染图像的系统或处理器。在其他实施例中,显示设备可以例如经由网络间接地耦合到系统或处理器。此类网络的示例包括因特网,移动电信网络,WIFI网络以及任何其他有线和/或无线联网系统。当显示设备间接耦合时,由系统或处理器生成的图像可以通过网络流传输到显示设备。这样的流传输允许例如在服务器上或在数据中心中执行渲染图像的视频游戏或其他应用,并且渲染的图像可以在与服务器或数据中心物理上分开一个或更多个用户设备(例如计算机,视频游戏控制台,智能手机,其他移动设备等)上传输和显示。因此,本文公开的技术可以应用于增强流传输的图像并增强流传输图像的服务,例如NVIDIA GeForce Now(GFN),Google Stadia等。
此外,应用本文公开的一种或更多种技术生成的图像可以用于训练、测试或证明用于标识现实世界中的对象和环境的深度神经网络(DNN)。这样的图像可以包括道路,工厂,建筑物,城市环境,乡村环境,人类,动物以及任何其他物理对象或真实环境的场景。此类图像可用于训练、测试或证明在机器或机器人中使用的DNN,以操纵,处理或修改现实世界中的物理对象。此外,此类图像可用于训练、测试或证明在自主车辆中使用的DNN,以在现实世界中导航和移动车辆。另外,应用本文公开的一种或更多种技术产生的图像可以用于向这些机器,机器人和车辆的用户传达信息。
基于应用程序在处理器120上的执行,处理器可以发布指令以供GPU130使用存储在存储器140中的3D数据来生成图像。GPU130包括用于加速实时图像生成的专用硬件。例如,由于GPU执行重复和高度并行的特殊计算任务(例如多边形扫描变换)的能力比常规软件驱动的CPU快得多,因此GPU 130能够实时处理数千或数百万个图形图元(多边形)的信息。例如,与处理器120不同,处理器120可以具有多个核,其中该核具有一次可以处理几个软件线程的许多高速缓存存储器,GPU 130可以包括成百上千个正在并行运行的处理核或“流式多处理器”(SM)132。
在一个示例实施例中,GPU 130包括多个可编程高性能处理器,其可以被称为“流式多处理器”(“SM”)132,以及包括图形图元引擎134和光栅引擎136的基于硬件的图形管线。GPU 130的这些组件被配置为使用称为“扫描变换光栅化”的技术执行实时图像渲染,以在二维显示器150上显示三维场景。在光栅化中,将3D场景的几何形状构建块(例如,点、线、三角形、四边形、网格等)映射到显示器的像素(通常经由帧缓冲存储器)。
GPU 130将3D模型的几何形状构建块(即,诸如三角形之类的多边形图元)变换为2D图像的像素,并为每个像素分配初始颜色值。图形管线可以通过定义或调整像素的颜色值,将阴影、透明度、纹理和/或颜色效果应用于图像的各部分。可以对最终像素值进行抗混叠、滤波并提供给显示器150以进行显示。多年来,许多软件和硬件的进步已经使用光栅化技术以实时图形所需的帧率(即每秒30至60帧)以在一个或多个显示器150上的高显示分辨率(例如4096×2160像素或更高)改善了主观图像质量。
为了使GPU 130能够以有效的方式实时地执行光线追踪,GPU提供了耦合到一个或更多个SM 132的一个或更多个“TTU”138。TTU138包括被配置为执行(或加速)光线追踪算法中常用的操作的硬件组件。TTU138的目标是将光线追踪中使用的操作加速到一定程度,该程度将光线追踪的功能带给实时图形应用程序(例如游戏),从而实现高质量的阴影、反射和全局照明。由TTU138产生的结果可以与在GPU130中执行的其他与图形有关的操作一起使用或作为其替代而使用。
更具体地,SM132和TTU138可以协作以将光线投射到3D模型中,并确定该光线是否以及在何处与模型的几何形状相交。光线追踪直接模拟在虚拟环境或场景中行进的光线。光线相交的结果与表面纹理、观察方向和/或照明条件一起用于确定像素颜色值。由与TTU138配合使用的SM 132进行的光线追踪允许计算机生成的图像以与真实世界的照片或视频无法区分开的方式捕获阴影、反射和折射。由于部分地由于需要追踪大量的光线,因此光线追踪技术比光栅化在计算上更加密集,因此TTU 138能够在硬件中加速该过程中某些计算量更大的方面。
给定如上所述构造的BVH,TTU 138执行树搜索,其中光线访问的树中的每个节点针对每个后代分支或叶子都有包围体,并且光线仅访问相应包围体与之相交的后代的分支或叶子。以这种方式,TTU 138仅显式地测试少量图元的相交,即驻留在被光线相交的叶节点中的图元。在示例非限制性实施例中,TTU 138加速树遍历(包括光线-体测试)和光线-图元测试。作为遍历的一部分,它还可以处理至少一级实例变换,将光线从世界空间坐标变换为实例网格的坐标系。在示例非限制性实施例中,TTU 138以MIMD方式完成所有这些操作,这意味着一旦在TTU内部就独立地处理光线。
在示例非限制性实施例中,TTU 138作为SM(流式多处理器)132的服务方(协处理器)运行。换句话说,示例非限制性实施例中的TTU 138不是独立运行,而是遵循SM 132的命令,以比SM 132自己执行更高效地执行某些与计算密集的光线追踪相关的任务。在其他实施例或体系结构中,TTU 138可以具有更多或更少的自治权。
在所示的示例中,TTU 138通过SM 132指令接收命令,并将结果写回到SM寄存器文件。对于许多用例(例如,具有最多一个实例化级别的不透明三角形),TTU 138可以为光线追踪查询提供服务,而无需与SM 132进一步交互。更复杂的查询(例如,涉及经过alpha测试的三角形,除三角形以外的其他图元或多个实例化级别)可能需要多次往返(尽管本文的技术通过为TTU 138提供增强的能力以自动执行多盒光线-包围体相交测试而无需向调用SM寻求帮助,从而为某些类型的几何形状减少了此类“往返”的需求)。除了追踪光线,TTU 138还能够执行更一般的空间查询,其中AABB或两个AABB之间的伸出的体(我们称为“光束”)代替了光线。因此,尽管TTU 138特别适合于加速与光线追踪有关的任务,但是它也可以用于执行除光线追踪之外的任务。
因此,TTU 138会针对广范围的包围体自主地执行对每条光线的测试,并且可以剔除不与该光线相交的任何包围体。遍历协处理器从包围(bound)场景中所有内容的根节点开始,针对较小(可能重叠)的子包围体测试每条光线,这些子包围体又反过来包围BVH的后代分支。光线跟随光线所击中的包围体的子指针到其他节点,直到到达BVH的叶节点或末端节点(体)为止。如本文所述,任何这样的包围体都可以被解释为多个包围盒,以便为某些几何形状提供更有效的相交测试,例如,不能方便地由轴对齐的包围盒(AABB)包围。
一旦TTU 138遍历加速数据结构以到达与光线相交并包含几何图元的终端或“叶”节点(可以由一个或更多个包围体表示),它将执行加速的光线-图元相交测试,以确定光线是否与该图元相交(并因此与该图元定义的对象表面相交)。光线-图元测试可以提供有关与光线相交的图元的其他信息,这些信息可用于确定着色和可视化所需的表面的材料属性。通过加速数据结构的递归遍历使遍历协处理器能够发现与光线相交的所有对象图元,或者发现与光线相交的最接近(从视点的角度来看)的图元(在某些情况下,这是从沿光线的视点唯一可见的图元)。参见例如Lefrancois等人的NVIDIA Vulkan光线追踪教程(NVIDIA Vulkan Ray Tracing Tutorial),2019年12月,https://developer.nvidia.com/rtx/raytracing/vkray
如上所述,TTU 138还加速了每条光线从世界空间到对象空间的变换,以获得图元的越来越精细的包围盒封装,并减少了这些图元在场景中的重复。如上所述,在场景中以不同的位置、方向和比例多次复制的对象可以在场景中表示为实例节点以及指向对象空间BVH的指针,这些实例节点将世界空间BVH中的包围盒和叶节点与可以应用于世界空间光线的变换相关联以将其变换到对象坐标空间。这避免了在世界空间中多次复制对象空间BVH数据,从而节省了内存和相关的内存访问。实例变换通过将光线变换到对象空间而不是要求将几何形状或包围体层次结构变换到世界(光线)空间来提高效率,并且还与图形处理执行以可视化图元的附加常规光栅化过程兼容。然而,如上文结合图4A-4C所解释的,本文中的技术减少了对此类有效变换的需要以进一步提高性能。
示例光线追踪过程
图10示出了可以由SM 132执行并由TTU 138加速的示例性光线追踪着色管线900。光线追踪着色管线900由SM 132调用光线生成910并向TTU 138发出相应的光线追踪请求来开始。光线追踪请求识别投射到场景中的单条光线,并要求TTU 138搜索具有SM 132也指定的加速数据结构的相交。TTU 138遍历(图10的框920)加速数据结构以确定光线与体细分以及加速数据结构所表示的相关三角形之间的相交或潜在相交。潜在的相交可以通过在加速数据结构中找到与光线相交的包围体来识别。非相交包围体的后代不需要检查。
对于相交的包围体内的三角形,TTU 138光线-图元测试块720执行相交930过程以确定光线是否与图元相交。TTU 138将相交信息返回给SM 132,SM 132可以响应于相交确定执行“任何击中”着色操作940。例如,SM 132可以对相交的图元执行(或让其他硬件执行)纹理查找,并基于适当的纹理像素的值决定如何为可视化光线的像素着色。由于TTU 138可以按任意顺序返回与场景中的不同几何形状的多个相交点,因此SM 132会追踪此类结果。
图11是流程图,其概述了TTU 138如上所述与SM 132协同执行的示例光线追踪操作。图11的操作由TTU 138与和其交互的SM 132配合进行。因此,TTU 138可以从SM 132接收对光线的识别并且遍历状态,该遍历状态枚举该光线必须遍历的一个或更多个BVH中的一个或更多个节点。TTU 138确定光线与BVH数据结构的哪个包围体相交(“光线complet”测试512)。TTU 138随后还可以确定光线是否与相交的包围体中的一个或更多个图元相交以及相交了哪些三角形(“光线-图元测试”520)–或如果TTU自身执行起来很复杂,SM 132也可以用软件执行此测试。在示例非限制性实施例中,complet指定包围体层次结构的根或内部节点(即,体),包围盒层次结构具有为其他complet的子项或每个complet单一类型的叶节点。
首先,TTU 138检查光线的遍历状态。如果TTU 138为光线维持的堆叠是空的,则遍历完成。如果栈顶上有条目,则遍历协处理器138向存储子系统发出请求以检索该节点。然后,遍历协处理器138执行包围盒测试512以确定BVH数据结构的包围体是否与SM 132指定的特定光线相交(步骤512、514)。在本文的示例非限制性实施例中,该包围盒测试512被修改为包括多个相交测试,多个多盒中的一个或每一个组合使用以保守地包围一个或更多个几何图元。如果包围盒测试确定包围体不与光线相交(步骤514中为“否”),则无需执行任何进一步的可视化测试,并且TTU138可以将此结果返回给发出请求的SM 132。这是因为,如果光线错过包围体(如图1A中的包围体310所示),则光线将错过被测试的包围体内的所有其他较小的包围体以及该包围体包含的任何图元。
如果由TTU 138执行的包围盒测试显示包围体与光线相交(在步骤514中为“是”),则TTU确定是否可以将包围体细分为较小的包围体(步骤518)。在一个示例实施例中,TTU138本身不必执行任何细分。而是,BVH中的每个节点都有一个或更多个子项(其中每个子项是BVH中的叶或分支)。对于每个子项,都有一个或更多个包围体和指向分支或叶节点的指针。当光线使用TTU 138处理节点时,它正在针对该节点的子项的包围体进行自我测试。光线只将那些其代表性包围体被击中的分支或叶子的堆栈条目推入其堆栈。在示例实施例中,当光线获取节点时,它不会针对该节点的包围体进行测试,而是针对该节点的子节点的包围体进行测试。TTU 138按由光线配置确定的顺序将其包围体被光线击中的节点推到光线的遍历堆栈上。例如,可以按节点在内存中出现的顺序,或它们沿着光线的长度出现的顺序或其他某种顺序将节点推到遍历堆栈上。如果存在包围体的进一步细分(在步骤518中为“是”),则访问包围体的那些进一步细分,并且对每个所得到的细分的包围体执行包围盒测试,以确定哪些细分的包围体与光线相交而哪些不与光线相交。在该递归过程中,一些包围体可以通过测试514来消除,而其他包围体可以导致通过TTU 138递归地应用步骤512-518来对进一步的细分进行相交测试。
一旦TTU 138确定与光线相交的包围体是叶节点(步骤518中为“否”),则TTU 138和/或SM 132执行图元(例如,三角形)相交测试520以确定光线是否与相交的包围体中的图元相交,以及光线与哪些图元相交。因此,TTU 138执行相交的后代分支节点的深度优先遍历,直到到达叶节点为止。TTU 138处理叶节点。如果叶节点是图元范围,则TTU 138或SM132将它们相对于光线进行测试。如果叶节点是实例节点,则TTU 138或SM 132应用实例变换。如果叶节点是项范围,则TTU 138将它们返回给请求的SM132。在示例非限制性实施例中,SM 132可以命令TTU 138执行不同种类的光线-图元相交测试并根据来自应用程序(或在其上运行该应用程序的软件栈)的操作报告不同的结果,并由SM中继到TTU。例如,SM 132可以命令TTU 138报告相交测试揭示的最近的可见图元,或报告与光线相交的所有图元,而不管它们是否是最近的可见图元。SM 132可以将这些不同的结果用于不同类型的可视化。或者,一旦TTU 138已经报告了光线-complet测试结果,SM 132即可自行执行光线-图元相交测试。TTU 138处理完叶节点后,可能会有其他分支节点(较早推送到光线的堆栈上的分支节点)要测试。
示例非限制性TTU 138硬件实现
图12示出了TTU 138的示例简化框图,该TTU 138包括配置为执行如上所述的加速遍历操作的硬件。在一些实施例中,TTU 138可以使用采用支持的叶节点图元的相交测试的短堆栈遍历以及阿尔法图元和不支持的叶节点图元(项)的中间遍历返回,执行包围体层次结构的深度优先遍历。TTU 138包括确定光线是否与包围体相交的专用硬件,以及确定光线是否与树数据结构的图元相交的专用硬件。
更详细地,TTU 138包括相交管理块722、光线管理块730和堆栈管理块740。这些块中的每一个(以及图12中的所有其他块)可以构成由逻辑门、寄存器、硬件嵌入式查找表或其他组合逻辑等实现的专用硬件。
光线管理块730负责管理关于由SM 132向光线管理块指定的光线的信息并执行与之相关的操作。堆栈管理块740与遍历逻辑712一起工作以管理关于BVH加速数据结构的遍历的信息并执行与之有关的操作。遍历逻辑712由光线-complet测试块710的结果指导,该光线-complet测试块710根据需要使用实例变换来测试光线管理块730指示的光线与BVH表示的体细分之间的相交。光线-complet测试块710经由作为TTU 138的一部分的L0complet高速缓存752从存储器140检索关于BVH的附加信息。光线-complet测试块710的结果通知遍历逻辑712是否需要进一步的递归遍历。堆栈管理块740维护堆栈,以在遍历逻辑712从BVH的一层遍历到另一层时追踪状态信息,其中随着遍历逻辑遍历到更深的BVH,堆栈管理块740将项推入堆栈,以及随着遍历逻辑在BVH中向上遍历,将项从堆栈中弹出。堆栈管理块740能够在SM请求的任何时间向请求SM 132提供状态信息(例如,中间或最终结果)。
相交管理块722使用所需的实例变换来管理关于光线和图元之间的交点的信息并执行与之相关的操作。光线-图元测试块720根据需要通过作为TTU 138一部分的L0图元高速缓存754从存储器140中检索关于几何形状的信息。向相交管理块722通知光线-图元测试和变换块720执行的相交测试的结果。因此,光线-图元测试和变换块720将相交结果提供给相交管理块722,相交管理块722向请求SM 132报告几何形状击中和相交。
堆栈管理单元740检查遍历状态以确定需要检索什么类型的数据以及哪个数据路径(complet或图元)将消耗它。在包括一个或更多个光线-complet测试块710和一个或更多个遍历逻辑块712的TTU 138的光线-complet测试路径中确定包围体的相交。complet指定包围体的根节点或内部节点。因此,complet可以为光线-complet测试定义一个或更多个包围体。在本文的示例实施例中,complet可以定义多个“子”包围体(无论它们是否表示叶节点),它们不一定每个都具有后代,但是TTU将并行测试其与光线-包围体的相交,以确定是否需要测试与多个包围体关联的几何图元的相交。
TTU 138的光线-complet测试路径识别光线与哪些包围体相交。与光线相交的包围体需要进一步处理,以确定与相交的包围体关联的图元是否相交。在包括一个或更多个光线-图元测试和变换块720以及一个或更多个相交管理块722的光线-图元测试路径中确定图元的相交。
TTU 138从一个或更多个SM 132接收执行树遍历操作的查询。该查询可以请求光线是否与BVH数据结构中的包围体和/或图元相交。该查询可以识别光线(例如,光线的原点、方向和长度)以及BVH数据结构和遍历状态(短堆栈),其包括引用该光线将要访问的一个或更多个包围体层次结构中的节点的一个或更多个条目。该查询还可以包括关于在遍历期间光线如何处理特定类型的相交的信息。可以将光线信息存储在光线管理块730中。可以基于光线-图元测试的结果来更新所存储的光线信息(例如,光线长度)。
TTU 138可以请求从TTU 138外部的存储器中检索在查询中标识的BVH数据结构。BVH数据结构的检索出的部分可以高速缓存在TTU内138的零级(L0)高速缓存750中,因此该信息可用于其他时间相关的TTU操作,从而减少了存储器140的访问。光线-complet测试所需的BVH数据结构的部分可被存储在L0complet高速缓存752中,并且光线-图元测试所需的BVH数据结构的部分可被存储在L0图元高速缓存754中。
在complet高速缓存752中获得请求的遍历步骤所需的complet信息之后,光线-complet测试块710确定与光线相交的包围体。在执行此测试时,可以将光线从包围体层次结构的坐标空间变换到相对于complet定义的坐标空间。针对与complet的子节点关联的包围盒测试光线。在示例非限制性实施例中,未针对complet自己的包围盒测试光线,因为(1)TTU138先前在测试引用此complet的父包围盒子项时针对相似的包围盒测试了光线,并且(2)complet包围盒的目的是定义一局部坐标系,在该局部坐标系中子包围盒可以以压缩形式表示。如果光线与任何子包围盒相交,则将结果推入遍历逻辑以确定将相应的子指针推入遍历堆栈的顺序(进一步的测试可能需要遍历逻辑712向下遍历到BVH的下一层)。递归地重复这些步骤,直到遇到BVH的相交叶节点为止。
光线-complet测试块710可以向遍历逻辑712提供光线-complet相交。使用光线-complet测试的结果,遍历逻辑712创建要被推送到堆栈管理块740的堆栈条目。堆栈条目可以指示内部节点(即,包括一个或更多个子节点的节点),需要由光线-complet测试块710针对光线相交进行进一步测试的内部节点和/或在相交的叶节点中标识的三角形,需要由光线-图元测试和变换块720针对光线相交测试该相交的叶节点。光线-complet测试块710可以在堆栈中标识的内部节点上重复遍历,以确定与光线相交的BVH中的所有叶节点。在示例非限制性实施例中,光线-complet测试块710执行的精确测试将由模式位、光线操作(参见下文)和击中剔除来确定,并且TTU 138可以将中间以及最终结果返回至SM 132。
多盒实现
图14是由TTU 138使用多盒技术执行的,用于加速光线-包围体相交测试的示例非限制性方法的流程图。该方法可以由在本申请中公开的TTU138(例如,光线-complet测试单元710和TTU 138的遍历逻辑712)执行,但不限于此。
该方法包括接收对complet相交测试的请求402。complet相交测试可以包括标识查询数据结构(例如,光线)与一个或更多个子节点(每个由一个或更多个包围体标识)之间的相交。可以从SM接收请求,也可以基于由TTU的光线-complet测试路径执行的光线-complet测试的先前结果。在一些实施例中,查询数据结构可以是光线,由其三坐标原点、三坐标方向和/或沿光线的t参数的最小值和最大值给出。complet可以通过complet在存储器中的位置或指向BVH结构的节点的指针来标识,BVH结构的节点可以是内部节点或叶节点。
响应于该请求,从存储器404检索complet。可以从TTU存储器(例如L0高速缓存750的complet高速缓存752)或TTU外部的存储器中检索complet。complet可以例如作为单个高速缓存行大小的块(例如,128B)提供或在高速缓存行大小的块的连续组中提供。高速缓存行大小的块可包括报头信息和包围体信息。请参见图8中的complet的示例格式。每个高速缓存行大小的块可以包括预定数量的子块,每个子块对应于当前节点的子节点。
块的报头信息可以包括块内的几何形状的类型,节点类型信息(例如,内部节点或叶节点),块中的子节点数,每个子节点中的伯德数和/或一个或更多个覆盖标志,用于控制确定如何处理与包围体相交的光线(例如,是否剔除光线)。参见图8。
子节点信息可以标识由该块表示的每个子节点的一个或更多个包围体。在典型情况下,每个子节点将只有单个AABB盒,但在多盒情况下,对于由该块表示的每个子节点将有不止一个AABB盒。因此,子项可以与在子节点信息中标识的单个包围体(例如,盒)或多个包围体(例如,子盒或子体)相关联。例如,每个子节点可以是用两个子盒、三个子盒或十二个子盒来标识。在一些示例中,子节点信息可以包括:每个子节点包括相同数量的子盒。在其他示例中,子节点信息可以包括:子节点用混合数量的盒标识。在一个示例中,可以用单个包围体(例如,盒)来标识一个或更多个子节点,并且可以用多个盒来标识一个或更多个其他子节点。然而,在图11的示例格式中,所有子节点与相同数量的包围体(例如1、2、3、4、6或12)关联。
该方法包括确定该complet是否标识了多盒子项406。可以基于在该complet的报头中设置的标志和/或针对该complet中标识的每个子项来进行确定。
当确定complet没有标识多盒子项时(步骤406中为“否”),该方法包括:确定与complet中每个子项相关联的单个包围体是否与光线408相交。该光线-complet相交测试可以确定光线是否与子项的包围体所标识的区域相交(例如,由对象空间坐标中的盒的顶点定义)。要针对子项的包围体所标识的区域来对光线进行测试,则光线可以使用实例转换将其转换为包围体的对象空间坐标。
该方法包括返回相交结果,该相交结果标识与光线410相交的每个子包围体。结果可以返回给SM、遍历逻辑712和/或堆栈管理单元740,以基于结果在TTU的光线-图元测试路径和/或光线-complet测试路径中执行进一步测试。相交结果可以包括光线相交位置。例如,相交结果可以包括光线的t-min值,其指示沿着光线子项的包围体与光线相交的位置。可以为被确定要与光线相交的每个子项提供相应的光线相交位置。
当确定complet包括多盒子项时(步骤406中为“是”),该方法包括测试与光线关联的所有多个包围体,以确定是否有任何包围体与光线412相交。与步骤408类似,标识与和光线相交的子项相关联的盒可以包括:确定光线是否与由任何多盒的包围体所标识的区域相交(例如,通过对象空间坐标中盒的顶点)。为了针对多盒所标识的区域测试光线,可以使用实例变换将光线转换为包围体的对象空间坐标。
该方法包括返回标识与光线414相交的每个子多盒的相交结果。操作412和414可以将确定为与光线相交的每个(子)包围体报告给遍历逻辑712,遍历逻辑712可将子项的所有多盒的所有此类相交结果“或”(OR)在一起,以用于确定指示相交/不相交的单个布尔真(True)/假(False)值。
可以将结果返回给SM、遍历逻辑712和/或堆栈管理单元740,以基于结果在TTU的光线-图元测试路径和/或光线-complet测试路径中执行进一步的测试。相交结果可以包括光线的相交位置的信息。例如,相交结果可以包括多盒包围体中所有相交的盒的最低t-min值。
RCT 710和TL 712的示例硬件实现
在图9和图12的TTU 138的光线-complet测试(RCT)710和遍历逻辑(TL)712部分中有效地实现了多盒机制。在表面上,它只是盒相交的“或”用于将集合中的多个盒放入单个子项的命中结果中,同时还为了t报告的目的找到了该集合中所有盒中最低的t-min相交(请参见图9)。在RCT 710中,所有盒都在单独的通道1202中操作,就像没有多盒一样。多盒的设置在RCT 710中解码并传递到TL 712。
图15示出了根据本公开的示例性实施例的可以执行光线-complet相交测试的硬件。硬件电路可以包括在TTU 138中。硬件电路可以包括光线-complet相交测试电路1202,t-min比较器电路1204和逻辑网络1206(例如,或门网络)。图9所示的硬件电路可以接收光线信息和complet,并为每个子项提供单个命中结果和t-min值。complet可以以多盒complet格式提供。在一些示例中,用于执行光线-complet相交测试的硬件电路的至少一部分可以包括在光线-complet测试块710和/或遍历逻辑712中或其之间。
为了正确报告t-min值,报告的t-min应该是所有相交的盒的所有t-min值的最小值。图16示出了这样的t-min比较器电路1204的示例。在示例非限制性实施例中,在为每个盒生成t-min值之前,t-min比较器网络1204位于RCT 710管线的末端。对于每个多盒,RCT710将找到最小t-min值并将该值交换为多盒中的最低序数子项,然后再将结果呈现给TL712。
如图12所示,将光线信息和包括报头和子项信息的数据块(例如,高速缓存行大小的块)提供给硬件电路。以预定数目的子块(N+1)提供子项信息,每个子块标识子项(例如,子项的包围盒)或多盒子项的盒(例如,多盒子盒的包围体)。
来自每个子块的光线信息和信息被提供给光线-complet相交测试电路1202。光线-complet相交测试电路1202被配置为接收光线信息和子块信息并确定光线是否与每个子块中标识的包围体相交。如图15所示,光线-complet相交测试电路1202可以包括与每个子块相关联的专用电路,该子块标识子包围体或多盒子项的盒,从而可以同时并行处理每个子块中标识的包围体。在其他示例性实施例中,可以由光线-complet相交测试电路1202执行的针对每个子块的相交测试可以串行、按顺序、分阶段或在管线中执行。在这样的非并行实现中,一旦发现多盒之一与光线相交,就可以避免测试与特定几何形状相关联的其他多盒。
对于每个子块,光线-complet相交测试电路1202可以标识是否存在击中或不击中(例如,在击中/未命中位中由0或1指示)以及相交的t-min值。t-min值指示沿着光线从光线起点开始光线首先与包围体相交的位置。
逻辑网络1206被配置为接收针对每个子块的击中/未击中结果,并且为每个子项返回单个击中结果。逻辑网络1206(其可以是TL 712的一部分)被配置为返回子项的单个击中结果,即使多盒子项的多个盒已被确定为与光线相交。在块中的每个子块标识包围体的情况下,逻辑网络1206可以简单地传递通过每个子块的结果。在两个或更多个子块标识同一子节点的包围体的情况下,如果确定了同一子节点的至少一个包围体与光线相交,则逻辑网络1206可以返回单个击中。
逻辑网络1206可以从报头接收信息,该信息标识数据块中子节点的数量和/或数据块中标识的每个子节点中的多盒的数量。基于该信息,逻辑网络1206被配置为对击中/未击中结果进行分组,使得当确定子项中的至少一个多盒与光线相交时,为每个子项提供击中。
逻辑网络1206可以包括基于该块中的子节点的数量和/或每个子节点中的多盒的数量而配置的“或”门(或“或非”门)网络。例如,在用两个子块(每个子块标识同一子节点的包围体)标识每个子项的情况下,“或”(或非)门可从两个相交测试电路接收击中/未击中结果,并当两个相交测试电路中的一个或两个指示对测试的包围体的击中时,返回子项的击中。
t-min比较器电路1204被配置为从确定为与光线相交的每个包围体接收t-min值,并为每个子项返回t-min值。类似于逻辑网络1206,t-min比较器电路1204可以从报头接收信息,该信息标识数据块中的子节点的数量和/或数据块中标识的每个子节点中的多盒的数量。基于该信息,t-min比较器电路1204被配置为确定子项的所有相交盒的所有t-min值的最小值。在一个示例中,t-min比较器电路1204被配置为针对多盒complet中的每个盒找到最小t-min值并在呈现结果之前,将该值交换为多盒中的最低序数子项。
报告子项的最小t-min值的t-min比较器电路1204为多盒子项中的盒所标识的每个包围体提供了从光线起点到最接近光线交点的光线缩短。在一个实施例中,尽管包括t-min比较器电路1204,其可以向TTU的光线-complet测试路径添加额外的管线阶段,但是基于t-min值来缩短光线的长度可以减少当相交的子节点的更多子节点和/或相交的子节点的图元与光线测试相交时所需计算量。
在以上示例中,硬件被配置为返回光线-complet相交结果而无需报告在该块中标识并与子节点相关联的每个相交的包围体和/或该子节点的交点的每个t-min值。如上所讨论的,即使当与子节点关联的多个包围体相交时,也为每个子节点提供单个命中或未命中,并且为每个相交的子节点提供多个t-min值中的最小t-min值。
为了正确报告t-min值(在示例性实施例中,其用于确定在执行光线-图元相交测试时首先要检查哪个几何形状,并且还可以用于基于tmin执行滤波),报告的t-min应该是所有相交盒的所有t-min值中的最小值。在为每个盒生成t-min值之前,t-min比较器网络位于光线-complet测试管线的末端。对于每个多盒,光线-complet测试将找到最小的t-min值,并将该值交换为多盒中最低序数的子项,然后再将结果提交给TL。
表1和图16(也请参考图8)示出了图12比较器网络1204的示例非限制性布局,用于包括12个子块的块,其中[0,1]是比较,并在输出为‘01’的子项0和1的t-min之间进行选择,并在较低层中使用:
表1
层1(2盒应答): [0,1][2,3][4,5][6,7][8,9][A,B]
层2a(3盒应答): [01,2][3,45][67,8][9,AB]
层2b(4盒应答): [01,23][45,67][89,AB]
层3(6盒应答): [0123,45][67,89AB]
层4(12盒应答): [012345,6789AB]
t-min比较器网络1204的示例非限制性布局,例如[0,1]提供比较并在输出为“01”且在较低层使用的子项0和1的t-min之间进行选择。在一些示例性实施例中,使该方法成本更低的是,由RCT 710产生的所有t-min值具有共同的指数。这意味着比较仅适用于尾数。
图17示出了由TL 712执行的过程的开始的一个示例实现的示例伪代码。如图所示,在TL 712的开始处,将得到的击中/未击中进行或(OR)运算。由图15所示的或(OR)(或者,或非(NOR))门网络1206表示的此功能是TL 712的一部分。OR(NOR)门网络1206的输出用于确定是否发现任何多盒与光线相交。如果集合中的任何盒是相交的,则将该子项视为击中。如图17所示,此功能有许多不同的可能实现,包括或(OR)或非(NOR)门,一个或更多个查找表,管线化/阶段化的硬件状态机等。
在示例非限制性实施例中,光线操作(Ray Ops)仅对一组阐明的多个包围体中的主要(数字最低)子项有效。此时所有其他光线操作均未使用并保留。但是,将来可能会在这些包围体中的不同包围体上执行不同的光线操作,例如以生成交点以外的信息。
光线-图元相交测试
再次参考图12,TTU 138还具有加速相交测试的能力,该相交测试确定光线是否与由多盒包围体包围的特定几何形状或图元相交。对于使用多盒的某些情况,几何形状足够复杂(例如,与例如顶点相比,由曲线或其他抽象构造所定义),以致在某些实施例中,TTU138可能无法帮助进行光线-图元相交测试。在这种情况下,TTU 138只是将光线-complet相交测试结果报告给SM 132,而SM 132本身会执行光线-图元相交测试。在其他情况下(例如,三角形),TTU 138自身可以执行光线-三角形相交测试,从而进一步提高了整个光线追踪过程的性能。为了完整起见,下面描述TTU 138如何执行或加速光线-图元相交测试。
如上所解释的,所找到的与光线相交的叶节点(特别是与此类叶节点相关联的多盒)识别(包围)可能与光线相交或不与光线相交的图元。TTU 138的一种选择是向SM 132提供例如在相交的叶节点中识别出的一系列几何形状以进行进一步处理。例如,SM 132自身可以基于TTU 138作为TTU遍历BVH的结果而提供的信息,确定所识别出的图元是否与光线相交。为了从SM 132卸载该处理并从而使用TTU 138的硬件对其进行加速,堆栈管理块740可以发出对光线-图元的请求,并且变换块720对TTU的光线-complet测试块710识别出的相交的叶节点内的图元执行光线-图元测试。在一些实施例中,SM 132可以发出对光线-图元测试的请求以测试特定范围的图元和变换块720,而与如何识别该几何形状范围无关。
在确保请求的光线-图元测试所需的图元数据在图元高速缓存754中可用之后,光线-图元和变换块720可使用存储在光线管理块730中的光线信息确定与光线相交的图元。光线-图元测试块720向相交管理块722提供确定为与光线相交的图元的识别。
相交管理块722可以将光线-图元测试的结果返回给SM 132。光线-图元测试的结果可以包括相交图元的标识符,交点距离光线原点的距离以及其他与相交图元的属性有关的信息。在一些实施例中,相交管理块722可以基于来自光线-图元和变换块720的先前相交结果来修改现有的光线-图元测试(例如,通过修改光线的长度)。
相交管理块722还可以追踪不同类型的图元。例如,不同类型的三角形包括在相交时将阻挡光线的不透明三角形,以及在相交时可能会或可能不会阻挡光线或可能需要SM进行其他处理的alpha三角形。光线是否被透明三角形阻挡可能例如取决于映射到三角形上的纹理、该纹理所占据的三角形面积以及纹理修改三角形的方式。例如,在某些实施例中,透明度(例如,染色的玻璃)要求SM 132追踪透明的对象击中,以便可以按光线参数顺序对其进行分类和着色,并且通常不会实际上阻挡光线。同时,alpha“修剪”允许基于映射到图元的纹理形状来修剪图元的形状,例如,将叶子形状切成三角形。(请注意,在光栅图形中,透明度(transparency)通常称为“alpha混合”,而修剪则称为“alpha测试”)。在其他实施例中,TTU 138可以将透明击中推送到存储器中的队列以供SM 132以后处理,并通过向纹理单元发送请求来直接处理修剪后的三角形。每个三角形可包括指示符,以指示三角形的类型。相交管理块722被配置为维持用于追踪不同类型的相交三角形的结果队列。例如,结果队列可以在一个队列中存储一个或更多个相交的不透明三角形标识符,并且在另一队列中存储一个或更多个透明三角形标识符。
对于不透明的三角形,可以在TTU 138中完全确定针对不太复杂的几何形状的光线相交,因为不透明的三角形的区域会阻挡光线穿过三角形的表面。对于透明三角形,在某些实施例中,无法在TTU 138中完全确定光线相交,因为TTU 138基于三角形的几何形状执行相交测试,并且可能无法访问三角形的纹理和/或纹理所占据的三角形面积(在其他实施例中,可以通过图形管线的纹理贴图块向TTU提供纹理信息)。为了完全确定三角形是否相交,可以将关于光线-图元和变换块720确定为相交的透明三角形的信息发送到SM 132,以便SM全面确定该三角形是否影响沿光线的可见性。
SM 132可以确定光线是否与和透明三角形相关联的纹理相交和/或光线是否将被该纹理阻挡。在一些情况下,SM 132可以基于该确定将修改的查询发送到TTU 138(例如,如果光线被纹理阻挡则缩短光线)。在一个实施例中,TTU 138可以被配置为将确定为与光线相交的所有三角形返回给SM 132,以进行进一步处理。因为就接口和线程同步而言,将每个三角形相交返回到SM 132进行进一步处理都是昂贵的,所以TTU 138可以配置为隐藏相交但可证明能够被隐藏而不会对所得场景造成功能上的影响的三角形。例如,因为向TTU 138提供了三角形类型信息(例如,三角形是不透明的还是透明的),所以TTU 138可以使用三角形类型信息来确定沿着光线被另一个相交的不透明三角形遮挡的相交三角形,并且因此不必将其包含在结果中,因为它们不会影响沿光线的可见性。如果TTU 138知道三角形被不透明的三角形沿光线遮挡,则可以从结果中隐藏被遮挡的三角形,而不会影响所得场景的可视化。
相交管理块722可以包括结果队列,该结果队列用于存储与三角形ID相关联的击中以及与光线击中三角形的点有关的信息。当确定光线与不透明三角形相交时,可以将三角形的身份和交点与光线原点的距离存储在结果队列中。如果确定光线与另一个不透明三角形相交,则如果交点到光线原点的距离大于已存储在结果队列中的相交的不透明三角形的距离,则可以从结果中忽略该另一个相交的不透明三角形。如果交点距光线原点的距离小于已存储在结果队列中的相交的不透明三角形的距离,则另一个相交的不透明三角形可以替换结果队列中存储的不透明三角形。测试了查询的所有三角形之后,可以将在结果队列中存储的不透明三角形信息和相交信息发送到SM 132。
在一些实施例中,一旦识别出不透明三角形交点,则相交管理块722可以缩短存储在光线管理块730中的光线,以使得相交的不透明三角形(沿着光线)后面的包围体(其可以包括三角形)将不会被识别为与光线相交。
相交管理块722可以将关于相交的透明三角形的信息存储在单独的队列中。所存储的关于相交的透明三角形的信息可以被发送到SM 132,以供SM确定光线是否与和三角形相关联的纹理相交和/或该纹理是否阻挡光线。SM可以基于该确定,将该确定的结果返回给TTU 138和/或修改查询(例如,如果该光线被纹理阻挡,则缩短该光线)。
如上所讨论的,TTU 138允许快速遍历加速数据结构(例如,BVH),以确定数据结构中的哪些图元(例如,用于生成场景的三角形)与查询数据结构(例如,光线)相交。例如,TTU138可以确定加速数据结构中的哪些三角形与光线相交并将结果返回给SM 132。但是,就接口和线程同步而言,将每个三角形相交的结果返回给SM 132的成本很高。TTU 138提供了一种硬件逻辑,该硬件逻辑被配置为隐藏那些被证明能够被隐藏而对所得场景没有功能性影响的项或三角形。结果返回给SM的减少和线程之间的同步步骤大大提高了遍历的整体性能。在本申请中公开的TTU 138的示例非限制性实施例提供了在没有SM 132干预的情况下在TTU 138内丢弃一些相交,使得更少的相交返回到SM 132,并且SM 132不必检查所有相交的三角形或项范围。
由TTU 138和SM 132实例化管线实现的示例
如上所讨论的,本文的实施例的一个示例特征涉及将多盒从加速结构的较低层提升到较高层。在示例性实施例中,这通常通过实例变换来完成。为了完整起见,下面描述示例性实施例中的TTU 138如何执行实例化和相关联的变换。
图18A的光线追踪管线流程图的更详细的图示出了代表性用例的组件之间的数据流和交互:针对包含几何图元的场景追踪光线,并在硬件中处理实例变换。在一个示例非限制性实施例中,图18A的光线追踪管线本质上是软件定义的(在示例实施例中,这意味着其由SM 132确定),但是广泛使用了由TTU 138的硬件加速。关键组件包括SM 132(以及其余的计算管线)、TTU 138(其充当SM的协处理器)以及L1高速缓存和下游存储器系统,TTU从这些组件中获取BVH和三角形数据。
图18A中所示的管线示出了可以由开发系统提前执行包围体层次结构创建1002。还示出了在示例实施例中,作为着色(可以包括照明和纹理),由SM 132或其他软件执行或控制的光线创建和分布1004。示例管线包括分别由TTU 138执行的“顶层”BVH树遍历1006、光线变换1014、“底层”BVH树遍历1018和光线/三角形(或其他图元)相交1026。不必按所示顺序执行这些操作,如TTU 138和SM 132之间的握手确定了TTU 138的工作方式和顺序。
SM 132一次向TTU 138呈现一条或更多条光线。SM 132呈现给TTU 138用于遍历的每条光线都可以包括光线的几何参数、遍历状态以及光线的光线标志、模式标志和光线操作信息。在示例实施例中,光线操作(RayOp)提供或包括辅助算术和/或逻辑测试,以抑制、覆盖和/或允许相交的存储。遍历堆栈也可以由SM 132使用,以将某些状态信息传送给TTU138,以便在遍历中使用。新的光线查询可以从显式遍历堆栈开始。但是,对于某些查询,可以提供少量的堆栈初始化器以开始给定类型的新查询,例如:从complet开始的遍历;光线与一定范围的三角形的相交;光线与一定范围的三角形的相交,然后从complet开始进行遍历;针对给定三角形从三角形缓冲区获取的顶点,等等。在一些实施例中,使用堆栈初始化器代替显式堆栈初始化可提高性能,因为堆栈初始化器需要较少的流处理器寄存器并减少了需要从流处理器传输到TTU的参数数量。
在示例实施例中,当查询与特定类型的包围体相交时或与特定图元类型的图元相交时,SM 132随每个查询(例如,光线)呈现的一组模式标志可以至少部分地控制TTU 138将如何处理查询。SM 132提供给TTU 138的模式标志使SM和/或应用程序具有例如通过RayOp指定辅助算术或逻辑测试以抑制、覆盖或允许存储相交的能力。模式标志可以例如使得能够根据诸如与每个包围体和/或图元相关联的深度(或距离),与距离原点或光线的距离等(尤其是对象的距离)有关的包围体或图元的大小等方面来改变遍历行为。应用程序可以使用此能力来针对相交测试与特定的查询集或查询组动态地和/或选择性地启用/禁用对象集,例如,以允许在应用程序状态发生变化时(例如,在门打开或关闭时)使用不同版本的模型,或提供根据光线长度选择的不同版本的模型,以实现某种形式的几何细节水平,或允许某些类别的光线中的特定对象集使某些层在特定视图中可见或不可见。
除了可以分别为光线-complet相交和光线-图元相交指定的模式标志集之外,光线数据结构还可以指定其他与光线操作(RayOp)测试相关的参数,例如光线标志、光线参数和RayOp测试。光线标志可以由TTU 138使用,以控制遍历行为、背面剔除和处理各种子节点类型的各个方面,取决于可选的RayOp测试的通过/失败状态。RayOp测试以增加一些复杂性为代价,为TTU 138的能力增加了灵活性。TTU 138为其正在处理的每个活动光线保留“光线槽”,并且可以在遍历期间将光线标志、模式标志和/或RayOp信息存储在TTU内的相应光线槽缓冲器中。
在图18A所示的示例中,TTU 138执行顶层树遍历1006和底层树遍历1018。在示例实施例中,BVH的两层遍历使能对动态场景变化进行快速光线追踪响应。如上所述,可以将多盒complet信息从底层树遍历1018提升到顶层树遍历1006。这使得单个图元的对齐更紧密地适合其自己的对象空间,然后放置在公共世界空间中,例如,通过BVH构建器的变换,同时减少TTU 138在实时光线追踪操作期间需要执行的实例变换的数量。
光线变换1014通过将可以在第一坐标空间(例如,世界空间)中的顶层遍历中使用的光线变换到底层遍历的BVH的不同坐标空间(例如,对象空间),提供从顶层树遍历1006到底层树遍历1018的适当迁移。在先前的文献中描述了使用两层遍历的示例BVH遍历技术,例如,参见Woop,“用于动态场景的光线追踪硬件架构(A Ray Tracing HardwareArchitecture for Dynamic Scenes)”,萨尔兰德大学,2004,但是实施例不限于此。
示例顶层树遍历
TTU 138进行的顶层树遍历1006从L1高速缓存1012接收complet,并向光线变换1014提供实例以进行变换,或向SM 132提供未命中(miss)/结束输出1013以用于由SM进行最接近击中着色器1015处理(此块还可以基于非叶节点/未击中条件来递归地操作)。在顶层树遍历1006中,下一个complet取回步骤1008从存储器和/或高速缓存层次结构中获取针对步骤1010中的光线相交要测试的下一个complet,并且在所获取的complet中的包围体上进行光线-包围体相交测试。
如上所述,实例节点将一个BVH连接到处于不同坐标系中的另一个BVH。当相交的包围体的子项是实例节点时,光线变换1014能够从L1高速缓存1016中检索适当的变换矩阵。TTU 138使用适当的变换矩阵将光线变换到子BVH的坐标系。已经通过引用并入的申请号为14/697,480的美国专利申请描述了将树中的第一组节点连接到第二组节点的变换节点,其中第一组节点和第二组节点位于不同的坐标系中。示例实施例中的实例节点可以类似于美国申请号为14/697,480中的变换节点。替代地,在图18B中所示的TTU 138的非实例化模式中,TTU不执行“底”层树遍历1018,并且非实例化的树BVH遍历由框1008、1010例如仅使用一个堆栈来执行。TTU 138可以基于它从BVH和/或查询类型中读取的内容在图18A的实例化操作和图18B的非实例化操作之间切换。例如,特定的查询类型可能会限制TTU仅使用非实例化操作。在这种查询中,任何相交的实例节点都将返回给SM。
在一些非限制性实施例中,在获取下一个complet之前,对所获取的complet中的每个包围体执行步骤1010中的光线-包围体相交测试。其他实施例可以使用其他技术,例如以深度优先的方式遍历顶层遍历BVH。已经通过引用并入的专利号为9,582,607的美国专利描述了可以在示例实施例中使用的一个或更多个complet的结构和内容。专利号为9,582,607的美国专利也描述了complet的示例遍历。
当确定包围体与光线相交时,针对随后的与光线的相交测试和遍历,对相交的包围体的子包围体(或对其的引用)进行追踪。在示例实施例中,一个或更多个堆栈数据结构用于追踪随后要测试与光线的相交的子包围体。在一些示例实施例中,可以使用小尺寸的遍历堆栈来追踪要通过顶层树遍历1006的操作遍历的complet,和要针对相交进行测试的图元,并且可以使用较大的局部栈数据结构来追踪底层树遍历1018中的遍历状态。应注意的是,在具有多盒属性的内部节点的情况下,每个多盒不会产生子节点或其他后代节点。相反,如果需要向下遍历,则包含所有多盒的较大AABB包围体通常是产生进一步的子包围盒、孙包围盒等的包围体。因此,至少在一些实施例中,多盒没有子节点——或者因为它们是没有子节点的叶节点,或者因为它们与使用较大包围体进行节点继承的内部节点相关联。
示例底层树遍历
在底层树遍历1018中,下一个complet获取步骤1022在步骤1024中从内存和/或高速缓存层次结构1020中获取要针对光线相交进行测试的下一个complet,并在获取的complet中的包围体上进行光线-包围体相交测试。如上所述,底层树遍历可以包括具有与在较上层树遍历中遍历的包围体处于不同的坐标系中的包围体的complet。底层树遍历还从L1高速缓存中接收complet,并且可以基于非叶/无击中条件在自身内部递归地或迭代地进行操作,并且还伴随基于未命中/结束检测的顶层树遍历1006。随着将光线变换到检索到的较低层complet的坐标系中,可以确定光线与较低层BVH中的包围体的相交。然后将在较低层的树遍历中找到的与光线相交的叶包围体提供给光线/三角形相交1026。
底层树遍历1018的叶输出被提供给光线/三角形相交1026(其具有L0高速缓存访问以及通过L1高速缓存1028检索三角形的能力)。L0complet和三角形高速缓存可以是TTU138内部的小型只读高速缓存。当到达某些叶节点而没有遍历实例化的BVH时,光线/三角形相交1026也可以从顶层树遍历1006接收叶输出。
在已经处理完图元范围内的所有图元之后,相交管理单元检查结果队列的状态,并制作数据包以发送到堆栈管理单元和/或光线管理单元,用于更新光线的属性和遍历状态,设置光线的下一个遍历步骤和/或将光线返回到SM 132(如有必要的话)。如果结果队列包含在处理图元范围期间找到的不透明或阿尔法(alpha)相交,则相交管理单元将结果队列中最近的不透明相交的参数长度(t)发信号给光线管理单元,以记录为光线tmax从而缩短光线。为了更新遍历状态以设置光线的下一个遍历步骤,相交管理单元会向堆栈管理单元发送信号,告知结果队列中是否存在来自图元范围的不透明相交,结果队列中是否存在一个或多个alpha相交,结果队列是否已满,是否在图元范围中找到了尚未返回到SM并且不存在于结果队列中的其他alpha相交,以及在SM消耗结果队列的内容之后要针对光线进行测试的图元范围中的下一个alpha图元的索引(根据结果队列中当前图元范围,具有最高存储器顺序的alpha图元之后的范围中的下一个图元的索引)。
当堆栈管理单元740从相交管理单元722接收到分组时,堆栈管理单元740检查该分组以确定完成遍历步骤并开始下一个所需的下一动作。如果来自相交管理单元722的分组指示在图元范围内发现了不透明的相交,并且光线模式位指示一旦找到了任何相交,光线将完成一次遍历,则堆栈管理单元740将光线及其结果队列返回到SM,其中遍历状态指示遍历已完成(完成标志设置和/或空的顶层和底层堆栈)。如果来自相交管理单元722的分组(packet)指示结果队列中存在不透明或alpha相交,以及在还没有返回到SM的图元范围的处理期间结果队列中不存在光线遇到的图元范围中的剩余的alpha相交,则堆栈管理单元740将光线和结果队列返回到SM,其中遍历状态被修改为设置剔除不透明位,以防止在来自图元范围的最高alpha图元相交在光线的结果队列中返回到SM之后进一步处理图元范围中的不透明图元和前进到第一alpha图元的图元范围起始索引。如果来自相交管理单元722的分组指示当光线处理图元范围时未发现不透明或alpha相交,则堆栈管理单元740从活动遍历堆栈中弹出顶部堆栈条目(对应于完成的图元范围)。如果来自堆栈管理单元740的分组指示结果队列中存在不透明的相交和光线模式位不指示一旦已经找到任何相交和/或结果队列中存在alpha相交则光线将完成遍历中的任一个,但是在尚未返回给SM的结果队列中不存在的图元范围中未找到剩余alpha相交,则堆栈管理单元740将顶部的堆栈条目(对应于完成的图元范围)弹出活动遍历堆栈并修改结果队列的内容,以指示结果队列中存在的所有相交都来自完成处理的图元范围。
如果活动堆栈是底部堆栈,而底部堆栈为空,则堆栈管理单元740将活动堆栈设置为顶部堆栈。如果顶部堆栈是活动堆栈,并且活动堆栈为空,则堆栈管理单元740将光线及其结果队列返回到SM,其中遍历状态指示遍历已完成(完成标志设置和/或空的顶层和底层堆栈)。如果活动堆栈包含一个或更多个堆栈条目,则堆栈管理单元740检查顶部堆栈条目并开始下一遍历步骤。在共同待决的申请号为16/101,148的美国专利申请“保守水密光线三角形相交(Conservative Watertight Ray Triangle Intersection)”和申请号为16/101,196的美国专利申请“处理乱序的不透明和alpha光线/图元相交的方法(Method forHandling Out-of-Order Opaque and Alpha Ray/Primitive Intersections)”中描述了与光线相交的图元和/或图元范围的测试以及将结果返回到SM 132,在本文中通过引用方式将以上两者并入本文。
包括光线追踪的示例图像生成管线
尽管以上公开内容是在计算机图形和可视化的特定上下文中进行构架的,但是光线追踪和所公开的TTU可以用于图形和可视化之外的多种应用程序。非限制性示例包括用于逼真的声音合成的声传播、声呐系统的模拟、光学元件和系统的设计、粒子传输模拟(例如,用于医学物理学或实验性高能物理)、一般的波传播模拟、与LIDAR数据的比较,用于例如机器人或车辆定位等目的。过去,OptiXTM已用于其中一些应用领域。
例如,可以以多种方式使用上述的光线追踪和其他功能。例如,除了用于使用光线追踪来渲染场景外,它们还可以与扫描变换技术结合使用,例如在对3D模型的几何构建块(即多边形图元,例如三角形)进行扫描转化的情况下,用于生成用于(例如,在图9所示的显示器150上)显示的图像。
然而,同时,当用于产生用于虚拟现实、增强现实、混合现实、视频游戏、运动和静止图片生成以及其他可视化应用程序的图像时,本文的技术提供了优点。图19示出了根据实施例的用于处理图元以提供图像的图像像素值的示例流程图。如图19所示,可以响应于接收到用户输入而生成3D模型的图像(步骤1652)。用户输入可以是显示图像或图像序列的请求,例如在与应用程序(例如,游戏应用程序)交互期间执行的输入操作。响应于用户输入,系统使用常规的GPU 3D图形管线对场景的3D模型几何图元执行扫描转化和光栅化(步骤1654)。几何图元的扫描转化和光栅化可包括例如使用本领域技术人员众所周知的常规技术(例如照明、变换、纹理贴图、光栅化等)来处理3D模型的图元以确定图像像素值。所生成的像素数据可以被写入帧缓冲区。
在步骤1656中,可以使用TTU硬件加速从光栅化图元上的一个或更多个点开始追踪一条或更多条光线。可以根据本申请中公开的一种或更多种光线追踪功能来追踪光线。基于光线追踪的结果,可以修改存储在缓冲区中的像素值(步骤1658)。在一些应用程序中,修改像素值可以例如通过例如施加更多逼真的反射和/或阴影来改善图像质量。使用存储在缓冲区中的经修改的像素值来显示图像(步骤1660)。
在一个示例中,可以使用上述处理系统来实现几何图元的扫描转化和光栅化,并且可以由SM 132使用关于图12描述的TTU架构来实现光线追踪,以添加更多的可视化特征(例如,镜面反射,阴影等)。图19仅是非限制性示例–SM 132本身可以采用描述的TTU,而无需纹理处理或其他常规3D图形处理来产生图像,或者SM可以采用纹理处理和其他常规3D图形处理而无需所描述的TTU来产生图像。SM还可根据应用程序在软件中实现任何所需的图像生成或其他功能,以提供任何所需的可编程功能,这些功能不受纹理贴图硬件、树遍历硬件或其他图形管线硬件提供的硬件加速功能的约束。
在一些实施例中,TTU 138是无状态的,意味着在查询之间的TTU中没有维护架构状态。同时,对于在SM1840上运行的软件来说,请求继续上一查询通常很有用,这意味着相关状态应由TTU 138写入寄存器,然后传递回寄存器中的TTU(通常是原位)以继续。该状态可以采用遍历堆栈的形式,该遍历堆栈追踪BVH遍历的进度。
还可以提供少量的堆栈初始化器以开始给定类型的新查询,例如:
●从complet开始遍历
●光线与一系列三角形相交
●光线与一系列三角形相交,然后从complet开始遍历
●从给定三角形的三角形缓冲区中获取顶点
●在“从complet开始的遍历”和“光线与一系列三角形相交”前面进行实例变换的可选支持。
顶点获取是一种简单的查询,其可以用包含堆栈初始化器和其他内容的请求数据来指定。其他查询类型可能要求光线或光束的说明,以及堆栈或堆栈初始化器和描述查询详细信息的各种光线标志。光线由其三坐标原点、三坐标方向以及沿光线的t参数的最小值和最大值给出。光束还由第二原点和方向给出。
各种光线标记可用于控制遍历行为、背面剔除和各种子节点类型的处理的各个方面,其取决于可选rayOp测试的通过/失败状态。RayOps为TTU的功能增加了相当大的灵活性。在一些示例实施例中,RayOps部分引入了两个光线标志版本,其可以基于对与光线一起传输的数据和存储在complet中的数据的指定操作来动态地选择两个光线标志版本。要探索此类标志,了解BVH中允许使用的不同子节点类型以及TTU 138可以返回给SM的各种击中类型,这首先有帮助。示例节点类型为:
■子complet(即内部节点)(单盒或多盒)
默认情况下,TTU 138通过下降到子complet来继续遍历。
■三角形范围,对应于三角形缓冲区中的一组连续三角形
(1)默认情况下,光线所遇到的三角形范围由TTU 138本地处理,方法是测试三角形的相交并相应地缩短光线。如果遍历完成并且击中了三角形,则默认行为是将三角形ID连同相交的t值和重心坐标返回给SM1840。这是“三角形”击中类型。
(2)默认情况下,即使遍历尚未完成,设置了alpha位的相交的三角形也会返回到SM 1840。如果软件确定三角形实际上是透明的,则返回的遍历堆栈包含继续遍历所需的状态。
(3)在某些实施例中,光束不支持三角形相交,因此默认情况下将遇到的三角形范围作为“TriRange”击中类型返回到SM 1840,其包括指向与该范围重叠的第一个三角形块的指针,这些参数指定了该范围,以及与叶包围盒的相交的t值。
■项范围,其由索引(从用户提供的存储在complet中的“项范围库”中得出)和项计数组成。
默认情况下,项范围作为“ItemRange”击中类型返回到SM 1840,其由例如索引、计数和与叶包围盒的相交的t值组成。
■实例节点。
在一些实施例中,TTU 138可以通过将光线变换到实例BVH的坐标系来本地处理一个级别的实例化。可以在软件中处理其他级别的实例化(或其他每个级别的实例化,具体取决于策略)(或在其他实施例中,TTU 138硬件可以处理两个、三个或更多级别的实例化)。为此提供了“InstanceNode”击中类型,其由指向实例节点的指针和与叶包围盒的相交的t值组成。在其他实施方式中,硬件可以处理两个、三个或更多级别的实例化。
除了特定于节点的击中类型之外,还提供了通用的“NodeRef”击中类型,其由指向父complet本身的指针以及指示与哪个子项相交的ID和与那个子项的包围盒相交的t值组成。
对于查询或BVH格式不正确地形成或遍历过程中遍历遇到问题的情况,可以提供“Error(错误)”击中类型。
对于光线或光束未命中(miss)场景中所有几何形状的情况,可以提供“None(无)”击中类型。
TTU如何处理四种可能的节点类型中的每一个由一组特定于节点的模式标志确定,该模式标志被设置为针对给定光线的查询的一部分。上面提到的“默认”行为对应于将模式标志设置为全零的情况。
标志的替代值允许剔除给定类型的所有节点,将给定类型的节点作为NodeRef击中类型返回给SM,或者使用其对应的击中类型将三角形范围或实例节点返回给SM,而不是在TTU 138内本地地处理它们。
可以提供附加的模式标志,以控制alpha三角形的处理。
如同明确提出一样,以上引用的所有专利和出版物均以引用方式并入。
尽管已经结合当前被认为是最实际和优选的实施例描述了本发明,但是应当理解,本发明不限于所公开的实施例,相反,本发明旨在覆盖包括在所附权利要求书的精神和范围内的各种修改和等同布置。

Claims (24)

1.一种光线追踪设备,包括:
存储器,其被配置为存储加速数据结构的至少一部分,所述加速数据结构定义了包围图元的不同部分的多个包围体;以及
可操作地耦合到所述存储器的电路,其被配置为执行操作,所述操作包括:
接收有关光线的信息;
确定所述光线是否与所述多个包围体中的任何包围体相交;以及
当确定所述光线与所述多个包围体中的任何包围体相交时,标识所述图元的单个实例以进行光线相交测试。
2.根据权利要求1所述的光线追踪设备,其中所述多个包围体包括轴对齐的包围体。
3.根据权利要求1所述的光线追踪设备,其中确定所述光线与所述多个包围体之一相交被用作所述光线与全部的所述多个包围体相交的指示。
4.根据权利要求1所述的光线追踪设备,其中加速数据结构包括包围体层次结构,并且所述多个包围体由压缩treelet表示。
5.根据权利要求4所述的光线追踪设备,其中所述压缩treelet为子节点定义所述多个包围体,其中所述多个包围体包括至少一个扩展包围体。
6.根据权利要求1所述的光线追踪设备,其中在世界空间中为顶层加速结构处的内部节点定义所述多个包围体。
7.根据权利要求1所述的光线追踪设备,其中压缩treelet部分指定所述多个包围体的数量。
8.根据权利要求1所述的光线追踪设备,其中所述多个包围体中的每个包围体均包括第一图元和第二图元两者,并且所述电路被构造成标识包围所述第一图元的第一组多个包围盒以及包围所述第二图元的第二组多个包围盒。
9.根据权利要求1所述的光线追踪设备,其中所述电路是用于生成图像的服务器或数据中心的一部分,并且所述图像被流传输到用户设备。
10.根据权利要求1所述的光线追踪设备,其中所述电路用于生成图像,并且所述图像用于训练、测试或证明在机器、机器人或自主车辆中使用的神经网络。
11.一种存储压缩treelet格式的非暂时性存储器,包括:
报头,其包括指定包围图元的轴对齐的包围体的数量的字段;
包围图元的第一部分的轴对齐的包围体的标识;以及
包围图元的另一部分的另一轴对齐的包围体的标识。
12.根据权利要求11所述的非暂时性存储器,其中所述压缩treelet的大小被设置为适合于高速缓存行,并且所述报头包括附加字段,所述附加字段包括模式、多盒计数和指向包围体层次结构的多个指针中的至少一些。
13.一种测试光线是否与无法与单个轴对齐的包围体紧密适合的图元相交的方法,包括:
(a)确定多个轴对齐的包围体,其全体比所述最初提到的单个轴对齐的包围体更紧密地适合图元;
(b)以数据格式表示所述多个轴对齐的包围体;
(c)使用所述数据格式遍历包围体层次结构;以及
(d)基于所述遍历,确定光线与所述多个轴对齐的包围体之间的交点,
其中当发现所述光线与所述多个轴对齐的包围体中的任何包围体相交时,发现所述光线潜在地与所述图元相交,并且对于所述多个轴对齐的包围体中的每个包围体,不复制所述图元。
14.根据权利要求13所述的方法,其中(c)和(d)由树遍历硬件执行。
15.根据权利要求13所述的方法,还包括:(e)响应于发现所述光线与所述多个轴对齐的包围体中的任何包围体相交而针对所述图元测试所述光线。
16.根据权利要求13所述的方法,其中(c)和(d)由树遍历硬件执行,并且(e)由调用所述树遍历硬件的处理器执行。
17.根据权利要求13所述的方法,其中所述数据格式指定包括扩展包围体的压缩treelet。
18.根据权利要求13所述的方法,其中在服务器上或在数据中心中执行(a)、(b)、(c)和(d)以生成图像,并且将所述图像流传输到用户设备。
19.根据权利要求13所述的方法,其中执行(a)、(b)、(c)和(d)以生成用于训练、测试或证明在机器、机器人或自主车辆中使用的神经网络的图像。
20.一种光线追踪方法,包括:
(a)确定将对象与对象坐标空间包围在一起的多盒;以及
(b)将所述确定的多盒提升到世界坐标空间,以用于在顶层加速结构相交测试中使用。
21.根据权利要求20所述的光线追踪方法,还包括:将所述多盒从对象坐标空间变换到世界坐标空间。
22.根据权利要求20所述的光线追踪方法,其中(a)在叶节点处执行,并且(b)在内部节点处执行。
23.根据权利要求20所述的光线追踪方法,还包括:测试所述提升的多盒与光线的相交。
24.根据权利要求20所述的光线追踪方法,其中所述提升的多盒具有与所述确定的多盒不同的尺寸。
CN202110648142.9A 2020-06-10 2021-06-10 适用于光线追踪的基于硬件的技术 Active CN113781625B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/897,764 US11295508B2 (en) 2020-06-10 2020-06-10 Hardware-based techniques applicable for ray tracing for efficiently representing and processing an arbitrary bounding volume
US16/897,764 2020-06-10

Publications (2)

Publication Number Publication Date
CN113781625A true CN113781625A (zh) 2021-12-10
CN113781625B CN113781625B (zh) 2024-03-15

Family

ID=78718992

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110648142.9A Active CN113781625B (zh) 2020-06-10 2021-06-10 适用于光线追踪的基于硬件的技术

Country Status (3)

Country Link
US (3) US11295508B2 (zh)
CN (1) CN113781625B (zh)
DE (1) DE102021205765A1 (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11017581B1 (en) * 2020-01-04 2021-05-25 Adshir Ltd. Method for constructing and traversing accelerating structures
WO2021149526A1 (ja) * 2020-01-23 2021-07-29 ソニーグループ株式会社 情報処理装置、情報処理方法及びプログラム
US11295508B2 (en) * 2020-06-10 2022-04-05 Nvidia Corporation Hardware-based techniques applicable for ray tracing for efficiently representing and processing an arbitrary bounding volume
EP3940649A1 (en) * 2020-07-14 2022-01-19 Imagination Technologies Limited Methods and systems for constructing ray tracing acceleration structures
WO2023044001A1 (en) 2021-09-16 2023-03-23 Nvidia Corporation Displaced micromesh compression
US11954788B2 (en) * 2021-12-28 2024-04-09 Advanced Micro Devices, Inc. Variable width bounding volume hierarchy nodes
US11861785B2 (en) 2022-02-04 2024-01-02 Qualcomm Incorporated Generation of tight world space bounding regions
US20240087211A1 (en) 2022-09-09 2024-03-14 Nvidia Corporation Generation and Traversal of Partial Acceleration Structures for Ray Tracing
US20240095996A1 (en) 2022-09-16 2024-03-21 Nvidia Corporation Efficiency of ray-box tests

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6603484B1 (en) * 1999-08-06 2003-08-05 Mitsubishi Electric Research Laboratories, Inc. Sculpting objects using detail-directed hierarchical distance fields
US20160071313A1 (en) * 2014-09-04 2016-03-10 Nvidia Corporation Relative encoding for a block-based bounding volume hierarchy
CN106233338A (zh) * 2014-04-21 2016-12-14 高通股份有限公司 用于光线跟踪应用中的树遍历的开始节点确定
US20170178387A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Decompression and traversal of a bounding volume hierarchy
CN107408312A (zh) * 2015-04-02 2017-11-28 高通股份有限公司 光线追踪应用中的有效层次结构遍历
CN109215106A (zh) * 2018-08-30 2019-01-15 东北大学 一种基于动态场景的实时光线追踪加速结构的方法
CN110599582A (zh) * 2019-09-11 2019-12-20 河南工业职业技术学院 一种类长方物体包围盒的快速算法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10331632B2 (en) 2013-06-10 2019-06-25 Nvidia Corporation Bounding volume hierarchies through treelet restructuring
US10235338B2 (en) 2014-09-04 2019-03-19 Nvidia Corporation Short stack traversal of tree data structures
US11321910B2 (en) * 2019-04-04 2022-05-03 Intel Corporation Apparatus and method for reduced precision bounding volume hierarchy construction
US11295508B2 (en) * 2020-06-10 2022-04-05 Nvidia Corporation Hardware-based techniques applicable for ray tracing for efficiently representing and processing an arbitrary bounding volume

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6603484B1 (en) * 1999-08-06 2003-08-05 Mitsubishi Electric Research Laboratories, Inc. Sculpting objects using detail-directed hierarchical distance fields
CN106233338A (zh) * 2014-04-21 2016-12-14 高通股份有限公司 用于光线跟踪应用中的树遍历的开始节点确定
US20160071313A1 (en) * 2014-09-04 2016-03-10 Nvidia Corporation Relative encoding for a block-based bounding volume hierarchy
CN107408312A (zh) * 2015-04-02 2017-11-28 高通股份有限公司 光线追踪应用中的有效层次结构遍历
US20170178387A1 (en) * 2015-12-18 2017-06-22 Intel Corporation Decompression and traversal of a bounding volume hierarchy
CN109215106A (zh) * 2018-08-30 2019-01-15 东北大学 一种基于动态场景的实时光线追踪加速结构的方法
CN110599582A (zh) * 2019-09-11 2019-12-20 河南工业职业技术学院 一种类长方物体包围盒的快速算法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
YAN GU等: "《Ray Specialized Contraction on Bounding Volume Hierarchies》", 《COMPUTER GRAPHICS FORUM》, vol. 34, no. 7, pages 309 - 318 *
刘春峰 等: "《基于GPU的分块式光线追踪算法研究1)》", 《微电子学与计算机》, no. 10, pages 31 - 35 *

Also Published As

Publication number Publication date
CN113781625B (zh) 2024-03-15
DE102021205765A1 (de) 2021-12-16
US11663770B2 (en) 2023-05-30
US20230316632A1 (en) 2023-10-05
US12073504B2 (en) 2024-08-27
US20210390756A1 (en) 2021-12-16
US11295508B2 (en) 2022-04-05
US20220180593A1 (en) 2022-06-09

Similar Documents

Publication Publication Date Title
CN113781626B (zh) 遍历在射线追踪中使用的数据的技术
CN113781625B (zh) 适用于光线追踪的基于硬件的技术
CN113808245B (zh) 用于遍历光线追踪加速结构的增强技术
CN113781624B (zh) 具有可选的世界空间变换的光线跟踪硬件加速
CN113808241B (zh) 共享顶点的射线追踪图元的硬件加速
CN113808244B (zh) 支持运动模糊和运动/变形几何形状的光线追踪硬件加速
CN117157676A (zh) 加速实时光线追踪的三角形可见性测试
CN113822788B (zh) 光线追踪硬件中对资源的早期释放
US20240009226A1 (en) Techniques for traversing data employed in ray tracing
CN117723266A (zh) 提高光线-盒测试的效率
US20240303906A1 (en) Ray tracing hardware acceleration with alternative world space transforms
US20240087211A1 (en) Generation and Traversal of Partial Acceleration Structures for Ray Tracing

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
GR01 Patent grant
GR01 Patent grant