CN110400367A - 降低渲染延迟的系统和方法 - Google Patents

降低渲染延迟的系统和方法 Download PDF

Info

Publication number
CN110400367A
CN110400367A CN201910304598.6A CN201910304598A CN110400367A CN 110400367 A CN110400367 A CN 110400367A CN 201910304598 A CN201910304598 A CN 201910304598A CN 110400367 A CN110400367 A CN 110400367A
Authority
CN
China
Prior art keywords
pixel columns
pixel
orientation
light
visibility
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
CN201910304598.6A
Other languages
English (en)
Inventor
沃伦·安德鲁·亨特
安东·S·卡普拉尼扬
迈克尔·马拉
亚历山大·南克维斯
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.)
Meta Platforms Technologies LLC
Original Assignee
Facebook Technologies LLC
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 Facebook Technologies LLC filed Critical Facebook Technologies LLC
Publication of CN110400367A publication Critical patent/CN110400367A/zh
Pending legal-status Critical Current

Links

Classifications

    • 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/10Geometric effects
    • G06T15/20Perspective computation
    • G06T15/205Image-based rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/40Hidden part removal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics
    • G06T19/006Mixed reality

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • General Physics & Mathematics (AREA)
  • Geometry (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Image Generation (AREA)
  • Processing Or Creating Images (AREA)

Abstract

一种降低渲染延迟的系统和方法。在一个实施例中,计算系统可以基于在第一时间生成的第一传感器数据来确定3D空间中的第一方位。该系统可以通过基于第一方位投射射线以测试相交,来确定在3D空间中的物体的第一可见性。该系统可以基于所确定的第一可见性生成一第一像素行,并输出第一像素行以供显示。该系统可以基于在第二时间生成的第二传感器数据来确定第二方位。该系统可以通过基于第二方位投射射线以测试相交,来确定物体的第二可见性。该系统可以基于所确定的第二可见性生成第二像素行,并输出第二像素行以供显示。第二像素行和第一像素行同时显示。

Description

降低渲染延迟的系统和方法
技术领域
本公开一般涉及计算机图形,并且更具体地涉及用于生成诸如虚拟现实和增强现实的人工现实的图形渲染方法和优化。
背景技术
计算机图形,一般说来,是使用计算机创建的视觉场景。三维(3D)计算机图形向用户提供来自特定的视点的3D物体的视图。可以使用原始几何形状在3D建模空间中定义3D场景中的每个物体(例如,茶壶、房屋、人等)。例如,圆柱形物体可以使用圆柱形管以及顶部和底部圆形盖来建模。圆柱形管和圆形盖可以各自由较小多边形(例如,三角形)的网络或网格表示。反过来,可以基于在3D建模空间中它们各自的顶点的坐标来存储每个多边形。
即使计算机图形中的3D物体可以在三维中建模,但是它们通常通过矩形二维(2D)显示器(诸如计算机或电视监视器)呈现给观看者。由于人类视觉感知系统的局限性,人类期望在任何时刻都能从大致相同的视角感知世界。换句话说,人类期望3D物体的某些部分将是可见的,以及其他部分将被从视野中隐藏起来。因此,对于每个3D场景,计算机图形系统可以只需要渲染对用户可见的场景部分,而不需要渲染其余部分。这允许系统大大减少了所需的计算量。
光线投射是一种用于确定3D场景中物体可见性的技术。通常,虚拟光线从虚拟针孔相机通过虚拟矩形屏幕的每个像素均匀地投射到3D世界中,以确定什么是可见的(例如,基于光线击中的3D物体的哪些部分)。然而,这假定当对于具有有限视场的传统矩形显示技术(例如,计算机监视器和电话显示器)计算来自虚拟针孔相机的主可见性时,均匀的光线分布是合理的。然而,这一假设并不适用于更精确地表示真实的光学传感器的非针孔虚拟相机。此外,当前的VR观察光学器件(例如,集成在头戴式显示器内)提供弯曲的、非均匀的观察表面,而不是传统的矩形显示。因此,基于上述假设设计和优化的传统渲染技术在计算上效率低下,产生次优渲染,并且缺乏在人工现实中渲染场景的灵活性。
发明内容
本文描述的特定实施例涉及提供实时性能的主可见性算法和非常适合于渲染诸如虚拟现实和增强现实的人工现实的特征集合。当解决可见性问题时,特定实施例使用层次包围盒和两级截面剔除/入口点搜索算法来加速和优化相干主可见性光线的遍历,而不是为每个像素均匀地投射单独的光线。特定实施例利用多样本抗锯齿的适配来进行光线投射,这显著降低存储器带宽。
特定实施例进一步提供灵活性和渲染优化,这使得渲染引擎能够在保持实时性能的同时本地生成各种图形特征。在人工现实环境中这样的图形特征——诸如透镜失真、子像素渲染、非常宽的视场、聚焦和随机景深模糊——可能是特别期望的。这些实施例提供对动画和基于物理的着色和照明的支持,以提高渲染的场景的真实感。相反,为传统显示器(例如,具有均匀像素网格的矩形监视器或电视机集)设计的传统光栅化管线通常在硬件中实现,并且需要多次通过和/或后处理来近似这些特征。此外,主要关注蒙特卡罗路径追踪的传统光线追踪器在当前VR显示器上不能实现实时性能(例如,具有1080×1200×2分辨率和90Hz刷新率要求)。因此,本文描述的实施例特别适合于渲染人工现实,并且呈现了传统光栅化技术的具体的、可行的替代方案。
本发明的实施例可以包括或结合人工现实系统来实现。人工现实是在呈现给用户之前已经以某种方式调整的现实形式,其可以包括例如虚拟现实(VR)、增强现实(AR)、混杂现实(MR)、混合现实、或其一些组合和/或衍生物。人工现实内容可以包括完全生成的内容或与捕获的内容(例如,现实世界照片)组合的生成的内容。人工现实内容可以包括视频、音频、触觉反馈或其某种组合,并且其中的任何一个可以在单个通道中或在多个通道(诸如向观看者产生三维效果的立体视频)中呈现。另外,在一些实施例中,人工现实可以与例如用于在人工现实中创造内容和/或在人工现实中(例如在人工现实中执行活动)使用的应用程序、产品、附件、服务或它们的一些组合相关联。提供人工现实内容的人工现实系统可以在各种平台上实现,该平台包括连接到主机系统的头戴式显示器(HMD)、独立HMD、移动设备或计算系统、或能够向一个或多个观看者提供人工现实内容的任何其他硬件平台。
本文公开的实施例仅是示例,并且本公开的范围不限于它们。特定实施例可以包括上面公开的实施例的组件、元件、特征、功能、操作或步骤中的全部、部分或均不包括。特别地,根据本发明的实施例在针对方法、存储介质、系统和计算机程序产品的所附权利要求中公开,其中,在一个权利要求类别(例如,方法)中提及的任何特征也可以在另一个权利要求类别(例如,系统)中要求保护。选择所附权利要求中的从属关系或引用仅出于形式上的原因。然而,也可以要求保护由对任何先前权利要求(特别是多个依赖性)的特意参考而产生的任何主题,从而公开了权利要求及其特征的任何组合,并且可以要求保护,而不管所附权利要求中选择的从属关系如何。可以要求保护的主题不仅包括所附权利要求中阐述的特征的组合,而且还包括权利要求中的特征的任何其他组合,其中,权利要求中提到的每个特征可以与权利要求中的任何其他特征或其他特征的组合相结合。此外,本文描述或描绘的任何实施例和特征,可以在单独的权利要求中和/或在本文描述或描绘的任何实施例或特征或所附权利要求的任何特征的任何组合中要求保护。
附图说明
图1示出了层次包围盒树数据结构的示例。
图2示出了用于定义投影光线/波束的位置的示例三级层次结构。
图3示出了与足迹相关联的光线和子样本光线的示例。
图4示出了通过块投射的波束的示例。
图5示出了通过区块投射的波束的示例。
图6A至图6C示出了用于确定可见性的方法的示例。
图7示出了焦面图的示例。
图8示出了焦面图和相机参数的示例。
图9示出了用于为VR设备本地生成具有光学失真的图像的方法。
图10示出了重要性图的示例。
图11示出了用于基于变化的多样本抗锯齿生成图像的示例方法。
图12示出了将不使用波束竞速的图形生成时间线与使用波束竞速的时间线进行比较的示例。
图13示出了用于使用波束竞速来生成用于VR显示器的视频帧的示例方法。
图14示出了示例计算机系统。
具体实施方式
计算机图形中的一个基本问题是确定物体的可见性。目前,最常用的两种方法是光线追踪法,它模拟光的传输,在诸如电影和计算机辅助设计(CAD)的精度高于速度的行业占主导地位。由于光线追踪的计算要求很高,所以传统上它不适合需要实时或接近实时渲染的应用程序。确定可见性的另一种方法是深度缓存法(z-buffering),它检查场景中的每个3D物体,并更新缓冲区,该缓冲区针对虚拟矩形屏幕的每个像素追踪当前最近的物体。典型地,深度缓存法由当前图形硬件实现,并且缺乏处理偏离上述假设(例如,具有均匀像素分布的针孔相机和/或矩形屏幕)的渲染任务的灵活性。本文描述的特定实施例提供了一种可见性算法,其具有接近深度缓存法的性能特征,但是具有额外的灵活性,其能够渲染用于人工现实的各种各样的视觉效果。
为了提供进一步的环境,传统深度缓存法经常用于解决实时主可见性问题,大部分是由于其适用于均匀的主可见性问题(例如,对于传统矩形屏幕)以及廉价的专用硬件实现的可用性和扩展性。深度缓存(z-buffer)算法使用深度缓存,这是一种均匀的网格数据结构,存储每个样本/像素的当前最近的击中深度。深度缓存法的大多数实现都假设样本/像素被放置在均匀的网格中,与数据结构的组织精确匹配。网格结构的均匀性与映射到该网格上的样本的均匀分布相结合,允许非常有效的算法来确定哪些样本与多边形/三角形重叠。将物体的空间范围映射到网格上的过程称为光栅化。
深度缓存算法中使用的网格的均匀性产生了高效性,但是使算法不灵活。当对于几乎所有直视显示技术(诸如电视、监视器或手机)从虚拟针孔相机计算主可见性时,假设的均匀样本分布是合理的。然而,这些假设不适用于非针孔虚拟相机、诸如阴影的次要效果,并且由于头戴式显示器的观看光学器件所施加的失真,尤其不适用于现代虚拟现实设备,并且当前必须根据具体情况进行处理。
诸如不规则深度缓存的算法仍然使用均匀的网格,但是允许在每个网格单元中灵活地放置样本的数量和位置。不规则的深度缓存法遭受与均匀数据结构中的非均匀样本分布之间的冲突相关的负载均衡问题,使得它比传统的深度缓存法明显更昂贵。此外,具有均匀的数据结构意味着该算法仅支持有限的视场,而不支持景深渲染。
与深度缓存法不同,光线追踪算法采用更通用的方法,通过支持任意点到点或光线查询来确定可见性。有效地对基于物理的光传输建模并本地合成效果的能力使得它成为渲染电影场景的主要渲染算法。然而,光线追踪所提供的灵活性在性能上带来了巨大的成本,这阻止了它在诸如VR/AR的实时应用程序的消费者中的普及。
本文描述的特定实施例克服了现有渲染技术的缺点,以在现代计算机上实现非平凡场景的每秒超过100亿光线的光线速率,本地地支持人工现实所期望的计算机图形效果。
特定实施例解决计算机图形中的可见性问题。在特定实施例中,渲染系统可以使用光线投射器,该光线投射器使用三级(或更多)入口点搜索算法来确定可见性。在高级别处,系统可以采取层次方法,其中首先投射较大的波束(例如,相干波束)以确定在更宽的尺度上碰撞。基于波束的击中/未击中,可以投射更多粒状的波束或光线,直到解决可见性问题。应当注意,即使本文提供的某些示例将波束描述为表示主光线的相干束,但是本公开考虑使用波束来表示任何类型的光线(例如,主光线、镜面反射光线、阴影光线等),其相干结构可以被本文描述的实施例利用以实现计算效率。在特定实施例中,系统可以以异构方式实现,其中在中央处理单元(CPU)上发生波束遍历,并且在图形处理单元(GPU)上发生光线-三角形相交和着色。在其他实施例中,每个计算任务可以由相同类型的处理单元执行。
为了提高性能,特定实施例可以使用加速结构来组织场景几何形状。这些结构可以基于空间划分(网格、k-d或k维树、二进制空间划分或BSP树、八叉树)或物体划分(层次包围盒或BVH)。通过将几何形状组织成空间区域或将它们包围在封闭的盒体中,如果光线不进入包围物体的盒体,则该结构允许系统避免用物体测试光线。
在特定实施例中,轴对齐的层次包围盒是一种层次树结构,它在树的叶子处存储场景几何形状(通常是三角形)并在每个节点处存储轴对齐的包围框。与每个节点相关联的包围框可以保守地包围与节点的子树相关联的所有几何形状。在特定实施例中,光线(或诸如波束的其他可见性查询)可以从根递归地遍历树,并针对节点的子节点的包围盒进行测试。节点的子节点的递归遍历可以只在相交的情况下发生,因此光线/波束可以避免遍历树的部分,该树的父节点未被光线/波束击中。
图1示出了BVH树数据结构100的示例。树100中的每个节点(例如,110、120-128、130-136)可以与定义了物体的3D建模空间中的包围盒相关联。树100可以具有根节点110,该根节点110与包围与子节点120-128、130-136相关联的包围盒的大包围盒相关联。节点120可以与包含其子节点121-128的包围盒但不包含节点130-136的包围盒的包围盒相关联。节点121可以与包含其子节点122-125的包围盒但不包含任何其他节点的包围盒的包围盒相关联。节点122可以与包含几何形状(例如,三角形)但不包含任何其他包围盒的包围盒相关联。
在特定实施例中,系统可以使用四路轴对齐的BVH作为几何形状加速度结构。在特定实施例中,单个组合的BVH可以用于所有场景几何形状。在其它实施例中,系统可以采取多级方法以允许实例化,并通过允许更细粒度的BVH重建和修整来实现更有效的动画。每帧经由全局BVH修整支持基本动画。
在特定实施例中,BVH可以按深度优先的预定顺序布置在存储器中,并按它们在BVH的深度优先遍历中被接触的顺序,以连续阵列存储三角形。此外,具有叶子和内部子节点的混合的任何节点可以首先存储叶子节点。有了这些假设,通过BVH节点列表反向迭代可以保证节点的子节点总是在它将被访问之前被访问,并且所有三角形将以线性、反向顺序被访问。这些假设启用了线性、非递归的BVH修整算法,并在修整、遍历和相交期间改善高速缓存局部性。
用于计算主可见性的特定实施例可以使用BVH执行可见性测试。如前所述,可以通过测试物体(或其部分)是否与光线相交来确定物体(或其部分)是否从特定视点可见。然而,为每个像素发射来自每个像素的多条光线在计算上昂贵且资源密集,尤其是当需要覆盖的区域较大时。例如,如果每个像素使用32条样本光线,则需要对每个像素执行32次相交测试,并且需要分配足够大小的光线缓冲区来存储结果。在物体很少的场景中发射如此多的光线可能会特别浪费,因为大多数光线不会与任何物体相交。
代替发射光线,特定实施例可以使用波束来执行相交测试。在特定实施例中,系统可以按顺序使用(1)从相对较大的“区块”投射的较大截面波束(以下将更详细地描述波束足迹)、(2)从“块”投射的较小截面波束(以下也将更详细地描述波束足迹)和(3)程序性地生成的子样本光线(本文中可互换地称为“子光线”)来执行层次相交测试。在特定实施例中,除非使用较大的截面波束找到交点,否则不需要对子波束或光线执行相交测试,从而避免不必要的计算。在特定实施例中,像素着色可以基于单个子样本光线的相交结果而不是所有32个子样本光线的结果。为了进一步优化性能,特定实施例可以在执行相交测试时程序性地(例如,可以是伪随机地)动态地生成子样本光线,而不是从存储器检索预定义的子样本光线位置。程序的光线生成具有不需要从存储器读取从而节省了时间和带宽的好处。
图2示出了用于定义投影光线/波束的位置的示例三级层次。在特定实施例中,可以被认为是层次的第一级的光线足迹210,可以对应于像素足迹并由足迹中心240和差值250定义(例如,每个差值250可以指定足迹的边界距足迹210的中心240的距离)。在特定实施例中,子样本位置260a-e被分配给足迹210以用于抗锯齿。在图2所示的示例中,每个足迹210包括五个子样本位置260a-e。尽管特定示例示出了每个足迹210的五个子样本位置260a-e,但是可以由应用程序实现和/或定义任何其它数目的子样本位置(例如,每个足迹210的32个子样本位置)。
图3示出了与足迹相关联的光线和子样本光线(或子光线)的示例。在特定实施例中,光线310可与足迹210相关联,其中光线310投射穿过足迹210的中心240。如图2所示,足迹210可以由彼此相互垂直的两个向量250(也称为差值)和光线方向定义。足迹210的范围可以由这些向量250的长度定义。在特定实施例中,可以通过首先使用由光线310方向和足迹向量250定义的坐标框架来变换设置在例如足迹210的单位正方形上的低偏差点,在该足迹210内程序性地生成子样本光线(或子光线)。变换点的示例由子样本位置260a-e表示,如中空点所示。然后可以将光线方向添加到变换点(例如,子样本位置260a-e),并且可以将子样本光线360a-e分别定义为投射通过原始光线的310原点301和新变换的点260a-e的光线。例如,子样本光线可以用于多样本抗锯齿。在特定实施例中,对于景深光线,也可以使用单独的低偏差点集(不沿光线方向平移)来选择光线原点。
在特定实施例中,如在传统多样本抗锯齿(MSAA)中那样,每个三角形每个像素可以执行一次着色,这节省了大量着色计算。在特定实施例中,可以对每个样本执行着色以获得完整的超样本抗锯齿(SSAA)。由于子光线是程序生成的,而不是预定义的(并且存储在存储器中),因此当与在更高分辨率下的本地渲染相比时,可以通过抗锯齿因子来减少光线存储带宽。
在特定实施例中,主光线(例如310)被分配用于抗锯齿的足迹(例如210),并且然后被聚集到具有不同粒度的四边包围波束的第二级层次和第三级层次。更精细的第二级层次中的每个波束位置可以被称为块(例如,块的示例在图2中被标记为220)。每个块220可以包括预定数量的像素足迹210。尽管图2所示的示例示出了具有2×2像素足迹210的每个块220,但是也可以实现像素足迹210的任何其他布置(例如,每个块220可以包括16×8或128个像素足迹210)。然后,可以将块220聚集到较粗的区块230的集合,区块230是本文中用于指代第三级层次的术语。每个区块230可以包含预定数量的块220。尽管图2示出了包含2×2个块220的每个区块230,但是也可以实现块220的任何其他布置(例如,每个区块230可以包括8×8或64块)。因此,在每个区块230包含8×8个块220并且每个块220包含16×8个像素足迹210的实施例中,每个区块230可以表示8,192个像素足迹210。可以通过将区块230中的像素足迹210的数目乘以多采样速率(例如,每个像素足迹210,5个子样本光线)来计算由源自区块230的波束表示的光线的数目。因此,如果每个区块230表示8,192个像素足迹210,则区块230将表示40,960个子样本光线。在特定实施例中,将像素与块之间的比率定义为128:1并且块与区块之间的比率定义为64:1的选择是基于特定硬件的粗略调谐,但对于其它类型的硬件,其它比率可以是更优。
在特定实施例中,代替投射光线用于所有可见性测试,可以以层次的方式从区块和块投射波束以优化可见性计算。图4示出了从点原点301(例如,相机或视点)通过块220(在所示的示例中,块220包含2×2个像素足迹210)投射到3D建模空间中的波束420的示例。该示例中的实心波束420类似于源自块220的截面。波束420的盒体可以由通过块220的四个角投影的矢量定义。如果物体/三角形与波束420的盒体的任何部分相交,则物体或三角形与波束420相交。类似地,图5示出了从点原点301通过区块230投射到3D建模空间中的波束530的示例(在所示的示例中,区块230包含2×2个块,每个块包含2×2个像素足迹210)。该示例中的实心波束530类似于源自区块230的截面。波束530的盒体可以由通过区块230的四个角投影的向量定义。如果物体/三角形与波束530的盒体的任何部分相交,则物体或三角形与波束530相交。
现在将描述用于场景更新和三角形预计算的特定实施例。在特定实施例中,在渲染开始之前,可以执行动画(例如,场景中的3D物体模型可以改变)并且修整BVH。在特定实施例中,在CPU上可以发生骨骼动画,而线性混合蒙皮和BVH修整可以在以下示例阶段中的一系列CUDA内核中实现:(1)变换顶点(执行线性混合蒙皮);(2)清除BVH节点边界;(3)预计算三角形(例如,通过(a)收集顶点(b)计算边缘方程(对于Moller-Trumbore光线-三角形相交),以及(c)计算三角形边界并自动更新相应的叶包围框);以及(4)通过将边界从叶节点向上传播到内部节点层次来修整BVH。在特定实施例中,在对GPU执行修整之后,可以将BVH复制回用于区块和块遍历阶段的CPU存储器。此时,如果需要,可以计算和修整区块和块边界。
图6A至图6C示出了根据特定实施例用于确定可见性的方法600的示例。所示实施例执行三级入口点搜索算法,但也可以在其他实施例中实现附加级(例如,使用包括区块集合的第四波束足迹、包括第四波束单元集合的第五波束单元等)。在特定实施例中,三个级别在概念上被划分为区块剔除阶段、块剔除阶段和光线样本测试阶段。
图6A示出了区块剔除阶段的示例。在此阶段期间,计算系统可以遍历BVH层次并使用源自区块的波束(例如,如图5所示)来测试与BVH中的节点相关联的所选包围框的交集。在特定实施例中,每个这样的波束由128×64个像素足迹定义。在特定实施例中,波束遍历的实现使用显式堆栈AVX实现。因为区块遍历是一个剔除/入口点搜索阶段,而不是像传统的光线追踪器那样一直遍历到叶子,所以只遍历区块遍历,直到它达到特定的停止标准(例如,当已经发现64个入口点时)。
在特定实施例中,要为其生成场景的屏幕(例如,与用户使用的显示屏相对应的3D空间中的虚拟屏幕)可以被划分为n个区块。对于每个区块,系统可以执行三级测试以确定从该块什么可见。在特定实施例中,可以通过从区块投射波束来执行可见性测试。为了便于参考,本文将从区块投射的波束称为区块波束。
在特定实施例中,该方法可以在步骤610处开始,其中显式遍历堆栈(例如,用于追踪BVH的哪些节点将被测试用于相交的数据结构)可以用BVH的根(例如,图1所示的节点110)初始化,该根与包围盒(BV)相关联,该包围盒可以是例如包围框。包围盒可以在3D空间内定义。在某些情况下,包围盒可以包含较小的包围盒。例如,参考图1,每个子节点(例如,120-128和130-136)对应于根110的包围盒内的包围盒。在3D空间中定义的物体(例如,诸如三角形的基本几何形状、由基本几何形状的集合定义的较大物体等)可以包含在任何数量的包围盒内。例如,由与节点125相关联的包围盒包含的物体也包含在与节点123、121、120和110相关联的包围盒中。
在步骤612处,系统可以基于遍历堆栈访问包围盒,以测试与区块波束的相交。作为示例,系统最初可以执行和与根节点110相关联的包围盒的相交测试,并且在以后的迭代中依据遍历堆栈中的内容,针对根节点110的子节点执行相交测试。在特定实施例中,在遍历期间的每个步骤,可以测试遍历堆栈中沿着主遍历轴的最厚框。这允许系统更有效地将节点细化到单个表面补丁。尽管排序的开销很大,但已经了解到这将块/区块剔除性能提高了5-10%。
在步骤614处,系统可以模拟由区块定义的波束在3D空间中的投影,以测试与所选包围盒的相交。如图5所示,可以针对包围盒测试区块波束的盒体530,以确定相交的程度(如果有的话)。
在步骤616处,系统可以确定相交测试的结果是以下之一:(1)错过-意思是波束完全错过包围盒;(2)完全包含-意思是波束全部/完全包含包围盒;或者(3)部分相交——意思是波束和包围盒相交,但是包围盒没有完全包含在波束中。如果系统在步骤618处确定测试结果是错过,则系统可以移除/丢弃当前节点的子树,阻止其成为要测试与区块波束相交的候选者。例如,再次参考图1,节点132可以表示错过,意思是与节点132相关联的包围盒根本不与区块波束相交。这样,包含在包围盒内的较小的包围盒(例如,与节点132的子树中的节点133-136相关联的包围盒)不需要进一步测试,从而提供显著的计算节省。相反,如果系统在步骤620处确定测试结果被完全包含,则系统可以累积包围盒作为入口点,并且不需要进一步遍历关联节点的子树,因为它被传递性地完全包含。参考图1,节点121可以表示完全包含在区块波束内的包围盒。这样,包含在该包围盒内的较小的包围盒(即,与节点121的子树中的节点122-125相关联的包围盒)不需要针对区块波束进行测试(但是可以在后续的块剔除阶段中进行测试),从而提供实质性的计算节省。相反,如果系统在步骤622处确定部分地包含测试结果(例如,包围盒与区块波束部分地相交),则系统可以将与包围盒相关联的子树添加/插入到遍历堆栈中以用于继续细化。参考图1,节点110可以表示与区块波束部分相交的包围盒。这样,包含在包围盒内的较小的包围盒可以进一步针对区块波束进行测试。例如,响应于节点110的包围盒与区块波束部分地相交,系统可以将每个子树的顶部节点(例如,节点120和130)插入遍历堆栈中,以针对区块波束进行进一步的相交测试。
在特定实施例中,在步骤624处,系统可以确定是否满足区块剔除阶段的一个或多个终止条件。如果不满足终止条件,则系统可以继续针对与存储在遍历堆栈中的节点相关联的包围盒执行相交测试。例如,在确定根节点110的包围盒与区块波束部分地相交之后,系统可以在下一次迭代中,测试与例如节点120或130相关联的较小的子包围盒是否与区块波束相交。此过程可以继续,直到满足终止条件为止。例如,遍历可以继续,直到遍历堆栈为空。如果这样,系统可以按接近深度的顺序对累积的入口点(或完全包含的包围盒)进行排序,并将它们传递到块剔除阶段以进行进一步处理。另一个终止条件可以是当遍历堆栈的大小和完全包含的包围盒的列表的大小的总和等于预先指定的值(诸如32、64、128等)时。在特定实施例中,可以合并遍历堆栈和列表,以接近深度的顺序对其排序,并将其传递到块剔除阶段。因此,从区块剔除阶段传递到块剔除阶段的入口点不超过固定数目。
在特定实施例中,在遍历期间,分离轴定理用于确定包围盒和区块波束之间的分离。当在切换到块剔除之前对入口点进行排序时,沿着波束的主轴的近平面可以用作键值。
块剔除阶段从区块剔除阶段结束的地方开始。在特定实施例中,使用64个块剔除阶段(例如,根据特定实施例,对应于区块中的8×8或64个块)进一步测试在区块剔除阶段期间识别的每个入口点。在特定实施例中,块剔除可以在显式堆栈AVX遍历中实现,如在区块剔除中一样。然而,不是通过用BVH中的根节点初始化遍历堆栈来开始,而是可以通过复制与区块剔除相关联的输出来初始化遍历堆栈。以这种方式,块剔除避免重复在区块剔除期间执行的大量的遍历。在特定实施例中,波束/框测试具有与区块剔除中类似的潜在结果,但是遍历可以继续,直到遍历堆栈为空。一旦聚集了所有三角形,就会通过CUDA将它们复制到GPU进行样本测试。在特定实施例中,在高深度复杂场景中,尽管事实是它们可以被更接近的几何形状遮挡,但是可以快速地收集并潜在地测试过多数量的三角形。短路块遍历可能需要交错块剔除和样本测试,这意味着将块剔除迁移到CUDA实现。
图6B示出了块剔除阶段的示例,以处理来自区块剔除阶段的结果。如前所述,区块剔除阶段可以通过投射区块波束和测试与包围盒的相交来生成入口点的列表。所得到的入口点可以在后续的块剔除阶段期间用作起始点。块剔除阶段,通常可以使用包含在区块波束内的块波束来测试相交。如前所述,每个第二波束由比区块足迹小的块足迹来定义。
用于处理区块剔除阶段的结果的块剔除阶段可以在步骤630处开始,在步骤630处系统可以迭代地选择在区块剔除阶段期间生成的列表中的入口点并执行块剔除。已知与BVH中的节点或包围盒相关联的入口点与区块波束相交。在块剔除阶段,系统尝试以更细的粒度确定区块的哪些块与包围盒或其子盒体相交。因此,给定所选的入口点,系统可以迭代地投射包含在区块波束内的块波束以测试相交。
对于给定入口点,在步骤632处,系统可以迭代地选择区块中的块以执行相交测试。在特定实施例中,在针对特定块波束测试入口点之前,系统可以将遍历堆栈初始化为与入口点相关联的包围盒。这样做提供效率增长,因为块剔除阶段不需要从BVH的根开始(在区块剔除阶段已经完成了这项工作)。参考图1,作为示例,系统可以用节点121初始化遍历堆栈,节点121在区块剔除阶段期间被确定为合适的入口点。
在步骤634处,系统可以基于遍历堆栈,访问包围盒以测试与区块波束的相交。例如,系统最初可以执行与节点121相关联的包围盒的相交测试,节点121在区块剔除阶段期间被认为是合适的入口点,并且在以后的迭代中依据遍历堆栈中的内容,执行针对其子节点的相交测试。在特定实施例中,在遍历期间的每个步骤,可以测试遍历堆栈中沿着主遍历轴的最厚框。
在步骤636处,系统可以模拟由块定义的波束投射到3D空间中,以测试与包围盒的相交。如图4所示,可以针对包围盒测试块波束的盒体420,以确定相交的程度(如果有的话)。
在步骤638处,系统可以确定相交测试的结果是以下之一:(1)错过-意思是波束完全错过包围盒;(2)完全包含-意思是波束全部/完全包含包围盒;或者(3)部分相交——意思是波束和包围盒相交,但是包围盒没有全部包含在波束中。在步骤640处,如果系统确定测试结果是错过,则系统可以移除/丢弃当前节点的子树,阻止其成为要与块波束进行相交测试的候选者。相反,如果系统在步骤642处确定测试结果被完全包含,则系统可以将三角形/多边形累积在要在后续阶段中测试的包围盒中。不需要进一步遍历关联节点的子树,因为它被传递性地完全包含。换句话说,包含在当前包围盒内的任何附加包围盒可以被移除,阻止其成为要与块波束进行相交测试的候选者。相反,如果系统在步骤644处确定测试结果被部分地包含(例如,包围盒与块波束部分地相交),则系统可以将与包围盒相关联的子树添加/插入到遍历堆栈中以用于继续细化(例如,当处理在步骤634处重复时)。
作为示例,系统可以从诸如图1中的节点121的入口点开始。在某些情况下,系统可以确定与节点121相关联的包围盒与投射的块波束部分相交。基于此确定,系统可以将节点121的子树(例如122和123)插入遍历堆栈中。然后,当重复步骤634时,例如,系统可以通过将块波束投射到与节点122相关联的包围盒来测试节点122的相交。在某些情况下,系统可以确定投射的块波束完全包含与节点122相关联的包围盒并将盒体中的三角形/多边形添加到列表用于采样。
在特定实施例中,遍历可以继续,直到遍历堆栈为空。因此,在步骤646处,系统可以确定是否有任何节点保留在遍历堆栈中。如果在堆栈中存在节点,则系统可以返回到步骤634,以针对块波束来测试该节点。如果堆栈中不存在节点,则在步骤648处,系统可以确定在区块中是否存在尚未针对原始入口点测试的附加块。如果是,则系统可以返回到步骤632以针对相交点针对未测试的块测试入口点。否则,系统在步骤650处可以确定是否仍然需要测试来自区块剔除阶段的附加入口点。如果是,则系统可以返回到步骤630。否则,特定实施例中的系统可以将所收集的三角形/多边形传递到光线样本测试阶段。
在特定实施例中,可以在块剔除阶段之后执行光线样本测试阶段。在特定实施例中,光线样本测试阶段可以被分成每块和每像素阶段。在特定实施例中,可以使用具有128大小的工作组的单个CUDA内核来完成两个阶段。在每块部分中,线程可以用三角形1:1绘制,并且在每像素阶段中,线程可以用像素1:1绘制。在特定实施例中,线程可以可选地用子像素1:1绘制,在这种情况下,阶段可以被称为每子像素阶段。如在本文中所使用的,子像素是单个LED,诸如红色、绿色或蓝色,并且不同于多样本抗锯齿意义中的子样本。因此,子像素可以具有许多子样本。系统可以支持多样本抗锯齿(MSAA)和超样本抗锯齿(SSAA),区别是在MSAA中,每个三角形的每个像素仅执行一次着色,并且在撞击相同三角形的像素的所有子样本之间共享结果,并且在SSAA中,着色是由每个子样本单独计算的。MSAA的优点是潜在的大幅降低着色率。块的三角形数据可以被收集到GPU上的共享本地高速缓存中,以便于从所有样本访问。此三角形高速缓存可以具有128个条目。在特定实施例中,每个块和每个像素/子像素阶段可以交替,直到块的所有三角形都已被处理。
图6C示出了样本测试阶段的示例,以处理在块剔除阶段之后识别的三角形相交。在块剔除阶段之后,系统可能已经识别出与相关联的块波束相交的三角形列表。在样本测试阶段期间,系统尝试在更精细的像素级别进一步采样三角形,并且可以利用子样本光线来这样做(例如,用于抗锯齿)。在特定实施例中,前述每块阶段可以由步骤660至668表示,并且每像素/子像素阶段可以由从步骤670开始的步骤表示。
在步骤660处,在测试与块波束相交的三角形之前,系统可以通过例如清除每个子样本深度和索引值来执行初始化。在每块阶段期间,系统可以在步骤662处将三角形数据收集到共享存储器高速缓存中。在步骤664处,系统可以对三角形执行背面和近平面剔除。在步骤666处,系统可以针对三角形来测试块角光线,并将相交分类为完全包含、部分相交和错过,类似于上述分类。在步骤668处,系统可以执行公共原点相交预计算(当适用时)。
在特定实施例中,一旦每块阶段已经完成,每个线程可以将其自身与像素/子像素相关联,并且在每像素/子像素阶段期间执行以下步骤。该系统可以使用包含在三角形与之相交的块波束内的光线来测试相交。在特定实施例中,光线(包括子样本光线)可以程序性地生成。
在特定实施例中,在步骤670处,系统可以针对块中的每个像素/子像素查找与光线的足迹相关联的足迹中心和差值。在步骤672处,系统可以将中心(例如,图2,标签240)和差值(例如,图2,标签250)转换成3D世界空间。中心和差值可以定义光线足迹,通过该光线足迹可以生成光线并将光线投射到3D空间中以测试与物体(例如,三角形)的相交。
在特定实施例中,系统可以针对每个三角形迭代地投射与光线足迹相关联的光线。例如,在步骤674处,在已经确定光线足迹之后,系统可以从高速缓存获取三角形。针对光线足迹中的每个光线样本可以迭代地测试三角形。例如,在步骤676处,对于每个光线样本,系统可以经由查找表计算像素足迹内的子样本偏移(例如,图2,标签260a处)。在步骤678处,系统可以计算由该子样本定义的光线的光线-三角形相交(例如,图3,标签360a处)。在步骤680处,当确定光线与三角形相交时,系统可以存储与相交相关联的信息。例如,在成功相交的情况下,系统可以更新子样本深度和三角形索引。在已经针对三角形测试像素/子像素的单个光线之后,系统可以在步骤682处确定是否应制作额外的样本(例如,基于图2,每个像素有五个子样本)。如果是,则系统可以重复步骤676以生成另一光线并测试相交。如果已经针对所有子样本测试了三角形,则在步骤684处,系统可以确定是否存在如在块剔除阶段期间确定的与块波束相交的更多三角形。如果是,则系统可以重复步骤674,以使用与当前光线足迹相关联的光线对另一三角形进行采样。如果不存在更多三角形,则系统可以确定在块内是否存在针对三角形应该被测试的块内的更多像素/子像素。如果是,则系统可以重复步骤670以使用来自另一像素/子像素的光线针对与块相交的三角形执行相交测试。
一旦处理完所有三角形之后,将完全解析块的可见性,并且每个子样本的深度和三角形索引缓冲区包含每个子样本的最近击中。在特定实施例中,此时,可以压缩子样本数据并将其发射到“G缓冲区(gbuffer)”以准备着色。在这种情况下,“G缓冲区”可以只包含可见性信息:成对的三角形索引和子样本掩码,其足以在着色阶段重新计算重心并获取顶点属性。“G缓冲区”可以被分配为足够大以保持条目的固定数目(例如32),以便处理每个子像素的每个子样本撞击不同三角形并存储在GPU上的全局存储器中的情况。对存储器进行寻址,使得每个像素的第一三角形在存储器中相邻,随后是第二三角形等,因此实际上仅实际使用该缓冲区的小前缀。在特定实施例中,压缩可以执行以下步骤:(1)按三角形索引对子样本排序;和(2)迭代子样本并为每个独特的三角形索引发射例如三角形索引和多样本掩码。一旦构建了“G缓冲区”,样本测试阶段就完成了,并且开始解析/着色阶段。
在样本测试阶段期间计算了可见性之后,系统可以执行着色、聚集MSAA或SSAA样本并计算最终的像素/子像素颜色到缓冲区,该缓冲区可以呈现为包括在3D空间内定义的可见物体的渲染的计算机生成的场景。在特定实施例中,从先前阶段的输出读取每个样本位置,并且针对像素中心处的每个“G缓冲区”条目计算光线相交。然后,可以使用属性来执行着色,该属性使用在相交期间获得的重心进行插值,并且可以每像素累积着色结果。一旦每个像素处理了所有“G缓冲区”条目,系统就可以执行胶片色调映射,并将结果输出到最终缓冲区以供显示。在SSAA的情况下,光线可以独立地生成、相交和着色,而不是每个条目具有单个加权的着色结果。
在特定实施例中,解析/着色阶段可以包括以下步骤。例如,系统可以查找样本位置(例如,从在先前阶段中生成的样本的线性缓冲区)。然后,系统可以计算差值(例如,当处于闭合形式时解析地,否则在有限差分中)。然后,系统可以将光线和差值变换到3D世界空间以准备相交。系统可以将着色结果累加器清除为0。然后,对于每个“G缓冲区”条目,系统可以获取三角形数据,对像素中心执行光线-三角形相交,并计算深度和重心坐标,将重心坐标箝位到三角形边界,基于重心坐标插值顶点属性,执行着色/照明,并且累积着色结果。然后,系统可以通过例如1/子样本速率缩放累积的着色结果。然后,系统可以执行色调映射并输出结果。
特定实施例适当时可以重复图6A至图6C的方法的一个或多个步骤。尽管本公开描述和示出了以特定顺序发生的图6A至图6C的方法的特定步骤,但是本公开考虑以适当顺序发生的图6A至图6C的方法的任何适当步骤。此外,尽管本公开描述和示出了用于执行主可见性计算的示例方法,包括图6A至图6C的方法的特定步骤,但是本公开考虑了用于执行主可见性计算的任何合适的方法,包括任何合适的步骤,其可以适当的包括图6A至图6C的方法的步骤的所有步骤、一些步骤或不包括图6A至图6C的方法的步骤。此外,尽管本公开描述和示出了执行图6A至图6C的方法的特定步骤的特定组件、设备或系统,但是本公开考虑了执行图6A至图6C的方法的任何适当的步骤的任何适当组件、设备或系统的任何适当组合。
本实施例的一个优点是它可以在传统的图形管线内实现。在高级别,需要渲染的应用程序可以向图形驱动程序发出指令,反过来,图形驱动程序可以与相关联的GPU通信。通过驱动程序的图形应用程序编程接口(API),应用程序可以指定应当如何渲染场景。例如,应用程序可以提交表示要为其生成场景的3D空间中的物体的几何形状定义。在特定实施例中,应用程序还可以提交如何定义光线的位置和轨迹的光线缓冲区。为了避免需要大量存储器来存储光线缓冲区和读取/写入缓冲区的运行时成本,特定实施例可以进一步允许用户指定可以用于在运行时程序地生成光线的过程的定义。基于所提供的信息,渲染系统可以执行可见性计算,例如使用如前所述的光线投射。一旦确定了几何形状的可见性,系统就可以进行着色并输出最终场景。
本文描述的实施例提供的灵活性使得渲染系统能够本地实现与虚拟现实或增强现实相关的各种渲染特征,与使用后处理来模拟这种效果的现有系统形成对比。此外,现有的图形API专注于主采样点的均匀网格的特定情况。虽然当前的硬件光栅化器对于该用例进行高度调整,但是对于AR/VR显示器的渲染需要附加的高性能功能,该功能通过根据特定实施例的光线投射更自然地实现。特别地,现有的图形API不能够处理以下情况:(1)通过在不同子像素布置上的已知光学失真来直接子像素渲染;(2)在屏幕上改变多样本和/或着色率(例如,用于凹面渲染/场景感知工作再平衡);(3)用于变焦显示器的景深近似的景深采样模式;以及(4)波束竞速。
本文所描述的特定实施例基于以下特征支持前述用例,这些特征可以被实现为对图形管线的可见性确定部分的增强。例如,为了支持光学失真在不同的子像素布置上进行渲染,系统可以允许使用渲染引擎的应用程序,利用非均匀网格采样模式来指定和渲染,并且使用独立的颜色通道采样。为了支持变化的多样本/着色,系统可以允许应用程序指定每个像素/块/区块的“重要性”测量。为了支持景深,系统可以允许应用程序利用非均匀网格采样模式和非点源采样模式来指定和渲染。这些特征中的每一个,连同波束竞速,将被进一步详细地描述。
在高级别,当需要任何类型的透镜失真时,在经由主成分分析计算包围波束之前,可以将失真应用于光线(例如,确定光线方向)。当启用子像素渲染时,可以考虑使用单独的网格并且分别平铺和阻挡红色、绿色和蓝色通道。当存在景深时,可以扩展波束以适应光线原点的分布。当使用凹形(foveated,小凹)光线分布时,可以使用自顶向下的分裂算法来生成光线束,以构建包含不多于n(例如128)个像素的块和包含不多于m(例如64)个块的区块。该系统可以支持部分占用的块和区块。对于大多数用例,这些盒体可以基于系统的透镜参数,在时间开始时计算一次。然而,在参数在帧之间改变的情况下,诸如在凹形渲染期间的关注点,可以在每个帧的基础上重新计算它们。包围波束可以界定每个像素的完整足迹,而不仅仅是它们的中心,以支持MSAA。
特定实施例使得图形系统能够支持直接光学失真渲染和子像素渲染。头戴式与传统显示器的主要区别之一是观察光学的使用。除了允许用户关注显示器之外,当观察时,观察光学还将各种像差添加到显示器。值得注意的是,头戴式显示器通常产生具有色彩依赖性的枕形失真,这导致颜色分离和不均匀的像素间隔。这导致用户有效地看到三种不同的显示器,每种颜色一个(例如,红色、绿色和蓝色),具有三种不同的失真功能。通常,可以在后处理图像失真阶段期间校正这些伪影。例如,不支持直接失真渲染的传统的渲染系统,会产生传统的矩形图像。为了经由头戴式显示器正确地观察图像,后处理阶段采用矩形图像并为头戴式观察光学创建扭曲图像。传统的多阶段处理不仅效率低,而且产生的效果也不理想。
本文描述的特定实施例使渲染器能够接受/接收透镜参数信息(例如,透镜孔径、曲率等)并且使用这样的信息来产生内在扭曲的图像,而不需要后处理。直接子像素渲染的优点包括增加清晰度。通过考虑子像素的空间位置,可以为每个子像素而不是同时为整个像素定义更精确的强度。此外,直接子像素渲染消除了对大的预失真渲染目标的需要。例如,某些传统的VR设备具有3024×1680的眼睛缓冲区分辨率,或者2160×1200像素的输出显示分辨率的1.96倍。假定呈现给显示器的图像被桶形失真掩模裁剪,实际上2160×1200像素中仅有大约85%被呈现。由于这些大的保护带或眼睛缓冲区的过度渲染,不到总像素的50%需要渲染。因此,通过使用本文描述的实施例进行直接渲染,可以节省大量的计算。直接子像素渲染通过避免失真校正重采样通道,从而进一步提高图像质量,失真校正重采样通道会引入锯齿和模糊两者,最明显的是对于诸如文本的近奈奎斯特细节。最后,通过移除全帧失真校正通道,直接失真渲染能够有机会及时渲染。
为了支持在不同子像素布置上的光学失真渲染,该系统可以允许使用渲染引擎的应用程序,利用非均匀网格采样模式来指定和渲染并且使用独立的颜色通道采样。光学失真通常是由于透镜的物理特性引起的,它使光以扭曲的方式弯曲。在传统的渲染系统中,假设相机是具有均匀光学的针孔相机。为了生成将由这样的针孔相机捕获的图像,传统系统通过平坦、均匀的虚拟图像平面上的点,将来自针孔相机的光线投射到3D空间中。因此,均匀网格采样模式传统上就足够了。然而,由于现实世界的光学结构并不完美并且复杂(例如,具有多个透镜叠层),光实际上并不以直线进入和离开光学结构,并且光弯曲的程度取决于其进入/离开的点以及光学结构的曲率和密度。因此,使用均匀的网格模式生成的图像不能准确地表示一个人期望感知的内容。
渲染系统的特定实施例允许应用程序(例如,向渲染系统发送请求的VR或游戏应用)指定焦面图。焦面图可以定义为空间中具有任何期望曲率的曲面。从概念上讲,焦面图为每个像素定义了空间中的对应点,该对应点在通过像素看到时将聚焦。在特定实施例中,焦面图可以将屏幕坐标映射到3D世界或相机空间中的特定位置。焦面图可以作为类似于指定屏幕像素应当如何扩展到3D世界空间中的控制面。在特定实施例中,焦面图可以具有与输出图像相同的2D尺寸,使得在焦面图中存储的值与输出图像中的像素之间存在1到1的映射。因此,当确定特定像素的可见性时,系统可以在焦面图中查找对应值以找到光线应通过的3D空间中的点。在特定实施例中,表面图可以被存储为将屏幕空间映射到3D世界空间(或相机空间)的float3或half3缓冲器。在特定实施例中,如果焦面图小于像素,则焦面图可以被定义为Catmull-Rom表面,并且可以使用插值来确定像素映射到的3D空间中的精确坐标。在特定实施例中,为了处理大于180度的视场,系统可以切换顶点/地理/镶嵌着色器以输出世界空间位置。在特定实施例中,如果定义了焦面图,则可以在世界/相机空间中定义整个着色器管线的顶点位置。
图7示出了如果要在3D世界空间中显示焦面图750的示例。在特定实施例中,焦面图750可以在数学上或算法上定义。在其他实施例中,焦面图可以被定义为查找表。在任一情况下,给定屏幕空间中的坐标,焦面图750可以用于确定3D空间中的对应坐标。例如,图7包括虚拟图像传感器阵列710的概念表示(其也可以表示对应的屏幕)。传感器710中的每个所示网格(诸如网格711-713)可以表示对应像素的传感器。焦面图750可以在3D空间中定义特定点751、752和753,该特定点分别对应于它们各自像素(或子像素)的代表性的点711、712和713。如前所述,每个点(诸如点751)概念上可以表示空间中的点,该点将如在对应点711处看到的那样聚焦。在光线投射/追踪期间,光线721、722和723分别通过点751、752和753,可以分别从点711、712和713投射,如焦面图750所指定的那样。光线721、722和723可以用于确定物体可见性。例如,图7中的物体740,从点712可见,但是从点711和713不可见。在特定实施例中,与每个像素相关联的子样本光线可以类似地映射到焦面图750上。例如,除了点711之外,附加的子样本位置可以与相同像素足迹相关联。可以在焦面图750上定义子样本位置的投射。例如,可以将子样本位置的投射定义在其中定义了点751的相同网格内。在可见性测试期间,可以通过焦面图750上子样本位置的对应投射,从子样本位置投射子样本光线来测试物体相交。
焦面图750为应用程序/用户提供了灵活性来定义任何期望的光线方向以生成任何期望的结果效果。例如,如果应用程序希望模拟光学失真,则它可以定义焦面图750,焦面图750近似于由光学造成的期望失真。基于焦面图750,可以在任何方向上投射单独的光线(而不是通过常规网格均匀地投射),类似于光学结构将如何弯曲光。
焦面图还可以用于支持宽视场(FoV)渲染。头戴式与传统的显示器之间的一个显著区别是,头戴式显示器可以支持更宽的视场。然而典型的桌面显示器消耗观看者的FoV的大约30°的视场,而当前的VR耳机大约从90°开始并且可以高达210°。由于在传统深度缓存算法中进行了均匀的样本网格假设,渲染图像所需的样本数量随着FoV半角的正切而增加(假设固定的最小角度分辨率)。这会导致朝向180°FoV时的效率急剧下降。例如,140°和160°之间的区别几乎是渲染像素数量的4倍。为了减轻这种低效率,已经研究了渲染多个窄FoV图像并将它们拼接在一起的方法。虽然这提高了深度缓存算法的效率,但是代价是为每个附加视图重复处理几何图形,以及增加的和潜在的明显的缝合拼接伪影。为了解决这些缺点,本文描述的实施例使光线投射器适应于支持任意光线分布以支持宽FoV渲染。作为另一个示例,如果应用程序期望渲染具有宽视场(例如,大于90°、120°、180°、210°等)的场景,它可以定义焦面图,该焦面图随着光线原点偏离屏幕中心而导致光线逐渐向外弯曲(例如,两条光线(诸如从场景的相对侧投射的光线)之间的最小角度可以大于90°、120°、180°、210°等)。例如,焦面图可以相对于相机定义凹形双曲面。相机可以位于曲率表面内,诸如曲率中心(例如,以获得180°FoV)、中心后面(例如,以获得120°FoV)或中心前面(例如,以获得210°FoV)。由于焦面图为应用程序提供灵活性以指定光线应如何行进,因此可以本地生成宽FoV,而不采用经受上述限制和成本的修补操作。
焦面图可以额外用于支持散焦模糊和景深模糊,这是在VR/AR中期望的效果,因为它们提供了人类期望的真实感水平。散焦模糊是所有非针孔相机的一种自然效果,并且是合成生成的图像中一种常见的模拟效果。在虚拟现实中,景深也是可变焦距显示中的重要效果,在可变焦距显示中,离开焦点平面的内容需要用合成模糊来渲染,以匹配人类视觉系统的期望。然而,传统的渲染系统通常假定相机是针孔相机,从而在整个过程中产生锐聚焦(换句话说,具有无限的景深)。为了模拟模糊,传统的系统对清晰渲染的图像执行后处理。模拟散焦或景深模糊的传统处理不仅效率低,而且模糊效果也不准确。这是因为模拟模糊通常通过平均相邻像素颜色来执行,然而实际散焦或景深模糊是由光行为和透镜物理特性引起的。
特定实施例使得渲染系统能够支持可以用于随机生成散焦或景深模糊的某些相机参数。例如,特定实施例可以使用表示视觉系统的孔径和焦深参数(例如,经由焦面图)来生成实时随机模糊。本文描述实施例的独特特征是,尽管附加光线的数目很大,相同的机器用于散焦模糊和MSAA两者,这允许系统以接近显示分辨率的速率着色。可以基于景深分组的宽度来计算着色差,这除了提供正确的预滤波之外,还通过在纹理读取期间要求更粗糙的MIP水平来改善性能。除了有效地支持散焦模糊之外,本文描述的实施例可以精确地和综合地这样做。相反,图像空间散焦模糊算法(例如,通过模糊相邻像素对输出图像进行后处理)不能本地与诸如凹形(由于在计算图像空间景深之前需要从凹形图像合成密集的直线颜色和深度图)或宽视场(由于图像平面上的像素之间的角度分辨率的非均匀的各向异性差异,需要同时拼接多个视图,或两者)的各种效果集成。
为了支持散焦模糊和/或景深模糊,特定实施例允许应用程序使用非均匀网格采样模式和非点源采样模式来指定和渲染。如本文其他地方所述,特定实施例可以允许用户定义焦面图。此外,特定实施例可以允许应用程序指定用于修改光线源的参数的薄透镜模型。在特定实施例中,可以指定透镜的半径或虚拟相机的孔径。
图8示出了使用焦面图850和相机参数(例如,孔径,镜头尺寸等)来本地(而不是经由后处理)生成具有散焦或景深模糊的图像的示例。在特定实施例中,焦面图850可以在数学上或算法上定义。在其他实施例中,焦面图可以被定义为查找表。在任一情况下,给定屏幕空间中的坐标,焦面图850可以用于确定在3D空间中的对应坐标。例如,图8包括虚拟图像传感器阵列810的概念表示(其也可以表示像素的屏幕)。传感器810中的每个所示网格可以表示像素的传感器。焦面图850可以在3D空间中定义与屏幕/传感器810上的特定点相对应的特定点。例如,根据焦面图850,3D空间中的点855可以映射到传感器阵列或屏幕中的传感器或像素(或子像素)的代表点815。如前所述,点855概念上可以表示空间中的点,该点将如在对应点815处看到的那样聚焦。如前所述,传感器的每个网格的子样本位置可以类似地映射到焦面图850上的特定点。
除了焦面图850之外,特定实施例还可以使得应用程序能够定义虚拟相机的参数。特定实施例可以使应用程序能够定义更逼真的虚拟相机,而不是使用由空间中的点表示的针孔相机。例如,图8表示具有网格830的虚拟相机的参数。由于相机具有物理尺寸(而不是空间中的点),所以网格830用于表示光线可以行进通过的各种采样点(例如,点831、832、833)。例如,网格830可以表示虚拟相机的孔径或透镜上的均匀采样点。在特定实施例中,应用程序可以指定孔径/透镜的尺寸(例如,通过指定孔径/透镜的圆形区域的半径、孔径/透镜的正方形区域的差值、或孔径/透镜的矩形区域的长度和宽度)。反过来,该尺寸可以用于确定网格830的尺寸/维度。在特定实施例中,网格830的粒度也可以由应用程序控制。虽然在该示例中网格830用作用于表示透镜或透镜的孔径的数据结构,但是本实施例不限于使用网格。例如,投射光线所经过的空间点可以用向量或坐标列表表示,或它可以程序地定义(例如,通过数学公式)。
在光线投射/追踪期间,特定实施例可以迭代地确定每个像素的物体可见性。在图8中所示的示例中,系统可以确定点815的物体可见性。由于与点815相关联的像素的颜色可以取决于从透镜的不同点入射的光,因此特定实施例可以通过由网格830定义的诸如831-833的各种点,概念性地投射源自点815的光线。换句话说,这些点831-833可以被认为是透镜上的点的样本,光可以通过这些样本点击中由点815表示的虚拟相机传感器。在特定实施例中,系统可以通过如焦面图850定义的点855,分别从点831、832和833投射光线821、822和823。在所示的示例中,光线821未击中物体840,光线822几乎未击中它,而823与它相交。由于光线的相交点(或缺乏相交点)足够不同,因此由点815所表示的像素的所得的颜色计算将不是纯粹的物体840的颜色计算,并且因此,物体840将在最终场景中显得模糊。相反,如果物体840位于点855处或其附近,则物体将在景深内并且看起来更清晰。类似地,可以在子样本级别执行可见性测试。在这种情况下,每个子样本位置(例如,与由点810表示的像素相关联的子样本位置)可以类似地映射到焦面图850上的点(例如,由点855表示的网格中的点)。可见性测试可以通过从子样本位置,通过网格830定义的各个点(例如,通过孔径),以及通过焦面图850上的对应点投射子样本光线来执行。
图9示出了根据特定实施例,用于本地生成用于VR设备的具有光学失真的图像的方法。在步骤910处,计算系统可以通过应用程序编程接口(API)接收由应用程序指定的焦面图。例如,VR/AR应用(例如,游戏)可以向图形API发送指令,包括焦面图的定义。在特定实施例中,焦面图可以定义为相对于表示图像传感器阵列的平面的坐标网格。例如,焦面图中的每个网格可以映射到或关联于表示屏幕上的阵列传感器或对应像素的网格。例如,焦面图中的左上网格可以与左上传感器/像素相关联,焦面图中的右上网格可以与右上传感器/像素相关联,等等。表面图中的每个网格可以在3D空间中存储坐标,其中可以定义表面和传感器阵列或像素的相对位置(该3D空间可以不同于要为其生成场景的3D世界空间)。在特定实施例中,焦面图可以替代地由算法指定。例如,数学函数或基于规则的算法可以将坐标(例如,表示传感器阵列或像素屏幕中的点的2D坐标)作为输入并输出3D坐标。
在步骤920处,系统可以确定三维空间(3D)中的方位,其可以表示3D空间中的虚拟相机或观看者的方位。在特定实施例中,方位可以由VR应用程序指定,反过来,其可以基于由虚拟现实设备生成的传感器数据。例如,头戴式设备可以包括追踪用户的实时运动并输出传感器数据以表示或描述该运动的陀螺仪或惯性测量单元。由这样的运动追踪传感器提供的传感器数据可以由VR应用程序用于确定用户的当前方位,并将该方位提供给渲染引擎以在3D空间中定位/重新定位虚拟相机。
在步骤930处,系统可以基于所确定的方位在3D空间中生成多个第一坐标。例如,多个第一坐标可以表示虚拟相机的图像传感器或相应虚拟屏幕上的像素。在特定实施例中,一个或多个变换矩阵或其他变换算法可以用于在3D空间中定位和定向虚拟图像传感器/屏幕。渲染系统将对其采样的虚拟图像传感器/屏幕上的每个点可以由3D空间中的坐标表示。
在步骤940处,系统可以使用多个第一坐标和焦面图来生成3D空间中的多个第二坐标。例如,第二坐标可以是3D空间中表示物体将在焦点中出现的位置的点(例如,由图7中的焦面图750定义的诸如点751的点)。多个第一坐标中的每一个可以与多个第二坐标中的一个相关联。例如,如图7所示,点711(由坐标定义)根据焦面图750映射到或关联于点751。
在特定实施例中,系统可以通过使用焦面图执行查找操作来生成第二坐标。例如,对于第一坐标中的每一个(例如,每个相机传感器/像素),系统可以在焦面图中查找对应的网格以识别焦面图中映射到第一坐标的坐标。在特定实施例中,可以在与正为其生成场景的3D世界空间不同的空间内定义来自焦面图的坐标。因此,在特定实施例中,系统可以使用一个或多个变换矩阵或算法来将坐标从焦面图变换到3D世界空间以生成例如3D世界空间中的点751。
在特定实施例中,系统迭代地程序性地生成第二坐标。例如,在特定实施例中,焦面图可以由算法指定。这样,系统可以通过根据算法处理多个第一坐标来生成多个第二坐标。例如,可以在数学上定义算法,使得给定输入坐标(例如,虚拟图像传感器上的诸如图7中的点711的点的坐标),该算法将输出对应的坐标。在特定实施例中,输出坐标可以在与定义输入坐标的空间相同的空间中。例如,算法的特定实施例可以被配置为接收在非世界空间中定义的输入坐标。这样,算法的输出可以是在非世界空间中的焦点相对于输入坐标的相对位置。如果这样,则可以基于虚拟相机的当前方位(例如,经由变换矩阵)将系统变换到3D世界空间。在其他实施例中,算法可以将在3D世界空间内定义的坐标(例如,图7中的点711的坐标)作为输入,并且输出3D世界空间中的坐标(例如,图7中的点751的坐标)。在这种情况下,不需要后续的转换。
在步骤950处,对于多个第一坐标中的每一个,系统可以将光线从第一坐标投射穿过相关联的第二坐标,以测试与一个或多个物体的相交,来确定在3D空间内定义的一个或多个物体的可见性。例如,在图7中,光线721从点711投射穿过由焦面图定义的相关点751。所投射的光线可以用于测试与在3D世界空间内定义的任何物体的相交(或可见性)。例如,图7示出物体740在点711和713处对于传感器/像素是不可见的,但是在点712处对于传感器/像素是可见的。在特定实施例中,光线可以是子样本光线,而不是如本文其他地方所述的与像素相关联的主光线。在特定实施例中,替代地,所投射的也可以是波束(例如,从块或区块投射的波束)。在特定实施例中,可以使用相关联的主光线和焦面图来计算在3D世界空间中波束的覆盖范围。例如,使用焦面图,可以确定每一条主光线的轨迹。为了确定波束的覆盖范围,系统可以使用上述光线差值以计算其光线足迹,并且反过来与波束相关联的光线足迹可以共同用于定义当波束在投射通过3D世界空间时的波束的覆盖范围。
在步骤960处,系统可以基于所确定的一个或多个物体的可见性,来生成3D世界空间中的一个或多个物体的图像。如前所述,系统可以使用投射的光线从虚拟相机的角度来确定物体可见性。可以通过存储每个相交物体(例如,三角形或其他基元)的深度及其索引来追踪物体可见性。使用此可见性信息,系统可以继续进行着色以确定应将什么颜色分配给每个像素。然后,将使用集合的像素来生成图像,该图像将是来自虚拟相机的有利位置的3D世界空间的场景。该图像可以包括在虚拟相机可见的3D世界空间内定义的任何物体。
特定实施例可以适当的重复图9的方法的一个或多个步骤。尽管本公开描述并示出了以特定顺序发生的图9的方法的特定步骤,但是本公开还考虑以任何适当顺序发生的图9的方法的任何适当步骤。此外,尽管本公开描述和示出了用于为VR设备本地生成具有光学失真的图像的示例方法,该方法包括图9的方法的特定步骤,但是本公开还考虑了用于这样做的任何合适的方法,该方法包括任何合适的步骤,该步骤可以适当的包括图9的方法的所有步骤、一些步骤或不包括图9的方法的步骤。此外,尽管本公开描述和示出了执行图9的方法的特定步骤的特定组件、设备或系统,但是本公开还考虑执行图9的方法的任何适当步骤的任何适当组件、设备或系统的任何适当组合。
特定实施例的另一个好处是用于生成凹形图像的本地支持。传统的图形驱动程序缺乏有效的凹形渲染的支持,因为它们假定像素具有相等的值、权重和写入质量。因此,当传统系统生成图像时,不管位置、包括所消耗的计算资源如何,每个像素都被平等处理。然而,像素的平等处理不适用于在VR中经常期望的凹成像。例如,在VR场景中,外围视图可以是模糊的,或者凹形效果可以帮助将用户的注意力引导到特定的注视点。凹形图像的模糊部分可以提供有较少的细节,并且因此在注视点之外的渲染区域上消耗的计算资源将是浪费的或不期望的。
渲染系统的特定实施例可以接受附加信息以生成具有随屏幕位置的函数而变化的质量的图像。由于系统不限于在均匀网格上采样,因此它可以与分辨率下降紧密匹配(例如,注视点处的样本分辨率更高,以及其他地方的样本更低),从而导致着色样本更少。结果表明通过渲染凹形样本分布,着色成本显著降低。
特定实施例通过为应用程序提供灵活性以指定每个像素/块/区块的“重要性”的测量,来支持可以用于本地生成凹形图像的变化的多采样和着色。在特定实施例中,系统可以支持重要性图,该重要性图指示(例如,经由float2/half2/unorm8等)“重要性”的测量,例如,对于每个图像单元(例如,像素,块,区块等)从0到1。在特定实施例中,应用程序还可以指定重要性的粒度(例如,像素、块、区块等)。例如,通过图形驱动程序的API,应用程序可以为应用程序希望生成的每个场景指定具有相关粒度的重要性图。在特定实施例中,重要性图可以使用网格数据结构来实现,其中每个网格映射到像素或其他任何类型的图像单元。
图10示出了重要性图1010的示例。在该示例中,重要性图1010是6×6的图,该图可以用于指定具有6×6个像素的图像的相对重要性。在特定实施例中,重要性图1010中的每个网格的相对位置对应于图像中相同对应位置处的像素。例如,重要性图1010中的左上网格可以对应于图像的左上像素的重要性。通过该重要性图1010,应用程序可以单独地指定每个像素/块/区块的相对重要性。在特定实施例中,接近1的重要性值可以指示较高的重要性,并且接近0的重要性值可以指示较低的重要性。如果这样,则图10中的重要性图1010指示中心像素是重要的(例如,用1标记的网格),紧邻的周围像素是中等重要的(例如,用0.6标记的网格),形成图像的上边缘和右边缘的像素是相对较小的重要性(例如,用0.4标记的网格),以及最后,在底边缘和左边缘上的剩余像素是最小的重要性(例如,用0标记的网格)。
在特定实施例中,重要性图可以用于调整多样本抗锯齿(MSAA)、着色和任何其他图形任务。图10示出重要性图1010的示例,如MSAA图1020中所示,该重要性图1010用于确定MSAA每像素要使用多少光线。当图形系统执行MSAA时,它可以使用重要性图1010来决定每个像素使用多少子样本光线。在所示的示例中,使用5条子样本光线对中心的像素进行采样,因为重要性图1010中的对应网格指示那些像素具有高重要性。由于每个紧邻的周围像素具有0.6的重要性值,所以使用较少的子样本光线(例如,在所示的示例中为3条)进行采样。以类似的方式,2条子样本光线被用于上边缘和右边缘上的像素,因为它们各自对应的重要性值是0.4。底边缘和左边缘上的剩余像素是最不重要的,可以仅使用1条光线进行采样。由于重要性图指示图像的某些区域没有其他区域重要,所以系统可以对在何处保存计算作出明智的决策。例如,如果每个像素要被平等处理,则传统系统可以对36个像素中的每一个使用5个子样本光线,导致使用180条子样本光线。相反,通过指示每个像素的重要性程度,系统只用5×4+3×12+2×11+1×9=87条子样本光线就能够执行MSAA。
在特定实施例中,可以使用焦面图选择性地隐含地定义重要性值。如上所述,焦面图可以定义映射到虚拟图像传感器或屏幕上的对应点的点。对于屏幕上需要更高分辨率或更多细节的区域(例如,在注视点处或附近的区域),焦面图上的点的对应定义可以更密集或更细,反过来可以导致产生更多光线/子光线。相反,对于需要较低分辨率或细节的区域(例如,注视点之外的区域),焦面上的点的对应定义可以较不密集或粗糙,反过来可以导致产生较少光线/子光线。
图11示出了基于变化的多样本抗锯齿生成图像的示例方法。在步骤1110处,计算系统可以通过应用程序编程接口(API)接收由应用程序指定的重要性图。例如,VR/AR应用(例如,游戏)可以向图形API发送包括重要性图的定义的指令。在特定实施例中,重要性图可以包括对应于像素(或其他图像单元,诸如块和区块)或它们各自的光线足迹的重要性值。在特定实施例中,重要性图可以存储在诸如图10所示的示例的网格数据结构中。在特定实施例中,重要性图可选地、程序性地被定义,诸如基于输出作为像素/足迹位置的函数的重要性值的算法或数学公式。例如,重要性图可以程序性地将中心定义为最重要的,并且重要性水平可以对于远离中心的像素逐渐降低。在特定实施例中,还可以基于焦面图的密度来指定什么是“重要的”。例如,具有更密集网格(对应于应该投射通过这些区域的更密集的光线)的焦面图中的区域可以隐含地指示这些区域更重要。
在步骤1120处,系统可以确定三维(3D)空间中的方位,该方位可以表示3D空间中的虚拟相机或观看者的方位。在特定实施例中,方位可以由VR应用程序指定,反过来VR应用程序又可以基于由虚拟现实设备生成的传感器数据。例如,头戴式设备可以包括陀螺仪或惯性测量单元,其可以追踪用户的实时运动并输出传感器数据以表示或描述该运动。由这样的运动追踪传感器提供的传感器数据可以由VR应用程序使用来确定用户的当前方位,并将该定方位提供给渲染引擎以在3D空间中定位/重新定位虚拟相机。
在步骤1130处,系统可以基于所确定的方位在3D空间中生成多个光线足迹。例如,多个光线足迹可以分别表示虚拟屏幕(或对应的图像传感器阵列)上的像素。在特定实施例中,每一光线足迹可以由中心坐标和至少一个差值来定义。例如,如前所述,正方形或矩形足迹可以由表示为向量的垂直差值定义。在特定实施例中,基于虚拟相机的方位,一个或多个变换矩阵或其他变换算法可以用于在3D空间中来定位和定向光线足迹。
在步骤1140处,对于每一个光线足迹,系统可以识别要为该光线足迹生成的子样本的对应数量。在特定实施例中,可以基于基于重要性图定义的重要性值来确定要生成的子样本的数目(例如,对于明显的重要性值生成更多子样本和对于较低重要性值生成更少子样本)。在特定实施例中,可以通过查找重要性图来识别重要性值。例如,可以基于(1)网格数据结构中的重要性值的相对位置和(2)像素阵列/网格中的光线足迹的对应像素的相对位置来识别光线足迹的对应重要性值。例如,参考图10,左上重要性值0.4在重要性图中的相对位置可以被识别为网格中的(1,1)。该重要性值可以对应于图像中(1,1)位置处的像素或其对应的光线足迹。可选地,如前所述,重要性图可以被程序性地定义,使得重要性图输出给定位置的重要性值。作为另一可选方案,重要性值可以由焦面图内的区域的密度隐含地定义(例如,对于更密集的区域产生更多的子样本,以及对于密度较低的区域产生较少的子样本)。因此,重要性图允许不同的光线足迹具有不同的重要性值。例如,应用程序可以使用重要性图来定义诸如图像的中心像素的某些像素(或它们对应的光线足迹),该中心像素比诸如图像的边缘上的像素的其他像素更重要。
在步骤1150处,系统可以基于对应的重要性值(由重要性图显式地定义的、程序性地定义的、或是由焦面图隐含地定义的)在每个光线足迹中生成一个或多个坐标。坐标可以是光线足迹内的子样本位置。在特定实施例中,要使用的坐标的数目可以是重要性值的函数。例如,如果每个光线足迹可以使用的子样本的最大值为5,并且重要性值可以在0到1的范围内,5条子样本光线可以用于从0.8到1的重要性值,4条子样本光线可以用于从0.6到0.8的重要性值,3条子样本光线可以用于从0.4到0.6的重要性值,2条子样本光线可以用于从0.2到0.4的重要性值,以及1条子样本光线可以用于低于0.2的重要性值。因此,如果光线足迹具有重要性值1,则系统可以生成5个子样本坐标,其将大于为具有较低重要性值(诸如0.4)的另一光线足迹生成的子样本坐标的数目。在重要性图用于生成具有应当聚焦/锐化的注视区域的凹形图像的实施例中,具有重要性值为1的光线足迹可以与注视区域相关联,并且具有较低重要性值(例如,0.4)的光线足迹可以与图像中在注视区域之外的区域相关联。
在步骤1160处,系统可以通过从一个或多个坐标中的每一个投影光线以测试与一个或多个物体的相交,来确定在3D空间内定义的一个或多个物体的可见性。在特定实施例中,光线可以被认为是从像素的足迹投影的子样本光线。在3D场景中,任何与物体的相交点都可能导致相交点的深度和三角形击中的索引被存储。
在步骤1170处,系统可以基于所确定的一个或多个物体的可见性来生成3D世界空间中的一个或多个物体的图像。如前所述,系统可以使用投影的光线从虚拟相机的角度来确定物体可见性。通过存储每个相交物体(例如,三角形或其他基元)的深度及其索引来追踪物体可见性。使用此可见性信息,系统可以继续进行着色处理以确定应将什么颜色分配给每个像素。然后,将使用集合的像素来生成图像,该图像将是来自虚拟相机的有利位置的3D世界空间的场景。该图像可以包括在3D世界空间内定义的对于虚拟相机可见的任何物体。
特定实施例可以适当的重复图11的方法的一个或多个步骤。尽管本公开描述并示出了以特定顺序发生的图11的方法的特定步骤,本公开考虑了以任何适当顺序发生的图11的方法的任何合适的步骤。此外,尽管本公开描述和示出了用于基于变化的多样本抗锯齿生成图像的示例方法,该方法包括图11的方法的特定步骤,但是本公开考虑了用于这样做的任何合适的方法,该方法包括任何合适的步骤,其可以适当的包括图11的方法的所有步骤、一些步骤或不包括图11的方法的步骤。此外,尽管本公开描述和示出了执行图11的方法的特定步骤的特定组件、设备或系统,但是本公开考虑执行图11的方法的任何适当步骤的任何适当组件、设备或系统的任何适当组合。
特定实施例可以向应用程序提供灵活性以说明子像素特性的差异。虽然像素通常被认为是能够显示任何颜色的单个物理显示单元,但是它实际上由位于不同位置的能够显示单独的原色(例如,红、绿和蓝)的多个子像素组成。由于不同的颜色有不同的波长,这些颜色在光学结构中的表现也不同。
为了生成更加真实的场景,在特定实施例中,系统可以考虑在子像素级别的这些色差。在特定实施例中,系统可以支持每通道焦面图(例如,一个用于红色的表面图、一个用于绿色的表面图和一个用于蓝色的表面图)。例如,系统可以允许应用程序分别指定对于三个颜色通道是存在单个焦面图还是存在三个焦面图。如果使用三个焦面图,则一个焦面图可以与第一原色(例如,红色)相关联,另一个焦面图可以与第二原色(例如,绿色)相关联,并且第三焦面图可以与第三原色(例如,蓝色)相关联。特定颜色焦面图是彼此独立的,并且可以基于色差单独地定义(例如,三种颜色可以具有不同的焦面到不同光波长的特性)。在可见性测试期间,系统可以投射三组光线,每组光线使用三种特定颜色焦面图中的一种。例如,对于特定像素,一组光线/子光线可以在由红色焦面图指定的方向上投射,第二组光线/子光线可以基于绿色焦面图投射,并且第三组光线/子光线可以基于蓝色焦面图投射。虽然与使用单个焦面图的实施例相比,可能需要投射更多的光线,但是一个优点是系统可以本地校正色差。
类似地,特定实施例还可以支持每通道重要性图(例如,一个用于红色,一个用于绿色,以及一个用于蓝色)。例如,在使用多个焦面图单独模拟原色的实施例中,可以使用对应的重要性图来指定应作为传感器/屏幕区域的函数使用的子样本光线的密度。
本文描述的特定实施例支持称为“波束竞速”的技术。在图形渲染管线中,在场景被光栅化之前,在存储器中渲染每个基元。换句话说,在场景中的物体已经被渲染之后,在最终场景中的像素被一个接一个地生成。这些像素一起显示,并假定在特定时刻表示场景。然而,由于生成像素需要时间,所以在渲染物体的时间和显示像素的时间之间可能存在显著的时间延迟(例如,11毫秒)。在传统的显示环境(例如,电影、动画等)中,延迟可能不明显。然而,在VR/AR环境中并非如此。在VR/AR中,用户期望在运动和视觉感知之间得到即时的反馈。例如,当用户转动他的头时,他期望场景在那一瞬间改变,并且当前的显示反映他当前的视点。任何延迟,例如用于在渲染之后生成和输出像素的时间标记,可能对用户体验产生负面影响。例如,如果在用户站起来的时候,系统可以开始基于用户的升高的视角来渲染场景。然而,当场景的像素在时间t0+11ms处输出时,用户可能正在坐下。因为用户现在期望从较低的有利位置看到场景,所以看到不反映这种期望的场景将负面地影响VR体验,并且甚至可能导致眩晕或恶心。
图12示出了将不使用波束竞速的图形生成时间线与使用波束竞速的时间线进行比较的示例。特别地,图12示出了同时生成并输出整个图像的图形生成时间线1220。在所示的示例中,佩戴VR设备的用户可以在时间t0处从位置1210快速旋转他的头部到时间t4处的位置1214。如果管线1220被配置成生成整个图像,则其可以通过基于用户在时间t0处的头部方位1210来配置虚拟相机的方位来开始,并且继续着色和光线投射整个图像。当图像准备输出时,时间可以是t4。然而,在时间t4处,用户的头部方位1214可以从时间t0方位1210已经显著改变,然而呈现给用户的图像可以基于在t0处的用户的头部方位1210。这种延迟可能会使用户产生迷失方向的感觉。
特定实施例通过逐行扫描输出像素扫描来减少渲染和图像显示之间的延迟,其中每行是基于当轮到该行输出时进行的渲染而生成的。例如,系统可以在时间t0处渲染和基于t0渲染光线投射到第0行(而不是整个场景);在时间t1处渲染和基于t1渲染光线投射到第1行;等等。由于系统一次只处理一行(或者一次多个预定行,而不是所有行一起),所以渲染时间和像素输出时间之间的延迟变得更短,并且渲染将基于用户的最新移动/视角。因此,实时的场景变化将会更加被动。这种“波束竞速”技术有可能显著降低头部移动到光子延迟的可能性。即使是显著的批处理,诸如数百行(数十万像素),也可能在扫描输出前等待整个帧时产生大幅减少延迟。在特定实施例中,系统可以相对于扫描输出时钟安排渲染和光线投射任务。
再次参考图12,波束竞速图形管线1230示出了波束竞速技术的示例。在这个示例中,每个视频帧显示有40条水平线。第一时间线1240表示生成视频帧的第一个10行(行1至10)的定时。在时间t0处,系统可以使用在那时可用的最新运动感测数据(例如,来自VR设备的惯性测量单元、陀螺仪等)来定位虚拟相机并执行可见性测试。然后,系统可以执行视频帧行1-10的着色和光线投射。在所示的示例中,行1-10在时间t1准备好并显示给用户。由于系统的任务仅是生成10行而不是全部40行,因此如时间线1220所示,生成行1-10(例如,t1-t0)所需的持续时间显著短于生成整个图像(例如,t4-t0)所需的持续时间。因此,在时间t1处,将向用户呈现使用来自t0的最新传感器信息生成的行1-10,其比时间线1220所示的场景更新。在特定实施例中,行1-10可以连续显示,直到已经生成了视频帧中剩余的行,并且该过程将重复以基于虚拟相机的更新的方位/位置生成更新的行1-10。
在特定实施例中,在系统生成行1-10之后,它可以继续生成行11-20,如时间线1241所示。该过程可以在时间t1处开始,在时间t1处,系统可以基于在那时可用的最新传感器数据来执行可见性测试。系统可以再次经历着色和光线投射的处理,并且然后在时间t2处输出行11-20。因此,在时间t2处,向用户呈现基于来自时间t1的传感器数据生成的行11-20。然后,系统可以重复该过程以从时间t2开始并在时间t3结束生成行21-30,并且然后从时间t3开始并在时间t4结束生成31-40。因此,在时间t4处,与时间线1220呈现的场景相比,向用户呈现包括更多当前信息(例如,早在时间t3处)的视频帧,其中在时间t4处向用户呈现基于数据生成的帧。
在特定实施例中,渲染系统可以进一步预测用户的头部位置/方位以输出与用户的期望匹配的场景。例如,如果用户正在转向过程中,则系统可以预测用户将在下一帧中继续转向,并且基于预测的相机位置/方位开始渲染场景。如果延迟为11ms,系统将不得不提前进一步预测,这就更加困难并且更有可能出错。如果延迟显著减小(例如,减小到1ms),则系统将只需要提前1ms预测。这使得预测任务更加容易,并且更不易出错。
图13示出了用于使用波束竞速来生成用于VR显示器的视频帧的示例方法1300。该方法可以开始于步骤1310,例如,在步骤1310处计算系统可以在时间t0处获得由虚拟现实(VR)设备生成的传感器数据。例如,VR设备可以包括头戴式显示器和一个或多个运动传感器,诸如惯性测量单元、陀螺仪、加速度计等。在步骤1320处,系统可以使用来自t0的传感器数据来确定三维(3D)空间中的第一方位。例如,基于来自陀螺仪的旋转数据和用户在3D空间中的最后已知方位,系统可以计算用户的当前方位。在特定实施例中,可以通过在3D空间中定向/定位虚拟相机来在3D空间中表示用户的方位。
在步骤1330处,系统可以通过基于所确定的方位投射光线以测试与一个或多个物体的相交来确定在3D空间内定义的一个或多个物体的可见性。例如,基于虚拟相机在3D空间中的方位,系统可以将光线投射到3D空间中以测试与其中定义的任何物体的相交。在特定实施例中,如本文所述,光线的方向可以基于焦面图(或多个焦面图,每原色一个)。如本文所述,光线的密度也可以由焦面图或单独的重要性图定义。
在步骤1340处,系统可以基于所确定的一个或多个物体的可见性来生成n行(例如,1、3、5、10、100行等)像素。在特定实施例中,像素的生成可以是着色和光栅化处理的结果。所生成的n行可以是VR显示器中像素的总行的子集。继续上面示例,如果VR显示器总共有40行,在这个阶段,系统可以生成显示器的行1-10。换句话说,所生成的行的数目可以是行的总数的子集。
在步骤1350处,系统可以输出所生成的n行像素以供虚拟现实设备显示。如前所述,在特定实施例中,系统可以仅更新诸如行1-10的子集,而不是基于相同的虚拟相机方位更新显示器的所有行。
在特定实施例中,然后,可以针对行的下一子集重复生成和输出行的子集的过程。例如,在步骤1310处,系统可以从VR设备获得最新的传感器数据(例如,与时间t1相关联的传感器数据)。在步骤1320处,系统可以再次基于来自VR设备的最新传感器数据确定3D空间中的第二方位。在步骤1330处,然后系统可以继续通过基于第二方位投影光线来确定在3D空间内定义的任何物体的可见性,以测试与物体的相交。在步骤1340处,系统可以基于所确定的一个或多个物体的第二可见性来生成另n行像素(例如,行11-20)。在步骤1350处,系统可以输出n行像素以供虚拟现实设备显示。如图12所示,在时间线1240和1241结束时,行11-20与行1-10同时显示。
图13所示的步骤可以重复,直到产生并输出显示器的所有行为止。每n行像素可以被认为是显示器的像素总行的子集,并且每n行的集合可被顺序地和迭代地生成。例如,如果行的总数是40,则系统可以按顺序生成行1-10、11-20、21-30和31-40,并且此后可以从行的第一个集合开始(例如,行1-10)重复该过程。因此,一旦与时间t0相关联的n行的第一个集合被输出,则该行集合可以保持不变,直到生成显示器的其它行中的每行(t0之后使用由VR设备生成的传感器数据)。一旦轮到再次生成的行的第一集合,则行的第一集合可以由基于最新传感器数据生成的像素行代替。
在图13中,该过程示出了在输出一个或多个第一像素行(例如,基于与时间t0相关联的方位生成的像素行)之后执行确定第二方位的步骤。在特定实施例中,多线程或多处理器计算系统可以在输出n行像素的前一集合之前开始生成n行像素下一集合的过程。例如,如果基于来自时间t1的传感器数据生成行11-20,则时间t1可以是系统正在处理前一集合行1-10的步骤1320-1350的任何时间。
在特定实施例中,每次迭代生成的行的数量可以等于预定数量。例如,n可以被预设为1、5、10、20等。在特定实施例中,图形系统可以预定义该数字。可选地或附加地,图形系统可以允许应用程序指定每次迭代应生成的行数。例如,请求图形系统生成场景的应用程序可以指定它希望在每次迭代中生成的行数。例如,应用程序可以通过API将该信息传递到图形系统。
特定实施例可以适当的重复图13的方法的一个或多个步骤。尽管本公开描述并示出了以特定顺序发生的图13的方法的特定步骤,但是本公开考虑以适当顺序发生的图13的方法的任何适当步骤。此外,尽管本公开描述和示出了使用波束竞速为VR显示器生成视频帧的示例方法,该方法包括图13的方法的特定步骤,但是本公开考虑了用于这样做的任何合适的方法,包括任何合适的步骤,其可以适当的包括图13的方法的所有步骤、一些步骤或不包括图13的方法的步骤。此外,尽管本公开描述和示出了执行图13的方法的特定步骤的特定组件、设备或系统,但是本公开考虑执行图13的方法的任何适当的步骤的任何适当组件、设备或系统的任何适当组合。
图14示出了示例计算机系统1400。在特定实施例中,一个或多个计算机系统1400执行本文描述或示出的一个或多个方法的一个或多个步骤。在特定实施例中,一个或多个计算机系统1400提供本文描述或示出的功能。在特定实施例中,在一个或多个计算机系统1400上运行的软件执行本文描述或示出的一个或多个方法的一个或多个步骤,或者提供本文描述或示出的功能。特定实施例包括一个或多个计算机系统1400的一个或多个部分。本文中,在适当的情况下,对计算机系统的引用可以包括计算设备,反之亦然。此外,在适当的情况下,对计算机系统的引用可以包括一个或多个计算机系统。
本公开考虑任何适当数量的计算机系统1400。本公开考虑采用任何合适的物理形式的计算机系统1400。作为示例而非通过限定的方式,计算机系统1400可以是嵌入式计算机系统、片上系统(SOC)、单板计算机系统(SBC)(诸如,例如,模块化计算机(COM)或模块化系统(SOM))、台式计算机系统、膝上型计算机或笔记本计算机系统、交互式亭、大型机、计算机系统网、移动电话、个人数字助理(PDA)、服务器、平板计算机系统、增强/虚拟现实设备、或它们中的两个或更多个的组合。在适当的情况下,计算机系统1400可以包括一个或多个计算机系统1400;单一的或分布的;跨越多个位置;跨越多台机器;跨越多个数据中心;或者驻留在云中,云可以包括一个或多个网络中的一个或多个云组件。在适当的情况下,一个或多个计算机系统1400可以在没有实质空间或时间限制的情况下执行本文描述或示出的一个或多个方法的一个或多个步骤。作为示例而非通过限定的方式,一个或多个计算机系统1400可以实时地或在批处理模式下执行本文描述或示出的一个或多个方法的一个或多个步骤。在适当的情况下,一个或多个计算机系统1400可以在不同的时间或不同的位置执行本文描述或示出的一个或多个方法的一个或多个步骤。
在特定实施例中,计算机系统1400包括处理器1402、存储器1404、存储设备1406、输入/输出(I/O)接口1408、通信接口1410和总线1412。尽管本公开描述和示出了在特定布置中具有特定数目的特定组件的特定计算机系统,但是本公开考虑了在任何适当布置中具有任何适当数目的任何适当组件的任何适当计算机系统。
在特定实施例中,处理器1402包括用于执行指令的硬件,诸如构成计算机程序的那些指令。作为示例而非通过限制的方式,为了执行指令,处理器1402可以从内部寄存器、内部高速缓存、存储器1404或存储设备1406检索(或获取)指令;解码并执行它们;并且然后将一个或多个结果写入内部寄存器、内部高速缓存、存储器1404或存储设备1406。在特定实施例中,处理器1402可以包括用于数据、指令或地址的一个或多个内部高速缓存。本公开考虑处理器1402在适当的情况下包括任何适当数目的任何适当的内部高速缓存。作为示例而非通过限制的方式,处理器1402可以包括一个或多个指令高速缓存、一个或多个数据高速缓存、以及一个或多个翻译旁视缓冲器(translation lookaside buffer,TLB)。指令高速缓存中的指令可以是存储器1404或存储设备1406中的指令的副本,并且指令高速缓存可以加速处理器1402对那些指令的检索。数据高速缓存中的数据可以是存储器1404或存储设备1406中的数据的副本,用于在处理器1402处执行以进行操作的指令;在处理器1402处执行的先前指令的结果,用于在处理器1402处执行的后续指令的访问或用于写入存储器1404或存储器1406;或其他合适的数据。数据高速缓存可以加速处理器1402的读或写操作。TLB可以加速处理器1402的虚拟地址转换。在特定实施例中,处理器1402可以包括用于数据、指令或地址的一个或多个内部寄存器。本公开考虑处理器1402在适当情况下包括任何适当数目的任何适当内部寄存器。在适当的情况下,处理器1402可以包括一个或多个算术逻辑单元(ALU);是多核处理器;或者包括一个或多个处理器1402。尽管本公开描述和示出了特定处理器,但本公开考虑了任何适当的处理器。
在特定实施例中,存储器1404包括主存储器,用于存储处理器1402执行的指令或处理器1402用于操作的数据。作为示例而非通过限制的方式,计算机系统1400可以将指令从存储设备1406或另一源(诸如,例如,另一计算机系统1400)加载到存储器1404。然后处理器1402可以将指令从存储器1404加载到内部寄存器或内部高速缓存。为了执行指令,处理器1402可以从内部寄存器或内部高速缓存中检索指令并对它们进行解码。在指令执行期间或之后,处理器1402可以将一个或多个结果(其可以为中间或最终结果)写入内部寄存器或内部高速缓存。然后处理器1402可以将这些结果中的一个或多个写入存储器1404。在特定实施例中,处理器1402仅执行一个或多个内部寄存器或内部高速缓存中的指令或存储器1404中的指令(与存储设备1406或其他地方相反),并且仅对一个或多个内部寄存器或内部高速缓存中的数据或存储器1404中的数据进行操作(与存储设备1406或其他地方相反)。一个或多个存储器总线(其可以各自包括地址总线和数据总线)可以将处理器1402耦接到存储器1404。如下所述,总线1412可以包括一个或多个存储器总线。在特定实施例中,一个或多个存储器管理单元位于处理器1402和存储器1404之间,并且便于对处理器1402请求的存储器1404的访问。在特定实施例中,存储器1404包括随机存取存储器(RAM)。该RAM在适当的情况下可以是易失性存储器。在适当的情况下,该RAM可以是动态RAM(DRAM)或静态RAM(SRAM)。此外,在适当的情况下,该RAM可以是单端口或多端口RAM。本公开考虑任何合适的RAM。存储器1404可以在适当的情况下包括一个或多个存储器1404。尽管本公开描述并示出了特定存储器,但本公开考虑任何适当存储器。
在特定实施例中,存储设备1406包括用于数据或指令的大容量存储设备。作为示例而非通过限制的方式,存储设备1406可以包括硬盘驱动器(HDD)、软盘驱动器、闪存、光盘、磁光盘、磁带、或通用串行总线(USB)驱动器或它们中的两个或更多个的组合。在适当的情况下,存储设备1406可以包括可移动或不可移动(或固定)介质。在适当的情况下,存储设备1406可以在计算机系统1400的内部或外部。在特定实施例中,存储设备1406是非易失性固态存储器。在特定实施例中,存储设备1406包括只读存储器(ROM)。在适当的情况下,该ROM可以是掩模编程ROM、可编程ROM(PROM)、可擦除PROM(EPROM)、电可擦除PROM(EEPROM)、电可变ROM(EAROM)或闪存,或它们中的两个或更多个的组合。本公开考虑采用任何适当物理形式的大容量存储设备1406。在适当的情况下,存储设备1406可以包括促进处理器1402和存储设备1406之间的通信的一个或多个存储设备控制单元。在适当的情况下,存储设备1406可以包括一个或多个存储设备1406。尽管本公开描述并示出了特定的存储设备,但是本公开考虑了任何合适的存储设备。
在特定实施例中,I/O接口1408包括硬件、软件或两者,提供用于计算机系统1400与一个或多个I/O设备之间的通信的一个或多个接口。计算机系统1400可以在适当的情况下包括这些I/O设备中的一个或多个。这些I/O设备中的一个或多个可以实现人与计算机系统1400之间的通信。作为示例而非通过限制的方式,I/O设备可以包括键盘、小键盘、麦克风、监视器、鼠标、打印机、扫描器、扬声器、静止相机、触笔、平板电脑、触摸屏、追踪球、摄像机、另一个合适的I/O设备或它们中的两个或多个的组合。I/O设备可以包括一个或多个传感器。本公开考虑任何合适的I/O设备和用于它们的任何合适的I/O接口1408。在适当的情况下,I/O接口1408可以包括使处理器1402能够驱动这些I/O设备中的一个或多个的一个或多个设备或软件驱动器。在适当的情况下,I/O接口1408可以包括一个或多个I/O接口1408。尽管本公开描述和示出了特定的I/O接口,但是本公开考虑了任何合适的I/O接口。
在特定实施例中,通信接口1410包括硬件、软件、或两者,提供用于计算机系统1400和一个或多个其它计算机系统1400或一个或多个网络之间的通信(诸如,例如,基于分组的通信)的一个或多个接口。作为示例而非通过限制的方式,通信接口1410可以包括网络接口控制器(NIC)或网络适配器,用于与以太网或其它基于有线的网络或无线NIC(WNIC)或无线适配器通信,用于与无线网络(诸如WI-FI网络)通信。本公开考虑任何合适的网络和用于它的任何合适的通信接口1410。作为示例而非通过限制的方式,计算机系统1400可以与自组织网络、个域网(PAN)、局域网(LAN)、广域网(WAN)、城域网(MAN)、或因特网的一个或多个部分、或它们中的两个或多个的组合进行通信。这些网络中的一个或多个的一个或多个部分可以是有线的或无线的。例如,计算机系统1400可以与无线PAN(WPAN)(诸如,例如,BLUETOOTH WPAN)、WI-FI网络,WI-MAX网络,蜂窝电话网络(诸如,例如,全球移动通信系统(GSM)网络)、或其他合适的无线网络、或它们中的两个或更多个的组合进行通信。在适当的情况下,计算机系统1400可以包括用于这些网络中的任何网络的任何适当的通信接口1410。在适当的情况下,通信接口1410可以包括一个或多个通信接口1410。尽管本公开描述和示出了特定的通信接口,但本公开考虑了任何合适的通信接口。
在特定实施例中,总线1412包括硬件、软件或计算机系统1400的两个组件彼此耦接。作为示例而非通过限制的方式,总线1412可以包括加速图形端口(AGP)或其它图形总线、增强型工业标准体系结构(EISA)总线、前端总线(FSB)、超传输(HT)互连、工业标准体系结构(ISA)总线、INFINIBAND互连、低引脚计数(LPC)总线、存储器总线、微通道体系结构(MCA)总线、外围组件互连(PCI)总线、PCI-Express(PCIe)总线、串行高级技术附件(SATA)总线、视频电子标准协会本地(VLB)总线或其它合适的总线或它们中的两个或更多个的组合。总线1412在适当的情况下可以包括一个或多个总线1412。尽管本公开描述和示出了特定的总线,但本公开考虑了任何合适的总线或互连。
本文中,计算机可读的非暂时性存储介质或媒介在适当情况下可以包括一个或多个基于半导体的或其它集成电路(IC)(诸如,例如,现场可编程门阵列(FPGA)或专用IC(ASIC))、硬盘驱动器(HDD)、混合硬盘驱动器(HHD)、光盘、光盘驱动器(ODD)、磁光盘、磁光盘驱动器、软盘、软盘驱动器(FDD)、磁带、固态驱动器(SSD)、RAM驱动器、SECURE DIGITAL卡或驱动器、任何其他适当的计算机可读的非暂时性存储介质、或它们中的两个或更多个的适当组合。计算机可读的非暂时性存储介质在适当情况下可以是易失性的、非易失性的或易失性和非易失性的组合。
本文中,“或”是包括性的而非排他性的,除非另有明确指示或上下文中另有指示。因此,本文中,“A或B”意指“A、B或两者”,除非另有明确指示或上下文中另有指示。此外,“和”既是联合的,也是多个的,除非另有明确指示或上下文中另有指示。因此,本文中,“A和B”是指“A和B,共同或个别地”,除非另有明确指示或上下文中另有指示。
本公开的范围包括本领域普通技术人员将理解的对本文描述或示出的示例实施例的所有改变、替换、变化、变更和修改。本公开的范围不限于本文描述或示出的示例实施例。此外,尽管本公开将本文中的各个实施例描述和示出为包括特定组件、元件、特征、功能、操作或步骤,但这些实施例中的任何一个都可以包括本领域普通技术人员将理解的本文中任何地方描述或示出的组件、元件、特征、功能、操作或步骤的任何组合或排列。此外,在所附权利要求中,适于、布置成、能够、配置成、使能、可操作、或操作以执行特定功能的参考的装置或系统或装置或系统的组件,包括该装置、系统、组件,无论其或该特定功能是否被激活、接通或解锁,只要该装置、系统或组件为如此适应、布置、能够、配置、启用、可操作或操作的。另外,尽管本公开将特定实施例描述或示出为提供特定优点,但是特定实施例可以不提供这些优点中的任何一个、提供这些优点中的一些或全部。

Claims (20)

1.一种方法,包括通过计算系统:
确定三维(3D)空间中的第一方位,其中,所述第一方位基于由虚拟现实装置在第一时间生成的第一传感器数据;
通过基于所述第一方位投射射线,以测试与一个或多个物体的相交,来确定在3D空间内定义的所述一个或多个物体的第一可见性;
基于所确定的一个或多个物体的第一可见性生成一个或多个第一像素行;
输出所述一个或多个第一像素行,以供所述虚拟现实装置显示;
确定所述3D空间中的第二方位,其中,所述第二方位基于由所述虚拟现实装置在所述第一时间之后的第二时间生成的第二传感器数据;
通过基于所述第二方位投射射线,以测试与所述一个或多个物体的相交,来确定在所述3D空间内定义的所述一个或多个物体的第二可见性;
基于所确定的一个或多个物体的第二可见性生成一个或多个第二像素行;并且
输出所述一个或多个第二像素行,以供所述虚拟现实装置显示;
其中,所述一个或多个第二像素行与所述一个或多个第一像素行同时显示。
2.根据权利要求1所述的方法,其中,在输出所述一个或多个第一像素行之后,执行所述第二方位的确定。
3.根据权利要求1所述的方法,其中,所述虚拟现实装置的显示器具有多个像素行,其中,所述一个或多个第一像素行和所述一个或多个第二像素行是所述多个像素行的子集。
4.根据权利要求3所述的方法,其中,所述一个或多个第一像素行和所述一个或多个第二像素行具有相等数量的行。
5.根据权利要求4所述的方法,其中,所述相等数量的行由应用程序通过应用程序编程接口(API)指定。
6.根据权利要求3所述的方法,还包括:
使用在所述第一时间之后由所述虚拟现实装置生成的传感器数据,在生成所述多个像素行中的每个其他像素行之后,替换所述一个或多个第一像素行。
7.根据权利要求6所述的方法,其中,在替换所述一个或多个第一像素行之前,所述一个或多个第一像素行保持不变。
8.一种或多种包含软件的计算机可读非暂时性存储介质,所述软件在被执行时能够操作,以促使一个或多个处理器执行操作,所述操作包括:
确定三维(3D)空间中的第一方位,其中,所述第一方位基于由虚拟现实装置在第一时间生成的第一传感器数据;
通过基于所述第一方位投射射线,以测试与一个或多个物体的相交,来确定在3D空间内定义的一个或多个物体的第一可见性;
基于所确定的一个或多个物体的第一可见性生成一个或多个第一像素行;
输出所述一个或多个第一像素行,以供所述虚拟现实装置显示;
确定所述3D空间中的第二方位,其中,所述第二方位基于由所述虚拟现实装置在所述第一时间之后的第二时间生成的第二传感器数据;
通过基于所述第二方位投射射线,以测试与所述一个或多个物体的相交,来确定在所述3D空间内定义的所述一个或多个物体的第二可见性;
基于所确定的一个或多个物体的第二可见性生成一个或多个第二像素行;并且
输出所述一个或多个第二像素行,以供所述虚拟现实装置显示;
其中,所述一个或多个第二像素行与所述一个或多个第一像素行同时显示。
9.根据权利要求8所述的介质,其中,在输出所述一个或多个第一像素行之后,执行所述第二方位的确定。
10.根据权利要求8所述的介质,其中,所述虚拟现实装置的显示器具有多个像素行,其中,所述一个或多个第一像素行和所述一个或多个第二像素行是所述多个像素行的子集。
11.根据权利要求10所述的介质,其中,所述一个或多个第一像素行和所述一个或多个第二像素行具有相等数量的行。
12.根据权利要求11所述的介质,其中,所述相等数量的行由应用程序通过应用程序编程接口(API)指定。
13.根据权利要求10所述的介质,其中,所述软件在被执行时还能够操作,以促使所述一个或多个处理器执行操作,所述操作包括:
使用在所述第一时间之后由所述虚拟现实装置生成的传感器数据,在生成所述多个像素行中的每个其他像素行之后,替换所述一个或多个第一像素行。
14.根据权利要求13所述的介质,其中,在替换所述一个或多个第一像素行之前,所述一个或多个第一像素行保持不变。
15.一种系统,包括:一个或多个处理器和耦接到所述一个或多个处理器的一个或多个计算机可读非暂时性存储介质,所述一个或多个计算机可读非暂时性存储介质包括指令,所述指令在被一个或多个处理器执行时能够操作,以促使所述系统执行操作,所述操作包括:
确定三维(3D)空间中的第一方位,其中,所述第一方位基于由虚拟现实装置在第一时间生成的第一传感器数据;
通过基于所述第一方位投射射线,以测试与一个或多个物体的相交,来确定在3D空间内定义的所述一个或多个物体的第一可见性;
基于所确定的一个或多个物体的第一可见性生成一个或多个第一像素行;
输出所述一个或多个第一像素行,以供所述虚拟现实装置显示;
确定所述3D空间中的第二方位,其中,所述第二方位基于由所述虚拟现实装置在所述第一时间之后的第二时间生成的第二传感器数据;
通过基于所述第二方位投射射线,以测试与所述一个或多个物体的相交,来确定在所述3D空间内定义的所述一个或多个物体的第二可见性;
基于所确定的一个或多个物体的第二可见性生成一个或多个第二像素行;并且
输出所述一个或多个第二像素行,以供所述虚拟现实装置显示;
其中,所述一个或多个第二像素行与所述一个或多个第一像素行同时显示。
16.根据权利要求15所述的系统,其中,在输出所述一个或多个第一像素行之后,执行所述第二方位的确定。
17.根据权利要求15所述的系统,其中,所述虚拟现实装置的显示器具有多个像素行,其中,所述一个或多个第一像素行和所述一个或多个第二像素行是所述多个像素行的子集。
18.根据权利要求17所述的系统,其中,所述一个或多个第一像素行和所述一个或多个第二像素行具有相等数量的行。
19.根据权利要求18所述的系统,其中,所述相等数量的行由应用程序通过应用程序编程接口(API)指定。
20.根据权利要求17所述的系统,其中,当执行所述指令时,所述处理器还能够操作,以执行操作,所述操作包括:
使用在所述第一时间之后由所述虚拟现实装置生成的传感器数据,在生成所述多个像素行中的每个其他像素行之后,替换所述一个或多个第一像素行。
CN201910304598.6A 2018-04-16 2019-04-16 降低渲染延迟的系统和方法 Pending CN110400367A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/954,530 US10553013B2 (en) 2018-04-16 2018-04-16 Systems and methods for reducing rendering latency
US15/954,530 2018-04-16

Publications (1)

Publication Number Publication Date
CN110400367A true CN110400367A (zh) 2019-11-01

Family

ID=68161992

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910304598.6A Pending CN110400367A (zh) 2018-04-16 2019-04-16 降低渲染延迟的系统和方法

Country Status (2)

Country Link
US (2) US10553013B2 (zh)
CN (1) CN110400367A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113052944A (zh) * 2019-12-10 2021-06-29 辉达公司 用于矢量图形的极坐标描边
CN116704101A (zh) * 2022-09-09 2023-09-05 荣耀终端有限公司 一种基于光线追踪渲染的像素填充方法和终端

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9132352B1 (en) 2010-06-24 2015-09-15 Gregory S. Rabin Interactive system and method for rendering an object
US11315327B1 (en) 2018-11-02 2022-04-26 Facebook Technologies, Llc. Beam-racing fallbacks in a display engine
US10791323B2 (en) * 2018-12-18 2020-09-29 Varjo Technologies Oy System and method for processing images for display apparatus
US10853993B2 (en) * 2018-12-18 2020-12-01 Varjo Technologies Oy System and method for producing images for display apparatus
US10762697B1 (en) 2019-02-27 2020-09-01 Verizon Patent And Licensing Inc. Directional occlusion methods and systems for shading a virtual object rendered in a three-dimensional scene
US11107184B2 (en) * 2019-09-17 2021-08-31 Adobe Inc. Virtual object translation
GB2589372B (en) * 2019-11-29 2022-04-13 Sony Interactive Entertainment Inc Image generation system and method
GB2593189B (en) * 2020-03-18 2023-05-17 Sony Interactive Entertainment Inc Image generation system and method
US11282260B2 (en) * 2020-06-09 2022-03-22 Qualcomm Incorporated Bounded volume hierarchy (BVH) tree traversal using spatial division
US11282261B2 (en) * 2020-06-10 2022-03-22 Nvidia Corporation Ray tracing hardware acceleration with alternative world space transforms
US11798220B2 (en) 2020-07-28 2023-10-24 Unity Technologies Sf Path guiding for path-traced rendering

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6111582A (en) * 1996-12-20 2000-08-29 Jenkins; Barry L. System and method of image generation and encoding using primitive reprojection
WO2009044282A2 (en) * 2007-10-04 2009-04-09 Mental Images Gmbh Quasi-monte carlo light transport simulation by efficient ray tracing
US20090167763A1 (en) * 2000-06-19 2009-07-02 Carsten Waechter Quasi-monte carlo light transport simulation by efficient ray tracing

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10672175B2 (en) * 2017-04-17 2020-06-02 Intel Corporation Order independent asynchronous compute and streaming for graphics

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6111582A (en) * 1996-12-20 2000-08-29 Jenkins; Barry L. System and method of image generation and encoding using primitive reprojection
US20090167763A1 (en) * 2000-06-19 2009-07-02 Carsten Waechter Quasi-monte carlo light transport simulation by efficient ray tracing
WO2009044282A2 (en) * 2007-10-04 2009-04-09 Mental Images Gmbh Quasi-monte carlo light transport simulation by efficient ray tracing

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113052944A (zh) * 2019-12-10 2021-06-29 辉达公司 用于矢量图形的极坐标描边
CN113052944B (zh) * 2019-12-10 2024-05-17 辉达公司 用于矢量图形的极坐标描边
CN116704101A (zh) * 2022-09-09 2023-09-05 荣耀终端有限公司 一种基于光线追踪渲染的像素填充方法和终端
CN116704101B (zh) * 2022-09-09 2024-04-09 荣耀终端有限公司 一种基于光线追踪渲染的像素填充方法和终端

Also Published As

Publication number Publication date
US20200160587A1 (en) 2020-05-21
US20190318530A1 (en) 2019-10-17
US11069124B2 (en) 2021-07-20
US10553013B2 (en) 2020-02-04

Similar Documents

Publication Publication Date Title
CN110400367A (zh) 降低渲染延迟的系统和方法
CN110390714A (zh) 用于渲染凹形效果的系统、方法和非暂时性存储介质
CN110390708A (zh) 渲染光学失真效果的系统与方法及非易失性存储介质
CN110390711A (zh) 基于分层光线投影的计算机图形
CN106204712B (zh) 分段线性不规则光栅化
US7940265B2 (en) Multiple spacial indexes for dynamic scene management in graphics rendering
US8243081B2 (en) Methods and systems for partitioning a spatial index
US7864174B2 (en) Methods and systems for reducing the number of rays passed between processing elements in a distributed ray tracing system
US8570322B2 (en) Method, system, and computer program product for efficient ray tracing of micropolygon geometry
US20080122838A1 (en) Methods and Systems for Referencing a Primitive Located in a Spatial Index and in a Scene Index
US20080024489A1 (en) Cache Utilization Optimized Ray Traversal Algorithm with Minimized Memory Bandwidth Requirements
US7688320B2 (en) Methods and systems for texture prefetching based on a most recently hit primitive algorithm
US10924727B2 (en) High-performance light field display simulator
US11138800B1 (en) Optimizations to reduce multi-channel ray casting for color sampling
WO2004114224A1 (ja) 仮想視点画像生成方法及び3次元画像表示方法並びに装置
Hou et al. Micropolygon ray tracing with defocus and motion blur
CN1890694A (zh) 计算机图形处理器及在三维图像显示屏上呈现三维场景的方法
US20230230311A1 (en) Rendering Method and Apparatus, and Device
CN113450445A (zh) 临时密实渲染的自适应像素采样顺序
Hunt et al. Hierarchical visibility for virtual reality
US8259131B2 (en) Adaptive sub-sampling for reduction in issued rays
US20040008204A1 (en) Switching sample buffer context in response to sample requests for real-time sample filtering and video generation
KR101661166B1 (ko) 3차원 영상 시스템에서 광선 추적 방법 및 장치
US20050162435A1 (en) Image rendering with multi-level Z-buffers
Hofmann et al. Hierarchical multi-layer screen-space ray tracing

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
CB02 Change of applicant information
CB02 Change of applicant information

Address after: California, USA

Applicant after: Yuan Platform Technology Co.,Ltd.

Address before: California, USA

Applicant before: Facebook Technologies, LLC