三维场景的可见性函数的制作方法

文档序号:18220035发布日期:2019-07-19 22:55阅读:248来源:国知局
三维场景的可见性函数的制作方法

本发明涉及计算机程序和系统领域,并更具体地,涉及用于计算三维(3d)场景的可见性函数的方法、系统和程序。



背景技术:

在现代渲染应用中,真实感对图像质量提出了越来越高的要求,带来了一系列关键问题,尤其是对于实时场景。实时场景包括场景的实时渲染。“实时”指的是可以在现有硬件上在几毫秒(一般小于100ms)内执行的技术。“场景”是定义渲染的几何形状、材料、灯光和相机的集合。普遍性的高效可见性查询机制是实时渲染引擎中最关键的组成部分之一,它位于大多数与渲染方程的实时近似求解相关的问题的核心。普遍性的高效可见性查询机制需要具有“全局可见性”函数,该函数获取空间中的一对点,并且当且仅当场景中存在与由这两个点形成的段相交的已有几何形状时,才返回“真(true)”。“可见性查询”是对关于两个给定点的全局可见性函数的评估。

现在讨论一些现有的技术,其目的是解决实时场景中的全局可见性计算问题。这些技术中的大多数是基于光线步进(raymarching)技术的。光线步进是一种旨在计算光线与场景的相交的技术,并且其工作原理如下。光线标记要求一种数据结构,该数据结构既能对场景进行采样,又能提供有效的机制来计算段的轨迹,即数据结构中可能与该段相交的样本的集合。样本是这种数据结构的元素,并且包含与该样本相关联的描述符集合,这允许构建局部重建场景;局部重建不一定是精确的。

该算法操作如下。首先,在数据结构中对场景进行采样。然后,触发可见性查询:对于每一对点,计算该段的轨迹,并且对于该轨迹中的每个样本,使用相应的描述符计算该段与场景的重建之间的相交测试。接下来,返回一个值,该值是所有相交测试的函数(通常是第一个相交的距离)。

然而,现有的依赖于光线步进技术的解决方案存在几个缺点。尽管现有硬件提供了不断增长的计算能力,但是传统方法并不总是自然地适应更新的架构视角,常常不能利用其全部计算能力或仅限于非常特定的用途,诸如单视图可见性确定。此外,传统方法所依赖的数据结构在执行可见性函数时涉及大量的内存访问;尤其是,这些数据结构包括许多指针。然而,存储器访问增加了可见性函数的执行时间,而执行时间对于实时渲染而言是至关重要的。

在这种情况下,仍然存在对于用于计算三维场景的可见性函数的改善方法的需求。



技术实现要素:

因此,提供了一种用于计算三维(3d)场景的可见性函数的计算机实现的方法。该方法包括:

-提供3d场景中的方向集合;

-对于该集合中的每个方向,计算与该方向平行的线集合;

-对于所计算的每个线集合,将该线集合中的线采样到空间段中;

-将线集合中的每条线与位字段相关联,该线的每个空间段对应于所述位字段中的位;

-将所述线集合与所述3d场景相叠加;

-当线的空间段与3d场景中的几何形状相交时,标记所述线相关联的位字段中的与该空间段相对应的位;

-提供在3d场景中的定义查询段的两个点;

-识别与查询段具有最接近对齐的一个或多个空间段;

-通过对所识别的一个或多个空间段所属于的线的一个或多个位字段执行逻辑位运算,来计算所述查询段的可见性。

该方法可以包括以下一项或多项:

-执行逻辑位运算包括通过计算函数r=(x-1)nand(y-1)andd,来执行段[xy]的逻辑位运算,其中:

x是位字段中的一个或多个位,其在查询段的两个点中的一个点处被设置为1,在其他位置被设置为0;

y是位字段中的一个或多个位,其在查询段的两个点中的另一个点处被设置为1,在其他位置被设置为0;

d是所识别的一个或多个空间段所属于的线的一个或多个位字段;

-提供3d场景中的方向集合包括:对单位半球的参数化进行量化;

-对单位半球的参数化进行量化包括:执行半球的八面体映射;

-为方向计算的平行线是从与该方向正交的平面上的网格计算的;

-在所述平面上的所述网格是规则网格,并且其中,所述网格对于与每个方向正交的每个平面都是相同的;

-对于每个平面,计算用于定义该平面上的所述网格的位置的局部基(localbasis),所述局部基包括:从方向获得的第一向量、作为该平面的局部基的第二向量和第三向量

-第二向量和第三向量连续地依赖于方向

-对方向的连续依赖性由如下给出:

即,x2+y2+z2=1和z≥0

其中,是单位半球;

定义了给定方向的切向空间;

(x,y,z)是基于单位半球的坐标;

-识别与查询段具有最接近的对齐的一个或多个空间段包括:-在所述方向集合中确定最接近的方向;-确定与所确定的最接近的方向相关联的平面;-将查询段投影到所确定的平面上;-确定与所投影的查询段最接近的线;

-针对所提供的方向的所计算的线集合中的每条线是与该方向正交的平面上的像素,所提供的方向的线集合在所述平面上形成像素网格,并且其中,确定与所投影的查询段最接近的线包括确定所述平面的与所投影的查询段相交的像素,所投影的查询段在所述平面上形成一组连续像素;

-在所述方向集合中确定最接近的方向包括:计算查询段的方向并计算在单位半球的参数化中的该段的位置,在方向集合中选择与在单位半球的参数化中的该段的位置最接近的方向;

-在提供查询段之前:-将视口细分为超像素的集合,超像素是视口中的一组连续像素;-对于每个超像素,计算该超像素的一个或多个像素群集,每个所计算的群集包括具有一个公共像素参数的像素;-对于每个群集,计算表示该群集中的像素的至少一个参数的平均值的样本,并将对所计算的样本的引用(reference)添加到从中计算了该群集的超像素;并且进一步包括:在计算段查询的可见性之后:

-通过针对视口的每个像素计算该像素所属于的超像素的全部样本的加权和,来针对视口的每个像素重建最终图像。

还提供了一种包括用于执行所述方法的指令的计算机程序。

还提供了一种其上记录有所述计算机程序的计算机可读存储介质。

还提供了一种系统,其包括耦合到具有图形处理单元的图形卡的处理器,所述存储器中记录有所述计算机程序。

附图说明

现在将借助于非限定性实施例以及参考附图来描述本发明的实施例,其中:

-图1示出了该方法的示例的流程图;

-图2示出了用于执行该方法的示例的系统的示例;

-图3-8示出了图1的步骤s10到s80的示例;

-图9-13示出了图1的步骤s90的示例;

-图14示出了图1的流水线的示例;以及

-图15-17示出了空间参数化的示例;

具体实施方式

参照图1的流程图,提出一种用于计算三维(3d)场景的可见性函数的计算机实现的方法。“可见性函数(visibilityfunction)”是这样的函数:其获取空间中的一对点,并且当且仅当场景中存在与由这两个点形成的段相交的已有几何形状时,才返回“真(true)”。该方法首先在所有方向上执行体素化。“体素化(voxelization)”是生成体素集合的过程,其中“体素(voxels)”是存储底层场景的描述符的体积元素的集合。这是通过提供在3d场景中的方向集合来实现的。然后,对于该集合中的每个方向,计算线集合;该线集合中的线与该方向平行。接下来,对于所计算的每个线集合,将该集合中的线采样到空间段中。将线集合中的每条线与位字段相关联;该线的每个空间段对应于所述位字段中的位。然后,将线集合和3d场景相叠加。当线的空间段与3d场景中的几何形状相交时,标记与该线相关联的位字段的与该空间段相对应的位。然后该方法执行可见性查询。在3d场景中提供了两个点。这两个点定义了查询段。识别一个或多个空间段;所识别的空间段与查询段具有最接近对齐。查询段的可见性是通过对所识别的一个或多个空间段所属于的线的一个或多个位字段执行逻辑位操作来计算的。

这种方法改善了三维(3d)场景的可见性函数的计算。尤其是,该方法提供了适用于细粒度并行图形体系结构的近似但高效的点对点可见性模型。实际上,该方法是基于沿着在合适的参数化中所定义的许多经量化方向实时地计算的粗糙体素的集合的。只针对半球执行量化,这避免了信息的冗余,并且这减小了数据结构的大小,并且因此也减少了对数据结构的访问次数。与可能具有任意长的时间的标准方法相比,通过实现最少数量的光线步进步骤,可以在稍许恒定的时间内实现可见性查询。该方法无需任何预计算并且可以是用于几种应用的有效方法,所述应用包括软阴影、环境遮挡和基于图像的照明等。

该方法是计算机实现的。这意味着该方法的步骤(或基本上所有步骤)由至少一个计算机或任何类似系统执行。因此,该方法的步骤由计算机执行,可能完全自动地或半自动地执行。在示例中,可以通过用户-计算机交互来执行对该方法的至少一些步骤的触发。所需的用户-计算机交互的级别可以取决于所预见的自动化级别,并与实现用户愿望的需要保持平衡。在示例中,该级别可以是用户定义的和/或预定义的。

方法的计算机实现的典型示例是使用适用于此目的的系统执行该方法。该系统可以包括耦合到存储器的处理器,存储器具有在其上记录的计算机程序,计算机程序包括用于执行该方法的指令。存储器还可以存储数据库。存储器是适用于这种存储的任何硬件,可能包括几个物理上不同的部分(例如,一个用于程序,并可能一个用于数据库)。数据库可以存储为其计算可见性函数的3d场景,例如数据库存储场景的三角形集合。存储器可以存储由该方法计算的数据结构,例如,在所有方向上体素化的结果。

所谓“数据库”,是指为搜索和检索而组织的任何数据(即,信息)集合(例如,关系数据库,例如,基于预定的结构化语言,例如,sql)。当存储在存储器中时,数据库允许计算机进行快速搜索和检索。数据库的结构确实是为了便于与各种数据处理操作相结合地存储、检索、修改和删除数据。数据库可以由文件或文件集合组成,文件或文件集合可以被分解为记录,每个记录由一个或多个字段组成。字段是数据存储的基本单元。用户可以主要通过查询来检索数据。通过使用关键字和排序命令,用户可以根据所使用的数据库管理系统的规则,快速地搜索、重新排列、分组和选择许多记录中的字段,以检索或创建关于特定数据集合的报告。

该方法一般性地计算3d场景的可见性函数。3d场景可以包括建模对象。建模对象是由存储在例如数据库中的数据定义的任何对象。通过扩展,表述“建模对象(modeledobject)”表示该数据本身。根据系统的类型,建模对象可以由不同类型的数据定义。该系统实际上可以是但不限于cad系统、cae系统、cam系统的任何组合。“cad系统”还表示任何至少适用于基于建模对象的图形表示来设计该建模对象的系统,诸如catia。在这种情况下,定义建模对象的数据包括允许建模对象的表示的数据。在某些具有面(face)或表面(surface)的情况下,cad系统可以例如使用边或线来提供cad建模对象的表示。线、边或表面可以用各种方式来表示,例如非均匀有理b样条(nurbs)。具体而言,cad文件包含规格(specification),可以从规格中生成几何形状,这又允许生成表示。建模对象的规格可以存储在单个cad文件中,也可以存储在多个cad文件中。在cad系统中表示建模对象的文件的典型大小是在每个部件1兆字节的范围内。并且,建模对象通常可以是数千个部件的组装件。

在cad的上下文中,建模对象通常可以是3d建模对象,例如,表示产品,诸如部件或部件的组装件,或者可能表示产品的组装件。所谓“3d建模对象”,是指使用允许其3d表示的数据所建模的任何对象。3d表示允许从各个角度观察部件。例如,当对3d建模对象进行3d表示时,可以围绕3d建模对象的任何轴对其进行处理和旋转,或者围绕显示该表示的屏幕中的任何轴旋转。这尤其排除了2d图标,它们不是3d建模的。3d表示的显示便于设计(即,提高设计人员在统计上完成其任务的速度)。这加快了工业中的制造过程,因为产品的设计是制造过程的一部分。

3d建模对象可以表示:在使用例如cad软件解决方案或cad系统完成其虚拟设计之后,在真实世界中要制造的产品的几何形状,诸如(例如,机械)部件或部件的组装件(或等同于部件的组装件,因为从该方法的角度来看,部件的组装件可以被视为一个部件本身,或者该方法可以独立地应用于组装件的每个部件),或者更一般而言,任何刚性体组装件(例如,移动机构)。cad软件解决方案允许在各种的无限制的工业领域中设计产品,包括:航空航天、建筑、建造、消费品、高科技设备、工业设备、运输、海事和/或海上油/气生产或运输。因此,由该方法设计的3d建模对象可以表示工业产品,其可以是任何机械部件,诸如地面车辆(包括例如汽车和轻型卡车设备、赛车、摩托车、卡车和摩托设备、卡车和公共汽车、火车)的部件、飞行器(包括例如机身设备、航空航天设备、推进设备、国防产品、航空设备、空间设备)的部件、海洋船只(包括例如海军设备、商船、离岸设备、游艇和工作艇、海洋设备)的部件、一般机械部件(包括例如工业制造机械、重型移动机械或设备、安装的设备、工业设备产品、制造的金属产品、轮胎制造产品)、机电或电子部件(包括例如消费电子、安全和/或控制和/或仪表产品、计算和通信设备、半导体、医疗设备和装备)、消费商品(包括例如家具、家庭和花园产品、休闲用品、时尚产品、耐用品零售商的产品、非耐用品零售商的产品)、包装(包括例如食品和饮料以及香烟、美容和个人护理、家用产品包装)。

图2示出了系统的示例,其中该系统是客户端计算机系统,例如用于实时渲染3d场景的用户的工作站。

该示例的客户端计算机包括连接到内部通信总线1000的中央处理单元(cpu)1010、同样连接到总线的随机存取存储器(ram)1070。客户端计算机还设有图形处理单元(gpu)1110,图形处理单元(gpu)1110与连接到总线的视频随机存取存储器1100相关联。在本领域中,视频ram1100也被称为帧缓冲器。大容量存储设备控制器1020管理对大容量存储设备(诸如硬盘驱动器1030)的访问。适用于有形地体现计算机程序指令和数据的大容量存储设备包括所有形式的非易失性存储器,包括:例如,半导体存储设备,诸如eprom、eeprom和闪存设备;磁盘,诸如内部硬盘和可移动磁盘;磁光盘;以及cd-rom盘1040。上述任一项可以附带有特别设计的asic(专用集成电路),或者合并到特别设计的asic(专用集成电路)中。网络适配器1050管理对网络1060的访问。客户端计算机还可以包括触觉设备1090,诸如光标控制设备、键盘等。在客户端计算机中使用光标控制设备,以允许用户选择性地将光标定位在显示器1080上的任何期望位置处。此外,光标控制设备允许用户选择各种命令,并输入控制信号。光标控制设备包括用于向系统输入控制信号的许多信号产生设备。通常,光标控制设备可以是鼠标,鼠标的按钮用于生成信号。可选地或附加地,客户端计算机系统可以包括触摸板和/或触摸屏。

计算机程序可以包括可由计算机执行的指令,指令包括用于使上述系统执行该方法的单元。程序可以在任何数据存储介质上记录,包括系统的存储器。程序可以例如以数字电子电路实现,或者以计算机硬件、固件、软件实现,或者以它们的组合实现。程序可被实现为装置,例如有形地体现在机器可读存储设备中的产品,用于由可编程处理器执行。方法步骤可由可编程处理器执行,可编程处理器执行指令的程序以通过对输入数据进行操作并生成输出来执行方法的功能。处理器因此可以是可编程的并且被耦合以从数据存储系统、至少一个输入设备和至少一个输出设备接收数据和指令以及向其发送数据和指令。应用程序可以用高级过程性或面向对象的编程语言实现,或者如果需要,可以用汇编语言或机器语言实现。在任何情况下,语言可以是被编译或解释的语言。程序可以是完整的安装程序或更新程序。在系统上应用该程序在任何情况下都会产生执行该方法的指令。

现在参考图1,讨论用于计算3d场景的可见性函数的方法的示例。可见性函数是如下函数:该函数获取空间中的一对点,并且当且仅当场景中存在与由这两个点形成的段相交的已有几何形状时,才返回真(true)。

在步骤s10,在三维(3d)场景中提供方向集合。这是由计算方向的系统执行的。方向是相对于3d场景的参考帧(referenceframe)推断的,并且可以由方向向量表示。如本领域所公知的,3d场景的参考帧用于计算3d场景的对象的位置和/或方向。下面将讨论提供方向集合的示例。

场景通常包括对象的集合,诸如几何形状、材料、灯光和相机。场景是三维的,这意味着对象位于3d空间中—对象的位置由三个参数决定。在示例中,3d场景可以是三维欧几里德空间。在示例中,3d场景可以包括三角形集合和一个或多个直接光源。

在示例中,3d场景的原始数据(至少是三角形集合)可以与方向集合一起提供。3d场景的原始数据可以由实现本公开内容的方法的示例的系统和/或程序来访问。在示例中,3d场景可以加载到渲染引擎中,渲染引擎是根据应用的请求生成要显示的图像的框架,如本领域所公知的。例如,cad系统的cad应用向渲染引擎提供3d建模对象的3d场景作为输入,并且渲染引擎使用cad系统的一个或多个图形卡将3d场景绘制到屏幕。3d场景的三角形形成网格,例如,如本领域所公知的,3d场景的建模对象由互连的三角形表示。

在示例中,可以在空的3d场景(即,没有任何原始数据的3d场景)中提供方向集合。

现在讨论提供方向集合(s10)的示例。在3d场景中提供单位半球。半球是单位的,这意味着从得到该半球的球体(即该半球是该球体的一半)的中心延伸到属于半球表面的任何点的向量是长度为1的赋范向量。因此,单位半球用于指定3d场景中的空间方向,并且每个唯一方向在数值上等价于单位球面上的点。单位半球可以位于3d场景的中心,这意味着从中获得该半球的球体的中心位于3d场景的中心。

一旦提供了单位半球,就对单位半球进行参数化。所述参数化是按照本领域所公知的来执行的;半球参数化类似于球体参数化。在一个示例中,参数化包括执行对半球的八面体映射。八面体映射的使用允许将(a,b)∈[-1,1]2映射到半球而不会产生过度失真,同时保持了对在所有方向上的体素化过程期间所计算的数据结构的高效的随机访问。然后,对半球的参数化进行量化。选择表示在八面体的投影位置上的二维(2d)坐标的值(a,b)。这就相当于所述坐标是在八面体的2d投影平面上选择的。每个所选择的坐标(a,b)对应于由单位半球的长度为1的赋范向量表示的在3d场景中的方向(标注为)。

图15至17示出了上述示例,其中,通过使用半球的八面体映射对单位半球的参数化进行量化,来提供方向集合。为了图15-17的清晰起见,示出了单位球体而不是单位半球。应该理解,3d场景中的方向集合可以通过量化单位球体而不是单位半球的参数化来提供;使用半球避免了计算的冗余,因为计算与已知方向相反的方向是直接的。

图15示出了具有给定方向的单位(半)球的示例。

图16示出了上半球的八面体参数化的示例。

图17示出了对应于投影平面中的点(例如,点180)的经量化方向的示例。因此,提供了方向的2d图。在这个例子中,经量化方向的集合形成规则的网格,使得半球上的方向的分布是规则的。为了该附图的清晰起见,限制了表示方向的点的数量。方向的数量优选地在64和1024之间,包括边界;要理解,方向的数量越多,体素化就越精确。因此,方向的数量可以大于1024,例如,2048、4096、……

返回参考图1,针对每个所提供的(或所计算的)方向,计算线集合(s20)。一个线集合中的线平行于一个给定方向。并行意味着该集合中的第一线上的每个点都位于与该集合中的第二线完全相同的最小欧几里得距离处。

在示例中,可以通过针对每个方向计算与该方向正交的平面,来执行由系统进行的针对所述方向的所述线集合的计算。所述线集合中的线与这个平面正交。该平面可以包括网格,该网格在平面上定义了位置的集合,所计算的线集合中的线通过所述位置;在实践中,一条线对应一个位置。

在示例中,平面的网格是规则网格。使用规则网格可以简化对位置以及通过位置的线的计算。

在示例中,网格对于与方向相关联的所有平面是相同的。例如,对于所有网格而言,网格的间距是相同的。

回到图15,对于给定方向计算到半球的切向空间切向空间与该给定方向正交,并且在该空间上计算规则网格;因此提供了具有规则网格的平面。计算全部与正交的平行线的集合:每条线通过该网格的一位置。如下面将解释的,可以计算与对齐的场景的体素化。可以选择网格的大小,以便可以进行3d场景的所有几何形状的体素化。

与给定方向正交的切向空间的使用具有无限的位置,并且可能在可见性查询(s70-s90)时引入失真。然而,对于的定义并没有唯一且简单的解决方案。下面将展示如何最小化这种失真问题。

在示例中,每个平面包括用于定义网格在平面上的位置的局部基。定义网格位置的局部基包括三个向量。从方向获得第一向量,第二向量和第三向量是该平面的局部基。定义网格在平面上的位置的局部基优选地是正交坐标系。现在可以识别任何平面的网格的方向。

在示例中,第二向量和第三向量是连续依赖于方向的。也就是说,对于每个方向定义了一个连续的正交框(frame)该连续正交框等于北极的身份,并且沿着子午线相对于球体恒定。我们所提出的所使用的框来自于这样的应用:其用标准基(canonicalbasis)来识别何时ω等于北极,并且对于不同于极点的任何ω值,应用与穿过北极和ω的子午线平行的旋转,从而将北极送到ω上。因此,当从第一方转到与该第一方向相邻的第二方向时,平面的网格在半球上具有连续的变化。

在示例中,通过以下参数化给出第二向量和第三向量的对方向的连续依赖性:

即,x2+y2+z2=1以及z≥0

其中为单位半球,定义了给定方向的切向空间,(x,y,z)是基于单位半球的坐标。因此,所计算(s20)的每条线在空间中可以用四个分量来识别,其中(a,b)定义了方向而(u,v)定义在相应框中的位置。

返回参考图1,对所计算的线进行采样(s30)。换言之,每个线集合中的每条线被细分成若干段,称为空间段。按照本领域所公知地,来执行计算空间段的这种操作。

然后,在步骤s40,将每个线集合中的每条线与位字段相关联,并且所述每条线的每个空间段对应于该位字段中的位。位字段是存储在存储器中的数据结构。位字段包括许多相邻的计算机存储器位置,这些位置已被分配用于保存位序列。将线与位字段相关联意味着执行该方法的系统能够在存储器中识别给定线的位序列(即,位字段)。按照本领域所公知地,来执行该关联,例如通过使用指针。

然后,将线集合和3d场景相叠加(s50)。线已经被采样,这等于说,线集合中的线的空间段与3d场景相叠加。将线集合中的线和3d场景相叠加涉及:将3d的三角形集合的原始数据和空间段的原始数据一起置于3d场景中。因此,现在可以执行涉及两个原始数据的计算步骤。

接下来,系统确定3d场景中的几何形状与空间段的相交。按照本领域所公知地,来进行相交的确定。当确定空间段与3d场景中的几何形状之间的相交(即,计算出相交)时,标记与该空间段对应的位(s60)。因此,对线集合中的相交的线的位字段进行了标记。对位(以及作为扩展对位字段)进行标记意味着设置位的值,例如增加或修改;在实践中,位字段的所有位都与一个值相关联,因为如本领域所公知的,存储器中不存在“空”位,例如,与线相关联的位字段被初始化为每个位的值为“0”。

图3-6示出了结合图1的s10到s60所讨论的3d场景的参数化和体素化的示例。基于沿着适当参数化中定义的多个经量化方向实时计算的粗糙体素的集合,获得图集合,其中图表示沿其中一个方向的体素化。因此,对于每个方向,创建垂直于该方向的正交图,并且图中的每个像素对应于一条一维线。图3显示了用于提供(即,用于计算)3d场景中的方向集合的单位(半)球。图4示出了针对由箭头表示的一个方向的线集合的计算。提供了与该方向正交的具有规则网格的平面,并且针对由网格提供的每个位置计算与该方向平行的线。图5示出了一个方向的平行线集合与3d场景的叠加。检测到几个相交并在该附图上用点表示出来;该检测是相交计算的结果。图6示出了被存储为紧凑位字段表示的3d场景的体素化的示例。该图上的每个正方形(也称为像素)表示与3d场景的几何形状相交的线的位字段。因此,基于上述参数化,可以动态地构建图的集合。一个图用两步来计算:(i)使用八面体投影,对方向集合进行量化,并与投影平面中的规则网格对齐;(ii)对于这些方向中的每个方向,计算场景的体素化,并与我们的框参数化对齐,将其存储为紧凑位字段表示。

回到图1,现在讨论可见性查询(s70-s90)的示例。

在步骤s70,在3d中提供查询段。给定3d空间中的段,可见性函数确定该段是否与几何形状相交。该段由3d空间中的两个点定义(并界定)。

然后,在步骤s80,识别与查询段具有最接近的对齐的一个或多个空间段。表述“最接近的对齐(closestalignment)”涉及:所识别的一个或多个空间段与查询段的方向具有最佳方向匹配。如果两个方向之间的角度非常小,那么这两个方向是接近的。

在示例中,对该一个或多个空间段的识别可以包括:在线集合中确定具有与查询段的方向最接近的方向的线。

在示例中,可以通过使用查询段的八面体投影确定与查询段最佳对齐的所量化方向,并在该映射中获取最近的体素化,来执行对线集合的线中的、具有在方向集合中最接近方向的线的识别。在这种情况下,与参数化的查询段最佳对齐的经量化方向是在方向的2d图上具有最小距离的方向。这在图17中示出,其中点180(表示一个方向)最接近表示查询段的方向的点182。这里距离是欧几里得距离,可以理解为可以使用任何类型的距离。因此,一旦获得3d场景中的查询段的方向(例如,通过计算),则计算查询段在单位半球的参数化中的位置,并选择方向集合中最接近于该段在单位半球的参数化中的位置的方向。

一旦确定了线集合中的具有与查询段的方向最接近的方向的线—例如,通过测量单位半球的参数化中的距离,就检索与该最接近的方向相关联的平面。这是按照本领域所公知的来执行的,例如,指针维持线与所存储的平面的数据之间的链接。

然后,将查询段投影在与具有与查询段的方向最接近的方向的线相关联的平面上。查询段在平面上的投影是正交投影。图7与图5相同,除了现在呈现了定义3d场景中的查询段的两个点70、72之外。在这个示例中,查询段平行于与平面相关联的方向。图8显示了查询段在表示针对方向的3d场景的体素化的图上的投影80。在这个示例中,查询段与该方向平行,查询段的正交投影只生成一个像素。在查询段不平行于与该平面相关联的方向的情况中,所投影的查询段将在该图上形成一组相邻像素。

然后,确定与所投影的查询段最接近的线。基于表示查询段的像素和表示与3d场景的几何形状相交的线的像素之间的距离,来执行该确定。这里距离可以是欧几里德距离。可以使用一条线。可以选择多于一条线来对这些线进行平均并减少两个方向之间的边界处的视觉伪影。

回到图1,计算查询段的可见性。通过对所识别的一个或多个空间段(与查询段具有最接近的对齐的那些空间段)所属于的线的一个或多个位字段执行逻辑位操作,来执行该计算。对查询段进行保守的光线步进,并使用逻辑位操作,针对被识别为与查询段具有最接近的对齐的该一个或多个空间段的位,测试与和查询段相交的空间段相对应的位字段。应当理解,被识别为与查询段具有最接近的对齐的该一个或多个空间段的位是从表示针对方向的3d场景的体素化的图中获得的。该平面几乎与查询段正交,因为该平面与具有最接近对齐的方向相关联。因此,光线步进导致数量非常少的步骤。此外,整个查询是细粒度并行可伸缩的。

在示例中,对段[xy]执行的逻辑位操作包括计算逻辑操作r=(x-1)nand(y-1)andd,其中:

x是位字段中的一个或多个位,其在查询段的两个点中的一个点处设置为1,在其他地方设置为0;

y是位字段中的一个或多个位,其在查询段的两个点中的另一个点处设置为1,在其他地方设置为0。

d是所识别的一个或多个空间段所属于的线的一个或多个位字段。

图9至13示出了逻辑运算r=(x-1)nand(y-1)andd的示例。在图9上,示出了被采样到空间段中的线。该线的位字段被显示为具有属于每个段的值。这些值被设置为“0”。与3d场景的几何形状相交的段被设置为“1”,即,与相交的空间段相关联的位已经被标记。

图10显示了图9中所示的同一条线。在图10中,该线的一个段x已经被识别为与查询段的两个点之一具有最接近的对齐。该线的第二段y已被识别为与查询段的两个点中的第二个点具有最接近的对齐。空间段x和y的相应位被标记,即它们的值被设置为“1”。然后执行逆运算x-1和y-1,如图11所示。计算结果r,如图12所示,其中r不同于“0”;点x和y互不可见。

图13示出了逻辑运算r=(x-1)nand(y-1)andd的另一个例子,其中r等于“0”;x和y是相互可见的。

可见性查询的数量可能很重要。例如,这是仿真低频现象的情况。在示例中,可以通过将视口细分为超像素的集合来减少查询的数量。超像素是视口的一组连续像素。如果两个像素共享一个公共边缘,那么这两个像素是连续的。在实践中,该分组是nxn个像素的正方形分组,其中n是整数;例如,视口的8x8相邻像素的正方形分组。这样,因为超像素是基于规则网格的,所以可以在恒定的时间内到达超像素邻居。

然后,对于每个超像素,计算该超像素的一个或多个像素群集。超像素的像素群集包括共享一个公共像素参数的像素。像素参数表征像素的性质,例如但不限于其深度、法线(normal)、粗糙度、颜色等等。可以按照类似于如下论文的方式来执行群集的创建:欧洲图形学协会(eurographicsassociation)的针对高性能图形学的第四届acmsiggraph/eurographics会议的论文集(第87-96页)中的olsson等人的“clustereddeferredandforwardshading”。

对于每个群集,计算表示该群集的像素的至少一个参数的平均值的样本。因此,该代表性样本“接近”群集内的每个像素。将对所计算的样本的引用添加到从中计算了该群集的超像素。在示例中,重心位置和平均法线(averagenormal)以及材料用于计算该代表性样本。

然后,使用该样本而不是像素来计算可见性查询。按照已经参考s90所述的,来执行可见性查询。对每个样本进行迭代,然后对定义要测试的可见性段集合的每个光进行迭代。然后,针对每个代表性样本存储一个rgb着色结果;从而存储步骤s90的结果。

然后,通过针对视口中的每个像素计算该像素所属于的超像素的所有样本的加权和,来为视口的每个像素重建最终图像。因此,该重建是以在如下论文中所论述的类似的方式来执行的(除了考虑每个超像素的所有样本之外):kopf等人的“jointbilateralupsampling”,acmtransactionsongraphics(tog)(vol.26,no.3,p.96)。

这样,减少了接收器的数量,从而减少了计算次数,并且从而改善了流水线的效率。并且由于群集化策略,在着色方面没有丢失任何细节。这在具有像皮毛、树叶或铁丝栅栏等高度变化的几何形状的场景中尤其明显。

图14示出了该方法的流水线的示例。3d场景沿着方向集合140、142、144进行体素化,并且体素化的结果通过使用紧凑二进制表示存储在纹理阵列(也称为阴影图或紧凑位阵列表示)中,其中,1表示具有几何形状的体素,0表示空体素104a、142a、144a。因此,该图的每个像素存储关于体素(即,该集合的给定平行线)是否与3d场景的几何形状相交的信息。该图的每个像素都链接到与该像素所表示的线相关联的位字段。

仍然参考图14,对于两个世界空间点146之间的可见性查询,在体素化方向中搜索与查询段最佳对齐的方向,并获取存储线投影的少数像素。在图14的示例中,选择方向144。然后,定位与进入所选视点的线体素化相对应的位。最后,通过计算线体素与所获取的数据之间的按位逻辑“and”,在恒定时间内回答该可见性查询。因此,只有当该操作的结果为零时,这两个点才能相互可见。

因此,本公开内容是非常具有普遍性的,对输入场景不作任何假设,在细粒度并行架构上具有良好的伸缩性,并且看起来是解决大场景的全局照明仿真中的间接可见性的良好候选。因此,本公开内容是在用于渲染三维场景的全局照明的全局流水线中执行可见性测试的良好候选者。

特别地,本公开内容改进了ep3211601a1文件中公开的全局照明流水线,该文件通过引用合并于此。尤其是,当执行渲染时,本公开内容可以计算虚拟点光源(vpl)到像素可见性测试,并使用与3d场景一起提供的一个或多个直接光源来利用所计算的vpl。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1