用于建模光反射的混合射线跟踪方法与流程

文档序号:22557313发布日期:2020-10-17 02:41阅读:202来源:国知局
用于建模光反射的混合射线跟踪方法与流程

本申请涉及用于在三维计算机图形环境中绘制反射的计算高效的方法。



背景技术:

在三维(“3d”)计算机图形环境中,在创建沉浸式的、令人信服的体验时,非常需要对反射表面的准确绘制。例如,在考虑到所有相关因素(诸如光源的位置、对象相对于表面的形状和位置、以及虚拟相机的位置)之后,环境中的反射表面(例如,光滑的反射地板或墙壁)理想地反射环境中的其他对象。

多年来,已经开发出各种技术来对光反射进行建模。最广泛使用的技术之一是“屏幕空间反射”或“ssr”。顾名思义,屏幕空间反射是一种重复使用屏幕空间数据来计算反射的技术。但是,由于ssr技术仅限于使用屏幕空间数据,因此它会产生大量异常、伪影和/或遗漏。例如,如果在屏幕空间中不存在用于绘制准确反射的数据,则ssr技术将失败并且不会提供用于反射表面的正确绘制的像素数据。因此,需要在3d计算机图形环境中绘制反射的改进技术。



技术实现要素:

提供本“发明内容”以便以简化的形式介绍一些概念,这些概念将在下面的“具体实施方式”中进一步描述。本“发明内容”既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。

在本文中公开的各种实施例之中的是用于以混合方式与屏幕空间反射(“ssr”)一起使用实时射线跟踪的示例方法。在某些实现中,这两种方法被组合在对要被绘制的像素的初步分析(预通过)期间决定针对给定像素是使用ssr还是射线跟踪的过程中。

另外的实现涉及通过在镜面表面上选择多数方向来在很小的质量损失的情况下加速射线跟踪的优化技术。更进一步,一些技术涉及通过仅跟踪一部分射线并且将这些射线(或这些射线的内插或滤波版本)用于相邻像素来加速射线跟踪。

在一个示例实施例中,例如,针对帧生成反射射线原点和方向的列表。然后,针对具有反射射线的选定像素:(a)确定针对选定像素的反射射线是否被反射回帧的虚拟相机位置;(b)如果确定反射射线被反射回帧的虚拟相机位置,则执行射线跟踪技术以生成针对反射射线的所得到的像素值;(c)如果确定选定反射射线未被反射回帧的虚拟相机位置,则执行屏幕空间反射技术以生成针对反射射线的所得到的像素值。然后可以使用所得到的像素值来绘制帧。

此外,在一些实现中,该方法还包括:如果屏幕空间反射技术失败,则针对反射射线执行射线跟踪技术。在另外的实现中,对反射射线是否被反射回帧的虚拟相机位置的确定包括:计算点积;以及评估来自点积的所得到的标量值是正还是负。点积可以是例如针对选定像素的视图矢量和针对选定像素的反射矢量的点积。在其他实现中,对反射射线是否被反射回帧的虚拟相机位置的确定是通过以下操作来执行的:计算线段端点,线段端点包括反射射线的原点和沿着反射射线的方向的点;将线段端点变换到投影相机空间中;通过彼此相减来根据线段端点构造投影空间中反射射线;以及确定投影空间中反射射线的方向面向虚拟相机,并且从而确定原始反射射线被反射朝向虚拟相机。在一些示例实现中,反射射线被确定为被反射回帧的虚拟相机位置,并且射线跟踪技术还包括:(a)使用帧的分辨率降低的图像用于射线跟踪技术;或者(b)为与选定像素相邻的像素值的组选择代表性法线。

在本文中公开的另一示例技术中,从用于在计算机生成的环境中绘制表示反射的像素值时使用的多个可用绘制技术之中自适应地选择绘制技术。在该实施例中,多个可用绘制技术包括射线跟踪技术。在一些示例实现中,多个可用绘制技术还包括屏幕空间反射技术。然后,使用所选择的技术计算像素值,并且可以将像素值缓冲在硬件缓冲区中。

在一些示例实现中,自适应地选择绘制技术包括:确定来自像素位置的反射射线是否被反射朝向计算机生成的环境的虚拟相机位置;以及至少部分地基于关于来自像素位置的反射射线是否被反射朝向计算机生成的环境的虚拟相机位置的确定来选择绘制技术。在另外的示例实现中,自适应地选择绘制技术包括:确定来自像素位置的反射射线是否被反射朝向计算机生成的环境的虚拟相机位置;如果反射射线被反射朝向虚拟相机位置,则选择射线跟踪技术;以及如果反射射线未被反射朝向虚拟相机,则选择除射线跟踪技术之外的第二技术(例如,屏幕空间反射技术)。此外,在一些示例实现中,当使用屏幕空间反射技术时,该方法还包括:确定屏幕空间反射技术对于反射射线失败;以及针对对于其屏幕空间反射技术失败的反射射线执行射线跟踪技术。

在另一示例实施例中,从用于在计算机生成的环境的帧中绘制像素值的多个可用技术之中选择技术。在该实施例中,像素值描绘计算机生成的环境的帧中的反射射线。此外,在本实施例中,用于绘制像素值的多个可用技术包括射线跟踪技术和屏幕空间反射技术。然后使用所选择的技术计算像素值,并且使用所计算的像素值绘制帧。

在一些示例实现中,该方法还包括使用帧的分辨率降低的图像用于射线跟踪技术(例如,针对像素值的降低四分之一的或其他降低的图像)。在另外的示例实现中,该方法还包括为与像素值相邻的像素值的组选择代表性法线。在一些情况下,仅在确定像素值具有在该组像素值的阈值百分比或距离内的法线之后才选择代表性法线。

本文中描述的创新可以实现为方法的一部分、被配置为执行该方法的计算机系统的一部分、或存储有用于使计算机系统在由其编程时执行该方法的计算机可执行指令的有形计算机可读介质的一部分。各种创新可以组合使用,也可以分别使用。通过以下参考附图进行的详细描述,本发明的前述和其他目的、特征和优点将变得更加明显。

附图说明

专利或申请文件包含至少一个彩色附图。专利局将根据请求和必要费用的支付来提供带有彩色附图的本专利或专利申请公开的副本。

图1是示出可以在其中实现本文中描述的一种或多种方法的示例计算机系统的图。

图2是示出3d计算机图形环境中的射线跟踪的示例的图。

图3是示出图2的环境中的用于几何对象的包围体层次结构(“bvh”)的示例的图。

图4是从第一人称虚拟相机原点查看的三维计算机环境的屏幕截图。

图5是根据所公开的技术的实施例的利用射线跟踪技术进行补充ssr技术的屏幕截图。

图6是从第一人称角度查看的另一三维计算机环境的屏幕截图。

图7是根据所公开的技术的实施例的利用射线跟踪技术进行补充ssr技术的屏幕截图。

图8是根据所公开的技术的实施例的用于执行用于绘制表示反射表面的像素的混合技术的示例实施例的流程图。

图9示出了用于确定反射射线是否被反射回帧的虚拟相机原点的过程的示例代码。

图10是根据所公开的技术的实施例的用于执行用于绘制表示反射表面的像素的混合技术的示例实施例的流程图。

图11是根据所公开的技术的实施例的用于执行用于绘制表示反射表面的像素的混合技术的示例实施例的流程图。

具体实施方式

i.一般考虑

本文中公开了用于在三维计算机图形环境中绘制反射的方法、装置和系统的代表性实施例。所公开的方法、装置和系统不应当被解释为以任何方式限制。相反,本公开涉及单独或彼此以各种组合和子组合的各种公开的实施例的所有新颖的和非显而易见的特征和方面。此外,所公开的实施例的任何特征或方面可以彼此以各种组合和子组合来使用。例如,来自一个实施例的一个或多个方法动作或特征可以与来自另一实施例的一个或多个方法动作或特征一起使用,反之亦然。所公开的方法、装置和系统不限于任何特定方面或特征或其组合,所公开的实施例也不要求存在任何一个或多个特定优点或者解决问题。

尽管为了方便呈现而以特定顺序次序描述所公开的方法中的一些方法的操作,但是应当理解,这种描述方式涵盖重新布置,除非以下阐述的特定语言要求特定顺序。例如,在某些情况下,顺序地描述的操作可以重新布置或同时执行。此外,为了简单起见,附图可能未示出所公开的方法可以与其他方法结合使用的各种方式。另外,该描述有时使用诸如“确定”和“生成”等术语来描述所公开的工具和技术。这些术语是所执行的实际操作的高级抽象。与这些术语相对应的实际操作可以根据特定实现而变化,并且本领域技术人员可以容易地辨别。另外,如本文中使用的,术语“和/或”是指短语中的任何一项或任何项的组合。

如本文中使用的,术语“射线跟踪”涵盖用于在3d计算机图形环境中进行绘制或用于特殊效果的射线跟踪操作。术语“射线跟踪”还涵盖其他类型的应用,诸如用于在物理模拟环境中进行碰撞检测的射线跟踪、在真实世界场景的模型中进行可见性检查、在声音环境中的射线跟踪以对声学现象进行建模、或在另一计算机表示的环境中的射线跟踪。计算机表示的环境可以表示真实世界场景(例如,从对真实世界场景的成像/扫描而被构造),表示合成的虚拟场景(例如,完全通过图形处理工具而被构造,或者被创建用于虚拟现实应用),或者表示混合场景,该混合场景混和(blend)了真实世界场景的成像/扫描的结果和计算机生成的内容(例如,被构造用于增强现实应用)。

尽管本文中描述的操作在某些地方被描述为由用于游戏机、头戴式显示器或台式机计算机系统的显卡的gpu架构执行,但是在很多情况下,该操作可以由另一类型的架构(例如,多核cpu架构)和/或其他类型的计算机系统(例如,智能电话、平板电脑)执行。更一般地,本文中描述的示例的各种备选方案是可能的。例如,可以通过改变流程图中示出的阶段的顺序,通过拆分、重复或省略某些阶段等等来更改参考流程图而描述的某些技术。所公开的技术的各个方面可以组合使用或分开使用。不同的实施例使用所描述的创新中的一种或多种。本文中描述的创新中的一些解决了背景技术中提到的一个或多个问题。通常,给定的技术/工具不能解决所有这样的问题。

ii.示例计算机系统

图1示出了可以在其中实现所描述的一些创新的合适的计算机系统(100)的一般示例。本文中描述的创新涉及射线跟踪,其通常涉及在射线穿过图像并且继续进入计算机表示的环境中时从视点(viewingpoint)跟踪射线。射线跟踪可以涉及3d计算机图形环境中的光线射线跟踪操作。或者,射线跟踪可以是另一类型应用的一部分,诸如用于在物理模拟环境中进行粒子、对象等的碰撞检测的射线跟踪、用于在声音环境中的射线跟踪以对声学现象进行建模、作为真实世界场景的模型中的可见性检查的一部分的射线跟踪、或在另一计算机表示的环境中的射线跟踪。除了其在射线跟踪中的用途,计算机系统(100)并不旨在暗示对使用范围或功能的任何限制,因为这些创新可以在各种计算机系统中实现,包括适用于图形处理或复杂环境建模的专用计算机系统。

参考图1,计算机系统(100)包括中央处理单元(“cpu”)的处理单元(110…11x)和本地存储器(118)。处理单元(110…11x)例如是单个芯片上的处理核心,并且执行计算机可执行指令。cpu的处理单元(110…11x)的数目取决于实现,并且例如可以是4或8。本地存储器(118)可以是由相应(多个)处理单元(110…11x)可访问的易失性存储器(例如,寄存器、高速缓存、ram)、非易失性存储器(例如,rom、eeprom、闪存等)、或这两者的某种组合。

计算机系统(100)还包括gpu的处理单元(130…13x)和本地存储器(138)。gpu的处理单元(130…13x)的数目取决于实现。处理单元(130…13x)例如是gpu的单指令多数据(“simd”)单元。gpu的着色器单元或其他处理块可以包括一个或多个simd单元。simd宽度n(其取决于实现)指示simd单元的元件(有时称为通道)的数目。例如,对于超宽simd架构,simd单元的元件(通道)的数目可以是16、32、64或128。simd单元的每个元件可以被视为simd单元的单独线程。针对simd单元的n个线程的组也可以被称为波(wave)或缠绕(warp)。给定simd单元的线程在(潜在地)不同的数据上锁步执行相同的代码。在一些gpu架构中,simd单元可以具有跨simd单元的所有线程的相同的额外的数据通道,从而导致n个线程加上针对该simd单元的一个标量线程(标量线程不像simd单元的n个线程一样执行代码)的组。本地存储器(138)可以是由相应(多个)处理单元(130…13x)可访问的易失性存储器(例如,寄存器、高速缓存、ram)、非易失性存储器(例如,rom、eeprom、闪存等)、或这两者的某种组合。本地存储器(138)存储用于实现所公开的混合射线跟踪技术的一种或多种创新的软件(180)。

计算机系统(100)包括共享存储器(120),该共享存储器(120)可以是由cpu的(多个)处理单元(110…11x)和gpu的处理单元(130…13x)可访问的易失性存储器(例如,寄存器、高速缓存、ram)、非易失性存储器(例如,rom、eeprom、闪存等)、或这两者的某种组合。存储器(120)以计算机可执行指令的形式存储用于实现如本文中公开的混合射线跟踪技术的一种或多种创新的、至少用于对由处理单元(130…13x)的线程执行的操作的高级控制的软件(180)。在gpu中,线程(也称为执行线程或执行的线程)通常执行一系列计算机可执行指令,并且在本地存储器(138)和/或共享存储器(120)中可以具有与其相关联的数据(例如,限定状态)。线程也在cpu的处理单元(110…11x)上执行,其中这样的线程通常包括一系列计算机可执行指令,并且在本地存储器(118)和/或共享存储器(120)中可以具有与其相关联的数据(例如,限定状态)。

备选地,处理单元可以是专用集成电路(“asic”)中的处理器或任何其他类型的处理器。(多个)处理单元(110…11x,130…13x)可以是片上系统(“soc”)的一部分。

计算机系统(100)包括一个或多个网络接口设备(140)。(多个)网络接口设备(140)使得能够通过网络与另一计算实体(例如,服务器、其他计算机系统)通信。(多个)网络接口设备(140)可以支持用于广域网、局域网、个域网或其他网络的有线连接和/或无线连接。例如,(多个)网络接口设备可以包括一个或多个wi-fi收发器、以太网端口、蜂窝收发器和/或另一类型的网络接口设备、以及相关联的驱动器、软件等。(多个)网络接口设备(140)通过网络连接传送诸如计算机可执行指令、音频或视频输入或输出、或(多个)网络连接之上的调制数据信号中的其他数据等信息。调制数据信号是一种信号,信号的特性中一个或多个特性以使得能够在信号中对信息进行编码的方式进行设置或改变。作为示例而非限制,网络连接可以使用电、光、rf或其他载体。

相机输入(150)从捕获自然视频的视频相机接受模拟或数字形式的视频输入。音频输入从捕获音频的麦克风(150)接受模拟或数字形式的音频输入。

计算机系统(100)可选地包括针对可以跟踪用户和用户周围的对象的运动的运动传感器/跟踪器的运动传感器/跟踪器输入(152)。例如,运动传感器/跟踪器允许用户(例如,游戏玩家)使用手势和语音命令通过自然用户界面与计算机系统(100)交互。运动传感器/跟踪器可以包含手势识别、面部识别和/或语音识别。

游戏控制器输入(154)通过有线连接或无线连接从一个或多个游戏控制器接受控制信号。控制信号可以指示来自游戏控制器的一个或多个定向垫、按钮、触发器和/或一个或多个操纵杆的用户输入。控制信号还可以指示来自触摸板或触摸屏、陀螺仪、加速度计、角速率传感器、磁力计和/或游戏控制器的其他控件或仪表的用户输入。

计算机系统(100)可选地包括媒体播放器(156)和视频输入(158)。媒体播放器(156)可以播放dvd、蓝光光盘、其他磁盘媒体和/或其他格式的媒体。视频输入(158)可以接受模拟或数字形式的输入视频(例如,从电缆输入、hdmi输入或其他输入)。

视频输出(160)向显示设备提供视频输出。视频输出(160)可以是hdmi输出或其他类型的输出。音频输出(160)向一个或多个扬声器提供音频输出。

存储(170)可以是可移动的或不可移动的,并且包括磁介质(诸如磁盘、磁带或盒式磁带)、光盘介质、和/或可以用于存储信息并且可以在计算机系统(100)内被访问的任何其他介质。存储(170)存储用于实现本文中公开的混合射线跟踪技术的一种或多种创新的软件(180)的指令。计算机系统(100)可以具有附加特征。例如,计算机系统(100)包括一个或多个其他输入设备和/或一个或多个其他输出设备。其他(多个)输入设备可以是触摸输入设备,诸如键盘、鼠标、笔或轨迹球、扫描设备、或向计算机系统(100)提供输入的另一设备。其他(多个)输出设备可以是打印机、cd刻录机、或提供来自计算机系统(100)的输出的另一设备。

诸如总线、控制器或网络之类的互连机制(未示出)互连计算机系统(100)的组件。通常,操作系统软件(未示出)为在计算机系统(100)中执行的其他软件提供操作环境,并且协调计算机系统(100)的组件的活动。

创新可以在计算机可读介质的一般上下文中描述。计算机可读介质是可以在计算环境内被访问的任何可用的有形介质。作为示例而非限制,对于计算机系统(100),计算机可读介质包括存储器(118、120、138)、存储(170)及其组合。术语计算机可读介质不包括瞬态传播信号或载波。

创新可以在计算机可执行指令的一般上下文中描述,计算机可执行指令诸如程序模块中所包括的那些计算机可执行指令,在目标真实或虚拟处理器上的计算机系统中被执行。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、库、对象、类、组件、数据结构等。在各个实施例中,程序模块的功能可以根据需要在程序模块之间组合或拆分。用于程序模块的计算机可执行指令可以在本地或分布式计算系统内执行。本文中示出的一些代码清单包括高级着色器语言(“hlsl”)的指令。代码清单中的hlsl代码可以被编译为在处理单元(例如,gpu的simd单元)的线程中运行。备选地,本文中示出的方法可以用另一编程语言来实现。

术语“系统”和“设备”在本文中可互换地使用。除非上下文另外明确指出,否则这两个术语均不暗示对计算机系统或设备的类型的任何限制。通常,计算机系统或设备可以是本地的或分布式的,并且可以包括专用硬件和/或硬件与实现本文中描述的功能的软件的任何组合。

为了表示方便,详细描述使用诸如“确定”、“接收”和“提供”等术语来描述计算系统中的计算机操作。这些术语表示由计算机执行的操作,并且不应当与由人类执行的动作相混淆。与这些术语相对应的实际计算机操作取决于实现而变化。

iii.射线跟踪概述

在三维(“3d”)计算机图形环境中,可以使用射线跟踪以从虚拟相机或其他视点的角度来生成图像。图像包括多个图片元素(“像素”),来自视点的射线穿过这些图片元素并且继续进入3d计算机图形环境中。对于给定像素,跟踪从视点(例如,虚拟相机)穿过像素的射线(主射线)的路径,直到它与环境中的对象相交。对象的表面可以在相交点处具有与之相关联的颜色,并且具有指示反照率(反射率)、散射、折射、漫射或其他材料性质的值。这样的值可以例如在对象的顶点的属性的值之间插值。在相交点处,取决于对象的表面,射线可以在环境内被反射或折射,或者可以生成散射射线,以模拟诸如反射、折射/半透明、散射和色散等光学效果。相交点处的表面的角度可以通过在对象的顶点的范数(norm)之间进行插值来确定,或者相交点处的表面的角度可以被估计为对象的面部平面的角度。

可以在光源的方向上生成阴影射线,以模拟诸如来自光源的阴影(阻挡来自光源的光)之类的光学效果。这样的新生成的射线(二次射线)在环境中被类似地跟踪,并且可以生成其他射线(三次射线),以此类推。可以生成连续的射线,例如,直到达到阈值级数或经过阈值距离。

最终,给定像素的值取决于相交点处的对象的表面的颜色以及从二次射线报告的结果,而该结果又可以取决于从三次射线报告的结果,以此类推,以便模拟相交点处的阴影、反射光、折射光和其他效果。因此,除了相交点处的表面的颜色以外,给定像素的值还可以取决于相交点处的对象的材料性质和入射光。

通过聚焦于到达视点(例如,虚拟相机)的射线,射线跟踪比跟踪环境中来自(多个)光源的光线的路径要简单得多,以便找出哪些射线到达视点。即使这样,射线跟踪还是计算密集型的。图像可以包括数十万个像素,或者甚至数百万个像素。图像可以以每秒30帧或更高的速率进行绘制。通常,对于每个像素,测试通过像素的射线,以查看其是否与环境中的对象的某个子集相交。环境可以包括很多复杂对象,这些对象可以在图像之间动态地变化。

为了简化环境中的对象的表示,复杂对象可以用更简单的几何对象(诸如三角形)来表示。例如,对象的表面可以被表示为拟合到该表面的一组三角形。除了具有定义其在环境中的形状和位置的顶点和/或边以外,给定三角形还可以具有相关联的颜色和材料性质(或者具有与给定三角形的顶点相关联的颜色和材料性质,以用于对给定三角形内的相交点的插值)。任何表面都可以用一组三角形来近似。为了近似曲线或复杂形状,可以使用连续变小(successivelysmaller)的三角形来提供更精细的细节。

尽管诸如三角形之类的几何对象提供了用于表示环境中的复杂对象的方便方法,但是所得到的表示可能包括非常大量的几何对象。例如,场景可以包括数十万或者甚至数百万个几何对象。这些几何对象可以被包围在连续变大的组中,这些组以包围体层次结构(“bvh”)来表示。bvh是树状结构的。环境中的几何对象被包裹在包围体中。包围体包围bvh的树的叶节点的几何对象。叶节点被分组为小集合,其通常对应于环境的相邻区域。非叶节点(也称为内部节点)包围叶节点的小集合。进而,非叶(内部)节点的集合以递归方式被包围在连续变大的包围体内以用于较浅的非叶(内部)节点,直到bvh的“根”节点包围所有非叶(内部)节点和叶节点。bvh可以被组织为二叉树(其中每个非叶节点具有两个子节点)、四叉树(其中每个非叶节点具有四个子节点)、八叉树(其中每个非叶节点具有八个子节点)、或以其他方式被组织。

为了在3d计算机图形环境中测试射线与几何对象的相交,可以针对bvh来测试射线。如果射线与针对根节点的包围体之间存在相交,则可以针对根节点的相应子节点的包围体来测试射线,以此类推。以这种方式,可以针对连续变小的封闭的包围体来测试射线。如果包围体的形状是球体或盒,则射线与包围体之间的相交的测试相对简单。当射线与叶节点的包围体之间存在相交时,可以测试射线与由叶节点的包围体包围的几何对象(例如,三角形)的相交。这是射线三角形相交测试的示例。

在任何阶段,如果射线不与给定包围体相交,则可以跳过针对给定包围体内的包围体(和几何对象)的另外的测试。换言之,如果针对子节点的父节点的包围体未被相交,则不需要评估针对子节点的包围体。类似地,如果针对叶节点的包围体未被相交,则不需要评估叶节点中的几何对象(诸如三角形)。

当测试射线与一个或多个三角形的相交时,使用射线三角形相交测试。在各种应用领域中,有很多不同的方法可以执行射线三角形测试。射线三角形相交测试通常用于计算机图形学中。此外,射线三角形相交测试广泛用于场景建模、物理模拟、碰撞检测、可见性检查和各种实时处理场景。在一些先前的方法中,例如,在给定三角形的顶点和/或边的情况下,射线三角形测试确定给定射线是否与三角形相交。射线具有原点和方向。射线三角形相交测试可以找到从射线原点到相交点的距离、以及相交点是否在由顶点/边定义的三角形内。尽管在先前的方法中试图减少射线三角形相交测试的复杂性,但是射线三角形相交测试仍然是一个非常计算密集的过程。

图2示出了3d计算机图形环境中的射线跟踪的示例(200)。射线跟踪从虚拟相机(210)的角度生成图像(220),虚拟相机(210)表示视点。来自虚拟相机(210)的射线(230…23x)穿过图像(220)的像素进入环境中。环境包括几何对象(240),几何对象(240)在图2中是三角形。三角形被拟合到环境中的更复杂的形状的表面。为了说明起见,图2示出了非常小的图像(220)和少数几何对象(240)。在实践中,图像可以包括数十万或者甚至数百万个像素,并且环境可以包括数十万或者甚至数百万个几何对象(240)。

来自虚拟相机(210)的射线(230…23x)(也称为视图射线或相机射线)是主射线的示例。对于图像(220)的给定像素,跟踪穿过该像素的主射线(230…23x)的路径,直到它与环境中的几何对象(240)之一相交。在图2中,如果射线(230…23x)中的每个射线与几何对象(240)之一相交,则该射线在相交点处结束。在图2中,主射线(230)之一不与几何对象(240)中的任何几何对象相交。给定射线潜在地可以与多个几何对象(240)相交,如射线(23x)之一所示,其中多个相交处标记有x。在这种情况下,最接近虚拟相机(210)的相交被看作为主射线(23x)的相交。

几何对象(240)中的每个几何对象具有限定其在环境中的形状和位置的顶点和/或边。另外,几何对象(240)中的每个几何对象的表面可以具有与其相关联的颜色、以及指示反照率(反射率)、散射、折射、漫射或其他材料性质的值(或者,几何对象(240)的顶点可以具有相关联的颜色和材料性质,以用于几何对象(240)内的相交点的插值)。在相交点处,取决于相交点处的几何对象(240)的表面,射线(230…23x)可以在环境内被反射或折射,或者可以生成漫射射线,以模拟诸如反射、折射/半透明、散射和色散之类的光学效果。另外,对于每个光源,可以在光源的方向上从相交点生成阴影射线,以模拟诸如来自光源的阴影(即,阻挡来自光源的光)之类的光学效果。

源自主射线(230…23x)的相交点的反射射线、折射射线、漫射射线和阴影射线是二次射线的示例。这样的二次射线在环境中被类似地跟踪,并且可以生成其他射线(三次射线),等等。可以生成连续的射线,例如,直到达到阈值级数或经过阈值距离。最终,对于图像(220)的给定像素,该给定像素的值取决于相交点处的对象(240)的表面的颜色、以及从二次射线报告回的结果,而该结果又可以取决于从三次射线报告回的结果,等等。以这种方式,射线跟踪可以在针对主射线(230…23x)的相交点处模拟阴影、反射光、折射光和其他效果。因此,除了针对主射线(230…23x)的相交点处的表面的颜色以外,图像(220)的给定像素的值还可以取决于针对主射线(230…23x)的相交点处的对象的材料性质和入射光。

尽管诸如三角形之类的几何对象(240)提供了用于表示环境中的复杂对象的方便方法,但是所得到的表示可能包括非常大量的几何对象(240)。为了组织几何对象(240)并且简化寻找针对射线的相交点的过程,可以将几何对象(240)包围在连续变大的组中,这些组以包围体层次结构(“bvh”)表示。

图3示出了用于图2的环境中的几何对象的bvh的示例(300)。bvh(300)被构造为树。对于bvh(300)的叶节点(390),环境中的几何对象(240)的子集被包裹在包围体中。包围体通常是球体(即,参数球体)或盒(即,矩形棱柱体或立方体)。例如,包围体是轴对准的包围盒。在图3的bvh(300)中,包围体是包围盒。总体而言,针对bvh(300)的叶节点的包围体包围环境的几何对象(240)中的所有几何对象。

叶节点被分组为小集合,小集合通常对应于环境的相邻区域。也可以称为内部节点的非叶节点(380)具有包围叶节点的小集合的包围体,该叶节点是非叶节点(380)的子叶节点。在叶节点上方的bvh(300)的级别处,非叶节点具有共同包围叶节点中的所有叶节点的包围体。以递归方式,给定级别处的非叶节点的集合进而通过任意深度的非叶节点被包围在连续变大的包围体内。最终,bvh(300)的根节点(310)包围bvh(300)的所有非叶节点和叶节点。

如图3所示,非叶节点(310、380)具有包围非叶节点的子节点的包围体。在图3中,根节点(310)具有针对从第一子到第n子的非叶节点(320…32n)。通常,每个非叶节点(310、380)具有任意数目的子节点(例如,2、4、8)。通常,bvh(300)的每个非叶节点具有相同数目的子叶节点。因此,bvh(300)可以被组织为二叉树(其中每个非叶节点具有两个子节点)、四叉树(其中每个非叶节点具有四个子节点)、八叉树(其中每个非叶节点具有八个子节点)、或以其他方式被组织。

iv.用于对光反射进行建模的示例混合方法

如上所述,用于对光反射进行建模的最广泛使用的技术之一被称为“屏幕空间反射”或“ssr”。顾名思义,屏幕空间反射是一种重复使用屏幕空间数据来计算反射的技术。但是,由于ssr技术仅限于使用屏幕空间数据,因此它会产生大量异常、伪影和/或遗漏。

图4和图6是示出仅使用ssr而绘制的屏幕的屏幕截图(400)和(600)。图5和图7是示出使用根据所公开的技术的实施例的射线跟踪进行补充的ssr而绘制的屏幕的屏幕截图(500)和(700)。

特别地,图4是从第一人称相机原点查看的三维计算机环境的屏幕截图(400)。在该图像中,仅使用ssr技术执行光反射的绘制。屏幕截图(400)中出现了一些值得注意的伪像。例如,如(410)处所示,因为ssr技术不允许对象从屏幕空间中出来的反射,所以帷帐顶部的反射被过早地切断。这导致被建模的环境的不切实际的像差,并且使反射的部分完全不完整。此外,如(412)处所示,悬挂式提灯的反射包括较大的涂黑部分,这些部分不能准确地表示在真实的现实环境中实际存在的反射光。

图5是根据所公开的技术的实施例的用射线跟踪技术进行补充ssr技术的屏幕截图。例如,如(510)处所示,先前被切断的帷帐顶部的反射现在利用由射线跟踪技术生成的帷帐顶部的反射来完成。此外,如(512)处所示,悬挂式提灯的反射现在不再包括图4的涂黑部分,而是填充将实际被反射的像素。

图6是从第一人称角度查看的另一三维计算机环境的屏幕截图(600)。在该图像中,仅使用ssr技术执行光反射的绘制。屏幕截图600中出现了一些值得注意的伪像。例如,如(610)处所示,悬挂式提灯的反射包括较大的涂黑部分,这些部分不能准确地表示在真实的现实环境中实际存在的反射光。

图7是根据所公开的技术的实施例的用射线跟踪技术进行补充ssr技术的屏幕截图。例如,如(710)处所示,悬挂式提灯的反射现在不再包括图4的涂黑部分,而是填充将实际被反射的像素。

图8是根据所公开的技术的用于执行混合射线跟踪技术的示例技术的流程图(800)。该技术(800)可以例如由实现图形工具或其他射线跟踪工具的计算机系统的一个或多个处理单元执行。在一些示例实现中,处理单元是gpu的着色器单元或其他处理块。备选地,处理单元可以是一个或多个cpu的处理器核心。除了表示用于绘制反射的新的方法以外,图8的示例技术还提供了很多技术优势。例如,示例技术通过提供一种混合方法来改进计算机本身的功能,该混合方法不仅可以提高所得到的图像的准确性,而且还可以通过用负担较少的技术(例如,ssr技术)平衡计算密集型射线跟踪过程来改进绘制过程的计算、功率和/或存储器效率。此外,因为图8的技术允许比单独使用射线跟踪更快地执行对图像的绘制,该技术有助于使能实时射线跟踪而几乎不需要或不需要对期望帧速率(例如,每秒30帧)的减少。

在(810)处,生成反射射线原点和方向的列表。在一些示例中,反射射线原点被表示为可以归一化并且称为o的三个值(例如,浮点笛卡尔值x、y、z)。此外,反射射线方向也可以被表示为可以归一化并且可以称为d的三个值(例如,浮点笛卡尔值x、y、z)。该列表可以使用各种技术来生成。例如,在一个示例实现中,该列表是根据游戏引擎中通常可用的法线信息(指示来自反射表面的法线的方向的信息)和深度信息(从虚拟相机到像素的距离)来生成的。例如,法线信息和深度信息可以从几何缓冲区中获取,该几何缓冲区是在游戏引擎内作为绘制帧的一部分而被计算的。从该法线信息和深度信息来获取原点和方向信息很简单。在这点上,由于几何缓冲区(g缓冲区)包含每个像素处的法线和深度值,因此可以根据该信息来构造反射矢量原点和方向。例如,可以通过以下方式获取世界空间中的反射射线原点:(a)根据整数像素坐标(x,y)及其深度d来计算投影空间同质矢量(例如,op=[(x/screenwidthinpixels)*2-1),((y/screenheightinpixels)*2-1),d,1]);(b)将针对该像素的投影空间同质坐标乘以世界视图投影矩阵的逆矩阵(例如,op′=inverse(worldviewprojectionmatrix)*op);以及(c)通过将约去其来将矢量投影回世界空间(例如,ow=op′,xyz/op′.w)。至于射线的反射方向,可以使用正则反射公式。例如,作为一个示例,令每个像素世界空间法线为n,并且从虚拟相机原点到像素的ow坐标的世界空间视图方向为v;则要获取的矢量为r=v-2*dot(v,n)*n。

还应当注意,反射射线原点和方向的列表与反射射线有关,因此具有非反射表面(例如,天空或布料或其他非反射表面)的像素将从列表中排除,从而进一步减轻了解决问题的计算负担。

在(812)处,考虑针对像素的选定反射射线来进行图像处理,并且确定反射射线是否被反射回虚拟相机(但是仍然可以被反射到场景中)。考虑反射射线的顺序可以根据实现而变化。例如,可以按照光栅顺序、反向光栅顺序、基于屏幕中的位置的加权顺序(例如,朝向屏幕的中心进行加权)或任何其他顺序来考虑反射射线。

可以使用多个技术来确定射线是否被反射回虚拟相机。

例如,对于每个反射射线,可以使用矢量点积。例如,可以执行点积,r点乘v,其中v是视图矢量(其从虚拟相机原点处开始并且在像素处结束,并且可以被归一化(例如,以使其长度为1)),并且其中r是反射矢量(其从反射射线原点o开始并且具有射线方向d)。此外,点积可以在投影空间中计算。如果r点乘v的结果(其是正标量值或负标量值)为负,则反射射线不会被定向到虚拟相机;如果r点乘v的结果为正,则反射射线被定向到虚拟相机。应当理解,也可以使用所描述的点积计算的变型。例如,如本领域已知的,可以使用半个矢量h代替r。

用于确定反射射线是否被定向到虚拟相机的另一示例实现被示出为图9中的代码900。简而言之,代码操作如下。给定具有世界空间原点o和方向d的射线,目标是确定射线是否在投影空间中被反射回虚拟相机。为此,并且在该示例中,计算沿着射线的点的坐标,该点距离原点足够远(并且可能朝向虚拟相机原点)。例如,可以在归一化设备坐标(ndc)空间中计算射线末端e,该ndc空间的射线长度足够长以延伸到虚拟相机之外。例如,在所示实施例中:

e=o+d*10

如上所述,o和e被投影到归一化设备坐标空间中。

然后,执行另外的变换:

o′=o*worldviewprojectionmatrix

e′=e*worldviewprojectionmatrix

其中“worldviewprojectionmatrix”是将顶点移动到由虚拟相机查看的世界空间中的矩阵。现在,这两个点位于z轴指向远离虚拟相机的同质空间中。然后,将这两个点的z轴坐标彼此相减(从ez值开始),以查看结果是否为负:

deltaz=ez-oz。

如果deltaz为负,则射线指向虚拟相机;如果deltaz为正,则射线指向远离虚拟相机。在其他实现中,可以将等式反转以得出等效结果。从概念上讲,你在确定射线是否被反射朝向虚拟相机并且是否有可能通过ssr执行。

在(814)处,如果确定射线被反射朝向虚拟相机,则该过程进行到(820),在(820)处针对像素执行射线跟踪。用于像素的射线跟踪方法可以如上所述,或者可以是任何其他合适的射线跟踪方法,诸如在以下各项中所描述的方法中的任何方法:于2017年11月20日提交的题为“ray-triangleintersectiontestingwithtetrahedralplanes”的美国专利申请no.15/818,540;于2018年1月4日提交的题为“non-divergentparalleltraversalofaboundingvolumehierarchy”的美国专利申请no.15/862,521;和/或于2017年8月18日提交的题为“non-divergentparalleltraversalofaboundingvolumehierarchy”的美国专利申请no.62/547,679,其全部内容通过引用合并于此。

同样,在(814)处,如果确定射线没有被反射到虚拟相机中,则射线仍然有可能被反射到场景中。因此,该过程进行到(816),在(816)处首先针对射线执行屏幕空间反射技术。

在(816)处,针对像素执行的屏幕空间反射技术可以是任何合适的屏幕空间反射技术。此外,对于像素,屏幕空间反射技术仍然可能失败(例如,因为应当被反射的像素数据延伸到屏幕空间之外)。因此,在(818)处,确定对于像素的屏幕空间反射是否成功。如果是,则该过程进行到(822),在(822)处确定是否还有任何其他像素要被处理。如果对于像素的屏幕空间反射技术不成功,则在(822)处针对像素执行射线跟踪。再次,用于像素的射线跟踪方法可以如上所述,或者可以是任何其他合适的射线跟踪方法,诸如在以下各项中所描述的方法中的任何方法:于2017年11月20日提交的题为“ray-triangleintersectiontestingwithtetrahedralplanes”的美国专利申请no.15/818,540;于2018年1月4日提交的题为“non-divergentparalleltraversalofaboundingvolumehierarchy”的美国专利申请no.15/862,521;和/或于2017年8月18日提交的题为“non-divergentparalleltraversalofaboundingvolumehierarchy”的美国专利申请no.62/547,679,其全部内容通过引用合并于此。

关于(816)和(818),在一些实施例中,屏幕空间反射过程沿着寻找相交点的步进过程进行,并且当到达屏幕空间的边缘而没有相交时,该过程失败,从而导致执行射线跟踪技术(820)。但是,可以将屏幕空间反射过程失败处的顶点(其可以是视锥(frustrum)截断射线的点)用作用于射线跟踪技术的起点。这允许射线跟踪技术在其处理过程中更快地移动。但是,在其他实施例中,射线跟踪可以从反射射线的原点重新开始。

在执行(820)处的射线跟踪技术之后,在(822)处进行确定以检查是否有另一像素要被处理。如果是,则该过程从(810)重复;否则,该过程终止。然后,可以针对帧继续图像处理流水线。例如,可以执行另外的绘制过程以为帧中的反射表面产生最终帧,最终帧包括由图8的技术所确定的像素值。然后,可以将最终帧显示在显示设备上。

图8的技术可以包括根据所公开的技术的原理的多个变型。通常,这些变型旨在提高针对图像或图像部分执行射线跟踪的速度,从而提高可以执行实时射线跟踪而不会损失期望帧速率的可能性。

例如,在一个示例实施例中,分辨率降低的图像被用于射线跟踪,从而减少了要执行的射线跟踪操作的数目。例如,可以将帧(或要在其中执行射线跟踪的帧的一部分)变换为分辨率降低的帧(或帧的一部分)。例如,在一些实施例中,可以在x和y轴上将分辨率降低1/2,导致总分辨率降低1/4。分辨率降低也可以通过任何其他因子。

在针对分辨率降低的图像或图像部分上的像素执行射线跟踪之后,可以使用任何合适的平滑、混和或插值技术来计算针对常规分辨率图像的像素值。例如,在一些示例中,从使用分辨率降低的图像的射线跟踪所获取的像素值被用于常规分辨率的图像或图像部分中的对应像素中的所有像素。在其他示例中,从使用分辨率降低的图像的射线跟踪所获取的像素值被用作对关于相邻值的平滑、混和或插值过滤器的输入值。例如,可以计算从使用分辨率降低的图像的射线跟踪所获取的像素值与相邻像素的一个或多个像素之间的平均值。在其他示例中,可以应用双线性插值过滤器,该双线性插值过滤器包括从使用分辨率降低的图像的射线跟踪所获取的像素值、和相邻像素。在另外的示例中,可以使用具有任何数目的输入和权重的平滑或插值过滤器来得出常规分辨率的图像的像素值。在又一示例中,使用时间过滤器来平滑从使用分辨率降低的图像的射线跟踪所获取的像素值。例如,时间过滤器可以使用来自针对同一像素空间的一个或多个先前帧的数据来计算当前像素值。

在另外的实施例中,可以针对相邻像素(例如,针对4个像素、16个像素等)的组选择代表性法线。例如,在一个示例实现中,当要针对选定像素执行射线跟踪时(例如,在(820)处),可以评估与选定像素相邻的像素的组,以查看它们是否具有与选定像素足够相似的法线方向以使得可以针对该组选择单个代表性法线并且将其用于射线跟踪,从而无需针对该组中的每个像素执行单独的射线跟踪处理。该相似性测试可以使用多个技术来执行,诸如评估该组中的像素的法线方向是否在彼此的阈值百分比(或距离)内(例如,小于2%的差异,小于5%的差异,小于10%的差异,或小于n%的差异,其中n是被选择以表示镜面再现的期望公差的数字)。另外,在一些实施例中,该组像素的深度可以用来更改阈值百分比(或距离),因为当其法线稍有不同时,距虚拟相机更远的像素将产生更大的反射射线漫射。例如,阈值百分比(或距离)可以随着深度的增加而减少(根据线性函数或其他函数)。此外,如果阈值百分比被满足,则针对该组而选择的代表性射线可以是该组的法线中的任何一个或该组中的法线的平均值。

另一种方法是不仅评估法线的“接近度”,而且还评估材料性质,以便检测法线是否满足重要性采样标准。例如,一些材料定义使用参数函数来表示光线如何从材料表面弹开。通过这种表示,可以计算每束入射光线的“重要性”。例如,如果材料具有非常强并且“狭窄”的闪亮组分(例如,抛光金属上的高光),则该函数的大部分输出信号都集中在这些闪亮的区域中。通过使用重要性采样,可以检测到这些参数并且在那里投射更多射线。换言之,重要性采样可以用于检测更重要的射线,因为这些射线将被确定为输出图像贡献很多“能量”。

图10是根据所公开的技术的用于执行混合射线跟踪技术的示例技术的流程图(1000)。该技术(1000)可以例如由实现图形工具或其他射线跟踪工具的计算机系统的一个或多个处理单元执行。在一些示例实现中,处理单元是gpu的着色器单元或其他处理块。备选地,处理单元可以是一个或多个cpu的处理器核心。除了表示用于绘制反射的新的方法以外,图10的示例技术还提供了很多技术优势。例如,示例技术通过提供一种混合方法来改进计算机本身的功能,该混合方法不仅可以提高所得到的图像的准确性,而且还可以通过用负担较少的技术(例如,ssr技术)平衡计算密集型射线跟踪过程来改进绘制过程的计算、功率和/或存储器效率。此外,因为图10的技术允许比单独使用射线跟踪更快地执行对图像的绘制,该技术有助于实现实时射线跟踪而几乎不需要或不需要减少期望帧速率(例如,每秒30帧)。

在(1010)处,从用于在计算机生成的环境中绘制表示反射的像素值的多个可用绘制技术之中自适应地选择绘制技术。在所示实施例中,多个可用绘制技术包括射线跟踪技术。在一些示例实现中,多个可用绘制技术还包括屏幕空间反射技术。

在(1012)处,使用所选择的技术来计算像素值。

在(1014)处,将像素值缓冲在硬件缓冲区(例如,gpu的缓冲区)中。

在一些示例实现中,自适应地选择绘制技术包括:确定来自像素位置的反射射线是否被反射朝向计算机生成的环境的虚拟相机位置;以及至少部分地基于对来自像素位置的反射射线是否被反射朝向计算机生成的环境的虚拟相机位置的确定来选择绘制技术。在另外的示例实现中,自适应地选择绘制技术包括:确定来自像素位置的反射射线是否被反射朝向计算机生成的环境的虚拟相机位置;如果反射射线被反射朝向虚拟相机位置,则选择射线跟踪技术;以及如果反射射线未被反射朝向虚拟相机,则选择除射线跟踪技术之外的第二技术(例如,屏幕空间反射技术)。此外,在一些示例实现中,当使用屏幕空间反射技术时,该方法还包括:确定屏幕空间反射技术对于反射射线失败;以及针对对于其屏幕空间反射技术失败的反射射线执行射线跟踪技术。

图11是根据所公开的技术的用于执行混合射线跟踪技术的示例技术的流程图(1100)。该技术(1100)可以例如由实现图形工具或其他射线跟踪工具的计算机系统的一个或多个处理单元执行。在一些示例实现中,处理单元是gpu的着色器单元或其他处理块。备选地,处理单元可以是一个或多个cpu的处理器核心。除了表示用于绘制反射的新的方法以外,图11的示例技术还提供了很多技术优势。例如,示例技术通过提供一种混合方法来改进计算机本身的功能,该混合方法不仅可以提高结果图像的准确性,而且还可以通过用负担较少的技术(例如,ssr技术)平衡硬件资源密集型射线跟踪过程来提高绘制过程的计算、功率和/或存储器效率。此外,因为图11的技术允许比单独使用射线跟踪更快地执行图像的绘制,该技术有助于实现实时射线跟踪而几乎不需要或不需要降低期望帧速率(例如,每秒30帧)。

在(1100)处,从用于在计算机生成的环境的帧中绘制像素值的多个可用技术之中选择技术。在该实施例中,像素值描绘计算机生成的环境的帧中的反射射线。此外,在该实施例中,用于绘制像素值的多个可用技术包括射线跟踪技术和屏幕空间反射技术。

在(1112)处,使用所选择的技术来计算像素值。

在(1114),使用所计算的像素值来绘制计算机生成的环境的帧。例如,可以执行另外的绘制过程以产生最终帧,其包括通过图11的技术确定的针对帧中的反射表面的像素值。然后,可以将最终帧显示在显示设备上。

在一些示例实现中,该方法还包括使用帧的分辨率降低的图像用于射线跟踪技术(例如,针对像素值的分辨率降低四分之一或其他降低的图像)。在另外的示例实现中,该方法还包括为与像素值相邻的像素值的组选择代表性法线。在一些情况下,仅在确定像素值具有在该组像素值的阈值百分比或距离内的法线之后才选择代表性法线。

v.结束语

鉴于可以将所公开的发明的原理应用于其的很多可能的实施例,应当认识到,所示出的实施例仅是本发明的优选示例,而不应当被认为是对本发明范围的限制。相反,本发明的范围由所附权利要求书限定。因此,我主张,在所有这些权利要求的范围和精神之内的发明均为我的发明。

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