CN113781624A - 具有可选的世界空间变换的光线跟踪硬件加速 - Google Patents
具有可选的世界空间变换的光线跟踪硬件加速 Download PDFInfo
- Publication number
- CN113781624A CN113781624A CN202110631675.6A CN202110631675A CN113781624A CN 113781624 A CN113781624 A CN 113781624A CN 202110631675 A CN202110631675 A CN 202110631675A CN 113781624 A CN113781624 A CN 113781624A
- Authority
- CN
- China
- Prior art keywords
- ray
- coordinate space
- traversal
- data structure
- transformation
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-tracing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/08—Volume rendering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/10—Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2210/00—Indexing scheme for image generation or computer graphics
- G06T2210/12—Bounding box
Abstract
本发明公开了具有可选的世界空间变换的光线跟踪硬件加速。公开了适用于用于遍历分层加速结构的光线跟踪硬件加速器的增强技术。例如,通过在硬件中将光线从光线的坐标空间变换为在遍历分层加速结构中的相应点处的两个或更多个坐标空间,来提高此类硬件加速器的遍历效率。在一个示例中,硬件加速器被配置成在将相应的光线图元相交结果返回给处理器之前,将从处理器接收到的光线从世界空间变换到至少一个替代世界空间,然后变换到硬件中的对象空间。本文公开的技术促进使用附加的坐标空间以更有效地近似被光线跟踪的底层图元所占据的空间的方式来定向加速结构。
Description
相关专利和申请的交叉引用
本申请涉及以下共同指派的美国专利和专利申请,其中每一个的全部内容通过引用并入:
·2014年12月8日提交的、题为“树数据结构的短堆栈遍历(Short StackTraversal of Tree Data Structures)”的14/563872号美国申请;
·题为“基于块的包围体层级(Block-Based Bounding Volume Hierarchy)”的9582607号美国专利;
·题为“用于基于块的包围体层级的相对编码(Relative Encoding For ABlock-Based Bounding Volume Hierarchy)”的9552664号美国专利;
·题为“光束跟踪(Beam Tracing)”9569559号美国专利;
·题为“基于多个局部坐标系的树数据结构(Tree Data Structures Based on aPlurality of Local Coordinate Systems)”的10025879号美国专利;
·2015年6月11日提交的、题为“基于块的几何数据无损压缩(Block-BasedLossless Compression of Geometric Data)”的14/737343号美国申请;
·题为“在不使用着色器干预的情况下在相交上连续包围体层次遍历的方法(Method for Continued Bounding Volume Hierarchy Traversal on IntersectionWithout Shader Intervention)”的16/101066号美国专利申请;
·题为“用于数据路径调度的高速缓存请求的有效分组方法(Method forEfficient Grouping of Cache Requests for Datapath Scheduling)”的16/101109号美国专利申请;
·题为“一种稳健、高效的多处理器-协处理器接口(A Robust,EfficientMultiprocessor-Coprocessor Interface)”的16/101247号美国专利申请;
·题为“树遍历的特定于查询行为的修改(Query-Specific BehavioralModification of Tree Traversal)”的16/101180号美国专利申请;
·题为“保守水密光线三角形相交(Conservative Watertight Ray TriangleIntersection)”的16/101148号美国专利申请;
·题为“用于处理无序不透明和阿尔法光线/图元相交的方法(Method forHandling Out-of-Order Opaque and阿尔法Ray/Primitive Intersections)”的16/101196号美国专利申请;以及
·题为“硬件中树遍历机制的前向进程和可编程超时的方法(Method forForward Progress and Programmable Timeouts of Tree Traversal Mechanisms inHardware)”的16/101232号美国专利申请。
技术领域
本技术涉及计算机图形学,并且更具体地,涉及光线跟踪器。更具体地说,该技术涉及计算机图形处理的硬件加速,包括但不限于光线跟踪。本文中的示例非限制性技术还涉及有效的光线包围体测试,该测试变换坐标空间以更好地适合边界框内的对象。
背景技术和总结
在过去的30年里,实时计算机图形学有了巨大的进步。20世纪80年代,随着提供3D硬件图形管线的强大的图形处理单元(GPU)的发展,基于纹理映射的多边形图元实时响应用户输入而生成3D图形显示成为可能。这种实时图形处理器建立在一种称为扫描变换光栅化的技术上,这种技术是一种从单个点或角度确定可见性的手段。使用这种方法,三维对象是由几何图元(通常是三角形等多边形)构成的曲面建模。扫描变换过程建立图元多边形顶点并将其投影到视图平面上,并填充基元边界内的点。参见例如,福利(Foley),范达姆(VanDam),休斯(Hughes)等所著的《计算机图形学:原理与实践(Computer Graphics:Principles and Practice)》(艾迪生韦斯利(Addison-Wesley)1995年第二版和艾迪生韦斯利(Addison-Wesley)2014年第三版)。
长期以来,硬件一直被用于确定每个多边形曲面应被如何着色和纹理映射,并将着色、纹理映射后的多边形曲面光栅化以进行显示。典型的三维场景通常由数百万个多边形构成。快速的现代GPU硬件能够有效地处理每一个显示帧的数百万个图形图元(每第1/30或第1/60秒),实时响应用户输入。由此产生的图形显示已被用于各种实时图形用户界面,包括但不限于增强现实、虚拟现实、视频游戏和医学成像。但传统上,这种交互式图形硬件无法准确地建模和描绘反射和阴影。
还有另一种图形技术,其可以对反射和阴影进行物理真实的可见性测定。它被称为“光线跟踪”。光线跟踪是指将光线投射到场景中,并确定该光线是否与场景几何体相交以及在何处相交。这种基本的光线跟踪可见性测试是计算机图形学中各种渲染算法和技术的基础。光线跟踪技术是在20世纪60年代末发展起来的,并在80年代得到了改进。例如,见阿佩尔(Appel)的“实体着色机器渲染的一些技术(Some Techniques for ShadingMachine Renderings of Solids)”(SJCC 1968)第27-45页;惠特(Whitted)的“阴影显示的改进照明模型(An Improved Illumination Model for Shaded Display)”,ACM通信第23卷第6期(1980年6月)第343-349页;以及卡基亚(Kajiya)的“渲染方程(The RenderingEquation)”,《计算机图形学》(SIGGRAPH 1986年会刊,第20卷,第143-150页)。从那时起,光线跟踪就被应用于非实时图形应用,如设计和电影制作。任何看过《寻找多莉》(2016)或其他皮克斯动画电影的人都看到了光线跟踪法在计算机图形学中的应用——即真实的阴影和反射。参见亨利等人,“皮克斯的双向路径跟踪”(2016年)。
通常,光线跟踪是一种渲染方法,其中光线用于确定场景中各种元素的可见性。光线跟踪用于各种渲染算法,例如路径跟踪和都市光传输。在一个示例算法中,光线跟踪通过模拟场景中的光传输来模拟光的物理性质,从而使用光线光学计算所有全局效果(例如,包括来自有光泽曲面的反射)。在光线跟踪的这种用途中,可以尝试跟踪数百或数千条光线中的每一条,因为它们经过三维场景从潜在的多个光源到视点。通常,这样的光线在场景中相对于眼睛进行跟踪,并在场景中所有几何体的数据库中进行测试。光线可以从灯光向前跟踪到眼睛,也可以从眼睛向后跟踪到灯光,也可以对光线进行跟踪,以查看从虚拟摄影机开始以及从眼睛开始的路径是否具有清晰的视线。测试确定最近的相交(以便确定从眼睛可以看到什么)或者跟踪物体表面朝向光源的光线,以确定是否有任何干涉物阻挡了光线向空间中该点的传输。由于光线与现实中光的光线相似,因此它们提供了许多真实效果,而这些效果是使用过去三十年来实现的基于光栅的实时三维图形技术所不可能实现的。因为来自场景中每个光源的每个照明光线在通过场景中的每个对象时都会进行求值,因此生成的图像看起来就像是在现实中拍摄的一样。因此,这些光线跟踪方法长期以来一直被用于专业图形应用,例如设计和电影,在这些应用中,它们已经成为基于光栅的渲染的主导。
光线跟踪可以用于确定沿光线是否可见(例如,测试几何图元上的着色点和光源上的点之间的遮挡物),并且也可以用于评估反射(例如,这可以包括执行遍历以确定沿视线最近的可见曲面,这样,在流式处理器上运行的软件可以评估与命中的内容相对应的材质着色功能-这反过来可以根据相交对象的材质属性将一条或多条附加光线发射到场景中),以确定沿光线返回眼睛的光。在经典的惠特式光线跟踪中,光线从视点通过像素网格射入场景,但其他路径遍历也是可能的。通常,对于每个光线,都会找到最近的对象。然后,可以通过从该交点向场景中的每个光源发射一条光线,并确定该交点之间是否存在任何对象,从而确定该交点是否被照亮或处于阴影中。不透明的物体阻挡光线,而透明物体会减弱光线。其他光线可以从交点生成。例如,如果相交曲面有光泽或有高光,则会在反射方向生成光线。光线可以接受相交的第一个对象的颜色,这反过来测试相交的阴影。此反射过程递归地重复,直到达到递归限制或后续反弹的可能贡献低于阈值。也可以在透明实体对象的折射方向上生成光线,并再次递归求值。因此,光线跟踪技术允许图形系统开发物理上正确的反射和阴影,这些反射和阴影不受扫描变换技术的限制和伪影的影响。
光线跟踪已与用于采样场景几何的光栅化和z缓冲一起使用,或作为其替代。它也可以作为环境映射和阴影纹理的替代品(或与之结合使用),以产生比通过纹理技术或其他光栅“黑客”实现的更真实的反射、折射和阴影效果。在基于物理的渲染算法(如路径跟踪、光子映射、大都市光传输和其他光传输算法)中,光线跟踪也可以用作精确模拟光传输的基本技术。
光线跟踪的主要挑战通常是速度。光线跟踪要求图形系统为每一帧计算和分析数百万光线中的每一个,这些光线照射在构成场景的每个表面上(并可能被反射)。在过去,这种巨大的计算复杂性是不可能实时执行的。
现代GPU 3D图形管线在渲染着色、纹理映射的曲面时如此快速的一个原因是它们有效地使用了一致性。在传统的扫描变换中,全部事物都被假设为通过一个共同的窗口在一个共同的图像平面和投影到一个有利的点。每个三角形或其他图元被通过图形管线发送并覆盖一定数量的像素。所有相关的计算可以共享从该三角形渲染的所有像素。因此,与通过窗口的相干视线相对应的像素矩形块可以对应于在同一流处理器中以锁定步骤运行的线程组。所有落在三角形边缘之间的像素被假定为相同的材质,运行相同的着色器并从相同的纹理获取相邻的纹素组。相反,在光线跟踪中,光线可以在一个公共点(光源或虚拟摄影机镜头)开始或结束,但当光线在场景中传播并与不同的材质交互时,它们会迅速发散。例如,每个光线执行搜索以找到最近的对象。可以执行某些缓存和结果共享,但由于每条光线可能会命中不同的对象,因此不存在GPU传统上在纹理映射、着色三角形方面所利用的那种一致性(例如,光线跟踪没有共同的有利点、窗口和图像平面)。这使得光线跟踪在计算上比其他图形方法更具挑战性,因此在交互式的基础上更难执行。
2010年,NVIDIA利用NVIDIA GPU的高度并行性和其他高度并行的架构开发了OptiXTM光线跟踪引擎。见派克(Parker)等人的“OptiX:通用光线跟踪引擎”(美国计算机学会图形学汇刊,第29卷第4期,第66条,2010年7月)。除了API(应用程序编程接口)的改进外,OptiXTM提供的另外一项改进是提高了用于查找光线和场景几何体之间的相交的加速数据结构。这种加速数据结构通常是空间或对象层级,光线跟踪遍历算法用它来高效地搜索可能与给定光线相交的图元。OptiXTM提供许多不同的加速结构类型,应用程序可以从中进行选择。节点图中的每个加速结构都可以是不同的类型,允许高质量静态结构与动态更新结构的组合。
OptiXTM可编程光线跟踪管线提供了显著的进步,但对于复杂的3D场景,在相对便宜的计算平台上,它本身仍然不能提供对用户输入的实时交互响应。从那时起,NVIDIA一直在开发用于光线跟踪的硬件加速功能。例如,见US 9,582,607;US 9,569,559;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内的每个几何图元,以确定光线是否与该几何图元相交。
现代光线跟踪器最常用的加速数据结构是包含嵌套轴对齐包围体
(AABB)的包围体层级(BVH)。BVH的叶节点包含要测试相交的图元(例如三角形)。BVH通常由图形或树结构的数据表示来表示。在光线跟踪中,当使用这种加速数据结构时,用于查找光线的最近(或用于阴影,如果有的话)交点的时间通常是n个对象的O(log n)阶。例如,通常用于现代光线跟踪加速数据结构的AABB包围体层级(BVH)通常具有O(log n)搜索行为。
BVH加速数据结构表示和/或参考对象或场景的3D模型,其方式将有助于快速确定特定光线可能相交的对象的哪一部分,并快速拒绝光线不会相交的场景的大部分。BVH数据结构表示具有包围体的场景或对象,并将包围体细分为以包含几何图元的叶节点为终点的越来越小的包围体。包围体是分层的,这意味着最顶层包含其下一层,该层包围其下一层,依此类推。在一个实施例中,叶节点可能潜在地与包围体层次中的其他叶节点重叠。
NVIDIA的RTX平台包括光线跟踪技术,为内容创造者和游戏开发者带来实时、电影般的质量渲染。参见https://developer.nvidia.com/rtx/raytracing。在包括NVIDIA RT核心在内的许多或大多数实现中,如图1A-1C所示的包围体使用轴对齐的边界框(“AABB”),它可以紧凑地存储并易于测试光线相交。如果光线与几何体的边界框相交,则也将测试基础几何体。但是,如果光线不与几何体的边界框相交,则不需要测试基础几何体。如图1A-1C所示,创建AABB的层级以增加单个AABB包围框测试的剔除效果。这允许高效的遍历和快速减少到感兴趣的几何体。
附图简要说明
图1A-1C示出了简化的光线跟踪测试示例,用于确定光线是否通过包含几何体的包围体,以及光线是否与包围体内的几何体相交。
图2A和2B分别是用户在虚拟游戏期间看到的示例场景和自顶向下视图中的同一场景的线条图。
图2C说明了图2A的视图和图2B的自顶向下视图中场景中某些对象的包围体示例。
图3示出了根据一些实施例的用于将场景的世界空间更改为替代世界空间以提高光线跟踪效率的示例过程。
图4示出了根据一些实施例的用于(重新)构造加速数据结构以包括从世界空间到替代世界空间的顶层变换以及到对象空间的底层变换的示例过程。
图5示出了根据一些实施例的,当一些场景由具有多个变换级别的加速数据结构表示时,并行处理单元执行硬件加速光线跟踪的示例处理。
图6A和6B示出了根据一些实施例的示例包围体层级表示。
图7示出了根据一些实施例的示例性非限制性光线跟踪图形系统。
图8是根据一些实施例的示例性非限制性光线跟踪图形管线的流程图。
图9是根据一些实施例的示例性非限制性基于硬件的光线跟踪操作的流程图。
图10示出了根据一些实施例的包括树遍历单元(TTU)的简化示例的非限制性遍历协处理器。
图11是根据一些实施例的示例TTU处理的流程图。
图12A和12B示出了根据一些实施例的更详细的光线跟踪管线。
图13示出了根据一些实施例的光线跟踪管线使用的示例遍历堆栈。
图14示出了根据一些实施例的光线跟踪管线使用的示例结果队列。
图15示出了根据一些实施例从流式多处理器传输到遍历协处理器的一些信息。
图16示出了根据一些实施例的由遍历协处理器使用的堆栈条目的示例。
图17示出了根据一些实施例的SM和TTU遍历超过2次变换的路径的示例。
图18是根据一些实施例的生成图像的示例处理的流程图。
非限制性实施例的详细描述
许多光线跟踪加速器(包括RTX和DXR)在包围体层级(BVH)中使用轴对齐边界框(AABB),该层级是用于遍历的加速数据结构(在本文中也称为“加速结构”或“AS”)。之所以使用AABB,是因为它们易于紧凑地表示,并且可以快速评估光线相交测试。AABB涵盖了底层的几何结构,并且AABB上的命中或未命中确定是否进一步下降到其子AABB中。
AABB的一个问题是,由于它是轴对齐的,它有时无法像定向边界框(OBB)那样适合底层几何体。在这种情况下,AABB引入了空空间,从而导致错误的命中和浪费的遍历步骤。
多级层级是用于减少这种影响的常用技术。多级层级通常使用单一世界空间(例如开发人员为应用程序指定的坐标空间)和多个对象空间的组合。对象空间是为每个对象定义的,可以更紧密地拟合对象的几何体,而不考虑世界空间中的任意旋转。由于更适合AABB,在该对象空间中遍历可以获得更少的错误命中。然后将所有这些对象置于一个公共的世界空间中,并使用相关的变换将其从世界空间变换到相应的对象空间。
然而,这个共同的世界空间仍然可能存在不合适AABB的问题。在某些情况下,可以通过选择不同的世界空间方位来解决这一问题,但有时不同的选择不适合开发人员的工作流程,或者可能没有一个单一的世界空间方位对特定世界中的所有位置都有效。
例如,图2A和2B显示了虚拟世界中一个示例村庄场景中的两个建筑。图2A显示了用户可能从用户视角看到的场景。图2B显示了从上方(鸟瞰视角)的场景,在那里它看起来很适合与网格对齐。图2C显示了根据图2B的可选鸟瞰视角世界空间方位的其中一个建筑物的示例包围框304。图2C覆盖了图2A的涵盖用户视角世界空间中的同一建筑的边界框302,以进行比较。可以清楚地看到,如果选择图2B的替代世界空间方位,则在图2A的世界空间中具有实质性空白的边界框304可以由具有更少空白的边界框304来表示。
在BVH开发期间,开发人员可能宁愿不更改特定场景的世界空间,即使由于诸如该世界空间与另一位置共享等原因,对于该特定场景来说,世界空间似乎效率低下。此外,在某些场景中,要显示的特定世界无法与任何一个最有效的网格对齐。
本文中的一些实施例提供为特定应用(例如,在实时图形应用中显示的虚拟场景)呈现的一系列帧中的选定帧“动态”地改变加速结构的世界空间。具体地说,一些实施例允许使用替代世界空间,其提供更紧密地适合场景中的对象的AABB,以减少如果在光线跟踪期间在原始世界空间中遍历场景将导致的错误命中。可以“在底层(under the hood)”执行对所选帧的替代世界空间的使用,使得对应用的开发者透明地选择使用了替代世界空间的应用的帧或场景,或者在一些实施例中,基于开发人员设置的配置。此外,一些实施例提供包括两个或更多个坐标空间的遍历路径的加速结构的硬件加速遍历。
图3示出了根据一些实施例的用于将场景的世界空间更改为替代世界空间以提高光线跟踪效率的示例过程300。过程300可以针对n是大于0的整数的每第n帧执行,或针对以某种不规则间隔选择的帧执行。
在步骤302、303,确定是否应当改变场景的当前世界空间。该确定可以基于由用户或照相机观看的虚拟世界和/或场景的动态检测的特性。
例如,在一些实施例中,系统(例如图7中的CPU和/或GPU)可以自动观察到与场景相对应的加速结构(AS)在场景中以诸如45度的角度具有大部分(或可配置的百分比)的AABB,或者将其体积的很大一部分(例如,可配置的百分比)作为自由空间,并且可以确定备用的世界空间,以改进AABB与场景的对齐和匹配。在一个实施例中,可以通过诸如例如自动地在每第N帧(N是非零正整数)处的蛮力方法来确定要使用的替代世界空间,在场景的加速结构上旋转或执行一个或更多个其他预定变换,并且基于诸如虚假命中百分比之类的遍历的性能信息,选择产生最小虚假命中百分比的旋转或另一个或更多个预定变换等。旋转或产生最小错误命中百分比的其他一个或更多个预定变换可以用于改进预定帧数的遍历性能。
在一些实施例中,可以使用例如识别在场景的AABB中提供最小自由空间的方位的启发式方法。
在一些实施例中,可以使用静态技术,例如,对应用中的所有场景进行预处理,以基于预定的准则来确定可以受益于替代世界空间的场景。可以在数据和/或相应的加速结构中为这样标识的场景设置标志。虽然静态方法可能并不总能充分捕捉某些光线行为的影响,例如,在选择合适的替代世界空间时,可以使用动态方法捕捉到的非均匀角度的曲面反弹,静态方法在许多情况下都是有价值的,这取决于具体的应用程序。一些实施例可以使用静态和动态方法的组合。
在一些实施例中,从世界空间到替代世界空间的变换是旋转。然而,在示例实施例中,变换不限于旋转,并且可以包括任何仿射变换,例如,几何收缩、膨胀、扩大、反射、旋转、剪切、相似变换、螺旋相似性、平移、非均匀缩放以及仿射变换的任何组合。
当在步骤303确定场景的坐标系应当从应用程序的世界空间改变为替代世界空间时,在步骤304,加速结构被(重新)构造为包括(重新)定向到替代世界空间的加速结构的至少一部分。根据一些实施例,(重新)构造的加速结构包括具有两个(有时多于两个)坐标空间的一些遍历路径,边界框和几何体与之对准。如本文其他处所述,BVH是可以在实施例中使用的一个示例性加速结构,但是其他加速数据结构和相关联的包围体是可能的。由块304构造的(重建)加速结构预计将减少误报,因为其AABB更好地对准和适合几何体。下面描述的图4包括对步骤304的进一步描述。
同时,在步骤306,使用由块304构造的(重新)构造的加速结构来执行光线跟踪,同时在步骤308中使用硬件加速来使用替代世界空间来遍历(重新)构造的加速结构以确定光线相交。在一些实施例中,步骤306可以在基于软件的处理器(例如流式多处理器(SM)732)中执行,硬件加速遍历发生在诸如遍历协处理器(TTU)738的硬件中。SM 732和TTU 738之间的通信步骤307使得SM能够向TTU提供光线和(重新)构造的加速结构信息,并且使得TTU向SM提供关于所确定的交点的信息。图5和其他附图更详细地描述了光线跟踪。如图18所示,提供关于确定的光线相交的信息,包括在步骤306中确定的那些交点,以便在生成图像的过程中用于场景的渲染。
因此,一些实施例提供捕捉由应用程序在场景中投射的场景和光线,对应用程序的开发人员透明地,通过将光线变换到一个替代世界空间来提高场景光线跟踪的效率,其减少了在遍历该场景的加速结构时AABB的误报命中。如上所述,可以针对在世界空间中默认遍历的一系列帧中选定的单个帧或帧序列自动和动态地执行该优化。
在一些实施例中,如关于步骤302所述,可以基于动态确定的准则来执行该优化。在一些实施例中,可以至少部分地基于配置设置来执行优化。例如,开发人员可以设置一个预定的标志,指示是否将替代世界空间用于特定场景。因此,决定是否使用替代世界空间可以手动、自动或结合手动和自动标准来确定。
在硬件(例如,在TTU 738中)中执行多重变换的另一种解决方案是在开始光线查询之前显式地变换处理器(例如SM 732)上的光线。如在示例实施例中,使用TTU 738代替SM732用于变换可能导致:由于在TTU 738中只需要变换一条光线,所以从初始变换到开始遍历的延迟较低,而在一些实施例中,SM 732的SIMT性质要求在遍历开始之前对所有光线进行变换;降低遍历内核的SM寄存器压力(因为在变换过程中,变换后的光线和变换矩阵都不需要存储在寄存器中);并且在遍历发生时,为SM提供更多的机会来处理内核的非遍历方面(从而提高应用程序性能)。
此外,在示例实施例中使用的多级光线变换允许驱动程序或其他软件向任何光线跟踪内容添加非API可见变换。这有可能在开发人员不愿意或无法修改其应用程序的情况下,通过在某些级别(例如,在两级BVH中的顶层)具有更紧密的边界框来修改其应用程序,并且提供了额外的便利,因为光线跟踪系统可以自动优化BVH遍历,而不需要开发人员关心这些问题。
根据一些实施例,还可以将多级光线变换显式地添加到某些API(例如,Optix、VulkanRT、DXR)以使硬件支持沿着遍历路径发生的多个变换。以这种方式,创建BVH的开发计算设备可以基于开发人员的方向和/或自动地生成BVH和相关联的光线指令,以利用多级变换提供的效率。
图4显示了一个示例过程400,用于(重新)构造包含多个级别变换的加速数据结构。例如,根据一些实施例,除了对一个或更多个对象空间的一个或更多个底层变换之外,过程400可以用于添加从世界空间到替代世界空间的顶层变换。作为一个例子,在上面结合图3描述的过程300步骤304的处理期间,可以由加速结构生成器程序调用过程400。在典型的图像生成管线中,每帧图像都要(重新)构造加速结构。如下文关于图6A和6B所述,加速结构可以包括定义世界空间中的几何体和包围体的顶层加速结构
(TLAS),以及定义对象空间中的几何体和包围体的底层加速结构(BLAS)。加速结构(重新)构造通常或一般涉及到TLAS的更改,以容纳场景内外对象的移动和场景中的移动,同时基本上保持BLAS不变。在许多情况下,加速结构(重新)构造可能不包括或不需要对大多数TLAS进行更改,并且可能包括将修改部分“改装”到其他TLAS中。
在步骤402中,通过插入实例节点作为TLAS的根节点的父节点和(重新)在选定的备用坐标空间(例如,替代世界空间)中构造TLAS来(重新)构造加速结构,或者更具体地说TLAS。在一个实施例中,这涉及(重新)将顶层AABB与可选择的替代世界空间对准,如上文所述,这可以通过多种方式来选择。例如,在图6B中,TLAS N1的根连接了一个实例节点N1'作为其父节点。在一个实施例中,与可以插入TLAS和BLAS之间的实例节点不同,新实例节点指定从由应用程序定义的(默认或初始)世界空间到选定的不同的替代世界空间的变换。从世界空间到替代世界空间的变换在此被称为“顶层变换”,并且指定顶层变换的实例节点可以被称为“顶层实例节点”。在一些实施例中,顶层变换使用与指定到一个或更多个对象空间的变换的实例节点相同的实例节点格式(即,在传统格式中用于指定从世界空间到对象空间的变换的字段现在可以重新用于指定从世界空间到替代世界空间的变换),但可能忽略了变换矩阵值以外的字段。
在步骤404中,对指定从TLAS到BLAS对象空间的变换的每个实例节点进行修改,以指定从选定的替代世界空间到对象空间的变换。在一些实施例中,为了实现紧凑性,该修改可以覆盖从世界空间到实例节点中最初指定的对象空间的变换。BLAS中不需要额外的变更。在其他实施例中,可能希望在实例节点中保留从世界空间到对象空间的原始变换,并且添加指定从替代世界空间到对象空间的变换和/或从世界空间到替代世界空间的变换的一个或更多个附加字段。
在步骤402和404中描述的对加速结构的修改可以是在(重新)为应用程序的世界空间中的特定帧构造场景之后。根据步骤402和404修改的加速结构可以具有沿着一些遍历路径指定的至少两个变换,并且除了为应用程序指定的世界坐标空间之外,还可以包括至少两个坐标空间。
在做出了对加速结构进行的改变以适应备用的世界空间之后,在步骤406,(重新)构造的加速结构被写入存储器。在某些实现中,(重新)构造的加速结构可能覆盖也可能不覆盖原始加速结构。在一些示例实施例中,存储在存储器740中的加速结构的构造/重建可以由处理器720和/或并行处理单元730执行。
图5示出了根据一些实施例的并行处理单元(PPU)执行硬件加速光线跟踪的示例过程500,当一些场景由具有多个变换级别的加速数据结构表示时。过程500可以在并行处理单元上执行。例如,过程500可以由SM 732执行。更具体地说,每次发射一组光线以穿过加速结构时,可以使用过程500。在一些实施例中,过程500可以用于通过一条或多条光线重新启动遍历。
在步骤502,生成一条或更多条光线。为每条光线生成的信息至少包括光线原点和光线方向。为每个光线生成的信息可以包括光线的几何参数、遍历状态以及光线的光线标志、模式标志和光线操作信息。
在步骤504,确定要遍历的加速结构具有根节点,该根节点是指定空间的顶层变换的实例节点。例如,如图3和图4所述,在确定将替代世界空间用于一个或更多个帧时,加速结构可能已经(重新)构造,以使AABB在替代世界空间中的顶层加速结构中定向,并将该顶层加速结构的根与指定从世界空间到替代世界空间的变换的顶层实例节点相关联。
如果在步骤504中确定要遍历的加速数据结构的根节点指定顶层变换,则接着在步骤506,生成具有该效果的指示的堆栈初始化结构。在一些实施例中,根据预定格式构造栈初始化结构(例如“堆栈初始化压缩树(stack init complet)”),其中顶层变换标志被打开。例如,如图15所示的堆栈初始化完成1502可以在顶层变换标志1504被设置为“打开”的情况下构造(例如,将对应于顶层变换标志的位设置为等于1)。或者,当确定要遍历的加速数据结构的根节点没有指定顶层变换时,则在步骤508,生成压缩树(“压缩树”或下面描述的压缩的小树)以在世界空间中遍历加速结构。例如,在步骤508,堆栈初始化压缩树1502可以在顶层变换标志4504被设置为“关闭”时构造(例如,将对应于顶层变换标志的位设置为等于0)。
在步骤510,将生成的光线信息和堆栈信息发送到遍历协处理器。
基于在第510步提供的射线信息和堆栈信息,在图12A-B中描述了在遍历协处理器上执行的加速数据结构的遍历。从遍历协处理器返回的光线相交信息用于渲染场景。下面,在下文中结合图18中所示的生成图像的示例处理描述了使用相交信息的场景渲染(例如步骤1858)。
上面关于图2到图5的描述涉及提供一个加速结构,除了世界空间和物体空间之外,还包括一个备用的世界空间。然而,一些实施例提供在TLAS或BLAS中的任何遍历路径内使用两个或更多个坐标空间。在一些实施例中,例如,加速结构中的遍历路径可以包括三种变换-从世界空间到第一替代世界空间、从第一替代世界空间到第二替代世界空间、以及从第二替代世界空间到对象空间。在本例中,TLAS包括三个坐标空间-世界空间、第一替代世界空间和第二替代世界空间。关于图17描述了提供具有超过2个变换级别的遍历路径的示例实施例。其他实施例可以提供N个替代世界空间,其中N是任意整数。
构造包围体层级
如上所述,加速数据结构包括包围体的层级(包围体层级或BVH),其递归地封装越来越小的包围体细分。最大的体积包围体可以称为“根节点”。这种包围体层级的最小细分(“叶节点”)包含条目。条目可以是定义对象表面的图元(例如,多边形,如三角形)。或者,条目可以是球体,它包含了作为条目存在的全新的世界水平,因为它还没有被添加到BVH中(想想“黑衣人”在猫身上的项圈咒语,其内部包括完整的微型星系)。如果该项包含图元,则遍历协处理器在到达相交的叶节点时测试与叶节点相关联的图元的光线,以确定光线相交的对象曲面以及沿光线可见的对象曲面。
建立BVH可以分为两个部分:静态和动态。在许多应用程序中,复杂场景是被预处理的,并且BVH是基于场景的静态几何体而生成的。然后,使用包括动态地创建和操纵的移动对象的交互式图形生成,可以通过运行在实时交互式图形系统上的驱动程序或其他软件实时(例如,在每个帧中)构造BVH的另一部分(或附加的、链接的BVH)。BVH构造不需要硬件加速(尽管它可以在一些非限制性实施例中),但是可以使用在流式多处理器(SM)(例如SM732)和/或CPU(例如CPU 120)和/或其它开发系统上运行的高度优化的软件例程来实现,例如在应用程序的开发期间。
BVH加速结构构造的第一阶段是获取参考几何体的包围框。这是通过对对象中的每个几何图元执行将为其输入图元返回保守的轴对齐边界框(AABB)的边界框过程来实现的。将边界框与几何体的相关坐标系的轴对齐可以提高实时几何操作(例如,与定向边界框(OBB)、边界球体或其他方法相比)的相交测试和坐标变换的效率。然而,本领域技术人员将理解,本文中的示例性非限制性方法也可以应用于更昂贵的边界构造,例如OBB、边界球和其他包围体技术。
确实包括场景中至少一个几何体的一部分的已经细分的包围体还可以进一步递归细分——就像瑟斯(Seuss)博士的《帽子里的猫回来》(the Cat in the Hat Return,1958)中帽子里出现的一个又一个小猫。递归细分的数量和配置将取决于建模的三维对象的复杂性和配置,以及其他因素,如所需分辨率、对象到视点的距离,等等。一个示例细分方案是所谓的8元细分或“八叉树”,其中每个体被细分为8个大小相同的较小的体,但许多其他空间层级和细分方案是已知的,例如二叉树、四元树、k-d树、二元空间划分(BSP)树,以及包围体层次(BVH)树,参见USP 9,582,607。
在某个细分级别(对于BVH的不同部分可以是不同级别),BVH构造过程会遇到几何体,这些几何体构成了被建模的封装对象。用树的类比,连续的体积细分是树干、分支、树枝和细枝,并且几何图形最终在树的最尖端即树叶处显现出来。此时,本文中的例如非限制性实施例的BVH构造过程在该阶段使用启发式或其他分析技术(在一些实施例中可能包括人工智能和/或神经网络)执行优化以发现,对于其包含的几何体,这些叶节点的拟合度较差。
此过程将继续,直到包含几何体的所有包围体被充分细分,以便为每个边界框提供合理数量的几何图元。使用BVH的实时光线跟踪器将通过比较每个图元顶点的空间xyz坐标与光线的xyz坐标来确定光线图元的交点,以确定光线和图元定义的曲面是否占用相同的空间。光线图元相交测试可能是计算密集型的,因为可能有许多三角形要测试。在许多情况下,进一步按体积细分并因此将任何“叶节点”中的图元数限制在16个或更少可能更有效。
生成的包含被压缩的树(“complets”)的压缩树被写入存储器中的数据结构,以供图形处理硬件/软件在例如包括实时光线跟踪的实时图形处理期间使用。
图6A和图6B示出了3D场景(图6A)的递归细分包围体和相应的树数据结构(图6B),光线跟踪器可以访问这些数据结构并用于硬件加速操作。树型数据结构可以存储在内存中,并根据查询按需检索。
包围体的划分可以用分层的树数据结构表示,大的包围体由树的父节点表示,较小的包围体由父节点包含的树的子节点表示。最小的包围体由树中的叶节点表示,并标识这些最小包围体中包含的一个或更多个几何图元。
树数据结构包括以层级布置的多个节点。树结构的根节点N1对应于包围所有图元O1-O8的包围体N1。根节点N1可以标识包围体N1的顶点和根节点的子节点。
在图6A中,包围体N1被细分为包围体N2和N3。图6B的树结构的子节点N2和N3对应并表示图6A所示的包围体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。图6B树结构的相应子节点N4、N5、N6、N8、N10和N11对应并表示图6A中的包围体N4、N5、N6、N8、N10和N11。
这一具体示例中的图6B树只有三到六层深,因此体N4、N5、N6、N8、N10和N11构成了“叶节点”,即树中没有子节点的节点。图6A示出了叶节点包围体N4、N6和N8各自包含场景中几何体的两个三角形。例如,体积细分N4包含三角形O1和O2;体积细分N6包含三角形O5和O6;体积细分N8包含三角形O7和O8。图6A进一步示出,叶节点包围体N5包含如图所示的单个圆柱体O3,其不适合虚线所示的AABB包围体N5。因此,在本文的示例性非限制性实施例中,TTU 738不再使用较大的AABB包围体N5进行光线包围体相交测试,而是针对布置、定位、标注尺寸和定向到更紧密配合的圆柱体O3的多个较小AABB包围体测试光线。
图6B中所示的树结构表示这些叶节点N4、N5、N6和N7,方法是将它们与场景几何体的图元O1-O8的相应叶节点相关联。为了访问这个场景几何体,TTU 738遍历图6B中的树数据结构,一直到叶节点。一般来说,树的不同部分可以有不同的深度,包含不同数量的图元。与不包含几何体的体积细分关联的叶节点无需在树数据结构中显式表示(即,树被“修剪”)。
根据一些实施例,在N7处生根的子树可以表示在与对应于节点N1-N3的包围体不同的坐标空间中定义的一组包围体或BVH。当包围体N7与其父包围体N3位于不同的坐标空间中时,提供遍历以N7为根的子树所需的光线变换的实例节点N7'可以将树的其余部分连接到以N7为根的子树。实例节点N7'通过定义从N1-N3的坐标空间(例如世界空间、世界坐标空间)到N7等坐标空间(例如对象空间、对象坐标空间)的变换,将节点N1-N3对应的包围体或BVH与节点N7等对应的包围体或BVH连接起来。
在一些实施例中,在N1处生根的树或子树与作为实例节点的父节点N1'相关联。实例节点N1'可以包含或与用于将光线从一个坐标空间变换到另一个坐标空间的变换相关联。在一些实施例中,N1'可以指定从世界空间到替代世界空间的变换,并且可以被称为“顶层实例节点”。
如上所述构造的加速结构可以用于在传统通用计算机上运行的基于软件的图形管线处理。然而,本公开的非限制性实施例有利地在基于硬件的图形处理单元的上下文中实现上述技术,所述图形处理单元包括诸如一个或更多个流式多处理器(“SM”)和一个或更多个遍历协处理器或“树遍历单元”(“TTU”)—三维图形处理管线中的一个或一组流式多处理器SM的子单元。下面描述的是包括TTU 738的这样的系统的总体结构和操作,其加速了支持交互式光线跟踪的某些进程,包括光线包围体相交测试、光线图元相交测试以及用于实时光线跟踪和其他应用的光线“实例”变换。
示例系统框图
图7示出了用于使用场景或对象的三维(3D)数据(包括如上所述构造的加速数据结构)生成图像的实时光线交互式跟踪图形系统700的示例。
系统700包括输入设备710、一个或更多个处理器720、一个或更多个图形处理单元(一个或更多个GPU)730、存储器740和一个或更多个显示器750。图7所示的系统可以采用任何形式,包括但不限于个人计算机、智能手机或其他智能设备、视频游戏系统、可穿戴虚拟或增强现实系统、基于云的计算系统、车载图形系统、片上系统(SoC)等。
处理器720可以是多核中央处理单元(CPU),可操作以对输入设备710实时交互响应执行应用程序。显示器750可以是任何类型的显示器,例如固定显示器、诸如显示眼镜或护目镜的头戴式显示器、其他类型的可穿戴显示器、手持显示器、车载显示器等。例如,处理器720可以基于从输入设备710(例如,操纵杆,惯性传感器、环境光传感器等)接收的输入执行应用程序,并指示GPU 730生成显示应用程序进度的图像以在显示器750上显示。
基于应用程序在处理器720上的执行,处理器可以向GPU 730发出指令,以使用存储在存储器740中的3D数据来生成图像。GPU 730包括用于加速实时图像生成的专用硬件。例如,GPU 730能够实时处理数千或数百万个图形图元(多边形)的信息,这是由于GPU能够以比传统软件驱动的CPU更快的速度执行诸如多边形扫描变换之类的重复和高度并行的专门计算任务。例如,与可能具有多个内核的、具有可同时处理几个软件线程的大量缓存内存的处理器720不同,该处理器720GPU 730可以包括数百或数千个并行运行的处理内核或“流式多处理器”(SM)732。
在一个示例实施例中,GPU 730包括多个可编程的高性能处理器,其可以被称为“流式多处理器”(“SM”)732,以及基于硬件的图形管线,包括图形图元引擎734和光栅引擎736。GPU 730的这些组件被配置为使用被称为“扫描变换光栅化”的技术来执行实时图像渲染,以在二维显示器750上显示三维场景。在光栅化中,3D场景的几何构造块(例如,点、线、三角形、四边形、网格等)被映射到显示器的像素(通常通过帧缓冲存储器)。
GPU 730将3D模型的几何构造块(即,诸如三角形的多边形图元)变换为2D图像的像素,并为每个像素指派初始颜色值。图形管线可以通过定义或调整像素的颜色值将着色、透明度、纹理和/或颜色效果应用于图像的部分。最后的像素值可以被抗锯齿、滤波并提供给显示器750以供显示。多年来的许多软件和硬件进步已经使用光栅化技术以实时图形所需的帧速率(即每秒30至60帧)在一个或更多个显示器750上以4096×2160像素或更多像素的高显示分辨率来改进主观图像质量。
为了使GPU 730能够以有效的方式实时执行光线跟踪,GPU提供耦连到一个或更多个SM 732的一个或更多个“TTU”738。TTU 738包括被配置为执行(或加速)光线跟踪算法中常用的操作的硬件组件。TTU 738的一个目标是加速光线跟踪中使用的操作,以使光线跟踪的能力能够应用于实时图形应用程序(如游戏),从而实现高质量的阴影、反射和全局照明。由TTU 738生成的结果可以与GPU 730中执行的其他图形相关操作一起使用,或者作为替代。
更具体地说,SM 732和TTU 738可以协作以将光线投射到3D模型中,并确定该光线是否以及在哪里与模型的几何体相交。光线跟踪直接模拟光在虚拟环境或场景中的传播。光线相交的结果以及表面纹理、观察方向和/或照明条件用于确定像素颜色值。使用TTU738工作的SM 732执行的光线跟踪允许计算机生成的图像以无法与真实世界的照片或视频区分的方式捕捉阴影、反射和折射。由于光线跟踪技术的计算量甚至比光栅化更为密集,部分原因是需要跟踪大量的光线,TTU 738能够在硬件中加速该过程中某些更为计算密集的方面。
给定如上所述构造的BVH,TTU 738执行树搜索,其中光线访问的树中的每个节点对于每个子代分支或叶都有一个包围体,并且光线仅访问与其相交的相应包围体的子代分支或叶。通过这种方式,TTU 738只显式地测试少量的图元是否相交,即那些驻留在与光线相交的叶节点中的图元。在示例性非限制性实施例中,TTU 738加速树遍历(包括光线体测试)和光线图元测试。作为遍历的一部分,它还可以处理至少一个级别的实例变换,将光线从世界空间坐标系变换为实例网格的坐标系。在示例性非限制性实施例中,TTU 738以MIMD方式完成所有这些,这意味着一旦在TTU内就独立地处理光线。
在示例性非限制性实施例中,TTU 738作为SM(流式多处理器)732的服务(协处理器)操作。换言之,在示例性非限制性实施例中,TTU 738不独立地操作,而是遵循SM 732的命令来执行某些计算密集型的光线跟踪相关任务,其效率比SM 732自身能够执行的效率高得多。在其它实施例或架构中,TTU 138可以具有或多或少的自主性。
在所示的示例中,TTU 738经由SM 732指令接收命令并将结果写回SM寄存器文件。对于许多用例(例如,最多具有两个实例化级别的不透明三角形),TTU 738可以服务于光线跟踪查询,而无需与SM 732进一步交互。更复杂的查询(例如,涉及阿尔法测试的三角形、除三角形以外的图元,或两个以上级别的实例)可能需要多次往返(尽管本文中的技术通过向TTU 738提供增强的能力来减少对某些类型几何体的这种“往返”的需要,从而无需向调用SM请求帮助即可自主地执行光线包围体相交测试)。除了跟踪光线之外,TTU 738还能够执行更一般的空间查询,其中AABB或两个AABB之间的挤压体积(我们称之为“光束”)代替光线。因此,虽然TTU 738特别适于加速与光线跟踪相关的任务,但是它也可以用于执行除光线跟踪之外的任务。
因此,TTU 738可以根据范围广泛的包围体自动执行每个光线的测试,并可以剔除任何与该光线不相交的包围体。从一个限制场景中所有内容的根节点开始,遍历协处理器针对较小(可能重叠)的子包围体测试每个光线,其反过来又包围了BVH的子分支。光线跟随光线命中的包围体的子指针到其他节点,直到到达BVH的叶节点或终端节点(框)。
一旦TTU 738遍历加速数据结构以到达与光线相交并包含几何图元的终端或“叶”节点(其可以由一个或更多个包围体表示),它将执行加速光线图元相交测试,以确定光线是否与该图元相交(进而确定光线是否与图元定义的对象曲面相交)。光线图元测试可以提供有关光线相交的图元的额外信息,其可用于确定着色和可视化所需的曲面的材质属性。通过加速数据结构的递归遍历使遍历协处理器能够发现光线相交的所有对象图元,或光线相交的最近的(从视点的角度来看)图元(在某些情况下,它是沿光线从视点可见的唯一图元)。参见勒弗朗索瓦(Lefrancois)等人,NVIDIA Vulkan光线跟踪教程,2019年12月,https://developer.nvidia.com/rtx/raytracing/vkray。
如上所述,TTU 138还加速了从世界空间到对象空间的每条光线的变换,以获得图元越来越精细的包围框封装,并减少场景中这些图元的重复。如上所述,在场景中以不同位置、方位和比例复制多次的对象可以在场景中表示为实例节点,其将世界空间BVH中的边界框和叶节点与被可应用于世界空间光线以将其变换为对象坐标空间的变换以及指向对象空间BVH的指针相关联。这样可以避免在世界空间中多次复制对象空间BVH数据,从而节省内存和相关的内存访问。实例变换通过将光线变换到对象空间而不是要求将几何体或包围体层级变换为世界(光线)空间,从而提高了效率,并且还与图形处理为可视化图元而执行的其他常规光栅化过程兼容。
光线跟踪过程示例
图8示出了可由SM 732执行并由TTU 738加速的示例性光线跟踪着色管线800。光线跟踪着色管线800通过SM 732调用光线生成810并向TTU 738发出相应的光线跟踪请求开始。光线跟踪请求识别投射到场景中的单个光线,并要求TTU 738搜索具有SM 732也指定的加速数据结构的交点。TTU 738遍历加速数据结构(图8的框820),以确定光线与加速数据结构所表示的体积细分和相关三角形之间的交点或潜在交点。通过在加速数据结构中找到与光线相交的包围体,可以识别潜在的交点。非相交包围体的子节点不需要被检查。
对于相交包围体内的三角形,TTU 738光线图元测试块1020执行相交830处理以确定光线是否与图元相交。TTU 738将相交信息返回给SM 732,SM 732可以响应于相交确定执行“任意命中”着色操作840。例如,SM 732可以执行(或让其他硬件执行)相交图元的纹理查找,并基于适当的纹素值来决定如何对可视化的光线的像素进行着色。SM 732保持跟踪这些结果,因为TTU 738可以以任意顺序返回场景中具有不同几何体的多个交点。
图9是总结TTU 738与一个或更多个SM 732合作执行的示例光线跟踪操作的流程图。图9的操作是由TTU 738协同其与SM 732的交互来执行的。因此,TTU 738可以从SM 732接收光线的标识,并且遍历状态,其枚举光线必须遍历的一个或更多个BVH中的一个或更多个节点。TTU 738确定光线与BVH数据结构的哪个包围体相交(“光线压缩树”测试912)。TTU738随后还可以确定光线是否与相交的包围体中的一个或更多个图元相交以及哪些三角形相交(“光线图元测试”920)–或者如果TTU太复杂而无法自行执行,则SM 732可以在软件中执行该测试。在示例性非限制性实施例中,压缩树指定包含子节点的包围体层级的根节点或内部节点(即体),这些子节点是每个压缩树的单个类型的其他压缩树或叶节点。
首先,TTU 738检查光线的遍历状态。如果TTU 738为光线维护的堆栈为空,则遍历完成。如果堆栈顶部有条目,则遍历协处理器738向存储器子系统发出检索该节点的请求。然后,遍历协处理器738执行包围框测试912,以确定BVH数据结构的包围体是否与SM 732指定的特定光线相交(步骤912,914)。如果包围框测试确定包围体没有被光线相交(步骤914中的“否”),则不需要执行任何进一步的可视化测试,并且TTU 738可以将该结果返回到请求SM 732。这是因为如果光线错过了包围体(如图1A中关于包围体110的情况),则光线将错过被测试的包围体内的所有其他较小的包围体以及包围体包含的任何图元。
如果由TTU 738执行的包围框测试揭示包围体与光线相交(步骤914中的“是”),则TTU确定包围体是否可以细分为更小的包围体(步骤918)。在一个示例实施例中,TTU 738本身不一定执行任何细分。相反,BVH中的每个节点都有一个或更多个子节点(其中每个子节点都是BVH中的一个叶或分支)。对于每个子节点,都有一个或更多个包围体和一个指向分支或叶节点的指针。当光线使用TTU 738处理一个节点时,它正在针对节点的子节点的包围体进行自我测试。对于那些代表性包围体被命中的分支或叶,光线只将堆栈条目推送到其堆栈中。在示例实施例中,当光线获取节点时,它不针对节点的包围体进行测试-而是针对节点子节点的包围体进行测试。TTU 738将其包围体被光线命中的节点按光线配置确定的顺序推送到光线的遍历堆栈(例如,图13中的遍历堆栈1302)。例如,可以按照节点在内存中出现的顺序,或者它们沿着光线的长度出现的顺序,或者以其他顺序将节点推送到遍历堆栈上。如果存在包围体的进一步细分(步骤918中的“是”),则访问包围体的这些进一步细分,并对每个生成的细分包围体执行包围框测试,以确定哪些细分包围体与光线相交,哪些不相交。在这个递归过程中,可能通过测试914消除一些包围体,而其他包围体可能导致通过TTU 738递归地应用步骤912-918来测试相交的进一步和进一步的细分。
一旦TTU 738确定光线相交的包围体是叶节点(步骤918中的“否”),TTU 738和/或SM 732执行图元(例如,三角形)相交测试920,以确定光线是否与相交的包围体中的图元相交以及光线与哪些图元相交。因此,TTU 738执行相交的子分支节点的深度优先遍历,直到到达叶节点为止。TTU 738处理叶节点。如果叶节点是图元的范围,则TTU 738或SM 732会根据光线对它们进行测试。如果叶节点是实例节点,则TTU 738或SM 732应用实例变换。如果叶节点是条目范围,TTU 738将它们返回给请求SM 732。在示例性非限制性实施例中,SM732可以命令TTU 738执行不同种类的光线图元相交测试,并根据来自应用程序(或应用程序正在运行的软件堆栈)并由SM中继到TTU的操作来报告不同的结果。例如,SM 732可以命令TTU 738报告由相交测试显示的最近可见图元,或者报告光线相交的所有图元,而不管它们是否是最近的可见图元。SM 732可以将这些不同的结果用于不同类型的可视化。或者,一旦TTU 738报告了光线压缩树测试结果,SM 732可以自行执行光线图元相交测试。一旦TTU738完成了对叶节点的处理,可能会有其他分支节点(先前被推送到光线的堆栈上)来测试。
示例非限制性TTU
738硬件实现
图10示出了TTU 738的示例简化框图,包括配置为执行如上所述的加速遍历操作的硬件。在一些实施例中,TTU 738可以使用具有支持的叶节点图元的相交测试的短堆栈遍历和阿尔法图元和不受支持的叶节点图元(条目)的中间遍历返回来执行包围体层次的深度优先遍历。TTU 738包括用于确定光线是否与包围体相交的专用硬件和用于确定光线是否与树数据结构的图元相交的专用硬件。
更详细地说,TTU 738包括相交管理块1022、光线管理块1030和堆栈管理块1040。这些块中的每一个(以及图10中的所有其他块)可以构成由逻辑门、寄存器、硬件嵌入式查找表格或其他组合逻辑等实现的专用硬件。
光线管理块1030负责管理关于由SM 732向光线管理块指定的光线的信息并执行与之相关的操作。堆栈管理块1040与遍历逻辑1012一起工作以管理关于BVH加速数据结构的遍历的信息并执行与遍历相关的操作。遍历逻辑1012由光线压缩树测试块1010的结果指导,该测试块1010根据需要使用实例变换来测试由光线管理块1030指示的光线和由BVH表示的体积细分之间的相交。光线压缩树测试块1010经由作为TTU 738的一部分的L0压缩树高速缓存1052从存储器740检索关于BVH的附加信息。光线压缩树测试块1010的结果通知遍历逻辑1012是否需要进一步的递归遍历。当遍历逻辑1012从BVH的一个等级遍历到另一个时,堆栈管理块740维护栈以保持跟踪状态信息,同时当遍历逻辑深入到BVH时,堆栈管理块1040将条目推入堆栈,并且当遍历逻辑在BVH中向上遍历时从堆栈取出条目。堆栈管理块1040能够在SM请求的任何时间向SM 732提供状态信息(例如,中间结果或最终结果)。
相交管理块1022根据需要使用实例变换来管理关于光线和图元之间的相交的信息并执行关于这些相交的操作。光线图元测试块1020根据需要经由作为TTU 138的一部分的L0图元高速缓存1054从存储器140检索有关几何体的信息。相交管理块1022由光线图元测试和变换块1020执行的相交测试的结果通知。因此,光线图元测试和变换块1-20向相交管理块1022提供相交结果,相交管理块1022向请求SM 732报告几何体命中和相交。
堆栈管理单元1040检查遍历状态,以确定需要检索哪种类型的数据以及哪个数据路径(完整或原始)将使用它。包围体的相交在包括一个或更多个光线压缩树测试块1010和一个或更多个遍历逻辑块1012的TTU 738的光线完成测试路径中被确定。压缩树指定包围体的根节点或内部节点。因此,一个压缩树可以为光线压缩树测试定义一个或更多个包围体。在这里的示例性实施例中,压缩树可以定义多个“子”包围体(无论它们是否表示叶节点),它们不一定每个都有子节点,但是TTU将并行测试这些子体的光线包围体相交,以确定是否需要测试与多个包围体相关联的几何基元是否相交。
TTU 738的光线压缩树测试路径标识光线与哪些包围体相交。与光线相交的包围体需要被进一步处理,以确定与相交包围体关联的图元是否相交。图元的相交在包括一个或更多个光线图元测试和变换块1020和一个或更多个相交管理块1022的光线图元测试路径中被确定。
TTU 738接收来自一个或更多个SM 732的查询以执行树遍历操作。查询可以请求光线是否与BVH数据结构中的包围体和/或图元相交。查询可以标识光线(例如,光线的原点、方向和长度)和BVH数据结构和遍历状态(短堆栈),其中包括一个或更多个引用光线要访问的一个或更多个包围体层级中的节点的条目。查询还可以包括有关光线在遍历期间如何处理特定类型的相交的信息。光线信息可以被存储在光线管理块1030中。存储的光线信息(例如,光线长度)可以基于光线图元测试的结果进行更新。
TTU 738可以请求从TTU 738外部的存储器检索查询中标识的BVH数据结构。BVH数据结构的检索部分可以被缓存在TTU 738内的零级(L0)高速缓存1050中,以便该信息可用于其它时间一致的TTU操作,从而减少存储器1040访问。光线压缩树测试所需的BVH数据结构的部分可以存储在L0压缩树高速缓存1052中,而光线图元测试所需的BVH数据结构的部分可以存储在L0图元缓存1054中。
在完成高速缓存1052中获得请求的遍历步骤所需的完整信息之后,光线压缩树测试块1010确定与该光线相交的包围体。在执行此测试时,可以将光线从包围体积层级的坐标空间变换为相对于一个压缩树定义的坐标空间。光线是针对与压缩树的子节点关联的边界框而测试的。在该示例性非限制性实施例中,不针对压缩树自身的边界框测试光线,因为:(1)TTU 738先前在测试引用该压缩树的父边界框子对象时,针对类似的边界框测试了该光线,并且(2)完整边界框的目的是定义内部的局部坐标系子边界框可以用压缩形式表示。如果光线与任何子边界框相交,则将结果推送到遍历逻辑,以确定将相应的子指针推送到遍历堆栈上的顺序(进一步的测试可能需要遍历逻辑1012向下遍历到BVH的下一级)。这些步骤递归地重复,直到遇到BVH的相交叶节点。
光线压缩树测试块1010的相交可以向遍历逻辑块1012提供光线压缩树相交。使用光线压缩树测试的结果,遍历逻辑1012创建要推送到堆栈管理块1040的堆栈条目。堆栈条目可以指示需要由光线压缩树测试块1010进一步测试光线相交的内部节点(即,包括一个或更多个子节点的节点)和/或在需要通过光线图元测试和变换块1020测试的相交叶节点中标识的三角形。光线压缩树测试块1010可以对堆栈中标识的内部节点重复遍历,以确定光线相交的BVH中的所有叶节点。在示例性非限制性实施例中,光线压缩树测试块1010执行的精确测试将由模式位、光线操作(参见下文)和命中剔除来确定,并且TTU 738可以将中间结果和最终结果返回至SM 732。
光线图元相交测试
再次参考图11,TTU 738还可以加速相交测试,以确定光线是否与特定几何体或图元相交。对于一些情况,几何体足够复杂(例如,由曲线或其他抽象结构定义,而不是由例如顶点)使得在一些实施例中的TTU 738可能无法帮助进行光线图元相交测试。在这种情况下,TTU 738简单地向SM 732报告光线压缩树相交测试结果,并且SM 732自身执行光线图元相交测试。在其他情况下(例如,三角形),TTU 732本身可以执行光线-三角形相交测试,从而进一步提高整个光线跟踪过程的性能。为了完整起见,下面描述TTU 738如何执行或加速光线图元相交测试。
如上所述,叶节点被光线识别(封闭)图元相交,其可能与光线相交,也可能不相交。一个选项是TTU 738向SM 732提供例如在相交的叶节点中标识的几何体的范围以供进一步处理。例如,SM 732本身可以基于TTU 738作为TTU遍历BVH的结果提供的信息来确定所识别的图元是否被光线相交。为了从SM 732卸下该处理并由此使用TTU 738的硬件来加速它,堆栈管理块1040可以发出对光线图元和变换块1020的请求,以对TTU的光线压缩树测试块1010识别的相交叶节点内的图元执行光线图元测试。在一些实施例中,SM 732可以发出光线图元测试的请求,以测试特定范围的图元和变换块1020,而不管如何识别该几何范围。
在确保请求的光线图元测试所需的图元数据在图元高速缓存1054中可用之后,光线图元和变换块1020可以使用存储在光线管理块1030中的光线信息来确定与光线相交的图元。光线图元测试块1020将确定为由光线相交的图元的标识提供给相交管理块1022。
相交管理块1022可以将光线图元测试的结果返回到SM 732。光线图元测试的结果可以包括相交图元的标识符、相交到光线原点的距离以及与相交图元的特性有关的其他信息。在一些实施例中,相交管理块1022可以基于来自光线图元和变换块1020的先前相交结果来修改现有的光线图元测试(例如,通过修改光线的长度)。
相交管理块1022还可以跟踪不同类型的图元。例如,不同类型的三角形包括在相交时会阻挡光线的不透明三角形,以及在相交时可能或可能不会阻挡光线的阿尔法三角形,或者可能需要SM进行额外处理的阿尔法三角形。例如,光线是否被透明三角形阻挡可能取决于映射到三角形上的一个或更多个纹理、纹理所占三角形的面积以及纹理修改三角形的方式。例如,在一些实施例中,透明度(例如,彩色玻璃)要求SM 732保持跟踪透明对象命中,以便可以按光线参数顺序对它们进行排序和着色,并且通常不会实际阻挡光线。同时,阿尔法“修剪”允许根据映射到图元上的纹理的形状来修剪图元的形状,例如,从三角形中剪切出一个叶子形状。(请注意,在光栅图形中,透明度通常称为“阿尔法混合”,而修剪称为“阿尔法测试”)。在其它实施例中,TTU 738可以将透明点击推送到存储器中的队列以供SM732稍后处理,并且通过向纹理单元发送请求来直接处理修剪后的三角形。每个三角形都可以包括一个指示三角形类型的指示符。相交管理块1022被配置为维护用于跟踪不同类型的相交三角形的结果队列。例如,结果队列(例如图14中的结果队列1410)可以在一个队列1412中存储一个或更多个相交的不透明三角形标识符,在另一个队列1414中存储一个或更多个透明三角形标识符。
对于不透明三角形,不太复杂的几何体的光线相交可以在TTU 738中完全确定,因为不透明三角形的面积阻止光线通过三角形的表面。对于透明三角形,在一些实施例中,光线相交不能在TTU 738中完全确定,因为TTU 738基于三角形的几何体执行相交测试,并且可能无法访问三角形的纹理和/或纹理所占据的三角形的面积(在其他实施例中,可由图形管线的纹理映射块向TTU提供纹理信息)。为了完全确定三角形是否相交,可以将关于光线图元和变换块1020确定相交的透明三角形的信息发送到SM 732,以便SM完全确定三角形是否影响沿光线的可见性。
SM 732可以解决光线是否与透明三角形相关联的纹理相交和/或光线是否将被纹理阻挡。SM 732在某些情况下可以基于该确定向TTU 738发送修改后的查询(例如,如果光线被纹理阻挡,则缩短光线)。在一个实施例中,TTU 738可以被配置为将确定为与光线相交的所有三角形返回SM 732以进行进一步处理。由于将每个三角形交点返回SM 732以进行进一步处理在接口和线程同步方面是昂贵的,TTU 738可以被配置为隐藏相交的三角形,但是可以证明这些三角形能够被隐藏而不会对结果场景产生功能影响。例如,由于TTU 738提供了三角形类型信息(例如,三角形是不透明的还是透明的),TTU 738可以使用三角形类型信息来确定被另一个相交的不透明三角形沿光线遮挡的相交三角形,因此不需要包括在结果中,因为它们不会影响光线的可见性。如果TTU 738知道一个三角形被一个不透明的三角形沿光线遮挡,则被遮挡的三角形可以从结果中隐藏而不影响结果场景的可视化。
相交管理块1022可以包括结果队列,用于存储与三角形ID相关联的命中和关于光线命中三角形的点的信息。当确定光线与不透明三角形相交时,可以将三角形的标识以及交点到光线原点的距离存储在结果队列中。如果确定光线与另一个不透明三角形相交,如果交点到光线原点的距离大于已存储在结果队列中的相交不透明三角形的距离,则可以从结果中忽略另一个相交的不透明三角形。如果交点到光线原点的距离小于已存储在结果队列中的相交不透明三角形的距离,则另一个相交的不透明三角形可以替换存储在结果队列中的不透明三角形。当一个查询的所有三角形都已经过测试后,可以将存储在结果队列中的不透明三角形信息和相交信息发送到SM 732。
在一些实施例中,一旦识别出不透明三角形交点,相交管理块1022可以缩短存储在光线管理块1030中的光线,使得相交的不透明三角形(沿光线)后面的包围体(可以包括三角形)将不会被标识为与光线相交。
相交管理块1022可以在单独的队列中存储关于相交的透明三角形的信息。存储的关于相交的透明三角形的信息可以被发送到SM 732,以便SM解析光线是否与与三角形相关联的纹理相交和/或纹理是否阻挡光线。SM可将该确定的结果返回给TTU 738和/或基于该确定修改查询(例如,如果光线被纹理阻挡,则缩短光线)。
如上所述,TTU 138允许快速遍历加速数据结构(例如BVH),以确定数据结构中的哪些图元(例如,用于生成场景的三角形)与查询数据结构(例如,光线)相交。例如,TTU 738可以确定加速数据结构中的哪些三角形与光线相交,并将结果返回SM 732。然而,在接口和线程同步方面,返回SM 732每个三角形相交的结果是昂贵的。TTU 738提供了硬件逻辑,被配置为隐藏那些可以被证明能够被隐藏而不会对结果场景产生功能影响的条目或三角形。向SM返回的结果以及线程之间的同步步骤的减少极大地提高了遍历的总体性能。在本申请中公开的TTU 738的示例性非限制性实施例提供了在没有SM 732干预的情况下在TTU 738内丢弃一些相交,以便返回到SM 732的相交更少,并且SM 132不必检查所有相交的三角形或条目范围。
用TTU738和SM732实现的示例实例管线
下面描述示例实施例中TTU 738如何执行实例化和相关联的变换。
图12A光线跟踪管线流程图的更详细的图表显示了典型用例的数据流和组件之间的交互:针对包含几何图元的场景跟踪光线,并在硬件中处理实例变换。在一个示例性非限制性实施例中,图12A的光线跟踪管线基本上是软件定义的(在示例性实施例中,这意味着它由SM 732确定),但是广泛利用了TTU 738的硬件加速。关键组件包括SM 732(以及其余的计算管线)、TTU 738(作为SM的协处理器)和一级高速缓存和下游内存系统,TTU从中获取BVH和三角形数据。
图12A中所示的管线显示,包围体层级创建1202可以由开发系统提前执行。它还示出由SM 732或示例实施例中的其他软件执行或控制光线创建和分布1204,作为阴影(可以包括照明和纹理)。示例管线包括由TTU 738执行的“顶层”BVH树遍历1206、光线变换1214、“底层”BVH树遍历1218和光线/三角形(或其他图元)相交1226。这些操作不必按照所示的顺序执行,因为TTU 738和SM 732之间的握手决定了TTU 738的操作和顺序。
SM 732一次向TTU 738提供一条或多条光线。SM 732提交给TTU 738用于遍历的每一条光线可以包括该光线的几何参数、遍历状态以及该光线的光线标志、模式标志和光线操作信息。在一个示例实施例中,光线操作(RayOp)提供或包括用于抑制、覆盖和/或允许存储相交的辅助算法和/或逻辑测试。SM 732还可以使用遍历堆栈来将某些状态信息传送到TTU 738以在遍历中使用。可以使用显式遍历堆栈启动新的光线查询。但是,对于某些查询,可以提供少量的堆栈初始值设定项来开始给定类型的新查询,例如:从一个压缩树开始遍历;一条光线与一系列三角形相交;一条光线与一系列三角形相交,然后从一个压缩树开始遍历;从给定三角形的三角形缓冲区获取顶点等。在一些实施例中,使用堆栈初始值设定项而不是显式堆栈初始化提高了性能,因为堆栈初始值设定项需要更少的流处理器寄存器,并减少了需要从流式处理器传输到TTU的参数的数量。
在示例实施例中,SM 732随每个查询(例如,光线)提交的一组模式标志可以至少部分地控制当查询与特定类型的包围体相交或与特定图元类型的图元相交时TTU 738将如何处理该查询。SM 732提供给TTU 738的模式标志使SM和/或应用程序能够(例如通过RayOp)指定辅助算术或逻辑测试来抑制、覆盖或允许存储相交。例如,模式标志可以使遍历行为能够根据例如与每个包围体和/或图元相关联的深度(或距离)、与图元或光线的距离有关的包围体或图元的大小、对象的特定实例等来改变。该能力可以被应用程序用来动态和/或有选择地启用/禁用用于相交测试的对象集,而不是特定的查询集或查询组,例如,允许在应用程序状态更改(例如,门打开或关闭时)时使用不同版本的模型,或提供模型的不同版本选择作为光线长度的函数,以实现几何级细节的形式,或允许特定光线类中的特定对象集使某些层在特定视图中可见或不可见。
除了可以分别为光线压缩树相交和光线图元相交指定的模式标志集之外,光线数据结构还可以指定其他与RayOp测试相关的参数,例如光线标志、光线参数和RayOp测试。根据可选RayOp测试的通过/失败状态,TTU 738可以使用光线标志来控制遍历行为的各个方面、背面剔除和各种子节点类型的处理。RayOp测试增加了TTU 738的灵活性,但牺牲了一些复杂性。TTU 138为其正在处理的每个活动光线保留“光线时隙”,并且可以在遍历期间将光线标志、模式标志和/或RayOp信息存储在TTU内相应的光线时隙缓冲器中。
在图12A所示的示例中,TTU 738执行顶层树遍历1206和底层树遍历1218。在示例实施例中,BVH的两级遍历使得能够对动态场景变化做出快速光线跟踪响应。
在一些实施例中,在进入顶层树遍历或顶层树遍历时,指定顶层变换的实例节点1205在BVH中被遇到。实例节点1205向TTU指示生根于实例节点1205的子树与在实例节点1205中定义的来自世界空间的变换的替代世界空间坐标系对准。
响应于遍历实例节点1205,TTU将从SM从世界空间接收到的一条或多条光线变换到替代世界空间。
在一些实施例中,对于每个光线,变换后的光线的信息被写入顶层光线槽中,从而覆盖在世界空间中最初存储在那里的光线的信息。例如,变换后的光线的原点和方向将被写入顶层光线槽,从而覆盖世界空间中光线的原点和方向。顶层光线槽的覆盖将无条件地将光线变换到变换后的世界空间。这种光线的无条件变换使TTU能够提供两个级别的变换,而不需要任何硬件状态,除了用于仅使用一个级别的变换(例如到对象空间)的遍历之外。
加速结构的顶层(TLAS)包含世界空间坐标系中的几何体,而加速结构的底层(BLAS)包含对象空间坐标系中的几何体。TTU分别为TLAS遍历和BLAS遍历维护光线状态和堆栈状态,因为它们实际上是独立的遍历。
如上所述,SM通知TTU在BVH中的位置,以便在启动新的光线查询或通过在发送到TTU的光线查询中包含堆栈初始化压缩树来重新启动光线查询时开始光线遍历。堆栈初始化压缩树包含指向要遍历的子树的根部的指针。在一些实施例中,顶层变换由生根在顶层变换中的堆栈初始化压缩树中的顶层标志(“tl flag”)1502表示的。图15显示了一个示例堆栈初始化压缩树1502格式,其中包含顶层标志1504、指向实例节点1506的指针(“实例指针”)和指向压缩树1508的指针(“压缩树指针”)。在一些实施例中,顶层标志是单个位。
当启动新的光线查询时,顶层标志由SM设置,以指示堆栈初始化压缩树中的实例指针用于顶层变换。在一些实施例中,对于要设置的顶层标志,压缩树指针和实例指针都必须是非零的。在这种情况下,如果设置了顶层标志,那么两个条目将被推送到顶层堆栈:第一个实例节点堆栈条目基于设置了顶层标志的非零实例指针,然后是一个基于非零压缩树指针的完整堆栈条目。如果实例指针为零,则忽略顶层标志,并根据压缩树的内容构造堆栈。如果压缩树指针为零,但实例指针不为零且设置了顶层标志,则可以创建一个空堆栈。对于新的光线查询,由SM正确设置顶层标志并包含指向顶层变换实例的指针。
图16显示了一个示例堆栈条目格式1602。如图16所示,堆栈条目类型中的顶层标志(如图16所示)可以是单个位,它向TTU指示加速结构中的相应节点是顶层变换的实例节点。顶层变换由在堆栈条目中设置的顶层标志1604指示。具有顶层标志集的堆栈条目在这里被称为顶层实例堆栈条目。在示例实施例中,TTU本身可能永远不会在堆栈条目中设置顶层标志。当在堆栈条目中设置顶层标志时,堆栈条目中的某些其他标志,例如,表示底部光线变换的标志“b”、用于返回SM的标志“s”以及用于初始化位的“i”可以被定义为保留,并应被设置为0。在启动新的光线查询的情况下,TTU根据从SM接收到的堆栈初始化压缩树,创建一个设置了顶层标志的第一个实例堆栈条目。但是,在堆栈恢复的情况下,由SM制定符合上述描述的第一个实例节点堆栈条目。
设置了顶层标志的堆栈条目可以类似于不设置顶层标志的栈条目的处理方式进行处理,但改变如下:相交管理单元1022不记录实例ID和实例节点的地址;实例管理单元1022不记录底部BVH根压缩树地址,因为它不会被发送到堆栈管理单元1040;光线管理单元1030将变换后的光线原点和方向写入顶部的光线槽;只写入光线原点和方向,光线标志和时间戳位保持不变;相交管理单元1022向SMU发送弹出(pop)通知,弹出顶层变换实例节点堆栈条目,底层堆栈不受影响,堆栈管理单元1040继续遍历顶层堆栈。
顶层变换可以使用与其他实例节点相同的实例节点格式,但是在顶层变换中,除了变换矩阵值之外的字段可以被忽略。顶层变换后,存储在顶层槽中的光线将被覆盖,并且无法在TTU中恢复。也就是说,与典型变换不同的顶层变换是破坏性的。由SM侧来跟踪原始光线。
与其他实例变换(如从世界空间到对象空间的变换)不同,在抢先的情况下,即使条目从堆栈中弹出,顶层变换也不计入前进进度。由于顶层变换会立即弹出,并且不计入前进进度,因此不会将其返回给SM。
顶层变换可以用于初始启动(例如,新的光线查询)和使用堆栈还原的重新启动。对于堆栈还原,可以在SM上修改堆栈,以将顶层变换放在顶层堆栈的顶部。对于初始启动,可以使用设置有顶层标志的堆栈初始化压缩树来创建正确的堆栈。
在一些实施例中,对于顶层变换的使用,以下限制可以适用,并且任何违反都可以被认为是未定义的行为:顶层变换只能在顶层堆栈上使用;任何顶层变换在启动时必须是堆栈上的第一个条目(即,顶层变换不能被链接在一起,并且顶层变换也不能遵循常规变换);应配置最大堆栈限制以计算精心编制的堆栈还原(例如,在堆栈上保留空间)以添加顶层变换。
堆栈管理单元(SMU)1040被配置为在接收到设置了顶层标志且两个指针(实例指针和压缩树指针)都非零的堆栈初始化压缩树时,构造一个包含两个条目的顶层堆栈:第一个实例节点堆栈条目基于设置了顶层标志的非零实例指针,然后是基于非零压缩树指针的压缩树堆栈条目。如果其中任何一个指针为零,SMU将按上述方式构造一个堆栈。
SMU 1040将通过第一个实例节点堆栈条目的顶层标志作为元数据传递到RTT/IMU1022。
在顶层变换之后,SMU 1040按照IMU 1022的指示,将从顶层堆栈弹出第一个实例节点堆栈条目,并在顶层堆栈上继续遍历。此时不会激活底层堆栈。SMU 1040不会将第一个实例节点堆栈条目的弹出计算为关于超时/抢先的前进进度。
相交管理单元(IMU)1022不记录用于顶层变换的实例ID或实例节点的地址。IMU1022不记录底部BVH根压缩树地址,因为它不会被发送到SMU。IMU将像往常一样将变换结果发送到RMU 1030,但设置了顶层标志。
IMU 1022将向SMU 1040发送弹出通知,并弹出顶层变换实例节点堆栈条目。
当为变换结果设置了顶层标志时,光线管理单元(RMU)1030将把变换后的光线写入顶部光线槽的光线原点和方向。只写入光线原点和方向。光线标志和时间戳位保持不变。
对于顶层变换,BVH构造器使用修改的BLAS变换和新的顶层变换实例节点构造一个替代世界空间。如上所述,SM创建的查询在启动新的光线查询时以及在使用堆栈恢复重新启动时通过顶层变换。
光线变换1214通过将可用于第一坐标空间(例如,世界空间)中的顶层遍历中的光线变换到不同的坐标空间(例如,对象空间),提供从顶层树遍历1206到底层树遍历1218的适当变换。在先前的文献中描述了使用两级遍历的示例BVH遍历技术,例如,参见沃普(Woop),“动态场景的光线跟踪硬件架构(A Ray Tracing Hardware Architecture forDynamic Scenes)”,萨尔大学,2004年,但实施例不限于此。
示例顶层树遍历
由TTU 738执行的顶层树遍历1206从L1高速缓存1212接收压缩树,并向光线变换1214提供用于变换的实例,或向SM 732提供未命中/结束输出1213以用于SM处理的最近的命中着色器1215(该块还可以基于非叶节点/无命中条件递归操作)。在顶层树遍历1206中,下一个压缩树获取步骤1208从内存和/或缓存层级获取步骤1210中要测试的下一个压缩树,并且对所获取的压缩树中的包围体执行光线包围体相交测试。
如上所述,实例节点将一个BVH连接到另一个位于不同坐标系中的BVH。当相交包围体的子对象是实例节点时,光线变换1214能够从L1高速缓存1216检索适当的变换矩阵。TTU 738使用适当的变换矩阵,将光线变换为子BVH的坐标系。已经通过引用并入的14/697480号美国专利申请描述了将树中的第一组节点连接到第二组节点的变换节点,其中第一组和第二组节点位于不同的坐标系中。示例性实施例中的实例节点可以类似于14/697480号美国申请中的变换节点。可选地,在图12B所示的TTU 738的非实例模式中,TTU不执行“底部”级树遍历1018,并且非标准树BVH遍历由块1208、1210执行,例如,仅使用一个堆栈。TTU 738可以基于从BVH和/或查询类型读取的内容在图12A实例操作和图12B非实例操作之间切换。例如,特定的查询类型可能会限制TTU只使用非实例操作。在这样的查询中,任何相交的实例节点都将被返回给SM。
在一些非限制性实施例中,在获取下一个压缩树之前,对所获取的压缩树中的每个包围体执行步骤1210中的光线包围体相交测试。其他实施例可以使用其他技术,例如,以深度优先的方式遍历顶层遍历BVH。已经通过引用并入的9,582,607号美国专利描述了可在示例实施例中使用的一个或更多个压缩树结构和内容。9,582,607号美国专利还描述了一个压缩树的示例性遍历。
当确定包围体与光线相交时,相交包围体的子包围体(或对它们的引用)将被保持跟踪,以便后续测试是否与光线相交并进行遍历。在示例实施例中,使用一个或更多个堆栈数据结构来跟踪随后要测试的子包围体与光线的相交。在一些示例实施例中,小尺寸的遍历堆栈可用于跟踪通过顶层树遍历1206的操作要遍历的压缩树和要测试相交的图元,并且可以使用更大的本地堆栈数据结构来跟踪底层树遍历1218中的遍历状态。图13示出了具有底部堆栈条目1304和顶部堆栈条目1306的示例性的遍历堆栈1302。
示例性底层树遍历
在底层树遍历1218中,下一个压缩树获取步骤1222从存储器和/或高速缓存层次1220中获取步骤1224中要测试光线相交的下一个压缩树,并且对所获取的压缩树中的包围体执行光线包围体相交测试。如上所述,底层树遍历可以包括具有在与上层树遍历中遍历的包围体不同的坐标系中的包围体的压缩树。底层树遍历还从L1高速缓存接收压缩树,并且可以基于非叶/无命中条件在自身内递归或迭代地操作,并且还可以基于未命中/结束检测的顶层树遍历1206。光线与下层BVH中的包围体的交点可以通过将光线变换到恢复的下层压缩树的坐标系来确定。然后寻找到的在下层树遍历中被光线相交的叶包围体被提供给光线/三角形相交1226。
底层树遍历1218的叶输出被提供给光线/三角形相交1226(其具有L0高速缓存访问以及通过L1高速缓存1228检索三角形的能力)。L0压缩树和三角形缓存可以是TTU 138内部的小型只读缓存。当到达某些叶节点而不遍历实例BVH时,光线/三角形相交1226还可以接收来自顶层树遍历1206的叶输出。
在处理完图元范围内的所有图元之后,相交管理单元检查结果队列的状态(例如图14中的结果队列1410),并处理分组,将其发送到堆栈管理单元和/或光线管理单元以更新光线的属性和遍历状态,设置光线的下一个遍历步骤,和/或将光线返回SM 732(如有必要)。如果结果队列包含在处理图元范围期间发现的不透明1412或阿尔法1414相交,则相交管理单元将结果队列中最近的不透明相交的参数长度(t)发送给光线管理单元,以记录为光线的最大长度(tmax),以缩短光线。为了更新遍历状态以设置光线的下一个遍历步骤,相交管理单元将向堆栈管理单元发出信号:结果队列中是否存在来自图元范围的不透明相交,结果队列中是否存在一个或更多个阿尔法相交,结果队列是否已满,是否在图元范围内发现未返回给SM且结果队列中不存在的其他阿尔法交点,以及在SM消耗结果队列的内容后要测试的光线的图元范围中的下一个阿尔法图元的索引(结果队列中当前图元范围内存顺序最高的阿尔法图元之后的下一个阿尔法图元的索引)。
当堆栈管理单元1040从相交管理单元1022接收到分组时,堆栈管理单元1040检查该分组以确定完成遍历步骤所需的下一操作并开始下一步骤。如果来自相交管理单元1022的分组指示在图元范围内发现了不透明相交,并且光线模式位指示一旦找到任何相交,光线将完成遍历,则堆栈管理单元1040将光线及其结果队列返回给SM,遍历状态指示该遍历完成(完成标志集和/或空的顶层和底层堆栈)。如果来自相交管理单元1022的分组指示在结果队列中存在不透明或阿尔法相交,并且在结果队列中不存在图元范围中的剩余阿尔法相交,其在处理尚未返回到SM的图元范围期间被光线遇到,则堆栈管理单元1040将遍历状态被修改的光线和结果队列返回给SM,以设置剔除不透明位以防止对图元范围内的不透明图元进行进一步处理,并且图元范围的起始索引从返回到光线结果队列中的SM的图元范围的最高的阿尔法图元相交之后推进到第一个阿尔法图元。如果来自相交管理单元1022的分组指示在光线处理图元范围时没有发现不透明或阿尔法相交,则堆栈管理单元1040从活动遍历堆栈弹出堆栈顶部条目(对应于完成的图元范围)。如果来自堆栈管理单元1040的分组指示在结果队列中存在不透明相交,并且一旦找到任何相交和/或结果队列中存在阿尔法相交,则光线模式位不指示光线将完成遍历,但在图元范围内未发现剩余的阿尔法相交,该图元范围未出现在尚未返回到SM的图元范围的结果队列中,则堆栈管理单元1040从活动遍历堆栈弹出堆栈顶部条目(对应于已完成的图元范围),并修改结果队列的内容,以指示结果队列中存在的所有相交都来自处理完成的图元范围。
如果活动堆栈是底部堆栈,并且底部堆栈为空,则堆栈管理单元1040将活动堆栈设置为顶部堆栈。如果顶层堆栈是活动堆栈,并且活动堆栈为空,则堆栈管理单元1040将光线及其结果队列返回给SM,其遍历状态指示遍历完成(完成标志集和/或空的顶层和底层堆栈)。如果活动堆栈包含一个或更多个堆栈条目,则堆栈管理单元1040检查顶部堆栈条目并开始下一个遍历步骤。与光线相交的图元和/或图元范围的测试以及将结果返回给SM 732的结果在题为“保守水密光线三角相交(Conservative Watertight Ray TriangleIntersection)”的第16/101,148号待审美国申请和题为“处理无序不透明和α光线/原始相交的方法(Method for Handling Out-of-Order Opaque and Alpha Ray/PrimitiveIntersections)”的第16/101,196号美国申请中进行了说明,其全部内容通过引用合并于本文。
两级以上变换的加速示例
图12A的上述描述描述了TTU 738如何在不返回SM 732的情况下在硬件中处理两个级别的实例变换。图17是SM 732和TTU 738中当在BVH中遍历具有两个以上变换级别的路径时的示例处理流的流程图。例如,遍历可以包括从世界空间到第一替代世界空间、从第一替代世界空间到第二替代世界空间以及从第二替代世界空间到对象空间的变换。每个变换都由加速结构中的一个实例节点表示,指定从该实例节点上方的坐标空间到下方的坐标空间的变换。
在本实施例中,考虑到指定变换的实例节点,加速结构的上方的部分被认为是TLAS,下方的部分被认为是BLAS。也就是说,TLAS的遍历状态用于遍历实例节点上方的BVH部分,BLAS的遍历状态用于遍历实例节点下方的BVH部分。如果BLAS遍历的根节点是实例节点,则根据实例节点变换光线并执行遍历。当在TLAS遍历的根节点之后遇到实例节点时,TTU执行相应的变换并开始BLAS遍历。当在BLAS遍历中遇到实例节点时,变换后的光线和堆栈状态将被返回给SM。SM使用变换后的光线启动一个新查询,堆栈状态基于从TTU返回的堆栈状态继续在TTU中遍历。
考虑具有根节点的BVH路径,实例节点指定从世界空间到第一替代世界空间的变换,实例节点指定从第一替代世界空间到第二替代世界空间的变换,以及实例节点指定从第二替代世界空间到对象空间的变换。SM在步骤1702通过启动指定世界空间中的光线的查询和带有BVH的根的堆栈初始化压缩树来启动遍历。
在步骤1704,TTU将世界空间中的光线信息写入光线状态,堆栈初始化压缩树被推送到TLAS中的堆栈上。在1706,TTU在TLAS中的世界空间中执行遍历,直到它到达指定从世界空间到第一替代世界空间的变换的实例节点(例如,直到遍历遇到实例节点命中类型)。
在1708,TTU将光线从世界空间变换到第一替代世界空间,并将变换后的光线写入BLAS的光线槽中。在1710,在BLAS中执行在第一替代世界空间中的遍历,直到遇到指定从第一替代世界空间到第二替代世界空间的变换的实例节点。
在1712,TTU返回第一替代世界空间中的光线状态和堆栈状态。因此,已遍历了两个坐标空间的TTU将光线返回给SM继续遍历。
在1714,SM重新指定第一替代世界空间中的光线的启动光线查询,并且包括实例节点的堆栈初始化压缩树指定从第一替代世界空间到第二替代世界空间的变换。如上所述,由于这包括顶层实例节点,所以顶层标志(顶层标志)是在堆栈初始化压缩树中设置的。
在步骤1716,TTU将SM在第一世界空间中指定的光线写入顶层光线槽,并将堆栈中具有顶层标志的顶层实例节点条目推入TLAS中。在步骤1718,TTU基于堆栈条目中的tl位,将光线从第一替代世界空间变换到第二替代世界空间,并用变换后的光线信息覆盖TLAS的光线状态。在步骤1720,在第二世界空间中进行遍历,直到遇到用于从第二替代世界空间到对象空间的变换的实例节点。
在步骤1722,TTU根据实例节点将光线从第二替代世界空间变换到对象空间,并将变换后的光线写入BLAS中的光线槽中。在步骤1724,继续在对象空间中遍历以检测光线图元相交。在步骤1726,如上所述,将关于光线图元相交测试的信息发送到SM。
尽管该示例描述了具有三个变换的BVH路径,但实施例不限于仅具有两个或三个变换级别的BVH。一些实施例可以通过在遍历两个坐标空间后返回SM来处理任意数量的变换级别。
包含光线跟踪的图像生成管线示例
虽然上述公开是在计算机图形和可视化的特定上下文中框架的,但是光线跟踪和所公开的TTU可以用于图形和可视化之外的各种应用。非限制性示例包括用于真实声音合成的声音传播、声纳系统的模拟、光学元件和系统的设计、粒子传输模拟(例如,医学物理或实验高能物理)、一般波传播模拟、与用于机器人或车辆定位等目的的激光雷达数据的比较等。OptiXTM在过去已经在一些应用领域中使用过。
例如,上述光线跟踪和其他功能可以以多种方式使用。例如,除了用于使用光线跟踪渲染场景之外,它们还可以与扫描变换技术结合实现,例如在用于生成用于显示的图像的3D模型的几何构造块(即,多边形图元,例如三角形)的上下文中(例如,在图7所示的显示器750上)。
然而,同时,本文中的技术在用于为虚拟现实、增强现实、混合现实、视频游戏、运动和静态图像生成以及其他可视化应用生成图像时提供优势。图18示出了根据一个实施例的用于处理图元以提供图像的图像像素值的示例流程图。如图18所示,响应于接收用户输入,可以生成3D模型的图像(步骤1852)。用户输入可以是显示图像或图像序列的请求,例如在与应用程序(例如,游戏应用程序)交互期间执行的输入操作。作为对用户输入的响应,系统使用传统的GPU三维图形管线执行场景的三维模型几何图元的扫描变换和光栅化(步骤1854)。几何图元的扫描变换和光栅化可以包括例如处理3D模型的图元,以使用诸如照明、变换、纹理映射、光栅化等常规技术来确定图像像素值,如本领域技术人员所熟知的。生成的像素数据可以被写入帧缓冲器。
在步骤1856中,可以使用TTU硬件加速从光栅化图元上的一个或更多个点跟踪一个或更多个光线。可以根据本申请中公开的一个或更多个光线跟踪功能对光线进行跟踪。基于光线跟踪的结果,可以修改存储在缓冲器中的像素值(步骤1858)。在一些应用程序中,修改像素值可以例如通过应用更真实的反射和/或阴影来提高图像质量。使用存储在缓冲器中的修改的像素值来显示图像(步骤1860)。
在一个例子中,几何图元的扫描变换和光栅化可以使用上述处理系统来实现,并且光线跟踪可以由SM的732使用图10描述的TTU架构来实现,以添加进一步的可视化特性(例如,镜面反射、阴影等)。图18只是一个非限制性示例-SM的732可以单独使用所述TTU而不需要纹理处理或其他常规3D图形处理来生成图像,或者SM可以在没有所述TTU的情况下使用纹理处理和其他常规3D图形处理来生成图像。SM还可以根据应用程序在软件中实现任何期望的图像生成或其他功能,以提供任何所需的可编程功能,该功能不受纹理映射硬件、树遍历硬件或其他图形管线硬件提供的硬件加速特性的约束。
在一些实施例中,TTU 738是无状态的,这意味着在查询之间在TTU中不维护体系架构的状态。同时,在SM 732上运行的软件请求继续先前的查询通常是有用的,这意味着相关状态应该由TTU 738写入寄存器,然后在寄存器中(通常是原位地)传递回TTU以继续。这种状态可以采取遍历堆栈的形式,跟踪BVH的遍历进度。
也可以提供少量的堆栈初始值设定项,用于开始给定类型的新查询,例如:
·从压缩树开始的遍历
·光线与一系列三角形的相交
·光线与一系列三角形的相交,然后从一个压缩树开始遍历
·从给定三角形的三角形缓冲区提取顶点
·可选的支持前述的“从压缩树开始的遍历”和“光线与一系列三角形的相交”的实例变换。
定点获取是一个简单的查询,其可以使用由堆栈初始值设定项组成的请求数据来指定。其他查询类型可能需要光线或光束的规范,以及堆栈或堆栈初始值设定项以及描述查询详细信息的各种光线标志。光线由其三坐标原点、三个坐标方向以及沿光线的t参数的最小值和最大值给出。另外,光束由第二原点和方向给出。
根据可选rayOp测试的通过/失败状态,各种光线标志可以用于控制遍历行为的各个方面、背面剔除和各种子节点类型的处理。RayOps为TTU的功能增加了相当大的灵活性。在一些示例实施例中,RayOps部分引入了两个光线标志版本,可以基于对与光线一起传送的数据和压缩树中存储的数据的指定操作来动态选择。为了研究这些标志,最有益的是了解BVH中允许的不同类型的子节点,以及TTU 738可以返回SM的各种命中类型。节点类型示例如下:
■子压缩树(即内部节点)
默认情况下,TTU 738通过下降到子压缩树来继续遍历。
■三角形范围,对应于三角形缓冲区内的一组连续三角形
(1)默认情况下,TTU 738通过测试三角形的相交并相应地缩短光线来处理光线遇到的三角形范围。如果遍历完成并且命中了一个三角形,则默认行为是将三角形ID与相交的t值和重心坐标一起返回SM 732。这是“三角形”命中类型。
(2)默认情况下,即使遍历尚未完成,设置了阿尔法位的相交三角形也将返回SM1840。如果软件确定三角形实际上是透明的,则返回的遍历堆栈包含继续遍历所需的状态。
(3)在一些实施例中,光束不支持三角形相交,因此遇到的三角形范围默认作为“三角形范围(TriRange)”命中类型返回SM 1840,其中包括指向覆盖该范围的第一个三角形块的指针、指定范围的参数以及与叶边界框相交的t值。
■条目范围,由索引(从存储在压缩树中的用户提供的“条目范围基础”派生)和条目的计数组成。
默认情况下,条目范围以“条目范围”命中类型返回SM 1840,包括索引、计数和与叶边界框相交的t值。
■实例节点。
在一些实施例中,TTU 738可以通过将光线变换为两个实例BVH的坐标系来本地处理两个级别的实例化。可以在软件中处理额外的实例化级别(或每个其他级别的实例化,具体取决于策略)(或者在其他实施例中,TTU 738硬件可以处理三个或更多级别的实例)。为此,提供了“实例节点”命中类型,由指向实例节点的指针和与叶边界框相交的t值组成。在其他实现中,硬件可以处理两个、三个或更多级别的实例。
除了特定于节点的命中类型,还提供了一个通用的“节点参考(NodeRef)”命中类型,该类型包括指向父压缩树本身的指针,以及指示与子元素的边界框相交的t值的ID。
如果查询或BVH格式不正确,或者在遍历过程中遇到问题,可以提供“错误”命中类型。
如果光线或光束未命中场景中的所有几何体,则可以提供“无”命中类型。
TTU如何处理四种可能的节点类型中的每一种,是由一组作为给定光线查询的一部分而设置的特定于节点的模式标志来确定的。上面提到的“默认”行为对应于模式标志被设置为全零的情况。
标志的可选值允许剔除给定类型的所有节点,将给定类型的节点作为节点参考命中类型返回SM,或者使用其相应的命中类型将三角形范围或实例节点返回给SM,而不是在TTU 738中本地处理它们。
可以提供额外的模式标志来控制阿尔法三角形的处理。
应用本文公开的一种或多种技术生成的图像可以显示在监视器或其他显示设备上。在一些实施例中,显示设备可以直接耦合到生成或呈现图像的系统或处理器。在其它实施例中,显示设备可以例如经由网络间接地耦合到系统或处理器。此类网络的示例包括互联网、移动电信网络、WIFI网络以及任何其他有线和/或无线网络系统。当显示设备被间接耦合时,由系统或处理器生成的图像可以通过网络流传输到显示设备。例如,这种流媒体允许在服务器或数据中心中执行渲染图像的视频游戏或其他应用程序,并且在与服务器或数据中心物理上分离的一个或更多个用户设备(例如计算机、视频游戏控制台、智能手机、其他移动设备)上传输和显示所呈现的图像。因此,本文公开的技术可以用于增强流式传输的图像和增强流式图像的服务,例如NVIDIA GeForce Now(GFN)、Google Stadia等。
此外,应用本文公开的一种或多种技术生成的图像可以用于训练、测试或认证用于识别真实世界中的对象和环境的深度神经网络(DNN)。这些图像可以包括道路、工厂、建筑物、城市环境、乡村环境、人类、动物和任何其他物理对象或真实世界场景的场景。这些图像可以用于训练、测试或认证用于机器或机器人在现实世界中操纵、处理或修改物理对象的DNN。此外,这些图像可以用于训练、测试或认证用于自主车辆中的DNN,以在真实世界中导航和移动车辆。另外,应用本文公开的一种或多种技术生成的图像可以用于向此类机器、机器人和车辆的用户传送信息。
以上引用的所有专利和出版物均以引用方式并入,如同明确陈述的那样。虽然已经结合当前被认为是最实际和优选的实施例来描述本发明,但是应当理解,本发明不限于所公开的实施例,而是相反,旨在涵盖所附权利要求书的精神和范围内包括的各种修改和等效安排。
Claims (29)
1.一种光线跟踪加速硬件设备,包括:
遍历电路,被配置为遍历加速数据结构;
变换电路,被配置为响应于来自所述加速数据结构的节点类型,交替地(a)在不同的世界空间之间变换光线,以及(b)将所述光线从世界空间变换到对象空间;以及
相交测试电路,被配置为测试变换后的光线与由所述加速数据结构定义的包围体相交。
2.根据权利要求1所述的光线跟踪加速硬件设备,其中所述光线跟踪加速硬件设备是到处理器的协处理器,并且其中在第一世界空间中定义的所述光线是从所述处理器接收的。
3.根据权利要求2所述的光线跟踪硬件设备,其中所述变换电路还被配置为将所述光线从所述第一世界空间变换到所述第二世界空间,并从所述第二世界空间变换到所述对象空间。
4.根据权利要求1所述的光线跟踪加速硬件设备,其中所述遍历电路还被配置为保持顶层遍历状态和顶层光线状态,用于在所述不同的世界空间中遍历所述加速结构,以及用以维持用于在所述对象空间中遍历所述加速结构的底层遍历状态和底层光线状态,并且其中,所述变换电路还被配置为存储在所述顶层光线状态或所述底层光线状态下的关于所述变换后的光线的信息。
5.一种光线跟踪设备,包括:
存储器,被配置为存储定义场景中的包围对象的多个包围体的分层布置的节点的加速数据结构的至少一部分;以及
电路,可操作地耦合到所述存储器并配置为执行操作,所述操作包括:
从处理器接收关于光线的第一信息和关于所述加速数据结构的第二信息,所述光线被指定在第一坐标空间中;
通过将所述光线变换到第二坐标空间和第三坐标空间,在所述第二坐标空间和所述第三坐标空间中遍历所述加速数据结构的各分层布置的部分,其中所述第一坐标空间、所述第二坐标空间和所述第三坐标空间分别不同;以及
响应于在所述变换之后到达所述加速数据结构中的一个或更多个预定类型的节点,向所述处理器发送关于所述光线的相交的信息和/或关于所述遍历的状态的信息。
6.根据权利要求5所述的光线跟踪设备,其中,所述第一坐标空间是针对在所述处理器上运行的应用程序所定义的世界坐标空间,并且所述第三坐标空间是在其中定义所述场景中更多个所述对象中的一个的对象空间。
7.根据权利要求5所述的光线跟踪设备,其中,所述加速数据结构包括第一实例节点和第二实例节点,分别指定从所述第一坐标空间到所述第二坐标空间的第一变换和从所述第二坐标空间到所述第三坐标空间的第二变换,并且其中,所述遍历包括根据在所述加速数据结构中的相应节点处的所述第一变换和所述第二变换来变换所述光线。
8.根据权利要求5所述的光线跟踪设备,其中所述光线跟踪设备是所述处理器的协处理器。
9.根据权利要求5所述的光线跟踪设备,其中所述遍历包括:
根据所述第二信息,将所述光线从所述第一坐标空间变换到所述第二坐标空间;
使用所述变换后的光线遍历所述加速数据结构,在所述第二信息中识别所述加速数据结构的一部分的根节点;
将所述变换后的光线从所述第二坐标空间进一步变换到所述第三坐标空间;
使用进一步变换的光线继续遍历所述加速结构;以及
其中发送信息包括:
响应于确定所述进一步变换的光线和所述对象中的一个之间的相交,向所述处理器发送关于所述相交的信息;或
响应于到达所述加速数据结构中的实例节点类型的节点,向所述处理器发送关于所述继续遍历的状态的信息。
10.根据权利要求9所述的光线跟踪设备,所述电路被进一步配置为执行操作,所述操作包括:
响应于所述接收,基于所述第一信息和所述第二信息初始化内部状态;以及
根据所述变换、所述遍历、所述进一步变换和所述继续遍历更新所述内部状态,
其中,分别基于所述变换后和所述进一步变换后更新的内部状态开始所述遍历和所述进一步遍历。
11.根据权利要求9所述的光线跟踪设备,其中所述电路进一步被配置为:
检测包括在所述第二信息中的顶层变换标志;以及
响应于检测到所述顶层标志被设置为开启,执行所述变换,或者响应于所述顶层标志被设置为关闭,不执行所述变换。
12.根据权利要求1所述的光线跟踪加速硬件设备,其中,所述遍历电路和相交检测电路是用于生成图像的服务器或数据中心的一部分,并且所述图像被流传输到用户设备。
13.根据权利要求1所述的光线跟踪加速硬件设备,其中所述遍历电路和所述相交检测电路用于生成图像,并且所述图像用于训练、测试或认证机器、机器人或自动驾驶车辆中使用的神经网络。
14.一种测试光线是否与图元相交的方法,包括:
从处理器接收关于第一坐标空间中的光线的第一信息和关于加速数据结构的第二信息,所述加速数据结构包括分层布置的节点,所述节点定义场景中包围对象的多个包围体;
通过将所述光线变换到第二坐标空间和第三坐标空间,在所述第二坐标空间和所述第三坐标空间中遍历所述加速数据结构的各分层布置的部分,其中所述第一坐标空间、所述第二坐标空间和所述第三坐标空间分别不同;以及
响应于在所述变换之后到达所述加速数据结构中的一个或更多个预定类型的节点,向所述处理器发送关于所述光线的相交的信息和/或关于所述遍历的状态的信息。
15.根据权利要求14所述的方法,其中所述遍历和将所述光线从所述第一坐标空间变换到所述第二坐标空间以及从所述第二坐标空间变换到所述第三坐标空间是通过树遍历硬件来执行的。
16.根据权利要求15所述的方法,其中所述第一信息和所述第二信息由调用所述树遍历硬件的所述处理器传输的。
17.根据权利要求14所述的方法,其中,接收第一信息、遍历所述加速度数据结构的各分层布置的部分以及发送关于相交的信息在服务器上或在数据中心上执行以生成图像,并且所述图像被流式传输到用户设备。
18.根据权利要求14所述的方法,其中执行接收第一信息、遍历所述加速数据结构的各分层布置的部分以及发送关于相交的信息以生成用于训练、测试或证明在机器、机器人、自动驾驶车辆中使用的神经网络的图像。
19.一种系统,包括处理器、并行处理单元PPU和耦合到存储器的遍历协处理器,其中:
所述存储器被配置为存储分层布置的节点的加速数据结构,所述分层布置的节点定义了包围场景的部分的多个包围体并在第一坐标空间中是轴线对准的,并且包括与所述场景中的表面相对应的多个叶节点,所述表面位于各自的对象坐标空间中;
所述处理器被配置为:
访问所述存储器中的所述加速数据结构;以及
对于包括所述场景的多个帧中的每一帧:
针对所述场景选择替代坐标空间;以及
当选定的坐标空间与所述第一坐标空间不同时,在选定的坐标空间中重新构造所述加速数据结构,并且针对所述加速数据结构的顶层节点,包括从所述第一坐标空间到所述选定的坐标空间的变换;
对于包含所述场景的所述多个帧中的每一帧,所述PPU被配置为:
访问重新构造的加速数据结构;以及
响应于检测到针对所述顶层节点的所述变换,将关于所述第一坐标空间中的光线的信息、关于所述重新构造的加速数据结构的信息以及关于所述变换的信息发送到所述遍历协处理器;
从所述遍历协处理器接收所述光线和所述重新构造的加速结构的相交信息;以及
根据接收到的所述相交信息渲染所述帧中的所述场景;以及
所述遍历协处理器被配置为:
接收所述关于所述光线的所述信息、关于所述重新构造的加速数据结构的信息以及关于所述变换的所述信息;
根据接收到的关于所述变换的信息,将所述光线从所述第一坐标空间变换到所述选定的坐标空间,并所述将光线从所述选定的坐标空间进一步变换到第三坐标空间;
确定所述光线与所述重新构造的加速数据结构的一个或更多个相交;以及
将确定的一个或更多个相交提供给所述PPU。
20.根据权利要求19所述的系统,其中所述处理器进一步配置为基于替代坐标空间的光线跟踪性能来选择所述坐标空间,在所述替代坐标空间中所述场景在一个或更多个先前帧中被显示。
21.根据权利要求19所述的系统,其中所述处理器进一步配置为修改所述重新构造的加速数据结构中的一个或更多个实例节点,以定义从所述选定的坐标空间到相应对象坐标空间的变换。
22.根据权利要求19所述的系统,其中所述处理器进一步配置为将所述变换与作为所述顶层节点的父节点插入到所述重新构造的加速数据结构中的实例节点相关联,其中所述重新构造的加速数据结构包括与从所述选定的变换到相应对象坐标空间的变换相关联的一个或更多个其他实例节点。
23.根据权利要求19所述的系统,其中,所述顶层节点是所述重新构造的加速数据结构的根节点。
24.根据权利要求23所述的系统,其中所述顶层节点对应于所述加速数据结构的内部节点。
25.根据权利要求23所述的系统,其中所述顶层节点对应于所述加速数据结构的根节点。
26.根据权利要求19所述的系统,其中所述遍历协处理器进一步配置为通过以下方式确定所述光线与所述重新构造的加速数据结构的一个或更多个交点:
确定变换后的光线与所述重新构造的加速数据结构的顶部部分的交点;
将所述变换后的光线从所述选定的坐标空间进一步变换到对象坐标空间;以及
确定进一步变换后的光线和所述重新构造的加速数据结构的底部部分的相交。
27.根据权利要求26所述的系统,其中所述遍历协处理器进一步配置为根据所述重新构造的加速数据结构中的相应实例节点来执行所述变换和所述进一步变换。
28.根据权利要求26所述的系统,其中,所述遍历协处理器包括第一光线槽寄存器和第二光线槽寄存器,并且所述遍历协处理器进一步被配置为用关于所述变换后的光线的信息覆盖在所述第一光线槽寄存器中维持的关于所述光线的信息。
29.根据权利要求26所述的系统,其中所述遍历协处理器还包括第一堆栈和第二堆栈,分别用于遍历所述重新构造的加速数据结构的所述顶部部分和所述重新构造的加速数据结构的所述底部部分的状态。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/897,745 US11282261B2 (en) | 2020-06-10 | 2020-06-10 | Ray tracing hardware acceleration with alternative world space transforms |
US16/897,745 | 2020-06-10 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113781624A true CN113781624A (zh) | 2021-12-10 |
CN113781624B CN113781624B (zh) | 2023-10-03 |
Family
ID=78718980
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110631675.6A Active CN113781624B (zh) | 2020-06-10 | 2021-06-07 | 具有可选的世界空间变换的光线跟踪硬件加速 |
Country Status (3)
Country | Link |
---|---|
US (2) | US11282261B2 (zh) |
CN (1) | CN113781624B (zh) |
DE (1) | DE102021205758A1 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023044029A1 (en) | 2021-09-16 | 2023-03-23 | Nvidia Corporation | Accelerating triangle visibility tests for real-time ray tracing |
GB2613359B (en) * | 2021-11-30 | 2023-11-22 | Imagination Tech Ltd | Method of generating a hierarchical acceleration structure |
US20230359496A1 (en) * | 2022-01-31 | 2023-11-09 | Intel Corporation | Stack access throttling for synchronous ray tracing |
CN115222868A (zh) * | 2022-07-15 | 2022-10-21 | 上海壁仞智能科技有限公司 | 光线追踪加速结构的处理设备以及处理方法 |
US20240087211A1 (en) | 2022-09-09 | 2024-03-14 | Nvidia Corporation | Generation and Traversal of Partial Acceleration Structures for Ray Tracing |
US20240095993A1 (en) | 2022-09-16 | 2024-03-21 | Nvidia Corporation | Reducing false positive ray traversal in a bounding volume hierarchy |
US20240095994A1 (en) | 2022-09-16 | 2024-03-21 | Nvidia Corporation | Reducing false positive ray traversal using point degenerate culling |
US20240095995A1 (en) | 2022-09-16 | 2024-03-21 | Nvidia Corporation | Reducing false positive ray traversal using ray clipping |
US20240095996A1 (en) | 2022-09-16 | 2024-03-21 | Nvidia Corporation | Efficiency of ray-box tests |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160070767A1 (en) * | 2014-09-04 | 2016-03-10 | Nvidia Corporation | Tree data structures based on a plurality of local coordinate systems |
US20160071313A1 (en) * | 2014-09-04 | 2016-03-10 | Nvidia Corporation | Relative encoding for a block-based bounding volume hierarchy |
KR20160029601A (ko) * | 2014-09-05 | 2016-03-15 | 삼성전자주식회사 | 광선 추적 유닛 및 광선 데이터를 처리하는 방법 |
KR20160038640A (ko) * | 2014-09-30 | 2016-04-07 | 삼성전자주식회사 | 가속 구조를 생성 및 탐색하는 방법 |
US20160292908A1 (en) * | 2015-04-02 | 2016-10-06 | Qualcomm Incorporated | Efficient hierarchy traversal in ray tracing applications |
US20190088002A1 (en) * | 2017-09-15 | 2019-03-21 | Imagination Technologies Limited | Reduced Acceleration Structures for Ray Tracing Systems |
US20190318530A1 (en) * | 2018-04-16 | 2019-10-17 | Oculus Vr, Llc | Systems and Methods for Reducing Rendering Latency |
US20200051317A1 (en) * | 2018-08-10 | 2020-02-13 | Nvidia Corporation | Method for forward progress and programmable timeouts of tree traversal mechanisms in hardware |
CN110827390A (zh) * | 2018-08-10 | 2020-02-21 | 辉达公司 | 处理无序不透明和α光线/图元交点的方法 |
CN110827388A (zh) * | 2018-08-10 | 2020-02-21 | 辉达公司 | 硬件中树遍历机制的前进和可编程超时的方法 |
CN110827387A (zh) * | 2018-08-10 | 2020-02-21 | 辉达公司 | 没有着色器干预下对交点进行连续层次包围盒遍历的方法 |
CN110827389A (zh) * | 2018-08-10 | 2020-02-21 | 辉达公司 | 严密的光线三角形相交 |
CN110827385A (zh) * | 2018-08-10 | 2020-02-21 | 辉达公司 | 树遍历的特定于查询的行为修改 |
CN110858410A (zh) * | 2018-08-06 | 2020-03-03 | 英特尔公司 | 利用图形处理器上的硬件加速的可编程光线追踪 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11138009B2 (en) | 2018-08-10 | 2021-10-05 | Nvidia Corporation | Robust, efficient multiprocessor-coprocessor interface |
US11157414B2 (en) | 2018-08-10 | 2021-10-26 | Nvidia Corporation | Method for efficient grouping of cache requests for datapath scheduling |
-
2020
- 2020-06-10 US US16/897,745 patent/US11282261B2/en active Active
-
2021
- 2021-06-07 CN CN202110631675.6A patent/CN113781624B/zh active Active
- 2021-06-08 DE DE102021205758.6A patent/DE102021205758A1/de active Pending
-
2022
- 2022-02-11 US US17/669,430 patent/US20220165017A1/en active Pending
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160070767A1 (en) * | 2014-09-04 | 2016-03-10 | Nvidia Corporation | Tree data structures based on a plurality of local coordinate systems |
US20160071313A1 (en) * | 2014-09-04 | 2016-03-10 | Nvidia Corporation | Relative encoding for a block-based bounding volume hierarchy |
KR20160029601A (ko) * | 2014-09-05 | 2016-03-15 | 삼성전자주식회사 | 광선 추적 유닛 및 광선 데이터를 처리하는 방법 |
KR20160038640A (ko) * | 2014-09-30 | 2016-04-07 | 삼성전자주식회사 | 가속 구조를 생성 및 탐색하는 방법 |
US20160292908A1 (en) * | 2015-04-02 | 2016-10-06 | Qualcomm Incorporated | Efficient hierarchy traversal in ray tracing applications |
US20190088002A1 (en) * | 2017-09-15 | 2019-03-21 | Imagination Technologies Limited | Reduced Acceleration Structures for Ray Tracing Systems |
US20190318530A1 (en) * | 2018-04-16 | 2019-10-17 | Oculus Vr, Llc | Systems and Methods for Reducing Rendering Latency |
CN110858410A (zh) * | 2018-08-06 | 2020-03-03 | 英特尔公司 | 利用图形处理器上的硬件加速的可编程光线追踪 |
US20200051317A1 (en) * | 2018-08-10 | 2020-02-13 | Nvidia Corporation | Method for forward progress and programmable timeouts of tree traversal mechanisms in hardware |
CN110827390A (zh) * | 2018-08-10 | 2020-02-21 | 辉达公司 | 处理无序不透明和α光线/图元交点的方法 |
CN110827388A (zh) * | 2018-08-10 | 2020-02-21 | 辉达公司 | 硬件中树遍历机制的前进和可编程超时的方法 |
CN110827387A (zh) * | 2018-08-10 | 2020-02-21 | 辉达公司 | 没有着色器干预下对交点进行连续层次包围盒遍历的方法 |
CN110827389A (zh) * | 2018-08-10 | 2020-02-21 | 辉达公司 | 严密的光线三角形相交 |
CN110827385A (zh) * | 2018-08-10 | 2020-02-21 | 辉达公司 | 树遍历的特定于查询的行为修改 |
Non-Patent Citations (3)
Title |
---|
R.A. COLMAN等: "An investigation of the optics of an accelerating column for use with a high brightness ion source and a proton microprobe", NUCLEAR INSTRUMENTS AND METHODS IN PHYSICS RESEARCH SECTION B: BEAM INTERACTIONS WITH MATERIALS AND ATOMS, vol. 73, no. 4, pages 561 - 569 * |
刘春峰;邓仰东;: "基于GPU的分块式光线追踪算法研究", 微电子学与计算机, no. 10, pages 37 - 41 * |
唐宇;于放;孙咏;王丹妮;: "自底向上构建高效BVH的研究", 计算机系统应用, no. 01, pages 231 - 235 * |
Also Published As
Publication number | Publication date |
---|---|
US20210390755A1 (en) | 2021-12-16 |
DE102021205758A1 (de) | 2021-12-16 |
US11282261B2 (en) | 2022-03-22 |
CN113781624B (zh) | 2023-10-03 |
US20220165017A1 (en) | 2022-05-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113781624B (zh) | 具有可选的世界空间变换的光线跟踪硬件加速 | |
CN113781626B (zh) | 遍历在射线追踪中使用的数据的技术 | |
CN113781625B (zh) | 适用于光线追踪的基于硬件的技术 | |
US7973790B2 (en) | Method for hybrid rasterization and raytracing with consistent programmable shading | |
CN113808245B (zh) | 用于遍历光线追踪加速结构的增强技术 | |
US11373358B2 (en) | Ray tracing hardware acceleration for supporting motion blur and moving/deforming geometry | |
CN113808241B (zh) | 共享顶点的射线追踪图元的硬件加速 | |
CN113822788B (zh) | 光线追踪硬件中对资源的早期释放 | |
US20230084570A1 (en) | Accelerating triangle visibility tests for real-time ray tracing | |
US20240009226A1 (en) | Techniques for traversing data employed in ray tracing | |
US20240087211A1 (en) | Generation and Traversal of Partial Acceleration Structures for Ray Tracing | |
CN117723266A (zh) | 提高光线-盒测试的效率 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |