CN117152279A - 用于渲染系统中的子图元存在指示的压缩和解压缩 - Google Patents
用于渲染系统中的子图元存在指示的压缩和解压缩 Download PDFInfo
- Publication number
- CN117152279A CN117152279A CN202310610047.9A CN202310610047A CN117152279A CN 117152279 A CN117152279 A CN 117152279A CN 202310610047 A CN202310610047 A CN 202310610047A CN 117152279 A CN117152279 A CN 117152279A
- Authority
- CN
- China
- Prior art keywords
- patches
- sub
- primitive
- block
- patch
- 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
Links
- 238000007906 compression Methods 0.000 title claims abstract description 77
- 230000006835 compression Effects 0.000 title claims abstract description 77
- 238000009877 rendering Methods 0.000 title claims abstract description 29
- 230000006837 decompression Effects 0.000 title abstract description 58
- 238000000034 method Methods 0.000 claims abstract description 79
- 238000004519 manufacturing process Methods 0.000 claims description 45
- 238000003860 storage Methods 0.000 claims description 11
- 238000012360 testing method Methods 0.000 abstract description 59
- 238000012545 processing Methods 0.000 description 30
- 230000008569 process Effects 0.000 description 22
- 230000001133 acceleration Effects 0.000 description 18
- 238000010586 diagram Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 6
- 230000006872 improvement Effects 0.000 description 5
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 4
- 230000012447 hatching Effects 0.000 description 4
- 238000005070 sampling Methods 0.000 description 4
- 229910052710 silicon Inorganic materials 0.000 description 4
- 239000010703 silicon Substances 0.000 description 4
- 238000010998 test method Methods 0.000 description 4
- 238000013528 artificial neural network Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000007781 pre-processing Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000002194 synthesizing effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000012993 chemical processing Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000001125 extrusion Methods 0.000 description 1
- 230000002068 genetic effect Effects 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000000206 photolithography Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000005389 semiconductor device fabrication Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-tracing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/80—Shading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T9/00—Image coding
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Multimedia (AREA)
- Image Generation (AREA)
Abstract
本申请涉及用于渲染系统中的子图元存在指示的压缩和解压缩。提供了一种将用于渲染系统中的相交测试中的子图元存在指示块压缩到压缩数据块中的方法和压缩单元。获得表示该子图元存在指示块中的存在指示的有序面片集。该面片集中的面片中的至少两个面片彼此部分地重叠。定义该面片集中的该面片的数据存储在该压缩数据块中。定义该面片中的每个面片的该数据定义该面片的存在状态和该面片在该子图元存在指示块中的位置。
Description
相关申请的相交引用
本申请要求2022年5月30日提交的英国专利申请2207940.4和2207945.3的优先权,该专利申请以引用方式全文并入本文中。
技术领域
本公开涉及压缩和/或解压缩用于诸如光线跟踪系统的渲染系统中的子图元存在指示的技术。
背景技术
渲染系统可以用来生成场景的图像。两种常见的渲染技术是光线跟踪和光栅化。具体而言,光线跟踪是一种计算渲染技术,该技术用于通过通常从相机的视角在场景中跟踪光路(‘光线’)来生成场景(例如,3D场景)的图像。每条光线被建模为源自相机,并通过像素进入场景。当光线横越场景时,其可能与场景内的物体相交。可对光线和其相交的物体之间的相交建模以创建逼真的视觉效果。例如,响应于确定光线与物体相交,可以针对相交执行着色器程序(即,计算机代码的一部分)。程序员可以编写着色器程序以定义系统如何对相交(所述相交例如可能导致向场景中发射一个或多个二次光线)作出反应,例如,以表示光线从相交物体的反射或光线通过物体的折射(例如,如果物体是透明或半透明的)。作为另一个示例,着色器程序可以使一条或多条光线发射到场景中,以用于确定物体是否处于交点处的阴影中。执行着色器程序(和处理相关的二次光线)的结果可以是计算光线穿过的像素的颜色值。
使用光线跟踪渲染场景的图像可以涉及执行许多相交测试,例如执行数十亿个相交测试以渲染场景的图像。为了减少需要执行的相交测试的数量,光线跟踪系统可以生成加速结构,其中加速结构的每个节点表示场景内的区域。加速结构通常是分层的(例如,具有树结构),使得其包含多个级别的节点,其中靠近加速结构的顶部的节点表示场景中相对大的区域(例如,根节点可以表示整个场景),靠近加速结构的底部的节点表示场景中相对小的区域。加速结构的叶节点表示场景中包围至少一个图元或图元的一部分的区域,并且具有指向被包围的图元的指针。
可以使用加速结构,通过首先测试光线与加速结构的根节点的相交(例如,以递归方式)对光线执行相交测试。如果发现光线与父节点(例如,根节点)相交,则测试可以进行到所述父节点的子节点。相比之下,如果发现光线不与父节点相交,则可以避免对该父节点的子节点的相交测试,从而节省计算工作量。如果发现光线与叶节点相交,则可针对由叶节点表示的区域内的物体对光线进行测试,从而确定光线与哪个(些)物体相交。可以使用“图元”来表示对象。图元表示系统中的几何单位,并且例如可以是凸多边形。图元通常是三角形,但是它们也可以是其他形状,例如矩形(术语“矩形”在本文用于包括“正方形”)、五边形、六边形、或非平面形状,诸如球形或双三次曲面面片,或者具有弯曲边缘等。
图元通常是简单的几何形状,以便于进行相交测试来确定光线是否与图元相交。然而,图元可以用来表示更复杂的形状。例如,可以将纹理(例如,2D图像或3D体积)应用于图元,其中该纹理可以具有确定图元上不同位置处的不透明度的阿尔法值,例如最大采样阿尔法值(例如,对于8位阿尔法值为255的值)意味着图元在采样位置处完全不透明,而最小采样阿尔法值(例如,为0的值)意味着图元在采样位置处完全透明。最小阿尔法值与最大阿尔法值之间的值可以表示部分不透明度。出于光线跟踪系统中相交测试的目的,如果光线在图元完全透明的位置(即,在阿尔法值为零的位置)处与图元相交,则该相交不被接受,即光线直接穿过图元。以这种方式,将阿尔法值设定为零可以用于表示图元中的孔,即图元上就相交测试过程而言‘不存在’的位置。对于中间阿尔法值,系统可以选择对图元后方的对象和阴影表面本身进行加权求和,或者可能使用阈值,在本领域中通常称为阿尔法测试。包括不存在区域的纹理可被称为“穿通纹理”、“阿尔法测试纹理”或“蒙版纹理”,并且这些纹理所应用于的图元可被称为“穿通图元”、“阿尔法测试透明图元”或“蒙版图元”。穿通图元可用于用少量图元表示其中具有复杂周边或许多孔的几何形状,诸如树叶和铁丝网。
请注意,‘纹理’不一定是实际的图像,它可能是‘动态’计算的。这种计算可以通过执行‘着色器’程序来完成。因此,‘检查纹理’也可以理解为包括这些计算方法。
图1示出共享一条边以形成四边形的两个三角形图元1021和1022的示例。表示叶子的纹理被应用于该两个图元。纹理具有一些完全透明的区域(例如,104),使得该区域出于相交测试的目的而不存在。纹理还具有一些不透明的区域(例如,106)(例如,它们是不透明的),使得该区域出于相交测试的目的而存在。最后,可能有部分透明的少量区域(例如,沿着区域104与106之间的边界)可以用例如前面提到的用于‘中间阿尔法’值的两种方法来处理。不同的光线跟踪系统对于寻找光线与部分透明区域的相交可能有不同的反应,例如,该相交可以被视为命中、未命中或被视为部分命中。作为部分命中的结果,可以产生一条或多条附加光线。
当相交测试过程发现光线与穿通图元相交时,则可以停止针对光线的相交测试过程,同时在可编程执行单元上执行着色器程序,以确定图元是否出现在光线与图元相交的交点处。图元在交点处的存在通常由映射到图元上的纹理的阿尔法通道来确定。在相交测试过程(其可以在固定功能硬件中实施)与着色器程序(其在可编程执行单元上执行)之间的传递给光线跟踪系统引入了延迟。举例来说,当着色器程序在可编程执行单元上执行以确定在交点处存在图元时,实施相交测试过程的固定功能硬件可能会停止数千个时钟周期。因此,减少需要执行着色器程序以确定在交点处存在穿通图元的次数将显著提高光线跟踪系统的性能。在不增加用于表示几何图形的图元的数量的情况下,减少需要执行着色器程序以确定在交点处存在穿通图元的次数将是特别有益的,因为增加图元的数量将增加光线跟踪系统中的处理成本,例如渲染、模拟和更新加速结构的处理成本。
由Holger Gruen、Carsten Benthin和Sven Woop撰写的名为“Sub-triangleopacity masks for faster ray tracing of transparent objects”的论文(Proceedings of the ACM on Computer Graphics and Interactive Techniques,第3卷,第2期,文章编号:18)提出了使用子三角形不透明蒙版用于阿尔法测试的透明图元的光线跟踪。每个三角形图元被细分成一组大小一致的子图元。举例来说,图2示出三角形图元202,该三角形图元被细分成64个大小一致的子图元,标记为0到63。三角形图元202的三个顶点的重心坐标被标记为b=0,0,1、b=0,1,0和b=1,0,0。三角形图元202内的任何位置都可以用重心坐标唯一地标识,从而指示该位置在子图元(0到63)中的哪个子图元内。对于每个子图元(0到63),在预处理步骤中进行评估以确定子图元存在指示,该子图元存在指示指示子图元中的每个子图元是:(i)完全存在、(ii)完全不存在,还是(iii)部分存在的。如果子图元部分存在,则将需要例如通过执行着色器程序来检查纹理,以确定子图元内的特定点是存在还是不存在。这个预处理步骤可以由应用编程接口(API)来执行,或者作为例如由用户创建图元和纹理的过程的一部分来执行。子图元存在指示中的每个子图元存在指示由2个位表示,以指示三种存在状态中的一种存在状态:(i)完全存在、(ii)完全不存在,或(iii)部分存在。“部分存在”状态可以被称为“检查纹理”状态,因为通过检查纹理,即通过执行着色器程序,来确定部分存在的子图元内的位置处的存在。
当在光线与图元之间找到相交时,可以查询存在指示,以便确定是否接受该相交。图元内相交的位置(例如,用重心坐标表示)用于识别交点位于其内的子图元。如果针对所识别子图元的存在指示指示该子图元完全存在或完全不存在,则相交测试过程可以继续进行相交测试,而不需要执行着色器程序以确定该图元在交点处的存在。然而,如果所识别的子图元的存在指示指示子图元部分存在,则通过执行着色器程序来检查纹理,以确定在交点处存在图元。
存在指示的使用减少了需要执行着色器程序来检查纹理以确定在交点处存在图元从而确定是否接受相交的次数。换句话说,存在指示用于确定图元的完全不存在和完全存在的区域,从而减少需要执行阿尔法测试的次数,从而在可能的情况下跳过更昂贵的阿尔法测试操作。就等待时间和功耗而言,阿尔法测试(即运行着色器程序来检查交点处纹理的阿尔法值)是昂贵的操作。
如果图元被细分成K个子图元,则2K个位用于该图元的存在指示,并且这些位将在相交测试过程中与该图元的其余图元数据包括在一起。在图2所示的示例中,K是64,因此128个位用于图元202的存在指示。这是用于描述图元的图元数据量的显著增加。
此外,英国专利GB2538856B和GB2522868B描述了一种光栅化渲染技术,其中不透明度状态图用于指示纹理的纹理像素块是完全不透明、完全透明、部分透明还是这些状态的混合。不透明度状态图中的指示可用于加速光栅化系统中穿通图元的处理。类似于上文参考光线跟踪系统所描述的存在指示,GB2538856B和GB2522868B的光栅化系统中的不透明度状态中的每种不透明度状态用两个位来表示。
发明内容
提供本发明内容是为了以简化形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用以限制所要求保护的主题的范围。
提供了一种将用于渲染系统中(例如,用于渲染系统中的相交测试中)的子图元存在指示块压缩到压缩数据块中的方法,所述方法包括:
获得表示所述子图元存在指示块中的存在指示的有序面片集,其中所述面片集中的所述面片中的至少两个面片彼此部分地重叠;以及
在所述压缩数据块中存储定义所述面片集中的所述面片的数据,
其中定义所述面片中的每个面片的所述数据定义所述面片的存在状态和所述面片在所述子图元存在指示块中的位置。
每个面片可以覆盖多个子图元存在指示。
定义所述面片中的每个面片的所述数据可以进一步定义所述面片在所述子图元存在指示块内的形状。
可以有2B个预定形状,并且可以使用B个位来指示所述预定形状中的一个预定形状以定义所述面片中的每个面片的所述形状。B可以是1。
所述预定形状可以包括:(i)与所述子图元存在指示块的轴对齐的矩形,以及(ii)相对于所述子图元存在指示块的所述轴旋转45度的矩形。
所述预定形状可以包括以下各项中的一项或多项:圆形、椭圆形,以及相对于所述子图元存在指示块的所述轴旋转除45度以外的角度的矩形。
定义所述面片的所述数据可以以与所述有序面片集的排序一致的顺序存储在所述压缩数据块中。
定义所述面片中的每个面片的所述数据可以进一步定义所述面片在所述子图元存在指示块内的大小。
定义所述面片中的每个面片的所述数据可以通过定义所述面片在一个或多个方向上的一个或多个宽度来定义所述面片的所述大小。
定义所述面片中的每个面片的所述数据可以通过定义所述面片的中心在所述子图元存在指示块内的位置来定义所述面片的所述位置。
定义所述面片中的每个面片的所述数据可以通过定义所述面片在所述子图元存在指示块内的最小x和y坐标和最大x和y坐标来定义所述面片的所述位置和所述大小。
所述方法可以还包括在所述压缩数据块中存储定义所述子图元存在指示块的背景存在状态的数据。
所述存在状态中的每种存在状态可以是以下各项中的一项:(i)完全存在、(ii)完全不存在,或(iii)部分存在。
可以使用2个位来定义所述面片中的每个面片的所述存在状态。
所述存在指示块可以是2Nx2N子图元存在指示块,所述面片集中可以有P个面片,所述面片中的每个面片的所述中心的位置可以由两个坐标定义,所述两个坐标各自由(N+1)个位表示,所述面片中的每个面片在两个方向上的宽度可以各自由N个位定义,所述面片中的每个面片的形状可以由B个位指示为是2B个预定形状中的一个预定形状,可以使用M个位来指示所述面片中的每个面片的存在状态和背景的存在状态,并且存储在所述压缩数据块中以表示所述子图元存在指示块的位数可以是(M+B+4N+2)P+M。
作为一个示例,M=2、B=1、N=4并且P=8,使得可以将170个位存储在所述压缩数据块中以表示16×16子图元存在指示块。
作为另一个示例,M=2、B=1、N=4并且P=6,使得可以将128个位存储在所述压缩数据块中以表示16×16子图元存在指示块。
子图元可以是矩形或三角形。
该方法可以还包括存储压缩数据块。
所述渲染系统可以是光线跟踪系统或光栅化系统。
提供一种被配置为将用于渲染系统中(例如,用于渲染系统中的相交测试中)的子图元存在指示块压缩到压缩数据块中的压缩单元,所述压缩单元被配置为:
获得表示所述子图元存在指示块中的存在指示的有序面片集,其中所述面片集中的所述面片中的至少两个面片彼此部分重叠;并且
在所述压缩数据块中存储定义所述面片集中的所述面片的数据,
其中定义所述面片中的每个面片的所述数据定义所述面片的存在状态和所述面片在所述子图元存在指示块中的位置。
可以提供一种压缩单元,该压缩单元被配置为执行本文所描述的压缩方法中的任一种压缩方法。
可以提供一种对压缩数据进行解压缩以确定用于渲染系统中(例如,用于渲染系统中的相交测试中)的子图元存在指示的方法,该方法包括:
接收用于子图元存在指示块的压缩数据块;
接收子图元存在指示块内的样本位置的指示,针对该样本位置将确定存在指示;
从压缩数据块中读取定义有序面片集的数据,该有序面片集表示子图元存在指示块中的存在指示,其中定义面片中的每个面片的数据定义面片的存在状态和面片在子图元存在指示块内的位置,其中面片集中的面片中的至少两个面片彼此部分地重叠;
针对面片中的一个或多个面片,确定样本位置是否在该面片内;以及
针对面片中的一个或多个面片,基于所述确定样本位置是否在该面片内的结果来确定样本位置处的存在指示。
可以提供一种被配置为对压缩数据进行解压缩以确定用于渲染系统中(例如,用于渲染系统中的相交测试中)的子图元存在指示的解压缩单元,该解压缩单元被配置为:
接收用于子图元存在指示块的压缩数据块;
接收子图元存在指示块内的样本位置的指示,针对该样本位置将确定存在指示;
从压缩数据块中读取定义有序面片集的数据,该有序面片集表示子图元存在指示块中的存在指示,其中定义面片中的每个面片的数据定义面片的存在状态和面片在子图元存在指示块内的位置,其中面片集中的面片中的至少两个面片彼此部分地重叠;
针对面片中的一个或多个面片,确定样本位置是否在该面片内;以及
针对面片中的一个或多个面片,基于所述确定样本位置是否在该面片内的结果来确定样本位置处的存在指示。
该压缩单元或解压缩单元可在集成电路上的硬件中体现。可以提供一种在集成电路制造系统处制造压缩单元或解压缩单元的方法。可以提供一种集成电路定义数据集,该集成电路定义数据集当在集成电路制造系统中被处理时将该系统配置为制造压缩单元或解压缩单元。可以提供一种非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质上存储有压缩单元或解压缩单元的计算机可读描述,该计算机可读描述当在集成电路制造系统中被处理时使得该集成电路制造系统制造体现压缩单元或解压缩单元的集成电路。
可以提供一种集成电路制造系统,该集成电路制造系统包括:非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质上存储有压缩单元或解压缩单元的计算机可读描述;布局处理系统,该布局处理系统被配置为处理该计算机可读描述,以便生成体现该压缩单元或该解压缩单元的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置为根据该电路布局描述来制造该压缩单元或该解压缩单元。
可以提供一种用于执行本文所描述的方法中的任一种方法的计算机程序代码。可以提供非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质上存储有计算机可读指令,该计算机可读指令当在计算机系统处被执行时使得该计算机系统执行本文所描述的方法中的任一种方法。
如对本领域的技术人员将显而易见,上述特征可以适当地组合,并且可与本文中所描述的示例的各方面中的任一方面进行组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1示出了应用于形成四边形的两个图元的穿通纹理;
图2示出了被细分成64个子图元的三角形图元;
图3示出了根据本文中所描述的示例的光线跟踪系统;
图4是将子图元存在指示块压缩到压缩数据块中的方法的流程图;
图5图示了压缩数据块的示例;
图6a示出了部分存在的对象;
图6b示出了用于图6a所示对象的存在指示块,该存在指示块包括以16×16排列的256个存在指示;
图6c示出了用于对图6b所示的块中的存在指示进行编码的第一面片;
图6d示出了用于对图6b所示的块中的存在指示进行编码的第一和第二面片;
图6e示出了用于对图6b所示的块中的存在指示进行编码的第一、第二和第三面片;
图6f示出了用于对图6b所示的块中的存在指示进行编码的第一到第四面片;
图6g示出了用于对图6b所示的块中的存在指示进行编码的第一到第五面片;
图6h示出了用于对图6b所示的块中的存在指示进行编码的第一到第六面片;
图6i示出了用于对图6b所示的块中的存在指示进行编码的第一到第七面片;
图6j示出了用于对图6b所示的块中的存在指示进行编码的第一到第八面片;
图6k示出了图6b所示的存在指示以供参考;
图7是对压缩数据进行解压缩以确定用于相交测试中的子图元存在指示的方法的流程图;
图8示出了解压缩单元内用于对压缩数据进行解压缩以确定图6a所示对象的子图元存在指示的逻辑;
图9示出了在其中实施压缩单元和/或解压缩单元的计算机系统;以及
图10示出了用于生成体现压缩单元或解压缩单元的集成电路的集成电路制造系统。
附图示出了各种示例。技术人员将了解,附图中所示出的元件边界(例如框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
借助于示例呈现以下描述,以使得本领域的技术人员能够制造和使用本发明。本发明不限于本文中所描述的实施方案,并且对所公开实施方案的各种修改对于本领域的技术人员将是明显的。
现在将仅借助于示例来描述实施方案。在本公开中,子图元存在指示代表对应子图元的存在状态。
在上述背景技术部分中描述的光线跟踪系统中,存在指示中的每个存在指示用2个位存储,使得如果图元被细分成K个子图元,则2K个位用于该图元的存在指示。减少用于表示存在指示的数据量在减少存储存在指示所需的存储量和减少在光线跟踪系统中不同部件之间传输的数据量方面是有益的。因此,用于表示存在指示的数据量的减少可以减少光线跟踪系统的等待时间、功耗和硅面积。
作为如何压缩存在指示的一个简单示例,应当注意,针对每个存在指示使用两个位来指示三种存在状态(完全存在、完全不存在或部分存在)中的一种存在状态,因此如果我们组合多个子图元的存在信息,则一组子图元的存在指示可以用每子图元少于平均2个位来表示。作为一个示例,一组5个子图元(即存在状态的35=243种可能的组合)的存在指示可以存储在8个位中(即28=256种可能的编码)。在这个简单的示例中,如果图元被细分成K个子图元,则大约1.6K个位被用于该图元的存在指示。2K个位到1.6K个位的压缩表示80%的压缩比,其中压缩比被定义为压缩数据的大小除以未压缩数据的大小。更大程度地压缩数据会产生更小的压缩比。
在下文所描述的示例中,描述了压缩和解压缩技术,与上文所描述的简单示例相比,这些技术可以更大程度地压缩存在指示(即,实现更低的压缩比)。
注意,与只有“完全存在”和“完全不存在”状态的简单方案相比,具有三种状态从质量角度来看是有吸引力的,因为两状态系统可能会导致可见的混叠(即锯齿状边缘),除非使用极高分辨率并因而是存储器密集型的蒙版。此外,虽然两状态方案可能从不必运行着色器来“检查纹理”中受益,但这也意味着确实需要部分透明度的一些用例(例如,对彩色玻璃窗建模)将是次优的。尽管如此,本领域的技术人员可以将下文所描述的在其中使用面片编码方法的示例适用于只有两种状态的系统。
图3示出了包括光线跟踪单元302和存储器304的光线跟踪系统300。光线跟踪系统300还包括几何数据源303和光线数据源305。光线跟踪单元302包括处理模块306、相交测试模块308和处理逻辑310。相交测试模块308包括一个或多个框相交测试单元312、一个或多个图元相交测试单元314和解压缩单元318。几何数据源包括压缩单元316。在操作中,光线跟踪单元302从几何数据源303接收定义3D场景内的对象的几何数据。光线跟踪单元302还从光线数据源305接收光线数据,该光线数据定义了将针对相交进行测试的光线。光线可以是一次光线或二次光线。处理模块306被配置为基于几何数据生成加速结构,并且将加速结构发送至存储器304以存储于其中。在加速结构已被存储在存储器304中之后,相交测试模块308可以从存储器304检索加速结构的节点(例如,包括定义对应于节点的轴对齐框的数据)以针对所检索的节点执行光线相交测试。框相交测试单元312执行相交测试以确定光线是否与对应于加速结构的节点的边界框中的每个边界框相交(其中未命中可以剔除大片的分层加速结构)。如果确定叶节点相交,则图元相交测试单元314执行一个或多个图元相交测试以确定光线与哪个(些)物体(如果存在)相交。在这个示例中,图元是三角形或成对的三角形,但注意到,在其他示例中,图元可以是其他形状,例如其他凸平面多边形,诸如矩形(其包括正方形)、五边形、六边形等。相交测试的结果指示光线与场景中的哪个图元相交,并且该结果还可以指示其他相交数据,诸如对象上光线与对象相交的位置(例如,根据重心坐标来定义),并且还可以指示相交发生时沿着光线的距离,例如欧几里得(Euclidean)距离或者光线长度的(带符号)倍数。在一些情况下,相交确定可以基于沿发生相交的光线的距离是否在光线的最小裁剪距离与最大裁剪距离之间(其可被称为tmin和tmax)。将相交测试的结果提供给处理逻辑310。处理逻辑310被配置成处理相交测试的结果以确定表示3D场景的图像的渲染值。由处理逻辑310确定的渲染值可以传回到存储器304以存储在其中,以表示3D场景的图像。
在本文中描述的示例中,光线跟踪系统使用加速结构以便减少需要针对图元执行光线的相交测试的数量。然而,应注意,一些其他示例可能并不使用加速结构,并且可以简单地针对图元测试光线,而无需首先尝试减少需要使用加速结构执行的相交测试的数量。
当相交测试模块308的图元相交测试单元314确定光线与具有部分存在的图元相交时,则通常相交测试模块308将需要停止,同时在处理逻辑310上执行着色器程序以解决在交点处存在图元。这些停止中的一些停止可以通过使用如本文所描述的子图元存在指示来避免。
在下文所描述的示例中,使用面片编码方法来执行子图元存在指示的压缩和解压缩,该面片编码方法是一种可能有损的压缩方法。在这种方法中,子图元存在指示块被压缩到压缩数据块中以用于光线跟踪系统中的相交测试。发明人已经意识到,因为图元表示物理结构,所以存在指示的分布很少是随机的。具有特定存在状态的子图元通常紧挨着具有相同存在状态的子图元。存在状态的分布的这种顺序(即非随机性)可以被用来实现存在指示块的更好压缩。
注意,在图3所示的示例中,压缩单元316在几何数据源303中实施,但是在其他示例中,压缩单元316可以在与几何数据源303不同的部件中实施,并且在一些示例中,可以在光线跟踪单元302中实施,例如作为相交测试模块308的一部分。此外,在图3所示的示例中,解压缩单元318被实施为相交测试模块308的一部分,但是在其他示例中,它可以在除作为相交测试模块308的一部分之外的其他地方实施。
参考图4的流程图描述了将子图元存在指示块压缩到压缩数据块中的方法。此压缩由压缩单元316执行。图5示出了由执行图4所示的方法产生的压缩数据块500的示例。
在步骤S402中,压缩单元316接收要压缩的子图元存在指示块。例如,图6a示出了部分存在的对象602。在这个示例中,对象是树叶并由一对三角形图元表示,因为该对三角形图元共享一条边,所以形成了四边形。图6b示出了在压缩单元316处接收的对象的存在指示块604。该对象被分成以16x16正方形排列的256个子图元。在其他示例中,该块可以具有不同数量的子图元,并且该子图元可以被排列成其他形状(例如,矩形或三角形)。在图6b中,每个存在指示用三种阴影线中的一种阴影线来表示,以表示三种可能的存在状态中的一种可能的存在状态。具体而言,指示相应子图元完全存在的存在指示用深色阴影线表示;指示相应子图元完全不存在的存在指示用浅色阴影线表示;并且指示相应子图元部分存在的存在指示用中级阴影线表示。如上文所提及,在步骤S402中接收的存在指示可以在预处理步骤中被确定,该预处理步骤可以由应用编程接口(API)执行或者作为例如由用户创建图元和纹理的过程的一部分来执行。(未处理)子图元存在指示中的每个子图元存在指示由2个位表示,以指示三种存在状态中的一种存在状态:(i)完全存在、(ii)完全不存在,或(iii)部分存在。
在步骤S404中,压缩单元316确定表示子图元存在指示块中的存在指示的有序面片集。以这种方式,压缩单元316获得有序面片集。面片中的每个面片具有存在状态(例如,完全存在、完全不存在或部分存在)中的一种存在状态,并且面片中的每个面片在子图元存在指示块内具有可变位置。面片中的每个面片也可以具有可变的形状和/或大小。在本文所描述的示例中,面片中的每个面片覆盖子图元存在指示块内的多个存在指示。换句话说,面片中的每个面片覆盖多个子图元存在指示。还可以有子图元存在指示块的背景存在状态。
面片中的至少两个面片可以彼此部分地重叠。该面片可以被认为是不透明的,因此如果它们在特定位置彼此重叠,那么在该位置处的存在状态将仅由面片中的一个面片指示。在步骤S404中确定有序面片集的过程可以被认为是确定可以依次应用于背景存在状态以便在子图元存在指示块中建立存在指示的表示的面片序列。
参考图6b所示的示例,背景存在状态可以被设定为完全不存在(但在其他示例中,背景存在状态可以是完全存在或部分存在);具有部分存在的存在状态的一个或多个面片可以定位在存在指示块604内(例如,大约在中央),以覆盖在图6b中示出为部分存在的区域;并且具有完全存在的存在状态的一个或多个面片可以定位在存在指示块604内(例如,大约在中央),以覆盖在图6b中示出为完全存在的区域。
理想地,在步骤S404中确定的有序面片集将准确地表示子图元存在指示块中的存在指示。然而,为了提供良好的压缩水平(即,为了实现低压缩比),面片的数量及其形状的复杂性优选地较低。该集中的面片的数量可以至少比存在指示块中的存在指示的数量少一个数量级。举一些示例,该集中的面片的数量可以是4、5、6、7、8、10或16(但在其他示例中可以使用不同数量的面片)。此外,每个面片的形状可以选自一组预定形状(例如,选自一组两个预定形状,但是在其他示例中,该组预定形状中可以有不同数量的形状)。因此,用有序面片集精确地表示子图元存在指示块中的存在指示是不可能的。然而,在步骤S404中确定的有序面片集将与子图元存在指示块中的存在指示兼容。
如果有序面片集在存在指示块内具有指示存在状态B的存在指示的位置处指示存在状态A,则如果A=B,或者如果A是部分存在状态并且B是完全存在或完全不存在状态,则A与B兼容。由有序面片集将完全存在或完全不存在的存在状态表示为部分存在是可接受的,因为这不会导致相交测试过程中的渲染错误。实际上,这意味着相交测试过程将检查纹理,以确定图元在与子图元的交点处存在。因此,由于应用于存在指示的压缩的有损性质,已经失去了通过使用子图元指示来减少相交测试过程的等待时间的机会,但是不会出现渲染错误,所以这是可以接受的。将完全存在或部分存在的存在状态表示为完全不存在是不可接受的,或者将完全不存在或部分存在的存在状态表示为完全存在是不可接受的,因为这可能导致交叉测试过程中的渲染错误。
步骤S404可以通过估计合适的面片集,然后重复地对定义面片的数据进行小的(例如,随机的)调整来执行,以查看该面片集在其表示存在指示块方面是否可以改进。这个过程可以使用遗传算法或某一优化算法。步骤S404可以由压缩单元316完全自动地执行,或者用户可以向压缩单元316提供起始点(例如,合适的面片集的粗略近似),然后压缩单元316可以使用某种迭代优化技术来改进该起始点。神经网络可以用于步骤S404。
在上文给出的示例中,压缩单元316通过确定有序面片集来获得有序面片集。在其他示例中,压缩单元316可以通过接收已由某一实体(例如,由某一处理单元或由用户)确定的有序面片集来获得有序面片集。
在步骤S406中,压缩单元316在压缩数据块500中存储定义面片集中的面片的数据。定义该面片中的每个面片的该数据定义该面片的存在状态和该面片在该子图元存在指示块中的位置。
在一些示例中,面片中的每个面片可以具有相同的形状和大小,使得面片的形状和大小的指示不需要被包括在压缩数据块500中,但是在本文详细描述的示例中,面片可以具有不同的形状和/或大小,因此定义面片中的每个面片的数据可以进一步定义子图元存在指示块内的面片的形状和/或大小。
面片可以有一组预定形状。例如,如果面片可以有2B个预定形状,则压缩数据块中的面片的形状的指示可以具有B个位。例如,如果B=1,那么有两个预定形状。作为一个示例,预定形状可以包括:(i)与子图元存在指示块的轴对齐的矩形,以及(ii)相对于子图元存在指示块的轴旋转45度的矩形。在其他示例中,预定形状可以包括其他形状,例如圆形、椭圆形(具有预定对齐,例如与子图元存在指示块的轴对齐或相对于轴以某一预定角度对齐),或相对于子图元存在指示块的轴旋转除45度以外的角度的矩形。可以有多于两种预定形状,在这种情况下,B可以大于一。
存储在压缩数据块500中的定义面片中的每个面片的数据可以通过定义面片在一个或多个方向上的一个或多个宽度来定义面片的大小。如果面片的形状是正方形或圆形,那么单个宽度值就足以表示面片的大小。如果面片的形状是(非正方形)矩形或(非圆形)椭圆形,那么代表面片在不同方向上的宽度的两个宽度值(例如,矩形的长度和宽度,或者椭圆形的长轴长度和短轴长度)可以用来表示面片的大小。
存储在压缩数据块500中的定义面片中的每个面片的数据可以通过定义面片的中心在子图元存在指示块内的位置来例如用两个坐标定义面片的位置。
在一些示例中,存储在压缩数据块500中的定义面片中的每个面片的数据可以通过定义子图元存在指示块内的面片的最小和最大x和y坐标来定义面片的位置和大小,而不是存储面片的中心位置和面片的一个或多个宽度。
定义面片的数据以与有序面片集的排序一致的顺序存储在压缩数据块500中。如果面片中的两个或更多个面片与采样位置重叠,则有序面片集中面片的排序确定(在解压缩期间)将两个或更多个面片中的哪一个面片用于确定采样位置处的存在状态。
如上文所描述,在一些示例中,存在子图元存在指示块的背景存在状态,并且在这些示例中,定义子图元存在指示块的背景存在状态的数据存储在压缩数据块500中。然而,在其他示例中,可能没有背景存在状态。
在步骤S408中,压缩单元316输出压缩数据块500以供存储。压缩数据块500可以与例如几何数据源303中的图元的图元数据一起被存储。压缩数据块可以与图元的图元数据一起被传递到光线跟踪单元302,并且可以被存储在存储器304和/或相交测试模块308内的存储器中,以供图元相交测试单元314使用,作为执行光线相对于图元的相交测试的一部分。
图5示出了压缩数据块500的示例,该压缩数据块用于使用有序的P个面片的有序集来存储代表2Nx2N存在指示块的存在指示的数据。压缩数据块500包括背景存在状态502的指示,该背景存在状态具有M个位。如上文所描述,有三种存在状态(完全存在、完全不存在和部分存在),因此这些存在状态中的一种存在状态可以用2个位来指示。因此,作为一个示例,M可以是2。
在这个示例中,面片中的每个面片的位置可以用两个坐标(Cx和Cy)来表示,并且这些坐标可以各自用压缩数据块中的N+1个位来足够精确地表示。此外,在这个示例中,面片中的每个面片在两个方向上的宽度可以各自用N个位来表示。此外,在这个示例中,面片中的每个面片的形状用B个位表示为2B个预定形状中的一个预定形状。图5在压缩数据块中的每个字段上方示出了该字段中的位数。
图5示出了在这个示例中数据如何存储在压缩数据块500中,其中背景存在状态502用M个位存储。则对于P个面片(在图5中表示为面片1……面片P)中的每个面片,压缩数据块500包括:用M个位存储的面片的存在状态;定义面片的中心的两个坐标(Cx和Cy),每个坐标用N+1个位存储;定义面片在两个方向上的宽度的两个宽度指示(W1和W2),每个宽度用N个位存储;以及指示面片的来自一组2B个预定形状的形状的B位形状指示。因此,存储在压缩数据块500中以表示子图元存在指示块的位数是(M+B+4N+2)P+M。
作为第一示例,对于如图6b所示的16×16子图元存在指示块(即N=4),使用8个面片的有序集对存在指示进行编码(即P=8),并且在M=2和B=1的情况下,压缩数据块500将具有170个位。在压缩之前,存在指示块中的256个存在指示具有512个位(即2*256=512),因此这个第一示例提供了33%的压缩比。
作为第二示例,对于如图6b所示的16×16子图元存在指示块(即N=4),使用6个面片的有序集对存在指示进行编码(即P=6),并且在M=2和B=1的情况下,压缩数据块500将具有128个位。在压缩之前,存在指示块中的256个存在指示具有512个位,因此这个第二示例提供了25的压缩比。
图6c至图6h图示了如何使用六个面片对块604中的存在指示进行编码(在上文所提及的第二示例中)。图6a至图6j图示了如何使用八个面片对块604中的存在指示进行编码(在上文所提及的第一示例中)。原点(0,0)被取为整个块的中间,所提供的宽度值是全宽而不是半宽(如在本文所描述的其他示例中)。优先级是递增的,这意味着,例如,在面片6的值(表示为6066)重合面片1的值(表示为6061)的情况下,该面片6的值覆盖该面片1的值。
图6c示出了用于对图6b所示的块604中的存在指示进行编码的第一面片6061。面片6061是轴对齐的矩形,该面片具有由值Cx=0,Cy=0,表示的原点位置、由Wx=16,Wy=16给出的宽度,以及存在状态‘完全不存在’。
图6d示出了在第一面片的顶部上的第二面片6062。面片6062是相对于子图元存在指示块的轴旋转了45度的矩形,该面片具有由值Cx=-0.5,Cy=-0.5,表示的原点位置、由给出的宽度,以及存在状态‘部分存在’。
图6e示出了在第一和第二面片的顶部上的第三面片6063。面片6063是轴对齐的矩形,该面片具有由值Cx=-1.5,Cy=0,表示的原点位置、由Wx=5,Wy=10给出的宽度,以及存在状态‘完全存在’。
图6f示出了在第一到第三面片的顶部上的第四面片6064。面片6064是轴对齐的矩形,该面片具有由值Cx=-0.5,Cy=-0.5,表示的原点位置、由Wx=9,Wy=7给出的宽度,以及存在状态‘完全存在’。
图6g示出了在第一到第四面片的顶部上的第五面片6065。面片6065是轴对齐的矩形,该面片具有由值Cx=0,Cy=-1,表示的原点位置、由Wx=12,Wy=4给出的宽度,以及存在状态‘完全存在’。
图6h示出了在第一到第五面片的顶部上的第六面片6066。面片6066是轴对齐的矩形,该面片具有由值Cx=3,Cy=-7,表示的原点位置、由Wx=4,Wy=2给出的宽度,以及存在状态‘完全不存在’。
图6i示出了在第一到第六面片的顶部上的第七面片6067。面片6067是轴对齐的矩形,该面片具有由值Cx=-3.5,Cy=-7,表示的原点位置、由Wx=3,Wy=2给出的宽度,以及存在状态‘完全不存在’。
图6j示出了在第一到第七面片的顶部上的第八面片6068。面片6068是轴对齐的矩形,该面片具有由值Cx=2,Cy=-0.5,表示的原点位置、由Wx=2,Wy=9给出的宽度,以及存在状态‘完全存在’。
图6k示出了图6b所示的存在指示以供参考。图6h示出了用六个面片对存在指示进行编码的结果(如在上文所提及的第二示例中),并且通过比较图6h和图6k可以看出,这在块604中提供了存在指示的近似(但不完美)表示。图6j示出了用八个面片对存在指示进行编码的结果(如在上文所提及的第一示例中),并且通过比较图6j和图6k可以看出,这也在块604中提供了存在指示的近似(但不完美)表示。通过使用八个面片提供的表示(如在图6j中)比通过使用六个面片提供的表示(如在图6h中)更好地表示了块604。
这种压缩方案的优点在于它是固定长度的编码方案,即压缩数据块500具有固定长度。这与可能是可变长度编码方案的其他压缩方案形成对比,其中压缩数据具有可变长度。使用固定长度编码方案简化了解压缩单元318的实施方式,因为压缩数据块内不同字段之间的边界是已知的,即该边界不取决于存储在那些字段中的数据。
此外,对由压缩数据块表示的存在指示的随机访问是可能的(即,有可能确定存在指示块内的样本位置处的存在指示,而不必确定整个存在指示块的存在指示)。当在光线与图元之间找到相交时,随机访问对于确定交点处图元的存在是特别有用的,因为这允许根据压缩数据块确定在该点处存在图元,而不必解压缩其余图元的所有存在指示(该所有存在指示是不需要的)。
参考图7中的流程图描述了由解压缩单元318执行的对压缩数据进行解压缩以确定用于光线跟踪系统中的相交测试中的一个或多个子图元存在指示的方法。参考图7描述的解压缩过程易于实施,因此解压缩单元318的等待时间和功耗较低,并且如果解压缩单元在硬件中实施,则硅面积较小。
在步骤S702中,解压缩单元接收用于子图元存在指示块的压缩数据块。图8示出了压缩数据块800,该压缩数据块已经如上文给出的示例中所描述的那样被创建,并且该压缩数据块可以具有与图5所示的压缩数据块500相同的格式。如上文所描述,在这个示例中,压缩数据块800包括背景存在状态指示802和P个面片的面片数据(8041到804P)。
图8示出了解压缩单元318中的一些逻辑。具体而言,解压缩单元318包括用于P个面片中的每个面片的面片逻辑块(8081到808P),以及存在指示确定逻辑810。
在步骤S704中,解压缩单元318接收子图元存在指示块内的样本位置的指示,针对该样本位置将确定存在指示。具体而言,解压缩单元318在面片逻辑块8081到808P中的每一者处接收样本位置指示806。样本位置指示806可以包括两个坐标(x,y)以指示子图元存在指示块内的位置。
在步骤S706中,解压缩单元316的面片逻辑块8081到808P从压缩数据块800中读取定义有序面片集的数据,该有序面片集表示子图元存在指示块中的存在指示。如上文所描述,定义面片中的每个面片的数据至少定义面片的存在状态和面片在子图元存在指示块中的位置。面片集中的面片中的至少两个面片可以彼此部分地重叠。如上文所描述,定义面片中的每个面片的数据也可以定义面片的形状和/或大小。可以通过定义面片在一个或多个方向上的一个或多个宽度来定义面片的大小。可以通过定义面片的中心在子图元存在指示块内的位置来定义面片的位置。在其他示例中,可以通过定义面片在子图元存在指示块内的最小和最大x和y坐标来定义面片的位置和大小。
如上文所描述,可以有2B个预定形状,并且在压缩数据块800中使用B个位来指示预定形状中的一个预定形状以定义面片中的每个面片的形状。在上文所描述的示例中,有两个预定形状(即B=1),它们是:(i)与子图元存在指示块的轴对齐的矩形,以及(ii)相对于子图元存在指示块的轴旋转45度的矩形。
为了确定样本位置(x,y)是否在作为与子图元存在指示块的轴对齐的矩形的面片内,其中该矩形以位置(Cx,Cy)为中心,并且在x方向上具有半宽Wx并在y方向上具有半宽Wy,面片逻辑块808可以确定是否|x-Cx|≤Wx∧|y-Cy|≤Wy。如果满足这个条件,则样本位置在面片内,但是如果不满足这个条件,则样本位置不在面片内。注意,面片在一个方向上的半宽的指示定义了面片在该方向上的宽度。
为了确定样本位置(x,y)是否在作为相对于子图元存在指示块的轴旋转45度的矩形的面片内,其中该矩形以位置(Cx,Cy)为中心,并且在x=y方向上具有半宽W1并在x=-y方向上具有半宽W2,面片逻辑块808可以确定是否|x+y-(Cx+Cy)|≤W1∧|x-y-(Cx-Cy)|≤W2。如果满足这个条件,则样本位置在面片内,但是如果不满足这个条件,则样本位置不在面片内。注意,在这个示例中,相对于轴旋转45度的矩形的半宽不是由矩形的边的长度定义的,而是由与坐标系的轴对齐的长度定义的。
在步骤S708中,解压缩单元316的面片逻辑块8081到808P中的每一者针对面片中的相应一个面片确定样本位置是否在该面片内。在这个示例中,步骤S708涉及并行确定样本位置是否在面片集中的面片中的每个面片内。当面片逻辑块8081到808P在硬件中实施(例如,在固定功能电路中实施)时,在步骤S708中针对不同面片并行执行确定是特别有效的,因为该面片逻辑块可以同时操作。
然而,在其他示例中,步骤S708可以涉及针对面片中的一个或多个面片依次确定样本位置是否在该面片内。在这些其他示例中,可能存在针对面片中的一个或多个面片执行确定的单个面片逻辑块。面片在序列中的顺序与有序面片集中的面片的排序一致。响应于确定样本位置在面片内,面片序列可以停止。当面片逻辑在软件中实施时,在步骤S708中针对不同面片依次执行确定可能是有效的,因为当发现样本位置在第一面片内时,对面片的处理可以停止。
样本位置是否在面片中的一个或多个面片内的指示从面片逻辑块(8081到808P)传递到存在指示确定逻辑810。在步骤S710中,存在指示确定逻辑810基于步骤S708的结果,例如使用样本位置是否在它已经从面片逻辑块(8081到808P)接收的面片中的一个或多个面片内的指示来确定样本位置处的存在指示。
存在指示确定逻辑810还可以从压缩数据块800中读取定义子图元存在指示块的背景存在状态的数据802。如果样本位置不在面片中的任一个面片内,则可以使用这个数据802。也就是说,如果没有面片逻辑块808确定样本位置在面片中的一个面片内,则存在指示确定逻辑810可以确定样本位置处的存在指示具有由数据802指示的背景存在状态。
如果样本位置在面片中的单个面片内(例如,如果面片逻辑块808中的单个面片逻辑块确定样本位置在面片中的一个面片内),则存在指示确定逻辑810可以确定样本位置处的存在指示具有面片中的该单个面片的存在状态。
如果样本位置在多个面片内,则样本位置的存在状态由根据有序面片集的排序覆盖样本位置的“最顶部”面片来确定。因此,如果面片逻辑块808确定样本位置在多个面片内,则存在指示确定逻辑810可以确定样本位置处的存在指示具有与多个面片中的样本位置在其内的一个面片相同的存在状态。“多个面片中的一个面片”是基于有序面片集中的面片的排序来确定的。
在步骤S712中,解压缩单元318输出样本位置812处的所确定的存在指示。样本位置处的所确定的存在指示存在指示可用于确定图元在与光线的交点处存在,作为在光线跟踪系统中对光线执行相交测试的一部分。
如上文所提及,本文所描述的固定长度压缩方案的使用和并行确定样本位置是否在面片中的每个面片内的能力意味着解压缩过程实施起来简单且有效,特别是当该解压缩过程在硬件中(例如,在固定功能电路中)实施时。此外,可以确定子图元存在指示块内的样本位置的存在指示,而不需要确定整个存在指示块的存在指示。压缩单元316和解压缩单元318可以在软件或硬件或它们的组合中实施,并且当压缩和/或解压缩单元在硬件中(例如,在固定功能电路中)实施时,压缩和/或解压缩过程(特别是解压缩过程)的简单性意味着这些单元的硬件的物理大小很小。此外,无论压缩和/或解压缩单元是在硬件还是软件中实施的,压缩和/或解压缩过程(特别是解压缩过程)的简单性都意味着这些单元的等待时间和功耗较低。
在本文所描述的示例中,子图元是正方形,例如如图6b所示,但是在其他示例中,子图元可以是其他形状,例如三角形。
应当理解,本文所描述的示例中的具体数字(例如,P、N、M和B的值)是以示例的方式给出的,并且在其他实施方式中,这些数字可以不同。
此外,本文提供的示例使用三角形和重心坐标,但是本文呈现的方案也适用于可以参数化表示的表面,例如诸如双三次曲面面片的张量积曲面片、球体或者旋转或挤出的表面(的一部分)。该参数可以用于索引到存在指示中。
本文所描述的主要示例已经使用存在指示来加速光线跟踪,但是该方法也适用于其他渲染技术,例如光栅化。如上文背景部分所提及,英国专利2538856和2522868描述了在光栅化系统中使用不透明度状态图来加速穿通图元的处理。具体而言,不透明度状态图用于指示纹理的纹理像素块是完全不透明、完全透明、部分透明还是这些状态的混合。不透明度状态图中的指示可用于加速光栅化系统中穿通多边形的处理。类似于上文参考光线跟踪系统所描述的存在指示,GB2538856B和GB2522868B的光栅化系统中的不透明度状态中的每种不透明度状态用两个位来表示。本文所描述的存在指示的压缩/解压缩方法也可被应用于对诸如在GB2538856B和GB2522868B中所描述的光栅化系统中的不透明度状态的指示进行压缩/解压缩。‘部分透明’状态和‘混合’状态可以组合成单种状态,使得只有三种状态,然后可以以与上文所描述的光线跟踪系统中的完全存在、部分存在和完全不存在状态相同的方式对该三种状态进行压缩/解压缩。
图9示出了可以在其中实施本文所描述的压缩和解压缩单元的计算机系统。计算机系统包括CPU 902、GPU 904、存储器906和其他设备914,诸如显示器916、扬声器918和相机922。处理块910(对应于光线跟踪单元302)以及神经网络加速器(NNA)911在GPU 904上实施。在其他示例中,处理块910可以在CPU 902上或在NNA 911内实施。计算机系统的部件可通过通信总线920彼此通信。存储装置912(对应于存储器304)被实施为存储器906的一部分。
虽然图9示出了图形处理系统的一种实施方式,但是应当理解,可以为人工智能加速器系统绘制类似的框图,例如,通过用神经网络加速器(NNA)911替换CPU 902或GPU 904,或者通过添加NNA作为单独的单元。在此类情况下,处理块910同样可在NNA中实施。
图3的光线跟踪单元被示出为包括数个功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应理解,在本文中被描述为由压缩和/或解压缩单元形成的中间值不需要由压缩和/或解压缩单元在任何点物理地生成,并且可以仅仅表示方便地描述由压缩和/或解压缩单元在其输入与输出之间执行的处理的逻辑值。
本文所描述的压缩和/或解压缩单元可以在集成电路上的硬件中体现。本文所描述的压缩和/或解压缩单元可以被配置为执行本文所描述的方法中的任一种方法。一般来讲,上文所描述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或它们的任何组合中实施。本文中可以使用术语“模块”、“功能性”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件具体实施的情况下,模块、功能性、部件、元件、单元、块或逻辑表示程序代码,该程序代码当在处理器上被执行时执行指定任务。本文中所描述的算法和方法可由执行代码的一个或多个处理器执行,所述代码促使处理器执行算法/方法。计算机可读存储介质的示例包括随机访问存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器,以及可使用磁性、光学和其他技术来存储指令或其他数据并且可由机器访问的其他存储器设备。
如本文中所使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何种类的可执行代码,包括以机器语言、解译语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(诸如硬件描述语言或网表),以及用诸如C、Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解译、编译、运行时,这些软件、固件、脚本、模块或库使得支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的设备、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是或包括任何种类的通用或专用处理器,诸如CPU、GPU、NNA、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可包括一个或多个处理器。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,诸如硬件描述语言(HDL)软件,用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种计算机可读存储介质,该计算机可读存储介质上编码有集成电路定义数据集形式的计算机可读程序代码,该集成电路定义数据集当在集成电路制造系统中被处理(即运行)时将系统配置为制造被配置为执行本文所描述的方法中的任一种方法的压缩和/或解压缩单元,或者制造包括本文所描述的任何装置的压缩和/或解压缩单元。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造系统处制造如本文所描述的压缩和/或解压缩单元的方法。此外,可以提供一种集成电路定义数据集,该集成电路定义数据集当在集成电路制造系统中被处理时使得制造压缩和/或解压缩单元的方法被执行。
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何层级制造的硬件描述语言,包括作为寄存器传输级(RTL)代码,作为高级电路表示法(诸如Verilog或VHDL),以及作为低级电路表示法(诸如,OASIS(RTM)和GDSII)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如RTL)可在计算机系统处进行处理,该计算机系统被配置用于在软件环境的上下文中产生集成电路的制造定义,该软件环境包括电路元件的定义以及用于组合这些元件以便产生由表示法如此定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成该集成电路的制造定义的代码。
现在将相对于图10来描述在集成电路制造系统处处理集成电路定义数据集以便将系统配置为制造压缩和/或解压缩单元的示例。
图10示出了集成电路(IC)制造系统1002的示例,该IC制造系统被配置为制造如本文示例中的任一示例中所描述的压缩和/或解压缩单元。具体而言,IC制造系统1002包括布局处理系统1004和集成电路生成系统1006。IC制造系统1002被配置为接收IC定义数据集(例如,定义如本文示例中的任何示例中所描述的压缩和/或解压缩单元),处理IC定义数据集,并根据IC定义数据集来生成IC(例如,该IC体现如本文示例中的任何示例中所描述的压缩和/或解压缩单元)。对IC定义数据集的处理将IC制造系统1002配置为制造体现如本文示例中的任一示例中所描述的压缩和/或解压缩单元的集成电路。
布局处理系统1004配置成接收并处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可涉及合成RTL代码以确定待生成电路的门级表示,例如就逻辑部件(例如,NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1004已经确定电路布局时,其可将电路布局定义输出到IC生成系统1006。电路布局定义可以是例如电路布局描述。
如本领域中所已知,IC生成系统1006根据电路布局定义来生成IC。例如,IC生成系统1006可实施用以生成IC的半导体装置制造工艺,所述半导体装置制造工艺可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,掩模可在光刻工艺中用于根据电路定义来生成IC。可替代地,提供给IC生成系统1006的电路布局定义可呈计算机可读代码的形式,IC生成系统1006可使用所述计算机可读代码来形成用于生成IC的合适的掩模。
由IC制造系统1002执行的不同过程可全部在一个位置例如由一方来实施。替代地,IC制造系统1002可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方来执行。例如,以下阶段中的一些阶段可以在不同位置和/或由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其他示例中,在集成电路制造系统处对集成电路定义数据集的处理可以将系统配置为制造压缩和/或解压缩单元,而不对IC定义数据集进行处理以便确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器诸如FPGA的配置,并且对该数据集的处理可以将IC制造系统配置为(例如,通过将配置数据加载到FPGA)生成具有该定义的配置的可重新配置的处理器。
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文所述的装置。例如,通过集成电路制造定义数据集,以上文参考图10描述的方式对集成电路制造系统进行配置可以制造出如本文所述的装置。
在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图10所示的示例中,IC产生系统可以由集成电路定义数据集进一步配置为在制造集成电路时根据在集成电路定义数据集处限定的程序代码将固件加载到该集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
与已知的实施方式相比,在本申请中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实施方式可以提高性能。性能改进可包括计算性能提高、等待时间减少、吞吐量增大和/或功耗减小中的一者或多者。在制造这类设备、装置、模块和系统(例如在集成电路中)期间,可在性能提高与物理具体实现之间进行权衡,从而改进制造方法。例如,可在性能改进与布局面积之间进行权衡,从而匹配已知具体实施的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,本申请中所阐述的带来设备、装置、模块和系统的物理实现的改进(例如,硅面积减小)的概念可与性能提高进行权衡。这可以例如通过在预定义面积预算内制造模块的多个实例来完成。
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
Claims (21)
1.一种将用于渲染系统中的子图元存在指示块压缩到压缩数据块中的方法,所述方法包括:
获得表示所述子图元存在指示块中的存在指示的有序面片集,其中所述面片集中的所述面片中的至少两个面片彼此部分地重叠;以及
在所述压缩数据块中存储定义所述面片集中的所述面片的数据,
其中定义所述面片中的每个面片的所述数据定义所述面片的存在状态和所述面片在所述子图元存在指示块中的位置。
2.如权利要求1所述的方法,其中定义所述面片中的每个面片的所述数据进一步定义所述面片在所述子图元存在指示块内的形状。
3.如权利要求2所述的方法,其中有2B个预定形状,并且使用B个位来指示所述预定形状中的一个预定形状以定义所述面片中的每个面片的所述形状。
4.如权利要求3所述的方法,其中B=1。
5.如权利要求3或4所述的方法,其中所述预定形状包括:(i)与所述子图元存在指示块的轴对齐的矩形,以及(ii)相对于所述子图元存在指示块的所述轴旋转45度的矩形。
6.如权利要求3至5中任一项所述的方法,其中所述预定形状包括以下各项中的一项或多项:圆形、椭圆形,以及相对于所述子图元存在指示块的所述轴旋转除45度以外的角度的矩形。
7.如任一前述权利要求所述的方法,其中定义所述面片的所述数据以与所述有序面片集的排序一致的顺序存储在所述压缩数据块中。
8.如任一前述权利要求所述的方法,其中定义所述面片中的每个面片的所述数据进一步定义所述面片在所述子图元存在指示块内的大小。
9.如权利要求8所述的方法,其中定义所述面片中的每个面片的所述数据通过定义所述面片在一个或多个方向上的一个或多个宽度来定义所述面片的所述大小。
10.如任一前述权利要求所述的方法,其中定义所述面片中的每个面片的所述数据通过定义所述面片的中心在所述子图元存在指示块内的位置来定义所述面片的所述位置。
11.如任一前述权利要求所述的方法,其中定义所述面片中的每个面片的所述数据通过定义所述面片在所述子图元存在指示块内的最小x和y坐标和最大x和y坐标来定义所述面片的所述位置和所述大小。
12.如任一前述权利要求所述的方法,所述方法还包括在所述压缩数据块中存储定义所述子图元存在指示块的背景存在状态的数据。
13.如任一前述权利要求所述的方法,其中所述存在状态中的每种存在状态是以下各项中的一项:(i)完全存在、(ii)完全不存在,或(iii)部分存在。
14.如任一前述权利要求所述的方法,其中使用2个位来定义所述面片中的每个面片的所述存在状态。
15.如任一前述权利要求所述的方法,
其中所述存在指示块是2Nx2N子图元存在指示块,
其中所述面片集中有P个面片,
其中所述面片中的每个面片的所述中心的位置由两个坐标定义,所述两个坐标各自由(N+1)个位表示,
其中所述面片中的每个面片在两个方向上的宽度各自由N个位定义,
其中所述面片中的每个面片的形状由B个位指示为是2B个预定形状中的一个预定形状,
其中使用M个位来指示所述面片中的每个面片的存在状态和背景的存在状态,并且
其中存储在所述压缩数据块中以表示所述子图元存在指示块的位数是(M+B+4N+2)P+M。
16.如权利要求15所述的方法,其中M=2、B=1、N=4并且P=8,使得将170个位存储在所述压缩数据块中以表示16×16子图元存在指示块。
17.如权利要求15所述的方法,其中M=2、B=1、N=4并且P=6,使得将128个位存储在所述压缩数据块中以表示16×16子图元存在指示块。
18.如任一前述权利要求所述的方法,其中所述渲染系统是光线跟踪系统或光栅化系统。
19.一种被配置为将用于渲染系统中的子图元存在指示块压缩到压缩数据块中的压缩单元,所述压缩单元被配置为:
获得表示所述子图元存在指示块中的存在指示的有序面片集,其中所述面片集中的所述面片中的至少两个面片彼此部分重叠;并且
在所述压缩数据块中存储定义所述面片集中的所述面片的数据,
其中定义所述面片中的每个面片的所述数据定义所述面片的存在状态和所述面片在所述子图元存在指示块中的位置。
20.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机可读代码,所述计算机可读代码被配置为在所述代码运行时使得如权利要求1至18中任一项所述的方法被执行。
21.一种计算机可读存储介质,所述计算机可读存储介质上存储有集成电路的计算机可读数据集描述,所述计算机可读数据集描述当在集成电路制造系统中被处理时将所述集成电路制造系统配置为制造如权利要求19所述的压缩单元。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2207940.4 | 2022-05-30 | ||
GB2207945.3 | 2022-05-30 | ||
GB2207945.3A GB2613420A (en) | 2022-05-30 | 2022-05-30 | Compression and decompression of sub-primitive presence indications for use in intersection testing in a rendering system |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117152279A true CN117152279A (zh) | 2023-12-01 |
Family
ID=82324265
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310610047.9A Pending CN117152279A (zh) | 2022-05-30 | 2023-05-26 | 用于渲染系统中的子图元存在指示的压缩和解压缩 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN117152279A (zh) |
GB (1) | GB2613420A (zh) |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB201503125D0 (en) * | 2015-02-25 | 2015-04-08 | Advanced Risc Mach Ltd | Graphics processing systems |
US11164359B2 (en) * | 2019-12-27 | 2021-11-02 | Intel Corporation | Apparatus and method for using alpha values to improve ray tracing efficiency |
-
2022
- 2022-05-30 GB GB2207945.3A patent/GB2613420A/en active Pending
-
2023
- 2023-05-26 CN CN202310610047.9A patent/CN117152279A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
GB2613420A (en) | 2023-06-07 |
GB202207945D0 (en) | 2022-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230334760A1 (en) | Systems and methods for soft shadowing in 3-d rendering casting multiple rays from ray origins | |
US10769842B2 (en) | Compressed ray direction data in a ray tracing system | |
US11741656B2 (en) | Graphics processing method and system for rendering items of geometry based on their size | |
US11699258B2 (en) | Graphics processing method and system for rendering items of geometry based on their size | |
US11562533B2 (en) | Assembling primitive data into multi-view primitive blocks in a graphics processing system | |
EP4287125A1 (en) | Compression and decompression of sub-primitive presence indications for use in a rendering system | |
CN117152279A (zh) | 用于渲染系统中的子图元存在指示的压缩和解压缩 | |
CN117152275A (zh) | 用于渲染系统中的子图元存在指示的压缩和解压缩 | |
US20240119640A1 (en) | Compression and decompression of sub-primitive presence indications for use in a rendering system | |
US20240029315A1 (en) | Compression and decompression of sub-primitive presence indications for use in a rendering system | |
GB2614351A (en) | Compression and decompression of sub-primitive presence indications for use in intersection testing in a rendering system | |
GB2614349A (en) | Compression and decompression of sub-primitive presence indications for use in intersection testing in a rendering system | |
US20240029309A1 (en) | Compression and decompression of sub-primitive presence indications for use in a rendering system | |
CN117152276A (zh) | 用于渲染系统中的子图元存在指示的压缩和解压缩 | |
CN117156149A (zh) | 用于渲染系统中的子图元存在指示的压缩和解压缩 | |
US20230260194A1 (en) | Building an acceleration structure for use in ray tracing | |
GB2614350A (en) | Compression and decompression of sub-primitive presence indications for use in intersection testing in a rendering system | |
GB2614348A (en) | Compression and decompression of sub-primitive presence indications for use in intersection testing in a rendering system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |