包围体层次结构生成的制作方法

文档序号:35051357发布日期:2023-08-06 03:58阅读:17来源:国知局
包围体层次结构生成的制作方法
包围体层次结构生成
1.相关申请的交叉引用
2.本技术要求2020年10月29日提交的名称为“包围体层次结构生成(bounding volume hierarchy generation)”的美国临时专利申请号63/107,166的权益,其全部内容据此以引用方式并入本文。本技术要求2020年12月7日提交的名称为“包围体层次结构生成(bounding volume hierarchy generation)”的美国非临时专利申请号17/114,485的权益,其全部内容据此以引用方式并入本文。


背景技术:

3.光线跟踪是一种图形渲染技术,其中投射模拟光线以测试对象相交并且基于光线投射的结果对像素着色。光线跟踪在计算上比基于光栅化的技术更昂贵,但得到物理上更准确的结果。一直在对光线跟踪操作进行改进。
附图说明
4.可以从以下描述中获得更详细的理解,通过示例结合附图给出,其中:
5.图1是实现本公开的一个或多个特征的示例设备的框图;
6.图2示出了根据一个示例的图1的设备的细节;
7.图3示出了根据一个示例的用于使用光线跟踪技术来渲染图形的光线跟踪流水线;
8.图4是根据一个示例的包围体层次结构的图示;
9.图5a和图5b示出了根据一个示例的用于细分场景来构造bvh的示例性操作;
10.图6示出了用于构造bvh的示例性操作;
11.图7示出了根据一个示例的中间bvh;
12.图8示出了根据一个示例的合并bvh;并且
13.图9是根据一个示例的用于生成包围体层次结构的方法的流程图。
具体实施方式
14.本发明提供了用于执行光线跟踪操作的技术。该技术包括识别与包围体层次结构(“bvh”)的包围盒相关联的一组图元的包围盒表面面积加权质心;在该质心处生成候选分裂,该候选分裂定义几何子组;识别具有最低表面面积包围盒的候选分裂;以及生成针对bvh的节点,该节点包括所识别的候选分裂的几何子组的几何结构。
15.图1是可实现本公开的一个或多个特征的示例设备100的框图。设备100可以是例如计算机、游戏设备、手持设备、机顶盒、电视、移动电话、平板计算机或其他计算设备中的一者但不限于这些项。设备100包括处理器102、存储器104、存储装置106、一个或多个输入设备108以及一个或多个输出设备110。设备100还包括一个或多个输入驱动器112和一个或多个输出驱动器114。输入驱动器112中的任一者具体体现为硬件、硬件与软件的组合或软件,并且用于控制输入设备112的目的(例如,控制操作、从输入驱动器112接收输入以及向
输入驱动器提供数据)。类似地,输出驱动器114中的任一者具体体现为硬件、硬件与软件的组合或软件,并且用于控制输出设备114的目的(例如,控制操作、从输出驱动器114接收输入以及向输出驱动器提供数据)。应当理解,设备100可包括图1中未示出的另外部件。
16.在各种另选方案中,处理器102包括中央处理单元(cpu)、图形处理单元(gpu)、位于同一管芯上的cpu和gpu、或一个或多个处理器内核,其中,在不同的具体实施中,每个处理器内核为cpu或gpu。在各种另选方案中,存储器104位于与处理器102相同的管芯上,或与处理器102分开定位。存储器104包括易失性或非易失性存储器,例如随机存取存储器(ram)、动态ram或高速缓存。
17.存储装置106包括固定或可移动存储装置,例如但不限于硬盘驱动器、固态驱动器、光盘或闪存驱动器。输入设备108包括但不限于键盘、小键盘、触摸屏、触控板、检测器、麦克风、加速度计、陀螺仪、生物扫描仪或网络连接(例如,用于发射和/或接收无线ieee 802信号的无线局域网卡)。输出设备110包括但不限于显示器、扬声器、打印机、触觉反馈设备、一个或多个灯、天线或网络连接(例如,用于发射和/或接收无线ieee 802信号的无线局域网卡)。
18.输入驱动器112和输出驱动器114包括被配置为分别与输入设备108和输出设备110交接并驱动它们的一个或多个硬件、软件和/或固件部件。输入驱动器112与处理器102和输入设备108通信,并允许处理器102从输入设备108接收输入。输出驱动器114与处理器102和输出设备110通信,并允许处理器102向输出设备110发送输出。输出驱动器114包括耦接到显示设备118的加速处理设备(“apd”)116,在一些示例中,该显示设备是使用远程显示协议来显示输出的物理显示设备或模拟设备。apd 116被配置为从处理器102接收计算命令和图形渲染命令,处理那些计算和图形渲染命令,并将像素输出提供给显示设备118用于显示。如下文所详述,apd 116包括被配置为根据单指令多数据(“simd”)范式来执行计算的一个或多个并行处理单元。因此,尽管这里将各种功能描述为由apd 116执行或与其结合执行,但在各种另选方案中,被描述为由apd 116执行的功能另外地或另选地由具有类似能力的其他计算设备执行,该其他计算设备不由主机处理器(例如,处理器102)驱动并且被配置为向显示设备118提供图形输出。例如,设想根据simd范式执行处理任务的任何处理系统被配置为执行本文所述的功能。另选地,设想不根据simd范式执行处理任务的计算系统执行本文所述的功能。
19.图2示出了根据一个示例的设备100和apd 116的细节。处理器102(图1)执行操作系统120、驱动程序122和应用程序126,并且在一些情况下,另选地或另外地执行其他软件。操作系统120控制设备100的各个方面,诸如管理硬件资源、处理服务请求、调度并控制进程执行以及执行其他操作。apd驱动器122控制apd 116的操作,向apd 116发送诸如图形渲染任务的任务或其他作业以进行处理。apd驱动器122还包括即时编译器,该即时编译器编译程序以供apd 116的处理部件(诸如下文所详述的simd单元138)执行。
20.apd 116执行用于所选功能的命令和程序,诸如适于并行处理的图形操作和非图形操作。在各种示例中,apd 116用于执行图形流水线操作,诸如像素操作、几何计算和基于从处理器102接收的命令将图像呈现给显示设备118。apd 116还基于从处理器102接收的命令来执行与图形操作不直接相关的计算处理操作,诸如与视频、物理模拟、计算流体动力学或其他任务相关的操作。在一些示例中,通过在simd单元138上执行计算着色器来执行这些
计算处理操作。
21.apd 116包括计算单元132,该计算单元包括被配置为根据simd范式以并行方式在处理器102(另一单元)的请求下执行操作的一个或多个simd单元138。simd范式是这样一种范式,其中多个处理元件共用单个程序控制流单元和程序计数器并由此执行相同的程序,但能够执行具有不同数据的该程序。在一个示例中,每个simd单元138包括十六个通道,其中每个通道与simd单元138中的其他通道同时执行相同的指令,但能够执行具有不同数据的该指令。在一些情况下,如果不是所有通道都需要执行给定指令,则通过预测来关闭通道。在一些情况下,还使用预测来执行具有分散控制流的程序。更具体地,对于具有条件分支或其中控制流基于由单个通道执行的计算的其他指令的程序,预测对应于当前未被执行的控制流路径的通道,并且不同控制流路径的串行执行可实现任意控制流。
22.计算单元132中的基本执行单元是工作项。每个工作项表示要在特定通道中并行执行的程序的单个实例。在各种示例中,在单个simd处理单元138上作为“波前”同时(或部分同时并且部分顺序地)执行工作项。一个或多个波前包括在一个“工作组”中,该“工作组”包括被指定执行相同程序的工作项的集合。在一些具体实施中,通过执行构成工作组的波前中的每一者来执行工作组。在另选方案中,波前在单个simd单元138上执行,或在不同simd单元138上执行。在一些具体实施中,波前为在单个simd单元138上同时(或伪同时)执行的工作项的最大集合。“伪同时”执行发生在波前大于simd单元138中的通道数的情况下。在这种情况下,波前在多个周期中执行,其中工作项的不同集合在不同周期中执行。apd调度器136被配置为执行涉及调度计算单元132和simd单元138上的各种工作组和波前的操作。
23.由计算单元132提供的并行性适合图形相关操作,诸如像素值计算、顶点变换和其他图形操作。因此,在一些实例中,接受来自处理器102的图形处理命令的图形流水线134将计算任务提供给计算单元132以供并行执行。
24.计算单元132还用于执行不涉及图形或不作为图形流水线134的“正常”操作(例如,所执行的用以补充针对图形流水线134的操作执行的处理的自定义操作)的一部分而执行的计算任务。在处理器102上执行的应用程序126或其他软件将定义此类计算任务的程序发送到apd 116以供执行。
25.包括计算单元132的apd 116实现光线跟踪,这是通过测试模拟光线与场景中的对象之间的相交来渲染3d场景的技术。在一些具体实施中,在光线跟踪中涉及的大部分工作由在计算单元132中的simd单元138上执行的可编程着色器程序执行,如下文所详述。
26.图3示出了根据一个示例的用于使用光线跟踪技术来渲染图形的光线跟踪流水线300。光线跟踪流水线300提供了在利用光线跟踪渲染场景时涉及的操作和实体的概览。在一些具体实施中,光线生成着色器302、任意命中着色器306、相交着色器307、最接近命中着色器310和未命中着色器312是表示光线跟踪流水线级的着色器实施级,光线跟踪流水线级的功能由在simd单元138中执行的着色器程序执行。在每个具体着色器实施级处的特定着色器程序中的其他任一者由应用程序提供的代码(即,由应用程序开发者提供且由应用程序编译器预编译和/或由驱动器122编译的代码)定义。加速结构遍历级304执行光线相交测试以确定光线是否命中三角形。其他可编程着色器级(光线生成着色器302、任意命中着色器306、最接近命中着色器310、未命中着色器312)被实现为在simd单元138上执行的着色器
程序。加速结构遍历级在软件(例如,作为在simd单元138上执行的着色器程序)、硬件或硬件与软件的组合中实施。在各种具体实施中,光线跟踪流水线300部分地或全部地在软件中或部分地或完全地在硬件中协调,并且在各种具体实施中,可由处理器102、调度器136、通过其组合或部分地或完全地由任何其他硬件和/或软件单元来协调。
27.在示例中,遍历穿过光线跟踪流水线300部分地或完全地由调度器136自主地或在处理器102的控制下执行,或部分地或完全地由在simd单元138中的一个或多个上执行的着色器程序(诸如包围体层次结构遍历着色器程序)执行。在一些示例中,针对盒和三角形(在加速结构遍历级304内)测试光线是硬件加速的(意味着固定功能硬件单元执行这些测试的步骤)。在其他示例中,通过诸如在一个或多个simd单元138上执行的着色器程序等软件来执行此类测试。这里,在使用短语“光线跟踪流水线执行[某操作]”的情况下,这意味着实现光线跟踪流水线300的硬件和/或软件执行该操作。尽管被描述为在图3的simd单元138上执行,但应当理解,在其他实施方案中,具有或不具有simd能力(例如,处理器102)的其他硬件(诸如一个或多个处理器)另选地执行所例示光线跟踪流水线300的着色器程序。
[0028]
在一些操作模式中,光线跟踪流水线300以如下方式操作。执行光线生成着色器302。光线生成着色器302建立光线的数据以针对三角形进行测试,并且请求加速结构遍历级304测试光线与三角形的相交。
[0029]
加速结构遍历级304遍历加速结构并针对场景中的三角形测试光线,加速结构是描述场景和场景内对象的数据结构。在一些示例中,在此遍历期间,对于与光线相交的三角形,如果任意命中着色器306和/或相交着色器307由相交三角形的材料指定,则光线跟踪流水线300触发那些着色器的执行。需注意,多个三角形可与单条光线相交。不能保证加速结构遍历级将以从离光线源最接近到离光线源最远的顺序遍历加速结构。在一些示例中,加速结构遍历级304针对光线命中的最接近光线原点的三角形触发最接近命中着色器310的执行,或者如果没有命中任何三角形,则触发未命中着色器。
[0030]
需注意,任意命中着色器306或相交着色器307都可能从加速结构遍历级304“拒绝”相交,并且因此如果未发现与光线发生相交或如果发现一个或多个相交但全部被任意命中着色器306和/或相交着色器307拒绝,则加速结构遍历级304触发未命中着色器312的执行。任意命中着色器306“拒绝”命中的示例环境是当加速结构遍历级304报告为被命中的三角形的至少一部分完全透明(“隐形”)时。在一个示例中,加速结构遍历级304测试几何结构而非透明度。因此,在这些示例中,由于与具有至少一些透明度的三角形相交而调用的任意命中着色器306有时确定所报告的相交由于与三角形的透明部分“相交”而不应被计数为命中。最接近命中着色器310的典型用途是基于材料的纹理对光线着色。未命中着色器312的典型用途是用由天空盒设置的颜色对光线着色。应当理解,在各种具体实施中,针对最接近命中着色器310和未命中着色器312所定义的着色器程序实施多种用于对光线着色和/或执行其他操作的技术。
[0031]
光线生成着色器302生成光线的典型方式是采用被称为向后光线跟踪的技术。在向后光线跟踪中,光线生成着色器302生成原点位于相机的点处的光线。光线与被定义为对应于屏幕的平面相交处的点定义屏幕上的像素,光线用于确定该像素的颜色。如果光线命中对象,则基于最接近命中着色器310对该像素着色。如果光线未命中对象,则基于未命中着色器312对该像素着色。每个像素可以投射多条光线,其中像素的最终颜色由针对像素的
每条光线确定的颜色的一些组合来确定。
[0032]
任意命中着色器306、相交着色器307、最接近命中着色器310和未命中着色器312中的任一者均可产生其自己的光线,这些光线在光线测试点处进入光线跟踪流水线300。这些光线可用于任何目的。一个常见用途是实现环境照明或反射。在一个示例中,当调用最接近命中着色器310时,最接近命中着色器310产生各个方向上的光线。对于被所产生的光线命中的每个对象或光,最接近命中着色器310将照明强度和颜色添加到对应于最接近命中着色器310的像素。应当理解,虽然已经描述了使用光线跟踪流水线300的各种部件来渲染场景的方式的一些示例,但另选地使用多种技术中的任一种技术。
[0033]
如上所述,光线是否与物体相交的确定在本文中被称为“光线相交测试”。光线相交测试涉及从原点射出光线并确定该光线是否与几何图元(例如,三角形)相交,并且如果是,则确定三角形相交的位置离原点有多远。考虑到效率,光线跟踪测试使用被称为加速结构(诸如包围体层次结构)的空间表示。在包围体层次结构中,每个非叶节点表示轴对齐包围盒,该包围盒界定该节点的所有子项的几何结构。在一个示例中,基节点表示执行光线相交测试的整个区域的最大范围。在该示例中,基节点具有两个子项,这两个子项各自通常表示细分整个区域的不同的轴对齐包围盒。这两个子项中的每一者具有两个子节点,这两个子节点表示细分其父项空间的轴对齐包围盒,等等。叶节点表示对其执行光线相交测试的三角形或其它几何图元。非叶节点在本文中有时被称为“盒节点”,而叶节点在本文中有时被称为“三角形节点”。
[0034]
相比于不使用此类数据结构并且因此场景中的所有三角形必须针对光线进行测试的情况,包围体层次结构数据结构允许减少光线-三角形相交的数量(光线-三角形相交是复杂的并且因此在处理资源方面是昂贵的)。具体地,如果光线不与特定包围盒相交并且该包围盒界定了大量三角形,则从测试中消除该盒中的所有三角形。因此,光线相交测试作为光线相对于轴对齐包围盒的一系列测试,然后是相对于三角形的测试执行。
[0035]
图4是根据一个示例的包围体层次结构的图示。为了简单起见,层次结构以2d示出。然而,扩展到3d是简单的,并且应当理解,本文所述的测试一般来讲以三维执行。
[0036]
包围体层次结构的空间表示402示于图4的左侧,并且包围体层次结构的树表示404示于图4的右侧。在空间表示402和树表示404两者中,非叶节点用字母“n”表示,而叶节点用字母“o”表示。光线相交测试将通过遍历树404来执行,并且对于所测试的每个非叶节点,如果该非叶节点的测试失败,则消除该节点下方的分支。在一个示例中,光线与o5相交,但不与其他三角形相交。该测试将针对n1进行测试,从而确定该测试成功。该测试将针对n2进行测试,从而确定该测试失败(因为o5不在n1内)。该测试将消除n2的所有子节点并且将针对n3进行测试,注意该测试成功。该测试将测试n6和n7,注意n6成功但n7失败。该测试将测试o5和o6,注意o5成功但o6失败。代替测试8个三角形测试,执行两个三角形测试(o5和o6)和五个盒测试(n1、n2、n3、n6和n7)。
[0037]
图4还示出了根据一个示例的包围体层次结构(“bvh”)构造器450。bvh构造器450接受场景几何452并且生成包围体层次结构404。场景几何452包括描述由应用程序或其他实体提供的场景的图元。bvh构造器450被实现为在被配置为执行本文所述的功能的处理器上执行的软件、被配置为执行本文所述的功能的硬连线电路、或在一起被配置为执行本文所述的功能的处理器上执行的软件和硬连线电路的组合。在各种示例中,bvh构造器450在
计算机系统(例如,计算机系统100)中,诸如在处理器102或apd 116上执行,或者是处理器102或apd 116中的硬件单元。在各种示例中,bvh构造器450在编译时,在与使用所构造的bvh执行光线跟踪来渲染场景的计算机系统不同的计算机系统上构造bvh。在其他示例中,bvh构造器450在运行时,在使用光线跟踪技术渲染场景的同一计算机上构造bvh。在各种示例中,apd 116的驱动器、应用程序或硬件单元执行该运行时渲染。现在描述用于构造bvh的示例性技术。
[0038]
图5a和图5b示出了根据一个示例的用于细分场景来构造bvh的示例性操作。在这两个附图中,示出了场景501。场景501包括多个三角形502。场景501是图4的场景几何452。bvh构造器450基于场景501生成bvh。
[0039]
根据用于构造bvh的技术,bvh构造器450确定三角形502中的每个三角形的质心506。在一个示例中,质心是从每个顶点到相反的一侧的中点的线之间的交点。bvh构造器450还确定三角形502中的每个三角形的轴对齐包围盒504。每个包围盒504是由每个维度中的三角形的最小范围和最大范围定义的盒。
[0040]
bvh构造器450将场景质心507确定为三角形的所有质心的包围盒表面面积加权平均。三角形的所有质心的包围盒表面面积加权平均是三角形502的加权质心平均。每个三角形的加权质心是该三角形的质心的坐标乘以该三角形502的包围盒504。该平均是每个此类加权质心的总和除以三角形502的总表面面积。以公式形式,该平均被表示为:
[0041][0042]
在该等式中,w
centroid
是场景质心507。centroid
tri
是三角形的质心。surfacearea
aabboftri
是三角形502的轴对齐包围盒504的表面面积。因此,场景质心507是每个三角形502的质心乘以包围盒表面面积的总和除以所有包围盒表面面积的总和。
[0043]
基于场景质心507,bvh构造器450生成场景501的若干候选切片508。场景的候选切片508是场景501中的三角形502到对应于不同盒节点的不同包围盒的提议子划分。bvh构造器450通过用平行于该轴中的一个轴并且与场景质心507相交的平面对场景501进行切片来生成不同的候选切片。对于三坐标系,bvh构造器450因此生成三个候选切片508——每个轴一个候选切片。
[0044]
每个候选切片508定义两个不同的三角形分组。每个三角形分组与候选切片508的特定侧相关联。bvh构造器450向每个三角形分组分配场景501的三角形(其质心落在与该三角形分组相关联的候选切片508一侧)。在图5a中,bvh构造器450将三角形502(1)-502(4)分配到左侧三角形分组,并且将三角形502(5)-502(10)分配到右侧三角形分组,从而反映那些三角形502的质心落在其上的候选切片508的一侧。
[0045]
bvh构造器450确定每个三角形分组的三角形分组包围盒510。三角形分组包围盒是界定三角形分组中的所有三角形的轴对齐包围盒。需注意,例如在三角形502的质心靠近候选切片508并且因此三角形的一部分“溢出”到候选切片508的另一侧的情况下,三角形分组包围盒510可能重叠。对于每个候选切片508,bvh构造器450计算每个三角形分组包围盒510的总表面面积,并且对特定候选切片508的三角形分组包围盒510的表面面积求和。bvh构造器450然后选择具有三角形分组包围盒510的最低总表面面积的候选切片508作为候选切片508来用于生成bvh分支。
[0046]
bvh构造器450迭代地执行如上就图5a-图5b所述的操作来生成bvh 404的树结构。在每次迭代中,bvh构造器450确定如何细分给定盒节点的三角形来生成该盒节点的子节点。在每次迭代中,bvh构造器450将落入在该迭代中正在检查的盒节点的包围盒内的三角形设置为图5a和图5b的“场景”501,并且执行就图5a和图5b所述的操作。bvh构造器450生成盒节点的子节点来反映所选择的候选切片508和对应的三角形组。更具体地,bvh构造器450将对应于所生成的三角形分组中的每个三角形分组的盒节点或叶节点设置为该盒节点的子节点。如果三角形分组包含多于一个三角形,则所生成的子节点是另一个盒节点,并且如果三角形分组包含一个三角形,则所生成的子节点是叶节点。
[0047]
图5a反映了平行于y轴制作的候选切片508,并且图5b反映了平行于x轴制作的候选切片508,其中对应的三角形子划分如图所示。因为图5a的候选切片508(1)与最低总表面面积相关联(由于图5b中的基本重叠),所以bvh构造器450选择该候选切片508(1)来生成界定所示的所有三角形的盒节点的子节点。
[0048]
需注意,尽管描述了候选切片平行于坐标系的轴,但是应当理解,对图元切片的平面可以处于任何取向,只要那些平面穿过质心507。
[0049]
图6示出了用于构造bvh 404的示例性操作。具体地,图6示出了两种bvh模式600,其中bvh构造器450已经构造了bvh 404的不同部分。在bvh模式1 600(1)中,bvh构造器450已经检查了与盒节点602(1)相关联的几何结构。该几何结构包括几何结构604(1)(对于盒节点602(2))和几何结构604(2)(对于盒节点602(3))。bvh构造器450已经通过根据本文中另有描述的技术(例如,图5a和图5b)分裂几何结构来生成盒节点602(2)和盒节点602(3)。
[0050]
bvh构造器450检查盒节点602(2)和盒节点602(3)来生成作为那些盒节点602的子节点的其它节点。对于盒节点602(2),bvh构造器450确定针对该盒节点602(2)的几何结构604(1)中的三角形的分裂,并且基于该分裂生成新的子节点。这些子节点在模式600(2)中示出。具体地,盒节点602(4)包括几何结构604(3),并且盒节点602(5)包括几何结构604(4)。类似地,bvh构造器450检查盒节点602(3)来生成盒节点602(6)和盒节点602(7)。尽管未示出,但将执行附加的模式600来生成bvh。此外,应当理解,在分裂导致单个三角形的情况下,bvh构造器450生成叶节点,而不是盒节点。
[0051]
图7示出了根据一个示例的中间bvh 700。中间bvh 700是以下结果:bvh构造器450迭代地执行操作来分裂几何结构以生成节点直到所有单个三角形被分配叶节点为止。
[0052]
bvh 700包括多个节点702,每个节点是盒节点或者是三角形节点。盒节点(例如,节点702(1))包括节点标识704和标引其它节点702的节点标引706。三角形节点(例如,节点702(5))包括节点标识704以及描述该三角形节点的三角形的几何结构(以及潜在的其它信息)的三角形数据708。
[0053]
在图7的示例中,盒节点702(1)包括盒节点标识704(1),其指向节点标引706(1)和节点标引706(2)。节点标引706(1)指向盒节点702(2)和节点标引706(2)。盒节点702(2)包括盒节点标识704(2),其指向节点标引706(3)和节点标引706(4)。节点标引706(3)指向盒节点702(4),并且节点标引706(4)指向三角形节点702(5)。三角形节点702(5)包括节点标识704(5),其指向三角形数据708(1)。
[0054]
bvh构造器450以如下方式将中间bvh 700转换为合并bvh。bvh构造器450识别bvh 700的层级701。层级是从最顶部盒节点702向下相同数量的标引处的bvh 700的一部分。在
图7的bvh 700中,层级1 701(1)包括节点702(1)。层级2 701(2)包括节点702(2)和节点702(3)。层级3 701(3)包括节点702(4)、节点702(5)、节点702(6)和节点702(7)。层级4 701(4)包括节点702(8)到702(15)。
[0055]
bvh构造器450合并多个层级701处的盒节点来生成合并盒节点。在一个示例中,bvh构造器450将奇数层级701与紧接的下一个偶数层级合并。在一个示例中,bvh构造器450合并层级1 701(1)和层级2 701(2)。具体地,bvh构造器通过将来自上部此类层级701(奇数层级701)的节点702与下部层级701(偶数层级701)中的该节点的盒节点子节点702组合来生成新的盒节点而生成合并节点。bvh构造器450不以此类方式将三角形节点与盒节点组合。合并盒节点包括顶部层级701的所有节点标引706。结果是比bvh 700的盒节点包括更多的节点标引706的新的盒节点以及层级701中的减少。
[0056]
图8示出了根据一个示例的合并bvh 800。bvh 800包括盒节点802和三角形节点808。盒节点802包括盒节点标识804和节点标引806。三角形节点808包括三角形节点标识810和三角形数据812。
[0057]
三角形节点808类似于图7的三角形节点(例如,节点702(5))。盒节点802类似于盒节点(例如,图7的702(1)),不同的是,盒节点802比图7的盒节点包括更多的节点标引806。
[0058]
bvh构造器450从中间bvh 700生成合并bvh 800,如上就图7所述。图8的示例性合并bvh 800是从图7的中间bvh 700生成的。具体地,盒节点802(1)是从层级1 701(1)和层级2 702(2)生成的。更具体地,bvh构造器450从盒节点702(1)开始生成盒节点801(1)。bvh构造器450确定盒节点702(1)包括节点标引706(1)和节点标引706(2)。因此,bvh构造器450识别由那些节点标引指向的节点702。在图7中,由节点标引706(1)指向的节点702是节点702(2),并且由节点标引706(2)指向的节点702是节点702(3)。bvh构造器450识别这些节点702中的节点标引706,并且将这些节点标引包括在所生成的盒节点802中,因此将两个层级701组合为一个层级701,并且将具有两个节点标引706的盒节点702转换为具有四个标引806的盒节点802(但是应当理解,盒节点702可以具有少于两个的节点标引706,并且因此盒节点802可以具有少于四个的节点标引806)。
[0059]
对于指向三角形节点的节点标引706,bvh构造器450还将那些节点标引706包括到合并盒节点802中。例如,盒节点702(4)具有指向三角形节点(节点702(8)-节点702(11))的两个节点标引706。因此,bvh构造器450将这些节点标引706包括到合并盒节点802中。以所述方式,bvh构造器450生成盒节点802(1)、盒节点802(2)(来自盒节点702(4)和三角形节点702(8)-三角形节点702(11))以及盒节点802(3)(来自盒节点702(7)和三角形节点702(12)-三角形节点702(15))。
[0060]
与bvh 700相比,合并bvh 800中的三角形节点不被修改。然而,在一些具体实施中,bvh构造器450压缩这些三角形节点808来生成压缩三角形节点(未示出)。在一个示例中,压缩三角形节点包括针对多个三角形的数据,其中共享顶点被表示的次数小于那些顶点出现在压缩三角形节点中的所有三角形中的实例数量。例如,如果共享一个顶点的两个三角形被包括在压缩三角形节点中,则bvh构造器450将那些三角形包括到压缩三角形节点中,仅包括该共享顶点的数据(例如,位置)的一个实例。在另一个示例中,所有共享一个顶点的三个或四个三角形被包括,并且在压缩三角形节点中该顶点仅有一个实例(而不是三个或四个实例)。此外,bvh构造器450将对三角形节点808的标引转换为对压缩三角形节点
的标引。因此,多个节点标引806可以指向相同的压缩三角形节点(但在该压缩三角形节点中有不同的三角形)。
[0061]
bvh构造器450赋予图8的盒节点802包围盒,这些包围盒包围作为那些盒节点802的衍生物的所有三角形。
[0062]
虽然已经描述了bvh构造器450从中间bvh 700的两个层级701生成合并盒节点802,但是在一些具体实施中,bvh构造器450从中间bvh 700的多于两个层级701生成合并盒节点。在此类实例中,合并盒节点包括来自被合并的最下层701处的盒节点702的所有节点标引706,该最下层701不是最顶层701处的特定盒节点702衍生的三角形节点。在一个示例中,特定层处的盒节点702在层级3层701处具有从该盒节点702衍生的六个盒节点。bvh构造器450生成包括这六个盒节点中的所有节点标引706的合并盒节点。
[0063]
虽然有时将三角形描述为包括在叶节点内的几何结构,但叶节点可以包括任何类型的几何结构或甚至用代码而不是用形状信息规定相交测试。
[0064]
图9是根据一个示例的用于生成包围体层次结构的方法900的流程图。尽管参照图1至图8的系统进行了描述,但本领域的技术人员将认识到,被配置为按任何技术上可行的顺序执行方法900的步骤的任何系统都属于本公开的范围。
[0065]
方法900在步骤902处开始,其中bvh构造器450识别一组图元的包围盒表面面积加权质心。该质心是图5a和图5b的质心507,并且识别该质心在本文中另有描述。该一组图元是由盒节点(诸如bvh的最顶部节点或bvh的不同盒节点)的包围盒界定的一组图元。
[0066]
在步骤904处,bvh构造器450在质心处生成候选分裂。候选分裂定义几何子组。在一个示例中,通过利用平行于穿过质心507的轴(x、y和z)中的每个轴的平面来分裂几何结构而执行候选分裂。
[0067]
在步骤906处,bvh构造器450识别具有最低表面面积包围盒的候选分裂。对于每个分裂,几何结构被分成两组,每个组落在平面的不同侧。然后,为每个组确定轴对齐包围盒,其中每个盒包围该组的所有几何结构。其中两个包围盒的表面面积之和最低的分裂是所识别的候选分裂。
[0068]
在步骤908处,bvh构造器450生成包括所识别的候选分裂的子组的几何结构的节点。在一个示例中,如果组包括一个图元,则bvh构造器450生成针对该组的三角形节点。如果组包括两个或更多图元,则bvh构造器450生成具有界定该两个或更多图元的包围盒的盒节点。bvh构造器450还将节点标引添加到与被分裂的几何结构相关联的盒节点,其中所生成的节点标引指向新生成的节点。
[0069]
bvh构造器450重复方法900来生成完整的bvh。在一个示例中,bvh构造器450重复方法900,直到所有组已经分裂并且三角形节点存在于bvh的每个分支的最底部节点处为止。
[0070]
应当理解,基于本文的公开内容,可能有许多变化。尽管上述特征和元素在特定组合中进行了描述,但每个特征或元素可以在没有其他特征和元素的情况下单独使用,或者在有或没有其他特征或元素的各种组合中使用。
[0071]
所提供的方法可以在通用计算机、处理器或处理器核心中实现。举例来说,合适的处理器包括通用处理器、专用处理器、常规处理器、数字信号处理器(dsp)、多个微处理器、与dsp核相关联的一个或多个微处理器、控制器、微控制器、专用集成电路(asic)、现场可编
程门阵列(fpga)电路,任何其他类型的集成电路(ic)和/或状态机。可以通过使用处理的硬件描述语言(hdl)指令和包括网表的其他中间数据(能够存储在计算机可读介质上的此类指令)的结果来配置制造过程而制造此类处理器。这种处理的结果可以是掩码,然后在半导体制造过程中使用这些掩码来制造实现本公开的特征的处理器。
[0072]
本文提供的方法或流程图可以在并入非暂态计算机可读存储介质中的计算机程序、软件或固件中实现,以供通用计算机或处理器执行。非暂态计算机可读存储介质的示例包括只读存储器(rom)、随机存取存储器(ram)、寄存器、高速缓存存储器、半导体存储器设备、磁性介质(例如内部硬盘和可移动磁盘)、磁光介质和光学介质(例如cd-rom磁盘)以及数字多功能磁盘(dvd)。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1