减少包围体层次结构中的假阳性光线遍历的制作方法

文档序号:37361320发布日期:2024-03-22 10:14阅读:16来源:国知局
减少包围体层次结构中的假阳性光线遍历的制作方法

本技术涉及计算机图形,尤其涉及光线追踪器。更具体地,该技术涉及包括光线追踪的计算机图形处理的硬件加速。本文的示例非限制性技术还涉及减少假阳性相交的光线相交测试。


背景技术:

1、光线追踪是指将光线投射到场景中,并确定该光线是否以及在何处与场景的几何形状相交。此基本光线追踪可见性测试是以计算机图形学中各种渲染算法和技术为基础的基本图元。通常,光线追踪是一种渲染方法,其中光线用于确定场景中各种元素的可见性。光线追踪用于各种渲染算法中,算法包括例如路径追踪和梅特罗波利斯(metropolis)光传输。在示例算法中,光线追踪通过对遍历场景的光传输进行建模来模拟光的物理现象以使用光线光学计算所有全局效应(包括例如来自发亮表面的反射)。在这样的光线追踪的用法中,当光线遍历三维场景从潜在的多个光源传播到视点时,可能会尝试追踪成百上千的光线中的每一个。通常,遍历场景相对于眼睛追踪此类光线,并针对场景中所有几何形状(geometry)的数据库进行测试。可以从光到眼睛向前追踪光,或者从眼睛到光反向追踪光,或者可以追踪光线以查看从虚拟相机开始并从眼睛开始的路径是否具有清晰的视线。该测试可以确定最近的相交(以便确定从眼睛可见的东西),也可以追踪从物体表面朝向光源的光线,以确定是否有任何干涉会阻止光到空间中该点的透射。因为光线与现实中的光的光线相似,所以它们提供了许多现实效果,而这些效果是使用许多其他3d图形技术无法实现的。由于来自场景中每个光源的每个照明光线在遍历场景中的每个对象时都经过评估,因此得到的图像看起来就像是在现实中拍摄的一样。因此,这些光线追踪方法长期以来一直在专业图形应用程序(例如设计和电影)中使用,其中在基于光栅的渲染方面它们占据了主导地位。

2、光线追踪可用于确定沿光线是否有任何东西可见(例如,测试几何图元上的阴影点与光源上的点之间的遮挡物),还可用于评估反射(例如,可能涉及执行遍历以确定沿视线的最近可见表面,以便在流处理器上运行的软件可以评估与所命中的事物相对应的材质着色功能——其反过来根据相交的对象的材料属性又可以向场景中发射一个或更多个附加光线)以确定沿光线返回向眼睛的光。在经典的递归光线追踪(whitted风格)光线追踪中,光线是从视点通过像素网格射入场景的,但是其他路径遍历也是可能的。通常,对于每条光线,找到最接近的对象。然后,可以通过将光线从相交点发射到场景中的每个光源并发现它们之间是否存在任何对象来确定该相交点是被照明还是处于阴影中。不透明的对象会挡住光,而透明的对象会减弱光。可以从相交点产生其他光线。例如,如果相交表面是发亮的或镜面的,则在反射方向上产生光线。光线可以接受相交的第一个对象的颜色,然后对它的相交点进行阴影测试。递归地重复此反射过程,直到达到递归限制或后续反弹的潜在贡献降至阈值以下。光线也可以在透明固体对象的折射方向上生成,然后再次递归地进行评估。因此,光线追踪技术允许图形系统依据物理规律开发正确的反射和阴影,其并不经受扫描变换技术的限制和伪像。

3、光线追踪的主要挑战通常是速度。光线追踪要求图形系统为每一帧计算和分析照射在构成场景的每个表面上(并可能被其反射)的数百万条光光线中的每一条。过去,如此庞大的计算复杂性无法实时执行。

4、现代gpu 3d图形管线如此快地渲染着色的、纹理映射的表面的原因之一是它们有效地使用了相干性。在常规的扫描变换中,假定所有内容都可以通过公共图像平面中的公共窗口查看并向下投影到单个有利点。每个三角形或其他图元通过图形管线发送,并覆盖一定数量的像素。可以针对从该三角形渲染的所有像素共享所有相关计算。因此,对应于遍历窗口的相干视线的像素的矩形图块可以对应于在同一流处理器中以锁步方式运行的线程组。假定落在三角形的边之间的所有像素都是运行相同着色器并从相同纹理获取相邻纹理像素组的相同材质。相反,在光线追踪中,光线可能在公共点(光源或虚拟相机镜头)处开始或结束,但是当它们在场景中传播并与不同的材质相交时,它们会迅速发散。例如,每条光线执行搜索以找到最接近的对象。可以执行对结果的一些高速缓存和共享,但是由于每条光线都可能命中不同的对象,因此不存在gpu传统上已经与纹理映射的、着色的三角形结合利用的那种相干性(例如,共同的优势点、窗口和图像平面没有用于光线追踪)。与其他图形方法相比,这使光线追踪在计算上更具挑战性,因此在交互基础上执行起来要困难得多。

5、在2010年,nvidia利用nvidia gpu和其他高度并行架构的高度并行性来开发optixtm光线追踪引擎。参见parker等人的“optix:通用光线追踪引擎(a general purposeray tracing engine)”(acm图形学汇刊(acm transactions on graphics),第29卷,第4期,第66条,2010年7月)。除了改进api(应用编程接口)之外,optixtm提供的一项进步是改进了用于找到光线与场景几何形状之间的交点的加速数据结构。这种加速数据结构通常是光线追踪遍历算法使用的有效地搜索可能与给定光线相交的图元的空间或对象层次结构。optixtm提供了应用程序可以从中选择的许多不同的加速结构类型。节点图中的每个加速结构可以是不同的类型,从而可以将高质量的静态结构与动态更新的结构组合在一起。

6、optix tm可编程光线追踪管线提供了显著的进步,但是其自己通常仍然无法在相对便宜的用于复杂3d场景的计算平台上对用户输入提供实时交互响应。自那时候起,nvidia已经在开发用于光线追踪的硬件加速功能。参见,例如,us 9582607、us 9569559、us20160070820、us 20160070767;以及以上引用的其他美国专利和专利申请。

7、大多数光线追踪器的基本任务是针对场景中的所有图元(在一个实施例中通常为三角形)测试光线,并报告最接近的命中(根据沿光线测量的距离)或仅报告所遇到的第一个(不一定是最接近的)命中,具体取决于用例。朴素贝叶斯算法将是o(n)暴力搜索。但是,由于任意复杂度的3d场景中有大量的图元,因此对于光线追踪器而言,测试场景中的每个几何图元与给定光线的相交通常是无效或不可行的。

8、通过预处理场景几何形状并预先构建合适的加速数据结构,然而,可以将平均情况的复杂度降低到o(log n)。加速数据结构(例如包围体层次结构或bvh)允许快速确定哪些包围体可以忽略,哪些包围体可以包含相交的几何图元,哪些相交的几何图元对于可视化很重要,而哪些则不重要。使用简单的体(例如盒子)包含更复杂的对象可提供计算和存储器效率,这有助于使光线追踪实时进行。

9、图1a-1c示出了在包括几何形状网格120的包围体110的背景下的光线追踪相交测试。图1a示出了在虚拟空间中包括包围体110和115的光线102。为了确定光线102是否与在网格120中的几何形状相交,可以直接针对光线102测试每个几何图元(例如三角形)。但是,为了加速该过程(因为对象可能包含成千上万的几何图元),首先针对包围体110和115测试光线102。如果光线102不与包围体相交,则它不与包围体内部的任何几何形状相交,并且出于该光线的目的,可以忽略该包围体内部的所有几何形状。因为在图1a中,光线102错过了包围体110,所以不需要针对相交测试该包围体内的网格120的任何几何形状。虽然包围体115被光线102相交,但是包围体115不包含任何几何形状,因此不需要进一步的测试。

10、另一方面,如果诸如图1b所示的光线104之类的光线与包含几何形状的包围体110相交,则该光线可能会或可能不会与包围体内部的几何形状相交,因此需要对几何形状本身执行进一步的测试以找到可能的相交。因为图1b和图1c中的光线104、106与包含几何形状的包围体110相交,所以需要执行进一步的测试以确定包围体内部是否有任何(和哪些)图元被相交。在图1b中,进一步测试与图元的相交将表明,即使光线104遍历包围体110,它也不会与包围体所包围的任何几何形状相交(或者,如上所述,包围体110可以进一步按体积细分,以便可以使用包围体相交测试来揭示光线不与任何几何形状相交,或更具体地,光线可以与哪些几何图元相交)。

11、图1c示出了光线与包围体110相交并且包含光线106与其相交的几何形状的情况。为了执行实时光线追踪,相交测试器测试相交的包围体110内的每个几何图元,以确定光线是否与该几何图元相交。

12、现代光线追踪器常使用的加速数据结构或加速结构(“as”)是包围体层次结构(bvh),其包括嵌套的轴向对齐的包围盒。bvh的叶节点包含要测试相交的图元(例如三角形)。bvh通常由图形或树结构数据表示来表示。

13、bvh as以将有助于帮助快速确定可能与每个特定光线相交的对象或场景的那个部分并快速拒绝光线不会与之相交的场景的大部分的方式来表示和/或引用对象或场景的3d模型。bvh数据结构表示具有包围体的场景或对象,并将包围体细分为越来越小的包围体,这些包围体终止于包含几何图元的叶节点。包围体是分层级的,这意味着最上级将其下级包围起来,该下级将其下级包围起来,依此类推。在每一级,对父包围体的子包围体的聚合可能会也可能不会完全填充由父包围体所定义的空间。在一个实施例中,叶节点可以潜在地与包围体层次结构中的其他叶节点重叠。在光线追踪中,当使用这样的as时,对于n个对象来说,用于找到光线的最接近(或者对于阴影,任何)相交的搜索通常是o(log n)阶。例如,通常用于现代光线追踪加速数据结构的包围体层次结构(bvh)通常具有o(log n)的搜索行为。

14、nvidia的rtx平台包括光线追踪技术,该技术可为内容创作者和游戏开发者带来实时的电影品质的渲染。请参阅https://developer.nvidia.com/rtx/raytracing。在包括nvidia rt核心在内的许多或大多数示例实现方式中,图1a-1c中所示的as的包围体使用轴对齐的包围盒(“aabb”),该包围盒可以紧凑地存储(它们可以只使用六个值来指定)并高效地测试光线相交。随着光线追踪器沿着bvh树向下追踪,其从搜索中去除非相交的包围盒,并将相交的包围盒细分为越来越小的体积,直到其遇到包围几何体的叶节点包围盒为止。针对aabb包围盒的光线包围体相交测试趋向于是便宜的。如果光线与叶节点包围盒相交,则使用光线-几何体相交测试对相交的叶节点包围盒所包围的底层几何体进行测试。如果光线未与叶节点包围体相交,则无需针对光线来测试叶节点包围体内的底层几何体。如图1a-1c所示,aabb的层次结构增加了单个aabb包围盒测试的剔除效果。这允许有效的遍历和快速减少感兴趣的几何体。

15、应用的bvh as可包括许多包围盒。此外,包围盒和几何体之间的空间关系不需要(而且在一般情况下不会)是精确的。也就是说,包围盒必须完全包含它所包围的几何体(因此,可以依赖负的光线-包围盒相交结果,因为其意味着光线没有与包围体内的任何几何体相交),但是包围体可以(并且通常是)大于它所包含的几何体。因此,为了更高效地使用存储器空间和带宽,指定包围体的参数(例如,表示包围体的盒的顶点坐标)通常被存储为已经被四舍五入的低精度数字数据,以确保包围盒完全包含几何体。作为低精度数字数据存储的顶点坐标比高精度数据占用更少的存储/存储器空间,这使得bvh可以以更压缩的方式存储。例如,由以8位精度数字数据格式存储的特定数量的包围体的顶点坐标所占用的存储/存储器空间的数量可以只是由以32位高精度数字数据格式存储的相同数量的包围体所占用的空间的四分之一。

16、光线-盒相交需要确定光线是否命中了包围体的任何表面。光线具有无限小的宽度。当考虑具有距离包围体很远的原点的光线时,光线原点的距离可能会引入四舍五入的误差,其偶尔会导致如下的实例:由于在包围体的顶点坐标中使用了低精度的数字,交点测试结果为“未命中”,尽管同一包围体的高精度表示会导致“命中”。因为光线遍历的工作方式是将所有在相交测试中未命中的包围体从该光线的遍历中剔除,因此,不准确的未命中导致错误地剔除了由被剔除的包围体所涵盖的所有几何体。这种被错误剔除的几何体可能会导致在渲染的场景中显示出不希望出现的伪影(例如,在这种几何体上呈现出不正确的光线效果)。

17、为了避免或减少因光线原点较远而导致的这种几何体的错误剔除,一些nvidia光线追踪实现在相交测试之前对光线引入了“膨胀(bloat)”。通过确保如果光线能够命中三角形则它也必定命中保守地环绕该三角形的包围盒,可以改善遍历。但是,除了提供保守的包围盒之外,出于光线-包围盒相交测试的目的,这还可能给无限小的光线有限的横截面体积。膨胀的结果是,光线被认为更像是锥形的光束,其在光线原点开始是一个点,随着距离的增加而变宽。在图1d中,光线108被显示为锥形光束109,其从光线原点107开始并且周长随距离增长。光束——其(与光线不同)具有体积——对以较低精度定义的包围盒顶点的容忍度更高。如图1d所示,尽管光线108没有与包围体110相交,但构成“膨胀”光线的光束109确实与包围体110相交。在上面提到的nvidia光线追踪实现中,这种给光线引入膨胀的技术在大多数情况下成功地减少了假阳性的光线-盒相交,这补偿了由包围盒顶点压缩引入的误差。

18、然而,当使用这种光线膨胀时,随着光线原点离正在考虑的特定包围体越来越远,相交点处的光束宽度可能会增长到过大,并且除了被对应光线相交和/或接近被相交的包围体之外,还涵盖一些包围体。例如,如果图1d中的光束109更宽(即因为光线原点离包围体更远),它也可能与包围体130相交,尽管光线108显然没有与该包围体相交。在这种光束宽度过宽的情况下,所有被光束相交但本不应该被对应光线相交的包围体都是“假阳性相交”,因为这种不正确地相交的包围体不涵盖最终会被光线遍历的几何体。这种假阳性相交不会引入图像伪影,但在不必要的额外测试方面,其会导致极大的低效。

19、光线追踪通过自上至下到每个相交的包围体来遍历bvh的层次结构。当遍历到达bvh的叶节点时,通常以更高精度的数据进行光线-几何体测试,以准确地确定命中和未命中。因此,光线-几何体测试结果不会受到低精度包围盒表示的影响。然而,对包围体的假阳性命中可能会导致进行不必要的光线-包围体和光线-图元相交测试,从而不必要地增加处理成本和光线遍历时间。在距离光线原点很远的地方,光线膨胀可能会变得过大,以至于光线-包围盒相交测试无法剔除任何东西。例如,想一想地球表面的激光对准月球。由准直光构成的激光束在穿过地球大气层时将保持紧密的聚焦。但是,月球距离地球大约38.4万公里。由于光在这样的距离上分散,因此,当激光束到达月球时,它的直径将膨胀到7公里左右。如果同样的激光束对准火星(距地球约5500万公里),由此产生的激光束的膨胀可能涵盖整个星球。

20、在光线追踪器中的光线膨胀的上下文中,这种膨胀的结果是太多的相交包围体,在这些包围体下可能没有实际的几何相交。在光线-包围体相交和光线-图元相交中的过量遍历会导致性能下降过于急剧,以至于它们可以被称为“性能悬崖”。

21、以前的或替代的水密性保证的解决方案可能使用全精度的包围盒相交而不是有损的低精度相交测试。这种方法的优点是不需要那么多(或任何)保守的光线膨胀。然而,如上所述,更高精度的包围盒表示具有更高的存储和更高的数学数据路径区硬件成本的缺点,这可能会减慢光线遍历。

22、为了更高效地执行实时光线追踪,希望在某些场景(例如,在光线的原点远离包围体的场景)中减少假阳性的光线-盒相交。


技术实现思路

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1