CN113034338A - 一种用于gpu的bvh构造方法、装置及存储介质 - Google Patents

一种用于gpu的bvh构造方法、装置及存储介质 Download PDF

Info

Publication number
CN113034338A
CN113034338A CN201911349495.8A CN201911349495A CN113034338A CN 113034338 A CN113034338 A CN 113034338A CN 201911349495 A CN201911349495 A CN 201911349495A CN 113034338 A CN113034338 A CN 113034338A
Authority
CN
China
Prior art keywords
primitive
node
bounding box
information
bvh
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201911349495.8A
Other languages
English (en)
Other versions
CN113034338B (zh
Inventor
朱韵鹏
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.)
HiSilicon Technologies Co Ltd
Original Assignee
HiSilicon Technologies Co Ltd
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 HiSilicon Technologies Co Ltd filed Critical HiSilicon Technologies Co Ltd
Priority to CN201911349495.8A priority Critical patent/CN113034338B/zh
Publication of CN113034338A publication Critical patent/CN113034338A/zh
Application granted granted Critical
Publication of CN113034338B publication Critical patent/CN113034338B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)

Abstract

本发明实施例提供了一种用于GPU的BVH构造方法、装置及存储介质。在GPU上部署BVH构造装置,通过在构造BVH的过程中,节点的节点包围盒和节点包围盒所包围的图元的图元包围盒均使用球形包围盒。通过该球形包围盒可以节省在构建BVH的过程中对设备存储带宽的占用,同时降低构造BVH的时间和提高输出BVH的速率。

Description

一种用于GPU的BVH构造方法、装置及存储介质
技术领域
本申请涉及计算机图形技术领域,尤其是涉及一种用于图形处理单元(graphicsprocessing unit,GPU)的包围体层次结构(bounding volume hierarchy,BVH)的生成方法、装置及设备。
背景技术
BVH是一种加速数据结构,其以层次树形结构进行组织,该树结构包括根节点、子节点和叶节点。其中,根节点是所有图元的集合。目前多采用中央处理器(centralprocessing unit,CPU)或者GPU构造BVH。由于,采用CPU或者GPU构造BVH的过程中需要大量的存储带宽和功耗,并不适用于存储带宽有限的移动设备。
目前也出现了一些构造BVH的专用硬件模块,这些专用硬件模块更多致力于降低构造BVH的时间和提高输出BVH的速率。现有专用硬件模块往往考虑复杂度更高的场景,甚至大约2M以上的图元。但是,针对移动设备上的应用场景,如当前游戏引擎的典型场景复杂度大约100K数量级的图元,现有专用硬件模块并未考虑针对移动设备上的应用场景进行专门的优化,不能有效的节省移动设备的存储带宽。
因此,目前在移动设备上亟需一种新的构造BVH的方式,在节省设备存储带宽的同时,能够确保降低构造BVH的时间和提高输出BVH的速率。
发明内容
有鉴于此,本申请实施例提供一种用于GPU的BVH构造方法、装置及设备,以实现在节省设备存储带宽的同时确保降低构造BVH的时间,提高输出BVH的速率的目的。
本申请实施例提供如下技术方案:
本申请实施例第一方面提供了一种用于图形处理单元GPU的包围体层次结构BVH构造装置,包括:
节点生成模块,用于从存储模块获取当前节点的第一节点信息,所述第一节点信息包括所述当前节点的第一节点包围盒和第一节点索引,根据所述第一节点索引确定所述第一节点包围盒包围的多个图元的多个第一图元信息,每个第一图元信息包括包围所述多个图元中的一个图元的图元包围盒和所述第一节点索引,根据所述多个第一图元信息生成多个下一级节点中每个下一级节点的第二节点信息,确定与所述每个下一级节点对应的至少一个图元的至少一个第二图元信息,所述第二节点信息包括所述每个下一级节点的第二节点包围盒和第二节点索引,所述第二节点包围盒包围所述至少一个图元,所述至少一个图元是所述多个图元中的一部分,每个第二图元信息包括所述图元包围盒和所述第二节点索引,所述第一节点包围盒、所述第二节点包围盒、所述图元包围盒是球形包围盒;
所述存储模块,用于存储所述多个第一图元信息、所述至少一个第二图元信息、所述第一节点信息和所述第二节点信息。
在本申请实施例中,通过使节点包围盒和图元包围盒均采用球形包围盒,该球形包围盒可以节省在构建BVH的过程中对设备存储带宽的占用,同时降低构造BVH的时间和提高输出BVH的速率。
在一种可能的实现方式中,所述多个图元包括大图元和至少一个剩余图元,包围所述大图元的第一图元包围盒大于包围所述至少一个剩余图元的至少一个第二图元包围盒。
在本申请实施例中,可选的,基于图元的图元包围盒的面积大小确定大图元和其他图元,在构造该大图元所在的叶节点时,优先使得大图元被首先拆分为一个独立的叶节点,其余的图元作为子节点需要再次拆分,使包括该大图元的叶节点相对于其他叶节点位于距离根节点较近的位置,从而避免出现子节点包围盒大量重叠的问题,减少遍历BVH阶段的存储访问量,同时节省设备的存储带宽,降低构造BVH的时间和提高输出BVH的速率。
在一种可能的实现方式中,所述第一图元包围盒在所述多个图元的多个图元包围盒中最大。
在一种可能的实现方式中,所述多个图元包括大图元和至少一个剩余图元,所述大图元的第一图元包围盒大于预设阈值,所述至少一个剩余图元的至少一个第二图元包围盒小于所述预设阈值。
在本申请实施例中,可选的,基于预设阈值确定大图元和其他图元,在构造该大图元所在的叶节点时,优先使得大图元被首先拆分为一个独立的叶节点,其余的图元作为子节点需要再次拆分,使包括该大图元的叶节点相对于其他叶节点位于距离根节点较近的位置,从而避免出现子节点包围盒大量重叠的问题,减少遍历BVH阶段的存储访问量,同时节省设备的存储带宽,降低构造BVH的时间和提高输出BVH的速率。
在一种可能的实现方式中,所述多个下一级节点包括第一节点和第二节点,所述第一节点的第二节点包围盒包围至少一个所述大图元,所述第二节点的第二节点包围盒包围所述至少一个剩余图元。
在一种可能的实现方式中,还包括:将所述第二节点设置为所述当前节点,并继续执行BVH构造。
在一种可能的实现方式中,所述存储模块包括:
第一存储模块,用于存储所述第一图元信息和所述第二图元信息;
第二存储模块,用于存储所述第一节点信息和所述第二节点信息。
本申请实施例第二方法提供了一种用于图形处理单元GPU的包围体层次结构BVH构造方法,所述方法包括:
获取当前节点的第一节点信息,所述第一节点信息包括所述当前节点的第一节点包围盒和第一节点索引,所述第一节点包围盒是球形包围盒;
根据所述第一节点索引确定所述第一节点包围盒包围的多个图元的多个第一图元信息,每个第一图元信息包括包围所述多个图元中的一个图元的图元包围盒和所述第一节点索引,所述图元包围盒是球形包围盒;
根据所述多个第一图元信息生成下一级节点中每个下一节点的第二节点信息,确定与所述每个下一节点对应的至少一个图元的至少一个第二图元信息,所述第二节点信息包括所述每个下一节点的第二节点包围盒和第二节点索引,所述第二节点包围盒包围所述至少一个图元,所述至少一个图元是所述多个图元中的一部分,每个第二图元信息包括所述图元包围盒和所述第二节点索引,所述第二节点包围盒是球形包围盒;
将所述第二节点信息和所述第二图元信息存储至存储器。
在本申请实施例中,通过使节点包围盒和图元包围盒均采用球形包围盒,该球形包围盒可以节省在构建BVH的过程中对设备存储带宽的占用,同时降低构造BVH的时间和提高输出BVH的速率。
在一种可能的实现方式中,所述多个图元包括大图元和至少一个剩余图元,包围所述大图元的第一图元包围盒大于包围所述至少一个剩余图元的至少一个第二图元包围盒。
在本申请实施例中,可选的,基于图元的图元包围盒的面积大小确定大图元和其他图元,在构造该大图元所在的叶节点时,优先使得大图元被首先拆分为一个独立的叶节点,其余的图元作为子节点需要再次拆分,使包括该大图元的叶节点相对于其他叶节点位于距离根节点较近的位置,从而避免出现子节点包围盒大量重叠的问题,减少遍历BVH阶段的存储访问量,同时节省设备的存储带宽,降低构造BVH的时间和提高输出BVH的速率。
在一种可能的实现方式中,所述第一图元包围盒在所述多个图元的多个图元包围盒中最大。
在一种可能的实现方式中,所述多个图元包括大图元和至少一个剩余图元,所述大图元的第一图元包围盒大于预设阈值,所述至少一个剩余图元的至少一个第二图元包围盒小于所述预设阈值。
在本申请实施例中,可选的,基于预设阈值确定大图元和其他图元,在构造该大图元所在的叶节点时,优先使得大图元被首先拆分为一个独立的叶节点,其余的图元作为子节点需要再次拆分,使包括该大图元的叶节点相对于其他叶节点位于距离根节点较近的位置,从而避免出现子节点包围盒大量重叠的问题,减少遍历BVH阶段的存储访问量,同时节省设备的存储带宽,降低构造BVH的时间和提高输出BVH的速率。
在一种可能的实现方式中,所述多个下一级节点包括第一节点和第二节点,所述第一节点的第二节点包围盒包围所述大图元,所述第二节点的第二节点包围盒包围所述至少一个剩余图元。
在一种可能的实现方式中,还包括:
将所述第二节点设置为所述当前节点,继续执行BVH构造。
本申请实施例第三方面提供了一种用于图形处理单元GPU的包围体层次结构BVH构造装置,包括:存储器,以及处理器;
所述处理器,用于执行本申请实施例第二方面提供的BVH的构造方法;
所述存储器,用于存储所述多个第一图元信息、所述至少一个第二图元信息、所述第一节点信息和所述第二节点信息。
本申请实施例第四方面提供了一种存储介质,所述存储介质包括存储的BVH的构造程序,其中,在所述BVH的构造程序运行时控制所述计算机存储介质所在设备执行如本申请实施例第二方面提供的BVH构造方法。
附图说明
图1为本发明实施例提供的一个三角形图元的结构示意图;
图2为本发明实施例提供的根节点的上的图元和节点包围盒的示意图;
图3为本发明实施例提供的叶节点上的图元和节点包围盒的的示意图;
图4为本发明实施例提供的一种用于GPU的BVH构造装置的结构示意图;
图5为本发明实施例提供的一种BVH树的输出结构示意图;
图6为本发明实施例提供的另一种用于GPU的BVH构造装置的结构示意图;
图7为本发明实施例提供的另一种用于GPU的BVH构造装置的结构示意图;
图8为本发明实施例提供的另一种用于GPU的BVH构造装置的结构示意图;
图9为本发明实施例提供的一种用于GPU的BVH构造方法的流程示意图;
图10为本发明实施例提供的另一种用于GPU的BVH构造方法的流程示意图;
图11为本发明实施例提供的另一种用于GPU的BVH构造方法的流程示意图;
图12为本发明实施例提供的一种球形包围盒的等分区间示意图;
图13为本发明实施例提供的一种用于GPU的BVH构造装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。其中,在本申请的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。并且,在本申请的描述中,除非另有说明,“多个”是指两个或多于两个。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
此外,本申请实施例和权利要求书及附图中的术语“包括”和“具有”不是排他的。例如,包括了一系列步骤或模块的过程、方法、系统、产品或设备没有限定于已列出的步骤或模块,还可以包括没有列出的步骤或模块。
在本发明实施例中,BVH是一种加速数据结构,其以层次树形结构进行组织,该树结构包括根节点、子节点和叶节点。该树结构中的每个节点都有一个节点包围盒,该节点包围盒用于包围对应节点内的所有图元,每一个图元也都具有一个图元包围盒,用于包围该图元。其中,图元的类型可以为三角形、点、线或多边形等结构。
在BVH中,用于指示根节点的节点信息至少包括根节点包围盒和根节点索引。用于指示子节点的节点信息至少包括子节点包围盒和子节点索引。用于指示叶节点的节点信息至少包括叶节点包围盒和叶节点索引。
在BVH中,用于指示图元的图元信息至少包括图元包围盒和当前包围该图元的节点的节点索引。该图元信息中还包括图元质心、图元指针和图元标识符。
图元信息中的节点索引具体举例说明为:若节点A包围图元a1和图元a2,节点A的节点索引为Ax,图元a1的图元信息中的节点索引也是Ax,图元a2的图元信息中的节点索引也是Ax。
图元质心具体举例说明为:如图1示出的一个三角形的图元,P为图元质心,该图元质心是图元的三条中线的交点。
图元指针用于指示图元的存储地址。
图元标识符用于表示在分割包围图元的节点时,该图元在节点被分割的轴向上属于哪个区间。
在本发明实施例具体构建BVH的过程中,由根节点开始进行节点分割,例如根节点可以分割为包括子节点和叶节点的左右两个分支,根节点包围盒包围所有的子节点包围盒和所述子节点包围盒所包围的图元。也就是说,根节点包围盒实际上包围了BVH中的所有的图元。
位于左右两个分支上的子节点包围盒则包围同一分支的叶节点包围盒和所述叶节点包围盒所包围的图元,叶节点包围盒包围图元。也就是说,子节点包围盒包围了一个分支上的所有图元,叶节点包围盒则包围了一个或多个图元。例如,每个叶节点包括一个图元。
在本发明实施例中,各个节点的节点包围盒是球形包围盒,从空间上包围该节点内的所有图元。各个图元的图元包围盒为球形包围盒,该球形包围盒从空间上包围对应的图元。
图2示出了根节点上的图元和图元包围盒。
图3示出了叶节点上的图元和图元包围盒。
其中,图元为三角形,图元包围盒为球形包围盒,球形包围盒从空间上包围图元,也就是,球形包围盒从空间上包围三角形。
基于上述本发明实施例公开的BVH,在本发明实施例中,图4提供了一种用于GPU的BVH构造装置400的结构示意图。可以确保在移动设备上使用,并在节省设备存储带宽的同时,能够确保降低构造BVH的时间和提高输出BVH的速率。
该BVH构造装置400包括节点生成模块401和存储模块402,将图元信息输入该BVH构造装置400,最终可以输出BVH。
节点生成模块401,用于从存储模块402获取当前节点的第一节点信息,该第一节点信息包括当前节点的第一节点包围盒和第一节点索引。该节点生成模块401根据第一节点索引确定第一节点包围盒所包围的多个图元的多个第一图元信息。该节点生成模块401根据该多个第一图元信息生成多个下一级节点中每个下一级节点的第二节点信息,确定与下一级节点对应的至少一个图元的至少一个第二图元信息,该第二节点信息包括该每个下一级节点的第二节点包围盒和第二节点索引。
其中,每个第一图元信息包括包围多个图元中的一个图元的图元包围盒和第一节点索引。该第二节点包围盒包围至少一个图元,该至少一个图元是多个图元中的一部分,每个第二图元信息包括图元包围盒和第二节点索引,第一节点包围盒、第二节点包围盒和图元包围盒是球形包围盒。
举例说明:若当前节点B的节点索引为Bx,首先,确定图元信息中包括的节点索引为Bx的图元,例如图元b1、图元b2和图元b3各自的图元信息中的节点索引均为Bx,确定根节点Bx的节点包围盒包围图元b1、图元B2和图元B3,其次,获取图元b1、图元b2和图元b3的图元信息,根据图元b1、图元b2和图元b3的图元信息分别生成下一级节点B1的节点信息和子节点B1包围的图元b1的图元信息,以及生成下一级节点B2的节点信息和下一级节点B2包围的图元b2和图元b3各自的图元信息。
例如,若生成节点索引为B1x的下一级节点B1,则生成的被下一级节点B1包围的图元b1的节点索引也为B1x。若生成节点索引为B2x的下一级节点B2,则生成的被下一级节点B2包围的图元b2的节点索引也为B2x。
在具体实现中,若节点生成模块401从存储模块402中获取的当前节点为根节点,节点生成模块401首先根据根节点的根节点索引确定根节点包围盒包围的图元的图元信息,其次,根据确定根节点包围盒包围的图元的图元信息生成子节点的节点信息,并确定子节点包围的图元的图元信息。
若节点生成模块401从存储模块402中获取的当前节点为子节点,节点生成模块401首先根据子节点的子节点索引确定子节点包围盒包围的图元的图元信息,其次,根据确定子节点包围盒包围的图元的图元信息生成下一级节点的节点信息,以及下一级节点包围的图元的图元信息。
存储模块402,用于存储多个第一图元信息,至少一个第二图元信息、第一节点信息和第二节点信息。
可选的,在将第二节点相关的第二节点信息以及相关的第二图元信息存储于存储模块402之后,将第二节点设置为当前节点,由节点生成模块401继续执行节点生成操作,直至存储模块中无节点可拆分,或者拆分节点的代价超过预期时停止。
在具体实现中,该存储模块402中存储的图元信息中的节点索引,根据当前包围该图元的节点的节点索引进行实时更新。
具体更新图元信息中的节点索引的过程为:存储模块402根据节点生成模块401生成的第二节点信息中的第二节点索引,将第二节点包围盒包围的至少一个图元原来对应的第一节点索引更新为该第二节点索引。
也就是说,存储模块402根据节点生成模块401生成的下一级节点包围的图元的图元信息中的图元包围盒确定图元,并基于下一级节点包围的图元的图元信息中的节点索引更新该图元原有的节点索引。
举例进行说明:若当前节点B包围图元b1、图元b2和图元b3,当前节点B的节点索引为Bx,图元b1对应存储于存储模块402中的图元信息中的节点索引也是Bx,图元b2对应存储于存储模块402中的图元信息中的节点索引也是Bx,图元b3对应存储于存储模块402中的图元信息中的节点索引也是Bx。
当节点生成模块401基于当前节点B的节点信息和当前节点B1的节点包围盒所包围的图元b1、图元b2和图元b3生成分别生成下一级节点B1的节点信息和子节点B1包围的图元b1的图元信息,以及生成下一级节点B2的节点信息和子节点B2包围的图元b2和图元b3各自的图元信息。
存储模块402根据下一级节点B1包围的图元b1的节点索引B1x将原来存储于图元b1的节点索引Bx更新为B1x。
存储模块402根据下一级节点B2包围的图元b2的节点索引B2x将原来存储于图元b2的节点索引Bx更新为B2x。
存储模块402根据下一级节点B2包围的图元b3的节点索引B2x将原来存储于图元b2的节点索引Bx更新为B2x。
可选的,该BVH构造装置可以部署于GPU中,该存储模块402可选的为GPU的片上存储模块,即GPU与片上存储模块集成在同一个半导体芯片上。
该存储模块402可以根据存储的内容不同划分为不同的存储模块,具体包括:节点存储模块、图元存储模块和临时存储模块。
节点存储模块,用于存储节点信息。也就是当前节点的节点信息和下一节点的节点信息。
举例说明:节点存储模块用于存储根节点的节点信息,以及在分割根节点过程中节点生成模块401生成的子节点的节点信息,以及在分割子节点的过程中节点生成模块401生成的叶节点的节点信息。
图元存储模块,用于存储所有图元的图元信息,该图元信息包括图元包围盒和节点索引,该图元信息中包括的节点索引根据当前包围该图元的节点的节点索引进行实时更新。
举例说明:若图元存储模块当前存储有根节点包围的第一图元的图元信息,该第一图元的图元信息中的节点索引为根节点的节点索引,在分割根节点的过程中,节点生成模块401生成由子节点包围的第一图元的图元信息,该由子节点包围的第一图元的图元信息中的节点索引为子节点的节点索引,将该子节点包围的图元的图元信息存储于图元存储模块时,图元存储模块将原来存储的第一图元的根节点的节点索引更新为子节点的节点索引。
临时存储模块,用于存储图元指针和图元标识符,以指示图元。
在本发明实施例中,存储模块402所存储的节点包围盒和图元包围盒均采用球形包围盒,通过该球形包围盒可以节省在构建BVH的过程中对设备存储带宽的占用,同时降低构造BVH的时间和提高输出BVH的速率。
基于上述本发明实施例公开的用于GPU的BVH构造装置,参阅图4,节点生成模块401具有多种方式根据当前节点的节点信息生成多个下一级节点中的每个下一级节点的第二节点信息。
可选的,该节点生成模块401,具体用于:
从存储模块402中获取待分割的当前节点的第一节点索引和第一节点包围盒,根据第一节点索引获取第一节点包围盒包围的多个图元的第一图元信息,根据多个图元的第一图元信息确定大图元和至少一个剩余图元,包围该大图元的第一图元包围盒大于包围该至少一个剩余图元的至少一个第二图元包围盒。根据该大图元的第一图元信息生成下一级节点中包围该大图元的下一节点的第二节点信息,确定该大图元的第一图元信息,根据至少一个剩余图元的第一图元信息生成下一级节点中包围该至少一个剩余图元的下一节点的至少一个第二节点信息,确定下一节点对应的至少一个剩余图元的至少一个第二图元信息,将包围大图元的下一节点的第二节点信息,该大图元的第一图元信息,以及包围该至少一个剩余图元的下一节点的至少一个第二节点信息和下一节点对应的至少一个剩余图元的至少一个第二图元信息存储于存储模块402。
可选的,该大图元具有最大的图元包围盒。
在具体实现中,节点生成模块401在根据多个图元的图元信息确定大图元和剩余图元的过程,具体为:获取每一个图元的图元信息中的图元包围盒,比较获取到的多个图元的图元包围盒的面积大小,将面积最大的图元包围盒所包围的图元作为大图元,其他的图元包围盒所包围的图元作为剩余图元。节点生成模块401针对大图元,根据该大图元的图元信息中的节点索引和图元包围盒,生成包围该大图元的下一节点的节点信息,确定大图元的图元信息。
举例说明:存储模块402中存储有子节点1的节点包围盒和节点索引1x,存储有子节点2的节点包围盒和节点索引2x,存储有图元1、图元2、图元3、图元4和图元5各自对应的图元包围盒,以及存储有图元1、图元2和图元3各自对应的节点索引1x,存储有图元4和图元5各自对应的节点索引2x。其中,图元1的图元包围盒的面积大于图元2和图元3的图元包围盒的面积。
节点生成模块401从存储模块402中获取子节点1的节点包围盒和节点索引1x,根据节点索引1x获取节点1包围的图元1、图元2和图元3各自对应的节点索引1x和图元包围盒,比较图元1、图元2和图元3各自对应的图元包围盒的面积大小,确定图元1的图元包围盒的面积最大,确定图元1为大图元,以及确定图元2和图元3为剩余图元。
节点生成模块401根据图元1的图元包围盒生成叶节点3的节点包围盒,根据图元1对应的节点索引1x生成节点3的节点索引10x,同时生成图元1对应的新节点索引10x。节点生成模块401根据图元2和图元3的图元包围盒生成子节点4的节点包围盒,根据图元2和图元3对应的节点索引1x生成节点4的节点索引11x,同时生成图元2和图元3对应的新节点索引11x。
其中,叶节点3和子节点4为节点1的下一级节点,叶节点3的节点包围盒包围图元1。子节点4的节点包围盒包围图元2和图元3。子节点4可以依照以上方法被进一步拆分,直到得到叶节点。
在具体实现中,将上述本发明实施例公开的BVH构造装置400部署于GPU中。首先,使用GPU的流处理器计算图元的图元质心和图元包围盒,并将计算得到的图元质心和图元包围盒存储于存储模块402,可以确保降低构造BVH的时间和提高输出BVH的速率。其次,采用BVH构造装置400中的节点生成模块401筛选出存储于存储模块402中的大图元,并在构造该大图元所在的叶节点时,优先使得大图元被首先拆分为一个独立的叶节点,其余的图元作为子节点需要再次拆分,使包括该大图元的叶节点相对于其他叶节点位于距离根节点较近的位置,从而避免出现子节点包围盒大量重叠的问题,减少遍历BVH阶段的存储访问量,同时节省设备的存储带宽,降低构造BVH的时间和提高输出BVH的速率。
图5示出了一种BVH的树形结构示意图。该BVH包括根节点、子节点和叶节点,其中有一距离根节点较近的叶节点,该叶节点中包括大图元。
需要说明的是,在本发明实施例中,所处理的图元类型为三角形,其所使用球形包围盒具体为三角形球形包围盒,该三角形球形包围盒能够更好的降低存储访问量。
可选的,该节点生成模块401,具体用于:
从存储模块402中获取待分割的当前节点的第一节点索引和第一节点包围盒,根据第一节点索引获取第一节点包围盒包围的多个图元的第一图元信息,确定多个图元的第一图元信息中包围大图元的第一图元包围盒和包围至少一个剩余图元的至少一个第二图元包围盒,该第一图元包围盒大于预设阈值,该至少一个剩余图元的至少一个第二图元包围盒小于该预设阈值,根据该大图元的第一图元信息,生成下一级节点中包围该大图元的下一节点的第二节点信息,并确定该大图元的第二图元信息,根据至少一个剩余图元的第一图元信息,生成下一级节点中包围至少一个剩余图元的下一节点的至少一个第二节点信息,并确定下一级节点中包围至少一个剩余图元的第二图元信息。
其中,节点生成模块401根据预设阈值和图元包围盒的面积大小确定大图元。该预设阈值可以由技术人员根据具体情况进行设置。可选的,该预设阈值的大小可以设定为当前节点包围的图元中最小面积的图元包围盒的2-3倍。该预设阈值的大小也可以由技术人员根据经验进行设置。
在具体实现中,节点生成模块401根据预设阈值、多个图元的第一图元信息确定大图元和剩余图元的过程,具体为:获取每一个图元的第一图元信息中的图元包围盒,将每个图元包围盒的面积与阈值进行比较,将获取到的图元包围盒的面积大于阈值的图元作为大图元,其他的图元包围盒所包围的图元作为剩余图元。节点生成模块401针对确定的大图元,根据该大图元的第一图元信息中的第一节点索引和图元包围盒,生成包围该大图元的下一级节点的下一节点的第二节点信息,并确定该大图元的第二图元信息。
需要说明的是,节点生成模块401所确定的大图元可以为多个,也可以没有。基于大图元生成距离根节点最近的叶节点时,该叶节点中可以包含多个大图元。
举例说明:存储模块402中存储有子节点1的节点包围盒和节点索引1x,存储有子节点2的节点包围盒和节点索引2x,存储有图元1、图元2、图元3、图元4、图元5和图元6各自对应的图元包围盒,以及存储有图元1、图元2和图元3各自对应的节点索引1x,存储有图元4、图元5和图6各自对应的节点索引2x。其中,图元1的图元包围盒的面积大于图元2和图元3的图元包围盒的面积,图元4和图元5的图元包围盒的面积大于阈值。
节点生成模块401从存储模块402中获取子节点2的节点包围盒和节点索引2x,根据节点索引2x获取节点2包围的图元4、图元5和图元6各自对应的节点索引2x和图元包围盒,将图元4、图元5和图元6各自对应的图元包围盒的面积与阈值进行比较,确定图元4和图元5的图元包围盒的面积大于阈值,确定图元4和图元5为大图元,确定图元6为剩余图元。
节点生成模块401根据图元4和图元5的图元包围盒生成叶节点4的节点包围盒,根据图元4对应的节点索引2x生成节点4的节点索引20x,同时生成图元4和图元5对应的新节点索引20x。节点生成模块401根据图元6的图元包围盒生成叶节点6的节点包围盒,根据图元4和图元5对应的节点索引2x生成节点4的节点索引21x,同时生成图元6对应的新节点索引21x。
其中,节点5和节点6为节点1的下一级节点,节点5的节点包围盒包围图元4和图元5。节点6的节点包围盒包围图元2和图元3。
在本发明实施例中,节点生成模块401在分割节点的过程中,根据阈值筛选出所要分割的节点包围的一个或多个大图元,并在构造大图元所在的叶节点时,优先使得大图元被首先拆分为一个独立的叶节点,其余的图元作为子节点需要再次拆分,使包括大图元的叶节点相对于其他叶节点位于距离根节点较近的位置,从而避免出现子节点包围盒大量重叠的问题,减少遍历BVH阶段的存储访问量,同时节省设备的存储带宽,降低构造BVH的时间和提高输出BVH的速率。
基于图4公开的用于GPU上的BVH构造装置,根据不同的设计需求,即在GPU的逻辑面积和BVH构造装置输出BVH的输出速率的需求下,本发明实施例公开了多种在GPU上部署BVH构造装置的方式。以下进行举例说明。
参阅图6,图6提供了一种部署于GPU的BVH构造装置600的结构示意图。该BVH构造装置600包括节点生成模块和片上存储模块。该节点生成模块包括节点生成实例601和节点生成实例602,每个节点生成实例采用同样的方式生成新的子节点和叶节点,两个节点生成实例可以同时工作。片上存储模块包括节点存储模块603、图元存储模块604和临时存储模块605。
该节点存储模块603用于存储节点信息。也就是用于存储根节点的节点信息,以及节点生成模块生成的子节点和叶节点的节点信息。各个节点所对应的节点信息中包括各自节点的节点包围盒和节点索引。
该图元存储模块604用于存储所有图元的图元信息,该图元信息包括图元包围盒,图元质心和节点索引。该图元信息中的节点索引为当前包围该图元的节点的节点索引。
该临时存储模块605用于存储图元指针和图元标识符。
其中,图元指针用于指示图元在图元存储模块604的地址。图元标识符用于表示图元在节点被分割的轴向上属于哪个区间。
需要说明的是,节点生成模块中所包括的节点生成实例的个数并不仅限于两个,可以具体根据设计需求进行设置。
假设移动终端的场景复杂度不超过100K图元,BVH树的深度不超过16,总节点数目不超过65535个,图元类型为三角形,节点存储模块603的大小约为1.2M字节,图元存储模块604的大小约为3.2M字节,临时存储模块605的大小约为250K字节。
该节点存储模块603用于存储节点信息,每个节点大小为20字节,每个节点包括4×32比特节点球形包围盒,以及32比特节点索引。
该图元存储模块604用于存储三角形信息,每个三角形信息包括16字节三角形包围盒,12字节三角形质心和4字节节点索引。
该临时存储模块605用于存储17比特图元指针和3比特图元标识符。其中,图元指针用于指向三角形在图元存储模块604的地址。图元标识符用于表示三角形在被分割的轴向上属于哪个区间。
基于图6构造BVH的过程中,首先,使用GPU的流处理器计算图元的图元质心和图元包围盒,并将计算得到的图元质心和图元包围盒存储于图元存储模块604。其次,针对每个节点生成实例,从节点存储模块603中读取一节点,并基于读取的节点,从图元存储模块604中读取该节点对应的图元信息,根据读取到的图元信息中的图元包围盒的面积大小筛选出大图元,并在构造该大图元所在的叶节点时,优先使得大图元被首先拆分为一个独立的叶节点,其余的图元作为子节点需要再次拆分,使包括该大图元的叶节点相对于其他叶节点位于距离根节点较近的位置,从而避免出现子节点包围盒出现大量重叠的问题,减少遍历BVH阶段的存储访问量,同时节省设备的存储带宽,降低构造BVH的时间和提高输出BVH的速率。
参阅图7,图7提供了一种部署于GPU的BVH构造装置700的结构示意图。该BVH构造装置700包括节点生成模块和片上存储模块。该节点生成模块包括一个节点生成实例701,该节点生成实例用于生成新的子节点和叶节点。片上存储模块包括节点存储模块702、图元存储模块703和临时存储模块704。
在具体实现中,利用GPU的最后一级缓存705上预留的一部分空间作为节点存储模块702,另一部分空间作为图元存储模块703。利用BVH构造装置上的存储空间作为临时存储模块704。例如,最后一级缓存705是三级缓存中的L3缓存。
该节点存储模块702用于存储节点信息。也就是用于存储根节点的节点信息,以及节点生成模块生成的子节点和叶节点的节点信息。各个节点所对应的节点信息中包括各自节点的节点包围盒和节点索引。
该图元存储模块703用于存储所有图元的图元信息,该图元信息包括图元包围盒,图元质心和节点索引。该图元信息中的节点索引为当前包围该图元的节点的节点索引。
该临时存储模块704用于存储图元指针和图元标识符,以指示图元。
其中,图元指针用于指示图元在图元存储模块703的地址。图元标识符用于表示图元在节点被分割的轴向上属于哪个区间。
需要说明的是,节点生成模块中所包括的节点生成实例的个数并不仅限于一个,可以具体根据设计需求进行设置。
基于图7构造BVH的过程中,首先,使用GPU的流处理器计算图元的图元质心和图元包围盒,并将计算得到的图元质心和图元包围盒存储于图元存储模块703。其次,针对每个节点生成实例,从节点存储模块702中读取一节点,并基于读取的节点从图元存储模块703中读取该节点对应的图元信息,根据读取到的图元信息中的图元包围盒的面积大小筛选出大图元,并在构造该大图元所在的叶节点时,优先使得大图元被首先拆分为一个独立的叶节点,其余的图元作为子节点需要再次拆分,使包括该大图元叶节点相对于其他叶节点位于距离根节点较近的位置,从而避免出现子节点包围盒出现大量重叠的问题,减少遍历BVH阶段的存储访问量,同时降低构造BVH的时间和提高输出BVH的速率。
参阅图8,图8提供了一种部署于GPU的BVH构造装置的结构示意图。该BVH构造装置800包括节点生成模块和片上存储模块。该节点生成模块包括节点生成实例801,节点生成实例802和节点生成实例803,每个节点生成实例采用同样的方式生成新的子节点和叶节点,三个节点生成实例可以同时工作。片上存储模块包括节点存储模块804、图元存储模块805和临时存储模块806。
在具体实现中,利用GPU的最后一级缓存807上预留一部分空间作为该图元存储模块805。利用BVH构造装置上的一部分存储空间作为图元存储模块805,另一部分存储空间作为临时存储模块806。
该节点存储模块804用于存储节点信息,也就是用于存储根节点的节点信息,以及节点生成模块生成的子节点和叶节点的节点信息。各个节点所对应的节点信息中包括各自节点的节点包围盒和节点索引。
该图元存储模块805用于存储所有的图元的图元信息,该图元信息包括图元包围盒,图元质心和节点索引。该图元信息中的节点索引为当前包围该图元的节点的节点索引。
该临时存储模块806用于存储图元指针和图元标识符,以指示图元。
其中,图元指针用于指示图元在图元存储模块805的地址。图元标识符用于表示图元在节点被分割的轴向上属于哪个区间。
需要说明的是,节点生成模块中所包括的节点生成实例的个数并不仅限于三个,可以具体根据设计需求进行设置。
基于图8构造BVH的过程中,首先,使用GPU的流处理器计算图元的图元质心和图元包围盒,并将计算得到的图元质心和图元包围盒存储于图元存储模块805。其次,针对每个节点生成实例,从节点存储模块804中读取一节点,并基于读取的节点从图元存储模块805中读取该节点对应的图元信息,根据读取到的图元信息中的图元包围盒大小筛选出大图元,并在构造该大图元所在的叶节点时,优先使得大图元被首先拆分为一个独立的叶节点,其余的图元作为子节点需要再次拆分,使包括该大图元的叶节点相对于其他叶节点位于距离根节点较近的位置,从而避免出现子节点包围盒出现大量重叠的问题,减少遍历BVH阶段的存储访问量,同时节省设备的存储带宽,降低构造BVH的时间和提高输出BVH的速率。
本发明实施例的BVH树的构造技术方案可以基于图4、图6至图8举例所示的部署于GPU上的BVH构造装置来具体实施。
参阅图9,为本发明实施例提供的一种用于GPU的BVH构造方法的流程示意图,该BVH的构造方法可包括但不限于如下步骤:
步骤S901:获取当前节点的第一节点信息。
执行步骤S901,节点生成实例判断节点存储模块是否为空。也就是说,节点存储模块中是否存在要进行处理的节点,也就是需要获取的当前节点。该当前节点包括根节点或者子节点。
若不存在,说明已无可处理的节点,结束对BVH树的构造。
若存在,从节点存储模块中读取当前节点的第一节点信息。该第一节点信息包括第一节点索引和第一节点包围盒。该第一节点包围盒包括中心点和半径,该第一节点包围盒是球形包围盒。
例如,节点存储模块中存储有节点0和节点1。其中,节点0的节点索引为0x,节点1的节点索引为1x。
步骤S902:根据第一节点索引确定第一节点包围盒包围的多个图元的多个第一图元信息。
执行步骤S902,节点生成实例基于第一节点索引从图元存储模块中获取当前节点的第一节点包围盒包围的多个图元的多个第一图元信息。该第一图元信息包括图元包围盒、图元质心和第一节点索引。该图元包围盒是球形包围盒。
这里需要说明的是,具体从图元存储模块中获取图元信息时,根据当前节点的第一节点索引筛选图元存储模块中的第一图元信息,获取图元存储模块存储的图元信息中包含有第一节点索引的第一图元信息。也就是说,这些图元信息所对应的图元被当前节点的节点包围盒包围。
步骤S903:根据该多个第一图元信息生成下一级节点中每个下一节点的第二节点信息,确定与每个下一节点对应的至少一个图元的至少一个第二图元信息。
执行步骤S903,节点生成实例所生成的下一级节点中每个下一节点的第二节点信息包括第二节点包围盒和第二节点索引。这里的第二节点包围盒是球形包围盒。
在具体实现中,节点生成实例基于图元信息中的图元包围盒生成下一级节点的图元包围盒,基于图元信息中的节点索引生成下一级节点的节点索引。节点生成实例将下一级节点的节点索引作为下一级节点所包围的图元的节点索引。
步骤S904:将该第二节点信息和第二图元信息存储至存储器。
执行步骤S904,节点生成实例将下一级节点中每个下一节点的第二节点信息发送至节点存储模块,使节点存储模块存储下一级节点中每个下一节点的第二节点信息。节点生成实例将下一级节点中的每个下一节点的第二节点包围盒包围的至少一个图元的第二图元信息发送至图元存储模块,使图元存储模块基于第二图元信息对之前存储的该图元的第一图元信息进行更新。
具体的,图元存储模块将该图元的第一图元信息中的第一节点索引更新为第二图元信息中的第二节点索引。
在本发明实施例中,生成的第二节点包围盒和图元包围盒均采用球形包围盒,通过该球形包围盒可以在构建BVH的过程中节省设备的存储带宽,降低构造BVH的时间和提高输出BVH的速率。
基于上述本发明实施例BVH树的构造方法,本发明实施例还公开了另一种用于GPU的BVH构造方法,如图10所示,主要包括以下步骤:
步骤S101:获取当前节点的第一节点信息。
步骤S102:根据第一节点索引确定当前节点的第一节点包围盒包围的多个图元的多个第一图元信息。
步骤S101和步骤S102的具体执行过程和原理与上述图9公开的步骤S901和步骤S902相同,具体过程可参见上述公开内容,这里不再进行赘述。
步骤S103:确定多个第一图元信息中包围大图元的第一图元包围盒和包围至少一个剩余图元的至少一个第二图元包围盒。
执行步骤S103,该包围大图元的第一图元包围盒大于包围至少一个剩余图元的至少一个第二图元包围盒。可选的,该第一图元包围盒在多个图元对应的图元包围盒中最大。
在具体实现中,节点生成实例比较所获取到的多个图元各自对应的图元信息中的图元包围盒的面积大小,确定图元包围盒的面积最大的图元为大图元,其他图元为剩余图元。
在本发明实施例中图元包围盒是球形包围盒,更容易比较包围盒的大小。同时,球形包围盒的存储大小也较小,能够节约存储空间。
举例说明:图元存储模块中存储有图元0、图元1、图元2、图元3和图元4各自的图元信息。
图元0的图元信息包括节点索引0x,图元0包围盒和图元0质心。
图元1的图元信息包括节点索引0x,图元1包围盒和图元1质心。
图元2的图元信息包括节点索引1x,图元2包围盒和图元2质心。
图元3的图元信息包括节点索引0x,图元3包围盒和图元3质心。
图元4的图元信息包括节点索引1x,图元4包围盒和图元4质心。
其中,图元0包围盒的面积比图元1包围盒和图元3包围盒的面积都大,图元4包围盒的面积大于图元2包围盒的面积。
确定执行步骤S101获取的节点索引为0x,在执行步骤S102的过程中,首先,基于该节点索引0x从图元存储模块中可以获取图元0、图元1和图元3各自对应的图元信息。其次,比较图元0、图元1和图元3各自对应的图元包围盒的面积大小,确定图元0为大图元,图元1和图元3为剩余图元。
步骤S104:获取大图元的第一图元信息,根据大图元的第一图元信息生成下一级节点包围大图元的下一节点的第二节点信息,确定大图元的第二图元信息。
执行步骤S104,节点生成实例所生成的第二节点信息包括第二节点包围盒和第二节点索引。这里的第二节点包围盒是球形包围盒。
在具体实现中,节点生成实例基于大图元的第一图元信息中的图元包围盒生成下一级节点包围大图元的下一节点的第二节点包围盒,基于大图元的第一图元信息中的第一节点索引生成下一节点的第二节点索引。节点生成实例将第二节点索引作为大图元的第二节点索引。
也就是说:下一级节点包围大图元的的下一节点的第二节点信息包括第二节点包围盒和第二节点索引。大图元的第二图元信息中包括第一图元包围盒和第二节点索引。
步骤S105:获取剩余图元的第一图元信息,根据至少一个剩余图元的第一图元信息生成下一级节点中包围至少一个剩余图元的下一节点的至少一个第二节点信息,确定至少一个剩余图元的第二图元信息。
执行步骤S105,节点生成实例所生成的包围至少一个剩余图元的下一节点的至少一个第二节点信息包括第二节点包围盒和第二节点索引。这里的第二节点包围盒是球形包围盒。
在具体实现中,节点生成实例基于剩余图元的第一图元信息中的图元包围盒生成包围该剩余图元的下一节点的第二节点包围盒,基于剩余图元的第一图元信息中的第一节点索引生成包围该剩余图元的下一节点的第二节点索引。节点生成实例将第二节点索引作为剩余图元的节点索引。
也就是说,下一级节点包围至少一个剩余图元的下一节点的至少一个第二节点信息包括第二节点包围盒和第二节点索引。剩余图元的第二图元信息中包括第二图元包围盒和第二节点索引。
步骤S106:将第二节点信息、大图元的第二图元信息和剩余图元的第二图元信息存储至存储器。
在本发明实施例中,筛选出所要分割的节点包围的图元包围盒面积最大的大图元,并在构造大图元所在的叶节点时,使该叶节点位于距离根节点较近的位置,从而避免出现子节点包围盒大量重叠的问题,减少遍历BVH阶段的存储访问量,同时节省设备的存储带宽,降低构造BVH的时间和提高输出BVH的速率。
基于上述本发明实施例BVH树的构造方法,本发明实施例还公开了另一种用于GPU的BVH构造方法,如图11所示,主要包括以下步骤:
步骤S111:获取当前节点的第一节点信息。
步骤S112:根据当前节点的第一节点索引确定当前节点的第一节点包围盒包围的多个图元的多个第一图元信息。
步骤S111和步骤S112的具体执行过程和原理与上述图9公开的步骤S901和步骤S902相同,具体过程可参见上述公开内容,这里不再进行赘述。
步骤S113:确定多个第一图元信息中包围大图元的第一图元包围盒和包围至少一个剩余图元的至少一个第二图元包围盒。
执行步骤S113,节点生成实例根据预设阈值和图元包围盒的面积大小确定大图元。该第一图元包围盒大于预设阈值,该至少一个剩余图元的至少一个第二图元包围盒小于该预设阈值。
该预设阈值可以由技术人员根据具体情况进行设置。可选的,该阈值的大小可以设定为当前节点包围的图元中最小面积的图元包围盒的2-3倍。该阈值的大小也可以由技术人员根据经验进行设置。
举例说明:图元存储图元存储模块中存储有图元0、图元1、图元2、图元3和图元4各自的图元信息。
图元0的图元信息包括节点索引0x,图元0包围盒和图元0质心。
图元1的图元信息包括节点索引0x,图元1包围盒和图元1质心。
图元2的图元信息包括节点索引1x,图元2包围盒和图元2质心。
图元3的图元信息包括节点索引0x,图元3包围盒和图元3质心。
图元4的图元信息包括节点索引1x,图元4包围盒和图元4质心。
其中,图元0包围盒的面积最小,图元1包围盒、图元2包围盒和图元3包围盒的面积是图元0包围盒的2倍,图元4包围盒的面积是图元0包围盒的3倍。以图元0包围盒的面积为基准设置阈值为图元0包围盒的面积2倍的值。
确定执行步骤S111获取的节点索引为0x,在执行步骤S112的过程中,首先,基于该节点索引0x从图元存储模块中可以获取图元0、图元1和图元3各自对应的图元信息。其次,将图元0、图元1和图元3各自对应的图元包围盒的面积与阈值进行比较,确定图元1和图元3为大图元,图元0为剩余图元。
步骤S114:根据所述大图元的第一图元信息,生成下一级节点包围该大图元的下一节点的第二节点信息,确定该大图元的第二图元信息。
步骤S115:获取剩余图元的第一图元信息,根据至少一个剩余图元的第一图元信息生成下一级节点中包围至少一个剩余图元的下一节点的至少一个第二节点信息,确定至少一个剩余图元的第二图元信息。
步骤S116:将第二节点信息、大图元的第二图元信息和剩余图元的第二图元信息存储至存储器。
步骤S114至步骤S116的具体执行过程和原理与上述图10公开的步骤S104至步骤S106相同,具体过程可参见上述公开内容,这里不再进行赘述。
在本发明实施例中,根据阈值筛选出所要分割的节点包围的大图元,并在构造大图元所在的叶节点时,使该叶节点位于距离根节点较近的位置,从而避免出现子节点包围盒大量重叠的问题,减少遍历BVH阶段的存储访问量,同时节省设备的存储带宽,降低构造BVH的时间和提高输出BVH的速率。
需要说明的是,在执行上述本发明实施例公开的用于GPU的BVH构造方法,除了考虑节点存储模块中是否存储有待处理的节点之外,可选的,在构造的过程中进一步的考虑分割节点成本,在满足分割节点成本的情况下,对待处理的节点进行进一步的分割,在不满足分割节点成本的情况下,则不再进行节点分割。
针对分割节点成本,可通过在分割节点的过程中,基于节点所包围的图元的图元信息进行确定。
在具体实现中,这里以一个图元为例进行说明。
S1:确定当前节点的节点包围盒的中心点和半径。
S2:根据该节点包围盒的中心点和半径,确定节点包围盒的等分区间和对应等分区间的节点候选分割位置。
在S2中,等分区间指沿节点包围盒中的任一轴向上进行等分的区间。等分区间的最小位置为节点包围盒的中心点减去节点包围盒的半径的差值。等分区间的最大位置为节点包围盒的中心点加上节点包围盒的半径的和值。节点候选分割位置指划分等分区间时的位置,也就是说,通过节点候选分割位置划分节点包围盒将节点包围盒划分为等分区间。
举例说明:当前节点的节点包围盒是球形包围盒,该球形包围盒的中心点为(x,y,z),半径为R。随机从X轴,Y轴和Z轴中选取X轴,沿X轴,将该球形包围盒等分成N个区间,生成N个节点候选分割位置。参阅图12,图12为将球形包围盒等分成8个区间的示意图,N为大于等于2的整数。
基于公式(1)确定待划分的X轴上的最小位置xmin,基于公式(2)确定待划分的X轴上的最大位置xmax。
xmin=x-R (1)
xmax=x+R (2)
S3:根据等分区间的个数、最小位置和最大位置,以及该当前节点包围的图元的图元质心确定图元标识符。
基于上述举例,图元标识符binId=(centroid-xmin)/(xmax-xmin)×N。其中,centroid为图元质心。
在执行S3得到图元标识符后,将该图元标识符和图元指针存储于临时存储模块中。图元标识符用于指示图元在被分割的轴向上属于哪个等分区间。图元指针用于指示图元在图元存储模块中的地址。
S4:根据该图元标识符,分别计算每一候选节点分割位置相邻两侧位置的图元个数。
S5:根据每一节点候选分割位置相邻的两侧位置的图元个数,确定每一节点候选分割位置所对应的分割代价。
在S5中,针对每一节点候选分割位置,使用表面积启发搜索算法,根据当前待计算的节点候选分割位置相邻的两侧位置的图元个数,计算该节点候选分割位置对应的分割代价。
S6:若任一节点候选分割位置对应的分割代价超出分割节点成本,停止分割当前节点。
S7:若每一节点候选分割位置对应的分割代价未超出分割节点成本,确定最小分割代价对应的节点候选分割位置。
S8:根据最小分割代价对应的节点候选分割位置对当前节点进行分割,得到包围大图元的叶节点,以及包围剩余图元的叶节点或子节点。
在本发明实施例中,使用GPU的流处理器计算图元的图元质心和图元包围盒,可以确保降低构造BVH的时间和提高输出BVH的速率。同时将获取到的待处理节点的图元划分为大图元和其他图元,并基于大图元和其他图元分别构建对应的节点,通过将大图元更早的分离出来,在构建包围其的叶节点时,优先使得大图元被首先拆分为一个独立的叶节点,其余的图元作为子节点需要再次拆分,可以使包括该大图元的叶节点相对于其他叶节点更加靠近根节点上,从而缓解大图元引入的节点包围盒重叠的问题,实现减少遍历BVH阶段的存储访问量,同时节省设备的存储带宽,降低构造BVH的时间和提高输出BVH的速率的目的。
基于上述本发明实施例提供的用于GPU的BVH构造装置和方法,本发明实施例所提供的用于GPU的BVH构造装置,以及用于GPU的BVH构造方法也可以直接用硬件、处理器执行的存储器,或者二者的结合来实施。
参阅图13,示出了一种用户GPU的BVH构造装置的结构示意图。该BVH构造装置部署于GPU上,该BVH的构造装置1300包括:
存储器1301,以及与该存储器通信连接的处理器1302。
该处理器1302通过总线或其他接口与存储器1201耦合。
存储器1301具体可以是片上存储器,例如缓存。
处理器1302具体可以是GPU的流处理器或者GPU的内核处理器。
存储器1301也可以集成在处理器1302中。存储器1301和处理器1302也可以是相互独立的器件,存储器1301和处理器1302相连,例如存储器1301和处理器1302可以通过总线通信。
该存储器1301,用于存储图元信息和节点信息。
该处理器1302,用于执行上述本发明实施例提供的用于GPU的BVH构造方法。
进一步的,本发明实施例还提供了一种存储介质,其上存储有BVH的构造程序,其中,在所述BVH的构造程序运行时控制该存储介质所在设备执行上述本发明实施例提供的用于GPU的BVH构造方法。
本发明实施例提供了一种用于GPU的BVH构造方法、装置及存储介质。在本发明实施例中使节点包围盒和图元包围盒均采用球形包围盒,通过球形包围盒可以节省构建BVH的过程中的存储带宽,同时降低构造BVH的时间和提高输出BVH的速率。
进一步的,在分割节点的过程中,筛选出所要分割的节点包围的大图元,并在构造大图元所在的叶节点时,优先使得大图元被首先拆分为一个独立的叶节点,其余的图元作为子节点需要再次拆分,使包围大图元的该叶节点相对于其他叶节点位于距离根节点较近的位置,从而进一步缓解大图元引入的节点包围盒重叠的问题,实现减少遍历BVH阶段的存储访问量,同时节省设备的存储带宽,降低构造BVH的时间和提高输出BVH的速率的目的。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
最后应说明的是:以上实施例仅用以示例性说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请及本申请带来的有益效果进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请权利要求的范围。

Claims (15)

1.一种用于图形处理单元GPU的包围体层次结构BVH构造装置,其特征在于,包括:
节点生成模块,用于从存储模块获取当前节点的第一节点信息,所述第一节点信息包括所述当前节点的第一节点包围盒和第一节点索引,根据所述第一节点索引确定所述第一节点包围盒包围的多个图元的多个第一图元信息,每个第一图元信息包括包围所述多个图元中的一个图元的图元包围盒和所述第一节点索引,根据所述多个第一图元信息生成多个下一级节点中每个下一级节点的第二节点信息,确定与所述每个下一级节点对应的至少一个图元的至少一个第二图元信息,所述第二节点信息包括所述每个下一级节点的第二节点包围盒和第二节点索引,所述第二节点包围盒包围所述至少一个图元,所述至少一个图元是所述多个图元中的一部分,每个第二图元信息包括所述图元包围盒和所述第二节点索引,所述第一节点包围盒、所述第二节点包围盒、所述图元包围盒是球形包围盒;
所述存储模块,用于存储所述多个第一图元信息、所述至少一个第二图元信息、所述第一节点信息和所述第二节点信息。
2.根据权利要求1所述的装置,其特征在于,所述多个图元包括大图元和至少一个剩余图元,包围所述大图元的第一图元包围盒大于包围所述至少一个剩余图元的至少一个第二图元包围盒。
3.根据权利要求2所述的装置,其特征在于,所述第一图元包围盒在所述多个图元的多个图元包围盒中最大。
4.根据权利要求1所述的装置,其特征在于,所述多个图元包括大图元和至少一个剩余图元,所述大图元的第一图元包围盒大于预设阈值,所述至少一个剩余图元的至少一个第二图元包围盒小于所述预设阈值。
5.根据权利要求2至4任一项所述的装置,其特征在于,所述多个下一级节点包括第一节点和第二节点,所述第一节点的第二节点包围盒包围至少一个所述大图元,所述第二节点的第二节点包围盒包围所述至少一个剩余图元。
6.根据权利要求5所述的装置,其特征在于,还包括:将所述第二节点设置为所述当前节点,并继续执行BVH构造。
7.根据权利要求1至6中任一项所述的装置,其特征在于,所述存储模块包括:
第一存储模块,用于存储所述第一图元信息和所述第二图元信息;
第二存储模块,用于存储所述第一节点信息和所述第二节点信息。
8.一种用于图形处理单元GPU的包围体层次结构BVH构造方法,其特征在于,所述方法包括:
获取当前节点的第一节点信息,所述第一节点信息包括所述当前节点的第一节点包围盒和第一节点索引,所述第一节点包围盒是球形包围盒;
根据所述第一节点索引确定所述第一节点包围盒包围的多个图元的多个第一图元信息,每个第一图元信息包括包围所述多个图元中的一个图元的图元包围盒和所述第一节点索引,所述图元包围盒是球形包围盒;
根据所述多个第一图元信息生成下一级节点中每个下一节点的第二节点信息,确定与所述每个下一节点对应的至少一个图元的至少一个第二图元信息,所述第二节点信息包括所述每个下一节点的第二节点包围盒和第二节点索引,所述第二节点包围盒包围所述至少一个图元,所述至少一个图元是所述多个图元中的一部分,每个第二图元信息包括所述图元包围盒和所述第二节点索引,所述第二节点包围盒是球形包围盒;
将所述第二节点信息和所述第二图元信息存储至存储器。
9.根据权利要求8所述的方法,其特征在于,所述多个图元包括大图元和至少一个剩余图元,包围所述大图元的第一图元包围盒大于包围所述至少一个剩余图元的至少一个第二图元包围盒。
10.根据权利要求9所述的方法,其特征在于,所述第一图元包围盒在所述多个图元的多个图元包围盒中最大。
11.根据权利要求8所述的方法,其特征在于,所述多个图元包括大图元和至少一个剩余图元,所述大图元的第一图元包围盒大于预设阈值,所述至少一个剩余图元的至少一个第二图元包围盒小于所述预设阈值。
12.根据权利要求11所述的方法,其特征在于,所述多个下一级节点包括第一节点和第二节点,所述第一节点的第二节点包围盒包围所述大图元,所述第二节点的第二节点包围盒包围所述至少一个剩余图元。
13.根据权利要求8至12中任一项所述的方法,其特征在于,还包括:
将所述第二节点设置为所述当前节点,继续执行BVH构造。
14.一种用于图形处理单元GPU的包围体层次结构BVH构造装置,其特征在于,包括:存储器,以及处理器;
所述处理器,用于执行权利要求8至13中任一项所述的BVH的构造方法;
所述存储器,用于存储所述多个第一图元信息、所述至少一个第二图元信息、所述第一节点信息和所述第二节点信息。
15.一种存储介质,其特征在于,所述存储介质包括存储的BVH的构造程序,其中,在所述BVH的构造程序运行时控制所述计算机存储介质所在设备执行如权利要求8至13中任一所述的BVH构造方法。
CN201911349495.8A 2019-12-24 2019-12-24 一种用于gpu的bvh构造方法、装置及存储介质 Active CN113034338B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911349495.8A CN113034338B (zh) 2019-12-24 2019-12-24 一种用于gpu的bvh构造方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911349495.8A CN113034338B (zh) 2019-12-24 2019-12-24 一种用于gpu的bvh构造方法、装置及存储介质

Publications (2)

Publication Number Publication Date
CN113034338A true CN113034338A (zh) 2021-06-25
CN113034338B CN113034338B (zh) 2023-03-17

Family

ID=76451934

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911349495.8A Active CN113034338B (zh) 2019-12-24 2019-12-24 一种用于gpu的bvh构造方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN113034338B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114240973A (zh) * 2021-12-22 2022-03-25 国泰新点软件股份有限公司 图纸分割方法、设备及存储介质
US20230118972A1 (en) * 2021-10-18 2023-04-20 Nvidia Corporation Scalable parallel construction of bounding volume hierarchies
WO2023069911A1 (en) * 2021-10-18 2023-04-27 Nvidia Corporation Scalable parallel construction of bounding volume hierarchies

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101593367A (zh) * 2009-06-25 2009-12-02 北京航空航天大学 一种基于四叉包围盒树的柔性织物自碰撞检测方法
CN102393825A (zh) * 2011-07-15 2012-03-28 浙江大学 一种基于非共面剔除的柔性场景连续碰撞检测方法
KR20120092926A (ko) * 2011-02-14 2012-08-22 주식회사 실리콘아츠 레이 트레이싱 코어 및 레이 트레이싱 처리 방법
US20130328857A1 (en) * 2012-06-11 2013-12-12 Disney Enterprises, Inc. (Burbank, Ca) Streaming Hierarchy Traversal Renderer
US20140028666A1 (en) * 2012-07-24 2014-01-30 Samsung Electronics Co., Ltd. Method and apparatus for ray tracing
US20150287233A1 (en) * 2014-04-02 2015-10-08 Samsung Electronics Co., Ltd. Method and apparatus for rendering same regions of multi frames

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101593367A (zh) * 2009-06-25 2009-12-02 北京航空航天大学 一种基于四叉包围盒树的柔性织物自碰撞检测方法
KR20120092926A (ko) * 2011-02-14 2012-08-22 주식회사 실리콘아츠 레이 트레이싱 코어 및 레이 트레이싱 처리 방법
CN102393825A (zh) * 2011-07-15 2012-03-28 浙江大学 一种基于非共面剔除的柔性场景连续碰撞检测方法
US20130328857A1 (en) * 2012-06-11 2013-12-12 Disney Enterprises, Inc. (Burbank, Ca) Streaming Hierarchy Traversal Renderer
US20140028666A1 (en) * 2012-07-24 2014-01-30 Samsung Electronics Co., Ltd. Method and apparatus for ray tracing
US20150287233A1 (en) * 2014-04-02 2015-10-08 Samsung Electronics Co., Ltd. Method and apparatus for rendering same regions of multi frames

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
KILLERAERY: "空间数据结构(四叉树/八叉树/BVH树/BSP树/k-d树)", 《HTTPS://WWW.CNBLOGS.COM/KILLERAERY/P/10878367.HTML》, 26 May 2019 (2019-05-26), pages 1 - 15 *
MATT PHARR 等: "《Physically Based Rendering : From Theory to Implementation (Third Edition)》", 31 December 2017, MORGAN KAUFMANN出版社, pages: 247 - 310 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230118972A1 (en) * 2021-10-18 2023-04-20 Nvidia Corporation Scalable parallel construction of bounding volume hierarchies
WO2023069911A1 (en) * 2021-10-18 2023-04-27 Nvidia Corporation Scalable parallel construction of bounding volume hierarchies
CN114240973A (zh) * 2021-12-22 2022-03-25 国泰新点软件股份有限公司 图纸分割方法、设备及存储介质

Also Published As

Publication number Publication date
CN113034338B (zh) 2023-03-17

Similar Documents

Publication Publication Date Title
CN113034338B (zh) 一种用于gpu的bvh构造方法、装置及存储介质
EP2869273B1 (en) Ray tracing method and apparatus
US8824337B1 (en) Alternate directions in hierarchical road networks
TWI546770B (zh) 圖形處理單元中3d加速結構之完全並列原地建構
CN113015970B (zh) 划分知识图谱的方法、系统和介质
US8570322B2 (en) Method, system, and computer program product for efficient ray tracing of micropolygon geometry
US6995765B2 (en) System, method, and computer program product for optimization of a scene graph
US9367949B2 (en) Apparatus and method for scheduling of ray tracing
CN112190949B (zh) 互动剧情跳转方法、互动剧情界面显示方法、装置及设备
JP5950285B2 (ja) 予め決められた複数のビット幅のデータに対して操作を行う命令を使用してツリーの検索を行うための方法、並びに、当該命令を使用してツリーの検索を行うためのコンピュータ及びそのコンピュータ・プログラム
JP2009534759A (ja) 瞬時光線追跡
JP5967786B2 (ja) シミュレーション装置
Binder et al. Efficient stackless hierarchy traversal on GPUs with backtracking in constant time.
CN109903050A (zh) 交易去重方法、交易构造方法、设备和存储介质
Lee et al. Parallel mesh simplification using embedded tree collapsing
CN106204413B (zh) 利用分层加速结构的图形渲染
JP2009134520A (ja) ソーシャルネットワーク表示システム、方法、及びプログラム
US20240112397A1 (en) Spatial test of bounding volumes for rasterization
CN114254163A (zh) 三维场景管理方法、装置、设备及存储介质
TWI719379B (zh) 光線追蹤方法與電腦程式產品
FI117655B (fi) Menetelmä tietokoneavusteisen polygonimallin prosessointiin, laite ja tietokoneohjelma
CN114742642B (zh) 一种用于资金网络的图数据处理方法
JP5781045B2 (ja) オブジェクト検索装置およびその方法
CN107346527B (zh) 一种基于动态任务调度的层次包围盒构建方法
Zhang et al. Parallel construction and rendering of multi-resolution representation for massive meshes with GPU

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant