CN114764841A - 使用内建函数用于光线追踪应用中的阴影去噪 - Google Patents

使用内建函数用于光线追踪应用中的阴影去噪 Download PDF

Info

Publication number
CN114764841A
CN114764841A CN202210033280.0A CN202210033280A CN114764841A CN 114764841 A CN114764841 A CN 114764841A CN 202210033280 A CN202210033280 A CN 202210033280A CN 114764841 A CN114764841 A CN 114764841A
Authority
CN
China
Prior art keywords
values
thread
penumbra
ray
pixels
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
Application number
CN202210033280.0A
Other languages
English (en)
Inventor
P·科兹洛夫斯基
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of CN114764841A publication Critical patent/CN114764841A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/70Denoising; Smoothing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/06Ray-tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/60Shadow generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/20Image enhancement or restoration using local operators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20004Adaptive image processing
    • G06T2207/20012Locally adaptive
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

公开了使用内建函数用于光线追踪应用中的阴影去噪。在示例中,并行处理器的可调度单元的线程(例如,线程束或波前)可以用于相对于一个或更多个光源对像素的可见性进行采样。线程可接收由可调度单元中的其他线程执行的采样的结果,以计算指示区域是否对应于半影的值(例如,使用波内建函数)。每个线程可对应于各自的像素,该区域可对应于可调度单元的像素。帧可以被划分成区域,其中每个区域对应于各自的可调度单元。在对光线追踪的阴影信息进行去噪时,所述区域的值可用于避免将去噪滤波器应用于在半影外部的区域的像素,同时将去噪滤波器应用于在半影内的区域的像素。

Description

使用内建函数用于光线追踪应用中的阴影去噪
背景技术
光线追踪是用于通过追踪光在虚拟环境中的路径并模拟光与虚拟对象的交互作用来渲染图像的方法。光线追踪技术可以用于模拟各种光学效应——如阴影、反射和折射、散射现象和色散现象(诸如,色差)。当使用光线追踪渲染软阴影时,阴影追踪的常规方法可以投射来自虚拟环境中的位置的任何数量的阴影光线,以采样像素相对于光源的照明条件。光线追踪的样本可以被组合并应用于像素。在半影(阴影中光被部分遮挡的区域)中,一些阴影光线可能对于光源是可见的,而其他阴影光线可能被遮挡。可能需要大量的阴影光线以使组合的照明条件收敛到准确的结果。为了节省计算资源并减少渲染时间,阴影光线可被稀疏地采样,从而导致有噪声的阴影数据。有噪声的阴影数据可使用去噪技术来滤波以减少噪声,并产生更接近地近似于经完全采样的场景的渲染的最终渲染。
用于对阴影数据进行去噪的计算资源可通过将去噪聚焦在半影内的像素上来减少。例如,在半影之外的完全照亮或完全阴影(shadowed)像素不需要去噪,因为相应的光线追踪样本反映那些像素在阴影中。可生成半影掩模且用于指示在去噪期间哪些像素在半影内。生成半影掩模通常涉及对阴影数据执行的后处理传递,并且可能由于访问全局存储器而在计算上是昂贵的。
发明内容
本公开的实施例涉及使用波内建函数(wave intrinsic function)来检测用于阴影去噪的半影区域。具体地,本公开部分地涉及利用并行处理器的可调度单元的线程,所述可调度单元用于对光线追踪中的可见性进行采样,以便识别用于对光线追踪的阴影进行去噪的半影区域。
与常规方法相比,所公开方法可用于确定帧的哪些像素在半影内,同时避免后处理传递(pass)。根据本公开的方面,并行处理器的可调度单元(例如,线程束或波前)中的线程可用于相对于一个或更多个光源对像素的可见性进行采样。所述线程中的至少一个线程可以接收由可调度单元中的其他线程(例如,每个其他线程)执行的采样的结果,以计算指示区域是否对应于半影的值(例如,使用并行处理器的波内建函数)。在至少一个实施例中,每个线程可对应于各自的像素,该区域可对应于可调度单元的像素。进一步,帧可被划分成像素区域,其中每个区域对应于相应的可调度单元。在对光线追踪的阴影信息应用去噪传递时,可使用该区域的值来避免将去噪滤波器应用于半影外部的区域的像素,同时将去噪滤波器应用于半影内的区域的像素。例如,所述值可用于生成半影掩模,且所述半影掩模可用于对阴影掩模进行去噪。
本公开进一步提供用于确定去噪滤波器的参数的方法。根据本公开的方面,可调度单元的线程可用于对场景的一个或更多个方面(例如,可见性、全局照明、环境遮挡等)进行采样。线程中的至少一个线程可以接收由可调度单元中的其他线程(例如,每个其他线程)采样的结果,以(例如,使用并行处理器的波内建函数)计算指示场景的区域的一个或更多个属性的值。在对渲染数据应用去噪传递时,该区域的值可用于确定应用于该渲染数据的去噪滤波器的一个或更多个参数。例如,所述值可用于确定滤波器半径和/或包括在滤波中的值的范围。
附图说明
以下参照所附附图详细描述用于使用波内建函数来检测用于阴影去噪的半影区域的本系统和方法,其中:
图1是根据本公开的一些实施例的示出了用于使用图像渲染系统生成输出图像的示例过程的数据流图;
图2是根据本公开的一些实施例的示出了渲染的值可如何对应于掩模的值的示例的示图;
图3是根据本公开的一些实施例的示出了捕获虚拟环境的光线追踪样本的示例的示图;
图4是根据本公开的一些实施例的示出了用于使用可调度单元确定可见性值和指示场景中的位置对应于半影的值的方法的示例的流程图;
图5是根据本公开的一些实施例的示出了用于使用一个或更多个可调度单元的线程组来确定可见性的光线追踪样本和指示像素是否对应于半影的值的方法的示例的流程图;
图6是根据本公开的一些实施例的示出了用于使用可调度单元确定光线追踪样本和用于确定去噪滤波器的一个或更多个参数的一个或更多个值的方法的示例的流程图;
图7是适合用于实现本公开的一些实施例的示例计算环境的框图;以及
图8是适合用于实现本公开的一些实施例的示例数据中心的框图。
具体实施方式
本公开涉及使用波内建函数来检测用于阴影去噪的半影区域。具体地,本公开部分地提供利用并行处理器的可调度单元的线程,所述可调度单元的线程用于对光线追踪中的可见性进行采样,以便识别用于对光线追踪的阴影进行去噪的半影区域。
所公开的方法可用于确定用于告知渲染数据的去噪而不需要专用后处理传递的统计值。例如,统计值可用于确定在渲染数据的去噪期间帧的哪些像素在半影内和/或用于引导渲染数据的滤波。渲染数据可以包括空间和/或时间光线追踪样本。
根据本公开的方面,并行处理器的可调度单元(例如,线程束或波前)的线程可用于相对于像素对虚拟环境的一个或更多个方面进行采样(例如,通过执行着色器代码)。在确定哪些像素在半影内的实施例中,条件可包括像素相对于一个或更多个光源的可见性。
线程可以被布置成线程组,其中线程组可以指调度单元的每个线程或可调度单元的线程的子集。来自组的线程中的至少一个线程可以接收由组内的其他线程执行的采样的结果。一个或更多个线程可以计算关于光线追踪的样本的统计值。例如,针对可见性,每一线程可计算指示帧的区域是否对应于半影的值。在至少一个实施例中,并行处理器的波内建函数可以用于检索对应于来自其他线程的光线追踪样本的值。例如,波活动和(waveactive sum)函数可将值的总和(统计值)返回给线程。由线程计算的统计值可用于通知对渲染数据的滤波。例如,统计值可以用作掩模值或者可以由线程用来计算掩模值。掩模值可存储在掩模中,所述掩模可在去噪期间访问。在至少一个实施例中,掩模可以是指示哪些像素对应于半影的半影掩模。
在至少一个实施例中,每一线程可对应于各自的像素,且针对其计算统计值的帧的区域可对应于线程组的像素。进一步,帧可被划分成像素区域,其中每个区域对应于各自的线程组和/或可调度单元。使用所公开的方法,可能不需要后处理传递来确定用于通知对渲染数据进行去噪的统计值,从而减少用于对渲染数据进行去噪的处理时间。例如,可调度单元的线程可以确定虚拟环境的样本和来自样本的统计值(例如,作为执行光线生成着色器的一部分)。统计值可从线程的寄存器计算,所述寄存器可具有显著低于用于后处理的存储器的访问时间。
在至少一个实施例中,在对渲染数据(例如,光线追踪样本)应用去噪传递时,可以使用区域的统计值来避免将去噪滤波器应用于区域的一个或更多个像素。例如,在半影掩模的掩模值指示区域在半影外部的情况下,可不将去噪滤波器应用于该区域内的像素。本公开进一步提供用于确定去噪滤波器的一个或更多个参数的方法。例如,除了或替代使用统计值来确定在应用去噪滤波器时跳过哪些像素,可使用统计值来确定用于像素的去噪滤波器的一个或更多个参数。参数的示例包括定义滤波器半径、滤波器权重和/或在滤波中包括值的范围的参数。
参见图1,图1是根据本公开的一些实施例的示出了用于使用图像渲染系统100生成输出图像120的示例过程140的数据流图。本文描述的这种和其他布置仅作为示例被阐述。除了所示的那些布置和元素之外或代替所示的那些布置和元素,可以使用其他布置和元素(例如,机器、接口、功能、顺序、功能分组等),并且一些元素可以一起省略。进一步地,本文中所描述的许多元件是可实现为分立或分布式组件或结合其他组件且以任何合适组合、布置或位置实现的功能实体。本文中描述为由实体执行的各种功能可由硬件、固件和/或软件执行。例如,各种功能可由执行存储在存储器中的指令的处理器执行。
在至少一个实施例中,图像渲染系统100可以至少部分地在图8的数据中心800中实现。作为不同示例,图像渲染系统100可包括或被包括在用于执行模拟操作的系统、用于执行模拟操作以测试或验证自主机器应用的系统、用于执行深度学习操作的系统、使用边缘设备实现的系统、合并一个或更多个虚拟机(VM)的系统、至少部分地在数据中心中实现的系统、或至少部分地使用云计算资源实现的系统的一个或更多个中。
图像渲染系统100可被配置为渲染虚拟环境的图像,诸如图3的虚拟环境300。为了渲染虚拟环境(其也可被称为场景)的图像,图像渲染系统100可采用光线追踪器102、图像滤波器104、图像组合器106和三维(3D)渲染器108。
光线追踪器102可以被配置为使用各种潜在光线追踪技术中的任何技术来追踪穿过虚拟环境的光线,以便生成虚拟环境的一个或更多个方面(例如,诸如可见性之类的光照条件)相对于虚拟环境中的位置的光线追踪样本。可以使用一个或更多个并行处理器(如图7的一个或更多个GPU 708)的可调度单元来确定光线追踪样本。进一步地,光线追踪样本可以被捕获或以其他方式用于生成渲染数据122(例如,由可调度单元)。光线追踪器102还可以被配置为(例如,由可调度单元)从光线追踪样本计算值,诸如统计值(例如,可调度单元中的可见性值之和)。所述值可使用可调度单元从渲染数据122确定,且可指示相应位置和/或像素是否对应于阴影的半影。在实施例中,这些值可以被捕获或以其他方式用于生成掩模数据124。
图像滤波器104可以被配置为至少基于从光线追踪样本计算的值(例如,使用掩模数据124)对来自光线追踪器102的渲染数据122(或其他渲染数据)进行滤波。例如,在值指示位置或像素对应于半影(例如,图1的掩模数据124中的白色像素)的情况下,去噪器可将去噪滤波器应用于该位置或像素。在值指示位置或像素对应于完全照亮或完全阴影区域(例如,图1的掩模数据124中的黑色像素)的情况下,去噪器可以跳过将去噪滤波器应用于该位置或像素(也被称为“提前退出”)。
在一些实施例中,图像组合器106可以将对应于经滤波的渲染数据122(例如,经滤波的阴影/可见性数据)的数据与表示虚拟环境的3D渲染的数据(例如,没有光线追踪的阴影数据)进行组合以生成输出图像120。3D渲染器108可以被配置为使用可以包括或可以不包括光线追踪的任何合适的方法来生成3D渲染。在实施例中,3D渲染可以包括虚拟环境的帧的像素颜色信息。
如本文所描述的,光线追踪器102可以被配置为使用各种潜在光线追踪技术中的任何技术来追踪通过虚拟环境的光线,以便生成虚拟环境的一个或更多个方面相对于虚拟环境中的位置的光线追踪样本。光线追踪器102还可以被配置为从光线追踪样本计算值,诸如统计值(例如,可调度单元中的可见性值之和),其可以由渲染管线的其他组件(诸如图像滤波器104)利用。在各个实施例中,光线追踪器102可以利用一个或更多个处理器的可调度单元进行并行处理以生成光线追踪样本和从光线追踪样本导出的值。在这样做时,(例如,在掩模数据124中反映的)值可在不需要后处理传递的情况下导出。在其他潜在优点中,可以比使用常规方法更快地计算值,因为与共享或全局存储器相反,可以从线程的寄存器访问用于计算值的数据(例如,渲染数据122)。
在各个实施例中,可调度单元可以指可以用于并行处理的硬件可调度线程组。线程可指代GPU线程或CPU线程。在不同示例中,线程可以至少部分地使用单指令、多线程(SIMT)执行模型来实现。线程也可被称为工作项、要处理的数据的基本元素、个体通道或单指令、多数据(SIMD)通道操作的序列。
可调度单元的示例包括与NVIDIA术语(例如,基于CUDA的技术)相关的线程束或与AMD术语(例如,基于OpenCL的技术)相关的波前。对于基于CUDA的技术,作为示例而非限制,可调度单元可以包括32个线程。对于基于OpenCL的技术,作为示例而非限制,可调度单元可以包括64个线程。在一个或更多个实施例中,可调度单元可以指SIMD指令的线程。在一个或更多个实施例中,可调度单元可以包括在锁定步骤中执行、运行相同指令并且遵循相同控制流路径的操作的集合。在一些实施例中,可调度单元的通道或线程的个体或组可被屏蔽执行。
在各个实施例中,光线追踪器102可以操作一个或更多个着色器或程序,该一个或更多个着色器或程序由一个或更多个可调度单元执行以用于并行处理,以生成光线追踪样本和从光线追踪样本导出的值。例如,光线追踪样本可由与从光线追踪样本导出的值相同的着色器生成。着色器可以是例如光线生成着色器,其中光线生成着色器的代码可以由一个或更多个线程组和/或可调度单元(例如,并行地)执行。
现在参见图2,图2是根据本公开的一些实施例的示出了渲染200的值如何可以对应于掩模202的值的示例的图。渲染200可以对应于图1的渲染数据122并且掩模202可以对应于图1的掩模数据124。在至少一个实施例中,光线追踪器102可将渲染或帧划分成区域,其中每个区域可对应于虚拟环境300的一个或更多个像素和/或位置。例如,渲染200可以被划分为区域210A、210B、210C、210D、210E至210N(本文中还统称为“区域210”)。在至少一个实施例中,光线追踪器102(例如,由线程执行的着色器代码)可以配置区域210,使得它们不重叠并且包围全部帧或渲染。例如,在图2中,每个区域210对应于帧的像素的矩形区域。
在示出的示例中,每个区域210对应于可调度单元,并且可调度单元内的每个线程对应于区域210的相应像素或单元。尤其是,所示出的示例涉及线程束,其中每个区域210可对应于32个像素和线程。在渲染200是Hrender像素xVrender像素且每一区域是Hregion像素xVregion像素的情况下,在渲染200中可存在Hrender/Hregion x Vrender/Vregion区域。图2中的每个区域210包括8x4像素区域,其对应于可调度单元的32个像素。因此,在所示出的示例中,针对1920×1080像素的帧,可以有64,800个区域210。其他示例可涉及波前,且每一区域210可对应于64个像素和线程。光线追踪器102可以任何合适的方式分布可调度单元的像素或单元。例如,在不同实施例中,可调度单元可能不一定是矩形的,可能不一定是连续的,可能不一定与其他可调度单元不重叠,和/或每个线程可能不一定对应于单个像素。
如本文所描述的,光线追踪器102可以使用可调度单元的线程来确定对应于光线追踪样本的值。在至少一个实施例中,区域210的像素或单元可以存储光线追踪样本的值和/或从光线追踪样本导出的值。例如,每个线程可以将由该线程生成的像素或单元的光线追踪样本的值存储在寄存器中。
关于图3描述了光线追踪样本的示例。现在参见图3,图3是根据本公开的一些实施例的示出捕获虚拟环境300的光线追踪样本的示例的示图。图像渲染系统100可以被配置为使用光线追踪器102以使用任意数量的光线追踪传递来渲染图像,以便对虚拟环境的条件进行采样。
图3的示例是关于可见性的样本,并且更具体地,关于一个或更多个像素相对于虚拟环境300中的光源的可见性的样本来描述的。在这样的示例中,图2的渲染200可以对应于帧的阴影掩模。然而,所公开的方法可用其他类型的光线追踪样本来实现,这些样本可包括形成二进制信号(例如,具有0或1的值)或非二进制信号的那些样本。在一些实施例中,光线追踪样本可以表示、指示或以其他方式对应于一个或更多个像素和/或位置相对于虚拟环境300的环境遮挡、全局照明或其他属性。当对虚拟环境的不同方面进行采样时,光线追踪技术可以被适配为适合被模拟的效果。进一步地,在本示例中,当光线与虚拟环境300中的位置(例如,在光源320或遮光板(occluder)322处)交互时,没有额外的光线可以从该位置投射。然而,对于其他光线追踪效果或技术,可以从其投射一个或更多个附加光线。
在至少一个实施例中,光线追踪器102可以使用光线生成着色器投射或追踪光线。图3中相对于光线追踪传递314示出了光线追踪器102可以追踪(例如,每像素使用一条光线)的通过虚拟环境300的光线的各种示例。例如,光线340、光线342和光线344在针对光线追踪传递314示出的九条光线中被单独地标记。光线追踪器102可使用光线来相对于虚拟环境300中的位置共同地对虚拟环境300的一个或更多个方面进行采样。示出了区域210D的三十二个位置的示例,其中位置330、332和334被单独地标记。然而,在光线追踪传递314中可以类似地对每个区域210进行采样。
在至少一个实施例中,每条光线与这些位置之一相关联(例如,从该位置投射)并且用于生成针对该位置的光线追踪样本。例如,光线340与位置332相关联,光线342与位置330相关联,并且光线344与位置334相关联。在一些实施例中,光线追踪器102从其投射光线的每个位置对应于区域210的相应像素,如图所示。例如,位置(诸如位置330、332和334)可以通过将像素的虚拟屏幕(例如,来自z缓冲区)变换到世界空间中来确定。虚拟屏幕可以表示虚拟环境300中的相机的视图,并且在一些实施例中,位置可以被称为(例如,渲染200的)像素或世界空间像素。在其他示例中,位置可不具有与像素的这种一对一对应关系。进一步,在其他示例中,位置可以被确定为相应眼睛光线(例如,从相机投射的通过包括像素的虚拟屏幕的)与虚拟环境300交互的相应点和/或区域。
在不同的实施例中,在某位置处的样本的准确性可能是有限的,因为每条光线可以仅提供该位置的部分信息。照此,使用有限数量的光线来对虚拟环境300进行采样可能导致图像中(特别是对于虚拟环境300中的某些位置)出现噪声。为了说明前述内容,在所示出的示例中使用的光线是用于在相对于虚拟环境300中的光源320的位置处对光照条件的一个或更多个方面进行采样的阴影光线。图像渲染系统100可使用该信息,例如,以基于各位置处的光照条件在图像中渲染阴影。在一些实施例中,从各位置投射光线以对光源320处的随机或伪随机位置进行采样。光线追踪器102可使用任何合适的光线追踪方法,诸如随机光线追踪。可以使用的随机光线追踪技术的示例包括采用蒙特卡罗或准蒙特卡罗采样策略的那些技术。在所示的示例中,光线追踪器102(例如,每个线程)在光线追踪传递314中每位置和/或像素投射一条光线用于采样。在其他实施例中,每位置或像素可以投射不同数量的光线,对于某些位置或像素可以不投射光线,和/或对于不同位置或像素可以投射不同数量的光线(例如,由每个线程)。在针对像素或位置投射多条光线的情况下,渲染200中的像素或单元的值可对应于像素或位置的光线追踪样本的值的合计(例如,平均)。
虽然仅示出了光源320,但各位置处的光照条件可以类似地相对于虚拟环境300中的其他光源和/或对象进行采样,其可以与关于光源320得到的光线追踪样本组合,或可用于生成可由图像滤波器104滤波且提供给图像组合器106的附加渲染200(和掩模202)。例如,不同光源的光照条件可单独地确定和滤波(例如,使用关于图1描述的滤波技术),且由图像组合器106组合(例如,作为图像组合器106的另一输入)。
如所示,一些光线(诸如光线344)可以与光源320相互作用,从而产生指示来自光源320的光可以照亮相应位置的光线追踪样本。在一些实施例中,落入这个类别的光线可以被分配可见性值1,以指示它们相对于光源320是可见的(在图2和图3中由无阴影指示)。其他光线(诸如光线340和光线342)可以与物体相互作用,从而导致光线追踪样本指示来自光源320的光至少部分地被阻挡和/或被阻止到达这些位置。这种物体的一个示例是遮光板322,该遮光板可以阻挡光线到达光源320。在一些实施例中,落入这个类别的光线可以被分配可见性值0,以指示它们相对于光源320是不可见的(在图2和图3中由阴影指示)。因为可见性值可假定两个潜在值中的一者,所以其可对应于二进制信号。
在至少一个实施例中,线程可确定对应位置的可见性,且可存储对应于线程的区域210的一个或更多个像素的对应值(例如,根据着色器代码)。例如,每一线程可确定位置/像素的可见性值(例如,1或0)且将其存储在寄存器中。在至少一个实施例中,每个线程可以具有用于存储一个或更多个值的专用寄存器。图1的渲染数据122可以表示存储在线程的寄存器中的值。
在图3的示例中,光线追踪器102可以确定在区域210D中,位置330和332对于光源320是不可见的并且所有其他位置是可见的。位置330是可以在由遮光板322投射的阴影的半影内的位置的示例,并且可以通过组合从多个光线得到的光线追踪样本来更准确地计算光照条件。例如,仅使用光线342生成的位置330的光线追踪样本可以指示位置330被完全阻挡而不能接收来自光源320的光。然而,如果使用另一条光线生成位置330的光线追踪样本,则它可以指示位置330至少部分地被光源320照亮,使得位置330在半影内。
因此,限制用于生成位置的样本的光线的数量可导致噪声,从而导致由图像渲染系统100渲染的数据中的视觉伪像。图像滤波器104可用于实现去噪技术以减少噪声。在不同示例中,去噪技术可以包括:图像滤波器104在空间上和/或时间上对与来自光线追踪器102的光线追踪样本相对应的光照条件数据或其他渲染数据进行滤波。例如,图像滤波器104可以将一个或更多个空间滤波器传递和/或时间滤波器传递应用于来自光线追踪器102的渲染数据122。根据本公开,图像滤波器104可以使用掩模数据124或以其他方式与由线程从光线追踪样本的值生成的值相对应的数据作为输入来通知去噪。
返回图2,线程可以将由该线程从至少一个其他线程的光线追踪样本的值生成的一个或更多个值存储在掩模202的区域中。掩模202的区域可以包括掩模202的一个或更多个像素或单元。在本示例中,掩模202的每个区域是单个像素或单元,但是在其他情况下,不同的区域可以包括不同数量的像素或单元和/或每个区域可以包括多于一个的像素或单元。掩模202包括区域212A、212B、212C、212D和212E至212N(统称为区域212)。在一些示例中,渲染200的每一区域210被映射到单个区域212(例如,通过由线程执行的着色器代码)。因此,掩模202可以包括64,800个像素或单元。在其他示例中,区域210可以被映射到多个区域212和/或区域212可以对应于多个区域210(例如,来自多个区域210的值可以由线程混合或以其他方式聚合以形成一个或更多个区域210中的值)。
例如,与区域210A相对应的可调度单元的至少一个线程可以将由该线程生成的值存储在掩模202的区域212A中,其中该值是从可调度单元中的线程的值生成的。此外,与区域210B相对应的可调度单元的线程可以将由该可调度单元中的线程生成的值存储在掩模202的区域212B中,其中该值是从可调度单元中的线程的值生成的。类似地,区域210C可以对应于区域212C,区域210D可以对应于区域212D,区域210E可以对应于区域212E,并且区域210N可以对应于区域212N。
如本文所述,线程可以至少基于线程组和/或可调度单元内的每个线程的光线追踪样本计算掩模202的值(其也可以被称为掩模值)。通常,可调度单元的线程可能仅能够访问由可调度单元中的其他线程生成的光线追踪样本的值。因此,每个线程组可以在同一可调度单元内。在所示的示例中,每个可调度单元包括单个线程组,并且该线程组包括可调度单元的所有线程。至少一个线程(例如,每个线程)可以聚合可调度单元的光线追踪样本,并且至少一个线程(例如,线程之一)可以将结果存储在掩模202的区域中。由此,掩模202可具有比正被渲染的帧低的分辨率,这可降低处理和存储要求。
在其他示例中,可调度单元可以被划分成多个线程组。在调度单元包括多个线程组的情况下,可为每个线程组提供掩模202的区域212或所述组可共享区域212。例如,渲染200的区域210N可包括对应于左手侧4X4像素组的16个线程的组和对应于右手侧4X4像素组的16个线程的组。在该示例中,掩模202的区域212N可以替代地包括两个相邻区域——区域212D的每个子组一个区域。作为示例,可调度单元的相同线程可以计算并存储用于两个线程组的值,或者不同线程可以计算并存储用于每个线程组的掩模值。例如,对于每个线程组,该组内的每一线程可计算掩模值,且那些线程中的至少一者可将该值存储在掩模202中(例如,缓冲区中)。将调度单元分成多个线程组可用于增加掩模202的分辨率。
在至少一个实施例中,线程可以接收光线追踪样本并且使用一个或更多个波内建函数计算掩模202的值。波内建函数可以指代可用于由可调度单元的一个或更多个线程执行的代码中的内置(build-in)函数。波内建函数可以允许线程访问来自可调度单元中的另一线程的值。可采用不同波内建函数,其可取决于将由针对掩模202计算的一个或更多个值捕获的格式和/或所需信息。作为示例,线程可以执行波活动和函数。波活动和函数可以从可调度单元的每个线程(从寄存器)接收光线追踪样本的值(例如,可见性值),计算这些值的和,并且作为结果返回所计算的和。
在所示的示例中,所计算的值可指示虚拟环境的一个或更多个像素和/或位置是否在半影内。例如,光线追踪样本的值可以是可见性值,其为0或1。对于渲染200的区域210,可见性值的总和可在0与32之间。值0可指示对应于该区域的位置完全在阴影内。区域210E是可以被指示为完全在阴影内的区域的示例。值32可指示对应于区域210的位置被完全照亮。区域210A、210B和210C是可被指示为完全照亮的区域的示例。0与32(组中的线程的总数)之间的值可指示对应于该区域的各位置在半影中。区域210D和210N是可被指示为在半影中的区域的示例。虽然针对整个区域210提供了示例,但是它们可以类似地应用于区域210的子组或区域。
如本文所描述的,可以至少基于从光线追踪样本计算出的值来生成掩模202。当掩模202的掩模值指示像素和/或虚拟环境300中的位置是否对应于半影时,掩模202可被称为半影掩模。虽然这些值(例如,由波内建函数返回的)可以用作掩模202的掩模值,但是在至少一个实施例中,线程使用值来计算掩模值并且将该掩模值存储在掩模202中。作为示例,掩模202的掩模值可为二进制值,且每个二进制值可指示区域212是否对应于半影。在至少一个实施例中,值1可指示区域212对应于半影,且值0可指示区域212在半影之外或不对应于半影(被指示为完全照亮或完全在阴影内)。因此,使用上面的示例,当从光线追踪样本计算的值是0或32时,线程可以计算并存储掩模值1。当从光线追踪样本计算出的值大于0且小于32时,线程可以计算并存储掩模值0。由此,区域212D和212N具有掩模值0,并且其他区域212具有值1。虽然使用0和32作为阈值的示例,但可使用不同的阈值来确定掩模值和/或可仅采用阈值中的一者或另一者。
虽然在本示例中由线程从至少一个其他线程的光线追踪样本计算的一个或更多个值是总和,但是可以计算其他类型的统计值。例如,在至少一个实施例中,所计算的值是该线程组的值的方差。进一步地,多于一个统计值可被计算并且可被用于确定掩模值,或者可被用于另一目的。例如,该总和可由图像滤波器104使用以确定是否跳过将去噪滤波器应用于像素,且所述方差可用于确定应用于像素的去噪滤波器的半径和/或将包括在由去噪滤波器执行的去噪中的值的范围。关于光线追踪样本的统计信息对于对各种不同类型的光线追踪样本中的任何一种进行去噪可能是有用的,并且所公开的实施例不限于阴影或可见性相关的样本。例如,如本文所描述的,光线追踪样本可以具有虚拟环境的任何条件、光条件或其他方式(例如,击中距离、深度等)。
如本文所描述的,图像滤波器104可以使用掩模数据124或以其他方式对应于由线程从光线追踪样本的值(例如,不一定是掩模)生成的值的数据作为输入来通知去噪。图像滤波器104可使用各种可能的滤波技术中的任一者来对数据进行滤波。在一些示例中,图像滤波器104使用交叉(或接合)双边滤波器来执行滤波。交叉双边滤波器可以使用高斯分布的权重(其考虑像素之间的距离、方差和/或其他差)用附近像素的加权平均值来替换每个像素,以引导图像。在至少一个实施例中,这可以涉及掩模数据124或以其他方式与由线程从由图像滤波器104分析以确定滤波器权重的光线追踪样本的值生成的值相对应的数据。可以使用边缘停止函数使用G缓冲区属性来识别公共表面,以改善交叉双边滤波器在输入噪声下的鲁棒性。
在至少一个实施例中,图像滤波器104使用掩模数据124来基于与像素相关联的掩模值提早或跳过将去噪滤波器应用于像素。例如,图像滤波器104可至少基于指示像素不对应于半影的掩模值来跳过对像素应用去噪滤波器。在至少一个实施例中,当针对去噪对像素进行评估时,图像滤波器104将掩模数据中的每个区域212的一个或更多个值映射到与区域210(或更一般地,线程组)相对应的每个像素。例如,来自掩模202的区域212A的值0可用于对应于渲染200中的区域210A的每一像素。基于图像滤波器104确定像素被映射到值1或以其他方式与值1相关联,图像滤波器可将去噪滤波器应用于像素,或可以其他方式跳过像素。
如本文中所描述的,可至少基于由线程计算的掩模值和/或统计值来确定由图像滤波器104应用的滤波器和/或滤波器传递的一个或更多个参数。在至少一个实施例中,可以至少部分地基于一个或更多个像素的线程计算的值(例如,方差)来引导对一个或更多个像素的滤波。例如,一个或更多个参数定义滤波器值的范围、像素的滤波器权重,和/或滤波器和/或滤波器传递的滤波器半径。图像滤波器104可使用一个或更多个参数对渲染数据的空间和/或时间样本进行滤波。在不同实例中,滤波器值的范围可定义一个或更多个像素的一组滤波器值,且可基于一个或更多个像素的方差。例如,在对像素应用滤波器和/或滤波器传递时,图像滤波器104可至少基于该组滤波器值在所述范围之外而将该组滤波器值从所述滤波中排除。在实施例中,范围和/或滤波器半径可以随着方差而增加和减小。
可使用滤波器内核来应用本文中所描述的各种滤波器和/或滤波器传递中的任一者。滤波器还可具有一个或更多个滤波器方向。滤波器的滤波器内核可指代定义用于处理图像(例如,像素的数据值)的图像数据(和/或光照条件数据或渲染数据)以改变图像的一个或更多个特性(诸如,图像的像素的阴影和/或颜色)的一个或更多个卷积的矩阵(例如,矩形数组)。在一些示例中,可将滤波器内核应用为可分离滤波器。在作为可分离滤波器应用滤波器时,可使用多个子矩阵或滤波器来表示矩阵,所述子矩阵或滤波器可在多次传递中单独地应用于图像数据。当确定或计算可分离滤波器的滤波器核心时,本公开预期可直接计算子矩阵,或可从另一矩阵导出子矩阵。
滤波器内核的矩阵的每一元素可对应于相应像素位置。矩阵的像素位置中的一者可表示对应于对其应用滤波器的像素的初始像素位置,且可位于矩阵的中心(例如,用于确定滤波器的位置)。例如,当将滤波器应用于对应于图3的位置332的像素时,所述像素可定义初始像素位置。在应用一些滤波器时,可在相对于像素确定的图像位置处使用其他像素的数据值(例如,可见性值)来确定滤波器内核的占用空间(footprint)内的像素的数据值。滤波器方向可定义矩阵关于图像和/或像素的对准,滤波器沿着滤波器宽度应用于所述图像和/或像素。由此,当将滤波器应用于像素时,可使用滤波器方向和滤波器内核相对于初始像素位置来确定用于滤波器内核的矩阵的其他像素位置的其他像素。
滤波器内核的矩阵的每一元素可包括针对像素位置的滤波器权重。可使用卷积将矩阵应用于图像,其中可将对应于矩阵的像素位置的图像的每一像素的数据值与对应于矩阵中的局部相邻者的像素的数据值相加或以其他方式组合,如由滤波器值(也称为滤波器权重)加权的。对于本文中所描述的滤波器中的一个或更多个,滤波器值可被配置为例如通过将分布拟合到滤波器内核(例如,拟合到宽度和高度)来使像素模糊。
滤波器被应用于的数据值可对应于像素的光照条件数据(例如,可见性数据)。由此,将滤波器内核的矩阵应用于像素可致使在对应于滤波器内核的像素位置的像素之间至少部分地共享光照条件数据。光照条件数据的共享可以减轻由于在光线追踪中对光照条件进行稀疏采样而导致的噪声。在至少一个实施例中,图像滤波器104执行渲染数据的空间滤波。在一些情况下,图像滤波器104还可执行时间滤波。时间滤波可以利用光线追踪样本,这些光线追踪样本可以与关于图3所描述的那些样本类似地生成,但是针对虚拟环境300的先前状态和/或先前输出帧而生成的。由此,时间滤波可以增加用于确定像素的经滤波光照条件数据的光线追踪样本的有效样本计数和/或可以增加像素的经滤波光照条件数据的时间稳定性。
由于时间光线追踪样本可对应于虚拟环境300的不同状态,所以某些样本可能不相关或与虚拟环境300的当前状态相关(例如,对象或相机可能移动,光源可能改变),从而在视觉假象用于滤波时呈现视觉假象的风险。一些实施例可以使用对应于时间光线追踪样本的值的方差(例如,由根据图2的可调度单元的线程计算的)来引导时间滤波,以便减少或消除这些潜在的伪像。根据本公开的进一步方面,可至少部分地基于确定由可调度单元的线程从与像素相关联的时间上光线追踪样本计算的均值、第一方差矩和/或方差大于或等于第一阈值,和/或小于或等于第二阈值,并且所述值的计数超过第三阈值,来跳过帧的像素的空间滤波。
本方法可以用于任何合适的光线追踪效果或技术,诸如用于全局照明、环境遮挡、阴影、反射、折射、散射现象和色散现象。由此,例如,尽管在一些示例中,光线追踪样本可对应于可见性样本,但在其他示例中,光线追踪样本可对应于颜色亮度。进一步地,本方法可以在不同于图1中所示的渲染管线中实现,其可以使用或可以不使用图像组合器106来组合来自3D渲染器108的输出。
现在参见图4-6,方法400、500和600以及本文描述的其他方法的每个框包括可以使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,各种功能可由执行存储在存储器中的指令的处理器执行。所述方法还可体现为存储在计算机存储介质上的计算机可用指令。这些方法可由独立的应用程序、服务或托管服务(独立地或与另一托管服务组合)或另一产品的插件来提供,仅举几例。此外,举例来讲,关于图像渲染系统100(图1)描述了这些方法。然而,这些方法可以另外地或可替代地由任何一个系统或系统的任何组合来执行,包括但不限于本文描述的那些系统。
图4是示出根据本公开的一些实施例的用于使用可调度单元确定可见性值和指示场景中的位置对应于半影的值的方法400的示例的流程图。在框B402处,方法400包括:使用可调度单元确定对应于可见性的第一值。例如,光线追踪器102可使用对应于区域210D的可调度单元的线程,至少基于在虚拟环境300中投射光线(诸如光线340、342和344)来确定对应于虚拟环境300相对于至少光源320的可见性的第一值。图1的渲染数据122可以表示第一值,或者第一值可以以其他方式用于导出渲染数据122。
在框B404处,方法400包括:使用可调度单元的至少一个线程接收从第一值计算的第二值,第二值指示对应于半影的一个或更多个位置。例如,光线追踪器102可以使用可调度单元的至少一个线程接收从第一值计算的第二值。例如,线程可以执行波内建函数,以从与可调度单元的一个或更多个其他线程相关联的寄存器接收第一值,并且从一个或更多个第一值计算第二值。第二值可指示虚拟环境300中的一个或更多个位置对应于半影。
在框B406处,方法400包括:基于使用第二值确定一个或更多个位置对应于半影而使用第二值对第一值应用去噪滤波器。例如,图1的掩模数据124可以表示第二值,或者第二值可以以其他方式用于导出掩模数据124。例如,线程可从第二值确定掩模值(例如,二进制值),并将掩模值存储为掩模数据124。
在框B408处,方法400包括:至少基于使用第二值确定一个或更多个位置对应于半影来对与第一值相对应的渲染数据应用去噪滤波器。例如,图像滤波器104可至少基于使用第二值确定一个或更多个位置对应于半影而对渲染数据122应用去噪滤波器。虽然关于可调度单元描述了方法400,但是方法400可以使用任何数量的并行操作的可调度单元来执行。另外,在一些实施例中,可调度单元的所有线程可以用于方法400或线程组或线程的子集中。进一步地,不需要从可调度单元的所有线程或线程组接收第一值。
图5是示出了根据本公开的一些实施例的用于使用一个或更多个可调度单元的线程组来确定可见性的光线追踪样本和指示像素是否对应于半影的值的方法500的示例的流程图。在框B502,方法500包括:使用一个或更多个可调度单元来确定可见性的光线追踪样本。例如,光线追踪器102可以使用一个或更多个并行处理器的一个或更多个可调度单元的线程组来确定分配给该组的像素相对于虚拟环境300中的至少光源320的可见性的光线追踪样本。在至少一个实施例中,线程组可以指可调度单元的每个线程或可调度单元的线程的子集。
在框B504,方法500包括:确定一个或更多个可调度单元的线程组的各个值,其中组中的至少一个线程从该组的光线追踪样本计算这些值中的一个值,该值指示该组的像素是否对应于半影。例如,光线追踪器102可确定线程组的值,诸如对应于区域210和/或其子区域的每个可调度单元。对于这些线程组中的每个组,该组中的至少一个线程(例如,每个线程)可以从该组的光线追踪样本计算这些值中的一个值。该值可指示分配给该组的像素中的至少一个像素(例如,每一像素)是否对应于半影。
在框B506处,方法500包括:至少基于该值对渲染数据进行去噪。例如,图像滤波器104可以至少基于针对多个线程组的组的值对对应于这些线程组的光线追踪样本的渲染数据122进行去噪。作为示例,组中的每个线程可以从该值确定掩模值(例如,二进制值),并且该组的线程中的一个或更多个线程可以将该掩模值存储为掩模数据124。图像滤波器104可以使用掩模数据124来对渲染数据122进行去噪。
图6是根据本公开的一些实施例的示出了用于使用可调度单元来确定光线追踪样本和用于确定去噪滤波器的一个或更多个参数的一个或更多个值的方法600的示例的流程图。在框B602处,方法600包括:使用可调度单元确定场景的光线追踪样本。例如,光线追踪器102可以使用一个或更多个并行处理器的可调度单元的线程来确定虚拟环境300的光线追踪样本。
在框B604,该方法包括:使用可调度单元的至少一个线程接收从光线追踪样本计算的一个或更多个值。例如,光线追踪器102可以使用可调度单元的至少一个线程接收从光线追踪样本计算出的一个或更多个值。例如,至少一个线程可以执行波内建函数,以从与可调度单元的一个或更多个其他线程相关联的寄存器接收光线追踪样本的一个或更多个值,并且可以从光线追踪样本计算一个或更多个值。在一些实施例中,一个或更多个值可指示虚拟环境300中的一个或更多个位置对应于半影。然而,在其他示例中,一个或更多个值可指示与去噪有关的其他信息。
在框B606处,方法600包括:至少基于所述一个或更多个值确定去噪滤波器的一个或更多个参数。例如,图1的掩模数据124可以表示一个或更多个值,或者一个或更多个值可以以其他方式用于导出掩模数据124。例如,线程可以从一个或更多个值确定掩模值(例如,二进制值)并且将掩模值存储为掩模数据124。在其他示例中,所述一个或更多个值可用作一个或更多个掩模值。图像滤波器104可例如通过利用掩模数据124而至少基于所述一个或更多个值确定去噪滤波器的一个或更多个参数。
在框B608处,方法600包括:至少基于使用一个或更多个参数对对应于光线追踪样本的渲染数据应用去噪滤波器渲染来生成场景的帧。例如,图像渲染系统100可以至少基于使用一个或更多个参数对对应于光线追踪样本的渲染数据122应用去噪滤波器来生成输出图像120。虽然提供渲染数据122作为示例,但去噪滤波器可用于对其他渲染数据(例如,对应于除了可见性样本之外的光线追踪样本的渲染数据)进行去噪。
示例计算设备
图7是适合用于实现本公开的一些实施例的示例计算设备700的框图。计算设备700可包括直接或间接耦合以下设备的互连系统702:存储器704、一个或更多个中央处理单元(CPU)706、一个或更多个图形处理单元(GPU)708、通信接口710、输入/输出(I/O)端口712、输入/输出组件714、电源716,一个或更多个呈现组件718(例如,一个或更多个显示器)和一个或更多个逻辑单元720。
尽管图7的各个框被示为经由具有线路的互连系统702连接,但是这并不意图是限制性的,并且仅仅为了清楚起见。例如,在一些实施例中,诸如显示设备之类的呈现组件718可以被认为是I/O组件714(例如如果显示器为触摸屏)。作为另一个示例,CPU 706和/或GPU708可以包括存储器(例如,存储器704可以表示除了GPU 708、CPU 706和/或其他组件的存储器以外的存储设备)。换言之,图7的计算设备仅仅是说明性的。在诸如“工作站”、“服务器”、“膝上型电脑”、“台式机”、“平板电脑”、“客户端设备”、“移动设备”、“手持式设备”、“游戏控制台”、“电子控制单元(ECU)”、“虚拟现实系统”和/或其他设备或系统类型之类的类别之间不进行区分,因为所有这些都被考虑在图7的计算设备的范围内。
互连系统702可以表示一条或更多条链路或总线,例如地址总线、数据总线、控制总线或者其组合。互连系统702可以包括一种或更多种总线或链路类型,例如行业标准架构(ISA)总线、扩展行业标准架构(EISA)总线、视频电子标准协会(VESA)总线、外围组件互连(PCI)总线、外围组件互连快速(PCIe)总线,和/或另一种类型的总线或链路。在一些实施例中,组件之间存在直接连接。作为示例,CPU 706可直接连接到存储器704。进一步,CPU 706可直接连接到GPU 708。在组件之间存在直接或点对点连接的情况下,互连系统702可以包括PCIe链路以执行连接。在这些示例中,PCI总线不需要被包括在计算设备700中。
存储器704可以包括各种各样的计算机可读介质中的任何介质。计算机可读介质可以是可以由计算设备700访问的任何可用介质。计算机可读介质可以包括易失性和非易失性介质以及可移除和不可移除介质。举例而言且非限制性地,计算机可读介质可以包括计算机存储介质和通信介质。
计算机存储介质可以包括易失性和非易失性介质和/或可移除和不可移除介质,其以用于存储诸如计算机可读指令、数据结构、程序模块和/或其他数据类型之类的信息的任何方法或技术实现。例如,存储器704可以存储计算机可读指令(例如其表示程序和/或程序元素,例如操作系统)。计算机存储介质可以包括但不限于RAM、ROM、EEPROM、闪存或者其他存储技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储装置、磁带盒、磁带、磁盘存储装置或其他磁存储设备,或者可以用来存储期望的信息且可以由计算设备700访问的任何其他介质。当在本文使用时,计算机存储介质并不包括信号本身。
计算机存储介质可以在诸如载波之类的调制数据信号或其他传输机制中包括计算机可读指令、数据结构、程序模块和/或其他数据类型,并且包括任何信息输送介质。术语“调制数据信号”可以指这样的信号,该信号使它的特性中的一个或更多个以这样的将信息编码到该信号中的方式设置或改变。举例而言且非限制性地,计算机存储介质可以包括诸如有线网络或直接有线连接之类的有线介质,以及诸如声音、RF、红外和其他无线介质之类的无线介质。任何以上所述的组合也应当包括在计算机可读介质的范围内。
CPU 706可以被配置为执行至少一些计算机可读指令以便控制计算设备700的一个或更多个组件执行本文描述的方法和/或过程中的一个或更多个。CPU 706中的每一个可以包括能够同时处理大量软件线程的一个或更多个核(例如一个、两个、四个、八个、二十八个、七十二个等等)。CPU 706可以包括任何类型的处理器,并且可以包括不同类型的处理器,这取决于实现的计算设备700的类型(例如具有用于移动设备的较少核的处理器以及具有用于服务器的更多核的处理器)。例如,取决于计算设备700的类型,处理器可以是使用精简指令集计算(RISC)实现的高级RISC机器(ARM)处理器或者使用复杂指令集计算(CISC)实现的x86处理器。除了一个或更多个微处理器或者诸如数学协处理器之类的补充协处理器之外,计算设备700还可以包括一个或更多个CPU 706。
除了CPU 706之外或替代CPU 706,GPU 708可以被配置成用于执行至少一些计算机可读指令以控制计算设备700的一个或更多个组件执行在此描述的方法和/或过程中的一个或更多个。GPU 708中的一个或更多个可为集成GPU(例如,与CPU 706中的一个或更多个和/或GPU 708中的一个或更多个可为离散GPU)。在实施例中,GPU 708中的一个或更多个可以是CPU 706中的一个或更多个的协处理器。GPU 708可以由计算设备700用来渲染图形(例如3D图形)或者执行通用计算。例如,GPU 708可用于GPU上的通用计算(GPGPU)。GPU 708可以包括能够同时处理数百或数千个软件线程的数百或数千个核。GPU 708可以响应于渲染命令(例如经由主机接口接收的来自CPU 706的渲染命令)而生成用于输出图像的像素数据。GPU 708可以包括诸如显示存储器之类的用于存储像素数据或任何其他合适的数据(诸如GPGPU数据)的图形存储器。显示存储器可以作为存储器704的部分而被包括。GPU 708可以包括(例如经由链路)并行操作的两个或更多GPU。链路可以直接连接GPU(例如,使用NVLINK)或可以通过交换机(例如,使用NVSwitch)连接GPU。当组合在一起时,每个GPU 708可以生成用于输出的不同部分或者用于不同输出的像素数据或GPGPU数据(例如,第一GPU用于第一图像,第二GPU用于第二图像)。每个GPU可以包括它自己的存储器,或者可以与其他GPU共享存储器。
除了CPU 706和/或GPU 708之外或替代CPU 706和/或GPU 708,一个或更多个逻辑单元720可以被配置成用于执行计算机可读指令中的至少一些计算机可读指令以控制计算设备700的一个或更多个部件执行在此描述的方法和/或过程中的一个或更多个。在实施例中,一个或更多个CPU706、一个或更多个GPU 708和/或一个或更多个逻辑单元720可以离散地或联合地执行方法、过程和/或其部分的任何组合。逻辑单元720中的一个或更多个可为CPU 706和/或GPU 708中的一个或更多个和/或集成在CPU706和/或GPU 708中的一个或更多个,和/或逻辑单元720中的一个或更多个可为离散组件或以其他方式在CPU 706和/或GPU 708外部。在实施例中,逻辑单元720中的一个或更多个可以是CPU 706中的一个或更多个CPU和/或GPU 708中的一个或更多个GPU的协处理器。
逻辑单元720的示例包括一个或更多个处理核和/或其部件,诸如张量核(TC)、张量处理单元(TPU)、像素视觉核(PVC)、视觉处理单元(VPU),图形处理群集(GPC)、纹理处理群集(TPC)、流多处理器(SM)、树横向单元(TTU),人工智能加速器(AIA)、深度学习加速器(DLA)、算术逻辑单元(ALU)、专用集成电路(ASIC),浮点单元(FPU)、输入/输出(I/O)元件、外围组件互连(PCI)或快速外围组件互连(PCIe)元件,和/或类似物。
通信接口710可以包括一个或更多个接收器、发送器和/或收发器,其使得计算设备700能够经由电子通信网络与其他计算设备通信,包括有线和/或无线通信。通信接口710可以包括使能通过若干不同网络中的任何网络进行通信的组件和功能,所述网络例如无线网络(例如Wi-Fi、Z波、蓝牙、蓝牙LE、ZigBee等等)、有线网络(例如通过以太网或无限带宽通信)、低功率广域网(例如LoRaWAN、SigFox等等)和/或因特网。在一个或更多个实施例中,通信接口710还可以包括一个或更多个处理核和/或其组件(诸如数据处理单元(DPU)),以便直接访问数据并将数据存储在计算设备700的其他处理单元(诸如GPU)的本地存储器中。
I/O端口712可以使得计算设备700能够逻辑地耦合到包括I/O组件714、呈现组件718和/或其他组件在内的其他设备,其中一些可以内置到(例如集成到)计算设备700中。说明性I/O组件714包括麦克风、鼠标、键盘、操纵杆、游戏垫、游戏控制器、碟形卫星天线、扫描仪、打印机、无线设备等等。I/O组件714可以提供处理用户生成的空中手势、语音或其他生理输入的自然用户接口(NUI)。在一些示例中,输入可以传输至适当的网络元件以便进一步处理。NUI可以实现语音识别、手写笔识别、面部识别、生物特征识别、屏幕上和邻近屏幕的手势识别、空中手势、头部和眼睛追踪以及与计算设备700的显示器关联的触摸识别(如下文更详细地描述的)的任意组合。计算设备700可以包括诸如立体相机系统之类的深度相机、红外相机系统、RGB相机系统、触摸屏技术以及这些的组合,以用于手势检测和识别。此外,计算设备700可以包括使能运动检测的加速度计或陀螺仪(例如作为惯性测量单元(IMU)的部分)。在一些示例中,加速度计或陀螺仪的输出可以由计算设备700用来渲染沉浸式增强现实或者虚拟现实。
电源716可以包括硬接线电源、电池电源或者其组合。电源716可以向计算设备700供电以使得计算设备700的组件能够操作。
呈现组件718可以包括显示器(例如监视器、触摸屏、电视屏幕、平视显示器(HUD)、其他显示器类型或者其组合)、扬声器和/或其他呈现组件。呈现组件718可以接收来自其他组件(例如GPU 708、CPU 706等等)的数据,并且输出该数据(例如作为图像、视频、声音等等)。
示例网络环境
适合于在实现本公开的实施例中使用的网络环境可以包括一个或更多个客户端设备、服务器、网络附接存储(NAS)、其他后端装置、和/或其他装置类型。客户端设备、服务器和/或其他设备类型(例如,每个设备)可以在图7的一个或更多个计算设备700的一个或更多个实例上实现——例如,每个设备可以包括一个或更多个计算设备700的类似部件、特征和/或功能。
网络环境的组件可以经由一个或更多个网络彼此通信,所述网络可以是有线的、无线的或两者。网络可以包括多个网络或多个网络中的一个网络。例如,网络可包括一个或更多个广域网(WAN)、一个或更多个局域网(LAN)、一个或更多个公共网络诸如互联网和/或公共交换电话网(PSTN)和/或一个或更多个私有网络。在网络包括无线电信网络的情况下,诸如基站、通信塔或者甚至接入点(以及其他组件)的组件可以提供无线连接。
兼容的网络环境可以包括一个或更多个对等网络环境(在这种情况下,服务器可以不包括在网络环境中)和一个或更多个客户端-服务器网络环境(在这种情况下,一个或更多个服务器可以包括在网络环境中)。在对等网络环境中,本文相对于服务器所描述的功能可在任何数量的客户端设备上实现。
在至少一个实施例中,网络环境可以包括一个或更多个基于云的网络环境、分布式计算环境、其组合等。基于云的网络环境可包括框架层、工作调度器、资源管理器和在一个或更多个服务器上实现的分布式文件系统,所述服务器可包括一个或更多个核心网服务器和/或边缘服务器。框架层可包括支持软件层的软件和/或应用层的一个或更多个应用的框架。所述软件或应用程序可分别包括基于网络的服务软件或应用程序。在实施例中,一个或更多个客户端设备可以使用基于网络的服务软件或应用(例如,通过经由一个或更多个应用编程接口(API)访问服务软件和/或应用)。框架层可以是但不限于自由和开源软件网络应用框架的类型,诸如可以使用分布式文件系统进行大规模数据处理(例如,“大数据”)。
基于云的网络环境可以提供执行在此描述的计算和/或数据存储功能(或其一个或更多个部分)的任何组合的云计算和/或云存储。这些不同功能中的任何功能可以分布在来自(例如,可以分布在州、地区、国家、地球等上的一个或更多个数据中心的)中央或核心服务器的多个位置上。如果与用户(例如,客户端设备)的连接相对靠近边缘服务器,则核心服务器可以将功能的至少一部分指定给边缘服务器。基于云的网络环境可以是私有的(例如,限于单个组织),可以是公共的(例如,对许多组织可用),和/或其组合(例如,混合云环境)。
客户端设备可以包括在此关于图7描述的一个或更多个示例计算设备700的部件、特征和功能中的至少一些部件、特征和功能。作为示例而非限制,客户机设备可被实现为个人计算机(PC),膝上型计算机、移动设备、智能电话、平板计算机、智能手表、可穿戴计算机,个人数字助理(PDA)、MP3播放器、虚拟现实耳机、全球定位系统(GPS)或装置,视频播放器、相机、监视设备或系统、车辆、船,飞船、虚拟机、无人机、机器人、手持式通信设备、医院设备,游戏设备或系统、娱乐系统、车辆计算机系统、嵌入式系统控制器,遥控器、电器、消费电子设备、工作站、边缘设备、这些描绘的设备的任何组合,或任何其他合适的装置。
示例数据中心
图8示出了可以在其中至少一个实施例中使用的示例数据中心800。在至少一个实施例中,数据中心800可包括数据中心基础设施层810、框架层820、软件层830和/或应用层840。
在至少一个实施例中,如图8所示,数据中心基础设施层810可以包括资源协调器812、分组的计算资源814和节点计算资源(“节点C.R.”)816(1)-816(N),其中“N”代表任何完整的正整数。在至少一个实施例中,节点C.R.816(1)-816(N)可以包括但不限于任何数量的中央处理单元(CPU)或其他处理器(包括加速器、现场可编程门阵列(FPGA)、图形处理器等),存储器设备(例如动态只读存储器),存储设备(例如固态硬盘或磁盘驱动器),网络输入/输出(NW I/O)设备,网络交换机,虚拟机(VM),电源模块和/或冷却模块等。在至少一个实施例中,节点C.R.816(1)-816(N)中的一个或更多个节点C.R.可以是具有一个或更多个上述计算资源的服务器。
在至少一个实施例中,分组的计算资源814可以包括容纳在一个或更多个机架内的节点C.R.的单独分组(未示出),或者容纳在各个地理位置的数据中心内的许多机架(也未示出)。分组的计算资源814内的节点C.R.的单独分组可以包括可以被配置或分配为支持一个或更多个工作负载的分组的计算、网络、存储器或存储资源。在至少一个实施例中,可以将包括CPU或处理器的几个节点C.R.分组在一个或更多个机架内,以提供计算资源来支持一个或更多个工作负载。在至少一个实施例中,一个或更多个机架还可以包括任何数量的电源模块、冷却模块和网络交换机,以任意组合。
在至少一个实施例中,资源协调器822可以配置或以其他方式控制一个或更多个节点C.R.816(1)-816(N)和/或分组的计算资源814。在至少一个实施例中,资源协调器822可以包括用于数据中心800的软件设计基础结构(“SDI”)管理实体。在至少一个实施例中,资源协调器可以包括硬件、软件或其某种组合。
在至少一个实施例中,如图8所示,框架层820可以包括作业调度器844、配置管理器834、资源管理器836和分布式文件系统838。在至少一个实施例中,框架层820可以包括支持软件层830的软件832和/或应用程序层940的一个或更多个应用程序842的框架。在至少一个实施例中,软件832或应用程序842可以分别包括基于网络的服务软件或应用程序,例如由Amazon Web Services,Google Cloud和Microsoft Azure提供的服务或应用程序。在至少一个实施例中,框架层820可以是但不限于一种免费和开放源软件网络应用框架,例如可以利用分布式文件系统838来进行大范围数据处理(例如“大数据”)的Apache SparkTM(以下称为“Spark”)。在至少一个实施例中,作业调度器844可以包括Spark驱动器,以促进对数据中心800的各个层所支持的工作负载进行调度。在至少一个实施例中,配置管理器834可以能够配置不同的层,例如软件层830和包括Spark和用于支持大规模数据处理的分布式文件系统838的框架层820。在至少一个实施例中,资源管理器836能够管理映射到或分配用于支持分布式文件系统838和作业调度器844的集群或分组计算资源。在至少一个实施例中,集群或分组计算资源可以包括数据中心基础设施层810上的分组的计算资源814。在至少一个实施例中,资源管理器836可以与资源协调器812协调以管理这些映射的或分配的计算资源。
在至少一个实施例中,包括在软件层830中的软件832可以包括由节点C.R.816(1)-816(N)的至少一部分,分组计算资源814和/或框架层820的分布式文件系统838使用的软件。一种或更多种类型的软件可以包括但不限于Internet网页搜索软件、电子邮件病毒扫描软件、数据库软件和流视频内容软件。
在至少一个实施例中,应用层840中包括的一个或更多个应用程序842可以包括由节点C.R.816(1)-816(N)的至少一部分、分组的计算资源814和/或框架层820的分布式文件系统838使用的一种或更多种类型的应用程序。一种或更多种类型的应用程序可以包括但不限于任何数量的基因组学应用程序,认知计算和机器学习应用程序,包括训练或推理软件,机器学习框架软件(例如PyTorch、TensorFlow、Caffe等)或其他与一个或更多个实施例结合使用的机器学习应用程序。
在至少一个实施例中,配置管理器834、资源管理器836和资源协调器812中的任何一个可以基于以任何技术上可行的方式获取的任何数量和类型的数据来实现任何数量和类型的自我修改动作。在至少一个实施例中,自我修改动作可以减轻数据中心800的数据中心操作员做出可能不好的配置决定并且可以避免数据中心的未充分利用和/或执行差的部分。
在至少一个实施例中,数据中心800可以包括工具、服务、软件或其他资源,以根据本文所述的一个或更多个实施例来训练一个或更多个机器学习模型或者使用一个或更多个机器学习模型来预测或推理信息。例如,在至少一个实施例中,可以通过使用上文关于数据中心800描述的软件和计算资源,根据神经网络架构通过计算权重参数来训练机器学习模型。在至少一个实施例中,通过使用通过一种或更多种训练技术计算出的权重参数,可以使用上面与关于数据中心800所描述的资源,使用对应于一个或更多个神经网络的经训练的机器学习模型来推理或预测信息。
可以在计算机代码或机器可用指令的一般上下文中描述本公开,包括由计算机或其他机器(如个人数据助理或其他手持式装置)执行的计算机可执行指令(如程序模块)。通常,包括例程、程序、对象、组件、数据结构等的程序模块是指执行特定任务或实现特定抽象数据类型的代码。本公开可以在各种系统配置中实践,包括手持式设备、消费电子产品、通用计算机、更专用计算设备等。本公开还可以在分布式计算环境中实践,其中任务由通过通信网络链接的远程处理设备来执行。
如在此使用的,关于两个或更多个元件的“和/或”的叙述应被解释为仅意指一个元件或元件的组合。例如,“元件A、元件B和/或元件C”可以包括仅元件A、仅元件B、仅元件C、元件A和元件B、元件A和元件C、元件B和元件C、或元件A、B和C。此外,“元素A或元素B中的至少一个”可以包括元素A中的至少一个、元素B中的至少一个、或者元素A和元素B中的至少一个中的至少一个。进一步地,“元件A和元件B中的至少一个”可以包括元件A中的至少一个、元件B中的至少一个、或者元件A和元件B中的至少一个中的至少一个。
本文具体描述本公开的主题以满足法定要求。然而,该描述本身并不旨在限制本公开的范围。而是,发明人已预期,结合其他当前或未来技术,所要求保护的主题还可用其他方式来体现,以包括类似于本文档中所描述的步骤的不同步骤或步骤的组合。此外,尽管术语“步骤”和/或“框”在此可以用于暗示所采用的方法的不同元素,但是这些术语不应被解释为暗示本文公开的各个步骤之中或之间的任何特定顺序,除非并且除了当明确描述各个步骤的顺序时。

Claims (20)

1.一种计算机实现的方法,包括:
使用一个或更多个并行处理器的可调度单元的一个或更多个线程,至少基于在场景中投射一条或更多条光线来确定与所述场景相对于所述场景中的至少一个光源的可见性相对应的一个或更多个第一值;
使用所述一个或更多个线程中的至少一个线程接收从所述一个或更多个第一值计算的第二值,其中所述第二值指示所述场景中的一个或更多个位置对应于半影;以及
至少基于使用所述第二值确定所述一个或更多个位置对应于所述半影,对渲染数据应用去噪滤波器。
2.根据权利要求1所述的方法,其中所述调度单元包括线程束或波前。
3.根据权利要求1所述的方法,其中所述一个或更多个位置包括一个或更多个像素,且所述一个或更多个第一值中的至少一个值对应于所述一个或更多个像素中的相应像素。
4.根据权利要求1所述的方法,其中所述第二值的所述接收是使用所述一个或更多个并行处理器从波内建函数的输出接收的。
5.根据权利要求1所述的方法,其中至少基于从所述一个或更多个线程的一个或更多个寄存器访问所述一个或更多个第一值来计算所述第二值。
6.根据权利要求1所述的方法,还包括:使用所述第二值生成所述场景的帧的半影掩模,其中确定所述一个或更多个位置对应于所述半影至少基于分析所述半影掩模。
7.根据权利要求1所述的方法,其中所述一个或更多个第一值对应于表示所述可见性的二进制信号。
8.根据权利要求1所述的方法,其中确定所述一个或更多个第一值和接收所述第二值是由使用所述一个或更多个线程执行的光线生成着色器执行的。
9.根据权利要求1所述的方法,其中确定所述一个或更多个位置对应于所述半影包括:确定所述第二值大于阈值。
10.根据权利要求1所述的方法,其中确定所述一个或更多个位置对应于所述半影包括:确定所述第二值小于阈值。
11.一种计算机实现的方法,包括:
使用一个或更多个并行处理器的一个或更多个可调度单元的线程组来确定分配给所述组的像素相对于场景中的至少一个光源的可见性的光线追踪样本;
确定所述线程组的值,其中对于所述线程组中的每个组,所述组中的至少一个线程从所述组的所述光线追踪样本计算所述值中的指示分配给所述组的所述像素中的至少一个像素是否对应于半影的值;以及
至少基于针对多个线程组的所述组的值来对与所述线程组的所述光线追踪样本相对应的渲染数据进行去噪。
12.根据权利要求11所述的方法,其中所述组中的第一组属于所述一个或更多个可调度单元中的第一可调度单元,并且所述组中的第二组属于所述一个或更多个可调度单元中的第二可调度单元。
13.根据权利要求11所述的方法,其中所述去噪包括:至少基于所述第一组的值指示所述像素在所述半影内,将去噪滤波器应用于被分配给所述组中的第一组的像素。
14.根据权利要求11所述的方法,其中所述去噪包括:对所述光线追踪样本应用去噪传递,其中所述去噪传递至少基于所述第二组的值指示所述像素在所述半影之外,跳过被分配给所述组中的第二组的像素。
15.根据权利要求11所述的方法,其中所述组中的每个线程从所述组的所述光线追踪样本确定所述值。
16.根据权利要求11所述的方法,还包括:使用所述线程组,使用所述值生成所述场景的帧的半影掩模,其中所述去噪至少基于分析所述半影掩模。
17.一种处理器,包括:
一个或更多个电路,用于:使用一个或更多个并行处理器的可调度单元的一个或更多个线程来确定场景的一个或更多个光线追踪样本;使用所述一个或更多个线程中的至少一个线程接收从所述一个或更多个光线追踪样本计算的一个或更多个值;至少基于所述一个或更多个值确定去噪滤波器的一个或更多个参数;以及至少基于使用所述一个或更多个参数对对应于所述光线追踪样本的渲染数据应用所述去噪滤波器,来生成所述场景的帧。
18.根据权利要求17所述的处理器,其中所述一个或更多个参数定义所述去噪滤波器的滤波器半径。
19.根据权利要求17所述的处理器,其中所述一个或更多个参数定义范围,其中基于值在所述范围之外,将在所述范围之外的值排除在使用所述去噪滤波器进行滤波之外。
20.根据权利要求17所述的处理器,其中所述系统包括以下各项中的至少一项:
用于执行模拟操作的系统;
用于执行模拟操作以测试或验证自主机器应用的系统;
用于执行深度学习操作的系统;
使用边缘设备实现的系统;
合并一个或更多个虚拟机VM的系统;
至少部分地在数据中心中实现的系统;或
至少部分地使用云计算资源实现的系统。
CN202210033280.0A 2021-01-14 2022-01-12 使用内建函数用于光线追踪应用中的阴影去噪 Pending CN114764841A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/148,888 2021-01-14
US17/148,888 US11727535B2 (en) 2021-01-14 2021-01-14 Using intrinsic functions for shadow denoising in ray tracing applications

Publications (1)

Publication Number Publication Date
CN114764841A true CN114764841A (zh) 2022-07-19

Family

ID=82116350

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210033280.0A Pending CN114764841A (zh) 2021-01-14 2022-01-12 使用内建函数用于光线追踪应用中的阴影去噪

Country Status (3)

Country Link
US (2) US11727535B2 (zh)
CN (1) CN114764841A (zh)
DE (1) DE102022100517A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11847737B2 (en) * 2021-04-09 2023-12-19 Nvidia Corporation Temporal denoiser quality in dynamic scenes

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6763305B2 (en) * 2002-09-13 2004-07-13 Gx Technology Corporation Subsurface illumination, a hybrid wave equation-ray-tracing method
US7970171B2 (en) * 2007-01-18 2011-06-28 Ricoh Co., Ltd. Synthetic image and video generation from ground truth data
US20090034870A1 (en) * 2007-07-31 2009-02-05 Renato Keshet Unified spatial image processing
US8712180B2 (en) * 2011-01-17 2014-04-29 Stc.Unm System and methods for random parameter filtering
KR101711060B1 (ko) * 2015-05-29 2017-02-28 주식회사 코어라인소프트 레이 캐스팅의 가속화 방법 및 장치
US10748332B2 (en) * 2017-03-15 2020-08-18 Nvidia Corporation Hybrid frustum traced shadows systems and methods
WO2019182906A1 (en) * 2018-03-17 2019-09-26 Nvidia Corporation Shadow denoising in ray-tracing applications
US10943387B2 (en) 2018-08-30 2021-03-09 Nvidia Corporation Generating scenes containing shadows using pixel noise reduction techniques
US20210382717A1 (en) * 2020-06-03 2021-12-09 Intel Corporation Hierarchical thread scheduling
US11373360B2 (en) * 2020-07-30 2022-06-28 Apple Inc. Grouping techniques for ray intersection traversal

Also Published As

Publication number Publication date
US20220222780A1 (en) 2022-07-14
DE102022100517A1 (de) 2022-07-14
US11727535B2 (en) 2023-08-15
US20230351555A1 (en) 2023-11-02

Similar Documents

Publication Publication Date Title
US10573071B2 (en) Path planning for virtual reality locomotion
US20210264562A1 (en) Motion blur and depth of field reconstruction through temporally stable neural networks
US11836597B2 (en) Detecting visual artifacts in image sequences using a neural network model
US11790594B2 (en) Ray-tracing with irradiance caches
US11823321B2 (en) Denoising techniques suitable for recurrent blurs
US20190012824A1 (en) Saccadic redirection for virtual reality locomotion
US11165848B1 (en) Evaluating qualitative streaming experience using session performance metadata
US11954830B2 (en) High dynamic range support for legacy applications
US11756254B2 (en) Light importance caching using spatial hashing in real-time ray tracing applications
CN113393564B (zh) 利用全局照明数据结构的基于水塘的时空重要性重采样
CN113762461A (zh) 使用可逆增强算子采用有限数据训练神经网络
US20230351555A1 (en) Using intrinsic functions for shadow denoising in ray tracing applications
CN113822975B (zh) 用于对图像进行有效采样的技术
US20240177394A1 (en) Motion vector optimization for multiple refractive and reflective interfaces
CN113808183B (zh) 使用扭曲的复合估计乘积积分
US11966765B2 (en) Memory bandwidth throttling for virtual machines
WO2022251619A1 (en) Hybrid differentiable rendering for light transport simulation systems and applications
US11600036B2 (en) Spatiotemporal self-guided shadow denoising in ray-tracing applications
CN114245907A (zh) 自动曝光的光线追踪
US20240233251A1 (en) Subsurface scattering for real-time rendering applications
CN118334230A (zh) 用于实时渲染应用程序的次表面散射
CN117596406A (zh) 利用光流进行帧速率上转换
CN114910450A (zh) 使用粒子密度进行光传输模拟的部分可见度估计

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination