利用分层加速结构的图形渲染的制作方法

文档序号:6596713阅读:174来源:国知局
专利名称:利用分层加速结构的图形渲染的制作方法
利用分层加速结构的图形渲染
背景技术
本发明一般地涉及图形处理期间的渲染图元。可按照诸如三角形或多边形之类的图元来分析要处理的图像,这些图元共同地表示整体图形图像。在很多情况下,在光栅化期间分析三角形或多边形。通常搜索图形图元。图形处理中的一个常见任务是确定哪些多边形或三角形位于给定的块或片中。这可能涉及在适当图元中进行几何近似搜索。需要搜索图元的另一个示例是光线跟踪。其中通过搜索算法,识别与光线或一组光线相交的最接近的多边形。渲染算法使用加速结构来降低解决搜索问题的复杂性。这些加速结构也可被称为 空间或几何索引。通常,它们涉及在端节点处存储图元的分层树状数据结构。这种分层加速结构的示例包括k维树即k-d树、包围体层次(BVH)、包围间隔层次(BIH)或二元空间分割(BSP)。附图简述图I是对根据一个实施例的内部节点的数据结构的描绘;图2是对用于根据本发明的一个实施例的叶节点或64位扩展的数据结构的描绘;图3是对根据一个实施例的父节点及其子的数据结构的描绘;图4示出根据一个实施例的存储器区域和节点表之间的关系;图5是对根据一个实施例的所分配的存储器区域之间的关系的描绘;图6是本发明的一个实施例的流程图;图7是本发明的另一个实施例的流程图;以及图8是一个实施例的示意性描绘。
具体实施例方式根据一个实施例,可使用k维树加速结构,即k-d树。然而,也可使用任何其它分层加速结构。在k-d树中,根据价值函数(cost function)将3D空间分成两个非重叠的区域。在第一次分裂之后,每个所得区域在第二次分裂中被分成两个区域,形成k-d树的两个内部节点,然后所得的四个区域中的每一个在第三次分裂中被分成两个区域,形成k-d树的更多节点。该过程递归地继续,直到满足专用终止标准。未再分裂的节点称为叶节点。叶节点存储与其区域相交的图元。在一些实施例中,叶存储对图元的参考而非图元本身。叶节点中的图元参考以图元索引阵列的形式存储。基于树的数据结构具有大量的内部节点和对其它节点的参考。结果,其存储占用量可能很大且不可预测。构造这种基于树的数据结构的计算成本高。为了实现交互式图形应用所需的性能,需要使用高速并行计算来创建基于树的结构。在一些实施例中,可实现紧凑的存储布局,这减少所消耗的存储量。紧凑表示的优点是不会减慢各遍历步骤,在所述遍历步骤中,各个图元在搜索操作中被遍历。此外,可将加速结构存储在盘上并加载到不同的地址空间。可将加速结构传送到具有不同地址空间的另一个计算设备。加速结构及其数据格式的这种表示有利地支持了由多个并行线程进行的结构创建,因此允许使用高速并行计
笪在一些实施例中,用于包含大量图元的模型的加速结构扩展到图形处理架构的64位地址空间。一般地,64位地址空间需要64位大小的参考,但一些实施例可用偏移代替指针来参考子节点。在这种情况下,即使在扩展到64位地址空间的较大加速结构中,大多数偏移仍可以通过32位来编码,而仅有少部分偏移可能需要全64位编码。加速结构可编码需要64位偏移的特殊类型的节点,这种特殊类型的节点被进一步称为64位扩展。由于默认使用32位偏移并且将64位偏移编码为特殊扩展,因此用于适合32位地址空间的小模型的加速结构可有利地在64位计算机架构上具有相同的二进制表示,从而使32位结构能够在64位计算机上不变地使用。参考图I和2,在一个实施例中,每个k-d树节点可存储在两个字中,每个字为四 字节。也可使用其它字长度。在图I中示出的内部节点的第一字由位组28和30构成。图I中示出的位组28存储了从字28和30到子节点的第一字节的偏移34,或者在节点是叶的情况下,存储了从字28和30到图元索引阵列39的第一字节的偏移34,如图2所示。通过存储偏移而不是指针,数据结构可不依赖其所处的基址。结果,在一些实施例中,向另一个计算设备存储和加载或传送该结构将不需要预处理。参考图3,父节点40的两个子节点42和44可存储在一起。在一些实施例中,这可允许在父节点中仅存储单个偏移,而不是两个偏移。在一个实施例中,每个节点和叶索引阵列可至少通过四字节边界对齐。结果,任意两节点之间的偏移可具有至少两个等于零的最低有效位。这两个位(图I中的位组30)可用于存储附加信息。如针对内部节点所指示的(

图1),位组30中的值1、2和3对与x、y或z轴对应的分裂面位置进行编码。图2中示出的叶节点中的位30的值可为零,使得位组30用作叶节点指示符。 参照图6,根据一个实施例,操作序列可在硬件、软件或固件中实现。在软件或固件实施例的情况下,该序列可按存储的计算机可执行指令的形式存储在适当的存储设备或介质中。适当的存储设备包括光盘或硬盘驱动以及半导体存储器,仅提及几个示例。最初,节点被访问,如框10所指示的。然后,在菱形12中,进行检查,确定节点是否为内部的。如果是,则内部节点被处理,如框14所指示的。如果节点不是内部的,则它是叶节点或64位扩展。64位扩展是需要64位偏移来参考其子节点之一或两个子节点的特殊类型的节点。当然,本发明可应用于任何尺寸的扩展。在任何情况下,它被处理为叶,如框16所指示的。因为遍历算法访问内部节点比访问叶节点更频繁,所以处理叶中而不是内部节点中的扩展实质上减少了用于检查扩展的操作数量。在菱形18中,进行检查,确定节点是否具有64位扩展。如果否,则可进行常规的叶处理。如果是,则处理64位扩展,如框20所指示的,然后该流程可继续,如同框16处的叶处理操作或框14处的内部节点处理。在图6所示的流程的每次遍历期间,在每个遍历步骤处执行叶/内部节点测试12,且分支取决于其结果。将零作为叶指示符允许在分支前将测试减少到恰好一个指令以及节点,0x03
jz处理叶为了处理所得到的树尺寸的不可预测性,构造算法可按照连续区域来分配存储器。如图7所示,在框22,一区域最初被分配在可在诸如固件之类的硬件或软件中实现、作为一系列计算机可执行指令而被存储在计算机可读存储介质中的序列中。然后在菱形24,进行检查,确定该区域何时满。如果该区域满了,则在框26中分配连续区域。该算法在其当前区域中继续构造,直到当前区域为满,然后从存储器分配系统请求新区域。所构造的树的大的连接区域(区域k、k+l和j)位于每个区域中,如图5所指示的。结果,每个区域包含子树。在该示例中,当子树长得比区域k大时,分配连续的区域k+1。这些子树之间的连结数可相对较小,在一个实施例中,小于连结总数的百分之一。因此,指向位于另一个存储区域中的子节点的节点数较小。例如,典型的存储区域尺寸小于4千兆字节。所以当树被分成子树,且每个子树位 于连续区域中时,节点可使用32位偏移来参考相同区域(例如,区域k和/或k+1)内的子节点。在一个实施例中,64位偏移仅用于在另一个存储区域中具有子节点定位(例如,当父节点在区域j中时子节点在区域k中)的节点。因为这种节点的数量小,它们可被编码为32位节点的扩展。结果,该树可被存储为32位树,且以64位偏移扩展小部分节点。如果节点具有64位偏移,则将指示符与节点数据一起存储在轴30中。为了避免在每个遍历步骤处测试64位扩展指示符,在一个实施例中,在图2中以零值将扩展节点存储在轴30中。因此,在这一实施例中,零可指示该节点是叶。然后可修改图6中的遍历算法以测试64位扩展,但仅当内部节点测试未通过时。因此,任何64位扩展节点是特殊类型的叶。因为与遍历到内部节点的可能性相比,遍历到叶的可能性非常小,所以在一些实施例中仅在很少部分的遍历步骤中执行附加的64位扩展测试。真实叶节点的第二个四字节字在该叶处存储若干图元,所以该值可大于或等于零。图元计数器中的负值指示该叶是特殊的且它是64位扩展节点。在一个实施例中,以自上而下的方式构造树,从父节点至子节点。当以多个线程的方式构造树时,每个线程构成子树。因此,不同的线程可形成父节点和子节点。所以当形成父节点时,到子节点的偏移可能是未知的。该事实可防止将下一个64位偏移数据分配给节点。在一个实施例中,如图4所示,64位扩展节点数据可存储在特殊的表中,例如在ext字段64中。在一些情况下,该64位扩展节点数据是实际的64位偏移66,实际的叶/轴68和实际的计数/分裂字段70。参考图1,在内部节点的情况下,节点数据的第二个4字节字32作为分裂面沿轴的位置来处理,其中所述轴在30处被编码,该浮点值被称为SPLIT。在叶节点的情况下,图2中示出的节点数据的第二字38作为图元(例如三角形)的计数来处理,称为整数值COUNTER。在64位扩展的情况下,COUNTER小于0且它对包含实际的节点数据的表和索引进行编码。在图4中(实际的节点数据),如果节点72是叶,则70作为该叶中图元的计数来处理。如果节点72是内部节点,则70作为分裂面位置来处理。所以,表中存储的扩展节点的编码原理与主数据结构中的相同,但第一字是64位(8字节)用以处理64位偏移。ext字段64可对负索引58进行编码,其中该索引是表52中的条目72。ext字段64还存储-(tbl+1)值56,其中tbl的值是表52的编号。如果-(tbl+1)值56位于区域j (图5)中,则64位偏移66就可参考区域k中的子节点42、44。作为示例,多线程环境中每个构造线程可形成其自身的64位节点表48、52或54。所以,在一些实施例中,用于更新表的线程之间没有竞争。如果表变为满,则相应的线程仅由于再分配和数据复制而增加了其尺寸。因为表可以较小,所以它不会影响构造性能。在一个实施例中,存储或传输位于多个存储区域中的树可涉及对交叉区域偏移的压缩和再分配。因为64位节点表可在从属节点上存储信息且这些从属节点恰好是具有交叉区域参考的节点,因此压缩操作可仅涉及对表中存在的节点进行表扫描和更新,而不是对所有树节点进行扫描和更新。因此,在一些实施例中,仅用两位对以下两者进行编码1)叶以及2)内部节点指示符和分裂面取向。两个最低有效位可用于叶/节点指示符,允许支持负偏移,这有助于实现多线程的构造。在一些实施例中,由于用这两个最低有效位对信息进行特殊编码,所以可 以进行单指令的叶/节点测试。在一些实施例中,存储器可被分配用于多个区域的树节点, 而不是来自单个连续阵列。因此,在一些实施例中,仅在需要时使用64位偏移,而将所有其它偏移存储为32位格式。特殊的表用于存储具有64位偏移的节点。最后,64位节点可被处理为特殊类型的叶。图8中示出的计算机系统130可包括硬驱动器134和的可卸式介质136,它们通过总线104耦合到芯片组核逻辑110。在一个实施例中,核逻辑可(通过总线105)耦合到图形处理器112,并耦合到主处理器100。图形处理器112还可通过总线106耦合到帧缓冲器114。帧缓冲器可通过总线107耦合到显示屏118,又通过总线108耦合到常规组件,诸如键盘或鼠标120。在软件实现的情况下,相关代码可存储在任何适当的半导体存储器、磁存储器或光存储器中,包括主存储器132。因此,在一个实施例中,代码139可存储在机器可读介质中,诸如主存储器132,以便由诸如处理器100或图形处理器112之类的处理器来执行。在软件实施例中,例如,图6和7所示的序列可以是图形处理器112的一部分。然而,序列还可在如139所指示的存储在主存储器中的软件中实现。当然,该软件可驻留在图形处理器112或任意其它存储设备上。本文中所描述的图形处理技术可用各种硬件架构来实现。例如,图形功能可整合在芯片组内。作为替换,可使用分立的图形处理器。作为又一实施例,图形功能可由通用处理器(包括多核处理器)来实现。贯穿本说明书引述的“一个实施例”或“一实施例”意指结合该实施例描述的特定特征、结构或特性被包含在本发明内所涵盖的至少一个实现方式中。由此,短语“一个实施例”或“一实施例”的出现不一定引述同一实施例。此外,所述特定特征、结构或特性可被设立成除了所示特定实施例以外的其他合适形式,且所有此类形式可被涵盖在本申请的权利要求书内。尽管本发明已针对有限数量的实施例作了描述,然而本领域技术人员将会从其中领会到许多修改和变型。所附权利要求旨在覆盖所有这样的修改和变型,只要其落在本发明的真实精神和范围内。
权利要求
1.ー种方法,包括 利用32位格式建立用于图形处理的分层加速结构;以及 仅在需要64位偏移时使用64位偏移。
2.如权利要求I所述的方法,其特征在于,用于建立分层加速结构的步骤包括建立k-d树。
3.如权利要求I所述的方法,其特征在于,包括将节点存储在两个四字节字中。
4.如权利要求3所述的方法,其特征在于,包括存储自一字起的偏移。
5.如权利要求4所述的方法,其特征在于,所述节点是叶,存储到图元索引阵列的第一字节的偏移。
6.如权利要求4所述的方法,其特征在于,包括存储到子节点的第一字节的偏移。
7.如权利要求I所述的方法,其特征在于,包括随同一父节点至少存储两个子节点。
8.如权利要求I所述的方法,其特征在干,使用位组对与X、y或z轴对应的分裂面位置进行编码。
9.如权利要求8所述的方法,其特征在干,包括使用所述位组来指示节点是否是叶节点。
10.如权利要求I所述的方法,其特征在于,包括确定节点是叶节点还是64位扩展。
11.如权利要求10所述的方法,其特征在于,仅当内部节点测试未通过时,测试64位扩展。
12.如权利要求I所述的方法,其特征在于,包括按照连续区域分配存储器。
13.一种存储指令的计算机可读介质,所述指令由计算机执行以 建立用于图形处理器的分层加速结构;以及 仅当内部节点测试未通过时,测试64位扩展。
14.如权利要求13所述的介质,其特征在于,还存储仅当需要64位扩展时才使用64位扩展的指令。
15.如权利要求13所述的介质,其特征在于,还存储通过建立k-d树来建立分层树的指令。
16.如权利要求13所述的介质,其特征在于,还存储将节点存储在两个四字节字中的指令。
17.如权利要求16所述的介质,其特征在于,还存储用于存储自一字起的偏移的指令。
18.如权利要求17所述的介质,其特征在于,还存储当所述节点是叶时,存储到图元索引阵列的第一字节的偏移的指令。
19.如权利要求18所述的介质,其特征在于,还存储用于存储到子节点的第一字节的偏移的指令。
20.如权利要求13所述的介质,其特征在干,还存储用于随同一父节点至少存储两个子节点的指令。
21.如权利要求13所述的介质,其特征在于,还存储使用位组对与X、y或z轴对应的分裂面位置进行编码的指令。
22.如权利要求21所述的介质,其特征在干,还存储使用所述位组来指示节点是否是叶节点的指令。
23.如权利要求13所述的介质,其特征在于,还存储确定节点是叶节点还是64位扩展的指令。
24.如权利要求23所述的介质,其特征在于,还存储按照连续区域分配存储器的指令。
25.ー种装置,包括 图形处理器,用于用32位格式建立分层加速结构并且仅当需要64位偏移时使用64位偏移;以及 耦合至所述处理器的存储器。
26.如权利要求25所述的装置,其特征在于,所述分层加速结构包括k-d树。
27.如权利要求25所述的装置,其特征在于,仅当内部节点测试未通过时,所述图形处理器才测试64位扩展。
28.如权利要求25所述的装置,其特征在于,所述图形处理器按照连续区域分配存储器。
29.如权利要求25所述的装置,其特征在于,所述图形处理器使用位组来指示节点是否是叶节点。
30.如权利要求29所述的装置,其特征在于,所述图形处理器确定节点是叶节点还是64位扩展。
全文摘要
利用32位格式建立用于图形处理的分层加速结构。在一个实施例中,加速结构可以是k-d树,但也可使用其它加速结构。仅在需要64位偏移时使用64位偏移。
文档编号G06T5/00GK102696055SQ200980163256
公开日2012年9月26日 申请日期2009年10月30日 优先权日2009年10月30日
发明者A·M·索皮科夫, A·V·瑞斯特夫, M·Y·谢伏特索夫 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1