CN110874858B - 用于渲染反射的系统和方法 - Google Patents
用于渲染反射的系统和方法 Download PDFInfo
- Publication number
- CN110874858B CN110874858B CN201910248999.4A CN201910248999A CN110874858B CN 110874858 B CN110874858 B CN 110874858B CN 201910248999 A CN201910248999 A CN 201910248999A CN 110874858 B CN110874858 B CN 110874858B
- Authority
- CN
- China
- Prior art keywords
- ray
- rays
- pixel
- image
- travel
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 79
- 238000009877 rendering Methods 0.000 title abstract description 17
- 238000005266 casting Methods 0.000 claims description 3
- 230000004931 aggregating effect Effects 0.000 claims 3
- 239000000872 buffer Substances 0.000 description 72
- 230000003746 surface roughness Effects 0.000 description 29
- 238000010586 diagram Methods 0.000 description 26
- 230000008569 process Effects 0.000 description 12
- 238000001914 filtration Methods 0.000 description 7
- 230000002123 temporal effect Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012360 testing method Methods 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
- G06T13/00—Animation
-
- 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/55—Radiosity
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
Abstract
本公开内容的实施例提供用于渲染反射的系统和方法。为了向图像中的像素添加反射,使用射线行进来尝试找到针对主反射的射线相交。当使用栅格化来渲染场景的时候,在视口外部的对象被剔除。照此,射线行进可能在各种情形中失败,诸如当射线行进的射线离开视口而没有与场景中任何其它对象相交的时候。在这样的射线行进失败的情形中,射线可以被重投射为经射线追踪的射线。经射线追踪的射线被投射到其中所有对象存在(即对象没有被剔除)的全3D(三维)场景中。射线追踪然后用于尝试寻找射线相交,即针对主反射的。所公开的实施例能够被使用在实时或接近实时的应用(诸如视频游戏)中。
Description
技术领域
本公开一般地涉及计算机图形,并且更具体地涉及用于渲染反射的系统和方法。
背景技术
通常通过检查视图空间的几何模型以及视图空间中经建模的对象来创建计算机生成的图像。对象的几何模型可具有任意分辨率,但是典型地每个对象由有限数目的多边形(诸如三角形)来表示,所述多边形被定位在视图空间中并且在其表面之上具有颜色、颜色图案或纹理和/或表示多边形透明度的一个或多个阿尔法值。图像典型地被输出(即存储、显示、传输或以其它方式被处理)为像素阵列。
计算机生成的图像的一个共同特征是将在输出的图像中包括反射。包括反射提供视觉上更现实的结果。在某些应用(诸如动画影片)中,射线追踪技术可以用于提供经射线追踪的反射,其给出良好的结果。然而,射线追踪在计算上是昂贵的。对于复杂的场景,通过使用经射线追踪的反射,可能花费数小时或数天来渲染视频序列的单个帧,甚至当使用非常强大的计算机或渲染农场(renderfarm)的时候也是如此。
在诸如视频游戏之类的其它应用中,计算速度是优先考虑的事。在视频游戏中,在用户与视频游戏交互时,帧非常快速地(即实时地或接近实时地)被渲染。因而,针对反射的射线追踪技术(其可能花费数小时或数天来渲染单个帧)不适合用于视频游戏。出于此原因,各种其它技术已经被开发以实时或接近实时地在视频游戏中渲染反射。然而,这些其它技术遭受不良质量的影响,特别是在与从全射线追踪获得的反射相比的时候。
正因为如此,在本领域中依然有对于克服现有途径的缺点和限制的用于渲染反射的系统和方法的需要。
发明内容
一个实施例提供用于为图像中的像素生成反射信息的方法、计算机可读存储介质和设备。所述方法包括:由一个或多个处理器确定像素中的对象的表面的粗糙度值;由所述一个或多个处理器基于所述粗糙度值来确定为像素产生的多个射线;对于所述多个射线中的每个射线,由所述一个或多个处理器来选择射线的射线方向;对于所述多个射线中的每个射线,由所述一个或多个处理器基于射线的射线方向来执行射线的射线行进(march);对于其中射线行进成功的每个射线,由所述一个或多个处理器存储经由射线行进所发现的被射线相交的对象的颜色信息;对于其中射线行进失败的每个射线,由所述一个或多个处理器经由射线追踪来投射射线,并且存储经由射线追踪所发现的被射线相交的对象的颜色信息;以及由所述一个或多个处理器基于经由射线行进所发现的被射线相交的对象的颜色信息以及经由射线追踪所发现的被射线相交的对象的颜色信息来为像素生成反射信息。
一个实施例提供用于在图像中生成反射信息的方法、计算机可读存储介质和设备。所述方法包括:由一个或多个处理器来确定图像的第一像素中的对象的表面的第一粗糙度值;由所述一个或多个处理器基于所述第一粗糙度值来确定为第一像素产生的多个射线;由所述一个或多个处理器来标识图像的第一像素的阈值半径内的第二像素;由一个或多个处理器来确定第二像素中的对象的表面的第二粗糙度值;由所述一个或多个处理器来确定在第一粗糙度值与第二粗糙度值之间的差在粗糙度阈值以下;由所述一个或多个处理器来确定被对应于第二像素的反射射线相交的对象的颜色信息;以及由所述一个或多个处理器基于被对应于第二像素的反射射线相交的对象的颜色信息来为第一像素生成反射信息,其中第一像素被包括在第一像素集合中并且第二像素被包括在第二像素集合中,其中经由射线追踪和/或射线行进来确定被对应于第二像素集合中的像素的反射射线相交的对象的颜色信息,并且其中基于被对应于第二像素集合中的像素的反射射线相交的对象的颜色信息来确定被对应于第一像素集合中的像素的反射射线相交的对象的颜色信息。
一个实施例提供用于生成反射信息的方法、计算机可读存储介质和设备。所述方法包括:基于针对第一像素的反射射线来为第一帧确定对象的相交位置,其中对象的相交位置对应于椭圆的形状;基于针对第一像素的反射射线来为第一帧确定对象的相交在反射域(reflection realm)中的位置;通过朝向相机第一位置的针对第一像素的反射射线来从所述对象的相交在反射域中的位置来为第一帧投影第一线;为第一帧确定所述第一线在第一对象的表面上的相交的位置;基于针对第二像素的反射射线来为第二帧确定对象的相交的位置,其中所述第二帧在第一帧之后;基于针对第二像素的反射射线来为第二帧确定对象的相交在反射域中的位置;通过朝向相机第二位置的针对第二像素的反射射线来从所述对象的相交在反射域中的位置来为第二帧投影第二线;为第二帧确定所述第二线在第二对象的表面上的相交的位置;以及确定所述第二线在第二对象的表面上的相交的位置的表面粗糙度在所述第一线在第一对象的表面上的相交的位置的表面粗糙度的阈值粗糙度内;以及基于针对第一像素的反射信息来为第二像素生成反射信息。
附图说明
图1是根据本公开内容的各方面的用于渲染图像的计算机系统的框图。
图2是根据一个实施例的图示了处理器和缓冲器交互的框图。
图3是根据一个实施例的待渲染的场景的框图。
图4A是根据一个实施例的图示了使用栅格化来渲染场景的框图。
图4B是根据一个实施例的场景的经栅格化的图像的示例。
图5是根据一个实施例的图示了不同类型的反射的示例性图像。
图6是根据一个实施例的图示了镜面反射的框图。
图7是根据一个实施例的图示了有光泽(glossy)反射的框图。
图8A是根据一个实施例的图示了射线行进成功的框图。
图8B图示了根据一个实施例的屏幕空间中的图像。
图9A是根据一个实施例的图示了射线行进失败的框图。
图9B图示了根据一个实施例的在图9A中所示的场景的屏幕空间中的图像。
图10A是根据一个实施例的z缓冲器数据的一部分的图形表示。
图10B-10D图示了根据一个实施例的使z缓冲器数据塌缩的图形表示。
图11是根据一个实施例的用于执行射线行进的方法步骤的流程图。
图12是根据一个实施例的图示了为射线行进失败的射线执行射线追踪的框图。
图13是根据一个实施例的用于渲染反射的方法步骤的流程图。
图14A是根据一个实施例的图示了3D(三维)场景的框图。
图14B是根据一个实施例的图示了图14A中的3D场景的框图,其中一些射线从近邻像素被重用。
图15是根据一个实施例的用于重用附近像素的射线信息的方法步骤的流程图。
图16A是根据一个实施例的反射的示例。
图16B图示了根据一个实施例的从所投影的点到眼睛/相机的经更新的虚拟位置的线。
图17是根据一个实施例的图示了后续帧中具有不同表面粗糙度值的两个点的框图。
图18是根据一个实施例的用于执行时间滤波的方法步骤的流程图。
图19图示了经伸展的反射的示例。
图20是根据一个实施例的解释了经伸展的反射的框图。
图21是根据一个实施例的经伸展的反射的示例。
图22是根据一个实施例的表示经伸展的反射的椭圆的短轴的预计算的长度的绘图。
图23是根据一个实施例的表示经伸展的反射的椭圆的长轴的预计算的长度的绘图。
图24是根据一个实施例的为有光泽的反射应用椭圆滤波器的示例。
图25是根据一个实施例的应用椭圆滤波器的流程图。
具体实施方式
以下的具体实施方式在本质上是示例性的并且不意图限制本公开内容或本公开内容的应用和用途。此外,没有意图被前面的技术领域、背景技术、发明内容、附图说明或以下的具体实施方式中呈现的任何明示的或暗示的理论所约束。
本公开内容的实施例提供用于渲染反射的系统和方法。所公开的实施例能够实时或接近实时地被执行,并且因而适合用于诸如视频游戏之类的应用。如本文中更详细地讨论的,所公开的实施例使用栅格化来渲染3D(三维)虚拟场景的主眼射线(即从虚拟相机到屏幕空间上)。为了为屏幕空间中的每个像素添加反射,射线行进被用于尝试找到针对主反射的射线相交。当使用栅格化来渲染场景的时候,在视口外部的对象被剔除(cull)。因而,在各种场景中射线行进都可能失败,诸如当射线行进的射线离开视口而没有与场景中任何其它对象相交的时候。在这样的射线行进失败的情形中,射线可以被重投射为经射线追踪的射线。经射线追踪的射线被投射到有所有对象存在(即对象没有被剔除)的全3D场景中。射线追踪然后被用于尝试寻找射线相交,即针对主反射的。所公开的实施例可以被使用在实时或接近实时的应用(诸如视频游戏)中,以实现在视觉上令人愉快的反射,所述反射在一些情况中可能不可区分于全射线追踪的反射。
返回到附图,图1是根据本公开内容的各方面的用于渲染图像的计算机系统100的框图。计算机系统100可以例如用于渲染视频游戏的图像。示出了计算机系统100,其包括控制台102,所述控制台102被耦合到显示器104以及输入/输出(I/O)设备106。示出了控制台102,所述控制台102包括处理器110、程序代码存储装置112、暂时性数据存储装置114和图形处理器116。控制台102可以是手持视频游戏设备、用于操作视频游戏的视频游戏控制台(例如专用计算设备)、通用膝上型或台式计算机、或其它合适的计算系统(诸如移动电话或平板计算机)。尽管在图1中被示出为一个处理器,但是处理器110可以包括一个或多个处理器,所述处理器具有一个或多个处理核。类似地,尽管在图1中被示出为一个处理器,但是图形处理器116可以包括一个或多个处理器,所述处理器具有一个或多个处理核。
程序代码存储装置112可以是ROM(只读存储器)、RAM(随机存取存储器)、DRAM(动态随机存取存储器)、SRAM(静态随机存取存储器)、硬盘、其它磁性存储装置、光学存储装置、其它存储装置、或者这些存储设备类型的组合或变型。在一些实施例中,程序代码的一部分被存储在可编程的ROM(例如ROM、PROM(可编程只读存储器)、EPROM(可擦除可编程的只读存储器)、EEPROM(电可擦除可编程的只读存储器)等等)中,并且程序代码的一部分被存储在可移除介质(诸如盘120(例如CD-ROM、DVD-ROM等等))上,或者可以被存储在磁带盒、存储器芯片等等上,或在需要时通过网络或其它电子信道来获得。在一些实现方式中,可以发现程序代码被具体化在非暂时性计算机可读存储介质中。
暂时性数据存储装置114可用于存储变量以及其它游戏和处理器数据。在一些实施例中,暂时性数据存储装置114是RAM并且存储在玩视频游戏期间所生成的数据,并且其部分还可以被预留用于帧缓冲器、深度缓冲器、多边形列表、纹理存储装置和/或对于渲染图像作为视频游戏呈现的部分所需要的或可用于渲染图像作为视频游戏呈现的部分的其它数据。
在一个实施例中,I/O设备106是这样的设备:用户与之交互以玩视频游戏或以其它方式与控制台102交互。I/O设备106可以包括用于与控制台102交互的任何设备,包括但不限于视频游戏控制器、操纵杆、键盘、鼠标、小键盘、VR(虚拟现实)耳机或设备等等。
显示器104可以是任何类型的显示设备,包括电视、计算机监视器、膝上型屏幕、移动设备屏幕、平板屏幕等等。在一些实施例中,I/O设备106和显示器104包括公共的设备,例如触摸屏设备。仍另外地,在一些实施例中,I/O设备106和显示器104中的一个或多个被集成在控制台102中。
在各种实施例中,由于视频游戏很可能使得在显示器104上所呈现的特定图像序列取决于游戏指令处理的结果,并且那些游戏指令很可能进而取决于用户输入,所以控制台102(以及处理器110和图形处理器116)被配置成快速地处理输入并且实时或接近实时地渲染响应性的图像序列。
各种其它组件可以被包括在控制台102中,但是为了清楚而被省略。示例包括联网设备,所述联网设备被配置成将控制台102连接到网络(诸如因特网)。
图2是根据一个实施例的图示了处理器和缓冲器交互的框图。如图2中所示,处理器110执行程序代码和程序数据。响应于执行程序代码,处理器110向图形处理器116输出渲染指令。图形处理器116进而从多边形缓冲器150中读取数据,并且与(一个或多个)像素缓冲器160交互以形成被输出到显示器的一个或多个图像的图像序列。可替换地,代替于将渲染指令发送到图形处理器116或附加于将渲染指令发送到图形处理器116,处理器110可以直接与多边形缓冲器150交互。例如,处理器110可以确定在视图中将出现哪些对象并且将那些对象的多边形或其它数学表示提供到多边形缓冲器150以用于通过图形处理器116的后续处理。
在一个示例实现方式中,处理器110向图形处理器116发布高级图形命令。在一些实现方式中,这样的高级图形命令可以是由OpenGL规范所指定的那些,或由图形处理器制造商所指定的那些。
在图形渲染过程的一个实现方式中,图形处理器116从针对多边形的多边形缓冲器150中读取多边形数据,相应地处理该多边形并且更新(一个或多个)像素缓冲器160,然后前进到下一个多边形直到所有多边形都被处理,或者至少所有需要被处理的多边形和/或在视图中的多边形被处理。因而,渲染器处理多边形的流,尽管多边形可以在适当的地方被读取并且是有限集,其中多边形的数目是已知的或可确定的。为了存储器效率和速度,在一些实现方式中可能优选的是多边形作为流被处理(如相对于随机访问或其它排序),使得被用于正被处理的多边形的快速、昂贵的存储器并非对于包括图像的所有多边形都是必需的。
在一些实施例中,处理器110可以按排序次序(如果一个是可能的,在存在重叠多边形的情景中可能不是这种情况)来加载具有多边形数据的多边形缓冲器150,但是更典型地,多边形以未排序次序被存储在多边形缓冲器150中。应当理解的是,尽管这些示例使用多边形作为被处理的图形元素,但是本文中所述的装置和方法还可以被使用在除了多边形之外的图形元素上。
图3是根据一个实施例的待渲染的场景300的框图。场景300包括多个3D(三维)对象302、302A-302B。每个对象302可以包括一组多边形(例如三角形)。相机306被配置成捕获场景300的图像。场景300的投影被相机306捕获并且由屏幕空间308来表示。相机306所捕获的场景300的视图由视口304表示。如所示的,对象中的一些(诸如场景300的对象302A)可以在视口304外部。还如所示的,对象中的一些(诸如对象302B)可以部分地在视口304外部。
在一个实施例中,被显示在显示设备上的场景300的图像对应于屏幕空间308。相机306可看到的场景300的视图(即,由屏幕空间308所表示的图像)可以随着相机306在3D空间中相对于场景中的对象302移动而改变。而且,对象302可以在场景300中移动。
图4A是根据一个实施例的图示了使用栅格化来渲染场景400的框图。类似于图3中所示的图像,场景400包括多个对象。相机406被配置成捕获场景400的图像,其被表示在屏幕空间408中。相机406通过视口410来观察场景400。
所公开的实施例涉及使场景400中的对象栅格化来生成屏幕空间408中的图像。栅格化力争将像素渲染为从相机406直接可见的那些。当渲染器(例如处理器110和/或图形处理器116)不需要关于场景400的任何全局信息的时候,栅格化可提供良好性能。
一个栅格化算法取3D场景400(其被描述为包括多边形的对象),并且将场景渲染到屏幕空间408中的2D表面(通常是计算机监视器)上。多边形自身被表示为三角形的集合。每个三角形由3D空间中的三个顶点来表示。在非常基本的水平上,栅格化器件取顶点的流,将它们变换成屏幕空间408中对应的2D点,并且在适当的时候填充经变换的2D三角形。
栅格化典型地涉及剔除一个或多个对象或部分对象。截锥剔除移除在视口410外部的任何对象,诸如对象402A。视口剔除移除与视口410的边缘部分重叠的对象的部分,诸如对象402B的部分。背面剔除移除不能被相机406看到的对象的背部部分404。在一些实施例中,深度测试可以被执行以在屏幕空间408中每像素的基础上移除被其它对象挡住的对象的部分。
当栅格化完成的时候,屏幕空间408中场景的图像被生成。在一些实施例中,场景空间408的像素密度还可导致与场景400中的对象相关的信息损失。
图4B是根据一个实施例的场景的经栅格化的图像的示例。图4B中所示的图像表示由图4A中的相机406所捕获的场景400在屏幕空间408中的图像。
对于屏幕空间408中的每个像素412,处理器能够访问与像素内对象的位置、对象的颜色、对象的定向和/或表面纹理信息(例如粗糙度值)等等对应的数据。栅格化的结果因此是具有实际3D场景的相对有限的信息的2D图像。向经栅格化的图像添加反射可能是难以解决的问题,因为对于高质量反射所需要的信息可能在视口410外部和/或在已经被部分剔除的对象后方,因而关于那些对象的信息不再可用于渲染器。
如所讨论的,当反射被添加到图4B中所示的图像的时候,有限的信息可用于渲染器。由于各种对象和对象的部分已经被剔除以生成经栅格化的图像,所以针对已经被剔除的那些对象和对象部分的数据可能不再可用,并且不能用于添加反射。例如,对应于对象402A(即通过截锥剔除被剔除)的数据不再可用于将反射添加到没有被剔除的对象,诸如对象414。
图5是根据一个实施例的图示了不同类型的反射的示例性图像。在一些实施例中,反射可以被分类成镜面反射或有光泽的反射。图像的右下角部分502表示镜面反射,并且图像的左上角部分504表示有光泽的反射。
基于形成反射的表面的粗糙度(或平滑度),反射可以是镜面的或有光泽的。如本文中所使用的,镜面反射是指自平滑表面的类镜面反射;而有光泽的反射由从包括多个微刻面(microfacet)的表面反射的光的平行射线产生,其中所反射的射线在各种不同的方向上从微刻面朝向观察者或相机反射或弹开。
图6是根据一个实施例的图示了镜面反射的框图。表面600是平坦的并且具有平滑面。入射平行光线602从表面600反射为经反射的射线604。由于表面600具有平滑面,所以经反射的射线604也是平行的,如同入射平行光线602那样。结果是自表面的类镜面的反射。
图7是根据一个实施例的图示了有光泽的反射的框图。表面700不平滑并且包括多个微刻面706(例如具有随机定向的反射性表面)。入射平行光线702从表面700反射为经反射的射线704。由于表面700不平滑,所以经反射的射线704在多个方向上从微刻面706朝向观察者或相机708反射。有光泽的反射因此在被观察者或相机708观看的时候具有模糊效应。
如本文中所公开的,反射可以从附近对象被形成在对象上。在一个实施例中,用于确定一个对象到另一个上的反射的技术被称为射线行进(ray marching)。如以下所描述的,射线行进可导致射线行进成功或射线行进失败。
图8A是根据一个实施例的图示了射线行进成功的框图。在图8B中示出场景在屏幕空间808中的图像。对于屏幕空间808中的图像中的每个像素,处理器确定对象是否被示出在像素中。对于给定像素可见的对象在图8A中被表示为眼射线814。一些像素(诸如像素804)可示出背景(例如天空),并且因而没有对象。在一些实施例中,对于任何背景像素(诸如像素804)省略射线行进。
在一个实施例中,对于其中显示了对象的屏幕空间808中图像中的每个像素(诸如像素802)执行射线行进。如以上所讨论的,对于像素802中所示的对象,处理器能够访问与像素802内对象的位置、对象的颜色、对象的定向和/或表面纹理信息(例如粗糙度值)等等相对应的数据。基于关于对象的该数据,可以使一个或多个射线行进以确定将在像素802处被示出的反射的颜色。
在一些实现方式中,对于平滑表面,一个射线从像素802行进。如所讨论的,平滑表面结果是镜面反射,其中所反射的光形成平行射线。因此,需要仅一个射线来确定针对平滑表面的反射信息。然而,对于其中所反射的光形成在各种方向上行进的射线的较粗糙表面,多个射线用于确定反射信息。在一些实现方式中,对于较粗糙的表面,针对像素而行进的射线的数目增大。在一些实现方式中,行进的射线的数目例如能够以每帧的射线限制(诸如四个射线)被加盖(cap)。在图8A-8B所示的示例中,为了清楚而示出一个射线,但是可以使多个射线从像素802在各种方向上行进(即用于有光泽的反射)。
如图8A-8B中所示,场景中对象上的点810对应于像素802。基于在点810处的对象上的表面定向,可以确定主反射射线806的方向。基于在点810处的对象上的表面定向,射线806被投射在该方向上。在一个实现方式中,射线806逐像素地“行进”通过屏幕空间808中的图像以确定射线806是否与屏幕空间808中的图像中的另一对象相交。可以通过检查与给定像素处的射线806的深度(z值)相比的在给定像素中的对象的深度值(所谓的“z值”)来确定相交。如所示的,射线806在点812处与另一对象相交,该点812在所示的示例图像中有四个像素那么远。射线806的射线行进导致“射线行进成功”,因为屏幕空间808中的另一对象被射线806相交。来自点812的颜色信息可以被存储在缓冲器中以计算在像素802处所显示的反射的颜色。如所描述的,基于点810处的表面粗糙度,多个射线可以从点810投射在各种方向上。为导致射线行进成功的每个射线而存储被经射线行进的射线相交的对象的颜色信息,并且所述颜色信息可以被聚合以形成像素802处的最终反射信息。
然而,行进的一些射线在抵达视口边缘之前可能不与屏幕空间808中的图像中的任何对象相交,这被称为“射线行进失败”。图9A是根据一个实施例的图示了射线行进失败的框图。在图9B中示出场景在屏幕空间908中的图像。
如所示出的,在像素902处,显示对象上的点910。基于点910处的表面定向(和/或表面粗糙度),使得一个或多个射线从点910行进。为了清楚而示出一个射线906。射线906的方向基于点910处的表面定向。射线906逐像素地行进通过屏幕空间908。然而,射线906在不与任何其它对象相交的情况下抵达视口912的边缘。这被视为射线行进失败。当发生射线行进失败的时候,基于经射线行进的射线906不能为点910获得针对反射的颜色信息。在图像中发生的射线行进失败的数目和/或百分比可取决于场景的复杂度、场景中对象的布置、以及场景空间图像的像素中对象的表面定向。
用于执行射线行进的一个实施例涉及逐像素地穿过屏幕空间图像直到另一对象被相交(即射线行进成功,图8B)或抵达视口的边缘(即射线行进失败,图9B)为止。在图10A-10D和图11中描述用于执行经优化的射线行进的另一实施例。
在一些实施例中,对于屏幕空间中的图像,可以生成z缓冲器。z缓冲器为屏幕空间中的图像中的每个像素而存储场景中最近对象的(相对于相机位置的)深度值。如果对于给定像素而言没有对象被示出在屏幕空间中,则z缓冲器可存储针对该像素的空值。
另外,可以计算z缓冲器的N数目个附加更粗略表示。数目N是可配置的。例如,N可以是5。在z缓冲器的每个更粗略水平的表示中,像素能够以2的幂的群组(即2个像素、4个像素、8个像素、16个像素等等)而塌缩或缩减规模(相对于下一个更精细的水平)。在一个实现方式中,将一组z值缩减规模到一个z值通过如下来被执行:将经缩减规模的z值设置成被缩减规模的该组z值中的最小z值。
在本文中描述用于执行经优化的射线行进的一个实施例。如所描述的,处理器检查全大小(原始)z缓冲器以确定从原点像素投射的射线是否与射线方向上的近邻像素中的另一对象相交。如果不相交,则处理器检查下一个更粗略z缓冲器水平中的对应像素位置。在下一个更粗略的z缓冲器水平处,射线方向中的下一个“像素”被检查以核对相交。再次,由于更粗略的z缓冲器表示多个像素,所以使更粗略的z缓冲器中的一个“像素”行进对应于跨原始图像的多个像素而行进或“跳跃”。如果在更粗略的z缓冲器中的下一个像素中没有发现相交,则下一个更粗略的z缓冲器被选择并且被检查。如果最粗略的z缓冲器(例如第N个z缓冲器)已经被选择,则逐像素地(在最粗略的z缓冲器中)传统式射线行进来寻找相交。
如果在更粗略的z缓冲器之一中发现相交,于是处理器“上升一水平”,并且在下一个更精细的z缓冲器中检查相交的像素位置,并且在下一个更精细的z缓冲器中在射线方向上射线行进。以此方式,当发现相交时,处理器升高规模一次以到下一个更精细的z缓冲器,并且继续执行射线行进。每当处理器在射线方向上(在z缓冲器的适当水平下)步进而不击中任何事物的时候,处理器缩减规模到下一个更粗略的z缓冲器以潜在地跳过屏幕上更大的区。一存在相交处理器就升高规模到下一个更精细的z缓冲器以细化数据,然后返回到并且射线行进。如果处理器最后是在最精细的水平下与某个事物相交,则过程完成,因为已经发现相交点。
图10A是根据一个实施例的z缓冲器的一部分的图形表示。在图10A中,在垂直轴中示出深度值(即z值),其中用较大的直方图条示出具有更靠近于相机的对象的像素,并且用较小的直方图条示出具有更远离相机的对象的像素。对于像素位置1002,射线1004可以基于像素位置1002处的表面定向而在特定方向上行进。图10A中所示的直方图条表示屏幕空间中在射线1004的方向上的像素的z值。
为了执行经优化的射线行进,由处理器访问屏幕空间中对象的深度值的z缓冲器。在图10B中示出经缩减规模的z缓冲器的图形表示。参考图10A-10B,图10A中的z值1010A和1010B已经被缩减规模到图10B中的z值1010C。类似地,图10A中的z值1012A和1012B已经被缩减规模到图10B中的z值1012C。由于在图10A中的下一个像素中没有发现相交,所以处理器检查下一个更粗略的z缓冲器,诸如图10B中所示的那个。在图10B中,处理器再次确定射线1004是否在近邻像素中与z缓冲器相交。如果不相交,则处理器检查下一个更粗略的z缓冲器,如图10C中所示。
在图10C中示出经进一步缩减规模的z缓冲器的图形表示。参考图10B-10C,图10B中的z值1010C和1012C已经被缩减规模到图10C中的z值1020。再次,射线1004被测试以确定在经进一步缩减规模的z缓冲器中射线1004是否在近邻像素中与z缓冲器相交。在一个实施例中,该过程被重复直到射线与近邻经缩减规模的z值相交或抵达视口的边缘为止。在一个实施例中,一旦抵达最粗略的z缓冲器,就可以在最缩减规模的z缓冲器空间中“逐像素地”投射射线以确定是否发现了相交。
在图10D中示出经仍进一步塌缩的z缓冲器的图形表示。如图10D中所示,射线与经缩减规模的z缓冲器中的另一z缓冲器值相交。这指示射线行进成功。
在该阶段处,处理器选择下一个更精细的z缓冲器(“下降一水平”)并且标识在下一个更精细的z缓冲器中的像素。然后在下一个更精细的水平上完成射线行进以查找相交。以此方式,射线行进可以通过使用更粗略的z缓冲器数据来进行更大的步进来高效地移动通过空的空间。
图11是根据一个实施例的用于执行射线行进的方法步骤的流程图。在一些实现方式中,可以使用屏幕空间栅格化来生成场景的2D图像。对于2D图像中的每一个像素,与像素中所示的对象的深度相对应的z值可以被存储在z缓冲器中。
在步骤1102处,处理器接收与图像中的对象的深度值相对应的z缓冲器数据。z缓冲器数据可以包括全部z缓冲器、或z缓冲器的一部分。在步骤1104处,处理器接收z缓冲器数据的N个经缩减规模的版本。z缓冲器数据的每个经缩减规模的版本可以组合来自两个或更多像素的深度信息。在一些实现方式中,z缓冲器数据的经缩减规模的版本取针对待缩减规模的一组z值的最小深度值。
对于从其执行了射线行进的给定像素,在步骤1106处,处理器确定用于射线行进的射线方向。在步骤1108处,处理器基于在射线方向上在下一个像素位置处的z值来确定z缓冲器数据中(在当前水平下,所述当前水平初始是全大小缓冲器水平)下一个像素位置是否与另一对象相交。如果没有发现相交,则处理器在步骤1110处确定当前水平是否是最粗略的z缓冲器水平。如果是,则方法返回到步骤1108,其中处理器射线行进到当前水平下的下一个像素。如果在步骤1110处,处理器确定当前水平不是最粗略的z缓冲器水平,那么在步骤1112处,处理器在对应于像素的下一个最粗略的z缓冲器中(即“上升一水平”)找到像素位置。方法然后返回到步骤1108,其中处理器射线行进到当前水平(其已经刚被缩减规模到下一个更粗略的水平)处的下一个像素。
如果在步骤1108处,处理器在下一个像素位置中发现了相交,则在步骤1114处,处理器确定当前水平是否是原始(全大小)z缓冲器水平。如果是,则在步骤1118处,处理器基于针对相交(即射线行进成功)的z缓冲器信息来确定针对射线的相交信息。
如果在步骤1114处,处理器确定了当前水平不是原始(全大小)z缓冲器水平,那么在步骤1116处,处理器在对应于像素的下一个更精细的z缓冲器中(即“下降一水平”)找到像素位置。方法然后返回到步骤1108,其中处理器射线行进到当前水平(其已经刚被升高规模到下一个更精细的水平)处的下一个像素。
因而,图11的方法提供经优化的射线行进技术,其中与逐像素地检查屏幕空间相比可以更快速地穿过大、空的空间。
然而,如以上在图9A-9B中所述,在一些情况中,射线行进可导致射线行进失败。本公开内容的一个实施例提供具有射线行进失败的射线追踪射线。
图12是根据一个实施例的图示了为射线行进失败的射线执行射线追踪的框图。如所示的,屏幕空间图像的给定像素对应于3D场景中的点1202。点1202位于一对象上,所述对象恰巧是图12中的示例中的场景的地面表面。使射线1204自点1202射线行进;然而,射线1204导致射线行进失败,因为射线1204在没有与任何其它对象相交的情况下抵达视口1212的边缘。
根据本公开内容的实施例,射线1208可以被射线追踪,其开始于点1206,该点1206是射线行进抵达了视口1212边缘的点。在一些情况中,经射线追踪的射线1208与对象(诸如对象1210)相交。来自在该处经射线追踪的射线1208与对象1210相交的点1214的颜色信息可以被存储在缓冲器中以计算在与点1202相关联的像素处的反射的颜色。如果经射线追踪的射线1208抵达了场景的设界框(未被示出),则经射线追踪的射线1208被丢弃并且基于射线1208不能为与点1202相关联的像素获得颜色信息。
图13是根据一个实施例的用于渲染反射的方法步骤的流程图。图13提供了混合的射线行进和射线追踪技术,其中射线行进首先被使用以在屏幕空间中寻找可能的相交。当射线行进失败的时候,使用射线追踪。
在步骤1302处,处理器选择屏幕空间中的一像素。图13中的处理器可以是图1中的处理器110与图形处理器116中的一个或其组合。在一个实施例中,屏幕空间栅格化可以用于在屏幕空间中生成场景的2D图像。图13中的方法用于将反射添加到屏幕空间图像中的像素。在步骤1302处所选的像素可以是屏幕空间图像中的任何像素。
在步骤1304处,处理器确定像素是否包括对象。在一些情况中,像素可以包括背景(例如天空),并且因而不包括场景的任何对象。如果在步骤1304处,处理器确定了像素不包括对象,则不为像素计算反射,并且方法继续进行到步骤1306,其中处理器确定在屏幕空间中是否存在任何更多的像素来针对反射进行处理。如果是,则方法返回到步骤1302,在这里选择不同的像素。在一个实现方式中,每个像素被串行地处理。然而,在另一实现方式中,图像中的每个像素可以被并行处理,例如通过图形处理器(例如GPU)。
如果在步骤1304处,处理器确定了像素包括对象,则方法继续进行到步骤1308。在步骤1308处,处理器确定像素中对象的表面的粗糙度值。在一些实施例中,3D场景到2D图像的栅格化导致关于同2D图像中的像素相关联的对象的某些信息是已知的。这样的信息的示例包括表面粗糙度和表面定向。表面粗糙度可以由粗糙度值来表示。例如,粗糙度值可以是在0.0和1.0之间的十进制值。
在步骤1310处,处理器基于糙度值来确定为像素产生的多个射线。如上所述,对于平滑的表面,产生仅一个射线。对于更粗糙的表面可以产生更多射线。在一些实现方式中,所产生的射线的数目被阈值限制(例如每帧4个射线)加盖。
在步骤1312处,处理器为产生的每个射线选择射线方向。每个射线的射线方向基于像素中对象的表面定向。对于平滑表面(即产生一个射线),可以基于自对象表面的简单数学反射来确定射线的方向。
在其中产生多个射线的情况中,射线产生算法可以确定所产生的每个射线的方向。在一些实现方式中,可以使用准蒙特卡洛技术,即确定性的随机数生成以用于产生射线。例如,对于给定的帧,基于粗糙度值来确定将为像素产生的四个射线。准蒙特卡洛技术可以用于确定用于四个射线的方向。四个射线中的每一个具有落入基于表面定向而可达的方向的分布内的方向。
稍后,在包括与相同对象的相同表面相对应的像素的后续帧中,准蒙特卡洛技术再次被用于确定将产生的射线的方向,但是选择不与为先前(一个或多个)帧中的射线所选择的方向相重叠的方向。可以为后续帧重复该过程,从而为具有所示的相同对象的相同表面的不同帧选择不同的射线方向。通过在不同的帧中选择不同的射线方向,为不同的帧计算不同的反射信息。这可导致抖动的反射,因为对于相同的点,反射将在不同帧之间看起来不同。如以下更详细地描述的,在若干帧之上的不同反射信息可以在一系列帧之上被聚合。以此方式,可以实现不太有噪声的结果,因为针对不同帧所产生的射线具有不同的方向(并且因而不同的反射信息),所述不同的方向可以被聚合在一起以形成反射信息。
一旦为一个或多个射线确定了(步骤1312)射线方向,在步骤1314处,处理器就为所述一个或多个射线中的每一个执行射线行进。在一个实施例中,射线行进涉及逐帧地检查每个射线以寻找相交。在另一实施例中,可以使用经优化的射线行进方法,如图11中所描述的。
在步骤1316处,处理器为每个射线而确定射线行进是成功还是失败。对于给定的射线,如果射线行进是成功的,则在步骤1318处,处理器存储射线经由射线行进所发现的相交的颜色值信息。对于给定射线,如果射线行进失败,则在步骤1320处,处理器为射线执行射线追踪。如所描述的,当射线在没有与任何对象相交的情况下抵达视口边缘的时候,射线行进失败。被射线追踪的射线可以从视口的边缘开始,因为处理器知道在视口内没有其它相交(即,因为射线行进失败)。
在步骤1322处,对于被射线追踪的每个射线,处理器确定经射线追踪的射线是否与3D场景中的对象相交。如所描述的,射线追踪可涉及寻找与场景中所有对象、而不仅仅是在视口内的对象的相交。
对于不与任何对象相交(例如抵达场景的设界框的边缘)的每个经射线追踪的射线,在步骤1324处,处理器丢弃所述射线。因此不为所述射线实现针对反射的颜色信息。
对于确实对象相交的每个经射线追踪的射线,在步骤1326处,处理器存储射线经由射线追踪所发现的相交的颜色值信息。
在步骤1328处,处理器聚合与场景中的对象有相交的一个或多个射线的颜色值。可已经经由射线行进或射线追踪来获得颜色值。在一个实施例中,颜色值简单地在一起被求平均以确定针对像素处的反射的颜色值。
在步骤1328之后,方法继续进行到步骤1306,其中处理器确定在屏幕空间中是否存在任何更多的像素来针对反射进行处理,如上所述。
在一个实施例中,图13的方法用于为对象位于其中的屏幕空间中的每个像素生成主反射。在一个实施例中,可以使用立方图(cube map)来生成次级反射。在另一实施例中,还可以使用图13的方法来生成次级反射。
如上所述,本公开内容的实施例提供一种系统和方法,其中通过如下来生成反射:尝试执行射线行进,并且如果射线行进失败则执行射线追踪。以下描述的另一实施例提供一种系统和方法来重用针对给定像素的附近像素的射线行进结果。
图14A是根据一个实施例的图示了3D场景的框图。3D场景可以被栅格化至2D屏幕空间。2D屏幕空间的三个像素被示出以用于参照。像素1402A对应于场景中对象的表面上的第一点(即所述对象是地面),像素1402B对应于场景中对象的表面上的第二点,并且像素1402C对应于场景中对象的表面上的第三点。假设图13中所述的方法被执行以确定针对像素1402B的反射信息。还假设:基于像素1402B中的对象的表面粗糙度,应当产生三个射线来确定反射信息。通过使用图13中的方法,可以确定三个射线方向并且分离地使其射线行进,其中如果射线行进失败,则经由射线追踪来重投射射线,如所描述的那样。
然而,本公开内容的一些实施例可避免产生新的射线,例如针对像素1402B的三个新射线,并且在一些情况中,可以重用来自附近像素的信息以确定反射信息。在这样的实施例中,如果附近像素(其在阈值半径内)具有类似的表面粗糙度(其在阈值粗糙度内)并且还具有类似的表面定向(其在阈值定向内),则来自这样的近邻像素的经射线行进和/或射线追踪的信息可以在确定针对给定像素的反射颜色信息时被重用。在一些实施例中,附加的约束可以是:尝试被重用的对象颜色信息应当落在从给定像素可达的射线分布内。
图14B是根据一个实施例的图示了图14A中的3D场景的框图,其中一些射线从近邻像素被重用。如所描述的那样,当尝试确定针对给定像素(例如像素1402B)的反射信息的时候,从来自先前帧的附近像素中而来的一些反射信息可以被重用。在所示的示例中,像素1402A和1402C在像素1402B的阈值半径内。阈值半径可以是可配置的。在一个实现方式中,阈值半径是自被检查的中心像素的半径中的大约6-8个像素。当计算针对(先前的帧中或当前的帧中的)像素1402A的反射信息的时候,射线投射自像素1402A,并且被标识为在点1406A处与对象相交。根据图13的方法,可已经使用射线行进或射线追踪来发现相交。在图14B中所示的示例中,经由射线行进而发现相交,因为相交的对象在视口内。类似地,当计算针对像素1402C(其在先前的帧中或在当前的帧中)的反射信息的时候,射线投射自像素1402C,并且被标识为在点1406C处与对象相交。如本文中所公开的,代替于从像素1402B产生多个射线来确定反射信息,如果满足某些条件的话,则一些实施例可以重用来自点1406A和1406C的颜色信息。
在一些实施例中,第一条件是:在与作为潜在可重用的信息的源的像素(即1402A或1402C)相关联的对象的表面粗糙度与同像素1402B相关联的对象的表面粗糙度之间的差在阈值粗糙度内。在一些实施例中,阈值粗糙度是可配置的。
在一些实施例中,第二条件是:在与作为潜在可重用的信息的源的像素(即1402A或1402C)相关联的对象的表面定向与同像素1402B相关联的对象的表面定向之间的差在阈值定向内。在一些实施例中,阈值定向是可配置的。
在一些实施例中,第三条件是:潜在可重用的信息应当从像素1402B在特定射线分布1408内可达。在一些实施例中,主反射射线的潜在射线方向的集合取决于从像素中的对象到相机和表面粗糙度的角。在图14B中示出了示例性的射线分布1408。在一个实现方式中,可以通过GGX着色模型来计算射线分布1408。可以从潜在可重用的信息(即,来自点1406A、1406C)的源到与像素1402B相关联的对象绘制一条线。如图14B中所示,针对潜在可重用的信息(即,来自点1406A、1406C)的两个源的线在射线分布1408内,从而满足所述第三条件。
在各种实施例中,所述第一、第二和第三条件中的一个、两个或全部三个可以用于确定数据是否可以用此方式被重用。
如上所述的一个实施例,近邻像素所确定的、被重用的反射信息在先前的一帧中被计算。在另一实施例中,重用的信息可以来自相同的帧,但是来自其反射信息已经被计算的像素。
图15是根据一个实施例的用于重用附近像素的射线信息的方法步骤的流程图。在步骤1502处,对于第一像素,处理器确定要产生的射线的数量。图15中的处理器可以是图1中的处理器110与图形处理器116中的一个或其组合。如上所述,在一些实施例中,要产生的射线的数量基于与第一像素相关联的对象的表面粗糙度。在步骤1504处,处理器标识在第一像素的阈值半径内的近邻像素。在一个实施例中,阈值半径是可配置的。在一个实施例中,阈值半径内的每个近邻像素被检查以尝试找到可重用的反射信息。在另一实施例中,阈值半径内的近邻像素被检查直到定位了足够的可重用信息为止,在该点处不检查附加的近邻像素。
在步骤1506处,对于给定的近邻像素,处理器确定与该近邻像素相关联的对象是否具有与相关联于第一像素的对象类似的表面粗糙度。如果不是,则来自近邻像素的反射信息不被重用。如果是,则方法继续进行到步骤1508。
在步骤1508处,对于给定的近邻像素,处理器确定与该近邻像素相关联的对象是否具有与相关联于第一像素的对象类似的表面定向。如果不是,则来自近邻像素的反射信息不被重用。如果是,则方法继续进行到步骤1510。
在步骤1510处,对于给定的近邻像素,处理器确定潜在可重用的信息是否从与射线分布内的第一像素相关联的对象可达。如果不是,则来自近邻像素的反射信息不被重用。如果是,则方法继续进行到步骤1512。
在步骤1512处,处理器重用来自所述近邻像素的反射信息。
尽管以特定的次序示出了步骤1506、1508、1510,但是在其它实施例中,可以按任何次序来执行步骤1506、1508、1510。而且,在一些实施例中,步骤1506、1508、1510中的一个或多个是可选的并且可以被省略。
在一个实施例中,在第一帧中,通过使用图13的方法来生成针对图像的每隔一个像素(或某组像素)的反射。例如,如果图像由黑白棋盘图案表示,则图13的方法仅仅被应用到由白色棋格所表示的像素(即每隔一个像素)。对于由黑色棋格所表示的像素,图15的射线重用技术可以用于生成针对那些像素的反射信息。在下一帧中,计算被反转,并且图13的方法被执行以生成针对由黑色棋格所表示的像素的反射信息,并且图15的射线重用技术被执行以生成针对由白色棋格所表示的像素的反射信息。以此方式,对于每一帧,存在针对该帧的全分辨率的反射信息,但是仅仅需要一半那么多的射线。
在一些实现方式中,可以在具有或没有图15的射线重用的情况下使用图13的方法将反射添加到图像的每个像素。在一些情况中,跨整个帧的反射结果可展现噪声,特别是当场景包括有光泽的反射的时候。因而,一些实施例可以通过执行时间滤波而消除噪声。
图16A是根据一个实施例的反射的示例。屏幕空间中的给定像素可对应于对象上的点1602。可以从与点1602相关联的像素产生反射射线,并且所述反射射线可以在点1604处与另一对象相交。来自点1604的颜色信息可以用于将反射信息添加到与点1602相关联的像素。还可以相对于针对给定帧的眼睛/相机的虚拟位置1608A在虚拟反射域中针对点1604来计算所投影的点1606。
在后续帧中,如图16B中所示,相机/眼睛的虚拟位置1608B已经移动到了不同的位置。在屏幕空间中、在相机/眼睛的经更新的虚拟位置1608B中的给定像素可对应于对象上的点1610。可以从与点1610相关联的像素产生反射射线,并且所述反射射线可以在点1614处与一对象相交。可以相对于针对给定帧的眼睛/相机的经更新的虚拟位置1608B在虚拟反射域中针对点1614来计算所投影的点1616。在图16B中,从所投影的点1616到眼睛/相机的经更新的虚拟位置1608B的线经过点1610。
在一些实施例中,处理器可以被配置成确定在先前的帧(图16A)中的点1602是否具有与后续帧(图16B)中的点1610类似的表面粗糙度。如果点1602和1610的表面粗糙度值在阈值差内,则针对这两个帧的反射结果可模糊在一起,这被称为时间滤波。这是因为两个点1602和1610对应于表示对象相同部分的反射。可以帧到帧地为图像的每个像素重复时间滤波。在一些实现方式中,结果是对反射的具有较少噪声的更平滑的表示。然而,在一些情况中,处理器可以确定对以下情况存在低置信度:针对所述两个帧的反射结果可以被模糊在一起。例如,如果点1602和1610的表面粗糙度值足够不同使得它们超过阈值,则针对所述两个帧的反射结果不能被模糊在一起。而且,如果另一对象已经移动到原始反射相交(例如图16A中的点1604)前方,则针对所述两个帧的反射结果不能被模糊在一起。
图17是根据一个实施例的图示了后续帧中具有不同表面粗糙度值的两个点的框图。假设对象1700(即地面)的表面具有棋盘图案,其具有粗糙表面1710和平滑表面1720的交替区域。在第一帧中,从虚拟反射域中的点1730到眼睛/相机的第一虚拟位置1708A的线经过点1702,其对应于粗糙表面1710。在第二帧中,从虚拟反射域中的点1730到眼睛/相机的第二虚拟位置1708B的线经过点1704,其对应于平滑表面1720。在该情况中,针对所述两个帧的反射结果不能被模糊在一起,因为点1702和1704的表面粗糙度值不在彼此的阈值差内。
在图16A-16B中所示的示例中,示出了单个反射射线。这样的实现方式可对应于导致镜面反射的平滑表面。对于其中产生多个射线以生成有光泽的反射的粗糙表面,可以计算由所述多个射线与对象相交的平均位置,并且可以基于由所述多个射线与对象相交的平均位置而重复上述过程。
图18是根据一个实施例的用于执行时间滤波的方法步骤的流程图。对于第一帧,在步骤1802处,处理器确定由反射射线或一组反射射线与对象相交的位置。图18中的处理器可以是图1中的处理器110与图形处理器116中的一个或其组合。在各种实施例中,相交的位置可以是自单个反射射线的单个位置,或者可以是基于与对象相交的多个反射射线的相交的平均位置。在另一实施例中,多个相交位置可以被计算,诸如当多个反射射线与一对象相交的时候。
在步骤1804处,处理器确定反射域中相交的位置。在步骤1806处,处理器从所述反射域中相交的位置向眼睛/相机的位置投影一条线。在步骤1808处,处理器确定在其上示出了反射的对象的表面上所投影的线的相交位置。
对于后续帧,处理器确定由反射射线或一组反射射线与对象相交的位置(步骤1810),确定反射域中相交的位置(步骤1812),从所述反射域中相交的位置向眼睛/相机的位置投影一条线(步骤1814),并且确定在其上示出了反射的对象的表面上所投影的线的相交位置(步骤1816)。步骤1810、1812、1814、1816相应地类似于步骤1802、1804、1806、1808,但是是针对后续帧。
在步骤1818处,处理器确定针对第一帧的对象的表面上所投影的线的相交位置的表面粗糙度是否在针对后续帧的对象的表面上所投影的线的相交位置的表面粗糙度的阈值差内。如果针对第一帧和后续帧的所投影的线的相交位置的表面粗糙度在阈值差内,则反射信息可以被模糊在一起以生成更平滑的反射。
在一些实施例中,在确定反射信息能被模糊在一起之前检查附加的准则。例如,可以比较来自第一帧和后续帧的由反射射线或该组反射射线与对象相交的位置的颜色信息,例如用以确定在两个帧中是否相同的对象被反射或者对象是否改变了颜色。图18中所描述的过程涉及单个相交位置。可以为多个相交位置重复所述过程。
如上所述,一些反射可以是镜面反射,并且一些反射可以是有光泽的反射。一些有光泽的反射还可以是经伸展的(stretched)反射。
图19图示了经伸展的反射1900的示例。图20是根据一个实施例的解释了经伸展的反射的框图。粗糙表面2000包括多个微刻面2002,其导致有光泽的反射。基于眼睛/相机2004相对于光源2006(或反射信息源)的掠射角,有光泽的反射可以变成被伸展开。经伸展的反射的形状一般取椭圆的形式,如图21中所示。落入椭圆内的反射数据可以通过模糊内核而被模糊在一起,所述模糊内核具有椭圆的形状和大小,用以生成针对椭圆内的像素的反射信息。在一些实施例中,模糊内核可以针对反射信息的给定片段向总体结果提供多少贡献来设置权重。在一些实现方式中,与更靠近于椭圆边缘的反射信息相比,更靠近于椭圆中心的反射信息可以在反射结果上被更重地加权(即具有更大影响)。
图21是根据一个实施例的经伸展的反射的示例。在点2102处所看到的的来自对象2104的反射可以取椭圆2106的形式。椭圆2106具有长轴2108和短轴2110。长轴2108和短轴2110的长度可以基于表面粗糙度和反射角被预计算并且被存储在查找表中。在一个实现方式中,椭圆轴针对单位长度向量(即为1的长度)。照此,椭圆的大小可以基于平均射线长度和投影而被线性地缩放,如下文所描述的。图22是根据一个实施例的表示经伸展的反射的椭圆的短轴的基于表面粗糙度和反射角的预计算的长度的绘图。图23是根据一个实施例的表示经伸展的反射的椭圆的长轴的基于表面粗糙度和反射角的预计算的长度的绘图。
图24是根据一个实施例的为有光泽的反射应用椭圆滤波器的示例。如所示的,点2402处的反射具有基于表面粗糙度和反射角的椭圆形状。来自附近对象的反射信息被示出为对象上的椭圆2404。针对反射域中反射信息的位置可以被计算并且位于椭圆2406处。椭圆2406被投影到屏幕空间2408上并且被缩放为椭圆2410。屏幕空间中的椭圆2410内的反射信息可以通过使用模糊内核而被模糊在一起,以得出最终反射信息。
图25是根据一个实施例的应用椭圆滤波器的流程图。在步骤2502处,对于给定的图像,处理器确定图像中所示的对象的表面粗糙度。图25中的处理器可以是图1中的处理器110与图形处理器116中的一个或其组合。表面粗糙度可以指示导致有光泽的反射的粗糙表面。
在步骤2504处,处理器确定在相机/眼睛位置与被反射的对象之间的反射角。在步骤2506处,处理器执行表中的查找,以基于表面粗糙度和反射角来确定椭圆的形状。椭圆可具有长轴和短轴。
在步骤2508处,处理器确定关于被反射的对象的反射信息的位置。反射信息的位置取椭圆的形式。在步骤2510处,处理器确定针对反射域中的反射信息的位置。反射域中的反射信息的位置也取椭圆的形式。
在步骤2512处,处理器将反射域中的反射信息的位置投影和缩放到屏幕空间中。在步骤2514处,处理器将模糊内核应用到屏幕空间中椭圆的经缩放的投影以得出最终反射信息。在一些实施例中,模糊内核可以针对反射信息的给定片段向总体结果提供多少贡献来设置权重。在一些实现方式中,与更靠近于椭圆边缘的反射信息相比,更靠近于椭圆中心的反射信息可以在反射结果上被更重地加权(即具有更大影响)。在另一实施例中,当在一系列帧之上选择射线方向的时候,可以选择在椭圆中心处的更多射线。照此,每个射线可具有相等的加权,但是由于更多射线被聚群在椭圆的中心,加权是隐式的(即所谓的“重要性采样”)。
另一实施例可以在模糊化阶段期间所使用的椭圆内生成多个点。时间滤波(图18)可以被应用到这些点中的每一个以在先前的帧中查找那些点中的每一个。具有最高权重的所选数目的点(例如4-5个点)则被用于模糊化。这样做可增强时间滤波的质量。
本文中引用的所有参考文献(包括出版物、专利申请和专利)据此通过引用被并入,就好像每个参考文献被单独并且特别地指示以通过引用被并入并且在本文中以其整体被阐明一样。
在描述本发明的上下文中(尤其是在以下权利要求的上下文中)对术语“一”和“一个”和“该”和“至少一个”以及类似指示语的使用将被解释为涵盖单数和复数二者,除非在本文中另行指示或清楚地通过上下文被否定。使用术语“至少一个”继之以一个或多个项的列表(例如“以下中至少一个:A和B”)将被解释为意指从所列出的项(A或B)中所选的一项或所列出的项(A和B)中两个或更多的任何组合,除非在本文中另行指示或清楚地通过上下文被否定。术语“包括”、“具有”、“包括有”和“包含”将被解释为开放式术语(即意指“包括但不限于”),除非另行指出。本文中对值范围的记载仅仅意图充当个体地指代落入范围内的每个单独的值的速记方法,除非在本文中另行指示,并且每个单独的值被并入到说明书中,就好像它在本文中被个体地记载那样。
可以用任何合适的次序来执行本文中所述的所有方法,除非在本文中另行指示或另行清楚地通过上下文被否定。对本文中提供的任何和全部示例、或示例性语言(例如“诸如”)的使用仅仅意图更好地说明本发明,并且不对发明范围造成限制,除非另行要求保护。说明书中的语言不应当被解释为将任何没有要求保护的元素指示为对于本发明的实践而言是必需的。
在本文中描述了本发明的优选实施例。对于本领域普通技术人员而言,在阅读前述描述时,那些优选实施例的变型可变得显而易见。发明人预期技术人员将视情况采用这样的变型,并且发明人意图以与本文中所具体描述的不同的方式来实践本发明。因此,本发明包括如由可适用的法律所准许的、在附于此的权利要求中所记载的主题的所有修改和等同物。此外,本发明涵盖上述元素在其所有可能的变型中的任何组合,除非在本文中另行指示或另行清楚地通过上下文被否定。
Claims (21)
1.一种用于为图像中的像素生成反射信息的设备,所述设备包括:
存储指令的存储器;以及
一个或多个处理器,其被配置成执行指令,以使得所述设备:
确定像素中对象的表面的粗糙度值;
基于所述粗糙度值来确定为像素产生的多个射线,其中较大的粗糙度值对应于为像素产生的射线的较大数量;
对于所述多个射线中的每个射线,选择射线的射线方向;
对于所述多个射线中的每个射线,基于射线的射线方向来执行射线的射线行进;
对于其中射线行进成功的每个射线,存储经由射线行进所发现的、被射线相交的对象的颜色信息,其中如果射线在不与任何其他对象相交的情况下被行进到与图像对应的视口的边缘,则射线行进对于该射线而言失败,并且其中如果在射线被行进到视口的边缘之前射线与对象相交,则射线行进对于该射线而言成功;
对于其中射线行进失败的每个射线,经由射线追踪来投射射线,并且存储经由射线追踪所发现的、被射线相交的对象的颜色信息;以及
基于经由射线行进所发现的、被射线相交的对象的颜色信息以及经由射线追踪所发现的、被射线相交的对象的颜色信息来为像素生成反射信息。
2.根据权利要求1所述的设备,其中所述多个射线是至少两个射线,其中为像素生成反射信息包括聚合被所述至少两个射线相交的对象的颜色信息。
3.根据权利要求1所述的设备,其中为第一射线执行射线行进包括在图像中在与第一射线对应的第一射线方向上逐像素地检查深度值,以尝试定位第一射线与图像中另一对象的相交。
4.根据权利要求1所述的设备,其中为第一射线执行射线行进包括:
接收与场景中对象的深度值对应的数据;
接收与场景中对象的深度值对应的经下采样的数据,其中所述经下采样的数据包括与场景中对象的深度值对应的数据的更粗略的表示;以及
尝试基于所述经下采样的数据来定位第一射线与图像中另一对象的相交。
5.根据权利要求1所述的设备,其中经由射线追踪来投射射线包括投射起源于对应于图像的视口上的一点的射线。
6.根据权利要求1所述的设备,其中所述图像是包括多个对象的三维场景的二维经栅格化的图像。
7.根据权利要求1所述的设备,其中如果对象的表面是光滑的,则射线的数量是一个;其中如果对象的表面是不光滑的,则射线的数量是两个或更多。
8.一种用于为图像中的像素生成反射信息的方法,所述方法包括:
由一个或多个处理器确定像素中对象的表面的粗糙度值;
由所述一个或多个处理器基于所述粗糙度值来确定为像素产生的多个射线,其中较大的粗糙度值对应于为像素产生的射线的较大数量;
对于所述多个射线中的每个射线,由所述一个或多个处理器选择射线的射线方向;
对于所述多个射线中的每个射线,由所述一个或多个处理器基于射线的射线方向来执行射线的射线行进;
对于其中射线行进成功的每个射线,由所述一个或多个处理器存储经由射线行进所发现的、被射线相交的对象的颜色信息,其中如果射线在不与任何其他对象相交的情况下被行进到与图像对应的视口的边缘,则射线行进对于该射线而言失败,并且其中如果在射线被行进到视口的边缘之前射线与对象相交,则射线行进对于该射线而言成功;
对于其中射线行进失败的每个射线,由所述一个或多个处理器经由射线追踪来投射射线并且存储经由射线追踪所发现的、被射线相交的对象的颜色信息;以及
由所述一个或多个处理器基于经由射线行进所发现的、被射线相交的对象的颜色信息以及经由射线追踪所发现的、被射线相交的对象的颜色信息来为像素生成反射信息。
9.根据权利要求8所述的方法,其中所述多个射线是至少两个射线,其中为像素生成反射信息包括聚合被所述至少两个射线相交的对象的颜色信息。
10.根据权利要求8所述的方法,其中为第一射线执行射线行进包括在图像中在与第一射线对应的第一射线方向上逐像素地检查深度值,以尝试定位第一射线与图像中另一对象的相交。
11.根据权利要求8所述的方法,其中为第一射线执行射线行进包括:
接收与场景中对象的深度值对应的数据;
接收与场景中对象的深度值对应的经下采样的数据,其中所述经下采样的数据包括与场景中对象的深度值对应的数据的更粗略的表示;以及
尝试基于所述经下采样的数据来定位第一射线与图像中另一对象的相交。
12.根据权利要求8所述的方法,其中经由射线追踪来投射射线包括投射起源于对应于图像的视口上的一点的射线。
13.根据权利要求8所述的方法,其中所述图像是包括多个对象的三维场景的二维经栅格化的图像。
14.根据权利要求8所述的方法,其中如果对象的表面是光滑的,则射线的数量是一个;其中如果对象的表面是不光滑的,则射线的数量是两个或更多。
15.一种非暂时性计算机可读存储介质,其存储指令,该指令在由一个或多个处理器执行时通过执行以下步骤使计算设备为图像中的像素生成反射信息:
确定像素中对象的表面的粗糙度值;
基于所述粗糙度值来确定为像素产生的多个射线,其中较大的粗糙度值对应于为像素产生的射线的较大数量;
对于所述多个射线中的每个射线,选择射线的射线方向;
对于所述多个射线中的每个射线,基于射线的射线方向来执行射线的射线行进;
对于其中射线行进成功的每个射线,存储经由射线行进所发现的、被射线相交的对象的颜色信息,其中如果射线在不与任何其他对象相交的情况下被行进到与图像对应的视口的边缘,则射线行进对于该射线而言失败,并且其中如果在射线被行进到视口的边缘之前射线与对象相交,则射线行进对于该射线而言成功;
对于其中射线行进失败的每个射线,经由射线追踪来投射射线,并且存储经由射线追踪所发现的、被射线相交的对象的颜色信息;以及
基于经由射线行进所发现的、被射线相交的对象的颜色信息以及经由射线追踪所发现的、被射线相交的对象的颜色信息来为像素生成反射信息。
16.根据权利要求15所述的计算机可读存储介质,其中所述多个射线是至少两个射线,其中为像素生成反射信息包括聚合被所述至少两个射线相交的对象的颜色信息。
17.根据权利要求15所述的计算机可读存储介质,其中为第一射线执行射线行进包括在图像中在与第一射线对应的第一射线方向上逐像素地检查深度值,以尝试定位第一射线与图像中另一对象的相交。
18.根据权利要求15所述的计算机可读存储介质,其中为第一射线执行射线行进包括:
接收与场景中对象的深度值对应的数据;
接收与场景中对象的深度值对应的经下采样的数据,其中所述经下采样的数据包括与场景中对象的深度值对应的数据的更粗略的表示;以及
尝试基于所述经下采样的数据来定位第一射线与图像中另一对象的相交。
19.根据权利要求15所述的计算机可读存储介质,其中经由射线追踪来投射射线包括投射起源于对应于图像的视口上的一点的射线。
20.根据权利要求15所述的计算机可读存储介质,其中所述图像是包括多个对象的三维场景的二维经栅格化的图像。
21.根据权利要求15所述的计算机可读存储介质,其中如果对象的表面是光滑的,则射线的数量是一个;其中如果对象的表面是不光滑的,则射线的数量是两个或更多。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/101,098 US10796474B2 (en) | 2018-08-10 | 2018-08-10 | Systems and methods for rendering reflections |
US16/101019 | 2018-08-10 | ||
US16/101,019 US10621774B2 (en) | 2018-08-10 | 2018-08-10 | Systems and methods for rendering reflections |
US16/101098 | 2018-08-10 | ||
US16/101,103 US10818079B2 (en) | 2018-08-10 | 2018-08-10 | Systems and methods for rendering reflections |
US16/101103 | 2018-08-10 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110874858A CN110874858A (zh) | 2020-03-10 |
CN110874858B true CN110874858B (zh) | 2024-04-09 |
Family
ID=69669642
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910248999.4A Active CN110874858B (zh) | 2018-08-10 | 2019-03-29 | 用于渲染反射的系统和方法 |
Country Status (2)
Country | Link |
---|---|
KR (1) | KR20200018207A (zh) |
CN (1) | CN110874858B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113628316B (zh) * | 2020-05-08 | 2023-12-01 | 辉达公司 | 使用射线锥进行各向异性纹理滤波的技术 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014149286A (ja) * | 2013-01-31 | 2014-08-21 | Nireco Corp | 面粗さ測定装置 |
CN104183007A (zh) * | 2014-08-12 | 2014-12-03 | 中国科学院软件研究所 | 一种基于光线追踪器的薄膜干涉效果绘制方法 |
CN107548502A (zh) * | 2015-02-25 | 2018-01-05 | 脸谱公司 | 基于由对象反射的光的特性识别体元中的对象 |
CN108140255A (zh) * | 2015-10-01 | 2018-06-08 | 无限增强现实以色列有限公司 | 用于识别场景中的反射表面的方法和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011077623A1 (ja) * | 2009-12-24 | 2011-06-30 | 株式会社ソニー・コンピュータエンタテインメント | 画像処理装置、画像データ生成装置、画像処理方法、画像データ生成方法、および画像ファイルのデータ構造 |
-
2019
- 2019-03-27 KR KR1020190035373A patent/KR20200018207A/ko unknown
- 2019-03-29 CN CN201910248999.4A patent/CN110874858B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014149286A (ja) * | 2013-01-31 | 2014-08-21 | Nireco Corp | 面粗さ測定装置 |
CN104183007A (zh) * | 2014-08-12 | 2014-12-03 | 中国科学院软件研究所 | 一种基于光线追踪器的薄膜干涉效果绘制方法 |
CN107548502A (zh) * | 2015-02-25 | 2018-01-05 | 脸谱公司 | 基于由对象反射的光的特性识别体元中的对象 |
CN108140255A (zh) * | 2015-10-01 | 2018-06-08 | 无限增强现实以色列有限公司 | 用于识别场景中的反射表面的方法和系统 |
Non-Patent Citations (1)
Title |
---|
Selective and adaptive supersampling for real-time ray tracing;Jin, Bongjun, et al;Proceedings of the Conference on High Performance Graphics 2009;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110874858A (zh) | 2020-03-10 |
KR20200018207A (ko) | 2020-02-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10970920B2 (en) | Systems and methods for ray-traced shadows of transparent objects | |
US6023279A (en) | Method and apparatus for rapidly rendering computer generated images of complex structures | |
US7948487B2 (en) | Occlusion culling method and rendering processing apparatus | |
US6791540B1 (en) | Image processing apparatus | |
US20160379401A1 (en) | Optimized Stereoscopic Visualization | |
US10032308B2 (en) | Culling objects from a 3-D graphics pipeline using hierarchical Z buffers | |
US7812837B2 (en) | Reduced Z-buffer generating method, hidden surface removal method and occlusion culling method | |
US20190318530A1 (en) | Systems and Methods for Reducing Rendering Latency | |
US20100231588A1 (en) | Method and apparatus for rendering instance geometry | |
EP2410492A2 (en) | Optimal point density using camera proximity for point-based global illumination | |
CN111788608A (zh) | 用于建模光反射的混合射线跟踪方法 | |
US11620786B2 (en) | Systems and methods for texture-space ray tracing of transparent and translucent objects | |
US10621774B2 (en) | Systems and methods for rendering reflections | |
US10796474B2 (en) | Systems and methods for rendering reflections | |
US10818079B2 (en) | Systems and methods for rendering reflections | |
CN110874858B (zh) | 用于渲染反射的系统和方法 | |
US11810241B2 (en) | Systems and methods for ray traced contact shadows | |
KR100693134B1 (ko) | 3차원 이미지 처리 | |
EP3876205A1 (en) | Image generation system and method | |
US11367262B2 (en) | Multi-dimensional acceleration structure | |
KR19980041796A (ko) | 사용자가 정의한 룸 및 윈도우를 이용하는 효율적인 렌더링 | |
US11004253B2 (en) | Systems and methods for texture-space ray tracing of transparent and translucent objects | |
US20240249461A1 (en) | Vector graphic texture engine | |
KR20160092756A (ko) | 그래픽스 데이터를 처리하는 방법, 장치 및 기록매체 | |
JP2001291115A (ja) | 3次元図形描画方法およびこの方法を記録した記録媒体 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |