CN113808241A - 共享顶点的射线追踪图元的硬件加速 - Google Patents

共享顶点的射线追踪图元的硬件加速 Download PDF

Info

Publication number
CN113808241A
CN113808241A CN202110260301.8A CN202110260301A CN113808241A CN 113808241 A CN113808241 A CN 113808241A CN 202110260301 A CN202110260301 A CN 202110260301A CN 113808241 A CN113808241 A CN 113808241A
Authority
CN
China
Prior art keywords
primitive
ray
triangle
vertex
primitives
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
CN202110260301.8A
Other languages
English (en)
Other versions
CN113808241B (zh
Inventor
G·穆特乐
J·伯吉斯
I·C·Y·孔
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 CN113808241A publication Critical patent/CN113808241A/zh
Application granted granted Critical
Publication of CN113808241B publication Critical patent/CN113808241B/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/005General purpose rendering architectures
    • 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
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/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/10Constructive solid geometry [CSG] using solid primitives, e.g. cylinders, cubes
    • 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/20Finite element generation, e.g. wire-frame surface description, tesselation
    • G06T17/205Re-meshing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/04Indexing scheme for image data processing or generation, in general involving 3D image data

Abstract

本发明公开了共享顶点的射线追踪图元的硬件加速,公开了适用于射线追踪硬件加速器的增强技术,用于遍历分层加速结构及其基础图元。例如,通过在射线图元相交测试期间对共享至少一个特征(例如,顶点或边缘)的图元进行分组处理来提高遍历速度。对图元进行分组用于射线相交测试可以减少处理(例如,图元顶点的投影和转换和/或确定边缘函数值),因为与一个图元中的共享特征相关的处理结果的至少一部分可以用于确定射线是否与另一个或更多个图元相交。在不复制硬件的情况下,处理共享边缘的三角形可以使射线/三角形相交测试中的三角形剔除速度翻倍。

Description

共享顶点的射线追踪图元的硬件加速
相关专利和申请的交叉引用
本申请涉及以下共同转让的美国专利和专利申请,其每一个的全部内容 通过引用并入本文:
●2014年12月8日提交的标题为“树数据结构的短堆栈遍历(Short StackTraversal of Tree Data Structures)”的美国申请号14/563,872;
●标题为“基于块的边界体积层次结构(Block-Based Bounding VolumeHierarchy)”美国专利号9,582,607;
●标题为“基于块的边界体积层次结构的相对编码(Relative Encoding For ABlock-Based Bounding Volume Hierarchy)”的美国专利号9,552,664;
●标题为“光束追踪(Beam Tracing)”的美国专利号9,569,559;
●标题为“基于多个本地坐标系的树数据结构(Tree Data Structures Based ona Plurality of Local Coordinate Systems)”的美国专利号 10,025,879;
●2015年6月11日提交的标题为“基于块的几何数据无损压缩(Block- BasedLossless Compression of Geometric Data)”的美国申请号14/737,343;
●标题为“在没有着色器干预的情况下在交叉点处的连续边界体积层次 结构遍历的方法(Method for Continued Bounding Volume Hierarchy Traversal onIntersection Without Shader Intervention)”的美国专利申请号16/101,066;
●标题为“对数据路径调度的高速缓存请求进行有效分组的方法 (Method forEfficient Grouping of Cache Requests for Datapath Scheduling)” 的美国专利申请号16/101,109;
●标题为“健壮、高效的多处理器-协处理器接口(A Robust,EfficientMultiprocessor-Coprocessor Interface)”的美国专利申请号16/101,247;
●标题为“树遍历的特定于查询的行为修改(Query-Specific BehavioralModification of Tree Traversal)”的美国专利申请号16/101,180;
●标题为“保守的水密射线三角形相交点(Conservative Watertight RayTriangle Intersection)”的美国专利申请号16/101,148;
●标题为“处理乱序的不透明和Alpha射线/图元相交点的方法(Method forHandling Out-of-Order Opaque and Alpha Ray/Primitive Intersections)”的美 国专利申请号16/101,196;
●标题为“硬件中树遍历机制的向前进度和可编程超时的方法(Method forForward Progress and Programmable Timeouts of Tree Traversal Mechanisms inHardware)”的美国专利申请号16/101,232;以及
●标题为“用于支持运动模糊和移动/变形几何的射线追踪硬件加速 (RayTracing Hardware Acceleration for Supporting Motion Blur and Moving/DeformingGeometry)”的美国专利申请号16/901,847。
技术领域
本技术涉及计算机图形学,并且更具体地涉及射线追踪器。更具体地, 该技术涉及计算机图形处理的硬件加速,包括但不限于射线追踪。本文中的 示例非限制性技术还涉及基于硬件的射线/图元(primitive)相交测试,该测 试有效地确定例如用于实时射线追踪的射线图元相交。更特别地,本文的示 例性非限制性技术涉及确定射线与共享至少一个特征(例如,顶点或边缘) 的多个图元之间的相交点(intersection)。更详细地,本文的示例非限制性技 术涉及一种改进的基于硬件的射线图元测试块,其确定共享边缘的三角形的 交点。
背景技术
在过去的30年中,实时计算机图形学取得了巨大的进步。随着1980年 代功能强大的图形处理单元(GPU)的发展,该图形处理单元提供了3D硬 件图形管线(pipeline),基于纹理映射的多边形图元实时响应用户输入来生 成3D图形显示变为可能。这种实时图形处理器是基于一种称为扫描转换光 栅化的技术构建的,该技术可以从单个点或角度确定可见性。使用这种方 法,可以从由几何图元(通常是诸如三角形之类的多边形)构成的表面建模 三维对象。扫描转换过程将图元多边形顶点建立并投影到视图平面上,并填 充图元边缘内部的点。参见例如Foley、Van Dam、Hughes等的《计算机图 形学:原理与实践》(第2版Addison-Wesley 1995年和第3版Addison- Wesley 2014年)。
长期以来,硬件一直用于确定每个多边形表面应如何着色和纹理贴图, 以及如何将着色的、纹理贴图的多边形表面栅格化以进行显示。典型的三维 场景通常由数百万个多边形构成。快速的现代GPU硬件可以实时响应用户 输入为每个显示帧(每1/30或1/60秒)有效地处理数百万个图形图元。所 得的图形显示已用于各种实时图形用户界面中,包括但不限于增强现实、虚 拟现实、视频游戏和医学成像。但是传统上,这种交互式图形硬件无法准确 地建模以及描绘反射和阴影。
存在另一种图形技术,其确实执行了对于反射和阴影的物理上现实的可 见性确定。这称为“射线追踪”。射线追踪是指将射线投射到场景中,并确 定该射线是否以及在何处与场景的几何形状相交。此基本射线追踪可见性测 试是计算机图形学中各种渲染算法和技术的基础基本要素。射线追踪是在 1960年代末开发的,并在1980年代得到了改进。参见例如Appel,“固体着 色机渲染的某些技术”(SJCC 1968),第27-45页;Whitted,“改进的阴影显 示照明模型”,ACM第23卷第6期第343-349页通讯(1980年6月);以及 Kajiya,“渲染方程式”,计算机图形学(SIGGRAPH 1986Proceedings,第 20卷第143-150页)。从那时起,射线追踪已用于非实时图形应用程序,例 如设计和电影制作。任何看过《寻找多莉(FindingDory)》(2016年)或其 他皮克斯动画电影的人,都可以看到射线追踪方法对计算机图形学的效果, 即逼真的阴影和反射。参见例如Hery等,“走向皮克斯的双向路径追踪” (2016)。
通常,射线追踪是一种渲染方法,其中射线用于确定场景中各种元素的 可见性。射线追踪是在各种渲染算法中使用的图元,包括例如路径追踪和都 市光传输。在示例算法中,射线追踪通过对穿过场景的光传输进行建模来模 拟光的物理特性,从而使用射线光学计算所有全局效果(包括例如来自发光 表面的反射)。在射线追踪的这种使用中,随着成百上千的光射线中的每一 个通过三维场景从潜在的多个光源传播到视点,可以尝试对其进行追踪。通 常,通过场景相对于眼睛追踪此类射线,并针对场景中所有几何形状的数据 库进行测试。可以从光线向前到眼睛追踪射线,或者从眼睛向后到光线追踪 射线,或者可以追踪射线以查看从虚拟相机开始并从眼睛开始的路径是否具 有清晰的视线。该测试可以确定最近的相交点(以便确定从眼睛可见的东 西),或者追踪从对象表面到光源的射线以确定是否有阻止光线向空间中该 点的传输的任何干扰物。因为射线与现实中光的射线相似,所以它们提供了 许多现实效果,而这些效果是使用过去三十年来实现的基于光栅的实时3D 图形技术无法实现的。因为来自场景中每个光源的每个照明射线在穿过场景 中的每个对象时都经过评估,所以生成的图像看起来就像是在现实中拍摄的 一样。因此,这些射线追踪方法长期以来一直用于专业的图形应用程序(例 如,设计和电影)中,在基于光栅的渲染中占主导地位。
射线追踪可以用于确定沿射线是否可见(例如,测试几何图元上的阴影 点与光源上的点之间的遮挡物(occluder)),还可以用于评估反射(例如, 其可能涉及执行遍历以确定沿视线的最近可见表面,以便在流处理器上运行 的软件可以评估与所击中的物体相对应的材质着色功能-反过来可以根据相 交的对象的材质属性向场景中发射一条或更多条附加光线),以确定沿射线 返回眼睛的光线。在经典的Whitted式射线追踪中,射线是从视点通过像素 网格射入场景的,但是其他路径遍历也是可能的。通常,对于每条射线,找 到最接近的对象。然后,然后,通过从该相交点向场景中的每个光源发射射 线并寻找是否有任何对象在其间,来确定该相交点是照亮的还是处于阴影 中。不透明的对象会阻挡光线,而透明的对象会减弱光线。可以从相交点生 成其他射线。例如,如果相交表面是发亮的或镜面的,则在反射方向上产生 射线。射线可以接受相交的第一对象的颜色,然后对它的相交点进行阴影测 试。递归重复此反射过程,直到达到递归限制或后续反弹的潜在贡献降至阈 值以下为止。射线也可以在透明固体对象的折射方向上生成,然后再次进行 递归评估。因此,射线追踪技术使图形系统能够形成物理上正确的反射和阴 影,而不受扫描转换技术的限制和伪影的影响。
射线追踪已与光栅化和z缓冲一起用于采样场景几何形状或作为其替 代。它也可以用作环境贴图和阴影纹理的替代方法(或与之结合使用),以 产生比通过纹理化技术或其他光栅“黑客(hack)”所能实现的更为逼真的 反射、折射和阴影效果。射线追踪还可以用作基本图元,以在基于物理的渲 染算法(例如,路径追踪、光子贴图、都市(Metropolis)光传输和其他光 传输算法)中精确模拟光传输。
射线追踪的主要挑战通常是速度。射线追踪要求图形系统为每一帧计算 和分析撞击在构成场景的每个表面上(并可能被其反射)的数百万条光射线 中的每一条。过去,如此庞大的计算复杂性无法实时执行。
现代GPU 3D图形管线如此快地渲染着色的、纹理贴图的表面的原因之 一是它们有效地使用了一致性。在传统的扫描转换中,假定所有内容都可以 通过公共图像平面中的公共窗口查看并向下投影到单个优势点。每个三角形 或其他图元通过图形管线发送,并覆盖一定数量的像素。可以为从该三角形 渲染的所有像素共享所有相关计算。对应于穿过窗口的相干视线的像素的矩 形块因此可以对应于在同一流式处理器中以锁步方式运行的线程组。假定落 在三角形边缘之间的所有像素都是运行相同着色器并从相同纹理中提取相邻 纹理像素(texel)组的相同材料。相反,在射线追踪中,射线可能在公共点 (光源或虚拟相机镜头)处开始或结束,但是随着它们在整个场景中传播并 与不同的材料交互,它们会迅速发散。例如,每条射线执行搜索以找到最接 近的对象。可以执行结果的一些高速缓存和共享,但是由于每条射线都可能 撞击不同的对象,GPU传统上与纹理贴图、着色三角形一起利用的相关的 一致性不存在(例如,不存在用于射线跟踪的公共优势点、窗口和图像平面)。与其他图形方法相比,这使射线追踪在计算上更具挑战性,因此在交 互基础上执行起来要困难得多。
在2010年,NVIDIA利用NVIDIA GPU和其他高度并行架构的高度并 行性来开发OptiXTM射线追踪引擎。参见Parker等人的“OptiX:通用射线 追踪引擎”(ACM图形事务,第29卷,第4期,第66条,2010年7月)。 除了改进API(应用程序编程接口)外,OptiXTM提供的一项进步是改进了 用于查找射线与场景几何形状之间的相交点的加速数据结构。这种加速数据 结构通常是射线追踪遍历算法使用的空间或对象层次结构,以有效地搜索可 能与给定射线相交的图元。OptiXTM提供了许多不同的加速度结构类型,应 用程序可以从中选择。节点图中的每个加速结构可以是不同的类型,从而可 以将高质量的静态结构与动态更新的结构组合在一起。
OptiXTM可编程射线追踪管线提供了显着的进步,但是通常仍然无法独 自针对相对便宜的用于复杂3D场景的计算平台上的用户输入提供实时交互 响应。从那时起,NVIDIA一直在开发用于射线追踪的硬件加速能力。参见 例如,US9,582,607;US9,569,559;US20160070820;US20160070767;以及 以上引用的其他美国专利和专利申请。
对于大多数射线追踪器而言,基本任务是针对场景中的所有图元(在一 个实施例中通常为三角形)测试射线,并报告最接近的命中(根据沿射线测 得的距离)或仅报告第一(不一定最接近)命中,具体取决于用例。天真的 算法是O(n)蛮力搜索。但是,由于任意复杂度的3D场景中的大量图元, 因此对于射线追踪器而言,测试场景中的每个几何图元与给定射线的相交通 常是无效或不可行的。
然而,通过预处理场景几何形状并预先构建合适的加速数据结构,可能 将平均情况的复杂度降低到O(log n)。加速数据结构(例如,边界体积层 次结构或BVH)可以快速确定哪些边界体积可以忽略,哪些边界体积可以 包含相交的几何图元,并且哪些相交的几何图元对于可视化很重要,以及哪 些相交的几何图元对于可视化不重要。使用简单的体积(例如,盒子)包含 更复杂的对象可提供计算和存储器效率,有助于使射线追踪实时进行。
图1A-图1C示出了在包括几何网格20的边界体积的上下文中的射线追 踪相交测试。图1A显示了包括边界体积10和15的虚拟空间中的射线 102。为了确定射线102是否与网格20中的几何形状相交,可以直接针对射 线102测试每个几何图元(例如,三角形)。但是,为了加速过程(因为对 象可能包含成千上万的几何图元),首先针对边界体积10和15测试射线 102。如果射线102没有与边界体积相交,则它不与边界体积内的任何几何 形状相交,并且对于该射线而言,可以忽略边界体积内的所有几何形状。因 为在图1A中,射线102错过了边界体积10,所以不需要测试该边界体积内 的网格20的任何几何形状。虽然边界体积15被射线102相交,但是边界体 积15不包含任何几何形状,因此不需要进一步的测试。
另一方面,如果诸如图1B所示的射线104之类的射线与包含几何形状 的边界体积10相交,则该射线可能会或可能不会与边界体积内部的几何形 状相交,因此需要执行进一步的测试在几何形状本身上查找可能的相交点。 由于图1B和图1C中的射线104、106与包含几何形状的边界体积10相 交,因此需要执行进一步的测试以确定该边界体积内部的任何(以及哪一 个)图元是否与之相交。在图1B中,进一步测试与图元的相交会表明,即 使射线104通过边界体积10,它也不会与边界体积所包围的任何几何形状 相交(或者,如上所述,边界体积10可以进一步按体积细分,以便可以使 用边界体积相交测试来揭示射线不与任何几何形状相交,或更具体地,射线 可以与哪些几何图元相交。
图1C示出了射线与边界体积10相交并且包含射线306相交的几何形 状的情况。为了执行实时射线追踪,相交测试器测试相交的边界体积10内 的每个几何图元,以确定射线是否与该几何图元相交。
现代射线追踪器最常使用的加速数据结构是边界体积层次结构 (BVH),其包括嵌套的轴向对齐的边界盒(AABB)。BVH的叶节点包含 要测试相交的图元(例如,三角形)。BVH通常由图形或树结构数据表示形 式表示。在射线追踪中,当使用这样的加速数据结构时,找到射线的最接近 (或用于阴影,任何)相交点的时间通常是n个对象的O(log n)阶。例如,通常用于现代射线追踪加速数据结构的AABB边界体积层次结构 (BVH)通常具有O(logn)搜索行为。
BVH加速数据结构表示和/或引用对象或场景的3D模型,其方式将有 助于快速确定特定射线可能与对象的哪个部分相交,并快速拒绝射线不相交 的场景的大部分。BVH数据结构表示具有边界体积的场景或对象,并将边 界体积细分为越来越小的边界体积,这些边界体积终止于包含几何图元的叶 节点。边界体积是分层的,这意味着最上层将其下的层包围起来,该下层将 其下的层包围起来,依此类推。在一个实施例中,叶节点可以潜在地与边界 体积层次结构中的其他叶节点重叠。
NVIDIA的RTX平台包括射线追踪技术,该技术可为内容创作者和游 戏开发商带来实时的电影品质的渲染。请参阅 https://developer.nvidia.com/rtx/raytracing。在包括NVIDIA RT核心在内的许多 或大多实现方案中,图1A-图1C中所示的边界体积使用轴对齐的边界盒 (“AABB”),可以将其紧凑存储并轻松地进行射线相交测试。如果射线与几 何形状的边界盒相交,则也将测试基础几何形状。但是,如果射线没有与几 何形状的边界盒相交,则不需要测试该基础几何形状。如图1A-图1C所示, 创建了AABB的层次结构以提高单个AABB边界盒测试的剔除效果。这样可 以实现高效遍历并快速缩小感兴趣的几何形状。
鉴于通过提高处理速度或能够通过使用大量图元来增加场景复杂性来改 善实时射线追踪图形处理系统以渲染高质量图像的巨大潜力,进一步的工作 是可能的并且是期望的。特别地,非常需要加速测试射线或场景或对象的几 何图元之间的相交。
附图说明
图1A-图1C示出了示例简化的射线追踪测试,以确定射线是否穿过包 含几何形状的边界体积以及射线是否与边界体积内的几何形状相交。
图2示出了用于构造合适的边界体积层次结构的示例过程。
图3A和图3B显示了示例边界体积层次结构表示。
图4示出了示例非限制性射线追踪图形系统。
图5是示例非限制性射线追踪图形管线的流程图。
图6是示例非限制性基于硬件的射线追踪操作的流程图。
图7示出了包括树遍历单元(TTU)的简化示例非限制性遍历协处理 器。
图8示出了根据本公开的示例性实施例的用于执行射线图元相交测试的 射线图元测试单元。
图9A-图9C示出了被射线相交的一对相邻三角形的示例。
图10示出了根据本公开的示例性实施例的用于执行射线三角相交测试 的硬件射线三角测试单元。
图11和图12是示例TTU处理的流程图。
图13示出了共享边缘的三角形对的配置。
图14示出了根据本公开的实施例的在射线三角形相交单元中的第一三 角形到车道的概念性旋转和映射。
图15示出了根据本公开的实施例的在射线三角形相交单元中的第二三 角形到车道的概念上的旋转和映射。
图16示出了描述顶点R0、R1和R2以及顶点T0、T1和T2之间的映 射的伪数学。
图17示出了描述顶点R0、R1和R3以及顶点T0、T1和T2之间的映 射的伪数学。
图18A和图18B示出了更详细的射线追踪管线。
图19是生成图像的示例过程的流程图。
具体实施方式
尽管BVH加速数据结构允许大部分场景中射线不会相交而被快速拒 绝,但是射线追踪系统仍需要测试在相交的边界体积叶节点中识别的每个几 何图元以与射线相交。取决于场景和/或对象的复杂性,需要测试的几何图 元的数量可能很大。为了提高针对相交点测试几何图元的速度,可以复制硬 件以并行测试多个几何图元。虽然复制硬件可以减少处理几何图元所需的时 间,但要付出半导体面积和功率成本的代价。
示例性非限制性技术增加了可被处理的几何图元的数量,而没有硬件复 杂度的成比例增加。这是通过共享测试具有至少一个公共顶点的多个几何图 元的处理结果来实现的。因为至少一个顶点被多个几何图元共享,所以与至 少一个共享顶点有关的处理结果(例如,投影和/或转换)可以针对具有至 少一个公共顶点的多个几何图元共享,并且不需要为每个图元重复或复制。 为了并行处附加图元,非限制性技术使用共享结果/计算的并行射线/图元测 试硬件,从而无需复制射线/图元测试硬件的每个组件,并且与复制所有硬件组件的“蛮力”方法相比,并行硬件的总体复杂度减少了。
因此,本文的技术因此提供了基于硬件的功能,该功能有效地加速了测 试图元与射线的相交的速度。在一个实施例中,将共享至少一个顶点的多个 图元分组以进行射线相交测试以加速相交测试。将图元分组以进行射线相交 测试可以减少处理(例如,图元顶点的投影和/或转换),因为与一个图元相 关的至少一部分处理结果可以用于测试其他图元。
在一个示例非限制性实施例中,配置为测试图元与射线相交的硬件被扩 展以处理共享至少一个顶点的一个或更多个附加图元的相交测试。用最小的 硬件扩展硬件,以使用用于与射线相交的来自一个图元的硬件测试的处理结 果的至少一部分,以帮助确定射线与另一个相邻图元的相交。在扩展硬件以 处理共享公共边缘的一对图元(例如,三角形)的情况下,射线三角形测试 硬件通过利用使用最小硬件的跨多个三角形的公共顶点的计算来提高射线追 踪应用程序的三角形剔除性能。本技术的示例可以智能地增加(例如,加倍)剔除三角形相交缺失的速率。先前的解决方案以较低的吞吐率或所需的 硬件加倍/复制来执行相同的工作。总体示例实施例提供每单位面积更好的 性能。
示例性非限制性技术能够在不按比例增加硬件的情况下,增加每单位时 间或并行可处理的几何图元的数量。
建立边界体积层次结构以进行更有效的相交测试
如上所述,通过使用加速数据结构使射线对象相交测试更加有效。如上 所述,加速数据结构包括边界体积的层次结构(边界体积层次结构或 BVH),该层次结构递归地封装越来越小的边界体积细分。最大的容积的 (volumetric)边界体积可以称为“根节点”。这种边界体积的层次结构 (“叶节点”)的最小细分包含条目。这些条目可以是定义对象表面的图元 (例如,三角形之类的多边形)。或者,条目可能是包含该条目存在的世界 的全新级别的球体,因为它没有被添加到BVH中(想象“黑衣人”中猫的 项圈魅力,其中包含了整个微型银河系在里面)。如果该条目包括图元,则 遍历协处理器在到达相交的叶节点时会针对与叶节点相关联的图元测试射 线,以确定射线相交的对象表面以及沿射线可见的对象表面。
建立BVH可以分为两个部分:静态和动态。在许多应用程序中,对复 杂场景进行预处理,并且基于场景的静态几何形状创建BVH。然后,使用 包括动态地创建和操纵的移动对象的交互式图形生成,BVH的另一部分 (或附加链接的一个或更多个BVH)可以由驱动器或在实时交互式图形系 统上运行的其他软件实时构建(例如,在每个帧中)。BVH的构建不需要硬 件加速(尽管在某些非限制性实施例中可以),但是可以使用运行在SM 132 和/或CPU120和/或其他开发系统上的高度优化的软件例程来实现,例如在 应用程序开发期间。
BVH加速结构构建的第一阶段获取参考几何形状的边界盒(图2, 204)。这是通过为对象中的每个几何图元执行边界盒过程来完成的,该过程 为其输入图元返回保守的轴对齐边界盒(AABB)。与定向边界盒(OBB 的)、边界球或其他方法相比,将边界盒与几何形状的相关坐标系的轴对 齐,可以提供实时几何操作(例如,相交测试和坐标转换)的提高的效率。 然而,本领域技术人员将理解,本文的示例性非限制性方法也可以应用于更 昂贵的边界构建体,例如OBB、边界球和其他边界体积技术。
已经细分的边界体积(其确实包括场景中的几何形状的至少一部分)可 以进一步递归细分,就像苏斯(Sususs)博士的《戴帽子的猫回来了(The Cat In The Hat ComesBack)》(1958)的帽子中出现的每一系列越来越少的 猫一样。递归细分的数量和配置将取决于要建模的3D对象的复杂性和配置 以及其他因素,例如期望的分辨率、对象与视点的距离等。一个示例细分方 案是所谓的8-ary细分或“八叉树”,其中每个体积都被细分为八个较小的统 一大小的体积,但是已知许多其他空间层次结构和细分方案,例如二叉树、 四-ary树(four-ary tree)、k-d树、二进制空间分区(BSP)树和边界体积层 次结构(BVH)树。参见例如,USP 9,582,607。
在细分的某个级别(其对于BVH的不同部分可以是不同的级别), BVH构造过程会遇到构成要建模的封装对象的几何形状。用树的类比,连 续的体积细分是树干、树枝(branch)、大树枝(bough)和小树枝(twig), 并且几何形状最终显示在树的最顶端,即叶子。在这一点上,例如本文的非 限制性实施例的BVH构建过程在此阶段执行优化以使用启发式或其他分析 技术(其在一些实施例中可能包括人工智能和/或神经网络)以发现那些叶 子节点与它们所包含的几何形状相比目前的拟合度较差(图2,206)。
继续该过程,直到所有包含几何形状的边界体积被充分细分以为每个边 界盒提供合理数量的几何图元为止(图2,210)。使用BVH的实时射线追 踪器将比较每个图元的顶点的空间xyz坐标与射线的xyz坐标,以确定射线 和图元所定义的曲面是否占据相同的空间,从而确定射线图元的相交点。射 线图元相交测试可能需要大量计算,因为可能要测试许多三角形。在许多情 况下,进一步按体积细分可能会更有效,从而将任何“叶节点”中的图元数 量限制为16个或更少。
将包括压缩小树(treelet)的所得压缩树写出到存储器中的数据结构 中,以供以后由图形处理硬件/软件使用,在例如包括实时射线追踪的实时 图形处理期间(图2,212)。
图3A和图3B显示了3D场景的递归细分边界体积(图3A)和射线追 踪器可以访问并用于硬件加速操作的相应树数据结构(图3B)。树数据结构 可以存储在存储器中,并且可以基于查询按需检索。
边界体积的划分可以在分层树数据结构中表示,其中由树的父节点表示 大边界体积,并且由父节点包含的数的子节点表示较小的边界体积。最小边 界体积表示为树中的叶节点,并标识这些最小边界体积中包含的一个或更多 个几何图元。
树数据结构包括以层次结构布置的多个节点。树结构的根节点N1对应 于包围所有图元O1-O8的边界体积N1。根节点N1可以标识边界体积N1的 顶点和根节点的子节点。
在图3A中,将边界体积N1细分为边界体积N2和N3。图3B的树结 构的子节点N2和N3对应于并表示图3A所示的边界体积N2和N3。树数 据结构中的子节点N2和N3标识空间中各个边界体积N2和N3的顶点。在 该特定示例中,边界体积N2和N3中的每一个被进一步细分。边界体积N2 被细分为包含的边界体积N4和N5。边界体积N3被细分为包含的边界体积 N6和N7。边界体积N7包括两个边界体积N8和N9。边界体积N8包括三 角形O7和O8,边界体积N9包括叶边界体积N10和N11作为其子边界体 积。叶边界体积N10包括图元范围(例如,三角形范围)O10,并且叶边界 体积N11包括条目范围O9。图3B树结构的各个子节点N4、N5、N6、 N8、N10和N11对应于并表示图3A在空间中的边界体积N4、N5、N6、 N8、N10和N11。
在此特定示例中的图3B树只有三到六层深,因此体积N4、N5、N6、 N8、N10和N11构成“叶节点”,即树中没有子节点的节点。图3A显示叶 节点边界体积N4、N6和N8各自包含场景中几何形状的两个三角形。例 如,体积细分N4包含三角形O1和O2;体积细分N6包含试验O5和O6; 并且体积细分N8包含三角形O7和O8。图3A还示出了叶节点边界体积N5 包含单个圆柱体O3,该圆柱体O3不能很好地拟合虚线所示的AABB边界 体积N5。因此,在本文的示例性非限制性实施例中,代替将较大的AABB 边界体积N5用于射线边界体积相交测试,TTU138相对于多个较小的 AABB边界体积测试射线,该边界体积被布置、定位、塑形和定向为更紧密 地拟合圆柱体O3。
图3B中所示的树结构通过将这些叶子节点N4、N5、N6和N7与场景 几何形状的图元O1-O8中的适当叶子节点相关联来表示这些叶子节点N4、 N5、N6和N7。为了访问该场景几何形状,TTU 138遍历图3B的树数据结 构到叶节点。通常,树的不同部分可以并且将具有不同的深度,并且包含不 同数量的图元。与不包含几何形状的体积细分相关联的叶节点无需在树数据 结构中明确表示(即,树被“修剪”)。
根据一些实施例,以N7为根的子树可以表示在边界体积或与对应于节 点N1-N3的边界体积不同的坐标空间中定义的BVH的集合。当边界体积 N7与它的父边界体积N3在不同的坐标空间中时,提供遍历以N7为根的子 树所必需的射线转换的实例节点N7',可以将树的其余部分连接到以N7为 根的子树。实例节点N7'通过定义从N1-N3的坐标空间(例如,世界空间) 到N7等坐标空间(例如,对象空间)的转换,将边界体积或对应于节点 N1-N3的BVH与边界体积或对应于节点N7等的BVH连接起来。
如上所述构造的加速结构可以通过在常规通用计算机上运行的基于软件 的图形管线处理而有利地使用。然而,当前公开的非限制性实施例在基于硬 件的图形处理单元的上下文中有利地实现上述技术,所述基于硬件的图形处 理单元包括诸如一个或更多个流式多处理器(“SM”)和一个或更多个遍历 协同处理器或“树遍历单元”(“TTU”)(3D图形处理管线的一个或一组流 式多处理器SM的子单元)的高性能处理器。以下描述了诸如包括TTU138 的系统的整体结构和操作,该TTU 138加速了支持交互式射线追踪的某些过 程,该交互式射线追踪包括射线边界体积相交测试、射线图元相交测试以及 用于实时射线追踪和其他应用程序的射线“实例”转换。
示例系统框图
图4示出了示例实时射线交互式追踪图形系统100,该示例实时射线交 互式追踪图形系统100用于使用包括如上所述构造的加速数据结构的场景或 一个或更多个对象的三维(3D)数据来生成图像。
系统100包括输入设备110、一个或更多个处理器120、一个或更多个 图形处理单元(GPU)130、存储器140和一个或更多个显示器150。图4 所示的系统可以采用任何形式,包括但不限于个人计算机、智能手机或其他 智能设备、视频游戏系统、可穿戴虚拟或增强现实系统、基于云的计算系 统、车载图形系统、片上系统(SoC)等
处理器120可以是多核中央处理单元(CPU),其可操作以对输入设备 11执行实时交互响应,其输出包括用于在显示器150上显示的图像。显示 器150可以是任何种类的显示器,例如固定显示器、头戴式显示器(例如, 显示器眼镜或护目镜)、其他类型的可穿戴显示器、手持式显示器、车载显 示器等。例如,处理器120可以基于从输入设备110(例如,操纵杆(joystick)、惯性传感器、环境光传感器等)接收的输入来执行应用程序, 并指示GPU 130生成表示应用程序进度的图像以在显示器150上显示。
基于处理器120上应用程序的执行,处理器可以发布指令以供GPU 130 使用存储在存储器140中的3D数据生成图像。GPU 130包括用于加速实时 图像生成的专用硬件。例如,由于GPU的执行重复性和高度并行的专业计 算任务(例如,多边形扫描转换)的能力比传统软件驱动的CPU快得多, 因此GPU 130能够实时处理数千或数百万个图形图元(多边形)的信息。 例如,与处理器120不同,处理器120可以具有多个核心,其中多个核心具 有一次可以处理几个软件线程的高速缓存存储器,GPU 130可以包括成百上 千个正在并行运行的处理核心或“流式多处理器”(SM)132。
在一个示例实施例中,GPU 130包括多个可编程高性能处理器,其可以 被称为“流式多处理器”(“SM”)132,以及包括图形图元引擎134和光栅 引擎136的基于硬件的图形管线。GPU 130的这些组件被配置为使用称为 “扫描转换栅格化”的技术执行实时图像渲染,以在二维显示器150上显示 三维场景。在光栅化中,3D场景的几何建造块(例如,点、线、三角形、 四边形、网格等)被映射到显示器的像素(通常经由帧缓冲存储器)。
GPU 130将3D模型的几何建造块(即,诸如三角形之类的多边形图 元)转换为2D图像的像素,并为每个像素指派初始颜色值。图形管线可以 通过定义或调整像素的颜色值来向图像的一部分施加着色、透明度、纹理和 /或颜色效果。可以对最终像素值进行抗锯齿(anti-aliased)、滤波并提供给 显示器150以进行显示。多年来,许多软件和硬件的进步已经使用光栅化技 术在一个或更多个显示器150上以实时图形所需的帧速率(即,每秒30至60帧)以高显示分辨率(例如,4096x 2160像素或更高)来改善主观图像 质量。
为了使GPU 130能够以有效的方式实时执行射线追踪,GPU提供了一 个或更多个耦合到一个或更多个SM 132的“TTU”138。TTU 138包括被配 置为执行(或加速)射线追踪算法中常用的操作的硬件组件。TTU 138的目 标是将射线追踪中使用的操作加速到一定程度,以使射线追踪的能力带给实 时图形应用程序(例如,游戏),从而实现高质量的阴影、反射和全局照 明。由TTU 138产生的结果可以与在GPU 130中执行的其他与图形有关的 操作一起使用或作为其替代。
更具体地,SM 132和TTU 138可以协作以将射线投射到3D模型中, 并确定该射线是否以及在何处与模型的几何形状相交。射线追踪直接模拟在 虚拟环境或场景中传播的光线。射线相交的结果以及表面纹理、观察方向和 /或照明条件用于确定像素颜色值。由与TTU 138一起工作的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之间的挤压体积(我们称为“光束(beam)”)代替了射线。因 此,尽管TTU 138特别适于加速与射线追踪有关的任务,但是它也可以用于 执行除射线追踪之外的任务。
因此,TTU 138自主地针对各种边界体积对每个射线执行测试,并且可 以剔除不与该射线相交的任何边界体积。遍历协处理器从约束场景中所有内 容的根节点开始,针对较小(可能重叠)的子边界体积测试每个射线,这些 子边界体积又依次约束BVH的后代分支。射线跟随射线指向其他节点的边 界体积的子指针,直到到达BVH的叶子或终端节点(体积)为止。
一旦TTU 138遍历加速数据结构以到达与射线相交并包含几何图元的终 端或“叶”节点(其可以由一个或更多个边界体表示),则其执行加速的射线 图元相交测试,以确定射线是否与该图元相交(并因此与该图元定义的对象 表面相交)。射线图元测试可以提供有关射线相交的图元的其他信息,这些信 息可用于确定着色和可视化所需的表面的材料属性。通过加速数据结构的递 归遍历使遍历协处理器能够发现射线相交的所有对象图元,或者发现射线相 交的最接近(从视点的角度来看)的图元(在某些情况下,这是沿射线的视点 唯一可见的图元)。参见例如Lefrancois等人的NVIDIA Vulkan射线追踪教程,2019年12月,https://developer.nvidia.com/rtx/raytracing/vkray。
如上所述,TTU 138还加速了从世界空间到对象空间的每条射线的转 换,以获得图元越来越细的边界盒封装,并减少了这些图元在场景中的重 复。如上所述,在场景中以不同的位置、方位和比例多次复制的对象可以在 场景中表示为实例节点,这些实例节点将世界空间BVH中的边界盒和叶节 点与可以应用于世界空间射线的转换相关联以将其转换为对象坐标空间,以 及指向对象空间BVH的指针。这避免了在世界空间中多次复制对象空间 BVH数据,从而节省了存储器和相关联的存储器访问。实例转换通过将射 线转换为对象空间而不是要求要将几何形状或边界体积层次结构转换为世界(射线)空间来提高效率,并且还与图形处理执行以可视化图元的其他常规 光栅化过程兼容。
示例射线追踪过程
图5示出了可以由SM 132执行并且由TTU 138加速的示例性射线追踪 着色管线500。射线追踪着色管线500由SM 132调用射线生成510并且向 TTU138发出相应的射线追踪请求来开始。射线追踪请求识别投射到场景中 的单个射线,并要求TTU 138搜索具有SM132还指定的加速数据结构的相 交点。TTU 138遍历(图5的框520)加速数据结构以确定射线与体积细分 以及加速数据结构所表示的相关联的三角形之间的相交点或潜在相交点。可 以通过在加速数据结构中找到被射线相交的边界体积来识别潜在的相交点。 非相交边界体积的后代不需要检查。
对于相交的边界体积内的三角形,TTU 138射线图元测试块720执行相 交530过程以确定射线是否与图元相交。如以下将更详细讨论的,射线图元 测试块720可执行与确定射线是否与共享至少一个顶点或边缘的多个图元相 交有关的至少一部分操作。例如,射线图元测试块720可以包括被配置为识 别共享特征(例如,顶点或边缘)的图元的电路和被配置为针对共享该特征 的两个或更多个图元并行地执行投影和转换操作的并行电路。
TTU 138将相交信息返回给SM 132,SM 132可以响应于相交确定执行 “任何命中”着色操作540。例如,SM 132可以执行(或让其他硬件执行) 相交的图元的纹理查找,并基于适当的纹理像素值决定如何为可视化射线的 像素着色。由于TTU 138可以以任意顺序返回场景中具有不同几何形状的多 个相交点,因此SM 132追踪这些结果。
备选地,可以进一步处理TTU 138确定被相交的图元,以确定550是 否应将其着色为未命中560或最接近的命中570。SM 132可以例如指示 TTU 138报告在指定的几何形状中最接近的命中,或者它可以指示TTU报 告在指定的几何形状中的所有命中。
图6是概述了TTU 138与一个或更多个SM 132协同执行的上述射线追 踪操作的示例的流程图。图6操作是由TTU 138和其与SM 132的交互协作 执行的。TTU 138可因此从SM132接收射线的标识并且遍历状态,该遍历 状态枚举该射线必须遍历的一个或更多个BVH中的一个或更多个节点。 TTU 138确定射线与BVH数据结构的哪些边界体积(“射线补全(ray- complet)”测试612)相交。TTU 138随后还可以确定射线是否与相交的边 界体积中的一个或更多个图元相交以及与哪些三角形相交了(“射线图元测 试”620)或SM 132也可以在软件中执行此测试,如果TTU自身执行起来 很复杂的话。在示例性非限制性实施例中,补全指定边界体积层次结构的根 或内部节点(即,体积),其具有作为其他补全或每个补全单一类型的叶节 点的子代。
首先,TTU 138检查射线的遍历状态。如果TTU 138为射线保持的堆 栈是空的,则遍历完成。如果堆栈顶部上有条目,则遍历协处理器138向存 储子系统发出请求以检索该节点。然后,遍历协处理器138执行边界盒测试 612以确定BVH数据结构的边界体积是否被SM 132指定的特定射线相交 (步骤612、614)。如果边界盒测试确定边界体积未与射线相交(步骤614 中为“否”),则无需执行任何其他可视化测试,并且TTU 138可以将此结果 返回给发出请求的SM 132。这是因为如果射线未命中边界体积(如图1A中 的边界体积10所示),那么射线将错过被测试的边界体积内的所有其他较小 的边界体积以及边界体积包含的任何图元。
如果由TTU 138执行的边界盒测试揭示边界体积被射线相交(步骤614 中为“是”),则TTU确定是否可以将边界体积细分为较小的边界体积(步 骤618)。在一个示例实施例中,TTU 138本身不一定执行任何细分。而是, BVH中的每个节点都有一个或更多个子代(其中每个子代是BVH中的叶子 或分支)。对于每个子代,都有一个或更多个边界盒和指向分支或叶节点的 指针。当射线使用TTU 138处理节点时,它正在针对该节点的子代的边界体 积进行自我测试。射线只将那些命中代表性边界体积的分支或叶子的堆栈条 目推入其堆栈。在示例实施例中,当射线提取节点时,它不会针对节点的边 界体积进行测试,而是针对节点的子代的边界体积进行测试。TTU 138将其 边界体积被射线命中的节点按由射线配置确定的顺序推入射线的遍历堆栈 上。例如,可以按节点在存储器中出现的顺序,或按它们沿着射线的长度出 现的顺序或其他某种顺序将节点推入遍历堆栈。如果存在边界体积的进一步 细分(步骤618中为“是”),则访问边界体积的那些进一步细分,并且对每 个所得的细分边界体积执行边界盒测试,以确定哪些细分边界体积被射线相 交以及哪些细分边界体积不被射线相交。在该递归过程中,一些边界体积可 以由测试614消除,而其他边界体积可以导致通过TTU 138递归地应用步骤 612-618来测试更进一步的细分的相交。
一旦TTU 138确定由射线相交的边界体积是叶节点(步骤518中为 “否”),则TTU138和/或SM 132执行图元(例如,三角形)相交测试620 以确定射线是否与相交的边界体积中的图元相交,并且射线与哪些图元相 交。因此,TTU 138执行相交的后代分支节点的深度优先遍历,直到到达叶 节点为止。TTU 138处理叶节点。如果叶节点是图元范围,则TTU 138或 SM 132将它们相对于射线进行测试。如果叶节点是实例节点,则TTU 138 或SM 132应用实例转换。如果叶节点是条目范围,则TTU 138将它们返回 给请求的SM 132。在示例性非限制性实施例中,SM 132可以命令TTU 138 执行不同种类的射线图元相交测试并根据来自应用程序(或运行该应用程序 的软件堆栈)且由SM中继到TTU的操作来报告不同的结果。例如,SM 132可以命令TTU 138报告相交测试揭示的最近的可见图元,或者报告射线 相交的所有图元,而不管它们是否是最近的可见图元。SM 132可以将这些 不同的结果用于不同种类的可视化。或者一旦TTU 138已经报告了射线补全 测试结果,SM 132就可以自己执行射线图元相交测试。一旦TTU 138处理 完叶节点后,可能会有其他分支节点(更早地推入射线的堆栈上)进行测 试。
示例非限制性TTU 138硬件实现
图7示出了TTU 138的示例简化框图,该TTU 138包括被配置为执行 如上所述的加速遍历操作的硬件。在一些实施例中,TTU 138可以使用短堆 栈遍历与支持的叶节点图元的相交测试以及alpha图元和不支持的叶节点图 元(条目)的中间遍历返回来执行边界体积层次结构的深度优先遍历。 TTU 138包括确定射线是否与边界体积相交的专用硬件,以及确定射线是否 与树数据结构的图元相交的专用硬件。
更详细地,TTU 138包括相交管理块722、射线管理块730和堆栈管理 块740。这些块中的每个(以及图7中的所有其他块)可以构成由逻辑、 门、寄存器、硬件嵌入式查找表或其他组合逻辑等实现的专用硬件。
射线管理块730负责管理关于SM 132向射线管理块指定的射线的信息 并执行关于该射线的操作。堆栈管理块740与遍历逻辑712结合工作以管理 关于BVH加速数据结构的遍历的信息并执行与遍历BVH加速数据结构有 关的操作。遍历逻辑712由射线补全测试块710的结果指导,该射线补全测 试块710根据需要使用实例转换来测试由射线管理块730指示的射线与由 BVH表示的体积细分之间的相交点。射线补全测试块710经由作为TTU 138的一部分的L0补全高速缓存752从存储器140检索关于BVH的附加信 息。射线补全测试块710的结果通知遍历逻辑712关于是否需要进一步递归 遍历。堆栈管理块740维护堆栈以在遍历逻辑712从BVH的一个级别遍历 到另一级别时跟踪状态信息,其中随着遍历逻辑遍历更深的BVH,堆栈管 理块740将条目推入对堆栈,以及随着遍历逻辑遍历在BVH中向上遍历,堆栈管理块740将条目从堆栈中的弹出来。堆栈管理块740能够在SM请求 的任何时间向请求SM 132提供状态信息(例如,中间或最终结果)。
相交管理块722按需使用实例转换来管理关于射线和图元之间的相交点 的信息并执行关于它们的操作。射线图元测试块720根据需要经由作为TTU 138的一部分的L0图元高速缓存754从存储器140中检索关于几何形状的 信息。相交管理块722由射线图元测试以及转换块720执行的相交测试结果 通知。因此,射线图元测试和转换块720将相交结果提供给相交管理块 722,该相交管理块722向请求SM 132报告几何形状命中和相交。
堆栈管理单元740检查遍历状态以确定需要检索什么类型的数据以及哪 个数据路径(补全或原始)将消耗它。在包括一个或更多个射线补全测试块 710和一个或更多个遍历逻辑块712的TTU 138的射线补全测试路径中确定 边界体积的相交点。补全指定边界体积的根节点或内部节点。因此,补全可 以为射线补全测试定义一个或更多个边界体积。在本文的示例实施例中,补 全可以定义多个“子代”边界体积(无论它们是否表示叶节点),这些边界 体积不一定都具有后代,但是TTU将针对射线边界体积相交对其进行并行 测试,以确定是否需要测试与多个边界体积相关联的几何图元的相交。
TTU 138的射线补全测试路径识别射线与哪些边界体积相交。与射线相 交的边界体积需要进一步处理,以确定与相交的边界体积相关联的图元是否 相交。在包括一个或更多个射线图元测试和转换块720以及一个或更多个相 交管理块722的射线图元测试路径中确定图元的相交。
TTU 138从一个或更多个SM 132接收查询以执行树遍历操作。该查询 可以请求射线是否与边界体积和/或BVH数据结构中的图元相交。查询可以 识别射线(例如,射线的原点、方向和长度)以及BVH数据结构和遍历状 态(短堆栈),其包括一个或更多个条目,该条目引用该射线要访问的一个 或更多个边界体积层次结构中的节点。该查询还可以包括在遍历期间射线如 何处理特定类型的相交的信息。射线信息可以被存储在射线管理块730中。 可以基于射线图元测试的结果来更新所存储的射线信息(例如,射线长 度)。
TTU 138可以请求从TTU 138外部的存储器中检索查询中识别的BVH 数据结构。BVH数据结构的检索部分可以高速缓存在TTU 138内的零级 (L0)高速缓存750中,因此该信息可用于其他时间相关的TTU操作,从 而减少了存储器140的访问。射线补全测试所需的BVH数据结构的部分可 被存储在L0补全高速缓存752中,而射线图元测试所需的BVH数据结构 的部分可被存储在L0图元高速缓存754中。
当请求的遍历步骤所需的补全信息在补全高速缓存752中可用后,射线 补全测试块710确定被射线相交的边界体积。在执行此测试时,可以将射线 从边界体积层次结构的坐标空间转换为相对于补全定义的坐标空间。针对与 补全的子节点相关联的边界盒测试射线。在示例性非限制性实施例中,不针 对补全的自身边界盒测试射线,因为(1)TTU 138先前在测试引用该补全 的父边界盒子代时针对类似的边界盒对射线进行了测试,并且(2)补全边 界盒的目的是定义局部坐标系,其中子边界盒可以以压缩形式表示。如果射 线与任何子边界盒相交,则将结果推入遍历逻辑,以确定将相应的子指针推 入遍历堆栈的顺序(进一步的测试可能需要遍历逻辑712向下遍历到BVH 的下一个级别)。递归地重复这些步骤,直到遇到BVH的相交的节点为止。
射线补全测试块710可以向遍历逻辑712提供射线补全相交。使用射线 补全测试的结果,遍历逻辑712创建要被推送到堆栈管理块740的堆栈条 目。堆栈条目可以指示需要通过射线补全测试块710进一步测试射线相交的 内部节点(即,包括一个或更多个子节点的节点)和/或需要由射线图元测 试和转换块720测试光射线相交的相交叶节点中识别的三角形。射线补全测 试块710可以在堆栈中识别的内部节点上重复遍历,以确定射线相交的 BVH中的所有叶节点。在示例性非限制性实施例中,射线补全测试块710 执行的精确测试将由模式位、射线操作(参见下文)和命中剔除来确定,并 且TTU 138可以将中间以及最终结果返回至SM 132。
射线图元相交测试
再次参考图7,TTU 138还具有加速相交测试的能力,该相交测试确定 射线是否与特定几何形状或图元相交。对于某些情况,几何形状足够复杂 (例如,由曲线或其他抽象结构定义,而不是例如顶点),以使得在一些实 施例中,TTU 138可能无法帮助进行射线图元相交测试。在这种情况下, TTU 138简单地将射线补全相交测试结果报告给SM 132,并且SM132自身 执行射线图元相交测试。在其他情况下(例如,三角形),TTU 138自身可 以执行射线三角形相交测试,从而进一步提高了整个射线追踪过程的性能。 为了完整起见,下面描述TTU 138如何执行或加速射线图元相交测试。
如上所述,被发现与射线相交的叶节点识别(包围)可能与射线相交或 不与射线相交的图元。TTU 138的一种选择是向SM 132提供例如在相交的 叶节点中识别出的一系列几何形状以进行进一步处理。例如,SM 132本身 可以基于TTU 138作为TTU遍历BVH的结果而提供的信息来确定所识别 的图元是否与射线相交。为了从SM 132卸载该处理并从而使用TTU 138的 硬件来对其进行加速,堆栈管理块740可以发出对射线图元的请求,并且转换块720对TTU的射线补全测试块710识别的相交叶内的图元执行射线图 元测试。在一些实施例中,SM 132可以发出对射线图元测试的请求以测试 图元的特定范围和转换块720,而与如何识别该几何形状范围无关。
在确保请求的射线图元测试所需的图元数据在图元高速缓存754中可用 之后,射线图元和转换块720可使用存储在射线管理快730中的射线信息确 定与射线相交的图元。射线图元测试块720将确定要由射线相交的图元的标 识提供给相交管理块722。
相交管理块722可以将射线图元测试的结果返回给SM 132。射线图元 测试的结果可以包括相交的图元的标识符,与射线元旦的相交点的距离以及 关于相交图元的属性的其他信息。在一些实施例中,相交管理块722可以基 于来自射线图元和转换块720的先前的相交结果来修改现有的射线图元测试 (例如,通过修改射线的长度)。
相交管理块722还可以跟踪不同类型的图元。例如,不同类型的三角 形包括在相交时将阻挡射线的不透明三角形,以及在相交时可能会或可能不 会阻挡射线或可能需要由SM进行附加处理的alpha三角形。射线是否被透 明三角形阻挡可能例如取决于映射到三角形上的一个或更多个纹理、该纹理 所占据的三角形面积以及纹理修改三角形的方式。例如,在一些实施例中, 透明性(例如,彩色玻璃)要求SM 132跟踪透明对象的命中,以便可以按 射线参数顺序对其进行分类和着色,并且通常实际上不阻挡射线。同时, alpha“修剪”允许基于映射到图元的纹理的形状来修剪图元的形状,例如, 从三角形中裁剪处叶子形状(请注意,在光栅图形中,透明度通常被称为 “alpha混合”,而修剪则称为“alpha测试”)。在其他实施例中,TTU 138 可以将透明命中推送到存储器中的队列以供SM 132稍后处理,并且可以通 过向纹理单元发送请求来直接处理修剪后的三角形。每个三角形可包括指示 符(designator),以指示三角形的类型。相交管理块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),以确 定数据结构中的哪些图元(例如,用于生成场景的三角形)被查询数据结构 (例如,射线)所相交。例如,TTU 138可以确定加速数据结构中的哪些三 角形被射线相交并将结果返回给SM 132。但是,就接口和线程同步而言, 将每个三角形相交处的结果返回给SM 132的成本很高。TTU138提供硬件 逻辑,该硬件逻辑被配置为隐藏那些被证明能够被隐藏的条目或三角形,而对最终场景没有功能影响。返回至SM的结果减少和线程之间的同步步骤大 大提高了遍历的整体性能。在本申请中公开的TTU 138的示例非限制性实施 例提供了在没有SM 132干预的情况下在TTU 138内丢弃一些相交点,使得 更少的相交点返回到SM 132并且SM 132不必检查所有相交的三角形或条 目范围。
示例性的射线图元遍历实现
本公开的示例性非限制性实施例提供了包括硬件电路的TTU 138,该 硬件电路被配置为确定共享一个或更多个特征(例如,至少一个公共顶点或 定义公共边缘的至少两个公共顶点)的多个图元的相交点,同时将硬件配置 和半导体基板上的相关联面积最小化。对于共享这种一个或更多个特征的图 元,可以并行执行在测试图元与射线相交中执行的至少一部分处理(例如, 投影和/或转换)。
共享一个或更多个特征的多个图元包括共享至少一个顶点的图元。例 如,图1C中所示的共享顶点的五个三角形A、B、C、D和E。本技术的示 例提供被配置为执行射线三角相交测试的电路,该射线三角相交测试使用跨 共享顶点的多个三角形的测试的与共享顶点有关的处理结果。由于不需要复 制处理硬件以针对共享顶点重复相同的处理,因此这种电路允许减少电路组 件。
如图1C所示,三角形A和B也共享由两个共享顶点定义的边缘。本 技术的示例提供被配置为执行射线三角相交测试的电路,该射线三角相交测 试使用与来自针对共享边缘的第二三角形执行的处理中的一个三角形的共享 边缘(两个共享顶点)有关的处理结果。由于不需要针对共享边缘(两个共 享顶点)重复进行处理,因此这种电路允许减少电路组件。
因为典型的多边形网格中的许多图元与另一个图元共享顶点或边缘 (例如,参见图1A-图1C),所以根据本技术示例的电路可以提高在相交边 界体积中(例如,图元范围)识别的图元的处理速度,而处理电路的增加最 少。
图8示出了根据本公开的示例性实施例的用于执行射线图元相交测试 的射线图元测试单元。射线图元测试单元包括匹配电路1140、转换和投影 电路1150以及命中/未命中确定电路1145。
匹配电路1140可以被配置为在具有至少一个共享特征(例如,顶点或 边缘)的图元范围内匹配图元。可以基于顶点值、在压缩的高速缓存行中提 供的顶点索引、在射线图元测试单元外部识别的匹配和/或与图元信息提供 的匹配标识来执行匹配。在一个示例中,匹配电路1140可以确定一个或更 多个所检索的存储器块和/或图元范围内的图元之间的匹配。在一个示例 中,匹配电路1140可以确定要在相交序列中测试的“下一个”图元是否在 图元范围中具有与另一个图元(例如,后续的)的共享特征。
如果没有找到匹配,则转换和投影电路1150可以处理单个图元。例 如,转换和投影电路1150可以将接收的用于处理的图元的射线和/或顶点转 换成不同的坐标系(例如,在世界空间和对象空间之间)以进行射线相交测 试。在处理完图元之后,可以由转换和投影电路1150测试图元范围内的后 续图元。可以存在多个并行转换和投影电路1150,其并行处理各个不匹配 的图元以增加吞吐量。
如果匹配电路1140检测到存在匹配(即,两个或更多个图元共享公共 顶点或边缘),则转换和投影电路1150可以处理包括至少一个共享特征的多 个图元并共享与不同图元的处理之间的共享功能有关的处理结果。在一个示 例中,与共享至少一个特征的多个图元有关的处理的至少一部分可以并行地 并发执行。在一个实施例中,累积缓冲区可以用于保留来自处理第一图元的 结果,该第一图元用于处理与第一图元共享公共顶点或边缘的一个或更多个 附加图元。
转换和投影电路1150可以共享在坐标系之间转换射线和/或图元顶点 的结果,以简化射线相交测试。可以针对共享公共顶点或边缘的多个图元并 行执行转换。
命中/未命中确定电路1145可以被配置为基于转换的射线和/或顶点确 定一个或更多个图元是否被射线相交。
例如,图8所示的图元0处理电路可以包括用于处理第一图元0的每 个顶点的硬件。图元处理电路1-N可以分别执行与图元1-N的至少一个顶点 有关的处理,并且从图元0处理电路接收对这些图元1-N与图元0共享的顶 点的处理结果。因为图元处理电路1-N可以利用由图元0处理电路确定的一 些处理结果,所以相对于图元0处理电路,可以将图元处理电路1-N中的每 一个简化为仅包括硬件的一部分,该硬件包含在原始0处理电路中。例如,在处理三角形的一个实施例中,图元处理电路1-N每个仅对单个顶点执行某 些计算,并且对其他两个顶点依靠图元0处理电路执行的计算。
在一些示例中,一个或更多个图元处理电路可以从一个以上的其他图 元处理电路接收处理。如图8所示,图元处理电路N可以从图元处理电路0 和图元处理电路1中的每一个接收处理结果。
命中/未命中确定电路1145可基于由图元处理电路0-N提供的结果, 为每个图元确定命中或未命中。命中/未命中确定电路1145可以并行或顺序 地确定共享特征的多个图元的命中/未命中。
接收用于处理的图元信息的每个图元处理电路0-N可以在每个周期提 供处理结果。命中/未命中确定电路1145可以基于来自图元处理电路0-N的 处理结果,确定射线是命中还是未命中每个图元。在一个示例中,命中/未 命中确定电路1145可以提供与由射线相交的图元的相交结果(例如,射线 相交坐标和/或射线相交的参数长度),每个周期一个相交结果。
参照图8,由于图元处理电路1-N不需要包括图元处理电路0中包括 的每个处理元件,因此转换和投影电路1150可以处理多个图元而没有在硬 件复杂性方面的相应的比例增加。
转换和投影电路1150可以在射线坐标空间中接收射线并且将射线转换 到对象空间中或者接收被转换到对象空间中的射线。
测试共享与射线相交的边缘的三角形
三角形由定义三个边缘的三个顶点组成。两个不同的三角形由六个顶 点定义(每个三角形3个顶点),但是可以仅使用四个唯一的顶点来定义共 享公共边缘的一对相邻三角形。如图9A和图9B所示,顶点v0、v1和v2 定义了第一三角形(见图9A),而顶点v0、v1和v3定义了第二三角形(见 图9B)。顶点v0和v1定义的边缘由两个三角形共享。
图9A和图9B显示了射线R与第一三角形相交的位置。测试三角形的 相交可以包括通过射线测试第一三角形的相交,然后通过射线测试第二三角 形的相交。
图9B图9A,测试了射线R与第一三角形的相交。在图9B中,测试 了射线R与第二三角形的相交。虚线表示射线R的重心坐标。重心坐标用 于表示具有三个标量值的位于三角形内部或外部的点(例如,射线R)的位 置。如果三个值的所有符号均为正或者三个值的所有符号均为负,则如图 9A所示三角形与射线相交。如果这三个值之一的符号与其他值不同,则该 三角形不会与射线相交,如图9B所示。
代替单独地处理共享边缘的一对三角形中的每个三角形(例如,与相 同硬件顺序地或由复制的单独硬件并行地),本技术的实施例提供了被配置 为针对共享边缘的一对三角形合并射线相交硬件测试。本技术的示例提供了 一种硬件,该硬件可以通过扩展硬件来处理一个以上的顶点,从而使共享边 缘的一对三角形的射线相交测试速率加倍,而不会使执行测试所需的硬件加 倍。
本技术的示例还可以应用于共享边缘的重叠三角形。图9C示出了向下 投影到二维的两个三维三角形。图9C示出了与第一三角形(v0,v1,v2) 和与第一三角形重叠的第二三角形(v0,v1,v3)相交的射线。在图9C所 示的示例中,射线在点R处与两个三角形相交。
示例射线三角测试单元
图10示出了根据本公开的示例性实施例的用于执行射线三角相交测试 的射线三角测试单元。射线三角形测试单元被配置为接收射线和三角形信 息,并确定射线是否与三角形相交。射线三角形测试单元包括被配置为减少 确定共享边缘的一对三角形的射线相交所需的时间的硬件。在示例性非限制 性实施例中,图7所示的射线三角形测试和转换块720可以包括图10中所 示的组件。在示例性非限制性实施例中,射线三角形测试和转换块720可以 包括单个射线三角形测试单元或多个射线三角形测试单元。
射线三角测试单元包括转换和投影电路1150、三角形绕组(winding) 测试块1160和距离测试块1170。射线三角测试和转换块720数据管道通过 射线投影和转换电路1152操作射线,通过顶点投影和转换电路1154a-154d 操作顶点,通过边缘测试电路1156a-1156e操作边缘,以及通过三角形绕组 测试块1160操作三角形。本技术的示例扩展了数据管道以添加对单个附加 顶点、附加边缘和附加三角形的支持。如图10所示,可以通过包括附加顶点投影和转换电路1154d和边缘测试电路1156d-1156e来实现对处理附加三 角形的支持。
转换和投影电路1150接收射线和三角形信息,并将几何转换和/或投 影应用于射线和/或三角形。转换和/或投影简化了从3D空间到2D空间的相 交测试。
转换和投影电路1150可接收共享边缘的单个三角形或两个三角形的信 息。当接收到单个三角形的信息时,转换和投影电路1150基于转换的三角 形顶点v0、v1和v2确定射线的重心坐标。
当接收到共享边缘的两个三角形的信息时,转换和投影电路1150对与 第一三角形相关联的三个三角形顶点v0、v1和v2执行上述相同的操作,并 使用与第一三角形相关的计算结果和基于附加三角形顶点v3的第二三角形 的计算结果以及与共享顶点v0和v1相关的第一三角形的计算结果,进一步 确定光线相对于第二三角形的重心坐标。在一个实施例中,转换和投影电路 1150允许针对第二三角形的射线相交测试与针对第一三角形的射线相交测 试并行地执行,但是不需要加倍硬件来执行相交测试。
转换和投影电路1150包括射线投影/转换电路1152,该射线投影/转换 电路1152被配置为定义相对于射线的坐标空间,并将转换应用于射线(例 如,射线原点和射线方向)。顶点投影和转换电路1154a-1154c被配置为相对 于转换的射线转换(投影)三个三角形顶点v0、v1和v2。边缘测试电路 1156a-1156c被配置为基于第一三角形的转换的(投影的)三角形顶点v0、 v1和v2确定射线的非归一化重心坐标。
如图10所示,为了进一步对与第一三角形共享边缘的第二三角形执行 射线三角形相交测试,不需要复制第二三角形的所有三个顶点的电路。可以 仅通过添加顶点投影和转换电路1154d和边缘测试电路1156d-1156e来执行 第二三角形的计算。顶点投影和转换电路1154d被配置为相对于转换的射线 转换(投影)第二三角形的附加顶点v3。边缘测试电路1156d-1156e被配置 为基于第二三角形的转换的(投影的)三角形顶点v0、v1和v3来确定射线 的非归一化的重心坐标。
在一个示例中,可以通过使用边缘1测试电路1156a的结果(用于第 一三角形)、边缘4测试电路1156d的结果(用于第二三角形)以及边缘5 测试电路1156e的结果(用于第二三角形)来提供第二三角形的重心坐标。 边缘4测试电路1156d可以使用转换电路1154a的结果(用于第一三角 形)、边缘5测试电路1156e可以使用转换电路1154b的结果(用于第一三 角形)。因此,顶点v0和v1转换以及边1的结果可用于第二三角形,而不 必重复相关联的操作。
众所周知,重心坐标表示具有三个标量的转换的射线在三角形上的位 置。该点的位置包括三角形内部或外部的位置、三角形三个边缘中的任何一 个的位置或三个三角形顶点中的任何一个。如何处理在边缘或顶点上的射线 相交的示例在标题为“保守的水密射线三角形相交点(Conservative Watertight Ray Triangle Intersection)”的共同待决的美国申请号16/101,148中 进行了描述,其全部内容通过引用合并于此。
三角形绕组测试块1160可以被配置为确定射线相交是在相应三角形的 内部还是外部,并且确定被确定为与射线相交的每个三角形的顶点的顶点绕 组顺序。顶点绕组顺序可以指示是从“前”侧还是从“后”侧看三角形,以 及该三角形是否应作为相交的三角形返回。在一些示例中,射线三角形相交 查询可以返回每个相交的三角形,而与顶点绕组顺序无关。三角形绕组测试 块1160可以包括:被配置为确定第一三角形的顶点绕组顺序的第一绕组电 路;被配置为并行确定第二三角形的顶点绕组顺序的第二绕组电路。
距离测试块1170被配置为确定相交点的参数长度(例如,如果射线相 交具有期望的朝向)。在单个三角形相交或两个三角形相交的情况下,对该 三角形或多个三角形的处理将沿着距离测试管道进行,以检查沿射线长度 (t范围)的参数坐标。在一个实施例中,距离测试一次仅处理单个三角 形。如果两个三角形成对命中(这是罕见的),它们将以每个周期一个的原 始速率背对背地沿着距离管道下降。此降低的速率是可选的。在一个实施例中,更多的基板面积和相关联的电路复杂度被用于增加第二距离测试管道以 支持以双倍速率命中。但是由于两次命中是罕见的,因此在某些实施例中, 性能的提高并不值得面积。照此,射线三角测试和转换块720维持每周期剔 除2个三角形、剔除1个三角形并命中1个三角形或命中1个三角形的速 率。
在一个实施例中,相交管理单元722的处理速率可以保持不变,因为 射线三角测试和转换块720仍然仅向每个相交管理单元722提供单个命中。 但是,当三角形共享边缘时,射线三角测试和转换块720可以将三角形的测 试速率加倍(例如,通过剔除三角形未命中),而不会加倍执行计算所需的 电路。这可以显着提高性能。
特别地,在两个三角形都未被射线命中的情况下,对相交管理单元 722的更新将适当地推进三角形计数以注意测试了两个三角形。推进三角形 计数之后,可以测试三角形范围内的一个或更多个下一个三角形与射线的相 交,而无需或与另一个三角形共享边缘。
距离测试块1170可以包括缓冲区,以在距离测试块1170正在处理另 一个三角形的同时存储转换的三角形信息(例如,如果确定第一三角形和第 二三角形二者都被射线相交)。
在一个实施例中,顶点投影和转换电路1154d可以包括被配置为相对 于顶点部分中的射线原点表达第四个三角形顶点的电路(例如,一个或更多 个FADD(单精度浮点加法单元,其被配置为计算“a+b”并将结果四舍五 入为fp32)),被配置为基于剪切(shear)方向对顶点分量进行置换的电路, 和/或应用剪切转换的电路(例如,一个或更多个融合乘加单元)。在一个实 施例中,在三角形部分中,三角形绕组测试块1160可包括用于每个三角形的CCW(逆时针)电路和CW(顺时针)电路,以通过边缘测试电路和三 角形的绕组基于计算出的重心来确定是否存在命中。
示例射线三角遍历实现
图11示出了用于确定射线图元相交的示例性非限制性方法的流程图。 参考图11讨论的一个或更多个操作可以由本申请中公开的TTU 138或射线 三角测试和转换块720执行,但是示例实现方式不限于此。
该方法包括:接收对查询数据结构和图元范围之间的一个或更多个相 交的请求(步骤1110)。该请求可以从SM 132接收,或者可以是由TTU 138的射线补全测试路径执行的射线补全测试的结果。该请求可以请求图元 范围内的最近的相交点或每个相交点。在一些实施例中,查询数据结构可以 是由其三坐标原点、三坐标方向以及沿着该射线的参数间隔(t参数)的最 小值和最大值(tmin,tmax)给出的射线(例如,表示沿射线的当前感兴趣 的片段)。可以在TTU 138中的堆栈管理块的一个或更多个堆栈条目中标识 该请求的图元范围。可以基于在TTU 138的射线补全测试路径中找到BVH 的相交叶节点的结果来创建堆栈条目。
从存储器中检索图元范围(步骤1112)。可以从TTU存储器(例如, L0高速缓存750的三角形高速缓存754)或TTU 138外部的存储器中检索 图元范围。例如,可以在连续的一组高速缓存行大小的块中提供图元范围。 每个高速缓存行大小的块可以包括头部,该头部标识在该块内表达的几何形 状类型以及该块中每个图元的图元类型。例如,头部可以标识该块包括三角 形,并且可以指示每个三角形是alpha图元还是不透明图元。头部可包括用于每个图元的alpha位,以指定相应图元是alpha图元还是不透明图元。
该方法包括转换射线和/或图元(步骤1114)。射线和/或图元经过转换 以简化3D相交问题并减少TTU硬件执行相交测试所需的浮点资源。在一示 例中,转换可以包括从世界空间到射线坐标空间的平移、剪切和/或缩放转 换。在射线坐标空间中,射线可从原点开始并沿一个坐标轴延伸(例如,以 单位长度)。在某些实现中,TTU硬件将仿射图元转换应用于射线,以使该 图元是边缘点为(1,0,0)、(0,1,0)和(0,0,0)的单位图元。在一些示例中,可以并行地针对多个图元(例如,共享顶点的图元)执行图元的转换。
使用转换的射线和/或图元,确定射线与哪些图元相交(步骤1116)。 应用于射线和图元的转换使用简化的平面坐标(例如,2D射线相对坐标) 简化了从3D空间到2D空间的相交问题。在2D空间中,相交测试将确定射 线相交是否在图元的内部边缘(例如,三角形边缘)。
可以测试图元范围内的每个图元与射线的相交。在一个示例中,硬件 电路可以被配置为在每个周期返回单个射线相交结果(例如,命中)。在其 他示例中,硬件电路可以被配置为在每个周期测试共享与射线相交的一个或 更多个顶点的多个图元。可以基于定义共享公共边缘的一对三角形的四个唯 一顶点,在一个周期内处理共享公共边缘的一对三角形。
对于三角形,可以使用三个2D边缘测试来计算相交确定,这些2D边 缘测试指示射线是否在边缘的一侧(以正值表示)、边缘的相对侧(以负值 表示)通过或与边缘相交(用零表示)。检查三个2D边缘测试的符号,以 确定射线是否相交或错过三角形。在一个非限制性示例中,如果所有符号都 是正的或所有符号都是负的,则三角形与射线相交。如果其中一个符号与其 他两个符号不匹配,则射线位于三角形之外。如果结果产生一个或更多个 零,则相交点可能在缘边或顶点上。在一个示例实施例中,如果2D边缘测 试的结果包括单个零,则确定相交点可以在边缘上;如果2D边缘测试的结 果包括两个或更多个零,则确定相交点可以在顶点上。由于其他三角形可能 共享边缘或顶点,因此可以使用例如在TTU逻辑中实现的平局决胜规则来 确保返回单个相交点。提供平局决胜规则的TTU逻辑的示例在共同待决的 美国专利申请号16/101,148中进行了描述,其标题为“保守的水密射线三角 形相交点”,在此通过引用以其整体并入。也可以采用其他符号约定来确定 相交点。
可以在三角形的边缘或顶点处或其附近不准确地确定相交结果,因为 经常在这些位置计算小的结果,并且浮点算术运算中的舍入会产生不足以进 行准确的空间确定的精度。例如,对边缘或顶点附近的射线相交进行的计算 将产生较小的正值或负值,在有限精度计算硬件的计算过程中,该值可能会 四舍五入为零。为了解决这个问题,示例性非限制性实施例使用经配置以组 合多个浮点算术运算的融合的浮点运算单元以有效地实现较高数值精度。融 合的浮点运算单元可以在TTU中包括的硬件中实现以及在一些示例实施例中,可以在TTU的射线三角测试(RTT)块(参见例如,图7中的块720) 中实现。
融合的浮点运算单元由于较少的舍入步骤而减少了等待时间并提高了 准确性。一些示例性非限制性实施例使用具有扩展指数范围的融合额浮点运 算单元,以确保在浮点指数中没有下溢或上溢。融合的浮点运算单元可实现 更精确的射线三角形结果,因为结果的符号用于确定三角形是否被命中,并 且即使融合的浮点运算单元确保结果的符号是正确的,即使值可能会四舍五 入。
如果TTU确定了相交点,那么它也可以确定该相交点的坐标。相交点 坐标可以例如由重心坐标提供,以用于由SM 132进行进一步处理(例如, 纹理坐标的计算),或者在TTU内的硬件的一些其他(例如,未来的)实 现。
被确定为与射线相交的图元的相交信息被返回到SM 132(步骤 1118)。在一个示例中,TTU 138将最接近的命中图元返回到SM 132。在一 个示例性实施例中,对于每个相交的图元,返回给SM 132的结果可以包括 参数长度,该参数长度指定沿着射线的命中发生的点和命中的属性,例如实 例ID、材料ID,或SM可以使用这些属性来选择特定的材料着色器和一组 资源绑定,以及在着色期间可以由SM 132使用的图元ID和(u,v)坐标 以检索和内插属性或样本纹理。
如果需要SM干预(例如,如果在单个三角形范围内找到的alpha命中 次数超过了结果队列中的alpha命中的存储容量),则当请求完成或遍历中途 时,TTU 138可以将结果返回给SM 132。如果请求中的所有图元都是不透 明的,则TTU 138只能将最接近的不透明图元返回给SM 132。但是,如果 图元包括不透明和alpha图元的混合,则多个alpha图元可以与射线相交。 可以将每个相交的alpha图元返回到SM 132以进行进一步处理(例如,基于与alpha图元相关联的纹理信息来确定是否存在命中)。SM 132可以使用 结果来构建场景,向TTU 138发出附加查询,和/或修改先前向TTU发出的 查询。
图12示出了用于确定射线与一个或更多个三角形之间的相交的示例性 非限制性过程。虽然参考用于确定相交的特定数值运算描述了图12中的步 骤,但是本公开的实施例不限于所公开的数值运算。
TTU执行射线/三角形相交测试以确定射线是否与三角形相交并且如果 确定了相交则提供相交位置。可以将具有原点P和方向D的射线R(t)定义为 R(t)=P+tD,并且第一三角形可以通过其三个顶点v0、v1和v2定义,第二 三角形可以通过三个顶点v0、v1和v3(请参见图9A-图9C)定义。在处理 单个三角形的情况下,仅考虑顶点v0、v1和v2。
为了简化相交问题,将几何平移应用于射线和/或三角形。首先,定义 1210新的坐标空间以简化计算。在一个示例中,相对于射线定义坐标空 间,其中射线原点在(0,0,0)处变为坐标空间原点,并且射线方向向量的主 轴(具有最大绝对值的坐标)变为坐标空间的归一化Z轴(0,0,1)。可以使 用具有原P’=(0,0,0)和方向D’=(0,0,1)的简化的射线R’在射线相对坐标中定义 射线。
可以根据射线方向向量1212来计算置换转换,其包括计算射线方向向 量(X,Y或Z)的最大幅度分量,并将该分量与Z分量交换。如果排列的 Z分量为负,则交换排列的X轴和Y轴分量。将置换转换应用于射线原 点、射线方向和/或三角形顶点1214,并从所有三角形顶点1216中减去射线 原点。三角形顶点可以包括三个顶点(如果正在测试单个三角形与射线相 交)或者四个顶点(如果正在测试共享边缘的一对三角形与射线相交)。减 去射线原点可对射线和三角形进行转换,以使射线原点位于3D坐标系原 点。
计算1218的剪切转换的系数,其将射线方向向量的x和y分量设为 零。剪切转换被应用于三角形顶点1220(例如,单个三角形的三个顶点或 三角形对的四个顶点)。可以通过以下方式提供预先计算的转换:
Figure BDA0002969680630000331
可以通过以下方式提供转换的三角形顶点:
v0′=M·(v0-P),
v1′=M·(v1-P),
v2′=M·(v2-P).
v3′=M·(v3-P).
在一些实施例中,该转换可以由TTU预先确定,并且可以通过射线三 角测试(RTT)块应用于三角形顶点。
通过计算在(x=0,y=0)处的剪切2D三角形的重心坐标1222来评 估2D边缘测试。重心坐标可用于表示三个标量的三角形上任何点的位置。 该点的位置包括三角形内的任何位置,三角形的三个边缘中的任何一个的任 何位置,或三个三角形的顶点本身中的任何一个。
通过检查重心坐标的符号并应用背面剔除测试确定1224的顶点绕组顺 序。如果在(x=0,y=0)处的点在所有三个边缘的内部并且具有期望的 朝向,则计算1226相交点的参数长度。相交点的参数长度可以通过顶点z 分量的内插计算。
可通过以下方式提供第一三角形的重心坐标:
U1=D′·(v2′×v1′),
V1=D′·(v0′×v2′),
W1=D′·(v1′×v0′).
可以通过以下方式提供第二三角形的重心坐标:
U2=D′·(v3′×v1′),
V2=D′·(v0′×v3′),
W2=D′·(v1′×v0′).
由于单位射线与方向D’=(0,0,1)相交,因此可以进一步简化重心坐标。
简化的重心坐标为第一三角形提供了三个2D边缘测试,可以通过以下方式 提供:
U1=v2′x·v1′y-v1′x·v2′y
V1=v0′x·v2′y-v2′x·v0′y
W1=v1′x·v0′y-v0′x·v1′y.
简化的重心坐标为第二三角形提供了三个2D边缘测试,可以通过以下 方式提供:
U2=v3′x·v1′y-v1′x·v3′y
V2=v0′x·v3′y-v3′x·v0′y
W2=v1′x·v0′y-v0′x·v1′y.
从上面可以看出,两个三角形共享的转换顶点是通过相同的方程式获 得的,而W1和W2的坐标是通过相同的方程式获得的。因此,可以在第二 三角形中使用针对第一三角形执行的这些操作的结果,而不必使用相同或不 同的硬件重复这些操作。
可以检查三个2D边缘测试的符号,以确定射线是否相交或错过三角 形。对每个三角形分别测试三个2D边缘测试的符号。在一个示例中,如果 所有符号均为正或所有符号均为负,则三角形与射线相交。如果其中一个符 号与其他两个符号不匹配,则相交点位于三角形的外部。如果结果产生一个 或更多个零,则相交点可以在三角形的边缘或顶点上。由于其他三角形可能 共享边缘或顶点,因此可能需要使用平局决胜规则以确保在确定相交位于边 缘或顶点上时仅返回单个相交。
在示例性非限制性实施例中,边缘测试可以在非归一化的重心坐标上 而不是归一化的重心上进行操作,并且可以使用带有扩展后的10位指数范 围的融合的浮点运算单元(例如,融合2分量点积单元(融合DP2单元)) 进行计算,以确保指数下溢不会导致边缘测试产生不规范的结果或零结果。 在一些示例实施例中,边缘测试可以对归一化的重心进行操作。
使用DP2单元可以避免精度损失,因为DP2单元允许在一个融合的浮 点运算中执行整个(例如,非归一化重心坐标的)表达式,而不是执行可能 各自包括其自身精度损失(例如,由于四舍五入)的单独操作。可以完全精 确地考虑中间结果,并且四舍五入只会在最后出现,因此符号始终是正确 的。
识别共享边缘的三角形
TTU 138可以被配置为识别共享边缘的三角形。在一些示例中,可以 通过射线三角形测试和转换块720来识别共享边缘的三角形。
基于射线三角形相交查询,TTU 138接收一个或更多个压缩三角形块 (例如,高速缓存行块),其包括关于要与射线相交而测试的三角形范围的 信息。压缩三角形块可以包括与在压缩三角形块中识别的三角形的顶点相对 应的顶点索引。
TTU 138可以将现有的编码用于压缩的三角形块,取消顶点索引以识 别共享两个顶点并因此公共边缘的那些三角形。可以仅针对单个压缩三角形 块中的三角形,针对多个压缩三角形块中的三角形,针对查询中识别的三角 形范围内的每个三角形,或跨多个压缩三角形块的三角形范围来确定共享两 个顶点的三角形。
在一些示例中,可以仅在三角形范围内的目标三角形与预定数量的后 续三角形之间进行三角形是否与另一三角形共享边缘的确定。在一个示例 中,预定数量的后续三角形可以是单个三角形。当在压缩的三角形范围上进 行射线三角相交测试操作时,如果可能射线三角测试和转换块720将对目标 三角形和下一个三角形进行解码。如果两个三角形共享边缘,则射线三角形 测试和转换块720通过将四个唯一的顶点传递到数据管道中来并行地测试两 个三角形。如果三角形不共享边缘,则射线三角形测试和转换块720可以通 过将目标三角形的三个顶点传递到数据管道中来测试目标三角形,然后通过 将下一个三角形的三个顶点传递到后续循环中的数据管道中来测试下一个三 角形。
共享的边缘可以是每个三角形的三个边缘的任意组合。当压缩的三角 形范围使用顶点索引时,可以通过比较三角形之间的顶点索引来确定共享边 缘。不使用顶点索引的未压缩三角编码也可以通过比较实际顶点值来查找 对。处理逻辑可能需要附加区域,用于比较实际顶点值以识别共享边缘。
在一些示例中,压缩三角形块可以识别哪些三角形共享一个顶点或一 对顶点。BVH构建器可以在压缩的三角形块中分组并识别共享一个顶点或 一对顶点的三角形。例如,如果范围中的后续三角形具有公共顶点或成对的 顶点,则可以为三角形设置标志(例如,按位)。
BVH构建器更改
根据本技术的示例,BVH构建器可以被配置为调整三角形块的形成以 增加三角形对的出现。通常,BVH构建器可以被配置为以最紧凑的格式形 成块。这可能会拆分两个三角形,否则这些三角形可能会配对成不同的缓存 行块,而这些缓存行块将无法利用RTT中的三角形配对。基于硬件(即, 射线三角测试和转换块720)能够在三角形共享边缘时加速射线三角测试的 能力,BVH构建器可以将共享边缘的两个或更多三角形组合到同一缓存行块中。
虽然对BVH构建器进行更改可能会增加在高速缓存行块中共享边缘的 三角形的数量,但由于现有结构自然会创建必要的条件,因此无需对BVH 构建器进行更改即可利用此特征。虽然增加三角形配对可带来性能优势,但 这种调整可能还会增加三角形块的数量,从而增加存储器占用量,并由于增 加的存储器带宽成本而降低性能。
配对和绕组力学的示例
如图10所示,为要提供的第一三角形和第二三角形的顶点提供了不同 的数据通道。每个数据路径中的处理电路可以被配置为处理以特定方式相对 于彼此布置的一对三角形。如果要测试的三角形以不同的配置布置,则处理 电路的结果将需要通过重新对齐数据来考虑这些差异。
图13示出了可以如何为特定硬件布置共享边缘的一对三角形的示例。 成对的三角形将共享由顶点R0和R1提供的边缘。如图13所示,成对的图 中的顶点R0,R1,R2和R3与射线三角测试和转换块720的转换和投影电 路1150中的对应顶点通道匹配(例如,通道0中的R0,通道1的R1等)。 转换和投影电路1150的组件可以被配置为基于图13所示的顶点布置和绕组 来处理三角形。成对的三角形来自具有顶点(T0,T1,T2)的任意三角形T 和具有顶点(P0,P1,P2)的P,其中顶点的数字再次映射到RTT顶点通 道,如果没有三角形配对,则该顶点将下降。
比较顶点索引,可以确定哪个顶点(T0,T1,T2)与哪个顶点(P0, P1,P2)匹配。如果有两个共享点和两个唯一点,则可能发生配对。如果任 何三角形的顶点索引在彼此之间都不唯一,则不进行配对。例如,如果 P0==P1,则没有配对。
在三角形T的顶点中,共享边缘有三个选项:T0-T1、T0-T2或T1- T2。这也可以表示为唯一的顶点:T0、T1或T2。图14中的图显示了当每 个被选择时必须发生到RTT通道的概念上的旋转和映射。图16显示了伪数 学,其描述了顶点R0、R1和R2与顶点T0、T1和T2之间的映射。
一旦知道了唯一的顶点并且发生了三角形T的映射,则第四顶点通道 必须是来自三角形P的唯一顶点。但是在某些情况下,三角形P的绕组可以 与图14中的图相反。
对于三角形P,对于唯一的顶点仍然有三个选项,但是一旦选择了该 选项,就存在用于将其他顶点映射到R0或R1的两个选项。通过映射到R0 或R1,而不是T中的顶点,我们可以减少组合爆炸。这给出了图13中所示 的六个选项。图15中的三角形(包括点划线)表示三角形必须翻转才能正 确匹配,这意味着从相交点开始顺时针(CW)或逆时针(CCW)绕组的结果必须翻转。图17显示了描述顶点R0、R1和R3以及顶点T0、T1和T2 之间的映射的伪数学。
扩展到其他共享特征和图元
已经参考对共享边缘(例如,两个顶点)的一对三角形执行射线三角 形相交测试来描述本技术的示例,但是不限于此。本技术的示例可以应用于 共享至少一个顶点的多于两个的三角形。在一些示例中,本技术可以扩展为 对多个三角形(例如,三个三角形)执行与射线相交有关的计算,每个三角 形与多个三角形中的另一个三角形共享至少一个顶点或边缘,而不是多个三 角形中的另一个三角形。例如,相交硬件可以被配置为处理之间具有共享边 缘的三角形条带或共享公共顶点的三角形扇形(参见例如,图1C中的三角 形A-E扇形共享单个顶点,并且三角形扇形中的每个三角形与另一个三角形 共享边缘)。
本技术还可以应用于被配置为对其他图元执行射线相交测试的TTU, 所述其他图元例如是凸多边形、四边形、直线、矩形、二次曲面、补丁 (patch),或本领域技术人员已知的共享顶点或边缘的其他几何图元。与上 面提供的示例相似,TTU可以被配置为包括附加硬件,以与主要图元并行地 处理附加图元,但不用需要包括用于处理主要图元的所有组件的附加硬件。 可以将来自处理主要图元的硬件的处理结果的至少一部分与附加硬件的处理 结果进行组合,以确定附加图元是否与射线相交。
扩展以支持其他与顶点有关的操作
本公开的实施例可以用于对共享一个或更多个顶点或一个或更多个边 缘的图元执行其他与顶点有关的操作。例如,图8所示的图元处理电路或射 线图元测试块720之内或之外的其他电路可在与第一图元共享一个或更多个 顶点或边缘的一个或更多个图元的操作中使用针对第一图元执行的结果。
在一些示例中,射线图元测试块720可以通过基于硬件的插值进一步 支持硬件加速的运动模糊。加速运动模糊的示例在共同待决且同时提交的标 题为“用于支持运动模糊和移动/变形几何形状的射线跟踪硬件加速(Ray Tracing Hardware Acceleration forSupporting Motion Blur and Moving/Deform Geometry)”美国专利申请号16/901,847中进行了描述,其全部内容通过引 用合并于此。射线图元测试块720可以包括被配置为对第一图元的顶点和与 第一图元共享顶点或边缘的一个或更多附加原语(premiere)并行地执行基 于硬件的内插的电路。在该示例中,用于一个或更多个附加图元的硬件电路 不需要包括对每个共享的顶点或边缘执行插值的电路,而是可以使用来自第 一图元的插值结果。该实施例避免了对于相同的一个或更多个共享顶点或边 缘的冗余计算。在两个三角形共享边缘的示例中,可以在该对的第二三角形 中避免对共享三角形的顶点进行多余的运动插值。
由TTU 138和SM 132实例化管道实现的示例
为了完整性,下面描述示例实施例中的TTU 138如何执行实例化和相 关联的转换。
图18A的射线追踪管线流程图的更详细的图示出了代表性用例的数据 流和组件之间的交互:针对包含几何图元的场景追踪射线,并通过硬件处理 实例转换。在一个示例非限制性实施例中,图18A的射线追踪管线本质上 是软件定义的(在示例实施例中,这是由SM 132确定的),但是广泛使用了 TTU 138进行的硬件加速。关键组件包括SM 132(以及其余的计算管线)、 TTU 138(其充当SM的协处理器)以及L1高速缓存和下游存储器系统, TTU从中获取BVH和三角形数据。
图18A中所示的管线示出了可以由开发系统提前执行边界体积层次结 构创建1802。其还示出了在示例实施例中,作为着色(可以包括照明和纹 理),由SM 132或其他软件执行或控制射线创建和分配1804。示例管线包 括分别由TTU 138执行的“顶层(toplevel)”BVH树遍历1806、射线转 换1814、“底层(bottom level)”BVH树遍历1818和射线/三角形(或其他 图元)相交1826。由于TTU 138和SM 132之间的握手确定了TTU 138做 什么以及以什么顺序进行,所以不必按照所示的顺序执行。
SM 132一次向TTU 138呈现一个或更多个射线。SM 132呈现给TTU 138进行遍历的每条射线可以包括射线的几何参数、遍历状态以及射线的射 线标记(flag)、模式标记和射线操作信息。在示例实施例中,射线操作 (RayOp)提供或包括辅助算术和/或逻辑测试,以抑制、覆盖和/或允许相 交点的存储。遍历堆栈也可以由SM 132使用,以将某些状态信息传递给 TTU 138以用于遍历。新的射线查询可以从显式遍历堆栈开始。但是,对于 某些查询,可以提供少量的堆栈初始化器以开始给定类型的新查询,例如: 从补全开始的遍历;射线与三角形范围的相交点;射线与三角形范围的相交 点,然后从补全开始的遍历;从给定三角形的三角形缓冲区获取顶点,等 等。在一些实施例中,使用堆栈初始化器代替显式堆栈初始化可提高性能, 因为堆栈初始化器需要较少的流处理器寄存器并减少了需要从流处理器传输 到TTU的参数数量。
在示例实施例中,SM 132随每个查询(例如,射线)呈现的一组模式 标志可以至少部分地控制当查询与特定类型的边界体积相交或与特定图元类 型的图元相交时,TTU 138将如何处理查询。SM 132提供给TTU 138的模 式标志使SM和/或应用程序能够例如通过RayOp指定辅助算术或逻辑测试 以抑制、覆盖或允许相交点的存储。模式标志可以例如使得能够根据诸如与 每个边界体积和/或图元相关联的深度(或距离)、与到原点或射线的距离有 关的边界体积或图元的大小、对象的特定实例等方面来改变遍历行为。应用 程序可以使用此能力来动态和/或有选择地启用/禁用对象集以进行相交测 试,而不是特定的查询集或查询组,例如,以允许在应用程序状态更改时使 用不同版本的模型(例如,当门打开或关闭时),或者提供被选定为射线长 度的函数的不同版本的模型以实现几何细节水平的形式,或者允许特定类别 的射线中的特定对象集以使某些层在特定视图中可见或不可见。
除了可以分别为射线补全相交和射线图元交集指定的模式标志集之 外,射线数据结构可以指定与其他RayOp测试相关的参数,例如射线标 志、射线参数和RayOp测试。射线标记可以由TTU 138使用,以控制遍历 行为、背面剔除和处理各种子节点类型的各个方面,取决于可选的RayOp 测试的通过/失败状态。RayOp测试以一定的复杂性为代价,为TTU138的 能力增加了灵活性。TTU 138为其正在处理的每个活动射线保留“射线槽 (slot)”,并且可以在遍历期间将射线标志、模式标志和/或RayOp信息存储 在TTU内的相应射线槽缓冲区中。
在图18A所示的示例中,TTU 138执行顶层树遍历1806和底层树遍历 1818。在示例实施例中,BVH的二级遍历使能对动态场景变化的快速射线 追踪响应。
在一些实施例中,在进入顶级树遍历时或在顶级树遍历中,在BVH中 遇到指定顶级转换的实例节点1805。实例节点1805向TTU指示以实例节点 1805为根的子树与替代世界空间坐标系对齐,在实例节点1805中为其定义 了来自世界空间的转换。
响应于遍历实例节点1805,TTU将从SM接收到的射线(或更多个射 线)从世界空间转换为替代世界空间。
射线转换1814通过光线(其可以用于第一坐标空间(例如,世界空 间)中的顶层遍历中、用至底部遍历的BVH的不同坐标空间(例如,对象 空间))来提供从顶层树遍历1806到底层树遍历1818的适当过渡。在先前 的文献中描述了使用两级遍历的示例BVH遍历技术,例如,参见2004年萨 尔兰德大学(Universitat des Saarlandes),Woop的“用于动态场景的射线追 踪硬件架构”,但是实施例不限于此。
示例顶级树遍历
由TTU 138进行的顶级树遍历1806从L1高速缓存1812接收补全, 并向射线转换1814提供实例以进行转换,或向SM 132提供未命中/结束输 出1813用于由SM处理的最接近的命中着色器1815(此块还可以基于非叶 子节点/无命中条件来递归操作)。在顶层树遍历1806中,下一个补全获取 步骤1808从存储器和/或高速缓存层次结构中获取要在步骤1810中测试射 线相交的下一个补全,并且对所获取的补全中的边界体积进行射线边界体相 交测试。
如上所述,实例节点将一个BVH连接到处于不同坐标系中的另一个 BVH。当相交的边界体积的子代是实例节点时,射线转换1814能够从L1 高速缓存1816中检索适当的转换矩阵。TTU 138使用适当的转换矩阵将射 线转换为子BVH的坐标系。已经通过引用并入的美国专利申请号 14/697,480描述了将树中的第一组节点连接到第二组节点的转换节点,其中 第一组节点和第二组节点位于不同的坐标系中。示例实施例中的实例节点可 以类似于美国申请号14/697,480中的转换节点。在图18B所示的TTU 138 的替代的非实例化模式中,TTU不执行“底”层树遍历1818,并且非实例 树BVH遍历由框1808、框1810例如仅使用一个堆栈来执行。TTU 138可 以基于它从BVH和/或查询类型中读取的内容在图18A实例化操作和图18B 非实例化操作之间切换。例如,特定的查询类型可能会限制TTU仅使用非 实例化操作。在这种查询中,任何相交的实例节点都将返回给SM。
在一些非限制性实施例中,在获取下一个补全之前,对所获取的补全 中的每个边界体积执行步骤1810中的射线边界体积相交测试。其他实施例 可以使用其他技术,例如以深度优先的方式遍历顶层遍历BVH。已经通过 引用并入的美国专利号9,582,607描述了可以在示例实施例中使用的一个或 更多个补全的结构和内容。美国专利号9,582,607也描述了补全的实例遍 历。
当确定边界体积与射线相交时,相交的边界体积的子边界体积(或对 其的引用)被跟踪,以用于与射线的相交和遍历的后续测试。在示例实施例 中,一个或更多个堆栈数据结构用于跟踪后续要被测试与射线相交的子边界 体积。在一些示例实施例中,可以使用小尺寸的遍历堆栈来跟踪将通过顶层 树遍历1806的操作而遍历的补全以及要测试相交的图元,并且可以使用较 大的局部堆栈数据结构来跟踪底层树遍历1818中的遍历状态。
示例底层树遍历
在底层树遍历1818中,下一个补全获取步骤1822在步骤1824中从存 储器和/或高速缓存层次结构1820中获取要测试射线相交的下一个补全,并 且获取的补全中的边界体积上完成射线边界体积相交测试。如上所述,底层 树遍历可以包括具有与上层树遍历中遍历的边界体积不同的坐标系中的边界 体积的补全。底层树遍历还从L1高速缓存中接收补全,并且可以基于非叶 子/无命中条件以及基于未命中/结束检测的顶层树遍历1806在自身内递归或 迭代地进行操作。可以通过将射线转换到所检索的较低级别补全的坐标系来确定射线与较低级别BVH边界中的边界体积的相交点。然后,将发现的在 较低级别的遍历中与射线相交的叶边界体积提供给射线/三角形相交点 1826。
将底层树遍历1818的叶输出提供给射线/三角形相交点1826(其具有 L0高速缓存访问以及通过L1高速缓存1828检索三角形的能力)。L0补全 和三角形高速缓存可以是TTU138内部的小型只读高速缓存。当到达某些叶 节点而没有遍历实例BVH时,射线/三角形相交点1826还可以从顶层树遍 历1806接收叶输出。
在处理完图元范围内的所有图元之后,相交管理单元检查结果队列的 状态,并制作分组以发送到堆栈管理单元和/或射线管理单元以更新射线的 属性和遍历状态,设置射线的下一个遍历步骤,和/或将射线返回到SM 132 (如有必要)。如果结果队列中包含在图元范围处理期间发现的不透明或 alpha相交点,则相交管理单元将结果队列中最近的不透明相交点的参数长 度(t)发送给射线管理单元,以记录为射线的tmax以缩短射线。为了更新 遍历状态以设置射线的下一个遍历步骤,相交管理单元会向堆栈管理单元发 送信号,指示结果队列中是否存在来自图元范围的不透明相交点,结果队列 中是否存在一个或更多个alpha相交点,结果队列是否已满,是否在图元范 围内找到尚未返回到SM且在结果队列中不存在的其他alpha相交点,以及 要测试的射线的图元范围内的下一个alpha图元的索引在SM消耗结果队列 的内容之后(与结果队列中当前图元范围相比,在具有最高存储顺序的 alpha图元之后的范围中的下一个图元的索引)。
当堆栈管理单元740从相交管理单元722接收到分组时,堆栈管理单 元740检查该分组以确定完成遍历步骤并开始下一个所需的下一动作。如果 来自相交管理单元722的分组指示在原始范围内发现了不透明的相交点,并 且射线模式位指示一旦找到任何相交点则射线将完成遍历,堆栈管理单元 740将射线及其结果队列返回到具有指示遍历已完成的遍历状态的SM(已 设置完成标志和/或空的顶层和底层堆栈)。如果来自相交管理单元722的分 组指示结果队列中存在不透明或alpha相交点,并且在图元范围的处理期间 射线遇到结果队列中不存在的图元范围中的尚未返回到SM中的剩余alpha 相交点,堆栈管理单元740将射线和结果队列返回到具有经修改以设置剔除 不透明位的遍历状态的SM,以防止进一步处理图元范围中的不透明图元, 并且在从图元范围返回到射线结果队列中的SM的最高alpha图元相交之 后,图元范围起始索引前进到第一alpha图元。如果当射线处理图元范围 时,来自相交管理单元722的分组指示未发现不透明或alpha相交点,则堆 栈管理单元740将堆栈条目的顶部(对应于完成的图元范围)从活动遍历堆 栈弹出。如果来自堆栈管理单元740的分组指示结果队列中存在不透明相交 点并且射线模式位不指示一旦找到任何相交点和/或结果队列中存在alpha相 交点则射线将完成遍历,但是在结果队列中不存在的图元范围中没有发现尚 未返回给SM的剩余alpha相交点,堆栈管理单元740将堆栈条目的顶部 (对应于完成的图元范围)从活动遍历堆栈中弹出并修改结果队列的内容, 以指示结果队列中存在的所有相交点都来自完成处理的图元范围。
如果活动堆栈是底部堆栈,并且底部堆栈为空,则堆栈管理单元740 将活动堆栈设置为顶部堆栈。如果顶部堆栈是活动堆栈,并且活动堆栈为 空,则堆栈管理单元740将射线及其结果队列返回到具有遍历状态的SM, 该遍历状态指示遍历已完成(设置完成标志和/或为空顶层和底层堆栈)。如 果活动堆栈包含一个或更多个堆栈条目,则堆栈管理单元740检查顶部堆栈 条目并开始下一遍历步骤。在共同待决的美国专利申请号16/101,148的标题 为“保守的水密射线三角形相交点”和美国专利申请号16/101,196“处理乱 序的不透明和Alpha射线/图元相交点的方法”中描述了与射线相交的图元 和/或图元范围的测试以及将结果返回到SM 132,在此通过引用将其全部内 容并入本文。
包括射线追踪的示例图像生成管线
虽然以上公开内容是在计算机图形和可视化的特定上下文中构架的, 但是射线追踪和所公开的TTU可以用于图形和可视化之外的多种应用程 序。非限制性示例包括用于逼真的声音合成的声音传播、声纳系统的模拟、 光学元件和系统的设计、粒子传输模拟(例如,用于医学物理学或实验性高 能物理)、一般的波传播模拟、与LIDAR数据的比较用于例如机器人或车辆 定位等目的。过去,OptiXTM已用于其中一些应用领域。
例如,可以以各种方式使用上述的射线追踪和其他能力。例如,除了 用于使用射线追踪渲染场景外,它们还可以与扫描转换技术结合使用,例如 在对3D模型的几何构造块(即,诸如三角形之类的多边形图元)进行扫描 转换的情况下以生成用于显示(例如,在图4所示的显示器150上)的图 像。
然而,同时,当用于产生虚拟现实、增强现实、混合现实、视频游 戏、运动和静态图片生成以及其他可视化应用程序的图像时,本文的技术提 供了优点。图19示出了根据一个实施例的用于处理图元以提供图像的图像 像素值的图元的示例流程图。如图19所示,可以响应于接收到用户输入来 生成3D模型的图像(步骤1952)。用户输入可以是显示图像或图像序列的 请求,例如在与应用程序(例如,游戏应用程序)交互期间执行的输入操 作。响应于用户输入,系统使用常规的GPU 3D图形管线对场景的3D模型 几何图元执行扫描转换和光栅化(步骤1954)。几何图元的扫描转换和光栅 化可包括例如使用本领域技术人员众所周知的常规技术(例如,照明、转 换、纹理映射、光栅化等)来处理3D模型的图元以确定图像像素值。所产 生的像素数据可以被写入帧缓冲区。
在步骤1956中,可以使用TTU硬件加速从光栅化图元上的一个或更 多个点追踪一个或更多个射线。可以根据本申请中公开的一个或更多个射线 追踪能力来追踪射线。基于射线追踪的结果,可以修改存储在缓冲区中的像 素值(步骤1958)。在某些应用程序中,修改像素值可以例如通过例如应用 更多逼真的反射和/或阴影来改善图像质量。使用存储在缓冲区中的修改后 的像素值来显示图像(步骤1960)。
在一个示例中,可以使用上述处理系统来实现几何图元的扫描转换和 光栅化,并且可以由SM 132使用关于图7所描述的TTU架构来实现射线追 踪,以添加更多的可视化特征(例如,镜面反射、阴影等)。图19仅是非限 制性示例,SM 132本身可以使用描述的TTU,而无需纹理处理或其他常规 3D图形处理来生成图像,或者SM可以采用纹理处理和其他常规3D图形处 理,而无需描述的TTU来产生图像。SM还可根据应用程序在软件中实现 任何所需的图像生成或其他功能,以提供任何所需的可编程功能,这些功能 不受纹理映射硬件、树遍历硬件或其他图形管线硬件所提供的硬件加速功能 的约束。
在一些实施例中,TTU 138是无状态的,这意味着在查询之间的TTU 中没有维护架构状态。同时,对于SM 1840上运行的软件请求继续上一个查 询通常很有用,这意味着相关状态应由TTU 138写入寄存器,然后传递回寄 存器中的TTU(通常是就地(in-place))继续。该状态可以采取遍历BVH 遍历进度的遍历堆栈的形式。
还可以提供少量的堆栈初始化器以开始给定类型的新查询,例如:
●从补全开始的遍历
●射线与三角形范围的相交点
●射线与三角形范围的相交点,然后从补全开始的遍历
●从三角形缓冲区中获取给定三角形的顶点
●在“从补全开始的遍历”和“射线与三角形范围的相交点”前面进行 实例转换的可选支持。
顶点获取是简单的查询,可以用包含堆栈初始化器而不包含其他内容 的请求数据来指定。其他查询类型可能需要指定射线或光束,以及堆栈或堆 栈初始化器以及描述查询详细信息的各种射线标志。射线由其三坐标原点、 三坐标方向以及沿射线的t参数的最小值和最大值给出。光束还由第二原点 和方向给出。
各种射线标记可用于控制遍历行为、背面剔除和各种子节点类型的处 理的各个方面,这取决于可选rayOp测试的通过/失败状态。RayOps为TTU 的功能增加了相当大的灵活性。在一些示例实施例中,RayOps部分引入了 两个射线标记版本,可以基于对与射线一起传输的数据和存储在补全中的数 据的指定操作来动态选择该两个射线标记版本。要探索此类标记,首先要了 解BVH中允许的不同子节点类型,以及TTU 138可以返回给SM的各种命 中类型。示例节点类型为:
■子补全(即,内部节点)
默认情况下,TTU 138通过下降到子补全继续遍历。
■三角形范围,对应于三角形缓冲区内的一组连续三角形
(1)默认情况下,射线所遇到的三角形范围由TTU 138通过测试三角形的 相交并相应地缩短射线来本地处理。如果遍历完成并且命中了三角形,则默 认行为是将三角形ID以及相交的t值和重心坐标返回给SM 1840。这是 “三角形”命中类型。
(2)默认情况下,即使遍历尚未完成,设置了alpha位的相交三角形也会返 回到SM1840。如果软件确定三角形实际上是透明的,则返回的遍历堆栈包 含继续遍历所需的状态。
(3)在某些实施例中,光束不支持三角形相交,因此默认情况下将相遇的 三角形范围作为“三角形范围(TriRange)”命中类型返回到SM 1840,其中 包括指向与该范围重叠的第一三角形块的指针,这些参数指定了范围以及与 叶边界盒的相交点的t值。
■条目范围,由索引(从用户提供的完整的“条目范围库”中得出)和条 目计数组成。
默认情况下,条目范围作为“条目范围(ItemRange)”命中类型返回 到SM 1840,其由例如索引、计数和与叶边界盒的相交点的t值组成。
■实例节点。
在一些实施例中,TTU 138可以通过将射线转换为实例BVH的坐标系 来本地处理一个实例化级别。可以在软件中(或在其他实施例中,TTU 138硬 件可以处理两个、三个或更多级别的实例化)处理其他级别的实例化(或每 个其他级别的实例化,取决于策略)。为此提供了“实例节点(InstanceNode)” 命中类型,由指向实例节点的指针和与叶边界盒的相交点的t值组成。在其 他实现中,硬件可以处理两个、三个或更多级别的实例化。
除了特定于节点的命中类型之外,还提供了通用的“节点参考(NodeRef)” 命中类型,其由指向父补全本身的指针以及指示相交哪个子代的ID和与子边 界盒的相交点的t值组成。
对于查询或BVH格式不正确或遍历期间遍历遇到问题的情况,可以提 供“错误”命中类型。
对于射线或光束错过场景中所有几何形状的情况,可以提供“无”命 中类型。
TTU如何处理四种可能的节点类型中的每一个由一组特定于节点的模 式标志确定,该标志被设置为针对给定射线的查询的一部分。上面提到的 “默认”行为对应于将模式标志设置为全零的情况。
标志的替代值允许剔除给定类型的所有节点,将给定类型的节点作为 NodeRef命中类型返回给SM,或者使用其对应的命中类型将三角形范围或 实例节点返回给SM,而不是在TTU 138中本地处理它们。
可以提供附加的模式标志,用于控制alpha三角形的处理。
应用本文公开的一种或更多种技术产生的图像可以显示在监视器或其 他显示设备上。在一些实施例中,显示设备可以直接耦合到生成或渲染图像 的系统或处理器。在其他实施例中,显示设备可以例如经由网络间接地耦合 到系统或处理器。此类网络的示例包括互联网、移动电信网络、WIFI网络 以及任何其他有线和/或无线联网系统。当显示设备间接耦合时,由系统或 处理器生成的图像可以通过网络流传输到显示设备。这种流传输允许例如在 服务器上或在数据中心中执行渲染图像的视频游戏或其他应用程序,并且渲 染的图像可以在与服务器或数据中心物理上分开的一个或更多个用户设备 (例如,计算机、视频游戏机、智能手机、其他移动设备等)上传输和显 示。因此,本文公开的技术可以应用于增强流传输的图像并增强流传输图像 的服务,例如NVIDIA GeForce Now(GFN)、GoogleStadia等。
此外,应用本文公开的一种或更多种技术产生的图像可以用于训练、 测试或认证用于识别现实世界中的对象和环境的深度神经网络(DNN)。这 样的图像可以包括道路、工厂、建筑物、城市环境、农村环境、人类、动物 以及任何其他物理物体或真实环境的场景。此类图像可用于训练、测试或认 证在机器或机器人中使用的DNN,以操纵、处理或修改现实世界中的物理 对象。此外,此类图像可用于训练、测试或认证在自主车辆中使用的 DNN,以在现实世界中导航和移动车辆。另外,应用本文公开的一种或更多 种技术产生的图像可以用于向这些机器、机器人和车辆的用户传达信息。
以上引用的所有专利和出版物均以引用方式并入,如同明确提出一 样。
尽管已经结合当前被认为是最实际和优选的实施例描述了本发明,但 是应当理解,本发明不限于所公开的实施例,相反,其意图是涵盖所附权利 要求的精神和范围内所包括的各种修改和等同布置。

Claims (32)

1.一种射线追踪设备,其包括硬件电路,所述硬件电路被配置为执行包括以下内容的操作:
接收定义射线的值;
接收定义第一图元的边缘的第一顶点值和第二顶点值;
利用第一硬件计算器执行关于所述第一顶点值和所述第二顶点值和/或所述第一图元的所述边缘的计算;
接收第二图元;
测试所述第二图元是否与所述第一图元共享边缘;以及
当确定所述第一图元和所述第二图元共享所述边缘时,使用由所述第一硬件计算器执行的所述计算来测试(a)所述射线是否与所述第一图元相交和(b)所述射线是否与所述第二图元相交二者。
2.根据权利要求1所述的射线追踪设备,其中所述硬件电路还被配置为:当确定所述第一图元和所述第二图元不共享边缘时,使用由所述第一硬件计算器执行的所述计算来测试所述射线是否与所述第一图元相交,利用第二硬件计算器执行关于所述第二图元的顶点的计算,并使用由所述第二硬件计算器执行的所述计算来测试所述射线是否与所述第二图元相交。
3.根据权利要求1所述的射线追踪设备,其中当确定所述第一图元和所述第二图元共享边缘时,所述确定所述射线是否与所述第一图元相交与所述确定所述射线是否与所述第二图元相交并行执行。
4.根据权利要求1所述的射线追踪设备,其中当确定所述第一图元和所述第二图元共享边缘时,在相同的硬件周期内并行地执行确定所述射线是否与所述第一图元和所述第二图元相交。
5.根据权利要求1所述的射线追踪设备,其中所述硬件电路还被配置为将所述射线投射到2D空间中,将所述第一图元的每个顶点投射到投影的2D射线坐标空间中,将所述第二图元的每个非共享顶点投射到所述投影的2D射线坐标空间中,并且其中基于所述第一图元的所述投影顶点执行确定所述射线是否与所述第一图元相交,并且基于所述第二图元的所述投影的非共享顶点和所述第一图元的所述投影顶点的至少一部分执行确定所述射线是否与所述第二图元相交。
6.根据权利要求1所述的射线追踪设备,其中所述图元是三角形,并且所述硬件电路还被配置为:当确定所述第一三角形和所述第二三角形共享所述边缘时,将所述射线投射到2D空间中,将所述第一三角形的三个顶点投影到所述投影的2D射线坐标空间中,将所述第二三角形的所述单个非共享顶点投影到所述投影的2D射线坐标空间中,并且其中基于所述第一三角形的所述三个投影顶点执行确定所述射线是否与所述第一三角形相交,并且基于与所述第二三角形共享的所述第一三角形的所述两个投影顶点和所述第二三角形的所述单个投影顶点执行确定所述射线是否与所述第二三角形相交。
7.一种射线追踪设备,其包括被配置为执行包括以下内容的操作的电路:
接收有关射线的信息;
接收包括第一图元和第二图元的图元范围;
确定所述第一图元和所述第二图元是否共享至少一个顶点;
当确定所述第一图元和所述第二图元共享至少一个顶点时,将所述第一图元的顶点和所述第二图元的一个或更多个非共享顶点并行地转换到2D射线坐标空间中;以及
当确定所述第一图元和所述第二图元不共享至少一个顶点时,将所述第一图元的顶点和所述第二图元的所述顶点串联地转换到2D射线坐标空间中;以及
基于转换的顶点确定所述第一图元和所述第二图元是否被所述射线相交。
8.根据权利要求7所述的射线追踪设备,其中所述第一图元和第二图元是共享由每个三角形中的两个顶点定义的边缘的三角形,并且对所述顶点进行转换包括对所述第一图元的三个顶点和所述第二图元的单个非共享顶点进行转换。
9.根据权利要求8所述的射线追踪设备,其中所述电路还被配置为:
确定由所述第一图元的转换的三角形顶点定义的转换后的三角形边缘的边缘函数值;
如果所述第一图元的所有边缘函数值都不为零且具有相同的符号,则将所述第一图元识别为相交;
确定由所述第二图元的转换的三角形顶点定义的转换后的三角形边缘的边缘函数值,而无需确定所述第二图元的每个边缘函数;以及
如果所述第二图元的所有边缘函数值都不为零且具有相同的符号,则将所述第二图元识别为相交,其中当确定所述第一图元和第二图元共享至少一个顶点时,并行确定所述第一图元的所述边缘函数值和所述第二图元的所述边缘函数值。
10.根据权利要求7所述的射线追踪设备,其中所述电路包括:当确定所述第一图元和第二图元共享两个顶点时,被配置为转换所述第一图元的每个顶点的第一图元处理电路以及被配置为转换所述第二图元的所述一个或更多个非共享顶点中的每一个的第二图元处理电路,并且当确定所述第一图元和所述第二图元不共享至少一个顶点时,所述第一图元处理电路被配置为转换所述第一图元的每个顶点和所述第二图元的每个顶点。
11.一种设备,包括:
存储器,所述存储器被配置为存储定义多个边界体积的加速数据结构的至少一部分,每个边界限定多个图元;以及
硬件电路,所述硬件电路被配置为:
从处理器接收查询,所述查询包括关于射线的信息和关于边界体积层次结构的信息;
遍历所述边界体积层次结构以确定与所述射线相交的所述边界体积层次结构内的边界体积,相交的边界体积识别图元范围;
确定在所述图元范围内的一对图元是否共享边缘;
当确定所述一对图元共享所述边缘时,并行地确定所述射线相对于所述一对图元的第一图元的顶点的坐标和所述射线相对于所述一对图元的第二图元的顶点的坐标;以及
基于所述第一图元的所述射线相交坐标和所述第二图元的所述射线相交坐标,确定所述第一图元和所述第二图元是否被所述射线相交。
12.根据权利要求11所述的设备,其中所述硬件电路包括:被配置为确定所述第一图元的射线相交坐标的第一坐标电路以及被配置为确定所述第二图元的射线相交坐标的第二坐标电路,其中所述第一坐标电路包括被配置为转换所述第一图元的每个顶点的第一转换电路并且所述第二坐标电路包括被配置为仅转换所述第二图元的所述顶点的一部分的第二转换电路。
13.根据权利要求12所述的设备,其中所述第一转换电路被配置为将所述第一图元的每个顶点转换到2D投影射线坐标空间中,并且所述第二转换电路被配置为将所述第二图元的每个非共享顶点转换到2D投影的射线坐标空间中。
14.根据权利要求12所述的设备,其中所述第一转换电路和所述第二转换电路被配置为并行操作。
15.根据权利要求12所述的设备,其中所述第一坐标电路包括被配置为基于由所述第一转换电路转换的第一图元顶点来确定转换后的第一图元边缘的边缘函数值的第一边缘电路以及被配置为基于由所述第二转换电路和所述第一转换电路转换的第二图元顶点来确定转换后的第二图元边缘的边缘函数值的第二边缘电路。
16.根据权利要求15所述的设备,其中所述第一边缘电路和所述第二边缘电路被配置为并行操作。
17.根据权利要求15所述的设备,其中基于转换的射线和转换后的第一图元边缘的所述边缘函数值确定所述射线相对于所述第一图元的顶点的所述坐标,并且基于所述转换的射线和转换后的第二图元边缘的所述边缘函数值确定所述射线相对于所述第二图元的顶点的所述坐标。
18.根据权利要求11所述的设备,其中当确定所述第一图元和/或所述第二图元被所述射线相交时,所述设备每周期提供单个命中结果。
19.根据权利要求11所述的设备,其中仅在单个压缩的高速缓存行块中的图元上执行对所述图元范围内的所述一对图元是否共享边缘的确定。
20.根据权利要求11所述的设备,其中在识别所述图元范围的多个压缩的高速缓存行块上执行对所述图元范围内的所述一对图元是否共享边缘的确定。
21.根据权利要求11所述的设备,其中所述设备被配置为接收识别所述图元范围的多个压缩的高速缓存行块,并且在所述高速缓存行块中识别共享边缘的所述图元范围内的所述一对图元。
22.一种射线追踪方法,所述方法由与多处理器耦合的基于硬件的遍历协处理器实现,所述方法包括:
在存储器中存储包括多个分层节点的加速数据结构的至少一部分、识别虚拟场景的至少第一图元和第二图元的至少一个节点;
接收有关射线的信息;
确定所述第一图元和所述第二图元是否共享至少一个顶点;
当确定所述第一图元和第二图元共享至少一个顶点时,将所述第一图元的顶点和所述第二图元的一个或更多个非共享顶点并行地转换到2D射线坐标空间中;以及
当确定所述第一图元和第二图元不共享至少一个顶点时,将所述第一图元的顶点和所述第二图元的所述顶点串联地转换到2D射线坐标空间中;以及
基于转换的顶点确定所述第一图元和所述第二图元是否被所述射线相交。
23.根据权利要求22所述的方法,其中所述第一图元和第二图元是共享由每个三角形中的两个顶点定义的边缘的三角形,并且对所述顶点进行转换包括对所述第一图元的三个顶点和所述第二图元的单个非共享顶点进行转换。
24.根据权利要求22所述的方法,其中所述图元是三角形,并且所述方法还包括:
确定由所述第一图元的转换的三角形顶点定义的转换后的三角形边缘的边缘函数值;
仅确定由所述第二图元的转换的三角形顶点定义的转换后的三角形边缘的边缘函数值的一部分;
如果所述第一图元的所有边缘函数值都不为零且具有相同的符号,则将所述第一图元识别为相交;以及
如果所述第二图元的所有确定的边缘函数值和包括所述共享顶点的所述第一图元的所述确定的边缘函数值都不为零且具有相同的符号,则将所述第二图元识别为相交。
25.一种射线追踪硬件,其用于测试射线是否与第一图元和第二图元相交,所述第一图元包括第一顶点、第二顶点和第三顶点,所述第二图元包括所述第二顶点和第三顶点以及第四顶点,所述射线追踪硬件包括:
第一图元处理电路,其包括
第一计算器,所述第一计算器对所述第一顶点执行第一计算;
第二计算器,所述第二计算器对所述第二顶点执行第二计算;
第三计算器,所述第三计算器对所述第三顶点执行第三计算,以及
第一相交测试电路,所述第一相交测试电路连接到所述第一计算器、第二计算器和第三计算器,并基于所述第一计算、第二计算和第三计算来测试射线是否与所述第一图元相交;以及
第二图元处理电路,其包括
第四计算器,所述第四计算器对所述第四顶点执行第四计算,以及
第二相交测试电路,所述第二相交测试电路连接到所述第二计算器、第三计算器和第四计算器,并基于所述第二计算、第三计算和第四计算来测试所述射线是否与所述第二图元相交。
26.根据权利要求25所述的射线追踪硬件,其中所述第一计算器、第二计算器、第三计算器和第四计算器同时运行,并且所述第一相交测试电路和第二相交测试电路同时运行。
27.根据权利要求25所述的射线追踪硬件,其中所述第二图元处理电路不具有第二计算器或第三计算器,而是使用所述第一图元处理电路执行的所述第二计算和第三计算。
28.根据权利要求25所述的射线追踪硬件,其中所述第一计算、第二计算、第三计算和第四计算支持所述第一相交测试电路和第二相交测试电路执行的顶点投影和/或边缘函数值确定。
29.根据权利要求1所述的射线追踪设备,其中所述硬件电路是用于生成图像的服务器或数据中心的一部分,并且所述图像被流传输到用户设备。
30.根据权利要求22所述的方法,其中在服务器或数据中心上执行所述存储、接收、确定所述第一图元和所述第二图元是否共享至少一个顶点以及确定所述第一图元和所述第二图元是否被所述射线相交以生成图像,并且将所述图像流传输到用户设备。
31.根据权利要求1所述的射线追踪设备,其中所述硬件电路用于生成图像,并且所述图像用于训练、测试或认证在机器、机器人或自主车辆中使用的神经网络。
32.根据权利要求22所述的方法,其中执行所述存储、接收、确定所述第一图元和第二图元是否共享至少一个顶点以及确定所述第一图元和所述第二图元是否被射线相交以生成图像,所述图像用于训练、测试或认证在机器、机器人或自主车辆中使用的神经网络。
CN202110260301.8A 2020-06-15 2021-03-10 共享顶点的射线追踪图元的硬件加速 Active CN113808241B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/901,023 US11450057B2 (en) 2020-06-15 2020-06-15 Hardware acceleration for ray tracing primitives that share vertices
US16/901,023 2020-06-15

Publications (2)

Publication Number Publication Date
CN113808241A true CN113808241A (zh) 2021-12-17
CN113808241B CN113808241B (zh) 2023-12-08

Family

ID=78718939

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110260301.8A Active CN113808241B (zh) 2020-06-15 2021-03-10 共享顶点的射线追踪图元的硬件加速

Country Status (3)

Country Link
US (2) US11450057B2 (zh)
CN (1) CN113808241B (zh)
DE (1) DE102021115407A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117274318A (zh) * 2023-11-20 2023-12-22 广州市大湾区虚拟现实研究院 一种高鲁棒性的反向光学大范围跟踪方法和系统

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2599186B (en) * 2021-03-23 2022-10-12 Imagination Tech Ltd Intersection testing in a ray tracing system
GB2599185B (en) * 2021-03-23 2022-08-24 Imagination Tech Ltd Intersection testing in a ray tracing system
GB2599184B (en) 2021-03-23 2022-11-23 Imagination Tech Ltd Intersection testing in a ray tracing system
GB2599181B (en) 2021-03-23 2022-11-16 Imagination Tech Ltd Intersection testing in a ray tracing system
US20240095996A1 (en) 2022-09-16 2024-03-21 Nvidia Corporation Efficiency of ray-box tests

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100053162A1 (en) * 2000-06-19 2010-03-04 Holger Dammertz Accelerated ray tracing using shallow bounding volume hierarchies
CN103348384A (zh) * 2010-09-27 2013-10-09 英特尔公司 使用边缘检测和描影器再使用的多视图光线跟踪
US20200051312A1 (en) * 2018-08-10 2020-02-13 Nvidia Corporation Method for continued bounding volume hierarchy traversal on intersection without shader intervention
US20200051314A1 (en) * 2018-08-10 2020-02-13 Nvidia Corporation Watertight ray triangle intersection
US20200051316A1 (en) * 2018-08-10 2020-02-13 Nvidia Corporation Method for handling of out-of-order opaque and alpha ray/primitive intersections

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6285376B1 (en) 1994-09-28 2001-09-04 Samsung Electronics Co., Ltd. Triangle traversing method and a rasterizer adopting the same
US6489955B1 (en) 1999-06-07 2002-12-03 Intel Corporation Ray intersection reduction using directionally classified target lists
US7952583B2 (en) 2000-06-19 2011-05-31 Mental Images Gmbh Quasi-monte carlo light transport simulation by efficient ray tracing
US20080079715A1 (en) 2006-09-28 2008-04-03 Shearer Robert A Updating Spatial Index Partitions Based on Ray Tracing Image Processing System Performance
US8059122B1 (en) 2008-03-25 2011-11-15 The United States Of America As Represented By The Secretary Of The Air Force Cartesian mesh generation technique
US9171390B2 (en) * 2010-01-19 2015-10-27 Disney Enterprises, Inc. Automatic and semi-automatic generation of image features suggestive of motion for computer-generated images and video
WO2011137229A1 (en) * 2010-04-29 2011-11-03 Caustic Graphics, Inc. Systems and methods for primitive intersection in ray tracing
US8692825B2 (en) 2010-06-24 2014-04-08 International Business Machines Corporation Parallelized streaming accelerated data structure generation
KR101705072B1 (ko) * 2010-09-28 2017-02-09 삼성전자주식회사 영상 처리 장치 및 방법
US9607426B1 (en) 2013-12-20 2017-03-28 Imagination Technologies Limited Asynchronous and concurrent ray tracing and rasterization rendering processes
US9552664B2 (en) 2014-09-04 2017-01-24 Nvidia Corporation Relative encoding for a block-based bounding volume hierarchy
US10235338B2 (en) 2014-09-04 2019-03-19 Nvidia Corporation Short stack traversal of tree data structures
KR20170036416A (ko) 2015-09-24 2017-04-03 삼성전자주식회사 트리를 탐색하는 장치 및 방법
US10553010B2 (en) * 2017-04-01 2020-02-04 Intel IP Corporation Temporal data structures in a ray tracing architecture
US10417807B2 (en) 2017-07-13 2019-09-17 Imagination Technologies Limited Hybrid hierarchy of bounding and grid structures for ray tracing
US10580195B2 (en) * 2017-11-20 2020-03-03 Microsoft Technology Licensing, Llc Ray-triangle intersection testing with tetrahedral planes
US20200193685A1 (en) * 2018-12-13 2020-06-18 Advanced Micro Devices, Inc. Water tight ray triangle intersection without resorting to double precision
US10692271B1 (en) * 2018-12-13 2020-06-23 Advanced Micro Devices, Inc. Robust ray-triangle intersection
US10706609B1 (en) * 2018-12-13 2020-07-07 Advanced Micro Devices, Inc. Efficient data path for ray triangle intersection

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100053162A1 (en) * 2000-06-19 2010-03-04 Holger Dammertz Accelerated ray tracing using shallow bounding volume hierarchies
CN103348384A (zh) * 2010-09-27 2013-10-09 英特尔公司 使用边缘检测和描影器再使用的多视图光线跟踪
US20200051312A1 (en) * 2018-08-10 2020-02-13 Nvidia Corporation Method for continued bounding volume hierarchy traversal on intersection without shader intervention
US20200051314A1 (en) * 2018-08-10 2020-02-13 Nvidia Corporation Watertight ray triangle intersection
US20200051316A1 (en) * 2018-08-10 2020-02-13 Nvidia Corporation Method for handling of out-of-order opaque and alpha ray/primitive intersections
CN110827390A (zh) * 2018-08-10 2020-02-21 辉达公司 处理无序不透明和α光线/图元交点的方法
CN110827389A (zh) * 2018-08-10 2020-02-21 辉达公司 严密的光线三角形相交

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
杨晋生;赵月秋;邱光染;陈为刚;: "一种改进的射线跟踪路径搜索算法", 计算机工程与科学, no. 11, pages 83 - 87 *
黄涛;: "光线追踪的OpenCL加速实现研究", 计算机与现代化, no. 02, pages 65 - 69 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117274318A (zh) * 2023-11-20 2023-12-22 广州市大湾区虚拟现实研究院 一种高鲁棒性的反向光学大范围跟踪方法和系统
CN117274318B (zh) * 2023-11-20 2024-03-15 广州市大湾区虚拟现实研究院 一种高鲁棒性的反向光学大范围跟踪方法和系统

Also Published As

Publication number Publication date
US20210390759A1 (en) 2021-12-16
DE102021115407A1 (de) 2021-12-16
US20220383583A1 (en) 2022-12-01
CN113808241B (zh) 2023-12-08
US11450057B2 (en) 2022-09-20

Similar Documents

Publication Publication Date Title
US11704863B2 (en) Watertight ray triangle intersection
US11645810B2 (en) Method for continued bounding volume hierarchy traversal on intersection without shader intervention
CN113781626B (zh) 遍历在射线追踪中使用的数据的技术
CN113808241B (zh) 共享顶点的射线追踪图元的硬件加速
CN113781625B (zh) 适用于光线追踪的基于硬件的技术
CN113808245B (zh) 用于遍历光线追踪加速结构的增强技术
CN113781624B (zh) 具有可选的世界空间变换的光线跟踪硬件加速
US11373358B2 (en) Ray tracing hardware acceleration for supporting motion blur and moving/deforming geometry
CN113822788B (zh) 光线追踪硬件中对资源的早期释放
CN117726732A (zh) 减少包围体层次结构中的假阳性光线遍历
CN117726496A (zh) 使用光线剪裁减少假阳性光线遍历
CN117723266A (zh) 提高光线-盒测试的效率
CN117726743A (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