用于通过复杂照明下路径追踪进行场景渲染的设备及方法与流程

文档序号:14777844发布日期:2018-06-26 07:40阅读:298来源:国知局

本发明涉及计算机图形学中的图像渲染领域,尤其是在复杂照明下的虚拟3D场景的交互式渲染。它更具体地针对GPU实时渲染(图形处理单元)。

在本公开中,术语“渲染”大体上指的是几何和材料数据到可见图像的转换。



背景技术:

通过考虑所有直接和间接照明的作用(contribution),真实照明效果的渲染需要场景中的全(full)光交换的适当模拟。具有挑战性的任务包括求解渲染方程,该渲染方程表示到达以所有方向被散射的表面的所有照明作用的积分。在如James T.Kajiya所著的“The Rendering Equation”,ACM SIGGRAPH Computer Graphics,n°143-150,1986的文章中描述了这样的方程。

然而,求解该渲染方程并不繁琐,也没有解析解存在,主要是因为由复杂场景几何引起的可见性问题。随机射线追踪方法,比如路径追踪(参见尤其是上述ACM SIGGRAPH文献)需要追踪大量的光路径来求解它。

由于许多随机路径不能直接到达光源,路径追踪引擎往往依赖于沿着路径的直接光采样策略,称为下一个事件模拟。该方法通过在沿着路径的每次反射处直接对光源进行采样,并将其光作用添加到由路径携带的能量中,从而提高路径追踪的收敛速度。

这种技术极大地有助于在路径中添加能量,但在需要的计算时间内可以被增强。

在D.van Antwerpen所著的“Improving SIMD Efficiency for Parallel Monte Carlo Light transport on the GPU”,High Performance Graphics,2011的文章中,蒙特卡洛(Monte Carlo)光传输算法尤其比如路径追踪是相对于任意行走的随机终止被增强,这通常导致在样品之间的不均匀工作量,从而降低了SIMD(单输入多数据)效率。在这方面,将流压缩与样本重生相结合,在每次扩展之后在流的结尾处重新生成新的样本。由于新生成的样本被并排放置在流的结尾处,所以在样本重生期间SIMD效率保持很高。

虽然增强了计算效率,后者取决于任意的俄罗斯轮盘终止和相关线程束中并排的新生成的样本的数量。

双向路径追踪技术也是众所周知的。在这样的实现中,从像素和光源追踪光射线,更准确地说,在任意行走阶段期间,为每个样本构建眼睛路径和光路径,并且当两者都被终止时,在连接阶段期间评估这些路径之间的所有连接。

因此,眼睛和光路径的随机终止会导致样本之间的不均匀工作量。通过由D.van Antwerpen在上述文章中提出的方案受制于上述效率的限制,部分地解决了该问题。

在E.P.Lafortune和Y.D.Willems所著的“Reducing the Number of Shadow Rays in Bidirectional Path Tracing”,WSCG’95,1995的文章中,提出了用于降低在双向路径追踪中阴影射线的数目的算法。联合增加样本的数目能够补偿随机过程方差的轻微增加。更准确地说,阴影射线是基于它们作用的重要性而被选择的。取决于不同的实现方式,在以下组中,为每一组选择单个阴影光射线:光路径上每个点的一组照明作用,或者眼睛路径上每个点的一组照明作用,或者一组所有的照明作用。选择每个像素的样本数目,以大约获得射线的恒定总数目。

由于与在阴影射线交叉试验上花费的时间相比是重要的开销,特别是对于小场景,因此虽然缩小了RMS(均方根)误差,该方案往往会影响计算效率。



技术实现要素:

本公开的目的是仍然缩小关于现有路径追踪技术的计算时间以及加快在渲染算法中的阴影计算,同时使得可以保持相同的采样策略。

本公开的目的尤其是兼容于现有的射线追踪系统或延期的渲染引擎的渲染设备,并且有利地易于在图形硬件上实现。

在这个方面,本公开涉及一种用于通过路径追踪由至少两个光源照亮的3D场景对图像网格进行渲染的设备,图像网格包括像素。该设备包括至少一个处理器,该至少一个处理器被配置用于:

-为像素中的每个像素追踪源自3D场景中的该像素的至少一条射线,直到该射线在交叉点处遇到3D场景的对象;

-将来自交叉点的该射线向3D场景的光源中的至少一个光源反射到对象上;

-对交叉点和光源之间的该射线进行可见性测试;

-只当可见性测试导致正输出时,在交叉点处添加光源的作用,以在图像网格的该像素处执行渲染;

根据本公开,至少一个处理器还被配置用于根据光源以集群方式在像素上继续进行可见性测试,根据分别与可见性测试相关联的光源的功能在计算和/或存储器存储方面集群可见性测试。

由于在GPU上并行计算的光可见性射线与3D空间中的同一区域(即所考虑的光源)相关联,因此对于该组像素的可见性测试的集群有利地具有改善射线一致性的效果。光可见性射线(或阴影射线)是从3D场景的一个点发送到另一个点的光线,以便测试这两个点之间的可见性。

通常情况下,GPU在被称为线程束(warp)的并行线程块的网格上实例化内核程序,比如射线交叉。每个线程块都包含一组运行同一内核的并发运行线程。块中的线程可以访问一级缓存存储器或L1缓存,而块之间的线程共享稍慢的共享二级缓存存储器或二级缓存。为了清楚起见,在具体实施例中的GPU包括24个线程束,其中每个线程束包括8个线程的4个块—这在GPU中产生768个线程。在另一个具体实施例中,GPU包括唯一的线程束,其包括32个线程的16个块—这在GPU中相当于512个线程。

上述设备有利地提供了相对于具有直接光采样的现有方案的速度处理的增加。事实上,后者倾向于破坏GPU缓存一致性,因为光源是被随机选择的。此外,在那些已知的技术中,随机光源选择导致无组织的阴影射线(被用于可见度测试),即在GPU线程束中计算的一组射线正在追踪从任意表面出发到达任意光源的射线。阴影射线的无组织分布对于存储器一致性是不利的,并且需要处理延迟。本设备可以帮助在同一GPU线程束中计算的阴影射线之间获得更好的一致性。也就是说,连接路径可以由光源在其路径追踪实现方式中分类。

可视性测试在计算和/或存储器存储方面的集群能够可能是特别具有成本效益的。

在这个方面,在给定的反弹步骤处(在特定实施例中:在每个给定的反弹步骤处),给定GPU线程束的所有线程有利地与光源中的同一光源相关联。在特定的实现方式中,这对于所有采用的GPU线程束都是有效的。而且,在给定的反弹步骤处(在特定实施例中:在每个给定的反弹步骤处),光样本有利地集群到分别与由路径追踪器潜在选择的光源中的那些光源相关联的缓存器中。然后可以在这些缓存器上运行射线查询以便进行可见性测试。

在传统的射线集群中,将这种可见性测试的集群应用到光源的功能中显得非常出乎意料和令人惊讶,而且将传统的可见性测试应用到下一个事件模拟的路径跟踪也是一样。

在特定的实现方式中,至少一个处理器被配置用于通过从光源向交叉点发射可见光射线,在交叉点和光源之间为像素中的每个像素执行可见性测试。

使用反向阴影射线的实现方式特别有趣,因为在GPU上并行计算的射线通常粗略地从3D空间中的同一点开始。与经典的光射线查询相比,当射线可以从3D场景中的任何表面开始时,极大地缩小了可能射线的来自光源的开始位置。

可以使用多种方法中的一种来实现集群方案,比如在包含射线查询的缓存器上进行快速GPU缩小。这样实现方式的示例(简称为流压缩)是由D.V.Antwerpen所著的“Improving SIMD efficiency for parallel Monte Carlo light transport on the GPU”,Proceedings of the ACM SIGGRAPH Symposium on High Performance Graphics,pp.41-50,2011的文章中给出。

优选地,图像网格被提供由缓存存储器,至少一个处理器还被配置用于:

-只当可见性测试导致正输出时,将在交叉点处的光源的作用存储在缓存存储器中;

-在进行可见性测试之前,分布缓存存储器为为可见性测试提供的、被称为缩小的光缓存器的至少两个缓存器,上述缩小的光缓存器中的每一个对应于与像素中的每个像素相关联的光源中的一个光源;

-通过查询缩小的光缓存器进行可见性测试。

缓存存储器有利地包括分别映射到像素的缓存器元件。

更准确地说,在特定实施例中,至少一个处理器被配置用于对于像素中的每个像素,将与像素中的每个像素相关联的光源的索引存储至映射到像素中的每个像素的缓存器元件中。

还有利地,至少一个处理器被配置用于将缓存器元件集群至缩小的光缓存器中,和/或对于像素中的每个像素,将与像素中的每个像素相关联的光源的索引以及与像素中的每个像素相关联的交叉点的位置存储至缩小的光缓存器中的每一个。

优选地,至少一个处理器被配置用于并行地运行与光源中的任何一个相关联的可见性测试中的至少两个。

在优选实现方式中,设备还包括:

-至少一个输入,其被适配为接收关于3D场景和关于光源的数据;

-至少一个输出,其被适配为输出由渲染产生的渲染图像。

本公开还涉及一种用于通过路径追踪由至少两个光源照亮的3D场景对图像网格进行渲染的设备,图像网格包括像素。该设备包括:

-用于为像素中的每个像素追踪源自3D场景中的像素中的每个像素的至少一条射线,直到该射线在交叉点处遇到3D场景的对象的部件;

-用于将来自交叉点的该射线向3D场景的光源中的至少一个光源反射到对象上的部件;

-用于对交叉点和光源之间的该射线进行可见性测试的部件;

-用于只当可见性测试导致正输出时,在交叉点处添加光源的作用,以在图像网格的该像素处执行渲染的部件。

根据本公开,用于进行可见性测试的部件还被配置用于根据光源以集群方式在像素上继续进行可见性测试。

本发明还涉及一种GPU或图形处理单元,其包括被适配为创建图像的至少一个处理器,被适配为存储创建的图像的至少一个帧缓存器以及被适配为从帧缓存器到显示器提供创建的图像的、到显示器的至少一个输出。

根据本公开,GPU包括根据上述实施例中的任一实施例的用于渲染的设备。

本公开还涉及一种用于通过路径追踪由至少两个光源照亮的3D场景对图像网格进行渲染的方法,该图像网格包括像素。该方法包括:

-为像素中的每个像素追踪源自3D场景中的像素中的每个像素的至少一条射线,直到至少一条射线在交叉点处遇到3D场景的对象;

-将来自交叉点的该射线向3D场景的光源中的至少一个光源反射到对象上;

-对交叉点和光源中的至少一个光源之间的该射线进行可见性测试;

-只当可见性测试导致正输出时,在交叉点处添加光源中的至少一个光源的作用,以在图像网格的像素中的每个像素处执行渲染时。

根据本公开,该方法还包括根据光源以集群方式在像素上继续进行可见性测试,根据分别与可见性测试相关联的光源的功能在计算和/或存储器存储方面集群可见性测试。

该方法优选地由上述实施例中的任一实施例的设备运行。

另外,本公开涉及一种用于渲染3D场景的计算机程序,其包括软件代码,该软件代码被适配为当程序由处理器运行时,执行根据上述运行模式的方法的步骤。

本公开还涉及一种可由计算机读取的非暂时性程序存储设备,其有形地包含可由计算机执行的指令程序,以执行根据本公开的用于渲染3D场景的方法。

这种非暂时性程序存储设备可以是但不限于电子、磁性、光学、电磁、红外或半导体设备,或前述的任何适当的组合。应该认识到,下面的内容虽然提供了更具体的示例,但是仅仅是本领域普通技术人员容易理解的说明性的而非详尽的列举:便携式计算机磁盘、硬盘、ROM(只读存储器)、EPROM(可擦写可编程ROM)或闪存、便携式CD-ROM(压缩光盘ROM)。

附图说明

在阅读特定的和非限制性说明性的实施例的下列描述时,参考附图的描述将会更好地理解本公开,并且其他具体的特征和优点将显现,其中:

-图1是符合本公开的示意性地表示用于通过路径追踪在图像网格上渲染3D场景的设备的方框图;

-图2说明了从观察者视点通过图1的设备被应用到用于图像网格的3D场景的光采样;

-图3示出了与图2的图像网格相对应的光采样存储器;

-图4表示从图3的光采样存储器中派生的缩小的光缓存器;

-图5是示出通过图1的设备执行的连续渲染步骤的流程图;

-图6概略地示出了包括在图1中所表示的设备的图形处理装置。

具体实施方式

本描述说明了本公开的原则。因此,可以理解的是,本领域技术人员将能够设计出各种安排,尽管在本文中没有明确描述或示出,但这些安排体现了本公开的原则,并被包括在其精神和范围内。

本文所列举的所有例子和条件语言都是为了教育目的,以帮助读者理解本公开的原则和由发明者贡献的概念以改进现有技术,并被解释为不受这些具体列举的示例和条件的限制。

此外,本文中的所有陈述列举了本公开的原则、方面和实施例,以及其特定示例,旨在包括其结构和功能的等效方式。此外,它旨在使这些等效方式包括目前已知的等效方式以及将来开发的等效方式,即,无论结构如何,执行相同功能的任何开发的元素。

因此,例如,本领域的技术人员将理解本文所呈现的方框图表示体现了本公开的原则的说明性电路的概念视图。类似地,将理解任何流程图表、流程图等表示了在计算机可读介质中实质上表示的各种过程,并且无论计算机或处理器是否被显式示出,由这些计算机或处理器执行。

本公开中使用的术语“配备”和“配置”大致涵盖了本设备的初始配置、后来的配备或补充,或它们的任何组合,无论是通过材料或(包括固件的)软件部件来起作用。

可以通过使用专用硬件以及能够与合适软件一起执行软件的硬件来提供图中所示的各种元素的功能。当由处理器提供时,可以由单个专用处理器、单个共享处理器或多个单独的处理器,其中该多个单独的处理器中的一些处理器可以被共享来提供功能。此外,术语“处理器”的明确使用不应被解释为专门指能够执行软件的硬件,而是指一般的处理设备,例如可以包括计算机、微处理器、集成电路或可编程逻辑器件(PLD)。此外,能够执行相关联的指令和/数据和/或所产生的功能可以被存储在任何处理器可读介质上,比如例如,集成电路、硬盘、CD(光盘)、比如DVD(数字多功能光盘)、RAM(随机存取存储器)或只读存储器等光盘。指令可以被尤其存储在硬件、软件、固件或其任何组合中。

应当理解,图中所示的元素可以以各种形式的硬件、软件或其组合实现。优选地,这些元件在一个或多个合适编程的通用设备上由硬件和软件组合实现,该通用设备可包括处理器、存储器和输入/输出接口。

参考用于渲染3D场景的设备1的特定功能实施例描述本公开,如图1所示。

设备1被适配为通过路径追踪处理渲染由光源照亮的3D场景。

设备1是有利地被设计、被配置和/或被适配为用于执行所提到的功能且产生所提到的效果或结果的装置或装置的物理部分。在可替代的实现方式中,设备1被实施为一组装置或装置的物理部分,无论是被分组在同一机器中,还是在不同的、可能远程的机器中。

接下来,模块将被理解为功能实体,而不是材料、物理上不同的组件。因此,它们可以被实施在同一有形的和具体组件中成组在一起,或被分布到多个这样的组件中。此外,这些模块中的每一个可能自身在至少两个物理组件之间被共享。此外,在硬件、软件、固件或任何其混合形式中实现该模块。优选地它们被实施在设备1的至少一个处理器内。

设备1包括用于在3D场景中追踪射线的模块11、用于确定对应于该射线与3D场景中的对象的相交的交叉点的模块12、用于从该对象上的该射线的反射对准光源的模块13、用于执行关于光源集群的可见性测试的模块14、以及用于在交叉点处添加所产生的光源作用的模块15。模块11到15彼此链接,而模块15循环回到模块11以便在3D场景中继续射线追踪。

信息可以由用户经由与设备1交互的用户接口16输入和检索。用户接口16包括适于输入或检索数据、信息或指令的任何部件,尤其是可涵盖由本领域技术人员熟知的下列部件中的任何一个或多个:屏幕、键盘、轨迹球、触摸板、触摸屏、扬声器、语音识别系统。

设备1还被适配为从存储资源10馈送场景数据。可替代地或补充地,设备1被配置为有利地实时接收来自其他设备或设备的部分的场景数据。该场景数据包括关于几何(例如,3D场景中的对象和光源形状、尺寸和位置,包括关于视点、深度图和/或阴影图)、关于材料的光属性(例如,半透明物体、镜面或反射表面、反射率值、各种光行为表示)以及关于照明条件(例如,被认为是精确源或是区域源的光源类型、照明强度)。设备1优选地被配置为能够在数据随时间动态变化时处理这种数据。

存储资源10可以从任何种类的合适的存储部件获得,该存储部件可以尤其是RAM或比如可能在SSD(固态盘)内的闪存之类的EEPROM(电可擦除可编程只读存储器)。

在图2中明确了该方法的实现方式,示出了从观察者视点30的在2D图像网格3上表示的3D场景2。图像网格3由像素阵列构成。而且,3D场景2包括比如3D对象21和地面22的对象,并且被光源L1、L2照亮。光射线从散射到对象21、22上而被反射。

在操作中,从观察者视点30观察的3D场景2中,从像素发射路径(模块11)。当该路径中的一个路径与场景2的对象相交时,确定对应的交叉点(模块12)。在示出的示例中,这是在交叉点M1A和M2处相交的3D对象21,以及在交叉点M1B处相交的地面22的情况。

随后为上述交叉点M1A、M1B和M2中的每一个任意地选择光源中的一个光源(模块13),以及在所涉及的交叉点和相关联的所选光源之间进行可见性测试(模块14)。在示出的示例中,交叉点M1A、M1B都与光源1相关联,而交叉点M2与光源L2相关联。根据本公开,以关于光源L1、L2的集群方式对图像网格3的像素的组进行可见性测试—即对于M1A和M1B联合进行可见性测试的处理,并且对M2以可能单独的方式进行。

然后将光源L1和L2的照明作用被合适地添加到用于M1A、M1B和M2的辐射计算(模块15),这导致分别对图像网格3中的像素P1A、P1B和P2的有关表示。

在参考图3和4的具体实施方式中,下面更详细地描述被应用于可见性测试的集群操作。2D网格线被映射到图像的像素的2D图像网格3,2D缓存存储器S(比如缓存器)被用于光采样。该2D缓存存储器由此被映射到计算网格和图像网格3上。计算网格中的每个线负责计算用于像素中的一个像素的路径。

在沿着路径的每次反射处,为当前像素任意选择的光源具有存储在2D缓存存储器S中的索引。在示出的示例(图3)中,根据图像网格3的像素来划分光采样存储器S,使得位置B1A、B1B和B2分别对应于像素P1A、P1B和P2并接收相关联的数据。

光采样存储器S有利地被动态地缩小为N个小缓存器,N是所触及

(involved)的光源的数量。在示例(图4)中,N=2且小(或缩小的)缓存器RB1和RB2分别对应于光源L1和L2。然后,缩小的缓存器RB1包含分别对应于交叉点M1A和M1B的两个位置RB1A和RB1B,而缩小的缓存器RB2包含对应于交叉点M2的一个位置。

然后在这N个小缓存器(RB1、RB2)上计算反向射线查询以求解采样光源和表面之间的可见度。

在运行中,如图5所示,设备1优选地在渲染操作中继续进行如下步骤。在开始阶段(步骤41),在3D场景2中发射路径。然后,对于每个路径(方框42),检查是否达到最大路径长度(步骤43)。如果是,结束对该路径的处理(步骤44)。否则,检查路径是否与3D场景2相交(步骤45)。如果否,结束对该路径的处理(步骤44)。

否则,任意选择与从在路径和3D场景2之间的相交获得的交叉点有关的光源(步骤46)。有关的光源索引被相应地存储在光采样存储器S中(步骤47)。

然后,共同地对于路径以及因此图像网格3的像素,光采样存储器S被缩小为N个小光缓存器(步骤48),以及对上述光缓存器计算反向阴影射线(步骤49)。

在GPU着色器或计算内核中有利地实现上述特征。

图6中可见的特定设备5是实现上面所描述的设备1。它对应于例如个人计算机(PC)、膝上型计算机、平板电脑、智能电话或游戏控制台—比如生产和显示直播图像的专业游戏控制台。装置5包括以下元件,它们通过也传送时钟信号的地址和数据的总线55相互连接:

-微处理器51(或CPU);

-包括多个图形处理器单元(或GPU)520和图形随机存取存储器(GRAM)521的图形卡52;

-ROM类型的非易失性存储器56;

-RAM 57;

-一个或多个I/O(输入/输出)设备54,比如例如键盘、鼠标、操纵杆、网络摄像机;用于引入比如例如声音识别的命令的其他模式也是可能的;

-电源58;以及

-射频单元59。

装置5还包括直接连接到图形卡52的显示屏类型的显示设备53,以显示在图形卡中运算的和组成的合成图像,例如直播。使用专用总线将显示设备53连接到图形卡52提供了具有大得多的数据传输比特率的优点,并因此缩小了用于由图形卡组成的图像的显示的等待时间。根据一个变型,显示设备在装置5的外部并且通过电缆或无线地连接到显示设备以便传输显示信号。装置5,例如图形卡52,包括用于传输或连接的接口,该接口被适配为将显示信号传输到外部显示部件,比如LCD或等离子屏幕或视频投影仪。在这方面,RF单元59可以被用于无线传输。

注意,在存储器521、56和57的描述中使用的“寄存器”一词在所提及的每个存储器中指定低容量的存储区(某些二进制数据)以及大容量的存储区(能够使整个程序被存储,或者表示要被运算或要被显示的数据的数据的所有或部分)。而且,可以以任何方式安排和构成表示GRAM 521的寄存器,并且它们中的每一个不一定对应于相邻的存储器位置,并且可以以其它方式分布(尤其涵盖一个寄存器包括多个较小寄存器的情况)。

当接通时,微处理器51加载并运行包含在RAM 57中的程序的指令。

随机存取存储器57尤其包括:

-在寄存器570中,负责接通装置5的微处理器51的操作程序,

-在寄存器571中,表示场景的参数(例如,场景的(多个)对象的建模参数、场景的照明参数);

-在寄存器572中,采样参数,比如,光采样存储器S和小光缓存器RB1、RB2。

实现本公开特定的方法的步骤并且如上所述的算法被存储在与实现这些上述的装置5相关联的图形卡52的存储器GRAM 521中。当接通且一旦表示环境和峰形功能数据的参数571和572被加载到RAM 57中时,图形卡52的图形处理器520将这些参数加载到GRAM 521中,并且运行这些算法的指令,例如以使用HLSL(高级着色语言)语言或GLSL(OpenGL着色语言)的“着色器”类型的微程序的形式。

随机存取存储器GRAM 521尤其包括:

-在寄存器5211中,表示场景的参数,

-在寄存器5212中,加载的采样参数,

-在寄存器5213中,在渲染操作的帧中计算的本地辐射。

根据一个变型,与图元有关的至少某些数据被存储在RAM 57中并由微处理器51处理。然而,这种变型导致在包括表示环境的图像的组成中更长的等待时间,其中该环境从被包含在GPU 520中的微程序组成的。由于数据必须通过总线55从图形卡传输到随机存取存储器57,对于该总线,传输容量通常低于在图形卡中可用于从GPU 520到GRAM 521的数据传输,反之亦然。

根据另一个变形,电源58在装置1的外部。

基于本公开和具体实施例,在不脱离本发明的范围的情况下,其他实现方式是可能的并且在本领域技术人员的能力范围内。具体的元件可以尤其以保持在本公开的框架内的任何方式被互换或被关联。而且,不同实现方式的元件可以被组合、补充、修改或移除以产生其他实现方式。尤其是,任何BRDF(双向反射分布功能)模型都可以在保留所描述的功能的同时被利用。本公开预期所有这些可能性。

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