首页 / 专利库 / 图形技术 / 抗锯齿 / 生成抗锯齿体素数据

生成抗锯齿体素数据

阅读:999发布:2020-05-11

专利汇可以提供生成抗锯齿体素数据专利检索,专利查询,专利分析的服务。并且本 发明 的一个 实施例 阐述了用于实施 体素 化的技术。所述技术包括识别由具有前侧和后侧的第一图形基元所相交的体素,和选择所述体素内的多个 采样 点。所述技术进一步包括针对包含在所述多个采样点中的每个采样点确定所述采样点是位于所述第一图形基元的前侧上还是位于所述第一图形基元的后侧上。最后,所述技术包括针对包含在所述多个采样点中的至少第一采样点,将反映所述第一采样点是位于所述第一图形基元的前侧上还是位于所述第一图形基元的后侧上的第一结果存储在体素掩模中。,下面是生成抗锯齿体素数据专利的具体信息内容。

1.一种用于实施体素化的方法,所述方法包括:
识别与第一图形基元所相交的体素,所述第一图形基元具有前侧和后侧;
选择所述体素内的多个采样点;
针对包含在所述多个采样点中的每个采样点,确定所述采样点是位于所述第一图形基元的前侧上还是位于所述第一图形基元的后侧上;和
针对包含在所述多个采样点中的至少第一采样点,将反映所述第一采样点是位于所述第一图形基元的前侧上还是位于所述第一图形基元的后侧上的第一结果存储在体素掩模中。
2.如权利要求1所述的方法,其中,确定所述采样点是位于所述第一图形基元的前侧上还是位于所述第一图形基元的后侧上包括:
将所述第一图形基元投影到与包含在所述多个采样点中的一个采样点子集相关联的平面;
基于所投影的第一图形基元,实施至少一个覆盖操作以确定包含在所述采样点子集中的一个或多个所覆盖的采样点;和
针对每个所覆盖的采样点:
定义与所覆盖的采样点相关联的采样点列;和
确定在所述采样点列中的每个采样点是位于所述第一图形基元的前侧上还是在所述第一图形基元的后侧上。
3.如权利要求2所述的方法,其中,所述平面垂直于与所述第一图形基元相关联的法线的支配轴。
4.如权利要求1所述的方法,其中,确定所述采样点是位于所述第一图形基元的前侧上还是位于所述第一图形基元的后侧上包括:根据所述第一图形基元与所述体素的交集所定义的平面方程来评估所述采样点。
5.如权利要求1所述的方法,所述方法进一步包括基于所述体素掩模计算所述体素有多少位于所述第一图形基元的后侧上。
6.如权利要求1所述的方法,所述方法进一步包括:
选择位于所述第一图形基元的后侧上的一个或多个采样点;
将所述一个或多个采样点投影到第一平面以计算第一二维掩模;
将所述一个或多个采样点投影到第二平面以计算第二二维掩模;和
将所述一个或多个采样点投影到第三平面以计算第三二维掩模。
7.如权利要求6所述的方法,所述方法进一步包括基于所述第一二维掩模、第二二维掩模和第三二维掩模中的两个或多于两个来实施插值操作,以计算方向性遮挡。
8.如权利要求1所述的方法,所述方法进一步包括:
确定所述体素与具有前侧和后侧的第二图形基元相交;
选择所述体素内的多个采样点;
针对包含在所述多个采样点中的每个采样点,确定所述采样点是位于所述第二图形基元的前侧上还是位于所述第二图形基元的后侧上;和
针对包含在所述多个采样点中的至少第一采样点,将反映所述第一采样点是位于所述第二图形基元的前侧上还是位于所述第二图形基元的后侧上的第二结果存储在体素掩模中。
9.如权利要求8所述的方法,其中,将所述第二结果存储在所述体素掩模中包括:
读取所述存储在所述体素掩模中的第一结果、所述与第一采样点相关联的第一结果和第二结果;
基于所述第一结果和第二结果,生成第三结果;和
将所述第三结果存储在所述体素掩模中,其中所述第三结果与所述第一采样点相关联。
10.一种计算设备,包括:
存储器;和
图形处理管线,所述图形处理管线耦连到所述存储器并配置为通过以下步骤实施体素化:
识别与具有前侧和后侧的第一图形基元相交的体素;
选择所述体素内的多个采样点;
针对包含在所述多个采样点中的每个采样点,确定所述采样点是位于所述第一图形基元的前侧上还是位于所述第一图形基元的后侧上;和
针对包含在所述多个采样点中的至少第一采样点,将反映所述第一采样点是位于所述第一图形基元的前侧上还是位于所述第一图形基元的后侧上的第一结果存储在体素掩模中。

说明书全文

生成抗锯齿体素数据

技术领域

[0001] 本发明概括地来说涉及的是计算机图形,更具体地,涉及的是生成抗锯齿(anti-aliased)体素数据(voxel data)。

背景技术

[0002] 体素化是一种将几何对象(例如三网格)转换成称为体素的体积图片元素的技术。可以将体素化过程比作将几何对象投影到视平面并分配到一个或多个像素位置的光栅化过程。然而,像素表示视平面的二维部分,而体素表示三维场景内的立方体状的体积。因此,体素化的过程是确定每个几何对象与哪些体积元素相交,而不仅仅是确定每个几何对象覆盖哪些像素。一旦构建完成,三维场景的体素化的表示(voxelized representation)可以用于许多后续的计算,举几个例子来说,包括用于照明(例如,全局光照)的计算、具有对象边界的流体学和用于物理模拟的碰撞检测
[0003] 常规的图形处理系统通常以二进制方式实施体素化。即,常规的系统确定体素是‘被占用的(occupied)’——如果体素与几何对象相交(intersected)——或‘未被占用的’——如果所述体素没有与所述几何对象相交。这类型的二进制近似法造成了三维图形和建模的各种问题。例如,当构建包括移动对象的场景体素化的表示时,对象可以从一个(frame)不占用中体素移动到下一个帧中充分占用所述体素。当几何对象相对于所述场景(例如,当对象穿越场景时)移动时,这种突然变化使得体素“跳跃(pop)”进入和跳出占用(occupancy)。类似地,由上述二进制近似法所引入的不准确性可能负面地影响利用所述体素化的表示所实施的多种后续的计算。例如,举几个例子来说,当实施下游的照明计算、碰撞检测分析或流体力学计算时,由上述二进制近似法所引入的舍入误差可能造成计算的不准确性。
[0004] 因此,本领域需要的是更有效的体素化几何对象的方法。

发明内容

[0005] 本发明的一个实施例阐述了用于实施体素化的方法。所述方法包括识别与具有前侧(front side)和后侧(back side)的第一图形基元相交的体素,和选择所述体素内的多个采样点。所述方法进一步包括针对包含在所述多个采样点中的每个采样点确定所述采样点是位于所述第一图形基元的前侧上还是位于所述第一图形基元的后侧上。最后,所述方法包括针对包含在所述多个采样点中的至少第一采样点,将反映所述第一采样点是位于所述第一图形基元的前侧上还是位于所述第一图形基元的后侧上的第一结果存储在体素掩模(voxel mask)中。
[0006] 进一步的实施例提供了永久的计算机可读的介质和计算设备以执行以上所阐述的方法。
[0007] 所公开的技术的一个优势是几何对象的体素化的表示能够被有效地构建并用于确定分数占用(fractional occupancy)和/或遮挡值(occlusion value)。所确定的占用和/或遮挡值然后可以用于实施后续的图形操作或建模计算,而不会引入像常规的像素化方法一样多的人工因素(artifacts)和不准确性。进一步,本文所描述的体素掩模、表面方程(surface equation)、和标量场提供了所选择的并用于构建几何对象的体素化的表示的不同的平的准确性、精密度和处理的工作量,用于各种应用。附图说明
[0008] 因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其它等效的实施例。
[0009] 图1是示出了配置为实现本发明的一个或多个方面的计算机系统框图
[0010] 图2示出了根据本发明的一个实施例的、并行处理子系统;
[0011] 图3是根据本发明的一个实施例的、在图2的一个PPU内的GPC的框图;
[0012] 图4是根据本发明的一个实施例的、图形处理管线的概念性示意图,图2中的一个或多个PPU可配置为实现所述图形处理管线;
[0013] 图5示出了根据本发明的一个实施例的、三维场景中的图形基元的体素化。
[0014] 图6A和6B示出了根据本发明的一个实施例的、用于实施多重采样抗锯齿(MSAA)体素化的技术;
[0015] 图7A是根据本发明的一个实施例的、用于实施MSAA体素化的方法步骤的流程图;
[0016] 图7B是根据本发明的一个实施例的、用于分析分布在体素内的采样点的方法步骤的流程图;
[0017] 图8A和8B示出了根据本发明的一个实施例的、用于利用表面方程实施体素化的技术;
[0018] 图9是根据本发明的一个实施例的、用于利用表面方程实施体素化的方法步骤的流程图;
[0019] 图10A和10B示出了根据本发明的一个实施例的、用于利用标量场实施体素化的技术;
[0020] 图11是根据本发明的一个实施例的、用于利用标量场实施体素化的方法步骤的流程图。

具体实施方式

[0021] 在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。
[0022] 系统概述
[0023] 图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU)102和系统存储器104。系统存储器104可配置为存储设备驱动程序103。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113(例如外围部件互连(PCI)Express、加速图形端口或超传输链路)耦连到存储器桥105;在一个实施例中,并行处理子系统112是将像素传递到显示设备110的图形子系统,显示设备110可以是任何常规的阴极射线管、液晶显示器、发光二极管显示器等等。系统盘114也连接到I/O桥107且可以配置为存储用于CUP102和并行处理子系统112使用的内容和应用以及数据。系统盘114为应用和数据提供非易失性存储,且可以包含固定的或可移动的硬盘驱动程序、闪存设备和CD-ROM(压缩光盘只读存储器)、DVD-ROM(数字化通用磁盘)、蓝光(Blu-ray)、HD-DVD(高清DVD)或其它磁的、光学的或固态的存储器设备。
[0024] 交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其它端口连接、压缩光盘(CD)驱动器、数字视频光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PCI-Express、AGP(加速图形端口)、超传输或者任何其它总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
[0025] 在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且可以包含图形处理单元(GPU)。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个的其它系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。
[0026] 应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、CPU102的数目以及并行处理子系统112的数目,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU102而不是通过桥,并且其它设备经由存储器桥105和CPU102与系统存储器104通信。在其它替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU102,而不是连接到存储器桥105。而在其它实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上而不是作为一个或多个分立设备存在。大型实施例可以包括两个或更多个CPU102和两个或更多个并行处理系统112。本文所示的特定部件是可选的;例如,任何数目的插卡或外围设备都可能得到支持。在一些实施例中,交换器116被去掉,网络适配器118和插卡120、121直接连接到I/O桥107。
[0027] 图2示出了根据本发明的一个实施例的并行处理子系统112。如所示的,并行处理子系统112包括一个或多个并行处理单元(PPU)202,每个并行处理单元202都耦连到本地并行处理(PP)存储器204。通常,并行处理子系统包括U个PPU,其中U≥1。(本文中,类似对象的多个实例需要时以标识对象的参考数字和标识实例的括号中的数字来表示。)PPU202和并行处理存储器204可使用一个或多个集成电路设备来实现,诸如可编程处理器、专用集成电路(ASIC)或存储器设备,或者以任何其他技术可行的方式来实现。
[0028] 再参考图1以及图2,在一些实施例中,并行处理子系统112中的一些或所有PPU202是具有渲染管线的图形处理器,其可以配置为实施与下述相关的各种操作:经由存储器桥105和第二通信路径113从CPU102和/或系统存储器104所供应的图形数据(例如几何对象)生成像素数据,与本地并行处理存储器204(可被用作图形存储器,包括例如常规帧缓冲区(buffer))交互以存储和更新像素数据,传递像素数据到显示设备110等等。在一些实施例中,并行处理子系统112可包括一个或多个作为图形处理器而操作的PPU202以及一个或多个用于通用计算的其它PPU202。这些PPU可以是同样的或不同的,并且每个PPU可具有专用并行处理存储器设备或不具有专用并行处理存储器设备。并行处理子系统
112中的一个或多个PPU202可输出数据到显示设备110,或者并行处理子系统112中的每个PPU202可输出数据到一个或多个显示设备110。
[0029] 在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一些实施例中,CPU102写入用于每个PPU202的命令流到数据结构中(在图1或图2中未明确示出),该数据结构可位于系统存储器104、并行处理存储器204、或CPU102和PPU202都可访问的其他存储位置中。将指向每个数据结构的指针写到入栈缓冲区(pushbuffer)以发起对数据结构中的命令流的处理。PPU202从一个或多个入栈缓冲区读取命令流,然后相对于CPU102的操作异步地执行命令。可以经由设备驱动程序103由应用程序为每个入栈缓冲区指定执行优先级以控制对不同入栈缓冲区的调度。
[0030] 现在返回参考图2以及图1,每个PPU202包括经由连接到存储器桥105(或者,在一个替代性实施例中,直接连接到CPU102)的通信路径113与计算机系统100的其余部分通信的I/O(输入/输出)单元205。PPU202到计算机系统100的其余部分的连接也可以变化。在一些实施例中,并行处理子系统112可实现为可插入到计算机系统100的扩展槽中的插卡。在其他实施例中,PPU202可以和诸如存储器桥105或I/O桥107的总线桥集成在单个芯片上。而在其他实施例中,PPU202的一些或所有元件可以和CPU102集成在单个芯片上。
[0031] 在一个实施例中,通信路径113是PCI Express链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。I/O单元205生成用于在通信路径113上传送的包(或其他信号),并且还从通信路径113接收所有传入的包(或其他信号),将传入的包引导到PPU202的适当部件。例如,可将与处理任务相关的命令引导到主机接口206,而将与存储器操作相关的命令(例如,对并行处理存储器204的读取或写入)引导到存储器交叉开关单元210。主机接口206读取每个入栈缓冲区,并且将存储在入栈缓冲区中的命令流输出到前端212。
[0032] 有利地,每个PPU202都实现高度并行处理架构。如详细示出的,PPU202(0)包括处理集群阵列230,该阵列230包括C个通用处理集群(GPC)208,其中C≥1。每个GPC208能够并发执行大量的(例如,几百或几千)线程,其中每个线程是程序的实例(instance)。在各种应用中,可分配不同的GPC208用于处理不同类型的程序或用于实施不同类型的计算。GPC208的分配可以取决于因每种类型的程序或计算所产生的工作量而变化。
[0033] GPC208从任务/工作单元207内的工作分布单元接收所要执行的处理任务。工作分布单元接收指向编码为任务元数据(TMD)并存储在存储器中的处理任务的指针。指向TMD的指针包括在存储为入栈缓冲区并由前端单元212从主机接口206接收的命令流中。可以编码为TMD的处理任务包括所要处理的数据的索引,以及定义数据将被如何处理(例如,什么程序将被执行)的状态参数和命令。任务/工作单元207从前端212接收任务并确保在每一个TMD所指定的处理发起前,将GPC208配置为有效状态。可以为每个TMD指定用来调度处理任务的执行的优先级。还可从处理集群阵列230接收处理任务。可选地,TMD可包括控制将TMD添加到处理任务列表(或指向处理任务的指针的列表)的头部还是尾部的参数,从而提供除优先级以外的另一级别的控制。
[0034] 存储器接口214包括D个分区单元215,每个分区单元215直接耦连到并行处理存储器204的一部分,其中D≥1。如所示的,分区单元215的数目一般等于动态随机存取存储器(DRAM)220的数目。在其他实施例中,分区单元215的数目也可以不等于存储器设备的数目。本领域的普通技术人员应该理解DRAM220可以用其他合适的存储设备来替代并且可以是一般常规的设计。因此省略了详细描述。诸如帧缓冲区或纹理映射图的渲染目标可以跨DRAM220加以存储,这允许分区单元215并行写入每个渲染目标的各部分以有效地使用并行处理存储器204的可用带宽。
[0035] 任何一个GPC208都可以处理要被写到并行处理存储器204内的任何DRAM220的数据。交叉开关单元210配置为路由每个GPC208的输出到任何分区单元215的输入或到另一个GPC208用于进一步处理。GPC208通过交叉开关单元210与存储器接口214通信,以对各种外部存储器设备进行读取或写入。在一个实施例中,交叉开关单元210具有到存储器接口214的连接以和I/O单元205通信,以及到本地并行处理存储器204的连接,从而使得在不同GPC208内的处理内核能够与系统存储器104或对于PPU202而言非本地的其他存储器通信。在图2所示的实施例中,交叉开关单元210直接与I/O单元205连接。交叉开关单元210可使用虚拟信道来分开GPC208与分区单元215之间的业务流。
[0036] 另外,GPC208可被编程以执行与种类繁多的应用相关的处理任务,包括但不限于,线性和非线性数据变换、计算表面方程(例如,平面方程、二次曲面方程等)和/或到表面的距离、视频和/或音频数据过滤、建模操作(例如,应用物理定律以确定对象的位置、速率和其他属性)、图像渲染操作(例如,曲面细分(tessellation)着色器顶点着色器、几何着色器、和/或像素着色器程序)等等。PPU202可将数据从系统存储器104和/或本地并行处理存储器204转移到内部(片上)存储器中,处理该数据,并且将结果数据写回到系统存储器104和/或本地并行处理存储器204,其中这样的数据可以由其他系统部件访问,所述其他系统部件包括CPU102或另一个并行处理子系统112。
[0037] PPU202可配备有任何容量(amount)的本地并行处理存储器204,包括没有本地存储器,并且可以以任何组合方式使用本地存储器和系统存储器。例如,在统一存储器架构(UMA)实施例中,PPU202可以是图形处理器。在这样的实施例中,将不提供或几乎不提供专用的图形(并行处理)存储器,并且PPU202会以排他或几乎排他的方式使用系统存储器。在UMA实施例中,PPU202可集成到桥式芯片中或处理器芯片中,或作为具有高速链路(例如,PCI Express)的分立芯片提供,所述高速链路经由桥式芯片或其他通信手段将PPU202连接到系统存储器。
[0038] 如上所示,在并行处理子系统112中可以包括任何数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理内核、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PPU从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、智能手机、服务器、工作站、游戏控制台、嵌入式系统等等。
[0039] 图3是根据本发明的一个实施例的在图2的一个PPU202内的GPC208的框图。每个GPC208可配置为并行执行大量线程,其中术语“线程”是指在特定输入数据集上执行的特定程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SIMT)技术用于使用配置为向GPC208中的每一个内的处理引擎集发出指令的公共指令单元来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎通常都执行同样指令的SIMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。本领域普通技术人员应该理解SIMD处理机制代表SIMT处理机制的功能子集。
[0040] 经由将处理任务分布到流多处理器(SM)310的管线管理器305来有利地控制GPC208的操作。管线管理器305还可配置为通过为由SM310所输出的处理数据指定目标来控制工作分布交叉开关330。
[0041] 在一个实施例中,每个GPC208包括M个SM310,其中M≥1,每个SM310配置为处理一个或多个线程组。另外,如本领域已知的,每个SM310有利地包括可以管线化的同样功能执行单元集(例如执行单元和加载-存储单元),其允许在前一个指令完成之前发出新指令。可提供功能执行单元的任何组合。在一个实施例中,功能单元支持各种各样的操作,包括整数和浮点操作(例如加法和乘法)、比较操作、布尔操作(AND、OR、XOR)、移位和各种代数函数的计算(例如平面插值、三角函数、指数函数和对数函数等等);以及相同功能单元硬件可均衡地用来执行不同的操作,包括实施体素化操作(例如,插值和投影计算、采样点检测、距离和体积计算、表查询等)。
[0042] 如本文之前所定义的,传送到特定GPC208的一系列指令构成线程,并且跨SM310内的并行处理引擎(未示出)的某一数目的并发执行线程的集合在本文中称为“线程束(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM310内的不同处理引擎。线程组可以包括比SM310内的处理引擎数目少的线程,在这种情况下一些处理引擎将在该线程组正在被处理的周期期间处于闲置状态。线程组还可以包括比SM310内的处理引擎数目多的线程,在这种情况下处理将在连续的时钟周期内发生。因为每个SM310可以并发支持多达G个线程组,结果是在任何给定时间在GPC208中可以执行多达G*M个线程组。
[0043] 此外,多个相关线程组可以在SM310内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。特定CTA的大小等于m*k,其中k是线程组中并发执行线程的数目并且通常是SM310内的并行处理引擎数目的整数倍,以及m是SM310内同时活动的线程组的数目。CTA的大小一般由编程者以及可用于CTA的硬件资源诸如存储器或寄存器的容量来确定。
[0044] 每个SM310包含一级(L1)高速缓存或使用用于执行加载和存储操作的SM310外部的相应L1高速缓存中的空间。每个SM310都还有权访问在所有GPC208之间共享并且可用于在线程之间转移数据的二级(L2)高速缓存。最后,SM310还有权访问片外“全局”存储器,所述“全局”存储器可以包括例如并行处理存储器204和/或系统存储器104。应该理解,PPU202外部的任何存储器可用作全局存储器。此外,一点五级(L1.5)高速缓存335可以包括在GPC208内,其配置为接收并保持由SM310所请求的经由存储器接口214从存储器获取的数据,包括指令、一致(uniform)数据和常数数据,并将所请求的数据提供给SM310。在GPC208中具有多个SM310的实施例有利地共享了高速缓存在L1.5高速缓存335中的公共指令和数据。
[0045] 每个GPC208可以包括配置为将虚拟地址映射到物理地址中的存储器管理单元(MMU)328。在其它实施例中,MMU328可以驻留在存储器接口214内。MMU328包括用于将虚拟地址映射到像素(tile)的物理地址的页表条目(PTE)集和可选地包括高速缓存行索引。MMU328可以包括地址转译后备缓冲区(TLB)或可以驻留在多处理器SM310或L1高速缓存或GPC208内的高速缓存。物理地址经处理以分布表面数据访问位置来允许高效请求在分区单元215之间交错。高速缓存行索引可用于确定用于高速缓存行的请求是命中还是未命中。
[0046] 在图形和计算应用中,GPC208可配置为使得每个SM310耦连到用于执行纹理映射操作例如确定纹理样本位置、读取纹理数据以及过滤该纹理数据的纹理单元315。从内部纹理L1高速缓存(未示出)或者在一些实施例中从SM310内的L1高速缓存读取纹理数据并根据需要从在所有GPC208之间共享的L2高速缓存、并行处理存储器204或系统存储器104中获取纹理数据。为了将所处理的任务提供给另一个GPC208用于进一步处理或为了经由交叉开关单元210将所处理的任务存储在L2高速缓存、并行处理存储器204或系统存储器104中,每个SM310将所处理的任务输出到工作分布交叉开关330。preROP(预光栅操作)325配置为从SM310接收数据、将数据引导到分区单元215内的ROP单元以及针对颜色混合实施优化、组织像素颜色数据和实施地址转译。
[0047] 应该理解本文所述的内核架构是示例性的并且变化和修改都是可能的。任何数目的处理单元例如SM310或纹理单元315、preROP325可以包括在GPC208内。进一步地,如图2所示,PPU202可以包括任何数目的GPC208,所述GPC208有利地在功能上彼此相似以使得执行行为不取决于哪个GPC208接收特定处理任务。进一步地,每个GPC208有利地使用分开且各异的处理单元、L1高速缓存来独立于其他GPC208操作以为一个或多个应用程序执行任务。
[0048] 本领域普通技术人员应该理解图1、2、和3所描述的架构决不限制本发明的范围并且在不脱离本发明范围的情况下本文所教导的技术可以在任何经适当配置的处理单元上实现,所述处理单元包括但不限于一个或多个CPU、一个或多个多核CPU、一个或多个PPU202、一个或多个GPC208、一个或多个图形或专用处理单元等等。
[0049] 在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
[0050] 每线程指令序列可包括定义线程阵列的代表性线程和一个或多个其他线程之间的协作行为的至少一个指令。例如,每线程指令序列可能包括在序列中的特定点处挂起用于代表性线程的操作执行直到诸如其他线程的一个或多个到达该特定点的时间为止的指令、用于代表性线程将数据存储在其他线程的一个或多个有权访问的共享存储器中的指令、用于代表性线程原子地读取和更新存储在其他线程的一个或多个基于它们的线程ID有权访问的共享存储器中的数据的指令等等。CTA程序还可以包括计算数据将从其读取的共享存储器中的地址的指令,该地址是线程ID的函数。通过定义合适的函数并提供同步技术,可以以可预测的方式由CTA的一个线程将数据写入共享存储器中的给定位置并由同一个CTA的不同线程从该位置读取数据。因此,数据在线程之间共享的任何期望模式可以得到支持,以及CTA中的任何线程可以与同一个CTA中的任何其他线程共享数据。如果存在数据在CTA的线程之间的共享,则其范围由CTA程序确定;因此,应该理解的是,在使用CTA的特定应用中,CTA的线程可能会或可能不会真正互相共享数据,这取决于CTA程序,术语“CTA”和“线程阵列”在本文作为同义词使用。
[0051] 图形管线架构
[0052] 图4是根据本发明的一个实施例的、图形处理管线400的概念性示意图,图2中的一个或多个PPU202可配置为实现该图形处理管线400。例如,GPC208中的一个可以配置为实施一个或多个顶点处理单元415、几何处理单元425、和片段(fragment)处理单元460的函数(function)。也可以由GPC208内的其它处理引擎和相应的分区单元215来实施数据汇编器410、基元汇编器420、光栅器455和光栅操作单元465的函数。或者,图形处理管线400可以使用用于一种或多种函数的专用处理单元来实现。
[0053] 数据汇编器410处理单元收集顶点数据,用于高阶表面、基元等等,并输出所述包括顶点属性的顶点数据到顶点处理单元415。顶点处理单元415是配置为执行顶点着色器程序的可编程的执行单元,从而如由所述顶点着色器程序所指定的,照明(lighting)和转化顶点数据。例如,可以对顶点处理单元415进行编程以将所述顶点数据从基于对象的坐标表示(对象空间)转化到替代地基于诸如世界空间或规格化设备坐标(NDC)空间等坐标系统。顶点处理单元415可以通过数据汇编器410来读取存储在GPC208高速缓存、并行处理存储器204或系统存储器104中的数据,用于处理所述顶点数据时使用。
[0054] 基元汇编器420从顶点处理单元415接收顶点属性,根据需要读取经存储的顶点属性,并构建用于由几何处理单元425处理的图形基元。图形基元包括三角形、线段、点等等。几何处理单元425为配置为执行几何着色器程序的可编程的执行单元,从而如所述几何着色器程序所指定的,转化从基元汇编器420所接收到的图形基元。此外,可以对几何处理单元425进行编程以将计算参数,诸如用于光栅化所述新图形基元、计算体素相交(intersection)、实施投影计算、计算曲率值和实施其它类型的体素化操作的平面方程系数等。
[0055] 在一些实施例中,几何处理单元425还可以添加或删除所述几何流中的元素。几何处理单元425输出所述指定新图形基元的参数和顶点到视口缩放(viewport scale)、剔除(cull)和修剪单元450。几何处理单元425可以读取存储在并行处理器204或系统存储器104中的数据,用于处理所述几何数据时使用。视口缩放、剔除和修剪单元450实施修剪(例如修剪体素的平面或表面)、剔除和视口缩放(viewport scaling),并输出经处理的图形基元到光栅器455。
[0056] 光栅器455扫描检查(scan)转换所述新图形基元并输出片段和覆盖数据到片段处理单元460。此外,光栅器455可以实施二维和/或三维中的光栅化以生成二维和/或三维的覆盖数据。二维覆盖可以利用抗锯齿单元(例如多重采样抗锯齿(MSAA)硬件)由光栅器455来生成。三维覆盖可以存储在体素掩模中。此外,光栅器455可以配置为实施z剔除、深度检测和其它基于z的优化。例如光栅器455可以配置为确定关于一个或多个采样点的图形基元的覆盖和/或关于所述图形基元的一个或多个采样点的深度。
[0057] 片段处理单元460是配置为执行片段着色器程序的可编程的执行单元,从而如所述片段着色器程序所指定的,转化从光栅器455所接收到的片段。例如,可以对片段处理单元460进行编程以实施诸如透视纠正、纹理映射、着色、混合等操作,从而产生输出到光栅操作单元465的经着色的片段。片段处理单元460可以读存储在并行存储器204或系统存储器104中的数据,用于处理所述片段数据时使用。可以以像素、样品或其它粒度对片段进行着色,这取决于所编程的采样率。
[0058] 光栅操作单元465是实施光栅操作的处理单元,诸如模版、z检测、混合等,并输出像素数据为经处理的图形数据,用于图形存储器中的存储。所述经处理的图形数据可以存储在图形存储器,例如并行处理存储器204和/或系统存储器104中,用于在显示设备110上显示或用于进一步由CPU102或并行处理子系统112处理。在本发明的一些实施例中,光栅操作单元465配置为压缩写到存储器的z或颜色数据并解压缩从存储器中读取的z或颜色数据。
[0059] 生成抗锯齿体素数据
[0060] 图5示出了根据本发明的一个实施例的、三维场景500中的图形基元520的体素化。如图5所示,在三维场景500中,每个体素510表示的立方体状的体积。基元520和体素510间的每个交集(intersection)可以定义三维体素片段,有时称为“片段”。
[0061] 基元520可以是较大的几何对象的一部分,诸如三维场景500内的三维对象的三角网格表示。因此,基元520可以包括前面(front face)和后面(back face)。在各种实施例中,将基元520的前面定义为面向所述几何对象的外部的表面,而将后侧定义为面向所述几何对象的内部体积的表面。基元520的前面和后面的方向可以由基元520的表面法线和/或指定的基元520的顶点的顺序来指示。例如,基元520的前面的方向可以由它的表面法线的方向来指示,所述表面法线的方向可以由指定的基元520的顶点525的顺序(例如顺时针的或逆时针的)来确定。
[0062] 尽管将以下技术描述为使用特定的硬件单元(例如,几何处理单元425、光栅器455、片段处理单元460、光栅操作单元465等)实施,但以下每个所描述的技术可以以等同的方式使用软件、专用硬件或其组合来实施。例如,描述为使用光栅器455来实施的技术(例如生成覆盖掩模)可以以等同的方式使用软件(例如,使用片段处理单元460)来实施。此外,描述为使用软件来实施的技术也可以替代为使用专用的硬件来实施。而且,尽管将以下技术描述为使用采样点,但本文所描述的每个技术可以使用任何类型的参考点和参考位置(例如体素的角、体素的边、体素的面、中心点、偏心点等)。
[0063] 图6A和6B示出了根据本发明的一个实施例的、用于实施多重采样抗锯齿(MSAA)体素化的技术。MSAA体素化可以通过分析体素510-1内的每个采样点610(例如610-1)来实施以确定采样点610是在基元520-1的前侧635上还是在后侧630上。这个分析的结果可以存储在体素掩模中并用于计算体素510-1的分数占用(和/或遮挡(例如,在一个或多个方向上体素510-1将光遮挡到什么程度)。例如,分数占用可以作为在基元520-1所属的几何对象的内部的采样点610的分数(fraction)来估算(例如在基元520-1的后侧630上的采样点610的分数)。可以通过将所述三维覆盖(例如,存储在所述体素掩模中的)投影到一个或多个平面上来估算遮挡值。在计算了分数占用和/或遮挡值之后,然后可以用这些值来实施下游计算,诸如照明、流体力学和碰撞检测计算。以下图就图7A和7B进一步详细地描述用于实施MSAA体素化的典范的技术。
[0064] 图7A是根据本发明的一个实施例的、用于实施MSAA体素化的方法步骤的流程图。尽管结合图1-4的系统描述了所述方法步骤,本领域技术人员应当理解,配置为以任何顺序实施所述方法步骤的任何系统均在本发明的范围内。
[0065] 如所示的,方法700开始于步骤710,其中,几何处理单元425确定体素510-1是与一个或多个基元520相交。在步骤715,几何处理单元425选择相交体素510-1的基元520-1,如图6A和6B所示。
[0066] 接下来,在步骤720,多个采样点610(例如610-1)分布在体素510-1内。除了图6A和6B中示出的采样点分布外,在体素510-1内分布采样点610可以包括将采样点610分布在体素510-1的一个或多个边和/或角上。采样点610可以排列在规则点阵,从而它们在三个主平面(major plane)(例如,x、y和z平面)上的投影产生相同的图案,如图6A和
6B所示出的。然而,本发明的实施例还预期了可以使用采样点610的任何规则或不规则的图案或网格(grid)。
[0067] 在体素510-1内可以分布任何数目的采样点610。采样点610的数目可以基于例如所需的粒度、准确性、处理的工作量等。在一个实施例中,在体素510-1中可以分布64个采样点610(例如4x4x4采样点),从而将所计算的所述体素的占用量化到1/64。当体素化小的动画对象(animated object)时,诸如具有小的、尖锐特征的对象,选择太少的采样点610可能导致“跳跃(popping)”。另一方面,选择太多的采样点610可以在所需的水平之上增加处理要求。
[0068] 在步骤725,光栅器455(和/或片段处理单元460)分析每个采样点610以确定采样点610是在基元520-1的前侧635上还是在后侧630上。如以上所论述的,采样点610是在基元520的前侧635上还是在后侧630上可以指示所述采样点是在基元520所属的几何对象的外部还是内部。这个分析可以利用多种技术来实施。以下描述了两种典范的技术。
[0069] 在第一个技术中,光栅器455(和/或片段处理单元460)根据平面(或表面)方程估算每个采样点610以确定采样点610是在所述平面的前侧635上还是后侧630上。例如,通过设定用于所述平面的后侧630上(或前侧635)的每个采样点610的屏蔽位(mask bit),可以将分析结果存储在体素掩模中。估算每个采样点610所根据的平面方程可以基于基元520-1的顶点的坐标和/或由基元520-1与体素510-1的交集导出。例如,可以通过将基元520-1修剪至体素510-1来获得平面方程,以确定用于所修剪的平面620的方程。此外,估算每个采样点610所根据的平面方程可以是通过平均或者聚集多个基元520的交集所计算的集合的(aggregate)平面方程。
[0070] 在用于分析采样点610的第二技术中,将基元520-1投影到采样点610的二维平面,且光栅455(和/或片段处理单元460)确定用于采样点610的平面。置于所述二维平面中的或者与所述二维平面相关联的采样点610仅包括分布在体素510-1内的总数目的采样点610的一部分。例如,采样点610的4x4x4网格分布在体素510-1内,那么采样点的二维平面可以包括采样点610的4x4平面(即,16个采样点)。在确定了用于采样点610的覆盖之后,光栅器455实施在每个所覆盖的采样点610的上面和/或下面的列采样点610的深度检测,以确定每个采样点610是在基元520-1的前侧635上还是后侧630上。没有对未覆盖的采样点610的上面和/或下面的采样点610的列实施深度检测。就图7B示出了该技术的一个实施例。
[0071] 图7B是根据本发明的一个实施例的、用于分析分布在体素510内的采样点610的方法步骤的流程图。尽管结合图1-4的系统描述了所述方法步骤,本领域技术人员应当理解,配置为以任何顺序实施所述方法步骤的任何系统均在本发明的范围内。
[0072] 如所示的,方法702开始于步骤750,在该步骤中,光栅器455(和/或片段处理单元460)选择基元520-1所投影到的平面。为了最大化基元520-1的投影的面积(例如,增大合适地计算针对由基元520-1所覆盖的所有的采样的覆盖的可能性),所选的平面可以是垂直于基元520-1的平面法线640的支配轴(dominant axis)的平面。所述支配轴可以是主轴(例如x、y、或z轴)中的一个。在其它实施例中,基元520-1所投影到的平面可以是相交所需数目的采样点610的平面或具有允许有效分析采样点610的给定的图案或网格的取向的平面。在步骤755。光栅器455将基元520-1投影到所选的平面。在步骤760,光栅器455确定针对在所选的平面中的或与所选的平面相关联的每个采样点610的基元520-1的投影的覆盖。
[0073] 接下来,在步骤765,光栅器455选择所覆盖的采样点610,且在步骤770,定义(define)在所覆盖的采样点610的上面和/或下面延伸的采样点610的列。然后在步骤775通过光栅器455分析所述采样点610的列中的每个采样点(例如通过深度检测)以确定采样点610是在基元520-1的前侧635上还是在后侧630上。在步骤780,例如通过为所确定的在基元520-1的后侧上630(或前侧635)上的每个采样点610设定位,光栅器455将分析结果存储在体素掩模中。最后,在步骤785,如果有必要的话,光栅器455选择另一个所覆盖的采样点610,并在步骤765重复所述分析过程。
[0074] 有利地,用于分析采样点610的第二技术可以减少所分析的采样点610的数目。例如,如果光栅器455确定(在步骤760)一个或多个采样点610没有被基元520-1的投影覆盖,那么可以不对在未覆盖的采样点610的上面和/或下面的采样点610的列实施进一步分析。
[0075] 在分析了每个采样点610之后,在步骤730得出了关于先前是否针对体素510-1存储了结果的结论。例如,如果一个或多个其它基元520相交体素510-1,那么可能先前已经存储了针对体素510-1的结果,且先前已对该结果进行了分析。如果没有存储针对体素510-1的结果,那么在步骤735将步骤725中所计算的结果存储在所述体素掩模中。如果先前存储了针对体素510-1的结果,那么片段处理单元460(或光栅操作单元465)可以通过例如布尔算子(例如OR、AND、NOT等),将步骤725中所计算的结果与步骤737中所存储的结果结合起来。例如,如果在步骤725中所确定的结果或先前存储在所述体素掩模中的结果中针对采样点610设定了位,那么可以在所存储的体素掩模中针对采样点610设定位。在步骤740,如果另一个基元520相交体素510-1,那么从步骤715开始,可以选择基元520并进行分析,且所述结果可以与步骤737中的所述体素掩模结合。
[0076] 最后,在步骤745,一旦计算出并存储(例如,在体素掩模中)针对体素510-1的覆盖,片段处理单元460可以使用所述结果来确定体素510-1的面(face)指向哪个方向和/或体素510-1的表面的曲率。例如当两个或多于两个的基元520的边在体素510-1内相交时,可以确定曲率。此外,覆盖结果可以用于确定体素510-1被基元520相交的比例(即,在基元520的前侧635上或后侧630上的体素510-1的比例)和/或体素510-1的由基元520所属的几何对象所占用的比例(即,分数占用)。在一个实施例中,所述体素的分数占用可以由位的已经在所述体素掩模中设定的比例来确定。例如,如果64个采样点分布在体素
510-1内,且所述体素掩模中的对应于16个不同的采样点610的位已经被设定,那么所述体素的分数占用是16/64或1/4。
[0077] 片段处理单元460可以进一步使用所述体素掩模来计算遮挡值(例如,方向性遮挡(directional occlusion)、环境遮挡(ambient occlusion)等等)。例如,方向性遮挡值可以通过如所述体素掩模所指示的,将所述三维覆盖投影到一个或多个平面上来计算。在一个实施例中,所述覆盖值可以沿着三个主轴投影到三个平面上,且可以针对体素510-1存储三个二维掩模。然后可以通过根据三个主轴的每个中的矢量的大小插入所述二维掩模来针对给定的矢量计算方向性遮挡。在其它实施例中,所述结果可以存储在三个二维掩模中,而不是将在步骤725中所计算的结果存储在体素掩模中(例如,为了增加存储器效率)。可以针对所述三个主轴中的每一个存储二维掩模。然后,如以上所述,片段处理单元460可以使用所述二维掩模来计算遮挡值。
[0078] 当每个体素510的采样点610的数目高时,存储三个所投影的二维掩模而不是一个三维掩模可以减少所需的存储器的量。更具体地,在三维掩模中采样点610的数目随着该采样点610的分辨率的立方的增加而增加,而在三个二维掩模中采样点610的数目随着该采样点610的分辨率的平方的增加而增加。
[0079] 图8A和8B示出了根据本发明的一个实施例的、用于利用表面方程实施体素化的技术。该特定的体素化技术可以通过基于相交体素510的一个或多个基元520(例如,520-2)计算表面方程来实施。所述表面方程可以通过累加平面方程,例如通过聚集相交体素510的每个基元520的平面系数来计算。所述表面方程可以包括平面方程(例如,平均法线和自体素510中的参考点的平均距离),或所述表面方程可以包括高阶方程(例如二次曲面)以更准确地表示多个相交的基元520的特征(例如曲率)。一旦计算出,所述表面方程可以用于计算针对体素510的分数占用和/或遮挡值。以下就图9进一步详细地描述用于利用表面方程实施体素化的典范的技术。
[0080] 图9是根据本发明的一个实施例的、用于利用表面方程实施体素化的方法步骤的流程图。尽管结合图1-4的系统描述了所述方法步骤,本领域技术人员应当理解,配置为以任何顺序实施所述方法步骤的任何系统均在本发明的范围内。
[0081] 如所示的,方法900开始于步骤910,在该步骤中,几何处理单元425确定体素510-2与一个或多个基元520相交。在步骤915,几何处理单元425选择相交体素510-2的基元520-2,如图8A和8B所显示。接下来,在步骤920,片段处理单元460计算由基元520-2和体素510-2的交集所定义的平面的系数。交叉平面810的系数可以参照体素510-2内的参考点来确定。例如,交叉平面810的系数可以参照体素510-2的角、边或中心来计算。
[0082] 在已经计算出平面系数之后,在步骤925得出了关于先前是否存储了针对体素510-2的系数的结论。例如,如果一个或多个其它基元520相交体素510-2,那么可能先前已经存储了针对体素510-2系数,并已经对该系数进行了分析。如果没有存储针对体素510-2的结果,那么在步骤930存储步骤920中所计算的系数。如果先前存储了针对体素510-2的系数,那么光栅操作单元465可以将步骤920中所计算的系数与步骤935中所存储的系数结合起来。例如,结合所述系数可以包括计算平均平面系数或计算高阶曲面方程。
[0083] 当大多数相交的基元520具有大致相同的取向时,计算平均平面方程的累加平面方程提供了体素510-2的表面的准确的表示。然而,当相交的基元520具有非常不同的取向时,计算平均平面方程可能会提供所述基本几何(underlying geometry)的较差的相似。因此,在这种情况下,可以使用高阶表面表示。在一个实施例中,可以利用三个或多于三个的系数计算二次曲面,而不是计算和存储平均平面方程。例如,可以利用10个4x4对称矩阵系数来存储二次曲面。有利地,可以从平面方程容易地获得二次矩阵,并对其进行线性组合。
[0084] 除了存储平均平面(或表面)方程之外,片段处理单元460可以计算和存储针对体素510-2的曲率(例如,平均曲率大小)。例如,随着曲率大小的增大,在后续的着色操作期间,针对垂直于所述平面方向的方向的不透明度可能增加。可以针对体素510-2的每个体素计算并存储曲率大小并将该曲率大小内插为每像素属性。
[0085] 在步骤940,如果另一个基元520相交体素510-2,那么如本文先前所描述的,从步骤915开始,可以选择基元520并进行分析,且光栅操作单元465可以将所得到的系数与步骤935中所存储的系数结合。
[0086] 最后,在步骤945,一旦针对体素510-2计算出并存储表面系数,片段处理单元460可以使用所述系数来确定被基元520所相交的体素510-2的量(例如,比例)(即体素510-2在基元520的前侧635上或后侧630上的量)和/或由基元520所属的几何对象所占用的体素的量(即,分数占用)。
[0087] 用于确定分数占用的一个技术是实施球体-平面(sphere-plane)交集。例如,片段处理单元460可以计算相交所述平均平面的球体的半径,其中,所述球体的半径表示从所述平均平面到所述体素中的参考点(例如,体素的中心)的距离。然后用所述半径可以实施一维查找以估算体素510-2的分数占用。例如,所述球体的半径可以从体素510-2的中心到所述平均平面的表面来计算。这个查找表技术计算廉价的且可以弥补立方角(cube-corner)效果,从而使所估算的分数占用随着基元520的进入体素510-2或从体素510-2退出而逐步地变化。此外,可以插入(例如使用线性插值)多个表查找值以更准确地估算占用。
[0088] 用于确定分数占用的另一种技术包括插入具有体素510-2的平均表面,并计算在所述平均表面的后侧630上的体素510-2的体积(例如,在相交的基元520所述的几何对象的内部的体素510-2的体积)。或者,由于确定在所述平均表面的后侧630上的体素510-2的精确体积可能是计算昂贵的,所以可以实施表查找,以通过首先用低精度平面估算平均表面来确定分数占用。
[0089] 所述表面系数可以进一步用来计算遮挡值(例如,方向性遮挡、环境遮挡等等)。例如,片段处理单元460可以通过将所述平均表面修剪至体素510-2并将所修剪的表面投影到一个或多个平面上来计算方向性遮挡值。在一个实施例中,所修剪的表面可以沿着三个主轴投影到三个平面上,且可以针对体素510-2存储得到的二维掩模。然后可以通过根据三个主轴的每个中的矢量的大小插入所述二维掩模来针对给定的矢量计算方向性遮挡。或者,通过在一个或多个方向上采样和/或通过利用查找表和所述平均表面的低精度估算,可以用其它分析技术来估算方向性遮挡。
[0090] 图10A和10B示出了根据本发明的一个实施例的、用于利用标量场实施体素化的技术。该特定的体素化技术可以通过确定针对相交体素510-3的每个基元520的一个或多个标量值来实施。每个标量值可以通过测量基元520的表面和体素510-3内的参考点(例如,采样点1010-1、采样点1010-2和采样点1010-3)。然后得到的标量场可以用于确定针对体素510-3的分数占用和/或遮挡值。例如,可以通过分析标量场中的一个或多个标量值的大小和/或符号(sign)来确定分数占用和遮挡值。以下就图11进一步详细地描述用于利用标量场实施体素化的典范的技术。
[0091] 图11是根据本发明的一个实施例的、用于利用标量场实施体素化的方法步骤的流程图。尽管结合图1-4的系统描述了所述方法步骤,本领域技术人员应当理解,配置为以任何顺序实施所述方法步骤的任何系统均在本发明的范围内。
[0092] 如所示的,方法1100开始于步骤1110,在该步骤中,几何处理单元425确定体素510-3与一个或多个基元520相交。在步骤1115,几何处理单元425选择相交体素510-3的基元520-3,如图10A和10B所显示。在步骤1120,在体素510-3内分布一个或多个参考点(例如,采样点1010)。在体素510-3内分布采样点1010可以包括将采样点1010分布在体素510-3的一个或多个边和/或角(例如,顶点)上和/或体素510-3的中心上。尽管图
10A和10B所示出的采样点1010排列在规则的点阵中,但还可以使用采样点1010的任何规则或不规则的图案或网格。
[0093] 在体素510-3内,基于例如所需的粒度、准确性、处理的工作量等,可以分布任何数目的采样点1010。在一个实施例中,将8个采样点1010分布在体素510-3的角。所存储的针对这些采样点的标量值在邻近体素510之间可以是共享的或不共享的(例如聚集的)。在另一个实施例中,单个采样点1010可以位于体素510-3的角或体素510-3的中心。在另一个实施例中,对于每个所选的基元520,仅分析位于基元520所相交的体素的边的顶点的采样点1010。
[0094] 接下来,在步骤1125,片段处理单元460计算每个采样点1010和基元520-3的表面之间的距离。基元520-3的表面上的、从该处计算每个距离的位置可以表示采样点1010和基元520-3之间的最短距离。基于采样点1010和基元520-3的表面之间的距离,在步骤1130可以确定标量值。所述标量值可以正比于(或等于)所计算的距离。此外,标量值可以基于体素510-3所相交的基元520的面积(例如,相交的平面1020的面积)来衡量。进一步,可以基于相应的采样点1010是在基元520-3的前侧635上还是在后侧630上来对每个标量值指定符号(即正的或负的)。在图10A和10B示出的实施例中,针对所确定的在基元
520的前侧635上的采样点1010(例如采样点1010-2)存储正标量值,并针对所确定的在基元520的后侧630上的采样点1010(例如采样点1010-1)存储负标量值。进一步,将零值指定给所确定的在基元520的平面中的每个采样点1010(例如采样点1010-3)。
[0095] 通过就单个采样点分析多个基元520所计算的标量值可以由光栅操作单元465聚集。如以上所述,可以利用指定给每个基元520的基于面积的衡量来聚集标量值。在一个实施例中,在针对基元520计算一个或多个标量值之后,在步骤1135得出了关于先前是否针对一个或多个采样点1010存储了标量值的结论。例如,如果一个或多个其它基元520相交体素510-3(或邻近的体素510),那么针对采样点1010可能先前已经存储了标量值并且先前已经对该标量值进行了分析。如果没有存储针对采样点1010的结果,那么在步骤1140存储步骤1130中所确定的标量值。如果针对采样点1010先前存储了一个或多个标量值,那么例如通过对所述标量值进行求和,可以将步骤1130中所确定的标量值与步骤1145中所存储的标量值结合起来。在步骤1150,如果另一个基元520相交体素510-3,那么从步骤1115开始,可以选择基元520并进行分析,且所确定的标量值可以与步骤1145中所存储的值结合。在存储所计算的标量值之前,与体素510-3相关联的标量值可以初始化为小的正(负值)值(例如,1e-7),从而空体素510看起来好像不含有表面(例如,相交的基元520)。
[0096] 在步骤1155,一旦已经计算出标量场(例如,包括针对每个采样点1010的有符号的标量值),片段处理单元460可以使用所述标量场来确定被基元520所相交的体素510-3的比例(即体素510-3在基元520的前侧635上或后侧630上的比例)和/或体素510-3的由基元520所属的几何对象所占用的比例(即,分数占用)。片段处理单元460可以进一步使用所述标量场来计算遮挡值(例如,方向性遮挡、环境遮挡等等)。
[0097] 在一个实施例中,针对体素510-3的分数占用和遮挡值利用在其上将标量场估算为具有零值的隐式曲面、线、点等来计算。然后如以上就图8A-9的表面方程技术所论述的,可以对所述零值表面(或零值线)进行测量、投影等,以确定分数占用和遮挡值。例如,可以通过将所述零值表面投影到一个或多个平面上来估算遮挡。此外,用标量场,其中一些技术可能共享以上就图5-9所描述的技术的特征的多种其它的技术,可以用来确定占用和遮挡值,如以下所述。
[0098] 在一个技术中,针对每个体素510,利用所述标量值的符号(例如,指定给体素510的角上的采样点1010的标量值的符号)来实施表查找,以利用低精度的平面来估算体素510的表面。该技术可以比作是移动立方体算法。然后可以用从表查找中检索到的一个或多个值直接计算占用和遮挡,而不需要计算体素510的表面。
[0099] 在另一个技术中,可以通过分析位于垂直于主轴的体素510-3的面的角上的标量值,沿着所述主轴来估算方向性遮挡。然后可以在所述面上利用双线性插值来计算标量值沿其插值为0的一条或多条零值线。所述零值线可以用来估算与所述体素相关联的方向性遮挡。例如,可以通过计算画在体素510-3的面上的零值线的任一侧上的面积比来确定方向性遮挡值。在又一个技术中,与体素510相关联的标量值可以相加,且所述标量值的和可以用来确定遮挡值。例如,为零的和可以指示所述遮挡为大约0.5(或被遮挡了50%),整数和可以指示所述遮挡为小于0.5,负数和可以指示所述遮挡为大于0.5。所述和的大小可以进一步指示所述遮挡在0.5以上或以下的程度。
[0100] 在其它实施例中,可以针对每个体素510确定一个标量值,且所述标量值可以直接映射到体素510的占用。将所述标量值映射到体素510的占用可以包括将所述标量值固定(clamping)到[0,1,1–S]。例如,通过将标量值1-S的倒数固定到[0,1]的范围可以估算占用。当单个采样点1010位于体素510的中心时,该技术可能是有用的。
[0101] 尽管就单个体素510(例如,510-1、510-2、510-3)描述了图6A-11所描述的技术,但以上所描述的每个技术都可以应用于构建相交任何数目的体素510的几何对象(例如,基元520的网格)的体积表示。
[0102] 总之,公开了三个用于构建几何对象的体素化的表示。所述用于实施体素化的多重采样抗锯齿技术将采样点分布在体素内,确定哪个基元相交所述体素,并分析所述相交的基元以确定每个采样点是在所述几何对象的内部还是外部。可以通过对所有的采样进行迭代并根据一个或多个三维平面方程评估每个采样来在三维中分析相交的基元。或者,可以在二维中确定每个相交的基元的采样点覆盖,随后对在每个所覆盖的采样的上面或下面的采样的列进行深度检测。然后将得到的体素掩模投影到一个或多个参考平面以确定遮挡值,或对所述体素掩模进行分析以确定所述几何对象所占用的体素的比例。
[0103] 进一步,用于利用表面方程实施体素化的技术计算针对相交所述体素的每个基元的一个或多个表面系数(例如,平面系数)。将对应于多个相交的基元的多个平面系数集聚集以计算针对体素510-2的平均表面。利用二维平面方程或利用高阶二次曲面来估算平均表面。然后用所述平均表面计算分数占用和/或遮挡值。计算分数占用可以包括实施球体-平面交集或利用低精度平面估算实施表查找。此外,可以插入(例如使用线性插值)多个表查找值以更准确地估算占用。可以通过将所述平均表面修剪到所述体素,并将所修剪的表面投影到一个或多个参照面上来计算遮挡。
[0104] 最后,用于利用标量场实施的体素化的技术确定每个基元和分布在所述体素中的一个或多个参考点(例如采样点)之间的距离。采样点可分布在例如所述体素的角和/或单个采样点可以位于每个体素的中心。将针对所计算的采样点和所述基元间的距离的有符号的标量值存储在数据阵列中。此外,针对相交所述体素的多个基元,将所记录的针对给定的采样点的标量值聚集。然后通过分析所记录的针对每个采样点的标量值的符号和大小来确定分数占用和/或遮挡。
[0105] 所公开的技术的一个优势是几何对象的体素化的表示可以有效地被构建并用于确定分数占用和/或遮挡值。然后可以用所确定的分数占用和/或遮挡值来实施后续的图形操作或建模计算,而不会引入像常规的体素化方法一样多的人工因素。进一步,本文所描述的体素掩模、表面方程和标量场提供了可以选择并用于构建几何对象的体素化的表示的不同水平的准确性、精度和处理工作量,用于多种应用。
[0106] 本发明的一个实施例可实现为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)不可写入的存储介质(例如,计算机内的只读存储器设备,诸如可由光盘只读存储器(CD-ROM)驱动器读取的CD-ROM盘、闪存、ROM芯片或任何类型的固态非易失性半导体存储器),在其上永久性地存储信息;和(ii)可写入的存储介质(例如,软盘驱动器内的软盘或硬盘驱动器或者任何类型的固态随机存取半导体存储器),在其上存储可更改的信息。
[0107] 以上已参照特定实施例对本发明进行了描述。然而,本领域普通技术人员应该理解的是,可对此做出各种修改和变化,而不脱离如所附权利要求书中所阐述的本发明的较宽精神和范围。因此,前面的描述以及附图应被视为是示例性的而非限制性的。
[0108] 因此,在下述的权利要求中阐述本发明的实施例的范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈