CN110827387A - 没有着色器干预下对交点进行连续层次包围盒遍历的方法 - Google Patents

没有着色器干预下对交点进行连续层次包围盒遍历的方法 Download PDF

Info

Publication number
CN110827387A
CN110827387A CN201910484916.1A CN201910484916A CN110827387A CN 110827387 A CN110827387 A CN 110827387A CN 201910484916 A CN201910484916 A CN 201910484916A CN 110827387 A CN110827387 A CN 110827387A
Authority
CN
China
Prior art keywords
ray
primitives
primitive
opaque
triangle
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201910484916.1A
Other languages
English (en)
Inventor
G·穆特乐
T·卡拉斯
S·莱内
W·P·小纽霍尔
R·C·小巴比奇
J·伯吉斯
I·利亚马斯
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 CN110827387A publication Critical patent/CN110827387A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing

Landscapes

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

Abstract

本发明公开了一种没有着色器干预下对交点进行连续层次包围盒遍历的方法。基于硬件的遍历协处理器提供树遍历操作的加速,该树遍历操作搜索树形数据结构中表示的图元与光线之间的交点。图元可以包括用于生成虚拟场景的不透明三角形和α三角形。基于硬件的遍历协处理器被配置为确定与光线相交的图元,并将交点信息返回到流式多处理器用于进一步处理。基于硬件的遍历协处理器被配置为省略被确定为与光线相交的一个或更多个图元的报告。省略的图元包括可证明能够被省略而不会对可视化虚拟场景产生功能性影响的图元。

Description

没有着色器干预下对交点进行连续层次包围盒遍历的方法
相关申请的交叉引用
本申请涉及以下共同转让的美国专利和专利申请,其全部内容通过引用并入本文:2014年12月8日提交的标题为“树状数据结构的短堆栈遍历(Short Stack Traversalof Tree Data Structures)”的美国申请No.14/563,872;标题为“基于块的层次包围盒(Block-Based Bounding Volume Hierarchy)”的美国专利No.9,582,607;标题为“用于基于块的层次包围盒的相对编码(Relative Encoding For A Block-Based BoundingVolume Hierarchy)”的美国专利No.9,552,664;2015年3月18日提交的标题为“光束追踪(Beam Tracing)”的美国专利No.9,569,559;标题为“基于多个局部坐标系的树状数据结构(Tree Data Structures Based on a Plurality of Local Coordinate Systems)”的美国专利No.10,025,879;2015年6月11日提交的标题为“基于块的几何数据无损压缩(Block-Based Lossless Compression of Geometric Data)”的美国申请No.14/737,343;以及以下与其同时提交的美国申请:
·(卷号:6610-0033/18-AU-0128)标题为“用于对数据路径调度的高速缓存请求进行高效分组的方法(Method for Efficient Grouping of Cache Requests forDatapath Scheduling)”;
·(卷号:6610-0034/18-SC-0141),标题为“鲁棒且高效的多处理器-协处理器接口(A Robust,Efficient Multiprocessor-Coprocessor Interface)”;
·(卷号:6610-0035/18-SC-0144)标题为“树遍历的查询特定行为修改(Query-Specific Behavioral Modification of Tree Traversal)”;
·(卷号6610-0036/18-SC-0145)标题为“保守水密光线三角相交(ConservativeWatertight Ray Triangle Intersection)”;
·(卷号6610-0037/18-SC-0149)标题为“用于处理无序不透明和α光线/图元交点的方法(Method for Handling Out-of-Order Opaque and Α Ray/PrimitiveIntersections)”;以及
·(卷号6610-0039/18-AU-0170)标题为“硬件中树遍历机制的前向进展和可编程超时的方法(Method for Forward Progress and Programmable Timeouts of TreeTraversal Mechanisms in Hardware)”。
技术领域
本技术涉及计算机图形,更具体地涉及光线追踪器。更具体地,该技术涉及计算机图形处理的硬件加速,包括但不限于光线追踪。更具体地,本文的示例非限制性技术涉及基于硬件的遍历协处理器,其有效地遍历加速数据结构,例如,用于实时光线追踪。更详细地,本文的技术提供了一种改进的基于硬件的遍历协处理器,其通过省略对被确定为与光线相交的一个或更多个图元的报告来加速数据结构的遍历。省略的一个或更多个图元可以包括被证明能够被省略而不会对可视化虚拟场景产生功能性影响的图元。
背景技术
如果你在你之前环顾视觉场景,你会注意到你看到的一些最有趣的视觉效果是由光线与表面相互作用产生的。这是因为光是我们看到的唯一东西。我们看不到对象-我们看到的是对象反射或折射的光。我们可以看到的大多数对象都反射光(对象的颜色由对象反射哪部分光和吸收哪部分光确定)。闪亮的表面,诸如金属表面、光泽表面、陶瓷、液体表面和其他各种对象(甚至是人眼的角膜)都可以作为镜面反射光的镜子。例如,闪亮的金属表面将以与其碰撞(hit)表面时相同的角度反射光。对象还可以通过防止光线到达相对于光源为对象后面的其他表面来投射阴影。如果你环顾四周,你会注意到反射的数量和种类以及阴影的数量、种类和长度取决于许多因素,包括场景中光的数量和类型。单个点光源(例如单个遥远的灯泡)将产生单次反射和硬阴影。面光源(诸如窗户或光板)产生不同种类的反射高光和更柔和的阴影。多个光通常会产生多个反射和更复杂的阴影(例如,三个分离的点光源将产生三个阴影,这些阴影可以根据光相对于对象的位置而重叠)。
如果你在调查场景时移动你的头部,你会注意到反射在位置和形状上发生变化(阴影也一样)。通过改变你的视点,你可以改变你的眼睛检测到的光线的不同角度。这种情况瞬间发生-你移动你的头部则立即改变视觉场景。
喝一杯茶的简单行为是复杂的视觉体验。在你反射房间内的每个光之前,桌子上有光泽的陶瓷杯的各个光泽表面,杯子为每个光投***影。杯子中茶的移动表面本身是反光的。你可以看到茶叶表面上的光的小反射图像,甚至是茶叶表面部分的较小反射,在该处液体向上弯曲以与杯壁相交。杯壁还将阴影投射到杯子中的液体表面上。将杯子举到你的嘴处会导致这些反射和阴影随着你的视点的变化而移动和闪烁,并且随着液体表面因运动而变得波动而移动和闪烁。
我们认为这些复杂的反射和阴影是理所当然的。我们的大脑擅长解码阴影和反射的位置、大小和形状,并将它们用作视觉线索。这部分地是我们如何辨别对象相对于彼此的位置、我们如何区分一个对象与另一个对象以及我们如何了解对象的构成。不同的对象表面反射不同。硬金属的镜面(镜子类型)反射创建反射对象的图像,而粗糙表面的漫反射负责颜色并以更柔和的方式照亮对象。根据光照的类型,阴影可以是柔和的、漫射的或硬的和不同的,阴影的长度和方向将取决于光线相对于对象和我们眼睛的角度。
初学艺术家通常不会尝试显示反射或阴影。他们倾向于绘制没有阴影、没有反射或高光的平面场景。过去的计算机图形也是如此。
在过去的30年中,实时计算机图形已经取得了巨大的进步。随着20世纪80年代功能强大的图形处理单元(GPU)的发展,通过提供3D硬件图形管线,实时响应于用户输入基于纹理映射的多边形图元生成3D图形显示成为可能。这种实时图形处理器建立在称为扫描变换光栅化的技术之上,该技术是从单个点或透视图确定可见性的手段。使用这种方法,三维对象从几何图元构成的表面建模,通常是多边形(诸如三角形)。扫描变换过程建立图元多边形顶点并将其投影到视图平面上,并填充图元边缘内部的点。参见例如Foley,Van Dam,Hughes等,计算机图形:原理与实践(Computer Graphics:Principles and Practice)(第2版,Addison-Wesley 1995和第三版,Addison-Wesley 2014)。
长期以来,硬件一直用于确定每个多边形表面应如何着色和纹理映射,以及光栅化着色的、纹理映射的多边形表面以供显示。典型的三维场景通常由数百万个多边形构成。快速的现代GPU硬件可以实时响应于用户输入有效地处理用于每个显示帧(每1/30或1/60秒)的数百万个图元。得到的图形显示已经用于各种实时图形用户界面,包括但不限于增强现实、虚拟现实、视频游戏和医学成像。但传统上,这种交互式图形硬件尚无法准确地建模和描绘反射和阴影。
一些已经在该基本扫描变换光栅化方法上构建了其他技术,以允许实时图形***在渲染阴影和反射时实现一定量的真实感。例如,纹理映射有时用于模拟3D场景中的反射和阴影。通常完成其的一种方法是从不同视角变换、投影和光栅化对象,将光栅化结果写入纹理映射,并对纹理映射进行采样以提供反射映射、环境映射和阴影。虽然这些技术已被证明是有用且适度成功的,但它们并不是在所有情况下都能很好地工作。例如,所谓的“环境映射”通常可能需要假设环境距离对象无限远。另外,环境映射对象通常可能无法反射自身。参见例如http://developer.download.nvidia.com/CgTutorial/cg_tutorial_chapter07.html。这些限制的结果是因为传统的计算机图形硬件-虽然足够快以实现出色的多边形渲染-但却无法执行精确逼真的反射和阴影所需的光可视化。有些人将反射和阴影的光栅/纹理近似比作AM收音机的视觉等效物。
存在另一种图形技术,其确实执行了用于反射和阴影的物理上真实的可见性确定。它被称为“光线追踪”。光线追踪是在20世纪60年代末开发出来的,并在20世纪80年代得到了改进。参见例如Apple,“一些用于固体的着色机器渲染的技术(Some Techniques forShading Machine Renderings of Solids)”(SJCC 1968)第27-45页;Whitted,“用于着色显示的改进的照明模型(An Improved Illumination Model for Shaded Display)”第343-349页,ACM通讯第23卷第6期(1980年6月);以及Kajiya,“渲染方程(The RenderingEquation)”,计算机图形学(SIGGRAPH 1986会议记录,第20卷,第143-150页)。从那时起,光线追踪已经用于非实时图形应用,例如设计和电影制作。任何看过“多莉去哪儿(FindingDory)”(2016)或其他皮克斯动画电影的人都看到了计算机图形的光线追踪方法的结果-即逼真的阴影和反射。参见例如Hery等人,“在皮克斯处迈向双向路径追踪(TowardsBidirectional Path Tracing at Pixar)”(2016)。
光线追踪是在各种渲染算法中使用的图元,包括例如路径追踪和梅特波利斯(Metropolis)光照传输。在示例算法中,光线追踪通过对穿过场景的光传输进行建模以使用射线光学计算所有全局效果(包括例如来自闪亮表面的反射)来模拟光的物理学。在光线追踪的这种使用中,当光线从可能多个光源到视点穿过三维场景时,可以尝试追踪数百或数千个光线中的每一个。通常,这些光线穿过场景相对于眼睛进行追踪,并针对场景中所有几何形状的数据库进行测试。光线可以从光向前追踪到眼睛,或从眼睛向后追踪到光,或者可以追踪它们以查看从虚拟相机开始以及从眼睛开始的路径是否具有清晰的视线。该测试确定最近的交点(以便确定眼睛可见的是什么)或者从对象表面朝向光源追踪光线以确定空间中是否存在阻止光传输到该点的任何干预。因为光线与现实中的光线相似,所以它们提供了许多真实的效果,使用过去三十年来实现的基于光栅的实时3D图形技术是不可能实现该效果的。因为来自场景内每个光源的每个照射光线在穿过场景中的每个对象时被评估,所以得到的图像看起来好像是在现实中拍摄的。因此,这些光线追踪方法长期以来一直用于专业图形应用,例如设计和电影,其中它们已经成为基于光栅的渲染的主导。
光线追踪的主要挑战通常是速度。光线追踪要求图形***针对每个帧计算和分析入射到构成场景的每个表面(并且可能由其反射)的数百万条光线中的每一条。过去,这种大量的计算复杂性是不可能实时执行的。
现代GPU 3D图形管线在渲染着色的纹理映射表面处如此快速的一个原因是它们有效地使用了相干性。在传统的扫描变换中,假设所有一切都通过公共图像平面中的公共窗口观察并向下投射到单个有利点。每个三角形或其他图元通过图形管线发送并覆盖一些像素。可以为从该三角形渲染的所有像素共享所有相关计算。因此,对应于穿过窗口的相干视线的像素的矩形图块可以对应于在同一流式处理器中以锁步方式运行的线程组。假设落在三角形边缘之间的所有像素被假设是运行相同着色器的相同材料,并从相同纹理获取相邻的纹素组。相反,在光线追踪中,光线可以在公共点(光源或虚拟相机镜头)处开始或结束,但是当它们在场景中传播并与不同材料相互作用时,它们很快发散。例如,每条光线执行搜索以找到最近的对象。可以执行一些高速缓存和结果共享,但由于每条光线可能会碰到不同的对象,因此GPU传统上利用的、与纹理映射、着色三角形有关的相干性类型不存在(例如,不存在一个共同的有利点、窗口和图像平面用于光线追踪)。这使得光线追踪在计算上比其他图形方法更具挑战性-因此在交互的基础上执行起来要困难得多。
已经进行了许多研究以使得追踪光线的过程更加有效和及时。参见例如,Glassner,光线追踪介绍(Ray Tracing Introduction)(Academic Press Inc.,1989)。因为光线追踪中的每条光线本质上独立于其余光线进行评估,所以光线追踪被称为“令人尴尬地平行”。参见例如
Figure BDA0002085068200000051
等人,实时渲染在章节9.8.2,412页(第三版.CRC出版社2008)。如上所述,光线追踪涉及针对场景中的所有对象和表面有效地测试每条光线。称为“加速数据结构”和相关过程的优化允许图形***在加速数据结构上使用“分而治之(divide-and-conquer)”的方法来建立光线碰撞的表面以及光线未碰撞的表面。每条光线以个性化的方式遍历加速数据结构。这意味着将更多处理器专用于光线追踪可以提供近乎线性的性能提升。随着图形处理***的并行性的增加,一些人开始设想可以实时执行光线追踪的可能性。例如,2000年中期在萨尔州大学的工作产生了一个早期的用于交互式光线追踪的专用硬件***,其为使用几何着色器、顶点着色器和光照着色器提供了一定程度的可编程性。参见Woop等人的“RPU:用于实时光线追踪的可编程光线处理单元(RPU:AProgrammable Ray Processing Unit for Real Time Ray Tracing)”(ACM 2005)。作为另一示例,先进的渲染技术基于源自ARM1的AR250/350渲染处理器阵列开发了“RenderDrive(渲染器驱动)”,并通过自定义管线进行增强,以用于光线/三角形相交和SIMD向量和纹理数学,但没有固定功能遍历逻辑。参见例如http://www.graphicshardware.org/previous/www_2001/presentations/Hot3D_D aniel_Hall.pdf。
然后,在2010年,NVIDIA利用NVIDIA GPU和其他高度并行架构的高并行度来开发OptiXTM光线追踪引擎。参见Parker等人的“OptiX:通用光线追踪引擎(OptiX:A GeneralPurpose Ray Tracing Engine)”(ACM Transactions on Graphics,Vol.29,No.4,Article66,July 2010)。除了API(应用程序编程接口)的改进之外,OptiXTM提供的一项改进是改进用于查找光线和场景几何形状之间的交点的加速数据结构。这种加速数据结构通常是由光线追踪遍历算法使用的空间或对象分层,以有效地搜索可能与给定光线相交的图元。OptiXTM提供了许多不同的加速结构类型,可供应用程序选择。节点图中的每个加速结构可以是不同的类型,允许高质量静态结构与动态更新的静态结构的组合。
OptiXTM可编程光线追踪管线提供了显着的进步,但是通常仍然无法在相对便宜的计算平台上为复杂的3D场景提供对用户输入的实时交互响应。从那时起,NVIDIA一直在开发用于光线追踪的硬件加速能力。参见例如US9,582,607;US 9,569,559;US20160070820以及US20160070767。
鉴于用于响应于例如用户输入渲染任意复杂度的高质量图像的真实交互式实时光线追踪图形处理***的巨大潜力,进一步的工作是可能的并且是期望的。
附图说明
图1示出了示例性非限制性光线追踪图形***。
图2A示出了示例性镜面对象。
图2B示出了包围盒(Bounding Volume)内的示例性对象。
图2C示出了图2B的包围盒的示例性盒细分。
图2D、图2E和图2F示出了包围盒的盒细分的示例性进一步水平,以创建层次包围盒(BVH)。
图2G示出了由图元表面组成的对象的示例部分,在这种情况下是三角形。
图3A-图3C示出了用于确定光线是否穿过包含几何形状的包围盒以及光线是否与几何形状相交的示例性简化光线追踪测试。
图4示出了示例性光线追踪流程图。
图5A-图5C示出了示例性不同的光线-图元相交场景。
图6A和图6B示出了纹理映射如何影响光线-图元相交结果的示例。
图7A和图7B示出了光线实例变换。
图8A示出了示例性非限制性层次包围盒(BVH)。
图8B示出了图形或树状的示例性加速数据结构。
图9示出了包括树遍历单元(TTU)的简化示例性非限制遍历协处理器。
图10A示出了示例性非限制性光线追踪着色管线流程图。
图10B和图10C示出了更详细的光线追踪管线。
图11示出了用于加速的光线-图元相交测试的示例非限制性方法。
图12示出了根据示例性实施例的结果队列。
图13示出了用于加速的光线-三角形相交测试的示例非限制性方法的流程图。
图14示出了用于生成图像的示例性流程图。
图15示出了示例性并行处理单元(PPU)。
图16示出了示例性存储器分区单元。
图17示出了图15的并行处理单元内的示例通用处理集群(GPC)。
图18是由图17的GPC实现的图形处理管线的概念图。
图19和图20示出了示例性流式多处理器。
图21是使用图15的PPU实现的处理***的概念图。
图22展开图21以示出另外的互连设备。
具体实施方式
本文的技术提供硬件能力,其将光线追踪加速到这样的程度,即它将光线追踪的能力带到游戏和其他交互式实时计算机图形,最初在阴影和反射中实现高效质量并最终实现全局照明。在实践中,这意味着通过相同图形渲染***上的软件可能达到的数量级的因子或更高的因子来加速光线追踪。
更详细地,示例性非限制性技术提供了用于加速光线追踪的专用硬件。在非限制性实施例中,硬件协处理器(本文称为“遍历协处理器”或在一些实施例中称为“树遍历单元”或“TTU”)加速支持交互式光线追踪的某些过程,包括光线-包围盒相交测试、光线-图元相交测试和光线“实例”变换。
在一些非限制性实施例中,遍历协处理器对加速数据结构执行查询,以用于在潜在大规模并行流式多处理器(SM)上运行的进程。遍历协处理器遍历加速数据结构以发现关于给定光线如何与加速数据结构描述或表示的对象交互的信息。对于光线追踪,与例如在运行不同类型的线程(例如,顶点线程和像素线程)的逻辑管线阶段之间执行一次操作的固定功能单元相比,遍历协处理器是可调用的。
在一些非限制性实施例中,加速数据结构包括递归地封装越来越小的包围盒细分的包围盒的层次(层次包围盒或BVH)。最大容量的包围盒可以称为“根节点”。包围盒的这种层次的最小细分(“叶节点”)包含项目(item)。项目可以是定义对象表面的图元(例如,诸如三角形的多边形)。或者,项目可以是球体,其包含作为项目存在的全新级别的世界,因为它尚未添加到BVH(想想猫身上的衣领魅力来自“黑衣人”,其中包含它里面的整个微型星系)。如果项目包括图元,则遍历协处理器针对图元测试光线,以确定与光线相交的对象表面以及沿着光线可见的对象表面。
遍历协处理器针对宽范围的包围盒执行每条光线的测试,并且可以剔除不与该光线相交的任何包围盒。从界定场景中所有一切的根节点开始,遍历协处理器针对较小(可能重叠)的子包围盒测试每条光线,这又界定了BVH的后代分支。光线跟随光线碰撞其他节点的包围盒的子指针,直到达到BVH的叶或终端节点(盒)。一旦遍历协处理器遍历加速数据结构以到达包含几何图元的终端或“叶”节点,它就执行加速的光线-图元相交测试,其确定光线是否与该图元相交(因此与图元定义的对象表面相交)。光线图元测试可以提供有关与光线相交的图元的附加信息,其可用于确定着色和可视化所需的表面的材料属性。通过加速数据结构的递归遍历使得遍历协处理器能够发现与光线相交的所有对象图元,或者与光线相交的最接近的(从视点的角度看)图元(在某些情况下,它是沿着光线的视点唯一可见的图元)。
遍历协处理器还加速每条光线从世界空间到对象空间的变换,以获得图元的越来越精细的包围盒封装,并减少场景上的那些图元的复制。在场景中不同位置、方向和比例下多次复制的对象可以在场景中表示为实例节点,其将世界空间BVH中的包围盒和叶节点与可以应用于世界空间光线的变换相关联,以将其变换为对象坐标空间,以及表示为指向对象空间BVH的指针。这避免了在世界空间中多次复制对象空间BVH数据,从而节省了存储器和相关的存储器访问。实例变换通过将光线变换为对象空间而不是要求将几何形状或层次包围盒变换为世界(光线)空间来提高效率,并且还与图形处理执行的以使图元可视化的附加的传统光栅化过程兼容。
因此,目前公开的非限制性实施例提供了遍历协处理器,3D图形处理管线中的一个或一组流式多处理器SM的新子单元。为了理解遍历协处理器在整体图片中适合的位置,理解大多数或所有现代光线追踪器所采用的算法的一些基本原理可能会有所帮助。但是应该指出的是,本文的技术提供了一种通用能力,用于为在GPU中运行的线程确定沿着指定方向从给定点开始的最近的可见事物,或者两个点之间是否有任何东西。这种能力的一个常见用例是在开始追踪来自已经在三角形上光栅化的点的光线的过程中使用传统扫描变换技术。所公开的技术可以但不一定取代或替代扫描变换技术,并且通常可以增强它并且与扫描变换技术结合使用以增强图像的照片般真实的反射、阴影和其他效果。
光线追踪技术
通常,光线追踪是一种渲染方法,其中光线用于确定场景中各种元素的可见性。光线追踪可用于确定沿光线是否有任何对象可见(例如,测试几何图元上的阴影点与光源上的点之间的遮挡物),并且还可用于评估反射(例如,可以涉及执行遍历以确定沿着视线的最近的可见表面,使得在流式处理器上运行的软件可以评估与被碰撞的内容相对应的材料着色功能-这反过来可以根据相交的对象的材料特性发射一条或更多条附加光线到场景中),以确定沿着光线返回眼睛的光。在经典的Whitted式光线追踪中,光线从视点通过像素网格射入场景,但其他路径遍历也是可能的。通常,针对每条光线,找到最近的对象。然后可以通过将光线从其射到场景中的每个光源并且发现其间是否有任何对象来确定该交点被照亮或处于阴影中。不透明对象阻挡光线,而透明对象则会使光线衰减。其他光线可以从交点产生。例如,如果相交表面是有光泽的或镜面的,则在反射方向上产生光线。光线可以接受相交的第一个对象的颜色,而其又测试阴影的交点。递归地重复该反射过程,直到达到递归限制或后续反弹的潜在贡献低于阈值。也可以在透明固体对象的折射方向上产生光线,并再次递归地评估。参见上文引用的
Figure BDA0002085068200000101
等人。因此,光线追踪技术允许图形***开发物理上正确的反射和阴影,其不遭受扫描变换技术的限制和伪影。
遍历协处理器
遍历协处理器执行的基本任务是针对场景中的所有图元(在一个实施例中通常是三角形)测试光线,并报告最接近的碰撞(根据沿光线测量的距离)或简单地报告遇到的第一(不一定最近)碰撞,这取决于用例。简捷算法将是O(n)强力搜索。然而,通过预先处理场景几何形状并提前构建合适的加速数据结构,可以将平均情况复杂度降低到O(log n)。在光线追踪中,当使用加速数据结构时,找到光线最接近(或针对阴影任何)交点的时间通常是n个对象的阶数O(log n)。例如,通常用于现代光线追踪加速数据结构的类型的层次包围盒(BVH)通常具有O(log n)搜索行为。
层次包围盒
现代光线追踪器最常使用的加速数据结构是包括嵌入的轴对齐包围盒(AABB)的层次包围盒(BVH)。BVH的叶节点包含要相交测试的图元(例如,三角形)。BVH通常由图形或树形结构数据表示来表示。在这种情况下,遍历协处理器可以称为“树遍历单元”或“TTU”。
给定BVH,光线追踪相当于树搜索,其中光线所访问的树中的每个节点具有用于每个后代分支或叶的包围盒,并且光线仅访问其相应包围盒与光线相交的后代分支或叶。通过这种方式,只有少数图元必须明确地进行相交测试,即那些驻留在与光线相交的叶节点中的图元。在示例性非限制性实施例中,遍历协处理器加速树遍历(包括光线-盒测试)和光线-图元测试两者。作为遍历的一部分,遍历协处理器还可以处理“实例变换”-将光线从世界空间坐标系变换为实例网格(对象空间)的坐标系,例如,以便避免将图元顶点变换到世界空间的计算复杂性。它可以以MIMD(多指令,多数据)方式实现,这意味着在遍历协处理器内部一次独立地处理光线。
示例的非限制性实时交互式光线追踪***
图1示出了用于使用场景或一个或更多个对象的三维(3D)数据生成图像的示例的实时光线交互式追踪图形***100。***100包括输入设备110、一个或更多个处理器120、一个或更多个图形处理单元(GPU)130、存储器140和一个或更多个显示器150。图1中所示的***可以采用任何形状因素,包括但不限于个人计算机、智能手机或其他智能设备、视频游戏***、可穿戴虚拟或增强现实***、基于云的计算***、车载图形***,片上***(SoC)等。
处理器120可以是多核中央处理单元(CPU),其可操作以实时交互式响应于输入设备110而执行应用程序,其输出包括用于在显示器150上显示的图像。显示器150可以是任何种类的显示器,例如固定显示器、头戴式显示器(诸如显示器眼镜或护目镜)、其他类型的可穿戴显示器、手持显示器、车载显示器等。例如,处理器120可以基于从输入设备110(例如,操纵杆、惯性传感器、环境光传感器等)接收的输入执行应用程序,并指示GPU 130生成示出应用程序进展的图像以在显示器150上显示。
基于处理器120上的应用程序的执行,处理器可以发出用于GPU 130的指令,以使用存储在存储器140中的3D数据生成图像。GPU 130包括用于实时加速图像生成的专用硬件。例如,GPU 130能够实时处理用于数千或数百万个图元(多边形)的信息,这是由于GPU能够比传统软件-驱动的CPU更快地执行重复和高度并行的专用计算任务,例如多边形扫描变换。例如,与处理器120不同,其可具有多个核心,具有可一次处理少量软件线程的大量高速缓存存储器,GPU 130可包括数百或数千个处理核心或并行运行的“流式多处理器”(SM)132。
在一个示例性实施例中,GPU 130包括多个可编程流式多处理器(SM)132,以及包括图元引擎134和光栅引擎136的基于硬件的图形管线。GPU130的这些组件被配置为使用称为“扫描变换光栅化”的技术执行实时图像渲染,以在二维显示器150上显示三维场景。在光栅化中,3D场景的几何构建块(例如,点、线、三角形、四边形、网格等)被映射到显示器的像素(通常通过帧缓冲存储器)。
GPU 130将3D模型的几何构建块(即,诸如三角形之类的多边形图元)变换为2D图像的像素,并为每个像素分配初始颜色值。图形管线可以通过定义或调整像素的颜色值来将着色、透明度、纹理和/或颜色效果应用于图像的部分。最终像素值可以经过抗锯齿、过滤并提供给显示器150以供显示。多年来,许多软件和硬件的改进使用光栅化技术以一个或更多个显示器150上的高显示分辨率(例如4096x 2160像素或更高)在实时图形(即每秒30至60帧)所需的帧速率下提高了主观图像质量。
遍历协处理器添加到架构
为了使GPU 130能够以高效的方式实时地执行光线追踪,向GPU提供了耦合到一个或更多个SM 132的遍历协处理器138。遍历协处理器138包括被配置为执行通常在光线追踪算法中利用的操作的硬件组件。遍历协处理器138的目标是将光线追踪中使用的操作加速到这样的程度,即它将光线追踪的能力带到实时图形应用(例如,游戏)中,从而实现高质量的阴影、反射和全局照明。如下面更详细讨论的,遍历协处理器138的结果可以与GPU 130中执行的其他图形相关操作一起使用或作为其替代。
在所示的示例性架构中,称为“遍历协处理器”138的新硬件组件用于加速某些任务,包括但不限于光线追踪。光线追踪是指将光线投射到场景中,并确定该光线是否以及在哪儿与场景的几何形状相交。这种基本的光线追踪可见性测试是计算机图形学中作为各种渲染算法和技术基础的基础图元。例如,光线追踪可以与光栅化和z缓冲一起使用或作为光栅化和z缓冲的替代,用于采样场景几何形状。它还可以用作环境映射和阴影纹理的替代(或与之结合),以产生比通过纹理技术或其他光栅“黑客”实现的更逼真的反射、折射和阴影效果。为了克服可以通过光栅化实现的图像质量的限制,***100还可以使用光线追踪技术生成整个图像或图像的部分。光线追踪也可以用作基本图元,以精确地模拟基于物理的渲染算法中的光传输,例如路径追踪、光子映射、Metropolis光传输和其他光传输算法。
更具体地,SM 132和遍历协处理器138可以协作,以将光线投射到3D模型中并确定该光线是否以及在何处与模型的几何形状相交。光线追踪直接模拟穿过虚拟环境或场景的光。光线相交的结果与表面纹理、观察方向和/或光照条件一起用于确定像素颜色值。由与遍历协处理器138一起工作的SM 132执行的光线追踪允许计算机生成的图像以与现实世界的照片或视频无法区分的方式捕获阴影、反射和折射。由于光线追踪技术部分地由于需要追踪的大量光线而比光栅化更加计算密集,因此遍历协处理器138能够在硬件中加速该过程的某些计算密集度更高的方面。
在本文的示例非限制性技术中,遍历协处理器138加速光线盒测试和光线图元测试两者。作为遍历的一部分,它还可以处理至少一级实例变换,将光线从世界空间坐标系变换为实例网格的坐标系。在示例非限制性实施例中,遍历协处理器138以MIMD方式完成所有这些操作,这意味着在遍历协处理器内部独立地处理光线一次。
在示例非限制性实施例中,遍历协处理器138作为SM(流式多处理器)132的服务方(协处理器)操作。换句话说,在示例非限制性实施例中,遍历协处理器138不独立地操作,而是遵循SM 132的命令以比SM 132自身执行更有效地执行某些计算密集的光线追踪相关任务。
在所示的示例中,遍历协处理器138通过SM 132指令接收命令并将结果写回SM寄存器文件。对于许多常见用例(例如,具有至多一级实例化的不透明三角形),遍历协处理器138可以服务于光线追踪查询而无需与SM 132进一步交互。更复杂的查询(例如,除了三角形或多级实例化之外涉及经过α测试的三角形、图元),可能需要多次往返。除了追踪光线之外,遍历协处理器138还能够执行更一般的空间查询,其中AABB或两个AABB(我们称之为“波束”)之间的挤压盒(extruded volume)取代光线。因此,虽然遍历协处理器138特别适合于加速与光线追踪相关的任务,但它也可用于执行除光线追踪之外的任务。
除了遍历协处理器138之外,用于支持图1的***100的示例非限制性技术还为多个单元提供了额外的加速光线追踪增强以及用于BVH构建的大量努力。BVH构建不需要是硬件加速的(尽管在一些非限制性实施例中可以是),而是可以使用在SM 132和/或CPU 120和/或其他开发***上(例如,在应用程序开发期间)运行的高度优化的软件例程来实现。以下说明描述了遍历协处理器138的软件可见行为、与周围单元(SM 132和存储器子***)的接口以及作为完整光线追踪解决方案的一部分的附加特征,例如对SM 132组和存储器高速缓存***的某些增强等。
如上所述,遍历协处理器138允许快速遍历加速数据结构(例如,BVH)以确定数据结构中哪些图元(例如,用于生成场景的三角形)与查询数据结构(例如,光线)相交。例如,遍历协处理器138可以确定加速数据结构中的哪些三角形与光线相交并将结果返回到SM132。然而,在界面和线程同步方面,将对每个三角形交点的结果返回到SM 132是昂贵的。遍历协处理器138提供硬件逻辑,该硬件逻辑被配置为隐藏那些可被证明能够被隐藏而不会对结果场景产生功能性影响的项目或三角形。将结果返回到SM以及线程之间的同步步骤的减少极大地改善了遍历的整体性能。
仅在软件中完成的先前实现需要检查相交的所有三角形或项目范围。在本申请中公开的遍历协处理器138的示例非限制性实施例提供了在没有SM 132干预的情况下在遍历协处理器138内丢弃的一些交点,使得较少的交点返回到SM 132并且SM 132不必检查所有相交的三角形或项目范围。
遍历加速数据结构
加速光线追踪的好方法是使用加速数据结构。加速数据结构以有助于快速确定特定光线很可能与之相交的对象的哪个部分以及快速地拒绝光线不会与之相交的场景的大部分的方式表示对象或场景的3D模型。层次包围盒(BVH)数据结构是一种类型的加速数据结构,其可以帮助减少要测试相交的数量。BVH数据结构表示具有包围盒的场景或对象,并将包围盒细分为越来越小的包围盒,其终止于包含几何图元的叶节点。包围盒是分层的,这意味着最高级别(level)包含它下面的级别,该级别包含它下面的下一级别,依此类推。在一个实施例中,叶节点可能潜在地与层次包围盒中的其他叶节点重叠。
为了说明层次包围盒如何工作,图2A-图2G示出了递归地细分为越来越小层次的包围盒的茶壶。图2A示出了茶壶对象,图2B示出了包围整个茶壶的包围盒202(在这种情况下是盒子、立方体或长方体)。可以通过其顶点有效地限定的包围盒202提供对象的空间位置的指示,并且通常尺寸略大于对象。
加速结构构造的第一阶段获取所引用几何形状的包围盒。这是通过对对象中的每个几何图元执行包围盒程序来实现的,该包围盒程序返回其输入图元的保守轴对齐包围盒,例如图2B中所示的盒202。使用这些包围盒作为加速结构的基本图元,提供了针对任意用户定义的几何形状(包括单个结构内的几种类型的几何形状)追踪光线的必要抽象。因为在图2B中,包围盒202大于并且完全包含茶壶,不与包围盒相交的光线不能与茶壶相交,尽管与包围盒相交的光线可能或可能不与茶壶相交。因为包围盒202容易由其在3D空间中的顶点的x,y,z坐标定义,并且光线由其在3D空间中的x,y,z坐标定义,所以用于确定光线是否与包围盒202相交的光线-包围盒测试是简单的(尽管可以使用一些变换来调整到不同的坐标系,如下面将解释的)。
图2C示出了细分为较小的内含(contained)包围盒的包围盒202。虽然为了说明的目的而在此示出的细分方案是所谓的8进制细分或“八叉树”,其中每个盒被细分为八个统一尺寸的较小盒,许多其他空间层次和细分方案是已知的,例如二进制树、四进制树、k-d树、二进制空间分区(BSP)树和层次包围盒(BVH)树。参见例如USP 9,582,607。
图2C中所示的每个细分的包围盒可以进一步细分。图2D示出了图2C的细分盒204中的一个被进一步细分以提供额外细分的封装的包围盒。如图2D所示,一些细分的包围盒包括茶壶的部分而一些不包括。不包含茶壶的部分的盒不会进一步细分,因为进一步的细分不提供关于茶壶的进一步空间信息。已经细分的包含茶壶的至少一部分的包围盒可以进一步递归地细分-就像Seuss博士的帽子里的猫回来啦(1958年)的帽子里出现的一连串越来越小的猫一样。包含几何形状的包围盒202内的空间的部分被递归地细分,以允许遍历协处理器138使用盒细分来有效地发现几何形状相对于任何给定光线的位置。可以注意到,虽然盒的空间细分或主动细分是可能的,但许多实现将创建提前定义盒和子盒的层次结构。在这种情况下,构建器通常可以从各个三角形向上构建层次,而不是从整个场景向下构建。向上构建意味着你不需要确定某个细分的盒是否包含任何内容,因为根据定义它包含在盒细分层次中位于其下面的内容。
图2E示出了另外的这样的包围盒204细分为另一个较小的内含包围盒206,该包围盒206在该示例中仅包含茶壶的壶嘴加上茶壶的壁上的另一个表面,并且图2F示出了将包围盒206附加细分为更小的内含细分208,该细分208封装茶壶的壶嘴的末端。取决于构建BVH的方式,可以根据需要不断更进一步细分包围盒208-并且遍历协处理器138使图1***100能够有效地将BVH向下遍历到任何任意细分级别。递归细分的数量和配置将取决于被建模的3D对象的复杂性和配置以及其他因素,例如期望的分辨率、对象距视点的距离等。
在某些细分级别(对于BVH的不同部分可以是不同级别),遍历协处理器138遇到构成被建模的封装对象的几何形状。使用树的类比,连续的盒细分是树干、分枝、树枝和细枝,并且最终在树的尖端即叶上显示几何形状。在这种情况下,图2G显示了由几何图元的示例性网格定义的茶壶壶嘴的表面。所示的几何图元是三角形,但是可以使用其他几何图元,例如四边形、线条、矩形、二次曲面、补丁或熟悉现有技术的人所知的其他几何图元(在一个实施例中,这样的其他类型的图元可以表示为或变换为三角形)。网格中的几何图元表示被建模的对象的3D表面的形状。此处示出的示例是网格,但是所包围的几何形状可以包括不连续的几何形状,例如可能未连接的粒子。在示例性非限制性实施例中,遍历协处理器138还利用该几何形状加速光线相交测试,以快速确定任何给定光线碰撞哪个三角形。确定光线-图元相交包含将每个图元的顶点的空间xyz坐标与光线的xyz坐标进行比较,以确定图元定义的光线和表面是否占据相同的空间。光线-图元相交测试可能是计算密集型的,因为可能要测试许多三角形。例如,在图2G所示的网格中,仅茶壶的壶嘴由超过一百个三角形组成-尽管在一些实现方式中可以更有效地进一步进行盒细分,从而限制在任何此类“叶节点”到类似16或更少的东西的三角形的数量。
如上所述,光线追踪程序确定场景的什么几何图元与光线相交。然而,由于3D场景中的大量图元,测试每个几何图元的相交可能不是有效或可行的。加速数据结构(例如BVH)允许快速确定哪些包围盒可以被忽略,哪些包围盒可以包含相交的几何图元,以及哪些相交的几何图元对于可视化而言是重要的而哪些不是。
光线相交测试
图3A-图3C示出了应用于包括三角形网格320的图2G包围盒208的光线追踪。图3A示出了包括包围盒310和315的虚拟空间中的光线302。为了确定光线302在网格320中是否与一个或更多个三角形相交,每个三角形可以直接针对光线302进行测试。但是为了加速该过程(因为该对象可以包含数千个三角形),首先针对包围盒310和315测试光线302。如果光线302不与包围盒相交,则它不与包围盒内部的任何三角形相交,并且可以针对该光线忽略包围盒内部的所有三角形。因为在图3A中,光线302未碰撞(miss)了包围盒310,所以不需要对该包围盒内的网格320的三角形进行相交测试。虽然包围盒315与光线302相交,但是包围盒315不包含任何几何形状,因此不需要进一步的测试。
另一方面,如果光线(诸如图3B中所示的光线304)与包含几何形状的包围盒310相交,则光线可能与或可能不与包围盒内的几何形状相交,因此需要对几何形状本身执行进一步的测试以找到可能的相交。因为图3B和图3C中的光线304、306与包含几何形状的包围盒310相交,所以需要执行进一步的测试以确定包围盒内部的任何(以及哪些)图元是否相交。在图3B中,对与图元的相交的进一步测试将指示即使光线304穿过包围盒310,它也不与包围盒所包围的任何图元相交(或者,如上所述,包围盒310可以进一步进行盒细分,以便可以使用包围盒相交测试来揭示光线不与任何几何形状相交,或者更具体地,光线可以与哪些图元相交)。
图3C示出了包围盒310与光线306相交并且包含与光线306相交的几何形状的情况。遍历协处理器138测试光线306和各个图元之间的相交,以确定光线与哪些图元相交。
光线追踪操作
图4是概述遍历协处理器138如上所述与一个或更多个SM 132协作执行的示例性光线追踪操作的流程图。图4的操作由遍历协处理器138和与其交互的SM 132协作执行。因此,遍历协处理器138可以从SM 132接收光线的标识,并且遍历状态列举光线必须穿过的一个或更多个BVH中的一个或更多个节点。遍历协处理器138确定光线与BVH数据结构的哪些包围盒(“光线-complet”测试512)相交,并随后确定光线是否与相交的包围盒中的一个或更多个图元相交以及与哪些三角形相交(“光线-图元测试”520)。在示例性非限制性实施例中,“complets”(压缩小树)指定层次包围盒的根节点或内部节点(即,盒),其具有子项(child),子项是其他complet或每个complet的单个类型的叶节点。
首先,遍历协处理器138检查光线的遍历状态。如果遍历协处理器138保持用于光线的堆栈为空,则遍历完成。如果堆栈顶部存在条目,则遍历协处理器138向存储器子***发出请求以检索该节点。然后,遍历协处理器138执行包围盒测试512以确定BVH数据结构的包围盒是否与SM 132指定的特定光线相交(步骤512、514)。如果包围盒测试确定包围盒未与光线相交(步骤514中为“否”),则不需要对可视化执行任何进一步测试,并且遍历协处理器138可以将该结果返回到请求SM 132。这是因为如果光线未碰撞包围盒(如图3A中关于包围盒310),则光线将不会碰撞被测试的包围盒内的所有其他更小包围盒以及包围盒包含的任何图元。
如果由遍历协处理器138执行的包围盒测试显示包围盒与光线相交(步骤514中为“是”),则遍历协处理器确定包围盒是否可以细分为更小的包围盒(步骤518)。在一个示例性实施例中,遍历协处理器138本身不一定执行任何细分。相反,BVH中的每个节点具有一个或更多个子节点(其中每个子节点是BVH中的叶或分支)。对于每个子节点,都有一个包围盒和一个指向分支或叶节点的指针。当光线使用遍历协处理器138处理节点时,它正在针对节点的子节点的包围盒测试自身。光线只将堆栈条目推送到其堆栈上,用于那些其代表性包围盒被碰撞的分支或叶。当光线在示例性实施例中获取节点时,它不测试节点的包围盒-它针对节点的子节点的包围盒进行测试。遍历协处理器138按照由光线配置确定的顺序将其包围盒被光线碰撞的节点推送到光线的遍历堆栈上。例如,可以按照节点在存储器中出现的顺序或者按照它们沿着光线的长度出现的顺序或以某种其他顺序将节点推送到遍历堆栈。如果存在包围盒的进一步细分(步骤518中为“是”),则访问包围盒的那些进一步细分,并且对每个得到的细分包围盒执行包围盒测试,以确定哪个细分包围盒与光线相交以及哪个不与光线相交。在该递归过程中,可以通过测试514消除一些包围盒,而其他包围盒可以导致通过遍历协处理器138递归地应用步骤512-518来对越来越进一步的细分进行相交测试。
一旦遍历协处理器138确定与光线相交的包围盒是叶节点(步骤518中为“否”),遍历协处理器执行图元(例如,三角形)相交测试520,以确定光线是否与相交的包围盒中的图元相交以及光线与哪些图元相交。因此,遍历协处理器138执行相交的后代分支节点的深度优先遍历,直到到达叶节点。遍历协处理器138处理叶节点。如果叶节点是图元范围,则遍历协处理器138针对光线测试它们。如果叶节点是实例节点,则遍历协处理器138应用实例变换。如果叶节点是项目范围,则遍历协处理器138将它们返回到请求SM 132。在示例性非限制性实施例中,SM 132可以命令遍历协处理器138执行不同种类的光线-图元相交测试并取决于来自应用程序(或应用程序在其上运行的软件堆栈)的操作报告不同的结果,并由SM中继到TTU。例如,SM 132可以命令遍历协处理器138报告由相交测试揭示的最近的可见图元,或者报告与光线相交的所有图元,而不管它们是否是最近的可见图元。SM 132可以将这些不同的结果用于不同类型的可视化。一旦遍历协处理器138完成处理叶节点,就可以有其他分支节点(先前推送到光线的堆栈上)进行测试。
多个交点
更详细地,如图3C所示,任何给定的光线可以与包围盒内的多个图元相交。给定图元内的光线相交是否对可视化产生影响取决于该图元的属性和位置以及SM 132正在执行的可视化过程。例如,图元可以是不透明的、透明的或部分透明的(即半透明的)。不透明的图元将阻挡光线穿过图元,因为眼睛无法透过图元的不透明表面看到。透明图元将允许光线通过(因为眼睛可以透过透明图元看到),但情况可能更复杂。例如,透明图元可能具有镜面特性,这会导致光线的某些部分反射(考虑来自窗玻璃的反射),光线的其余部分通过。其他透明图元用于提供纹理映射到的表面。例如,树的每个个体的叶可以由透明图元建模,叶的图像被纹理映射到该透明图元上。
图5A-图5C示出了使用三个三角形的示例的一些场景,这三个三角形被假设在相同的包围盒中并且每个三角形与光线相交。图5A示出了朝向这三个三角形的光线,其中光线相对于不透明的视点遇到第一个三角形。因为“前方”(从眼睛的光线方向看)相交的三角形是不透明的,所以三角形将阻挡光线,因此光线也不会到达其他三角形,即使光线在空间上与它们相交。在该示例中,在识别出不透明三角形的相交之后,可以忽略(剔除)从视点看的不透明三角形“后面”的三角形,因为“前”不透明三角形沿着光线隐藏了用户视图中的其他三角形。在图5A-图5C中用虚线表示剔除。在这种情况下,遍历协处理器138可能仅需要向SM 132报告第一不透明三角形的标识。
图5B示出了指向相同三个三角形的光线,但是现在最近的可见三角形是部分透明的而不是不透明的。因为最近的可见相交三角形是至少部分透明的,所以光线可以穿过它以碰撞它后面的不透明三角形。在这种情况下,不透明的三角形将通过部分透明的三角形可见,但会阻挡用户沿着光线的第三三角形的视野。本文,遍历协处理器138可以向SM 132报告两个前面三角形的标识,但是不报告第三个被剔除的三角形,即使光线在空间上与该第三三角形相交。在本文发现顺序可能很重要。在α和不透明三角形的情况下,如果首先发现不透明,则遍历协处理器138将不透明三角形返回到具有遍历状态的SM 132,该遍历状态将在α三角形处重新开始测试。虽然本文暗示α意味着透明,但它实际上意味着“将我返回到SM 132并让SM决定如何处理它。”例如,可以根据纹理或函数修剪α三角形,以便三角形的部分被切掉(即,不存在、不透明)。遍历协处理器138不知道SM132将如何处理α三角形(即,它不处理与修剪的三角形不同的透明三角形)。因此,α三角形可能阻挡或可能不阻挡或着色沿着光线从点到达它们之外的光,并且在示例性实施例中,它们需要SM 132干预来处理/确定那些事物。
图5C示出了光线遇到的前两个三角形是部分透明的场景。因为第一和第二相交三角形是至少部分透明的,所以光线将穿过第一和第二三角形以照射在也相交的第三不透明三角形上。因为第三个相交的三角形是不透明的,它将阻挡光线,并且光线不会照射在第三个三角形后面的任何其他三角形上,即使它们可能在空间上与光线相交。在这种情况下,遍历协处理器138可以将所有三个三角形报告给SM 132,但不需要报告不透明三角形后面的任何其他三角形,因为不透明三角形阻挡光线到达那些附加三角形。
然而,在一些模式中,SM 132可能需要知道与光线相交的所有三角形的身份,而不管它们是不透明的还是透明的。在那些模式中,遍历协处理器138可以简单地执行相交测试并返回光线在空间上与之相交的所有三角形的身份(在这种模式中,遍历协处理器将返回图5A-图5C中所示的所有三种情形的相同相交结果),并允许SM 132对其进行分类-或者在某些情况下命令遍历协处理器138对这些相同的三角形进行更多测试。
如下面将更详细讨论的,当光线与不透明三角形相交时,遍历协处理器138可以在某些操作中被编程以将被测光线的长度减小到不透明三角形相交的位置,因此它将不报告相交三角形“后面”的任何三角形。当确定部分透明三角形与光线相交时,遍历协处理器138将返回光线照射到的更完整的三角形列表以用于可视化,并且请求SM 132可以执行进一步处理以基于例如三角形的任何纹理或其他属性确定光线是否将被阻挡、传递或部分传递以及部分反射。在示例性实施例中,遍历协处理器138不能访问三角形的纹理属性,因此不会尝试确定关于那些属性的可视化。
纹理或其他表面修改
例如,图6A和图6B示出了透明三角形610,其具有应用于三角形的叶的纹理615。人们可以想到一个由树脂玻璃制成的三角形,上面有一片叶贴花。如图6A所示,光线620在所施加的纹理615之外的点处与透明三角形610相交。因为光线620与所施加的纹理615外部的三角形相交,所以纹理将不会阻挡光线620并且光线将会不受阻挡地穿过透明三角形610。这就像是能够透过未经叶贴花覆盖的树脂玻璃三角形的部分看到。注意,在一个示例性实施例中,SM 132进行可见性确定,因为遍历协处理器138不一定能够访问关于叶贴花的信息。遍历协处理器138通过向SM返回光线与之相交的三角形的识别以及关于该三角形的属性的信息来帮助SM 132。
在图6B中,光线630与施加纹理615的透明三角形相交。SM 132将基于纹理615将阻挡光线630还是允许光线630通过来确定遍历协处理器138的后续遍历是否是必要的。如果光线630被纹理615阻挡,则透明三角形610后面的其他三角形(其可能已经与光线630相交)将被纹理阻挡并且不会有助于沿着光线的可视化。在本文的示例性非限制性实施例中,遍历协处理器138不能访问纹理信息,因此它不会尝试加速该确定。遍历协处理器138可以例如将光线和对象内的各种三角形之间的所有相交返回到请求SM 132,然后SM可以使用图元引擎134进行进一步的光线追踪可视化确定。在其他示例性实施例中,遍历协处理器138可以通过与纹理映射单元和图元引擎134内的3D图形管线的其他部分交互来加速这些测试中的一些或全部,以进行必要的可视化确定。
协调变换
图2A-图3C仅涉及单个对象,即茶壶。正如你现在所在的房间包含多个对象一样,大多数3D场景都包含许多对象。例如,包含茶壶的3D场景可能还包含杯子、碟子、牛奶罐、勺子、糖碗等,所有这些都放在桌子上。在3D图形中,这些对象中的每一个通常是独立建模的。然后,图形***100使用来自处理器120的命令将所有模型以期望的位置、方向和尺寸放在公共场景中以便可视化(就像你将设置和安排用于供应茶的桌子一样)。这意味着SM 132可以命令遍历处理器138相对于场景中的多个对象分析相同的光线。然而,当放入公共场景时这些对象中的每一个将在位置、方向和大小上被变换的事实被遍历协处理器138考虑并加速。在非限制性示例性实施例中,从世界到对象空间的变换与世界空间包围盒一起存储在世界空间BVH中。遍历协处理器138通过将光线从世界(场景)空间变换到对象空间来加速变换过程,以便执行图4所示的测试。特别是,由于几何形状从对象空间到世界(场景)空间的变换是计算密集的,该变换留给图形管线图元引擎134和/或光栅引擎136以作为光栅化的一部分来执行。相反,遍历协处理器138将给定的光线从世界空间变换到由加速数据结构定义的每个对象的坐标系,并在对象空间中执行其测试。
图7A和图7B示出了遍历协处理器138如何将相同的光线变换到三个不同的对象空间。图7A示出了桌子上的三个对象:杯子、茶壶和水罐。这三个对象和一个桌子包含一个存在于世界空间中的场景。也在世界空间中定义的光线从视点发出并与三个对象中的每一个相交。
图7B示出了在对象空间中定义的三个对象中的每一个。这三个对象中的每一个都由存在于相应对象空间中的相应模型定义。在示例性非限制性实施例中,遍历协处理器138在针对对象执行相交测试之前将光线变换到每个对象的对象空间中。为了遍历协处理器138执行相交测试的目的,该“实例变换”节省了将每个对象的几何形状和加速数据结构的相关盒细分从对象空间变换到世界空间的计算工作量。
请求SM 132在一个对象隐藏另一个对象,在另一个对象上投射阴影和/或朝向另一个对象反射光的情况下追踪哪些对象相对于每个个体光线位于哪些其他对象前面并且解析可见性。请求SM 132可以使用遍历处理器138来加速这些测试中的每一个。
示例性树形BVH加速数据结构
图8A和图8B示出了3D场景(图8A)和相应的树形数据结构(图8B)的递归细分的包围盒,其可以由遍历协处理器138访问并且用于由遍历协处理器执行的硬件加速的操作。包围盒的划分可以用分层树形数据结构表示,其中图2B中所示的大包围盒由树的父节点表示,而较小的包围盒由父节点包含的树的子节点表示。最小的包围盒表示为树中的叶节点,并标识包含在这些最小包围盒内的一个或更多个几何图元。
树形数据结构可以存储在遍历协处理器138外部的存储器中,并且基于SM 132向遍历协处理器138发出的查询来检索。树形数据结构包括以层次布置的多个节点。树形结构的根节点N1对应于包围所有三角形O1-O8的包围盒N1。根节点N1可以识别包围盒N1的顶点和根节点的子节点。
在图8A中,包围盒N1被细分为包围盒N2和N3。图8B的树形结构的子节点N2和N3对应于并表示图8A中所示的包围盒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。图8B的树形结构的各个子节点N4、N5、N6、N8、N10和N11对应于并表示空间中的图8A的包围盒N4、N5、N6、N8、N10和N11。
图8B树仅有三到六层深,使得盒N4、N5、N6、N8、N10和N11构成“叶节点”-即,树中没有子节点的节点。图8A示出了叶节点包围盒N4、N5、N6和N8中的每一个都包含场景中的几何形状的两个三角形。例如,盒细分N4包含三角形O1和O2;盒细分N5包含三角形O3和O4;盒细分N6包含三角形O5和O6;以及盒细分N8包含三角形O7和O8。图8B中所示的树形结构通过将它们与场景几何形状中的适当的三角形O1-O8相关联来表示这些叶节点N4、N5、N6和N7。为了访问该场景几何形状,遍历协处理器138向下遍历图8B的树形数据结构直到叶节点。通常,树的不同部分可以并且将具有不同的深度并且包含不同数量的三角形。与不包含几何形状的盒细分相关联的叶节点不需要在树形数据结构中明确地表示(即,树被“修剪”)。
根据一些实施例,以N7为根的子树可以表示在与对应于节点N1-N3的包围盒不同的坐标空间中定义的一组包围盒或BVH。当包围盒N7与其父包围盒N3处于不同的坐标空间中时,提供遍历以N7为根的子树所必需的光线变换的实例节点N7'可以将树的其余部分连接到以N7为根的子树。实例节点N7'通过定义从N1-N3的坐标空间(例如,世界空间)到N7等的坐标空间(例如,对象空间)的变换,将对应于节点N1-N3的包围盒或BVH与对应于节点N7等的包围盒或BVH连接。
遍历协处理器138的内部结构和操作
图9示出了遍历协处理器138的示例性简化框图,其包括被配置为执行上述加速遍历操作的硬件(下面描述该遍历协处理器138的更详细的实现)。因为图9中所示的遍历协处理器138适于遍历诸如图8A、图8B所示的基于树的加速数据结构,所以它也可以被称为“树遍历单元”或“TTU”700(附图标记700用于指代图1中所示的遍历协处理器138的更详细的非限制性实现)。树遍历操作可以包括,例如,确定光线是否与包围盒和/或树形数据结构(例如,BVH树)的图元相交,这些测试可以涉及将光线变换到对象空间。
TTU 700包括用于确定光线是否与包围盒相交的专用硬件和用于确定光线是否与树形数据结构的图元相交的专用硬件。在一些实施例中,TTU700可以使用采用所支持的叶节点图元的相交测试的短堆栈遍历以及α图元和不支持的叶节点图元(项目)的中间遍历返回来执行包围盒层次的深度优先遍历。将参考三角形讨论图元的相交,但也可以使用其他几何图元。
更详细地,TTU 700包括相交管理块722、光线管理块730和堆栈管理块740。这些块中的每一个(以及图9中的所有其他块)可以构成由逻辑门、寄存器、硬件嵌入式查找表或其他组合逻辑等实现的专用硬件。
光线管理块730负责管理关于由SM 132指定的到光线管理块的光线的信息并执行关于其的操作。堆栈管理块740与遍历逻辑712结合工作以管理关于遍历BVH加速数据结构的信息并执行与其相关的操作。遍历逻辑712由光线-complet测试块710的结果指示,该光线-complet测试块710根据需要使用实例变换测试由光线管理块730指示的光线与由BVH表示的盒细分之间的相交。光线-complet测试块710经由作为TTU 700的一部分的L0完整缓存752从存储器140中检索关于BVH的附加信息。光线-complet测试块710的结果通知遍历逻辑712关于是否需要进一步递归遍历。当遍历逻辑712从BVH的一个级别遍历到另一个级别时,堆栈管理块740维护堆栈以追踪状态信息,当遍历逻辑遍历到BVH更深处时,堆栈管理块将项目推送到堆栈上,当遍历逻辑在BVH中向上遍历时,堆栈管理块将项目从堆栈中弹出。堆栈管理块740能够在SM请求的任何时间向请求SM 132提供状态信息(例如,中间或最终结果)。
相交管理块722根据需要使用实例变换来管理关于光线和图元之间的相交的信息并执行与其相关的操作。光线图元测试块720经由作为TTU 700的一部分的L0图元高速缓存754根据需要从存储器140中检索关于几何形状的信息。光线-图元测试和变换块720执行的相交测试的结果通知相交管理块722。因此,光线-图元测试和变换块720向相交管理块722提供相交结果,相交管理块722向请求SM 132报告几何碰撞和相交。
堆栈管理单元740检查遍历状态以确定需要检索什么类型的数据以及哪个数据路径(complet或图元)将消耗它。包围盒的相交在TTU 700的光线-complet测试路径中确定,包括一个或更多个光线-complet测试块710和一个或更多个遍历逻辑块712。complet指定包围盒的根节点或内部节点。因此,complet可以为光线-complet测试定义一个或更多个包围盒。TTU 700的光线-complet测试路径识别哪些包围盒与光线相交。需要进一步处理与光线相交的包围盒,以确定与相交的包围盒相关联的图元是否相交。在包括一个或更多个光线-图元测试和变换块720以及一个或更多个相交管理块722的光线-图元测试路径中确定图元的相交。
TTU 700从一个或更多个SM 132接收查询以执行树遍历操作。查询可以请求光线是否与包围盒和/或BVH数据结构中的图元相交。查询可以识别光线(例如,光线的原点、方向和长度)以及BVH数据结构和遍历状态(短堆栈),其包括引用光线去访问的一个或更多个层次包围盒中的节点的一个或更多个条目。查询还可以包括关于光线在遍历期间如何处理特定类型的相交的信息。光线信息可以存储在光线管理块730中。可以基于光线-图元测试的结果更新存储的光线信息(例如,光线长度)。
TTU 700可以请求要从TTU 700外部的存储器中检索的在查询中识别的BVH数据结构。BVH数据结构的检索部分可以被高速缓存在TTU 700内的零级(L0)高速缓存750中,因此,该信息可用于其他时间相干的TTU操作,从而减少了存储器140的访问。光线-complet测试所需的BVH数据结构的部分可以存储在L0complet高速缓存752中,并且光线-图元测试所需的BVH数据结构的部分可以存储在L0图元高速缓存754中。
在所请求的遍历步骤所需的complet信息在complet高速缓存752中可用之后,光线-complet测试块710确定与光线相交的包围盒。在执行该测试时,可以将光线从层次包围盒的坐标空间变换为相对于complet定义的坐标空间。针对与complet的子节点关联的包围盒测试光线。在示例性非限制性实施例中,不针对complet自己的包围盒测试光线,因为(1)TTU 700在测试引用该complet的父包围盒子项时,先前针对类似的包围盒测试了光线,并且(2)complet包围盒的目的是定义一个局部坐标系,其中子包围盒可以用压缩形式表示。如果光线与任何子包围盒相交,则结果被推送到遍历逻辑以确定相应的子指针将被推送到遍历堆栈的顺序(进一步测试可能需要遍历逻辑712向下遍历到BVH的下一级别)。递归地重复这些步骤,直到遇到BVH的相交叶节点。
光线-complet测试块710可以向遍历逻辑612提供光线-complet相交。使用光线-complet测试的结果,遍历逻辑712创建要被推送到堆栈管理块740的堆栈条目。堆栈条目可以指示需要通过光线-complet测试块710进一步测试光线相交的内部节点(即,包括一个或更多个子节点的节点)和/或需要通过光线-图元测试和变换块720测试光线相交的相交叶节点中识别的三角形。光线-complet测试块710可以重复在堆栈中识别的内部节点上的遍历,以确定与光线相交的BVH中的所有叶节点。在示例性非限制性实施例中,光线-complet测试块710执行的精确测试将由模式位、光线操作(见下文)和剔除碰撞来确定,并且TTU700可以将中间结果和最终结果返回到SM 132。
相交的叶节点识别可能或可能不与光线相交的图元。一种选择是TTU700向SM 132提供例如在相交的叶节点中识别的一系列几何形状以进行进一步处理。例如,SM 132自身可以基于TTU 700提供的信息确定所识别的图元是否与光线相交,作为TTU遍历BVH的结果。为了从SM 132卸载该处理并由此使用TTU 700的硬件加速它,堆栈管理块740可以发出对光线-图元和变换块720的请求以对TTU的光线-complet测试块710识别的相交叶节点内的图元执行光线-图元测试。在一些实施例中,SM 132可以发出对光线-图元测试的请求以测试特定范围的图元和变换块720,而不管如何识别该几何形状范围。
在确保所请求的光线-图元测试所需的图元数据在图元高速缓存754中可用之后,光线-图元和变换块710可以使用存储在光线管理块730中的光线信息来确定与光线相交的图元。光线-图元测试块720将确定为与光线相交的图元的标识提供给相交管理块722。
相交管理块722可以将光线-图元测试的结果返回给SM 132。光线-图元测试的结果可以包括相交图元的标识符,交点与光线原点的距离以及关于相交图元的属性的其他信息。在一些实施例中,相交管理块722可以基于来自光线-图元和变换块710的先前相交结果来修改现有的光线-图元测试(例如,通过修改光线的长度)。
相交管理块722还可以追踪不同类型的图元。例如,不同类型的三角形包括在相交时阻挡光线的不透明三角形和在相交时可能阻挡或可能不阻挡光线或者可能需要SM进行额外处理的α三角形。光线是否被透明三角形阻挡可以例如取决于映射到三角形上的一个或更多个纹理、纹理占据的三角形区域(参见图6A和图6B)以及纹理修改三角形的方式。例如,在一些实施例中,透明度(例如,彩色玻璃)需要SM 132追踪透明对象碰撞,因此它们可以以光线参数顺序进行分类和着色,并且通常实际上不阻挡光线。同时,α“修剪”允许基于映射到图元上的纹理的形状来修剪图元的形状-例如,从三角形裁剪出叶形(请注意,在光栅图形中,透明度通常被称为“α混合”,并且修剪被称为“α测试”)。在其他实施例中,TTU700可以将透明碰撞推送到存储器中的队列,以稍后由SM 132处理,并通过向纹理单元发送请求来直接处理经修剪的三角形。每个三角形可以包括指示三角形类型的指示符。相交管理块722被配置为维护用于追踪不同类型的相交三角形的结果队列。例如,结果队列可以将一个或更多个相交的不透明三角形标识符存储在一个队列中,并将一个或更多个透明三角形标识符存储在另一个队列中。
对于不透明三角形,可以在TTU 700中完全确定光线相交,因为不透明三角形的区域阻挡光线穿过三角形的表面。对于透明三角形,在一些实施例中,在TTU 700中不能完全确定光线交点,因为TTU 700基于三角形的几何形状执行相交测试,并且可能无法访问三角形的纹理和/或由纹理占据的三角形区域(在其他实施例中,可以通过图形管线的纹理映射块向TTU提供纹理信息)。为了完全确定三角形是否相交,可以将关于光线-图元和变换块710确定的透明三角形相交的信息发送到SM 132,以便SM完全确定三角形是否影响沿着光线的可见性。
SM 132可以解决光线是否与关联于透明三角形的纹理相交和/或光线是否将被纹理阻挡。在一些情况下,SM 132可以基于该确定将修改的查询发送到TTU 700(例如,如果光线被纹理阻挡则缩短光线)。
在一个实施例中,TTU 700可以被配置为将确定为与光线相交的所有三角形返回到SM 132以进行进一步处理。因为在接口和线程同步方面将每个三角形交点返回到SM 132以进行进一步处理是昂贵的,所以TTU 700可以被配置为隐藏三角形,该三角形是相交的但可证明能够隐藏而不会对结果场景产生功能影响。例如,因为TTU 700具有三角形类型信息(例如,三角形是不透明的还是透明的),所以TTU 700可以使用三角形类型信息来确定沿着光线被另一个相交的不透明三角形遮挡的相交三角形,因此它们不需要包括在结果中,因为它们不会影响沿光线的可见性。如上面参考图5A-图5C所讨论的,如果TTU 700知道一三角形沿着光线被一不透明三角形遮挡,则可以从结果中隐藏被遮挡的三角形而不影响所得场景的可视化。
相交管理块722可以包括结果队列,用于存储将三角形ID和关于光线碰撞三角形的点的信息相关联的碰撞。当确定光线与不透明三角形相交时,三角形的身份和交点到光线原点的距离可以存储在结果队列中。如果确定光线与另一个不透明三角形相交,则如果交点到光线原点的距离大于已存储在结果队列中的相交的不透明三角形的距离,则可以从结果中省略另一个相交的不透明三角形。如果交点到光线原点的距离小于已存储在结果队列中的相交的不透明三角形的距离,则另一个相交的不透明三角形可以替换存储在结果队列中的不透明三角形。在测试了查询的所有三角形之后,可以将存储在结果队列中的不透明三角形信息和交点信息发送到SM132。
在一些实施例中,一旦识别出不透明三角形交点,相交管理块722可以缩短存储在光线管理块730中的光线,使得在相交的不透明三角形(沿着光线)后面的包围盒(可以包括三角形)不会被识别为与光线相交。
相交管理块722可以将关于相交的透明三角形的信息存储在单独的队列中。存储的关于相交的透明三角形的信息可以被发送到SM 132以供SM解析光线是否与关联于三角形的纹理相交和/或纹理是否阻挡光线。SM可以基于该确定将该确定的结果返回到TTU 700和/或修改查询(例如,如果光线被纹理阻挡则缩短光线)。
示例性光线追踪着色管线
图10A示出了示例性光线追踪着色管线900,其可由SM 132执行并由TTU 700加速。光线追踪着色管线900由SM 132调用光线生成910并向TTU 700发出相应的光线追踪请求开始。光线追踪请求识别投射到场景中的单个光线,并要求TTU 700搜索具有SM 132也指定的加速数据结构的交点。TTU 700遍历(图10A的框920)加速数据结构,以确定光线与盒细分和加速数据结构所代表的关联三角形之间的交点或潜在交点。可以通过在加速数据结构中找到与光线相交的包围盒来识别潜在的交点。不需要检查非相交包围盒的后代。
对于相交的包围盒内的三角形,TTU 700光线-图元测试块720执行相交930过程以确定光线是否与图元相交。TTU 700将交点信息返回到SM132,其可以响应于交点确定执行“任何碰撞”着色操作940。例如,SM 132可以执行(或使其他硬件执行)针对相交图元的纹理查找,并且基于适当的纹理元素值来决定如何着色使光线可视化的像素。SM 132追踪这样的结果,因为TTU 700可以以任意顺序返回与场景中不同几何形状的多个交点。
或者,可以进一步处理TTU 700确定相交的图元以确定950它们是否应该被着色为未碰撞960或最近的碰撞970。SM 132可以例如指示TTU 700报告指定的几何形状中的最近的碰撞,或者它可以指示TTU报告指定几何形状中的所有碰撞。例如,可以由SM 132实现针对TTU 700基于所实现的环境查找确定相交的图元的“未碰撞”着色操作(例如,通过预先计算的纹理图像的平均来近似反射表面的外观),如图6A和图6B所示。SM 132可以响应于TTU700提供的针对特定对象几何形状的最接近的碰撞报告,基于材料评估和纹理查找来执行最接近的碰撞着色操作以确定最接近的相交图元。
图10B更详细的光线追踪管线流程图示出了用于代表性用例的组件之间的数据流和交互:追踪包含几何图元的场景的光线,其中实例变换在硬件中处理。在一个示例性非限制性实施例中,图10B的光线追踪管线基本上是软件定义的(在示例性实施例中意味着它由SM 132确定)但是通过TTU 700广泛使用硬件加速。关键部件包括SM 132(和计算管线的其余部分)、TTU 700(用作SM的协处理器)以及L1高速缓存和下游存储器***,TTU从中获取BVH和三角形数据。
图10B中所示的管线示出了可以由开发***提前执行层次包围盒创建1002。它还示出了光线创建和分发1004由示例性实施例中的SM 132或其他软件执行或控制,如着色(其可包括照明和纹理操作)。示例性管线包括“顶层(top level)”BVH树遍历1006、光线变换1014、“底层(bottom level)”BVH树遍历1018以及每个由TTU 700执行的光线/三角形(或其他图元)相交1026。不必按所示顺序执行,因为TTU 700和SM 132之间的握手(handshake)确定TTU 700做什么以及以什么顺序进行。
SM 132一次向TTU 700呈现一条或更多条光线。SM 132呈现给TTU700以进行遍历的每条光线可包括光线的几何参数、遍历状态以及光线的光线标记、模式标记和光线操作信息。在示例性实施例中,光线操作(RayOp)提供或包括辅助算术和/或逻辑测试以抑制、覆盖和/或允许存储交点。SM132还可以使用遍历堆栈来将某些状态信息传送到TTU 700以用于遍历。可以使用显式遍历堆栈启动新的光线查询。然而,对于某些查询,可以提供少量的堆栈初始化器来开始给定类型的新查询,例如:从complet开始的遍历;光线与一系列三角形的相交;光线与一系列三角形的相交,然后从complet开始的遍历;从三角形缓冲区中获取给定三角形的顶点。在一些实施例中,使用堆栈初始化器而不是显式堆栈初始化提高性能,因为堆栈初始化器需要更少的流式处理器寄存器并减少需要从流式处理器传输到TTU的参数的数量。
在示例性实施例中,SM 132与每个查询(例如,光线)一起呈现的一组模式标记可以至少部分地控制当查询与特定类型的包围盒相交或与特定图元类型的图元相交时TTU700将如何处理查询。SM 132提供给TTU700的模式标记使SM和/或应用程序能够例如通过RayOp指定辅助算术或逻辑测试来抑制、覆盖或允许存储交点。模式标记可以例如使遍历行为能够根据诸如与每个包围盒和/或图元相关联的深度(或距离)、与到原点或光线的距离相关的包围盒或图元的大小等方面而改变。应用程序可以使用此功能来动态地和/或选择性地启用/禁用相交测试的对象集与特定查询集或查询组,例如,以允许在应用程序状态改变时(例如,当门打开或关闭时)使用不同版本的模型,或者提供作为光线长度的函数选择的模型的不同版本以实现细节几何形状级别的形式,或允许来自某些光线类别的特定对象集使某些图层在特定视图中可见或不可见。
除了可以针对光线-complet交点和针对光线-图元交点单独指定模式标记集之外,光线数据结构可以指定其他与RayOp测试相关的参数,例如光线标记、光线参数和RayOp测试。TTU 700可以使用光线标记来控制遍历行为、背面剔除和各种子节点类型的处理的各个方面,这取决于可选的RayOp测试的通过/失败状态。RayOp测试增加了TTU 700容量的灵活性,但代价是复杂性。TTU 700为其正在处理的每个活动光线保留“光线槽”,并且可以在遍历期间将光线标记、模式标记和/或RayOp信息存储在TTU内的相应光线槽缓冲器中。
在图10B所示的示例中,TTU 700执行顶层树遍历1006和底层树遍历1018。在示例性实施例中,BVH的两层遍历使得能够对动态场景变化进行快速光线追踪响应。
光线变换1014通过变换光线提供从顶层树遍历1006到底层树遍历1018的适当过渡,其可以在第一坐标空间(例如,世界空间)中的顶层遍历到底层遍历的BVH的不同坐标空间(例如,对象空间)中使用。在先前的文献中描述了使用两层遍历的示例性BVH遍历技术,参见例如Woop,“动态场景的光线追踪硬件架构(A Ray Tracing Hardware Architecturefor Dynamic Scenes)”,萨尔大学,2004,但是实施例不限于此。
在一些实施例中,顶层遍历(在世界空间中)是在BVH中进行的,其可以响应于场景的变化而动态地重新计算(例如,通过SM 132),并且底层遍历在包围盒的BVH中进行,即使在场景发生变化时仍保持静态或基本静态。用于底层树遍历1018(在对象空间中)的BVH中的包围盒可以包含关于场景几何形状的更详细信息,而不是顶层树遍历1006中使用的相应包围盒,从而避免或至少减少响应于场景变化而修改底层遍历BVH。这有助于加速动态场景的光线追踪。
顶层树遍历的示例
由TTU 700的顶层树遍历1006从L1高速缓存1012接收complet,并且向光线变换1014提供用于变换的实例或者向SM 132提供未碰撞/结束输出1013以用于由SM(此块也可以基于非叶节点/无碰撞条件递归地操作)处理的最接近的碰撞着色器1015。在顶层树遍历1006中,下一个complet获取步骤1008从存储器和/或高速缓存层次中获取要在步骤1010中测试光线相交的下一个complet,并且在该获取的complet中的包围盒上完成光线-包围盒相交测试。
如上所述,实例节点将一个BVH连接到处于不同坐标系中的另一个BVH。当相交的包围盒的子项是实例节点时,光线变换1014能够从L1高速缓存1016检索适当的变换矩阵。TTU 700使用适当的变换矩阵将光线变换为子BVH的坐标系。已经通过引用并入的美国专利申请No.14/697,480描述了将树中的第一组节点连接到第二组节点的变换节点,其中第一和第二组节点在不同的坐标系中。示例性实施例中的实例节点可以类似于美国申请No.14/697,480中的变换节点。在图10C中所示的TTU 700的替代非实例化模式中,TTU不执行“底”层树遍历1018,并且非实例化的树BVH遍历由框1008、1010执行,例如,仅使用一个堆栈。TTU700可以基于其从BVH和/或查询类型读取的内容在图10B实例化操作和图10C非实例化操作之间切换。例如,特定查询类型可以限制TTU仅使用非实例化操作。在这样的查询中,任何相交的实例节点都将返回给SM。
在一些非限制性实施例中,在获取下一个complet之前,对所获取的complet中的每个包围盒执行步骤1010中的光线-包围盒相交测试。其他实施例可以使用其他技术,例如以深度优先的方式遍历顶层遍历BVH。已通过引用并入的美国专利No.9,582,607描述了可以在示例性实施例中使用的一个或更多个complet结构和内容。美国专利No.9,582,607还描述了complet的示例性遍历。
当确定包围盒与光线相交时,对相交的包围盒的子包围盒(或对它们的参考)保持追踪,以便随后测试与光线的相交和遍历。在示例性实施例中,一个或更多个堆栈数据结构用于追踪随后要测试的子包围盒与光线的相交。在一些示例性实施例中,可以使用小尺寸的遍历堆栈来追踪要由顶层树遍历1006的操作遍历的complet,以及要测试相交的图元,并且可以使用更大的本地堆栈数据结构以追踪底层树遍历1018中的遍历状态。
示例底层树遍历
在底层树遍历1018中,下一个complet获取步骤1022从存储器和/或高速缓存层次1020中获取要在步骤1024中测试光线相交的下一个complet,并在获取的complet中的包围盒上进行光线-包围盒相交测试。如上所述,底层树遍历可以包括其中的包围盒与在上层树遍历中遍历的包围盒处于不同的坐标系中的complet。底层树遍历还接收来自L1高速缓存的complet,并且可以基于无叶/无碰撞条件以及基于未碰撞/结束检测的顶层树遍历1006在其自身内递归地或迭代地操作。可以利用变换到所检索的较低层complet的坐标系的光线来确定光线与较低层BVH中的包围盒的交点。然后将发现与较低层树遍历中与光线相交的叶包围盒提供给光线/三角形交点1026。
底层树遍历1018的叶输出被提供给光线/三角形交点1026(其具有L0高速缓存访问以及经由L1高速缓存1028检索三角形的能力)。L0complet和三角形高速缓存可以是TTU700内部的小的只读高速缓存。当到达某些叶节点而不遍历实例化的BVH时,光线/三角形交点1026还可以从顶层树遍历1006接收叶输出。
在处理了图元范围中的所有图元之后,交点管理单元检查结果队列的状态并制作分组以发送到堆栈管理单元和/或光线管理单元以更新光线的属性和遍历状态,设置光线的下一个遍历步骤,和/或将光线返回到SM 132(如有必要)。如果结果队列包含在处理图元范围期间发现的不透明或α交点,则交点管理单元将结果队列中最近的不透明交点的参数长度(t)发信号到光线管理单元,以记录为光线的上限以缩短光线。要更新遍历状态以设置光线的下一个遍历步骤,交点管理单元向堆栈管理单元发送一下信号:结果队列中是否存在与图元范围的不透明交点,结果队列中是否存在一个或更多个α交点,结果队列是否已满,是否在图元范围中找到了尚未返回到SM且在结果队列中不存在的额外α交点,以及在SM消耗结果队列的内容之后要测试的光线的图元范围中的下一个α图元的索引(α图元之后范围中的下一个图元的索引,具有来自结果队列中当前图元范围的最高存储器顺序)。
当堆栈管理单元740从交点管理单元722接收到分组时,堆栈管理单元740检查该分组以确定完成遍历步骤所需的下一个动作并开始下一个动作。如果来自交点管理单元722的分组指示在图元范围中已找到不透明交点并且光线模式位指示一旦找到任何交点则该光线将结束遍历,堆栈管理单元740将该光线及其结果队列返回到SM,遍历状态指示遍历已完成(完成标记设置和/或空顶层和底层堆栈)。如果来自交点管理单元722的分组指示结果队列中存在不透明交点或α交点,并且在图元范围(其尚未被返回到SM)处理期间图元范围中还有光线遇到的剩余α交点不存在于结果队列中,则堆栈管理单元740将光线和结果队列返回到SM,其中遍历状态被修改以设置剔除不透明位以防止进一步处理图元范围中的不透明图元并且最高α图元交点从图元范围返回到光线结果队列中的SM之后,图元范围开始索引前进到第一个α图元。如果来自交点管理单元722的分组指示当光线处理了图元范围时没有找到不透明交点或α交点,则堆栈管理单元740将堆栈顶部的条目(对应于完成的图元范围)从活动遍历堆栈中弹出。如果来自堆栈管理单元740的分组指示队列中的不透明交点或者结果队列中存在不透明交点,并且一旦找到任何交点和/或结果队列中存在α交点,则光线模式位不指示光线将完成遍历,但是在结果队列中不存在的图元范围中没有找到剩余的α交点,其尚未返回到SM,堆栈管理单元740从活动遍历堆栈弹出堆栈条目的顶部(对应于完成的图元范围)并修改结果队列的内容,以指示结果队列中存在的所有交点都来自其已完成处理的基本范围。
如果活动堆栈是底部堆栈,并且底部堆栈是空的,则堆栈管理单元740将活动堆栈设置为顶部堆栈。如果顶部堆栈是活动堆栈,并且活动堆栈为空,则堆栈管理单元740将光线及其结果队列返回到SM,其遍历状态指示遍历已完成(完成标记设置和/或空顶层和底层堆栈)。如果活动堆栈包含一个或更多个堆栈条目,则堆栈管理单元740检查顶部堆栈条目并开始下一个遍历步骤。具有与光线的交点的图元和/或图元范围的测试以及将结果返回到SM 132在以下申请中描述:共同未决的美国申请No.16/101,148,标题为“保守的水密光线三角交点(Conservative Watertight Ray Triangle Intersection)”(卷号6610-36(18-SC-0145)),和美国申请No.16/101,196,标题为“用于处理无序的不透明和α光线/图元交点的方法(Method for Handling Out-of-Order Opaque and Alpha Ray/PrimitiveIntersections)”(卷号6610-37(18-AU-0149)),其全部内容通过引用并入本文。
虽然以上公开内容在计算机图形和可视化的特定上下文中表达,但是光线追踪和所公开的遍历协处理器可以用于除图形和可视化之外的各种应用。非限制性示例性包括用于逼真声音合成的声音传播,声呐***的模拟,光学元件和***的设计,粒子传输模拟(例如,用于医学物理学或实验高能物理),一般波传播模拟,与LIDAR数据的比较,用于例如机器人或车辆定位等目的,OptiXTM过去已经用于其中一些应用领域。
无着色器干预的示例光线图元遍历
如上所述,TTU 700包括用于确定光线是否与包围盒相交的专用硬件和用于确定光线是否与树形数据结构的图元相交的专用硬件。树形数据结构的图元可以包括在树形数据结构的叶节点中标识的不同几何图元(例如,点、线、三角形、四边形、网格等)。至少一些图元(例如,三角形)可以包括用于区分不同类型的图元的类型指示符。如参考图5A-图5C所讨论的,不同类型的三角形可包括不透明三角形和α三角形。TTU 700包括被配置为完全确定某些类型的图元的交点的硬件,而对于其他图元,TTU 700可以仅自身确定可能的交点。例如,TTU可以完全确定光线与不透明三角形相交。对于α三角形,TTU可能仅能够确定交点是可能的并且将需要SM来解析(例如,基于纹理信息)光线是否与应用于透明三角形表面的纹理相交和/或纹理是否会阻挡光线。
在一个实施例中,TTU 700可以被配置为将被确定为与光线相交的所有图元返回到SM 132以进行进一步处理。然而,在接口和线程同步方面,将每个相交的图元和可能相交的图元返回到SM 132是昂贵的。另外,SM132将需要资源来处理至少一些返回的图元,以例如基于纹理映射信息确定光线是否与应用于透明三角形的纹理相交和/或光线是否将被纹理阻挡。
TTU 700提供硬件解决方案以确定可以从提供给SM 132的结果中省略哪些相交的图元,而不会对结果场景的可视化产生功能性影响。这允许TTU 700继续遍历BVH而不会干预在有或没有其他相关硬件的SM中实现的着色器。例如,TTU 700可以被配置为省略相对于光线原点位于不透明图元后面的那些图元,因为如参考图5A-图5C所讨论的,场景中的光线将被不透明图元阻挡并且将不能到达其他图元,即使在空间上光线与它们相交。
为了处理不同的图元碰撞类型,TTU 700的相交管理单元722可以维护结果队列数据结构,其包含用于一个不透明图元交点或一个α图元交点,以及用于附加的α交点的零个或更多个附加条目的每个光线的存储。如果需要SM干预(例如,如果在单个三角形范围内找到的α碰撞数超过了结果队列的α碰撞的存储容量),则在查询完成时或在遍历中途时可以将结果队列返回到SM 132。
图11是用于加速光线-图元相交测试的示例非限制性方法的流程图。该方法可以由本申请中公开的TTU 700执行,但不限于此。
该方法包括接收对查询数据结构和图元范围1110之间的最近交点的请求。该请求可以从SM接收,或者可以是由TTU的光线-complet测试路径执行的光线-complet测试的结果。在一些实施例中,查询数据结构可以是由其三坐标原点、三坐标方向以及沿着光线的t参数的最小值和最大值给定的光线。可以在TTU中的堆栈管理块的一个或更多个堆栈条目中标识请求的图元范围。可以基于在TTU的光线-complet测试路径中找到BVH的相交叶节点的结果来制作堆栈条目。
从存储器1112检索图元范围。可以从TTU存储器(例如,L0高速缓存750的三角形高速缓存754)或TTU外部的存储器检索图元范围。图元范围可以例如在连续的一组高速缓存线大小的块中提供。每个高速缓存线大小的块可以包括标识块内表达的几何类型的报头(header)和块中每个图元的图元类型。例如,报头可以标识该块包括三角形并指示每个三角形是α图元还是不透明图元。报头可以包括用于每个图元的α位,以指定相应图元是α图元还是不透明图元。
该方法包括测试图元范围中的图元与光线1114的交点。测试图元可以包括确定光线是否与由图元标识的区域相交(例如,通过对象空间坐标中的三角形的顶点)。可以测试图元范围中的每个图元与光线的交点。为了针对由顶点标识的区域测试光线,TTU 700的光线-三角测试路径可以使用实例变换将光线变换为图元范围的对象空间坐标。
该方法包括省略可以被确定为对可视化结果场景1116没有功能性影响的相交的图元。在一个实施例中,相交管理单元722(参见图9)可以确定可以从提供给SM 132的结果中省略哪些空间上相交的图元。TTU 700可以确定图元范围中的一个或更多个空间上相交的图元沿着光线被另一个更接近光线原点的相交的不透明三角形遮挡。由于场景中较近的不透明图元会阻挡光线穿过图元,因此相对于光线原点被不透明三角形遮挡的空间上相交的图元不需要包括在相交图元的结果中,并且如果先前已添加,则从报告给SM 132的结果中将其移除。
参考图5A,当TTU确定光线与前面的不透明图元相交时,TTU可以从结果中省略该不透明图元后面的空间上相交的图元。在图5B中,前面空间上相交的图元是α图元,其可以允许光线通过并碰撞其他图元。不应该从报告的结果中省略α图元后面的图元,因为光线可以(这取决于纹理的位置和/或类型)通过α图元并碰撞α图元后面的其他图元。在一些示例中,TTU可能不能自己确定(例如,没有SM的干预)空间相交α三角形是否将阻挡光线或允许光线穿过到达其他图元。
因此,当TTU确定光线在空间上与α图元相交时,TTU将相交的α图元添加到结果并继续光线-图元相交测试,以确定图元范围中的任何其他空间上相交的图元,其可以是参考光线的方向在α图元的后面或前面。参考图5C,因为前两个空间上相交的图元是α图元,所以两个α图元将与不透明图元一起被添加到结果中。
在一个实施例中,仅当该范围中的所有相交图元都是不透明的时,TTU可以省略空间上相交的不透明图元后面的图元。在另一个实施例中,TTU可以忽略空间上相交的不透明图元后面的图元,而不管其他空间上相交的图元是否是不透明的图元或α图元。在该示例中,从结果中排除的空间上相交的图元可以包括不透明图元和/或α图元。
对结果场景具有功能性影响的空间上相交的图元可以存储在结果队列中(例如,在相交管理单元722中)。结果队列在TTU协处理器700内提供数据结构,用于存储在遍历期间找到的一个或更多个不透明图元交点或α图元交点。
在一个实施例中,TTU协处理器700和结果队列的操作允许SM推迟α测试,并且如果更近的不透明交点遮挡α交点,则可能完全避免它们。通过缩短光线可以消除一些图元的测试。然而,当针对交点测试图元范围时,该范围中的所有图元可以由TTU协处理器700测试。当TTU结果包括与其他剩余图元的α交点时,在请求启动时重新测试剩余的图元。SM和TTU协处理器700的这种配置允许从SM角度推迟α测试。
图12示出了根据本公开的示例性实施例的结果队列1200。结果队列1200可以包括用于一个不透明图元交点或一个α图元交点的条目1210。结果队列1200可以选择性地包括用于额外的α交点的一个或更多个附加条目1220、1230。
在一个示例性实施例中,每个结果队列条目指定碰撞类型和参数长度,其指定沿着光线发生碰撞的点和碰撞的属性,例如SM可以使用的实例ID或材料ID,以选择特定的材质着色器和一组资源绑定,以及图元ID和(u,v)坐标,SM在着色期间可以使用这些来检索和***属性或样本纹理。
在其他实施例中,结果队列可以包括用于不透明图元和α图元的单独队列。例如,结果队列可以包括用于不透明图元交点的单个条目和用于α图元交点的一个或更多个条目。
该方法包括将相交的图元的结果返回到SM 1118。如果对SM干预的需求增加(例如,如果在单个三角形范围内找到的α碰撞数超过了结果队列的α碰撞的存储容量),则可以在请求完成时或在遍历中途将结果返回到SM。如果请求中的所有图元都是不透明的,那么TTU仅将最接近的不透明图元返回给SM。然而,如果图元包括不透明图元和α图元的混合,则多个α图元可以与光线相交。可以将每个相交的α图元的交点信息返回到SM以进行进一步处理(例如,以基于与α图元相关联的纹理信息来确定是否存在碰撞)。
SM可以使用结果来构建场景,向TTU发出附加查询,和/或修改先前发出的对TTU的查询。在一个实施例中,即使遍历尚未完成,具有α位集的空间上相交的图元也返回到SM。如果软件确定三角形实际上是透明的,则可以利用包含继续遍历所需的状态的遍历堆栈信息将空间上相交的图元返回到SM。在一个实施例中,TTU可以在已经测试了图元范围中的所有图元之后将结果返回到SM。在该实施例中,结果队列的大小需要足以存储所有结果。
实际上,由于物理约束,结果队列大小可以限于单个条目或几个条目。例如,结果队列可以包括用于不透明交点或α交点的单个条目。在另一示例中,结果队列可包括用于不透明交点的单个条目和用于α交点的多个条目(例如,四个条目)。当标识出不能丢弃的交点并且结果队列已满时,TTU可以将结果队列中的结果返回给SM,其中SM的信息能够在处理在结果中确定的一个或更多个图元之后重新提交光线测试请求。例如,SM可以重新提交光线测试请求,该请求跳过已经返回到SM的一个或更多个图元。因此,如果在光线中相交多个α图元,则可以将每个相交的α图元的交点信息一个接一个地返回给SM。
在另一示例中,当标识出不能省略的交点并且结果队列已满时,IMU可以用新交点替换队列中的一个条目。当确定性结果应该报告给SM并且需要以在图元范围的存储器地址顺序中找到交点的顺序返回交点的结果时,可以这样做。
没有着色器干预的示例性光线连续层次包围盒遍历
在更具体的示例中,TTU通过追踪光线穿过生成的BVH来操作,该BVH包括内部节点、实例变换、项目范围和三角形范围。内部节点交点进一步遍历层次结构。实例节点交点可以执行硬件加速实例变换,然后继续遍历实例子BVH。项目范围返回到SM。三角形范围可以使用光线三角测试(RTT)块中的TTU内部的特定硬件加速来确定光线和特定三角形之间的交点。通常,查询被关注与光线原点的最接近的交点,或者仅仅存在交点。
TTU具有两种类型的相交的三角形:不透明和α。三角形的类型可以由标志(例如,α三角形标志)指定。不透明三角形是一种可以通过光线和该三角形的数学交点完全确定交点的三角形。可以在TTU的光线-三角形测试路径中确定该交点。另一方面,α三角形是一种不能通过光线和该三角形的数学交点完全确定交点的三角形。对于α三角形,TTU的光线-三角形测试路径确定可能存在交点,并且关于可能的交点的信息被发送到SM以确定是否存在实际交点。SM可以执行基于软件的处理以确定光线和α三角形交点的细节,并基于该确定来修改光线-三角形查询。α三角形的示例使用是,在植物中,叶子可以由单个三角形表示,纹理被应用于该单个三角形以定义围绕实际叶子形状的更紧密的边界。该概念在图6A和图6B中示出,其中叶子的纹理615被应用于三角形610的一部分。α三角形标志也可以应用于其他不透明的三角形,使得TTU返回与光线相交的每个三角形。在一个示例中,可以在进行查询时设置标志以将每个三角形视为半透明以获得相交的所有内容而不仅仅是最接近的三角形。
在示例非限制性实施例中,α三角形需要由SM进一步处理以确定实际交点。不透明的三角形并不如此。TTU具有相交管理单元(IMU),其允许TTU不必将所有相交的三角形返回到SM。减少这些返回是合乎需要的,因为返回到SM需要整个线程束同步。
为了处理不同的图元碰撞类型,TTU的IMU维持结果队列数据结构,其包含用于一个不透明图元交点或一个α图元交点的每个光线的存储,以及用于额外的α交点的零个或更多个附加条目的存储。如果对于SM干预(例如,如果在单个三角形范围内找到的α碰撞数超过结果队列的α碰撞的存储容量)的需求增加,则在查询完成时或在遍历中可以将结果队列返回到SM。
TTU可以呈现在IMU中部分实现的契约:
1.允许TTU跳过未与光线相交的任何事物。
2.当三角形与硬件相交时,允许TTU跳过位于不透明三角形后面的任何事物。
3.相反,TTU必须报告与光线相交的、不位于与硬件相交的不透明三角形后面的任何事物的碰撞。
4.如果光线仅与不透明的三角形相交,则TTU会报告最近的碰撞,而不会报告其他内容。
5.如果除了不透明三角形之外(或此外)光线还与图元相交,则可能存在多个碰撞,允许TTU以任何顺序报告。
6.对于非硬件相交的图元(即非三角形),TTU必须报告与光线相交的任何事物的碰撞,并且可以报告可能与光线相交的任何事物的碰撞。换句话说,允许误报。
7.允许应用程序在继续遍历并进行后续查询时缩短光线,但光线必须保持不变。
图13是用于加速光线-三角形相交测试的示例非限制性方法的流程图。该方法可以由本申请中公开的TTU 700执行,但不限于此。
TTU 700可以被配置为处理TTU 700的光线图元测试路径中的某些几何类型图元。在一些实现中,在TTU 700的光线图元路径中可能不支持其他图元类型。可以将TTU 700的光线图元路径中不支持的图元类型返回到SM以进行处理(例如,在TTU的光线-complet测试路径中标识之后)。图13中的流程图参照TTU进行解释,该TTU被配置为处理光线-图元测试路径中的三角形,但不限于此。TTU的光线-图元测试路径可以被配置为确定其他图元的交点,并且可以被配置为确定多个不同图元的交点。在一些实施例中,TTU可以包括多个光线-图元测试路径,每个被配置为处理不同的图元。
图13中示出的流程图包括接收请求光线和三角形范围之间的最近交点的查询的TTU 700(步骤1310)。查询可以由光线管理块730从SM 132接收,或者可以基于由TTU的光线-complet测试路径执行的光线-complet测试的结果来启动。查询可以请求最近的碰撞交点或任何交点。
可以通过其三坐标原点、三坐标方向以及沿着光线的t参数的最小值和最大值来标识光线。可以在TTU中的堆栈管理块740的一个或更多个堆栈条目中标识查询的三角形范围。在一个实施例中,光线-complet测试可以标识树的一个或更多个相交的叶节点,其指向一系列三角形或项目。三角形范围可以是一组连续三角形,其从存储器块中的第n个三角形开始并且运行零个或更多个块直到最后一个块的第m个三角形。块可以是高速缓存线(cache line)(例如,128B)。可以在高速缓存线中压缩三角形,每个高速缓存线中具有变化数量的三角形。一系列三角形可以跨越不同数量的高速缓存线。
从存储器中检索三角形范围(步骤1312)。可以从TTU存储器(例如,L0高速缓存750的三角形高速缓存754)或TTU 700外部的存储器140检索三角形范围。可以在连续组的高速缓存线大小的块中提供三角形范围。每个高速缓存线大小的块可以包括标识块内表达的几何类型的报头和块中每个图元的图元类型。在一个示例中,报头可以标识在块内表达的几何的类型和编码方案(例如,压缩的三角形),块中的图元的数量(减1),以及指示是否应该对块中的每个图元禁用剔除的一组ForceNoCull位,以及一组α位,其针对块中的每个图元,指示该图元是α图元还是不透明图元。
该方法包括测试三角形范围内的三角形与光线的相交(步骤1314)。因为具有三角形范围的块可以以任何顺序编码多个不透明图元或α图元,并且三角形范围可以跨越由TTU700的存储器子***以任意顺序返回的多个块,因此所测试的第一个三角形可能不是最接近光线原点的三角形。光线-三角形测试和变换块720可以测试三角形与光线的相交。如果光线-三角形测试和变换块720确定相交,则光线-三角形测试和变换块720可以将关于交点的信息传递给IMU 722。测试三角形的交点可以包括确定光线是否与由三角形的顶点标识的区域相交。光线三角形测试和变换块720可以在执行相交测试之前将光线变换为三角形的对象空间坐标。
如果三角形和光线之间没有交点(步骤1316中为“否”),则可以从结果中省略三角形,并且确定在该范围内是否存在另一个三角形要测试(步骤1318)。如果在三角形范围中存在另一个要测试的三角形(步骤1318中为“是”),则在相同的块或与三角形范围相关联的另一个块中,可以对下一个三角形执行三角形-光线测试(步骤1314)。如果三角形范围中没有其他三角形要测试(步骤1318中为“否”),则完成光线-三角测试,并且可以将光线-三角测试的结果发送到SM或TTU 700内部或外部的启动查询的另一个块(步骤1320)。在步骤1320中,返回结果可以提供三角形范围内最接近光线原点的参数不透明交点。结果可以提供不透明的三角形ID,以及t值和交点的坐标(例如,交点的重心坐标)。如果在三角形范围内未标识出交点,则到SM的结果将指示未找到交点。
如果在三角形和光线之间存在交点(步骤1316中为“是”),则在步骤1322中确定三角形是否是不透明的三角形。该确定可以由IMU 722基于与三角形相关联的α位来执行。如果是与不透明三角形的交点(步骤1322中为是),则IMU 722可以确定相交的不透明三角形是否比存储在结果队列中的不透明三角形更接近光线原点(步骤1324)。如果相交的不透明三角形比先前在结果队列中存储的不透明三角形更接近光线原点(步骤1324中为“是”),则相交的不透明三角形交点将替换结果队列中先前存储的不透明三角形交点(步骤1326)。类似地,如果结果队列中没有存储不透明三角形,则相交的不透明三角形是与光线原点最近的交点,并将存储在队列中(步骤1326)。
确定相交的不透明三角形是否比存储在结果队列中的不透明三角形更接近光线原点可以包括:IMU 722比较三角形的t值是否表示沿着光线的参数长度(沿着光线发生相交的点)小于表示存储在队列中的不透明三角形的参数长度的t值。具有较小t值的三角形存储在结果队列中,因为它更接近光线原点并且沿着自观察者的光线隐藏其他三角形。将剔除具有较大参数长度的三角形。
在确定哪个交点更近(步骤1324)时,两个三角形可以具有相同的参数交点值。“T-fighting”可能存在于相同三角形范围的两个三角形块中。在一个实施例中,通过存储器返回顺序首先出现的三角形将获胜并存储在结果队列中。
在一些示例性实施例中,当新的不透明三角形交点被存储在结果队列中时(步骤1326),可以将光线的长度缩短到不透明三角形的交点的参数长度。以这种方式,当针对其他三角形重复光线-三角形交点时,如果其t值超出结果队列中存储的不透明交点的t值,则TTU将不会在结果队列中记录进入的不透明交点或α交点。为了提供确定性结果(例如,当两个三角形可以具有相同的t值时),可以仅在已经处理了整个三角形范围之后缩短光线。步骤1324中的最接近的相交测试可足以剔除另外的三角形而不需要缩短光线直到测试三角形范围中的所有三角形的交点。
如果相交的不透明三角形不比结果队列中先前存储的不透明三角形更接近光线原点(步骤1324中为“否”),则相交的不透明三角形不被添加到结果队列中并且确定在该范围是否存在任何附加三角形(步骤1318)。如果在相同的块或与三角形范围相关联的另一块的三角形范围中存在要测试的另一个三角形(步骤1318中为“是”),则可以对下一个三角形执行三角形-光线测试(步骤1314)。如果三角形范围中没有其他三角形要测试的(步骤1318中为“否”),则完成了光线-三角测试,并且可以将光线-三角测试的结果发送到SM(步骤1320)。
因此,在不透明三角形的交点之后,IMU单元不是返回该三角形交点以由SM记录,而是存储三角形信息和三角形被碰撞处的距离。可以在TTU内部缩短光线,使得超出该不透明三角形的任何项目或三角形被剔除。
当确定与光线的α三角形交点时,TTU应该将该α三角形返回到SM。如果没有先前的交点,则TTU将α三角形以及有关如何在下一步骤继续遍历的信息返回到SM以进行进一步处理。在一个实现中,该信息包含在其条目控制遍历的堆栈中。通过堆叠植入来控制遍历不是必须的。在SM基于进一步处理确定α三角形的实际碰撞的情况下,它可以缩短光线的长度,使得超过该α三角形的任何项目或三角形被剔除。
在具有单个条目结果队列(并且单个条目返回到SM)的实现中,在α三角形相交之后,可能已经相交了先前的不透明三角形。为了不丢失该原始交点,IMU首先将该不透明三角形连同有关如何在测试相同的相交α三角形时继续遍历的信息返回到SM。当SM继续遍历时,首先发生的是α三角形交点,然后其可以被返回,因为在同一个查询中没有先前的交点。
如图13所示,如果是与α三角形的交点(步骤1322中为“否”),则确定结果队列中是否存储了不透明交点(步骤1330)。如果结果队列中已经存储了不透明的交点(步骤1330中为“是”),则将结果队列连同关于如何继续遍历的信息一起返回到SM 132。在将不透明三角形返回到SM 132之后,TTU可以从SM 132接收另一个查询。另一个查询可以修改先前发出的查询,使得要测试的三角形范围不包括已经返回到SM 132的相交的不透明三角形。另一个查询还可以将光线的长度更新为交点的参数长度,使得空间上位于不透明三角形后面的任何三角形都不与光线相交。
在该示例中,TTU 700将所存储的交点返回到调用线程,其请求再次询问光线-三角形查询,因为存在需要测试的更多三角形。SM 132可以使用关于如何继续遍历的信息来向TTU 700发出查询以继续对于从存储器中返回的不透明三角形后面的三角形处开始的三角形范围的光线相交测试。以这种方式,TTU 700将再次标识α三角形交点,但是这次将不存在在结果队列中存储的不透明三角形交点,并且可以将α三角形返回到SM 132以进行进一步处理(例如,确定是否有实际碰撞)。
如果结果队列中没有存储不透明交点(步骤1330中为“否”),则可以将α三角交点连同关于如何继续遍历的信息返回到SM 132(步骤1334)。在此示例中,即使遍历尚未完成,具有α位设置的相交三角形也将返回到SM。在将不透明三角形返回到SM 132之后,TTU 700可以从SM 132接收另一个查询。SM 132可以基于SM 132解析(例如,基于纹理信息)发出对TTU 700的另一个查询,查询光线是否与应用于α三角形表面的纹理相交和/或纹理是否会阻挡光线。另一个查询可以修改先前发出的查询,使得三角形范围不包括先前返回到SM132的相交α三角形。如果SM 132确定α三角形被光线阻挡,则SM 132可以缩短光线的长度到交点的参数长度,并将另一个查询返回到具有修改的光线长度的TTU 700,使得超出该α三角形的任何项目或三角形被剔除。如果SM 132确定该α三角形未被光线阻挡,则SM 132可以在另一个查询中保持相同的光线参数,但是修改要测试的三角形的范围。
在该示例中,结果队列可以包括用于不透明三角形交点或α三角形交点的单个条目(参见图12中的条目1210)。然而,其他实施例可以包括用于附加的α三角形交点的一个或更多个附加条目(参见图12中的条目1220和1230)。
在一个示例中,如果IMU包括具有用于多个α三角形的空间的结果队列(例如,条目1220和1230)并且标识新的α三角形交点,则新的α三角形交点可以与其他先前标识的α三角形交点一起存储在队列中。在测试三角形范围中的所有三角形之后,可以将结果队列中的α三角形返回到SM 132以进行进一步处理。
在一些情况下,结果队列的大小可能不足以存储三角形范围中被测试的所有α三角形交点。在一个实施例中,当α三角形队列已满并且确定了另一个相交的α三角形时,队列中的三角形可以返回到SM 132。与结果一起,SM 132被通知在三角形范围中存在其他α三角形并且查询需要继续测试三角形范围。SM 132可以发出另一个查询以测试三角形范围的剩余三角形中的交点。
在其他实施例中,当确定新的α三角形交点并且结果队列已满时,如果在存储器地址顺序中新的α三角形早于存储在结果队列中的一个α三角形出现,则IMU 722可以用新的α三角形条目替换队列中存储的α三角形条目之一。因此,TTU 700将测试三角形范围中的所有三角形并且以存储器地址顺序返回一组α三角形交点,而不管α三角形交点是否在参数上更接近或更远离光线原点。当该组α三角形交点返回到SM 132时,结果可以与遍历堆栈信息一起返回到SM 132,该遍历堆栈信息包含继续遍历以确定三角形范围中的任何剩余的α三角形交点所需的状态。
在结果队列包括用于α交点的单个条目的一个实施例中,IMU 722可以应用协议以向SM 132提供确定性结果,而与三角形范围的三角形被提供给TTU 700用于光线-三角形相交测试的存储器顺序无关。在此协议中,存储器顺序中最近的α碰撞维持在结果队列中,而不是参数上最近的α碰撞。当多个块包括三角形范围的三角形时可以应用该协议,并且可以将块提供给TTU 700以便以任何顺序进行处理。在此示例中,α碰撞存储在α队列中,并且遍历继续标识三角形范围中是否存在任何其他α碰撞。使用以存储器顺序较早发生的任何α碰撞更新α队列。所有的α碰撞都在TTU 700中被标识,但只有以存储器顺序最先发生的α碰撞被存储在队列中。按存储器顺序的第一个α碰撞被返回到SM 132,并且修改堆栈条目中的三角形范围,以便不再返回返回到SM 132的三角形。在继续遍历时,堆栈条目中的三角形范围指向以存储器顺序被标识出的用于其的下一个交点并提供给SM 132的其他三角形。重复该过程直到与光线相交的所有α三角形返回到SM 132。只要设置了一个位,指示在三角形范围中存在剩余的α三角形要测试,就可以重复该过程。
在包含项目范围的包围盒的交点的情况下使用相同的机制,所述项目范围的各个交点不是硬件加速的并且因此必须返回到SM。项目范围提供了一种在加速数据结构内指定一组几何类别的图元的方法,该几何类别可以由协处理器支持或不支持,其在存储器块的序列内被编码。
在多个α三角形相同三角形范围内相交(即,BVH的叶节点)的情况下,IMU返回指向以该存储器顺序在该范围内相交的第一α三角形的指针。在三角形范围内,如果三角形范围内的所有三角形按照存储器顺序位于起始三角形之后,则可以保证测试它们。然后,随后每次后续调用查询,逐个返回α三角形。
一些实现可以在IMU中使用大缓冲区以在返回到SM之前累积单个不透明三角形和/或多个α三角形。鉴于不透明三角形的性质,永远不需要累积多于一个三角形。这进一步减少了返回数量。
一些实现也可以使用大缓冲区来记录项目范围交点并在第一个交点过后继续遍历。
主要差异以及硬件解决方案的使用使得我们可以隐藏那些可证明能够隐藏而没有对结果场景产生功能性影响的项目或三角形。在软件中完成的先前实现需要检查相交的所有三角形或项目范围。
本发明是用于DirectX Raytracing(DXR)和OptiXTM中的光线追踪的树遍历单元(TTU)的关键组件。返回到SM的结果的减少以及线程之间的同步步骤极大地改善了遍历的整体性能。
包括光线追踪的示例性图像生成管线
上述光线追踪和其他能力可以以各种方式使用。例如,除了用于使用光线追踪来渲染场景之外,它们还可以与扫描变换技术结合实现,例如在扫描变换3D模型的几何构建块(即,诸如三角形的多边形图元)以用于生成用于显示的图像(例如,在图1中所示的显示器150上)的上下文中。
图14示出了根据实施例的用于处理图元以提供图像的图像像素值的示例性流程图。
如图14所示,可以响应于接收到用户输入而生成3D模型的图像(步骤1652)。用户输入可以是显示图像或图像序列的请求,诸如在与应用程序(例如,游戏应用程序)交互期间执行的输入操作。响应于用户输入,***使用传统的GPU 3D图形管线执行场景的3D模型几何图元的扫描变换和光栅化(步骤1654)。几何图元的扫描变换和光栅化可以包括例如处理3D模型的图元以使用传统技术(诸如本领域技术人员所公知的照明、变换、纹理映射、光栅化等)来确定图像像素值,下面结合图18讨论。生成的像素数据可以写入帧缓冲器。
在步骤1656中,可以使用TTU硬件加速从光栅化图元上的一个或更多个点追踪一个或更多个光线。可以根据本申请中公开的一种或更多种光线追踪能力来追踪光线。基于光线追踪的结果,可以修改存储在缓冲器中的像素值(步骤1658)。在一些应用中,修改像素值可以例如通过应用更逼真的反射和/或阴影来改善图像质量。使用存储在缓冲器中的修改的像素值显示图像(步骤1660)。
在一个示例中,可以使用关于图15-图17、图19、图20、图21和/或图22描述的处理***来实现几何图元的扫描变换和光栅化,并且可以由SM 132使用关于图9描述的TTU架构来实现光线追踪,以添加进一步的可视化特征(例如镜面反射、阴影等)。图14仅仅是非限制性示例-SM 132可以自己使用所描述的TTU而无需纹理处理或其他传统3D图形处理来产生图像,或者SM可以采用纹理处理和其他传统3D图形处理而无需所描述的TTU来产生图像。SM还可以根据应用在软件中实现任何期望的图像生成或其他功能,以提供不受纹理映射硬件、树遍历硬件或其他图形管线硬件提供的硬件加速特征界定的任何期望的可编程功能。
包括光线追踪的示例性并行处理架构
上面描述的TTU结构可以在示例性非限制性并行处理***架构中实现,或者与其相关联,例如下面结合图15-图22所描述的。这种并行处理架构可用于例如实现图1的GPU130。
示例性并行处理架构
图15示出了示例非限制性的并行处理单元(PPU)1700。在一个实施例中,PPU 1700是在一个或更多个集成电路器件上实现的多线程处理器。PPU 1700是设计用于并行处理许多线程的延迟隐藏架构。线程(即,执行线程)是被配置为由PPU 1700执行的指令集的实例化。在一个实施例中,PPU 1700被配置为实现用于处理三维(3D)图形数据的图形渲染管线,以便生成二维(2D)图像数据,用于在显示设备(诸如液晶显示(LCD)设备、有机发光二极管(OLED)设备、透明发光二极管(TOLED)设备、场发射显示器(FED)、场顺序显示器、投影显示器、头戴式显示器或任何其他所需显示器)上显示。在其他实施例中,PPU 1700可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。
例如,一个或更多个PPU 1700可以被配置为加速数千个高性能计算(HPC)、数据中心和机器学***台、深度学习、高精度语音、图像和文本识别***、智能视频分析、分子模拟、药物发现、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐等。
PPU 1700可以包括在台式计算机、膝上型计算机、平板计算机、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数码相机、车辆、头戴式显示器、手持电子设备等中。在一个实施例中,PPU 1700体现在单个半导体衬底上。在另一个实施例中,PPU1700与一个或更多个其他器件(例如,附加PPU 1700、存储器1704、精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数模转换器(DAC)等)一起被包括在片上***(SoC)中。
在一个实施例中,PPU 1700可以被包括在包括一个或更多个存储器器件1704的图形卡上。图形卡可以被配置为与台式计算机的主板上的PCIe插槽接口。在又一个实施例中,PPU 1700可以是包括在主板的芯片组中的集成图形处理单元(iGPU)或并行处理器。
如图15所示,PPU 1700包括输入/输出(I/O)单元1705、前端单元1715、调度器单元1720、工作分配单元1725、集线器1730、交叉开关(Xbar)1770、一个或更多个通用处理集群(GPC)1750以及一个或更多个分区单元1780。PPU 1700可以经由一个或更多个高速NVLink1710互连连接到主机处理器或其他PPU 1700。PPU 1700可以经由互连1702连接到主机处理器或其他***设备。PPU 1700还可以连接到包括多个存储器设备1704的本地存储器。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(DRAM)器件。DRAM器件可以被配置为高带宽存储器(HBM)子***,其中多个DRAM裸晶(die)堆叠在每个器件内。
NVLink 1710互连使得***能够扩展并且包括与一个或更多个CPU结合的一个或更多个PPU 1700,支持PPU 1700和CPU之间的高速缓存一致性以及CPU主控。数据和/或命令可以由NVLink 1710通过集线器1730发送到PPU 1700的其他单元或从其发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图21更详细地描述NVLink 1710。
I/O单元1705被配置为通过互连1702从主机处理器(未示出)发送和接收通信(即,命令、数据等)。I/O单元1705可以经由互连1702直接与主机处理器通信,或通过一个或更多个中间设备(诸如存储器桥)与主机处理器通信。在一个实施例中,I/O单元1705可以经由互连1702与一个或更多个其他处理器(例如,一个或更多个PPU 1700)通信。在一个实施例中,I/O单元1705实现***组件互连高速(PCIe)接口,用于通过PCIe总线进行通信,并且互连1702是PCIe总线。在替代实施例中,I/O单元1705可以实现其他类型的已知接口,用于与外部设备进行通信。
I/O单元1705对经由互连1702接收的分组进行解码。在一个实施例中,分组表示被配置为使PPU 1700执行各种操作的命令。I/O单元1705按照命令指定将解码的命令发送到PPU 1700的各种其他单元。例如,一些命令可以被发送到前端单元1715。其他命令可以被发送到集线器1730或PPU 1700的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,I/O单元1705被配置为在PPU 1700的各种逻辑单元之间和之中路由通信。
在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向PPU 1700提供工作量用于处理。工作量可以包括要由那些指令处理的若干指令和数据。缓冲区是存储器中可由主机处理器和PPU1700两者访问(即,读/写)的区域。例如,I/O单元1705可以被配置为经由通过互连1702发送的存储器请求访问连接到互连1702的***存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向PPU1700发送指向命令流开始的指针。前端单元1715接收指向一个或更多个命令流的指针。前端单元1715管理一个或更多个流,从流读取命令并将命令转发到PPU 1700的各个单元。
前端单元1715耦合到调度器单元1720,调度器单元1720配置各种GPC 1750以处理由一个或更多个流定义的任务。调度器单元1720被配置为追踪与由调度器单元1720管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个GPC 1750,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元1720管理一个或更多个GPC 1750上的多个任务的执行。
调度器单元1720耦合到工作分配单元1725,工作分配单元1725被配置为分派任务以在GPC 1750上执行。工作分配单元1725可以追踪从调度器单元1720接收到的多个调度任务。在一个实施例中,工作分配单元1725为每个GPC 1750管理待处理(pending)任务池和活动任务池。待处理任务池可以包括多个槽(例如,32个槽),其包含被指派为由特定GPC 1750处理的任务。活动任务池可以包括多个槽(例如,4个槽),用于正在由GPC1750主动处理的任务。当GPC 1750完成任务的执行时,该任务从GPC 1750的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在GPC 1750上执行。如果GPC 1750上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从GPC 1750中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在GPC1750上执行。
工作分配单元1725经由XBar(交叉开关)1770与一个或更多个GPC1750通信。XBar1770是将PPU 1700的许多单元耦合到PPU 1700的其他单元的互连网络。例如,XBar 1770可以被配置为将工作分配单元1725耦合到特定的GPC 1750。虽然没有明确示出,但PPU 1700的一个或更多个其他单元也可以经由集线器1730连接到XBar 1770。
任务由调度器单元1720管理并由工作分配单元1725分派给GPC1750。GPC 1750被配置为处理任务并生成结果。结果可以由GPC 1750内的其他任务消耗,经由XBar 1770路由到不同的GPC 1750,或者存储在存储器1704中。结果可以经由分区单元1780写入存储器1704,分区单元1780实现用于从存储器1704读取数据和/或向存储器1704写入数据的存储器接口。结果可以经由NVLink1710发送到另一个PPU 1704或CPU。在一个实施例中,PPU1700包括数目为U的分区单元1780,其等于耦合到PPU 1700的独立且不同的存储器设备1704的数目。下面将结合图16更详细地描述分区单元1780。
在一个实施例中,主机处理器(例如,图1的处理器120)执行实现应用程序编程接口(API)的驱动程序内核,其使得能够在主机处理器上执行一个或更多个应用程序,以调度用于在PPU 1700上执行的操作。在一个实施例中,多个计算机应用程序由PPU 1700同时执行,并且PPU 1700为多个计算机应用程序提供隔离、服务质量(QoS)和独立地址空间。应用程序可以生成指令(即API调用),其使得驱动程序内核生成一个或更多个任务以由PPU1700执行。驱动程序内核将任务输出到正在由PPU 1700处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括用于执行任务的指令并且可以通过共享存储器交换数据的多个线程。结合图19更详细地描述线程和协作线程。
示例性存储器分区单元
MMU 1890提供GPC 1750和分区单元1780之间的接口。MMU 1890可以提供虚拟地址到物理地址的转换,存储器保护和存储器请求的仲裁。在一个实施例中,MMU 1890提供一个或更多个转换后备缓冲器(TLB),用于执行虚拟地址到存储器1704中的物理地址的转换。
图16示出了根据实施例的图15的PPU 1700的存储器分区单元1780。如图16所示,存储器分区单元1780包括光栅操作(ROP)单元1850、二级(L2)高速缓存1860和存储器接口1870。存储器接口1870耦合到存储器1704。存储器接口1870可以实现用于高速数据传输的32、64、128、1024位数据总线等。在一个实施例中,PPU 1700包含U个存储器接口1870,每对分区单元1780一个存储器接口1870,其中每对分区单元1780连接到相应的存储器设备1704。例如,PPU 1700可以连接到多达Y个存储器设备1704,例如高带宽存储器堆栈或图形双数据速率,版本5,同步动态随机存取存储器或其他类型的持久存储器。
在一个实施例中,存储器接口1870实现HBM2存储器接口并且Y等于U的一半。在一个实施例中,HBM2存储器堆栈与PPU 1700位于相同的物理封装上,与传统的GDDR5SDRAM***相比,其提供了相当大的功率和面积节省。在一个实施例中,每个HBM2堆栈包括四个存储器裸晶并且Y等于4,HBM2堆栈包括每个裸晶两个128位通道,总共8个通道和1024位的数据总线宽度。
在一个实施例中,存储器1704支持单纠错双错误检测(SECDED)纠错码(ECC)以保护数据。ECC为对数据损坏敏感的计算应用程序提供更高的可靠性。可靠性在大规模集群计算环境中尤其重要,其中PPU 1700处理非常大的数据集和/或长时间运行应用程序。
在一个实施例中,PPU 1700实现多级存储器层次。在一个实施例中,存储器分区单元1780支持统一存储器,以为CPU和PPU 1700存储器提供单个统一虚拟地址空间,从而实现虚拟存储器***之间的数据共享。在一个实施例中,追踪PPU 1700对位于其他处理器上的存储器的访问频率,以确保将存储器页面移动到更频繁地访问页面的PPU 1700的物理存储器。在一个实施例中,NVLink 1710支持地址转换服务,允许PPU 1700直接访问CPU的页表并由PPU 1700提供对CPU存储器的完全访问。
在一个实施例中,复制引擎在多个PPU 1700之间或在PPU 1700和CPU之间传输数据。复制引擎可以为未映射到页表的地址生成页面错误。然后,存储器分区单元1780可以服务页面错误,将地址映射到页表中,之后复制引擎可以执行该传输。在传统***中,存储器被固定(即,不可分页)以用于多个处理器之间的多个复制引擎操作,从而大大减少了可用存储器。使用硬件页面错误,可以将地址传递给复制引擎,而不必担心存储器页面是否驻留,并且复制过程是透明的。
来自存储器1704或其他***存储器的数据可以由存储器分区单元1780获取并存储在L2高速缓存1860中,L2高速缓存1860位于芯片上并且在各种GPC 1750之间共享。如图所示,每个存储器分区单元1780包括与相应的存储器设备1704相关联的L2高速缓存1860的一部分。然后,可以在GPC 1750内的各种单元中实现较低级的高速缓存。例如,SM 1840中的每一个可以实现一级(L1)高速缓存。L1高速缓存是专用于特定SM1840的专用存储器。可以获取来自L2高速缓存1860的数据并将其存储在每个L1高速缓存中,以便在SM 1840的功能单元中进行处理。L2高速缓存1860被耦合到存储器接口1870和XBar 1770。
ROP单元1850执行与像素颜色有关的图形光栅操作,例如颜色压缩、像素混合等。ROP单元1850还结合光栅引擎1825实现深度测试,接收与来自光栅引擎1825的剔除引擎的像素片段相关联的样本位置的深度。针对深度缓冲器中的对应深度测试与片段关联的样本位置的深度。如果片段通过样本位置的深度测试,则ROP单元1850更新深度缓冲器并将深度测试的结果发送到光栅引擎1825。应当理解,分区单元1780的数量可以不同于GPC 1750的数量,并且因此每个ROP单元1850可以耦合到每个GPC 1750。ROP单元1850追踪从不同GPC1750接收的分组,并且确定由ROP单元1850生成的结果通过Xbar 1770被路由到哪个GPC1750。虽然ROP单元1850被包括在图16中的存储器分区单元1780内,但在其他实施例中,ROP单元1850可以在存储器分区单元1780之外。例如,ROP单元1850可以驻留在GPC 1750或另一单元中。
示例性通用处理群集
图17示出了根据一个实施例的图15的PPU 1700的GPC 1750。如图17所示,每个GPC1750包括用于处理任务的多个硬件单元。在一个实施例中,每个GPC 1750包括管线管理器1810、预光栅操作单元(PROP)1815、光栅引擎1825、工作分配交叉开关(WDX)1880、存储器管理单元(MMU)1890以及一个或更多个数据处理集群(DPC)1820。应当理解,图17的GPC 1750可以包括代替图17中所示单元的其他硬件单元或除图17中所示单元之外的其他硬件单元。
在一个实施例中,GPC 1750的操作由管线管理器1810控制。管线管理器1810管理用于处理分配给GPC 1750的任务的一个或更多个DPC 1820的配置。在一个实施例中,管线管理器1810可以配置一个或更多个DPC1820中的至少一个来实现图形渲染管线的至少一部分。
包括在GPC 1750中的每个DPC 1820包括M管道控制器(MPC)1830、图元引擎1835、一个或更多个SM 1840、一个或更多个纹理单元1842以及一个或更多个TTU 700。SM 1840可以与上述SM 132类似地构造。MPC1830控制DPC 1820的操作,将从管线管理器1810接收的分组路由到DPC1820中的适当单元。例如,与顶点相关联的分组可以被路由到图元引擎1835,其被配置为获取与来自存储器1704的顶点相关联的顶点属性。相反,与着色器程序相关联的分组可以被发送到SM 1840。
当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图15中所示的固定功能图形处理单元被绕过,创建一个更简单的编程模型。在通用并行计算配置中,工作分配单元1725将线程块直接分配和分发给DPC 1820。块中的线程执行相同的程序,在计算中使用唯一的线程ID以确保每个线程生成唯一的结果,使用SM 1840执行程序并执行计算,使用共享存储器/L1高速缓存1970以在线程之间通信,并且使用LSU 1954以通过共享存储器/L1高速缓存1970和存储器分区单元1780读取和写入全局存储器。当配置用于通用并行计算时,SM 1840还可以写入调度器单元1720可以用来在DPC 1820上启动新工作的命令。TTU 700可以用于在通用计算的上下文中加速空间查询。
图形渲染管线
DPC 1820可以被配置为在可编程流式多处理器(SM)1840上执行顶点着色程序,其可以采用TTU 700加速某些着色操作。管线管理器1810还可以被配置为将从工作分配单元1725接收的分组路由到GPC 1750中适当的逻辑单元。例如,一些分组可以被路由到PROP1815和/或光栅引擎1825中的固定功能硬件单元,而其他分组可以被路由到DPC 1820以供图元引擎1835或SM 1840处理。在一个实施例中,管线管理器1810可以配置一个或更多个DPC 1820中的至少一个以实现神经网络模型和/或计算管线。
PROP单元1815被配置为将由光栅引擎1825和DPC 1820生成的数据路由到光栅操作(ROP)单元,其结合图16更详细地描述。PROP单元1815还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。
光栅引擎1825包括被配置为执行各种光栅操作的多个固定功能硬件单元。在一个实施例中,光栅引擎1825包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和图块聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元相关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,图块的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除,并且未被剔除的片段被发送到裁剪引擎,其中位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎1825的输出包括例如要由在DPC 1820内实现的片段着色器处理的片段。
更详细地,PPU 1700被配置为接收指定用于处理图形数据的着色器程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形条等。通常,图元包括指定图元的多个顶点的数据(例如,在模型空间坐标系中)以及与图元的每个顶点相关联的属性。PPU 1700可以被配置为使用例如TTU 700作为硬件加速资源来处理图元以生成帧缓冲器(即,用于显示器的每个像素的像素数据)。
应用程序将场景的模型数据(即,顶点和属性的集合)写入存储器(诸如***存储器或存储器1704)。模型数据定义可在显示器上可见的每个对象。如上所述,模型数据还可以定义如上描述的一个或更多个BVH。然后,应用程序对驱动程序内核进行API调用,请求呈现和显示模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行处理模型数据的操作。命令可以引用要在PPU 1700的SM 1840上实现的不同着色器程序,包括顶点着色器、外壳着色器、域着色器、几何着色器、像素着色器、光线生成着色器、光线相交着色器、光线碰撞着色器和光线未碰撞着色器中的一个或更多个(这些着色器对应于DirectX光线追踪(DXR)API定义的着色器,忽略“最近碰撞”和“任意碰撞”着色器之间的任何区别;参阅https://devblogs.nvidia.com/introduction-nvidia-rtx-directx-ray-tracing/)。例如,SM 1840中的一个或更多个可以被配置为执行顶点着色器程序,该顶点着色器程序处理由模型数据定义的多个顶点。在一个实施例中,不同的SM1840可以被配置为同时执行不同的着色器程序。例如,SM 1840的第一子集可以被配置为执行顶点着色器程序,而SM 1840的第二子集可以被配置为执行像素着色器程序。SM 1840的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入L2高速缓存1860和/或存储器1704(参见图16)。在经处理的顶点数据被光栅化(即,从三维数据变换成屏幕空间中的二维数据)以产生片段数据之后,SM 1840的第二子集执行像素着色器以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并写入存储器1704中的帧缓冲器。顶点着色器程序和像素着色器程序可以同时执行,以管线方式处理来自同一场景的不同数据,直到场景的所有模型数据都已被渲染到帧缓冲器。然后,帧缓冲器的内容被发送到显示控制器以在显示设备上显示。
图18是由图15的PPU 1700实现的图形处理管线2000的概念图。图形处理管线2000是被实现为从3D几何数据生成2D计算机生成的图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更有效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线2000接收输入数据2001,其从图形处理管线2000的一个阶段被发送到下一个阶段以生成输出数据2002。在一个实施例中,图形处理管线2000可以表示由
Figure BDA0002085068200000541
API定义的图形处理管线。作为选择,图形处理管线2000可以在前面的附图和/或任何后续附图的功能和架构的上下文中实现。如上面参考图14所讨论的那样,光线追踪可用于改善由几何图元的光栅化生成的图像质量。在一些实施例中,本申请中公开的光线追踪操作和TTU结构可以应用于图形处理管线2000的一个或更多个状态,以改善主观图像质量。
如图18所示,图形处理管线2000包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装阶段2010,顶点着色阶段2020,图元组装阶段2030,几何着色阶段2040,视口缩放、剔除和裁剪(VSCC)阶段2050,光栅化阶段2060,片段着色阶段2070和光栅操作阶段2080。在一个实施例中,输入数据2001包括配置处理单元以实现图形处理管线2000的阶段的命令和由阶段处理的几何图元(例如,点、线、三角形、四边形、三角形条或扇形等)。输出数据2002可以包括被复制到帧缓冲器中的像素数据(即,颜色数据)或存储器中的其他类型的表面数据结构。
数据组装阶段2010接收输入数据2001,其指定高阶表面的顶点数据、图元等。数据组装阶段2010在临时存储或队列中收集顶点数据,例如通过从主机处理器接收包括指向存储器中的缓冲器的指针的命令以及从缓冲器读取顶点数据。然后将顶点数据被发送到顶点着色阶段2020以进行处理。
顶点着色阶段2020通过对每个顶点执行一次一组操作(即,顶点着色器或程序)来处理顶点数据。例如,顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(即,<x,y,z,w>)。顶点着色阶段2020可以操纵各个顶点属性,例如位置、颜色、纹理坐标等。换句话说,顶点着色阶段2020对顶点坐标或与顶点相关联的其他顶点属性执行操作。这些操作通常包括照明操作(即,修改顶点的颜色属性)和变换操作(即,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,通过将坐标乘以将坐标从对象坐标空间变换为世界空间或归一化设备坐标(NCD)空间的矩阵来进行变换。顶点着色阶段2020生成变换的顶点数据,该变换的顶点数据被发送到图元组装阶段2030。
图元组装阶段2030收集由顶点着色阶段2020输出的顶点,并将顶点分组为几何图元,以供几何着色阶段2040处理。例如,图元组装阶段2030可被配置为将每三个连续顶点分组为几何图元(即,三角形),用于发送到几何着色阶段2040。在一些实施例中,特定顶点可以重复用于连续几何图元(例如,三角形条带中的两个连续三角形可以共享两个顶点)。图元组装阶段2030将几何图元(即,关联顶点的集合)发送到几何着色阶段2040。
几何着色阶段2040通过对几何图元执行一组操作(即,几何着色器或程序)来处理几何图元。曲面细分操作可以从每个几何图元生成一个或更多个几何图元。换句话说,几何着色阶段2040可以将每个几何图元细分为两个或更多个几何图元的更精细网格,以供图形处理管线2000的其余部分处理。几何着色阶段2040将几何图元发送到视口SCC阶段2050。
在一个实施例中,图形处理管线2000可以在流式多处理器和顶点着色阶段2020、图元组装阶段2030、几何着色阶段2040、片段着色阶段2070、光线追踪着色器和/或与其相关联的硬件/软件中操作,可以顺序地执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口SCC阶段2050可以利用该数据。在一个实施例中,可以将由图形处理管线2000中的一个或更多个阶段处理的图元数据写入高速缓存(例如,L1高速缓存、顶点高速缓存等)。在这种情况下,在一个实施例中,视口SCC阶段2050可以访问高速缓存中的数据。在一个实施例中,视口SCC阶段2050和光栅化阶段2060被实现为固定功能电路。
视口SCC阶段2050执行几何图元的视口缩放、剔除和裁剪。渲染的每个表面与抽象摄像机位置相关联。摄像机位置表示观看者观看场景的位置,并定义包围场景对象的视锥体。视锥体可包括观察平面,后平面和四个裁剪平面。完全在视锥体之外的任何几何图元可以被剔除(即,丢弃),因为该几何图元将不会对最终渲染场景做出贡献。可以裁剪部分位于视锥体内部并且部分位于视锥体外部的任何几何图元(即,变换为包围在视锥体内的新的几何图元)。此外,几何图元可以各自基于视锥体的深度来缩放。然后,将所有可能可见的几何图元发送到光栅化阶段2060。
光栅化阶段2060将3D几何图元转换为2D片段(例如,能够用于显示等)。光栅化阶段2060可以被配置为利用几何图元的顶点来设置一组平面方程,从中可以***各种属性。光栅化阶段2060还可以计算多个像素的覆盖掩码,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化阶段2060生成片段数据(即,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),其被发送到片段着色阶段2070。
片段着色阶段2070通过对每个片段执行一组操作(即,片段着色器或程序)来处理片段数据。片段着色阶段2070可以生成片段的像素数据(即,颜色值),诸如通过使用片段的内插纹理坐标执行照明操作或采样纹理映射。片段着色阶段2070生成发送到光栅操作阶段2080的像素数据。
光栅操作阶段2080可以对像素数据执行各种操作,诸如执行阿尔法测试,模板测试,以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作阶段2080已经完成处理像素数据(即,输出数据2002)时,可以将像素数据写入渲染目标(诸如帧缓冲器、颜色缓冲器等)。
应当理解,除了上述一个或更多个阶段之外或代替上述一个或更多个阶段,可以在图形处理管线2000中包括一个或更多个附加阶段。抽象图形处理管线的各种实现可以实现不同的阶段。此外,在一些实施例中(例如,几何着色阶段2040),可以从图形处理管线中排除上述一个或更多个阶段。其他类型的图形处理管线也考虑在本公开的范围内。此外,图形处理管线2000的任何阶段可以由图形处理器(诸如PPU 200)内的一个或更多个专用硬件单元实现。图形处理管线2000的其他阶段可以由可编程硬件单元(诸如PPU 1700的SM 1840的)实现。
图形处理管线2000可以经由由主机处理器(诸如CPU 120)执行的应用程序来实现。在一个实施例中,设备驱动器可以实现定义可以由应用程序利用以生成用于显示的图形数据的各种功能的应用程序编程接口(API)。设备驱动程序是包括控制PPU 1700的操作的多个指令的软件程序。API为程序员提供抽象,其允许程序员利用专用图形硬件(例如PPU1700)来生成图形数据,而不需要程序员利用PPU 1700的特定指令集。应用程序可以包括被路由到PPU 1700的设备驱动器的API调用。设备驱动器解释API调用并执行各种操作以响应API调用。在某些情况下,设备驱动器可以通过在CPU上执行指令来执行操作。在其他情况下,设备驱动器可以至少部分地通过利用CPU和PPU 1700之间的输入/输出接口在PPU1700上启动操作来执行操作。在一个实施例中,设备驱动器被配置为利用PPU1700的硬件来实现图形处理管线2000。
可以在PPU 1700内执行各种程序以便实现图形处理管线2000的各个阶段。例如,设备驱动器可以在PPU 1700上启动内核,以在一个SM 1840(或多个SM 1840)上执行顶点着色阶段2020。设备驱动器(或由PPU 1800执行的初始内核)还可以在PPU 1800上启动其他内核,以执行图形处理管线2000的其他阶段,例如几何着色阶段2040和片段着色阶段2070。此外,图形处理管线2000的一些阶段可以在固定单元硬件上实现,例如在PPU1800内实现的光栅化器或数据汇编器上。可以理解,来自一个内核的结果可以在由SM 1840上的后续内核处理之前通过一个或更多个中间固定功能硬件单元来处理。
示例性流式多处理器
SM 1840包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个SM1840是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程,其包括线程束)。在一个实施例中,SM 1840实现SIMD(单指令、多数据)体系架构,其中线程组(即,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,SM 1840实现SIMT(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使能线程束和线程束中的串行执行之间的并发。在另一个实施例中,为每个个体线程维护程序计数器、调用栈和执行状态,使能在线程束内和线程束之间的所有线程之间的相等并发。当为每个个体线程维护执行状态时,执行相同指令的线程可以收敛并且并行执行以获得最大效率。
图19示出了根据一个实施例的图17的流式多处理器1840。如图19所示,SM 1840包括指令高速缓存1905、一个或更多个调度器单元1910、寄存器文件1920、一个或更多个处理核心1950、一个或更多个特殊功能单元(SFU)1952、一个或更多个加载/存储单元(LSU)1954、互连网络1980、共享存储器/L1高速缓存1970。
如上所述,工作分配单元1725分派任务以在PPU 1700的GPC 1750上执行。任务被分配给GPC 1750内的特定DPC 1820,并且如果任务与着色器程序相关联,则该任务可以被分配给SM 1840。调度器单元1910从工作分配单元1725接收任务并且管理指派给SM 1840的一个或更多个线程块的指令调度。调度器单元1910调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元1910可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心1950、SFU1952和LSU 1954)。
协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动API支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的屏障(barrier)(即,syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collectivegroup-wide function interface)的形式使能更高的性能、设计灵活性和软件重用。
协作组使得程序员能够在子块(即,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作伙伴并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。
分派单元1915被配置为向一个或更多个功能单元发送指令。在该实施例中,调度器单元1910包括两个分派单元1915,其使得能够在每个时钟周期期间调度来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元1910可以包括单个分派单元1915或附加分派单元1915。
每个SM 1840包括寄存器文件1920,其提供用于SM 1840的功能单元的一组寄存器。在一个实施例中,寄存器文件1920在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件1920的专用部分。在另一个实施例中,寄存器文件1920在由SM 1840执行的不同线程束之间被划分。寄存器文件1920为连接到功能单元的数据路径的操作数提供临时存储。图20示出了SM 1840中的寄存器文件的示例性配置。
每个SM 1840包括L个处理核心1950。在一个实施例中,SM 1840包括大量(例如128个等)不同的处理核心1950。每个核心1950可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的IEEE 754-2008标准。在一个实施例中,核心1950包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensor core)。
张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心1950中。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在4×4矩阵上运算并且执行矩阵乘法和累加运算D=A×B+C,其中A、B、C和D是4×4矩阵。
在一个实施例中,矩阵乘法输入A和B是16位浮点矩阵,而累加矩阵C和D可以是16位浮点或32位浮点矩阵。张量核心对16位浮点输入数据进行运算并与32位浮点进行累加。16位浮点乘法需要64次运算,产生全精度的积,然后使用32位浮点与4×4×4矩阵乘法的其他中间积相加来累加。在实践中,张量核心用于执行由这些较小的元素建立的更大的二维或更高维的矩阵运算。API(诸如CUDA9C++API)公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自CUDA-C++程序的张量核心。在CUDA层面,线程束级接口假定16×16尺寸矩阵跨越线程束的全部32个线程。
每个SM 1840还包括执行特殊函数(例如,属性评估、倒数平方根等)的M个SFU1952。在一个实施例中,SFU 1952可以包括树遍历单元,其被配置为遍历层次树形数据结构。在一个实施例中,SFU 1952可以包括被配置为执行纹理映射过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器1704加载纹理映射(例如,纹理像素的2D阵列)并且对纹理映射进行采样以产生经采样的纹理值,用于在由SM 1840执行的着色器程序中使用。在一个实施例中,纹理映射被存储在共享存储器/L1高速缓存1970中。纹理单元实现纹理操作,诸如使用mip映射(即,不同细节层次的纹理映射)的过滤操作。在一个实施例中,每个SM 1740包括两个纹理单元。
每个SM 1840还包括N个LSU 1954,其实现共享存储器/L1高速缓存1970和寄存器文件1920之间的加载和存储操作。每个SM 1840包括互连网络1980,其将每个功能单元连接到寄存器文件1920以及将LSU 1954连接到寄存器文件1920、共享存储器/L1高速缓存1970。在一个实施例中,互连网络1980是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件1920中的任何寄存器,以及将LSU 1954连接到寄存器文件和共享存储器/L1高速缓存1970中的存储器位置。
共享存储器/L1高速缓存1970是片上存储器阵列,其允许数据存储和SM 1840与图元引擎1835之间以及SM 1840中的线程之间的通信。在一个实施例中,共享存储器/L1高速缓存1970包括128KB的存储容量并且在从SM 1840到分区单元380的路径中。共享存储器/L1高速缓存1970可以用于高速缓存读取和写入。共享存储器/L1高速缓存1970、L2高速缓存1860和存储器1704中的一个或更多个是后备存储。
将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供了最佳的总体性能。该容量可由不使用共享存储器的程序用作高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器/L1高速缓存1970内的集成使共享存储器/L1高速缓存1970起到用于流式传输数据的高吞吐量管道的作用,并且同时提供高带宽和对频繁重用数据的低延迟的访问。
图20示出了SM 1840的一个示例性架构。如图17所示,SM 1840可以耦合到一个或更多个纹理单元1842和/或一个或更多个TTU 700。作为性能和区域之间的折衷,一个示例性非限制性实施例可以包括单个纹理单元1842和/或每组SM 1840单个TTU 700(例如,参见图17)。TTU 700可以经由存储器输入-输出中的TTU输入/输出块与SM 1840通信,并且经由专用读取接口与L1高速缓存通信。在一个示例性实施例中,TTU 700仅从主存储器读取并且不写入主存储器。
示例性更详细的TTU架构
如上所述,TTU 700可以是SM 1840的协处理器。与纹理处理器类似,它通过一组SM指令暴露,访问存储器作为L1高速缓存的只读客户端,并返回结果进入SM寄存器文件。与一些纹理处理器不同,对于典型查询,可能需要传入和传出TTU 700的数据量使得在一些实施例中难以在单个指令中指定所有源寄存器和目的地寄存器(并且因为大多数这样的数据每个线程是唯一的,没有纹理头和采样器的TTU模拟)。结果,在一些实施例中,TTU 700通过多指令序列编程。在一些实现中,该序列可以概念化为单个“宏指令”。
同样像纹理单元1842,在一些实现中,TTU 700可以依赖于由软件预先填充的存储器中的某些只读数据结构。这些包括:
--一个或更多个BVH,其中每个BVH例如是轴对齐的包围盒的树,以压缩格式存储,与未压缩的表示相比,其大大减少了存储器通信量。BVH中的每个节点都存储为complet结构,其中一些实现中的大小和对齐与L1高速缓存行的大小和对齐相匹配。优选地,将给定父级的子级complet连续地存储在存储器中,并且以压缩形式存储子指针。
--零个或更多个实例节点,其提供将一个BVH的叶连接到另一个BVH的根的方式。实例节点可以是也对齐的数据结构。该结构可以包含指向子BVH的指针,影响子BVH中的背面剔除行为的标记,以及对应于从顶层BVH(通常为“世界空间”)的坐标系到子BVH(通常为“对象空间”)的坐标系的任意变换矩阵(在齐次坐标中)的前三行的矩阵。在一些实施例中,矩阵的最后一行在一些实现中隐含地为(0,0,0,1)。
--零个或更多个三角形或其他图元缓冲区,包含例如存储为每顶点坐标的三元组或以TTU 700理解的无损压缩格式存储的三角形。此外,可以为每个三角形或其他图元提供α位,指示需要由软件进行特殊处理的三角形,以确定三角形实际上是否与给定光线相交。三角形缓冲区可以组织成块。也可能存在每个三角形力-无-剔除功能位。设置时,该位表示三角形的两侧应被视为相对于剔除的前向或后向,即,不应该剔除三角形,因为光线与“后”而不是“前”相交。最简单的用例是用于表示叶的单个三角形,如果光线在背面上碰撞它,我们仍然可以看到叶。
在一些实施例中,TTU 700是无状态的,意味着在查询之间不在TTU中维持架构状态。同时,在SM 1840上运行软件对要求继续先前的查询通常是有用的,这意味着相关状态应该由TTU 700写入寄存器,然后在寄存器中传递回TTU(通常原地)继续。该状态可以采用遍历堆栈的形式,其追踪BVH遍历的进展。
还可以提供少量堆栈初始化器以开始给定类型的新查询,例如:
·从complet开始遍历
·光线与一系列三角形的交点
·光线与一系列三角形的交点,然后从complet开始遍历
·从三角形缓冲区中获取给定三角形的顶点
·可选支持在“从complet开始的遍历”和“光线与一系列三角形的交点”前面的实例变换。
顶点获取是一种简单查询,其可以由包括堆栈初始化器的请求数据指定而不是其他任何东西。其他查询类型可能需要指定光线或光束,以及堆栈或堆栈初始化器以及描述查询详细信息的各种光线标记。光线由其三坐标原点、三坐标方向以及沿光线的t参数的最小值和最大值给定。另外通过第二原点和方向给定光束。
各种光线标记可用于控制遍历行为、背面剔除和各种子节点类型的处理的各个方面,受制于可选的rayOp测试的通过/失败状态。RayOps为TTU的容量增加了相当大的灵活性。在一些示例性实施例中,RayOps部分引入两个光线标记版本,其可以基于对光线传送的数据的指定操作和存储在complet中的数据来动态选择。为了探索这样的标记,首先要了解BVH中允许的不同类型的子节点,以及TTU 700可以返回SM的各种碰撞类型。示例性节点类型是:
■子complet(即,内部节点)
默认情况下,TTU 700通过下降到子complet继续遍历。
■三角形范围,对应于三角形缓冲区内的一组连续三角形
(1)默认情况下,通过三角形相交测试并相应地缩短光线,由TTU 700本地处理光线遇到三角形范围。如果遍历完成并且三角形被碰撞,则默认行为是将三角形ID以及交点的t值和重心坐标返回到SM 1840。这是“三角”碰撞类型。
(2)默认情况下,即使遍历尚未完成,设置了α位的相交三角形也会返回到SM1840。如果软件确定三角形实际上是透明的,则返回的遍历堆栈包含继续遍历所需的状态。
(3)在一些实施例中,光束不支持三角形相交,因此遇到的三角形范围默认返回到SM 1840作为“TriRange”碰撞类型,其包括指向与范围重叠的第一个三角形块的指针,指定范围的参数,以及与叶包围盒交点的t值。
■项目范围,由索引(从存储在complet中的用户提供的“项目范围基础”导出)和项目计数组成。
默认情况下,项目范围作为“ItemRange”碰撞类型返回到SM 1840,其由例如索引、计数和与叶包围盒交点的t值组成。
■实例节点。
在一些实施例中,TTU 700可以通过将光线变换为实例BVH的坐标系来本地处理一级实例化。可以用软件处理附加层的实例化(或每个其他层的实例化,取决于策略)。为此提供“实例节点”碰撞类型,包括指向实例节点的指针和与叶包围盒的交点的t值。在其他实现中,硬件可以处理两层、三层或更多层的实例化。
除了节点特定的碰撞类型之外,还提供了通用的“NodeRef”碰撞类型,其包括指向父complet本身的指针,以及指示与哪个子项相交的ID和该子项与包围盒的交点的t值。
可以针对不正确地形成查询或BVH或者遍历期间遍历遇到问题的情况提供“错误”碰撞类型。
可以为光线或光束未碰撞场景中的所有几何形状的情况提供“无”碰撞类型。
TTU如何处理四种可能节点类型中的每一种由一组节点特定模式标记确定,该标记被设置为给定光线的查询的一部分。上面提到的“默认”行为对应于模式标记被设置为全零的情况。
标记的替代值允许剔除给定类型的所有节点,将给定类型的节点作为NodeRef碰撞类型返回到SM,或者使用它们相应的碰撞类型将三角形范围或实例节点返回到SM,而不是在TTU 700内本地处理它们。
可以提供附加模式标记以用于控制α三角形的处理。
示例性计算***
具有多个GPU和CPU的***被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署了具有数十至数千个计算节点的高性能GPU加速***,以解决更大的问题。随着高性能***内处理设备数量的增加,通信和数据传输机制需要扩展以支持处理设备之间的增加的数据传输。
图21是根据一个实施例的使用图15的PPU 1700实现的处理***1900的概念图。示例性***1900可以被配置为实现本申请中公开的一种或更多种方法。处理***1900包括CPU 1930、交换机1910和多个PPU 1700中的每一个以及相应的存储器1704。NVLink 1710提供每个PPU 1700之间的高速通信链路。尽管图21中示出了特定数量的NVLink 1710和互连1702连接,但是到每个PPU 1700和CPU 1930的连接的数量可以改变。交换机1910在互连1702和CPU 1930之间接口。PPU 1700、存储器1704和NVLink1710可以位于单个半导体平台上以形成并行处理模块1925。在一个实施例中,交换机1912支持在各种不同连接和/或链路之间接口的两个或更多个协议。
在另一个实施例(未示出)中,NVLink 1710在每个PPU 1700和CPU1930之间提供一个或更多个高速通信链路,并且交换机1912在互连1702和每个PPU 1700之间进行接口。PPU1700、存储器1704和互连1702可以位于单个半导体平台上以形成并行处理模块1925。在又一个实施例(未示出)中,互连1702在每个PPU 1700和CPU 1930之间提供一个或更多个通信链路,并且交换机1912使用NVLink 1710在每个PPU 1700之间进行接口,以在PPU 1700之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中,NVLink 1710在PPU1700和CPU 1930之间通过交换机1912提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连1702在每个PPU 1700之间直接地提供一个或更多个通信链路。可以使用与NVLink1710相同的协议将一个或更多个NVLink 1710高速通信链路实现为物理NVLink互连或者片上或裸晶上互连。
在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块1925可以被实现为电路板衬底,并且PPU 1700和/或存储器1704中的每一个可以是封装器件。在一个实施例中,CPU 1930、交换机1912和并行处理模块1925位于单个半导体平台上。
在一个实施例中,每个NVLink 1710的信令速率是20到25千兆位/秒,并且每个PPU1700包括六个NVLink 1710接口(如图21所示,每个PPU 1700包括五个NVLink 1710接口)。每个NVLink 1710在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供1700千兆位/秒的数据传输速率。当CPU 1930还包括一个或更多个NVLink 1710接口时,NVLink1710可专门用于如图21所示的PPU到PPU通信,或者PPU到PPU以及PPU到CPU的某种组合。
在一个实施例中,NVLink 1710允许从CPU 1930到每个PPU 1700的存储器1704的直接加载/存储/原子访问。在一个实施例中,NVLink 1710支持一致性操作,允许从存储器1704读取的数据被存储在CPU 1930的高速缓存层次结构中,减少了CPU 1930的高速缓存访问延迟。在一个实施例中,NVLink 1710包括对地址转换服务(ATS)的支持,允许PPU 1700直接访问CPU 1930内的页表。一个或更多个NVLink 1710还可以被配置为以低功率模式操作。
图22示出了示例性***1965,其中可以实现各种先前实施例的各种体系架构和/或功能。示例性***1965可以被配置为实现本申请中公开的一种或更多种方法。
如图所示,提供***1965,其包括连接到通信总线1975的至少一个中央处理单元1930。通信总线1975可以使用任何合适的协议来实现,诸如PCI(***组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或一个或更多个点对点通信协议。***1965还包括主存储器1940。控制逻辑(软件)和数据被存储在主存储器1940中,主存储器1940可以采取随机存取存储器(RAM)的形式。
***1965还包括输入设备1960、并行处理***1925和显示设备1945,即常规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等。可以从输入设备1960(例如键盘、鼠标、触摸板、麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成***1965。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
此外,***1965可以出于通信目的通过网络接口1935耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如因特网)、对等网络、电缆网络等)。
***1965还可以包括辅助存储(未示出)。辅助存储610包括例如硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
计算机程序或计算机控制逻辑算法可以存储在主存储器1940和/或辅助存储中。这些计算机程序在被执行时使得***1965能够执行各种功能。存储器1940、存储和/或任何其他存储是计算机可读介质的可能示例。
各种在先附图的架构和/或功能可以在通用计算机***、电路板***、专用于娱乐目的的游戏控制台***、专用***和/或任何其他所需的***的上下文中实现。例如,***1965可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数字相机、运载工具、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式***和/或任何其他类型的逻辑的形式。
机器学习
在处理器(诸如PPU 1700)上开发的深度神经网络(DNN)已经用于各种使用情况:从自驾车到更快药物开发,从在线图像数据库中的自动图像字幕到视频聊天应用中的智能实时语言翻译。深度学习是一种技术,它建模人类大脑的神经学习过程,不断学习,不断变得更聪明,并且随着时间的推移更快地传送更准确的结果。一个孩子最初是由成人教导,以正确识别和分类各种形状,最终能够在没有任何辅导的情况下识别形状。同样,深度学习或神经学习***需要在对象识别和分类方面进行训练,以便在识别基本对象、遮挡对象等同时还有为对象分配情景时变得更加智能和高效。
在最简单的层面上,人类大脑中的神经元查看接收到的各种输入,将重要性级别分配给这些输入中的每一个,并且将输出传递给其他神经元以进行处理。人造神经元或感知器是神经网络的最基本模型。在一个示例中,感知器可以接收一个或更多个输入,其表示感知器正被训练为识别和分类的对象的各种特征,并且在定义对象形状时,这些特征中的每一个基于该特征的重要性赋予一定的权重。
深度神经网络(DNN)模型包括许多连接的感知器(例如节点)的多个层,其可以用大量输入数据来训练以快速高精度地解决复杂问题。在一个示例中,DLL模型的第一层将汽车的输入图像分解为各个部分,并查找基本图案(诸如线条和角)。第二层组装线条以寻找更高层的图案,诸如轮子、挡风玻璃和镜子。下一层识别运载工具类型,最后几层为输入图像生成标签,识别特定汽车品牌的型号。
一旦DNN被训练,DNN就可以被部署并用于在被称为推理(inference)的过程中识别和分类对象或图案。推理的示例(DNN从给定输入中提取有用信息的过程)包括识别存入ATM机中的支票上的手写数字、识别照片中朋友的图像、向超过五千万用户提供电影推荐、识别和分类不同类型的汽车、行人和无人驾驶汽车中的道路危险或实时翻译人类言语。
在训练期间,数据在前向传播阶段流过DNN,直到产生预测为止,其指示对应于输入的标签。如果神经网络没有正确标记输入,则分析正确标签和预测标签之间的误差,并且在后向传播阶段期间针对每个特征调整权重,直到DNN正确标记该输入和训练数据集中的其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括由PPU 1700支持的浮点乘法和加法。与训练相比,推理的计算密集程度比训练低,其是一个延迟敏感过程,其中经训练的神经网络应用于它以前没有见过的新的输入,以进行图像分类、翻译语音以及通常推理新的信息。
神经网络严重依赖于矩阵数学运算,并且复杂的多层网络需要大量的浮点性能和带宽来提高效率和速度。采用数千个处理核心,针对矩阵数学运算进行了优化,并传送数十到数百TFLOPS的性能,PPU 1700是能够传送基于深度神经网络的人工智能和机器学***台。
以上引用的所有专利和出版物均通过引用并入,如同明确阐述一样。虽然已经结合目前被认为是最实用和优选的实施例描述了本发明,但是应该理解,本发明不限于所公开的实施例,而是相反,旨在涵盖各种实施例。在所附权利要求的精神和范围内包括的修改和等同布置。

Claims (22)

1.一种***,包括:
存储器,被配置为存储包括多个层次节点的加速数据结构的至少一部分,至少一个节点标识虚拟场景的图元;以及
可操作地耦合到所述存储器的自主硬件电路,被配置为:
确定在所述至少一个节点中标识的与光线相交的图元;以及
省略报告被确定与光线相交的一个或更多个图元。
2.如权利要求1所述的***,其中所述自主硬件电路包括协处理器。
3.如权利要求1所述的***,其中所述省略的一个或更多个图元包括被证明能够被省略而不会对可视化所述虚拟场景产生功能性影响的图元。
4.如权利要求3所述的***,其中,与所述光线相交、被证明能够被省略而不会对可视化所述虚拟场景产生功能性影响的所述图元,比被确定为与所述光线相交的另一图元在参数上更远离所述光线的原点。
5.如权利要求1所述的***,其中,在所述至少一个节点中标识的所述图元包括不透明图元和α图元,并且所述硬件电路被配置为在确定所述光线与α图元相交时,将所述相交的α图元标识到流式处理器用于进一步处理。
6.如权利要求1所述的***,其中,在所述至少一个节点中标识的所述图元包括不透明图元和α图元,并且所述硬件电路被配置为:
在确定所述光线与不透明图元相交时,将所述不透明图元的交点信息存储在结果队列中;以及
在确定所述光线与α图元相交并且所述结果队列包括所述不透明图元的交点信息时,在将所述相交的α图元的交点信息发送到流式处理器之前,将存储的所述不透明图元的交点信息发送到所述流式处理器。
7.如权利要求1所述的***,其中,在所述至少一个节点中标识的所述图元包括不透明图元和α图元,并且所述硬件电路被配置为:
在确定所述光线与不透明图元相交时,将所述不透明图元的交点信息存储在结果队列中;以及
在确定所述光线与α图元相交并且所述结果队列包括所述不透明图元的交点信息时,将存储的所述不透明图元的交点信息发送到流式处理器,并且在由所述流式处理器执行与所述不透明图元相关的处理之后,遍历包括状态信息的堆栈信息,以用于继续遍历所述不透明图元和所述α图元。
8.如权利要求1所述的***,其中,所述硬件电路被配置为确定与所述光线相交的每个图元,并将每个相交的图元的交点信息发送到流式处理器。
9.如权利要求3所述的***,其中在至少一个节点中标识的所述图元包括在连续的块组内编码的一系列图元;以及
所述硬件电路包括光线-三角形测试和变换单元以及相交管理单元,所述光线-三角形测试和变换单元包括处理逻辑,所述处理逻辑被配置为将所述光线从世界空间变换到所述一系列图元的对象空间,并确定所述一系列图元中在所述对象空间中与所述光线相交的图元,以及所述相交管理单元包括结果队列,并且被配置为确定哪些相交的图元被证明能够被省略而不会对可视化所述虚拟场景产生功能性影响。
10.一种由耦合到流式多处理器的基于硬件的遍历协处理器实现的方法,所述方法包括:
将包括多个层次节点的加速数据结构的至少一部分存储在存储器中,至少一个节点标识虚拟场景的图元;
确定在所述至少一个节点中标识的与光线相交的图元;以及
省略向所述流式多处理器报告被确定与所述光线相交的一个或更多个图元。
11.如权利要求10所述的方法,其中,所述省略的一个或更多个图元包括被证明能够被省略而不会对可视化所述虚拟场景产生功能性影响的图元。
12.如权利要求11所述的方法,其中,与所述光线相交、被证明能够被省略而不会对可视化所述虚拟场景产生功能性影响所述图元,比被确定为与所述光线相交的另一图元在参数上更远离所述光线的原点。
13.如权利要求10所述的方法,其中,在所述至少一个节点中标识的所述图元包括不透明图元和α图元,并且所述方法还包括:在确定所述光线与α图元相交时,将所述相交的α图元标识到所述流式多处理器用于进一步处理。
14.如权利要求10所述的方法,其中,在所述至少一个节点中标识的所述图元包括不透明图元和α图元,并且所述方法还包括:
在确定所述光线与不透明图元相交时,将所述不透明图元的交点信息存储在结果队列中;以及
在确定所述光线与α图元相交并且所述结果队列包括所述不透明图元的交点信息时,在将所述相交的α图元的交点信息发送到流式处理器之前,将存储的所述不透明图元的交点信息发送到所述流式处理器。
15.如权利要求10所述的方法,其中,在所述至少一个节点中标识的所述图元包括不透明图元和α图元,并且所述方法还包括:
在确定所述光线与不透明图元相交时,将所述不透明图元的交点信息存储在结果队列中;以及
在确定所述光线与α图元相交并且所述结果队列包括所述不透明图元的交点信息时,将存储的所述不透明图元的交点信息发送到流式多处理器,并且在由所述流式处理器执行与所述不透明图元相关的处理之后,遍历包括状态信息的堆栈信息,以用于继续遍历所述不透明图元和所述α图元。
16.如权利要求10所述的方法,还包括确定与所述光线相交的每个图元,并将每个相交的图元的交点信息发送到流式处理器。
17.如权利要求10所述的方法,其中,在所述至少一个节点中标识的所述图元包括不透明图元和α图元,并且标识到所述流式多处理器的一个或更多个α图元比被确定为与所述光线相交的不透明图元在参数上更远离所述光线的原点。
18.如权利要求10所述的方法,其中所述方法包括将所述光线从世界空间变换到在所述至少一个节点中标识的所述图元的对象空间,并且确定相交的图元包括确定所标识的图元中在所述对象空间与所述光线相交的图元。
19.如权利要求10所述的方法,其中在所述至少一个节点中标识的所述图元包括α三角形和不透明三角形,并且所述光线由三坐标原点、三坐标方向以及沿着所述光线的t参数的最小值和最大值标识。
20.一种基于硬件的遍历协处理器,被配置为:
从流式多处理器接收标识光线和树形数据结构的查询,以测试图元与光线的交点;
从所述遍历协处理器外部的存储器中检索所述树形数据结构的部分,每个部分标识所述树形数据结构中标识的层次包围盒的一个或更多个包围盒;
确定与所述光线相交的所述层次包围盒的最小细分;
将在与所述光线相交的所述层次包围盒的最小细分中标识的一系列图元推送到堆栈上;
确定与所述光线相交的所述一系列图元中的图元;
将被确定与所述光线相交的一个或更多个图元的交点信息存储在结果队列中;
省略来自所述结果队列的、被确定为与所述光线相交的至少一个图元的交点信息;以及
将存储在所述结果队列中的所述相交的图元的交点信息返回到所述流式多处理器。
21.如权利要求20所述的基于硬件的遍历协处理器,其中存储在所述结果队列中的所述相交的图元信息被发送到所述树形数据结构的流式多处理器中间遍历。
22.如权利要求20所述的基于硬件的遍历协处理器,其中存储在所述结果队列中的所述相交的图元信息在查询完成时被发送到所述流式多处理器。
CN201910484916.1A 2018-08-10 2019-06-05 没有着色器干预下对交点进行连续层次包围盒遍历的方法 Pending CN110827387A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/101,066 2018-08-10
US16/101,066 US10580196B1 (en) 2018-08-10 2018-08-10 Method for continued bounding volume hierarchy traversal on intersection without shader intervention

Publications (1)

Publication Number Publication Date
CN110827387A true CN110827387A (zh) 2020-02-21

Family

ID=69185996

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910484916.1A Pending CN110827387A (zh) 2018-08-10 2019-06-05 没有着色器干预下对交点进行连续层次包围盒遍历的方法

Country Status (3)

Country Link
US (5) US10580196B1 (zh)
CN (1) CN110827387A (zh)
DE (1) DE102019103058A1 (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110930497A (zh) * 2020-02-11 2020-03-27 南京芯瞳半导体技术有限公司 一种全局光照相交加速方法、装置及计算机存储介质
CN112417746A (zh) * 2020-11-18 2021-02-26 中北大学 一种基于神经网络预测碰撞检测的方法
CN113781624A (zh) * 2020-06-10 2021-12-10 辉达公司 具有可选的世界空间变换的光线跟踪硬件加速
CN114092614A (zh) * 2020-07-30 2022-02-25 苹果公司 带有并行光线测试的光线相交电路
US11521343B2 (en) 2020-07-30 2022-12-06 Apple Inc. Graphics memory space for shader core

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10867429B2 (en) 2018-08-10 2020-12-15 Nvidia Corporation Query-specific behavioral modification of tree traversal
US11354820B2 (en) * 2018-11-17 2022-06-07 Uatc, Llc Image based localization system
US11004253B2 (en) * 2019-02-21 2021-05-11 Electronic Arts Inc. Systems and methods for texture-space ray tracing of transparent and translucent objects
US11238649B2 (en) * 2019-11-26 2022-02-01 Nature Simulation Systems Inc. Method and system for hybrid modeling using geometric facets
US11276224B2 (en) 2020-04-17 2022-03-15 Samsung Electronics Co., Ltd. Method for ray intersection sorting
US11302056B2 (en) 2020-06-10 2022-04-12 Nvidia Corporation Techniques for traversing data employed in ray tracing
US11380041B2 (en) 2020-06-11 2022-07-05 Nvidia Corporation Enhanced techniques for traversing ray tracing acceleration structures
US11450057B2 (en) * 2020-06-15 2022-09-20 Nvidia Corporation Hardware acceleration for ray tracing primitives that share vertices
US11508112B2 (en) 2020-06-18 2022-11-22 Nvidia Corporation Early release of resources in ray tracing hardware
US11768686B2 (en) 2020-07-27 2023-09-26 Nvidia Corporation Out of order memory request tracking structure and technique
US11704859B2 (en) * 2020-08-20 2023-07-18 Sony Interactive Entertainment LLC System and method for accelerated ray tracing
CN113034658B (zh) * 2021-03-30 2022-10-04 完美世界(北京)软件科技发展有限公司 一种模型贴图的生成方法和装置
US20230078932A1 (en) 2021-09-16 2023-03-16 Nvidia Corporation Displaced Micro-meshes for Ray and Path Tracing
US20240087211A1 (en) 2022-09-09 2024-03-14 Nvidia Corporation Generation and Traversal of Partial Acceleration Structures for Ray Tracing
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
US20240095994A1 (en) 2022-09-16 2024-03-21 Nvidia Corporation Reducing false positive ray traversal using point degenerate culling
US20240095993A1 (en) 2022-09-16 2024-03-21 Nvidia Corporation Reducing false positive ray traversal in a bounding volume hierarchy
WO2023132971A1 (en) * 2022-11-03 2023-07-13 Innopeak Technology, Inc. Volumetric transparency and shadows for mobile graphics

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6489955B1 (en) * 1999-06-07 2002-12-03 Intel Corporation Ray intersection reduction using directionally classified target lists
US20090128562A1 (en) * 2007-11-19 2009-05-21 Caustic Graphics, Inc. Systems and methods for rendering with ray tracing
CN101490715A (zh) * 2006-07-28 2009-07-22 国际商业机器公司 具有最小存储器带宽要求的优化的光线编历算法的高速缓存利用
CN101685548A (zh) * 2008-09-26 2010-03-31 辉达公司 用于混合光线跟踪***的片段着色器及操作方法
WO2016160334A1 (en) * 2015-04-02 2016-10-06 Qualcomm Incorporated Efficient hierarchy traversal in ray tracing applications
US9607426B1 (en) * 2013-12-20 2017-03-28 Imagination Technologies Limited Asynchronous and concurrent ray tracing and rasterization rendering processes
GB201721702D0 (en) * 2017-07-13 2018-02-07 Imagination Tech Ltd Hybrid hierarchy for ray tracing
CN108052703A (zh) * 2017-11-22 2018-05-18 南京航空航天大学 基于混合层次包围盒的快速碰撞检测方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7688320B2 (en) * 2006-09-27 2010-03-30 International Business Machines Corporation Methods and systems for texture prefetching based on a most recently hit primitive algorithm
US9355492B2 (en) * 2013-05-15 2016-05-31 Nvidia Corporation System, method, and computer program product for utilizing a wavefront path tracer
JP6028857B2 (ja) 2013-05-20 2016-11-24 富士通株式会社 データストリーム処理の並列化プログラム、及びデータストリーム処理の並列化システム
KR20150057868A (ko) * 2013-11-20 2015-05-28 삼성전자주식회사 레이 트레이싱 시스템에서의 이진트리 탐색 방법 및 장치
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
US10311629B2 (en) * 2016-01-22 2019-06-04 Intel Corporation Level of detail selection during ray tracing
US20170323471A1 (en) * 2016-05-06 2017-11-09 National Taiwan University 3D rendering method and 3D graphics processing device
US10706612B2 (en) * 2017-04-01 2020-07-07 Intel Corporation Tile-based immediate mode rendering with early hierarchical-z
US10614611B2 (en) * 2017-04-07 2020-04-07 Intel Corporation Apparatus and method for implementing bounding volume hierarchy (BVH) operations on tesselation hardware
US10438397B2 (en) * 2017-09-15 2019-10-08 Imagination Technologies Limited Reduced acceleration structures for ray tracing systems

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6489955B1 (en) * 1999-06-07 2002-12-03 Intel Corporation Ray intersection reduction using directionally classified target lists
CN101490715A (zh) * 2006-07-28 2009-07-22 国际商业机器公司 具有最小存储器带宽要求的优化的光线编历算法的高速缓存利用
US20090128562A1 (en) * 2007-11-19 2009-05-21 Caustic Graphics, Inc. Systems and methods for rendering with ray tracing
CN101685548A (zh) * 2008-09-26 2010-03-31 辉达公司 用于混合光线跟踪***的片段着色器及操作方法
US9607426B1 (en) * 2013-12-20 2017-03-28 Imagination Technologies Limited Asynchronous and concurrent ray tracing and rasterization rendering processes
WO2016160334A1 (en) * 2015-04-02 2016-10-06 Qualcomm Incorporated Efficient hierarchy traversal in ray tracing applications
CN107408312A (zh) * 2015-04-02 2017-11-28 高通股份有限公司 光线追踪应用中的有效层次结构遍历
GB201721702D0 (en) * 2017-07-13 2018-02-07 Imagination Tech Ltd Hybrid hierarchy for ray tracing
CN108052703A (zh) * 2017-11-22 2018-05-18 南京航空航天大学 基于混合层次包围盒的快速碰撞检测方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"动态场景的快速光线跟踪技术", 《华中师范大学学报(自然科学版)》, vol. 45, no. 2, 15 June 2011 (2011-06-15), pages 208 - 212 *
WALD, I: "Interactive isosurface ray tracing of time-varying tetrahedral volumes", 《IEEE TRANSACTIONS ON VISUALIZATION AND COMPUTER GRAPHICS》, vol. 13, no. 6, 1 November 2007 (2007-11-01), pages 1727 - 1734, XP011196464, DOI: 10.1109/TVCG.2007.70566 *

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110930497A (zh) * 2020-02-11 2020-03-27 南京芯瞳半导体技术有限公司 一种全局光照相交加速方法、装置及计算机存储介质
CN110930497B (zh) * 2020-02-11 2020-05-05 南京芯瞳半导体技术有限公司 一种全局光照相交加速方法、装置及计算机存储介质
CN113781624A (zh) * 2020-06-10 2021-12-10 辉达公司 具有可选的世界空间变换的光线跟踪硬件加速
CN114092614A (zh) * 2020-07-30 2022-02-25 苹果公司 带有并行光线测试的光线相交电路
CN114092614B (zh) * 2020-07-30 2022-11-22 苹果公司 带有并行光线测试的光线相交电路
US11521343B2 (en) 2020-07-30 2022-12-06 Apple Inc. Graphics memory space for shader core
TWI829602B (zh) * 2020-07-30 2024-01-11 美商蘋果公司 用以偵測射線與圖形基元之間的相交的設備及方法,以及非暫時性電腦可讀儲存媒體
US11875448B2 (en) 2020-07-30 2024-01-16 Apple Inc. SIMD group formation techniques during ray intersection traversal
CN112417746A (zh) * 2020-11-18 2021-02-26 中北大学 一种基于神经网络预测碰撞检测的方法
CN112417746B (zh) * 2020-11-18 2022-11-25 中北大学 一种基于神经网络预测碰撞检测的方法

Also Published As

Publication number Publication date
US11645810B2 (en) 2023-05-09
US20220058856A1 (en) 2022-02-24
US10825232B2 (en) 2020-11-03
US20210005010A1 (en) 2021-01-07
DE102019103058A1 (de) 2020-02-13
US20200160588A1 (en) 2020-05-21
US10580196B1 (en) 2020-03-03
US20230237729A1 (en) 2023-07-27
US20200051312A1 (en) 2020-02-13
US11200725B2 (en) 2021-12-14

Similar Documents

Publication Publication Date Title
CN110827385B (zh) 树遍历的特定于查询的行为修改
CN110827390B (zh) 处理无序不透明和α光线/图元交点的方法
US11928772B2 (en) Method for forward progress and programmable timeouts of tree traversal mechanisms in hardware
US11200725B2 (en) Method for continued bounding volume hierarchy traversal on intersection without shader intervention
US11704863B2 (en) Watertight ray triangle intersection
CN110858387B (zh) 鲁棒且高效的多处理器-协处理器接口
CN110827384B (zh) 用于对数据路径调度的高速缓存请求进行高效分组的方法
US10810785B2 (en) Method for forward progress tree traversal mechanisms in hardware

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