CN110390708A - 渲染光学失真效果的系统与方法及非易失性存储介质 - Google Patents

渲染光学失真效果的系统与方法及非易失性存储介质 Download PDF

Info

Publication number
CN110390708A
CN110390708A CN201910299818.0A CN201910299818A CN110390708A CN 110390708 A CN110390708 A CN 110390708A CN 201910299818 A CN201910299818 A CN 201910299818A CN 110390708 A CN110390708 A CN 110390708A
Authority
CN
China
Prior art keywords
coordinate
focal plane
light
pixel
specific embodiment
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
CN201910299818.0A
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 CN110390708A publication Critical patent/CN110390708A/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
    • G02OPTICS
    • G02BOPTICAL ELEMENTS, SYSTEMS OR APPARATUS
    • G02B27/00Optical systems or apparatus not provided for by any of the groups G02B1/00 - G02B26/00, G02B30/00
    • G02B27/01Head-up displays
    • G02B27/017Head mounted
    • GPHYSICS
    • G02OPTICS
    • G02BOPTICAL ELEMENTS, SYSTEMS OR APPARATUS
    • G02B3/00Simple or compound lenses
    • G02B3/12Fluid-filled or evacuated lenses
    • G02B3/14Fluid-filled or evacuated lenses of variable focal length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/10Geometric effects
    • G06T15/20Perspective computation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/503Blending, e.g. for anti-aliasing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/60Shadow generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics
    • G06T19/006Mixed reality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T19/00Manipulating 3D models or images for computer graphics
    • G06T19/20Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/10Image acquisition modality
    • G06T2207/10141Special mode during image acquisition
    • G06T2207/10148Varying focus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2219/00Indexing scheme for manipulating 3D models or images for computer graphics
    • G06T2219/20Indexing scheme for editing of 3D models
    • G06T2219/2021Shape modification

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Optics & Photonics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Geometry (AREA)
  • Architecture (AREA)
  • Image Generation (AREA)

Abstract

本公开涉及渲染光学失真效果的系统与方法及非易失性存储介质。在一个实施方式中,计算系统可以接收可由应用程序指定的焦面图。系统可以基于由虚拟现实设备生成的传感器数据确定3D空间中的方位。系统可以基于所确定的方位生成3D空间中的第一坐标并且使用第一坐标和焦面图生成第二坐标。第一坐标中的每个坐标与第二坐标中的一个坐标相关联。对于第一坐标中的每个坐标,系统可以通过从第一坐标投射光线穿过相关联的第二坐标来测试与限定在3D空间内的一个或多个对象的交集从而确定该一个或多个对象的可见性。系统可以基于所确定的一个或多个对象的可见性生成一个或多个对象的图像。

Description

渲染光学失真效果的系统与方法及非易失性存储介质
技术领域
本公开整体涉及计算机图形学,并且更具体地,涉及用于生成诸如虚拟现实和增强现实等人工现实的图形渲染方法论和最优化。
背景技术
通常,计算机图形是使用计算机创建的视觉情景。三维(3D)计算机图形从具体视点为用户提供3D对象的视野。可以在使用基本几何体的3D建模空间中定义3D情景中的每个对象(例如,茶壶、房屋、人等)。例如,可以使用圆柱形管及顶部和底部圆形盖对圆柱形对象进行建模。圆柱形管和圆形盖各自可以表示为更小多边形(例如,三角形)的网络或网格。进一步又可以基于其相应顶点在3D建模空间中的坐标来存储各个多边形。
尽管可以在三个维度上对计算机图形中的3D对象进行建模,然而,其通常通过诸如计算机或电视监视器等矩形二维(2D)显示器被呈现给观众。由于人类的视觉感知系统的局限性,人类期望在任意时刻从大致相同的角度感知世界。换言之,人类期望3D对象的特定部分是可见的并且其他部分隐藏于视野之外。由此,对于每个3D情景,计算机图形系统可以仅需要渲染对用户为可见的情景的部分、而非其余部分。这允许系统大幅地减少所需计算量。
光线投射是确定3D情景中的对象可见性时使用的一种技术。通常,通过虚拟矩形屏幕中的每个像素将虚拟光线从虚拟针孔相机均匀地投射至3D世界中(例如,基于光线入射的3D对象的部分)来确定什么是可见的。然而,对于具有有限视野的常规矩形显示技术(例如,计算机监视器和电话显示器)而言,当从虚拟针孔相机计算主要可见性时,这假设了均匀的光线分布是合理的。然而,对于更为准确地代表真实光线传感器的非针孔虚拟相机而言,这种假设并不成立。而且,当前VR视觉光学(例如,被集成在头戴显示器内)提供一种弯曲的、非均匀的视觉表面、而非常规的矩形显示器。因此,在人工现实中,基于上述所述假设设计并且优化的常规渲染技术的计算效率低、产生次优渲染、并且缺少渲染情景的灵活性。
发明内容
此处描述的具体实施方式涉及一种提供非常适合于渲染诸如虚拟现实和增强现实等人工现实的实时性能和特征集的主要可见性算法。当解析可见性问题时,对于各个像素,并非均匀地投射各个光线,具体实施方式使用包围体层次和二级凹形(foveated)剔除/入口点搜索算法来加速并且优化连贯的主要可见性光线的遍历。具体实施方式利用自适应的多重采样抗锯齿进行光线投射,以明显降低存储带宽。
具体实施方式进一步提供能够使得渲染引擎在保持实时性能的同时自然地生成各个图形特征的灵活性和渲染优化。在人工现实的情况下,尤其需要该等图形特征:诸如透镜畸变、子像素渲染、非常宽的视野、孔隙与随机景深模糊等。实施方式提供对动画和基于物理的阴影和灯光的支持,以改善所渲染情景的真实感。相反,通常,以硬件实现针对常规显示器(例如,具有均匀像素网格的矩形监视器或电视机)设计的常规光栅化管线,并且常规光栅化管线需要多次通过和/或后期处理才接近这些特征。而且,主要聚焦于蒙特卡洛路径跟踪的常规光线跟踪器不能实现当前VR显示器(例如,要求分辨率为1080x1200x2并且刷新速率为90Hz)的实时性能。因此,此处描述的实施方式具体适合于渲染人工现实并且提供常规光栅化技术的精确、可行替代方案。
本发明的实施方式可以包括人工现实系统或结合人工现实系统实现。人工现实是在呈现给用户之前通过某种方式进行调整的现实形式,可以包括例如虚拟现实(VR)、增强现实(AR)、混合现实(MR)、混杂现实、或其某种组合和/或派生物。人工现实内容可以包括完全生成的内容或与捕获内容(例如,真实世界的照片)结合的生成内容。人工现实内容可以包括视频、音频、触觉反馈、或其某种组合、以及通过单一信道或多个信道呈现的任意内容(诸如,为观众产生三维效果的立体视频等)。此外,在一些实施方式中,人工现实可以与例如创建人工现实的内容时使用和/或人工现实中使用(例如,执行活动)的应用程序、产品、附件、服务、或其某种组合相关联。通过各个平台可以实现提供人工现实内容的人工现实系统,包括连接至主计算机系统的头戴显示器(HMD)、独立HMD、移动设备或计算系统、或能够向一名或多名观众提供人工现实内容的任意其他硬件平台。
此处公开的实施方式仅是实施例,并且本公开的范围并不局限于此。具体实施方式可以包括全部、一些、或不包括上面公开的实施方式中的部件、元件、特征、功能、操作、或步骤。具体地,在面向方法、存储介质、系统、以及计算机程序产品的所附权利要求中公开了根据本发明的实施方式,其中,在一个权利要求类别(例如,方法)中提及的任意特征也可以在另一权利要求类别(例如,系统)中得到保护。仅出于形式原因选定所附权利要求的从属关系和引用关系。然而,也能够要求保护专门引用任意之前权利要求而产生的任意主题(具体地,多个从属关系),因此,无论所附权利要求中选定的从属关系如何,能够公开并且要求保护权利要求与其特征的任意组合。所要求保护的主题不仅包括所附权利要求中阐述的特征的组合、而且还包括权利要求中的特征的任意其他组合,其中,权利要求中提及的各个特征能够与权利要求中的任意其他特征或其他特征的组合进行结合。进一步地,能够在独立权利要求中和/或结合此处描述或描写的任意实施方式或特征或者结合所附权利要求中的任意特征要求保护此处描述或描写的任意实施方式和特征。
附图说明
图1示出了包围体层次树数据结构的实施例。
图2示出了用于定义投射光线/射束的位置的示例性三级层次。
图3示出了与覆盖区(Footprint)相关联的光线和子采样光线的实施例。
图4示出了通过片区投射射束的实施例。
图5示出了通过块(block)投射射束的实施例。
图6A至图6C示出了用于确定可见性的方法的实施例。
图7示出了焦面图的实施例。
图8示出了焦面图和相机参数的实施例。
图9示出了利用VR设备的光学失真自然地生成图像的方法。
图10示出了重要性图的实施例。
图11示出了基于可变的多重采样抗锯齿生成图像的示例性方法。
图12示出了将不使用射束跟踪的图形生成时间线与使用射线跟踪的时间线相比较的实施例。
图13示出了针对使用射束跟踪的VR显示器生成视频帧的示例性方法。
图14示出了示例性的计算机系统。
具体实施方式
计算机图形学中的一个基本问题是确定对象可见性。目前,最为常见使用的两种方案是光线跟踪,即,模拟光的传输并且在诸如电影和计算机辅助设计(CAD)等重视准确性而非速度的行业中占优势。由于光线跟踪的密集性计算需求,传统上不适合于需要实时或近似实时渲染的应用程序。用于确定可见性的另一种方案是z缓冲,即,检查情景中的各个3D对象并且更新缓冲器,对于虚拟矩形屏幕中的每个像素,缓冲器跟踪当前最为靠近的对象。典型地,通过当前图形硬件实现z缓冲并且z缓冲缺少处理从上述所述假设(例如,针孔相机和/或具有均匀像素分布的矩形屏幕)派生的渲染任务的灵活性。此处描述的具体实施方式提供了这样一种可见性算法,即,具有接近z缓冲的性能特性,但是,具有能够针对人工现实而渲染各种各样的虚拟效果的附加灵活性。
为了提供进一步的上下文,很大程度上,由于其对均匀主要可见性问题(例如,对于常规矩形屏幕)的适用性及低廉、专用硬件实现方式的可用性和扩散化,通常使用常规的z缓冲解析实时的主要可见性问题。z缓冲算法使用z缓冲器、为各个采样/像素存储当前最接近的入射深度的均匀网格数据结构。Z缓冲的大多数实现方式假设了采样/像素布置在均匀的网格中,以与数据结构的组织精确匹配。网格结构的均匀性质(结合了被映射至这个网格中的采样的均匀分布)提供了用于确定哪些采样与多边形/三角形重叠的非常有效算法。将对象的空间广度映射至网格中的过程称为光栅化(rasterization)。
z缓冲器算法中使用的网格的均匀性质导致高效率、但使得算法不灵活。对于诸如TV、监视器、或蜂窝电话等几乎所有的直观式显示器技术,当计算虚拟针孔相机的主要可见性时,所假设的均匀采样分布是合理的。然而,对于非针孔虚拟相机、诸如阴影等次生效应,并且特别对于现代的虚拟现实设备,由于头戴显示器的观看用光学器件器件所施加的失真,这些假设并不成立,并且目前,应根据实际情况做出这些假设。
诸如不规则的z缓冲器等算法仍使用均匀的网格,但是,允许各个网格单元内的采样的数目和布置是灵活的。不规则的z缓冲遭遇与均匀数据结构中的非均匀采样分布之间的冲突有关的负载平衡问题,使得其比传统的z缓冲明显地更为昂贵。进一步地,具有均匀的数据结构意味着算法仅支持有限的视野并且并不支持景深渲染。
与z缓冲相反,光线跟踪算法采用更为一般的方案,以通过支持任意的点到点或光线查询而确定可见性。对基于物理的光传输进行有效地建模并且自然地构造效应的能力导致其成为对电影情景进行渲染的主要渲染算法。然而,光线跟踪提供的灵活性在执行时产生显著的成本,从而阻碍其盛行于诸如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中所示,可以由彼此相互垂直的两个矢量250(也被称之为差值)及光线方向限定覆盖区210。可以由这些矢量250的长度限定覆盖区210的广度。在具体实施方式中,通过使用由光线310方向和覆盖区矢量250限定的坐标框架来首先在例如覆盖区210的单位正方形中转换低差异点集,可以在该覆盖区210内程序式地生成子采样光线(或子光线)。如中空点示出的,以子采样位置260a-e表示所转换的点的实施例。然后,可以将光线方向添加至所转换的点(例如,子采样位置260a-e),并且可以将子采样光线360a-e限定成分别通过原光线310的原点301及新转换的点260a-e投射的光线。例如,可以使用子采样光线,以多重采样抗锯齿。在具体实施方式中,对于景深光线,还可以使用单独的低差异点集选定光线原点(而不沿着光线方向平移)。
在具体实施方式中,可以对每个三角形中的每个像素执行一次描影(shading),如在规则性多重采样抗锯齿(MSAA)中,这节省大量的描影计算。在具体实施方式中,可以对每个采样执行描影,以获得全部的超级采样抗锯齿(SSAA)。因为程序式地生成、而非预定义(并且存储在存储器中)子光线,所以当与以更高的分辨率自然地进行渲染相比较时,通过抗锯齿因数可以减少光线存储器带宽。
在具体实施方式中,将主光线(例如,310)分配至用于抗锯齿的覆盖区(例如,210)并且然后集合到二级层次和三级层次中,且四侧的包围射束具有不同的粒度。可以将更细的二级层次中的每个射束位置称之为片区(例如,在图2中,将片区的实施例加标签为220)。每个片区220可以包括预定数目的像素覆盖区210。尽管图2中所示的实施例示出了具有2x2的像素覆盖区210的各个片区220,然而,还可以实现像素覆盖区210的任意其他布置(例如,每个片区220可以包括16x8或128的像素覆盖区210)。因此,可以将片区220集合到粗糙的块集合230中,即,此处使用的术语指三级层次。每个块230可以包含预定数目的片区220。尽管图2中所示的实施例示出了每个块230包含2x2的片区220,然而,还可以实现片区220的任意其他布置(例如,每个块230可以包括8x8或64个片区)。由此,在每个块230包含8x8的片区220并且每个片区220包含16x8的像素覆盖区210的实施方式中,每个块230可以表示8192个像素覆盖区210。通过使得块230中的像素覆盖区210的数目乘以多重采样速率(例如,每个像素覆盖区210为5个子采样光线),能够计算由块230中的射束流表示的光线数目。由此,如果每个块230表示8192个像素覆盖区210,块230则表示40960个子采样光线。在具体实施方式中,对于具体的硬件,基于粗调选定限定像素与片区之比为128:1并且片区与块之比为64:1,但是,对于其他类型的硬件,其他比例可能更佳。
在具体实施方式中,并非对于所有的可见性测试投射光线,可以通过层次化方式从块和片区中投射射束,以优化可见性计算。图4示出了通过片区220(在示出的实施例中,片区220包含2x2的像素覆盖区210)从原点301(例如,相机或视点)被投射至3D建模空间中的射束420的实施例。在该实施例中,实心射束420与来自片区220的凹形流相似。可以由通过片区220的四个拐角投射的矢量限定射束420的体积。如果对象/三角形与射束420的体积的任意部分相交,则该对象或三角形与射束420相交。相似地,图5示出了通过块230(在示出的实施例中,块230包含2x2的片区,每个片区包含2x2的像素覆盖区210)从原点301被投射至3D建模空间中的射束530的实施例。在该实施例中,实心射束530与来自块230的凹形流相似。可以由通过块230的四个拐角投射的矢量限定射束530的体积。如果对象/三角形与射束530的体积的任意部分相交,则该对象或三角形则与射束530相交。
现将描述关于情景更新和三角形预计算的具体实施方式。在具体实施方式中,在渲染开始之前,可以执行动画(例如,情景中的3D对象模型可以变化)并且BVH被改装。在具体实施方式中,CPU中可能出现骨骼动画,而在下列示例性阶段,在一系列CDUA内核中可以实现线性混合蒙皮与BVH改装,即,(1)变换顶点(执行线性混合蒙皮);(2)明确BVH节点边界;(3)预计算三角形(例如,通过(a)收集顶点、(b)计算边方程(对于Moller-Trumbore光线三角形交集)、以及(c)计算三角形边界并且自动地更新对应的叶包围盒);以及(4)通过内部节点层次从叶节点向上传播边界而改装BVH。在具体实施方式中,在GPU中执行改装之后,可以将BVH复制回至CPU存储器中而进行块和片区遍历阶段。在该点,如果需要,可以计算并且改装块和片区的边界。
图6A至图6C示出了根据具体实施方式确定可见性的方法600的实施例。示出的实施方式执行三级入口点搜索算法,但是,在其他实施方式中(例如,使用包括块集合的第四射束覆盖区、包括第四射束单元的集合的第五射束单元等),也可以实现额外的层级。在具体实施方式中,将三级从概念上划分成块剔除阶段、片区剔除阶段、以及光线采样测试阶段。
图6A示出了块剔除阶段的实施例。在该阶段过程中,计算系统可以通过BVH层次进行遍历并且使用块的射束流(例如,如图5中所示)测试所选择的与BVH中的节点相关联的包围盒的交集。在具体实施方式中,由128x64的像素覆盖区限定该各个射束。在具体实施方式中,射束遍历的实现使用显式堆栈AVX实现方式。因为块遍历是剔除/入口点搜索阶段,而非如传统的光学跟踪器一直遍历至叶,所以块遍历仅遍历至其达到指定的停止标准(例如,当已经发现64个入口点时)。
在具体实施方式中,可以将生成情景的屏幕(例如,3D空间中与用户使用的显示屏幕对应的虚拟屏幕)划分成数目为n的块。对于各个块,系统可以执行三级测试来确定从该块中能看见什么。在具体实施方式中,可以通过从块投射射束而执行可见性测试。为易于参考,此处将从块投射的射束称之为块射束。
在具体实施方式中,方法可以从步骤610开始,其中,可以通过与包围体(BV:bounding volume)(例如,可以是包围盒)相关联的BVH根(例如,图1中所示的节点110)对显式遍历堆栈(例如,跟踪BVH的哪些节点将要进行相交测试时使用的数据结构)进行初始化。可以在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相关联的更小子包围体是否和块射束相交。该过程继续,直至满足终止条件。例如,可以继续遍历,直至遍历堆栈为空。如此,系统可以按照近深顺序(near depth)对累积的入口点(或完全包含的包围体)进行分类并且将其传递至片区剔除阶段中做进一步处理。另一终止条件可以是遍历堆栈的大小与完全包含的包围体的列表的大小之和等于诸如32、64、128等预定值之时。在具体实施方式中,遍历堆栈与列表可以合并、按照近深顺序进行分类、并且传递至片区剔除阶段中。由此,从块剔除阶段传递至片区剔除阶段的入口点不会多于预定的数目。
在具体实施方式中,在遍历过程中,使用分离轴定理确定包围体与块射束之间的分离度。当在切换至片区剔除之前对入口点进行分类时,可以使用沿着射束的主轴的近平面作为关键值。
片区剔除阶段在块剔除阶段结束时开始。在具体实施方式中,使用64个片区剔除阶段(例如,根据具体实施方式,与块中的8x8或64个片区对应)进一步测试在块剔除阶段过程中识别的各个入口点。在具体实施方式中,如同块剔除,可以在显式堆栈AVX遍历中实现片区剔除。然而,并非通过利用BVH中的根节点对遍历堆栈进行初始化而开始,而是可以通过复制相关联的块剔除的输出对遍历堆栈进行初始化。按照这种方式,片区剔除避免了重复在块剔除过程中执行的大量遍历。在具体实施方式中,如同块剔除,射束/盒测试具有相似的潜在结果,但是,可以继续遍历,直至遍历堆栈为空。一旦收集到所有的三角形,则通过CUDA将其复制到GPU进行采样测试。在具体实施方式中,在高深复杂情景中,可以期望收集并且潜在地测试超大数量的三角形,尽管事实上其可能被更近的几何形态挡住。短路片区遍历会需要交错的片区剔除和采样测试,这意味着将片区剔除迁移至CUDA实现方式。
图6B示出了处理来自块剔除阶段的结果的片区剔除阶段的实施例。如之前描述的,块剔除阶段可以通过投射块射束并且测试与包围体的交集而生成入口点列表。在后续的片区剔除阶段过程中,可以使用所得到的入口点作为起始点。通常,片区剔除阶段可以使用被包含在块射束内的片区射束进行相交测试。如之前描述的,由比块覆盖区更小的片区覆盖区限定各个第二射束。
用于处理块剔除阶段的结果的片区剔除阶段可以从步骤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:multi-sample anti-aliasing)和超级采样抗锯齿(SSAA:super-sample anti-aliasing),不同之处在于,在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,以针对与片区相交的三角形而使用来自另一像素/子像素的光线执行相交测试。
一旦全部三角形被处理,则完全解析了片区的可见性,并且对于每个子采样,按子采样的深度和三角形索引缓冲器包含最接近的入射。在具体实施方式中,在该点,可以压缩子采样数据并且将子采样数据发射至“gbuffer”而准备进行描影(阴影化)。在这种情况下,“gbuffer”可以仅由可见性信息构成:成对的三角形索引和子采样掩模,这足以在描影阶段中重新计算重心并且获取顶点属性。“gbuffer”可以被分配得足够大而保持固定数目(例如,32)的项,以应对每个子像素的每个子采样入射不同的三角形并且存储在GPU的全局存储器中的情况。存储器被编址为使得每个像素的第一三角形在存储器中相邻,之后是第二三角形等,因此,事实上,实际仅使用该缓冲器的小的前缀。在具体实施方式中,压缩可以执行下列步骤:(1)按照三角形索引将子采样分类;和(2)对子采样进行迭代,并且发射例如三角形索引和针对各唯一三角形索引的多重采样掩模。一旦“gbuffer”被构建,则采样测试阶段完成并且解析/描影阶段开始。
在采样测试阶段过程中计算可见性之后,系统可以执行描影、累积MSAA或SSAA采样并且计算最终的像素/子像素颜色到缓冲器中,其被呈现为包括被限定在3D空间内的可见对象的渲染化计算机生成情景。在具体实施方式中,从之前阶段的输出中读取各个采样位置并且针对像素中心处的各个“gbuffer”项计算光线交集。因此,使用在相交过程中获得的重心插入的属性可以执行描影,并且描影结果可以按像素累积。一旦全部“gbuffer”项已被按像素处理,则系统可以执行电影式色调映射并且将结果输出至最终的缓冲器以用于显示。在SSAA的情况下,光线可被独立地生成、相交、以及描影,而非按项具有单一的加权描影结果。
在具体实施方式中,解析/描影阶段可以包括下列步骤。例如,系统可以查询采样位置(例如,从之前阶段生成的采样的线性缓冲器)。然后,系统可以计算差值(例如,当为封闭形式时为解析方式,否则为有限差值)。然后,系统可以将光线与差值转换成3D世界空间而准备进行相交。系统可以清空描影结果累积器为0。然后,对于各个“gbuffer”项,系统可以获取三角形数据、对像素中心执行光线-三角形相交、并且计算深度和重心坐标、将重心坐标压制至三角形边界、基于重心坐标插入顶点属性、执行描影/照明、并且累积描影结果。然后,系统可以按照例如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)射束竞速。
此处描述的具体实施方式基于下列特征支持上述使用情况,下列特征可被实现作为对图形管线的可见性确定部分的增强。例如,为了支持对不同子像素布置的光学失真渲染,系统可以允许应用程序使用渲染引擎以指定并非均匀的网格采样图案并且对非均匀的网格采样图案进行渲染并且使用独立的颜色通道采样。为了支持变化的多重采样/描影,系统可以允许应用程序指定按像素/片区/块的“重要性”测量。为了支持景深,系统可以允许应用程序指定非均匀的网格采样图案和非点原点采样图案并且对非均匀的网格采样图案和非点原点采样图案进行渲染。将进一步详细描述这些特征中的每个特征以及射束竞速。
在高级别处,当需要任意类型的透镜失真时,可以在经由主分量分析来计算包围射束之前,对光线应用失真(例如,确定光线方向)。当启用子像素渲染时,可以考虑红色、绿色、以及蓝色通道使用单独网格,并且单独进行片区化和块化。当存在景深时,射束可被扩展以容纳光线原点的分布。当使用凹形光线分布时,可以使用自上至下划分算法生成光线束,以构建包含不多于n个像素(例如,128)的片区和包含不多于m个片区(例如64)的块。系统可以支持被部分占有的片区和块。对于大多数使用情况,在时间开始时,可以基于系统的透镜参数一次性计算这些边界。然而,在帧之间参数变化的情况下,诸如凹形渲染过程中的关注点等,可以逐帧进行重新计算。包围射束可以包围每个像素的整个覆盖区、而非仅仅其中心,以支持MSAA。
具体实施方式能够使图形系统支持直接的光学失真渲染和子像素渲染。头戴显示器与传统显示器之间的主要差异之一在于使用了观看用光学器件。除了允许用户聚焦于显示器之外,观看用光学器件还对所观看的显示器添加了各种像差。特别地,头戴显示器产生具有色彩依赖性的枕形失真,导致颜色分离和非均匀的像素间隔。这导致用户实际上观看三种不同的显示器,每种颜色(例如,红色、绿色、以及蓝色)一种显示器,且具有三种不同的失真函数。传统地,在后期处理图像失真阶段过程中,可以对这些伪像进行校正。例如,常规的渲染系统不支持直接的失真渲染,将产生常规的矩形图像。为了经由头戴显示器适当地观看图像,后期处理阶段采用矩形图像并且针对头戴式观看用光学器件建立扭曲图像。常规的多阶段过程不仅效率低,合成效果也是次优的。
此处描述的具体实施方式能够使得渲染器接受/接收透镜参数信息(例如,透镜孔径、曲率等)并且使用该信息产生被固有地扭曲的图像,而不需要后期处理。直接子像素渲染的优点包括清晰度的增加。通过考虑子像素的空间布局,能够更为准确地限定每个子像素、而非同时限定整个像素的亮度。此外,直接子像素渲染避免了对大的预失真渲染目标的需求。例如,特定的常规VR设备具有3024x1680的眼睛-缓冲器分辨率,或1.96倍于2160x1200像素的输出显示器分辨率。给定呈现给显示器的图像被通过桶形畸变掩模来裁剪,则实际上仅呈现约85%的2160x1200像素。因为眼睛缓冲器的这些大保护带或过度渲染,所以需要进行渲染的总像素少于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可以限定分别与其相应的像素(或子像素)的代表性点711、712、以及713对应的3D空间中的具体点751、752、以及753。如之前描述的,诸如点751等的各个点可以概念性地表示从对应点711观看时将成为焦点的空间中的点。在光线投射/跟踪过程中,如由焦面图750所指定地,可以分别从点711、712以及713投射光线721、722以及723穿过点751、752以及753。可以使用光线721、722以及723确定对象可见性。例如,从点712、而非点711和713可见图7中的对象740。在具体实施方式中,同样可以将与各个像素相关联的子采样光线映射至焦面图750上。例如,除点711之外,可以将额外的子采样位置也与相同的像素覆盖区相关联。可以在焦面图750上限定子采样位置的投射点。例如,可以将子采样位置的投射点限定在限定了点751的同一网格内。在可见性测试过程中,可以通过从子采样位置穿过焦面图750上的子采样位置的对应投射点投射子采样光线来测试对象交集。
焦面图750为应用程序/用户提供限定任意需要的光线方向、以生成任意期望的所得效果的灵活性。例如,如果应用程序希望模拟光学失真,则可以限定近似于由光学器件引起的期望失真的焦面图750。与光如何通过光学器件发生弯曲相似,基于焦面图750,可以在任意方向上投射各个光线(而非通过常规的网格均匀地投射)。
还可以使用焦面图支持宽视野(FoV)渲染。头戴显示器与传统显示器之间的一个明显差异在于,头戴显示器可以支持更宽的视野。尽管典型的桌面型显示器使用约30°的观看者FoV,然而,当前VR头戴式装置的起始点为约90°并且能够高至210°。因为常规的z缓冲器算法中假设了均匀的采样网格,所以对图像进行渲染时所需的采样数目高至FoV的半角的正切(假设固定的最小角度分辨率)。这导致朝向180°FoV时的效率的陡然丢失。例如,140°至160°之间的差异几乎是所渲染像素的数目的4倍。为了缓解这种低效,已经研究了对多个窄的FoV图像进行渲染并且将其缝合在一起的方案。尽管这提高了z缓冲器算法的效率,然而,产生了重复处理各个额外视图的几何形态的成本以及增加了潜在明显的接缝缝合伪像。为了解决这些缺点,此处描述的实施方式采用光线投射器以支持随意的光线分布,以支持宽的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可以限定与屏幕/传感器810上的具体点对应的3D空间中的具体点。例如,根据焦面图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限定地,系统可以分别从点831、832以及833投射光线821、822以及823穿过点855。在示出的实施例中,光线821错失对象840,光线822几乎错失对象840,并且823与对象840相交。因为光线的相交点(或缺少相交点)充分不同,所以所得到的由点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应用程序又可以基于通过虚拟现实设备生成的传感器数据。例如,头戴式装置可以包括跟踪用户的实时移动并且输出表示或描述移动的传感器数据的陀螺仪或惯性测量单元。VR应用程序可以使用由这样的运动跟踪传感器提供的传感器数据来确定用户的当前方位并且向渲染引擎提供该方位,以定向/重新定向3D空间中的虚拟相机。
在步骤930,系统可以基于所确定的方位生成3D空间中的多个第一坐标。例如,多个第一坐标可以表示虚拟相机中的图像传感器或对应虚拟屏幕上的像素。在具体实施方式中,可以使用一个或多个变换矩阵或其他变换算法来定位和定向3D空间中的虚拟图像传感器/屏幕。可以由3D空间中的坐标表示渲染系统将要对其进行采样的虚拟图像传感器/屏幕上的每个点。
在步骤940,系统可以使用多个第一坐标和焦面图生成3D空间中的多个第二坐标。例如,第二坐标可以是表示对象将表现为被聚焦时的位置的3D空间中的点(例如,诸如点751等的由图7中的焦面图750限定的点)。可以将多个第一坐标中的每个坐标与多个第二坐标中的一个坐标相关联。例如,如图7中所示,根据焦面图750,点711(由坐标限定)映射至点751或与点751相关联。
在具体实施方式中,系统可以通过使用焦面图执行查询操作而生成第二坐标。例如,对于第一坐标中的每个坐标(例如,每个相机传感器/像素),系统可以查询焦面图中的对应网格来识别焦面图中被映射至第一坐标的坐标。在具体实施方式中,可以将焦面图中的坐标限定在与生成情景时的3D世界空间不同的空间中。由此,在具体实施方式中,系统可以使用一个或多个变换矩阵或算法将焦面图中的坐标变换至3D世界空间,以生成例如3D世界空间中的点751。
在具体实施方式中,可替代地,系统可以程序式地生成第二坐标。例如,在具体实施方式中,可以通过算法指定焦面图。因此,系统可以通过根据算法处理多个第一坐标而生成多个第二坐标。例如,可以从算术上限定算法,从而,给定输入坐标(例如,诸如图7中的点711等的虚拟图像传感器上的点的坐标),算法将输出对应的坐标。在具体实施方式中,输出坐标可以与限定输入坐标的空间在同一空间内。例如,算法的具体实施方式可以被配置为接收被限定在非世界空间中的输入坐标。由此,算法的输出可以是焦点与非世界空间中的输入坐标的相对位置。如此,则可以基于虚拟相机的当前方位将系统变(例如,经由变换矩阵)换成3D世界空间。在其他实施方式中,算法可以采用被限定在3D世界空间中的坐标(例如,图7中的点711的坐标)作为输入并且输出3D世界空间中的坐标(例如,图7中的点751的坐标)。在这种情况下,不需要后续的变换。
在步骤950,对于多个第一坐标中的每个坐标,系统可以通过从第一坐标投射光线穿过相关联的第二坐标来测试与一个或多个对象的交集而确定被限定在3D空间内的一个或多个对象的可见性。例如,在图7中,从点711投射的光线721穿过由焦面图限定的相关联的点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是6x6图,可以使用重要性图1010指定具有6x6像素的图像的相对重要性。在具体实施方式中,重要性图1010中的每个网格的相对位置与位于图像中的同一相对位置的像素对应。例如,重要性图1010中的左上方网格可以与图像中的左上方像素的重要性对应。通过该重要性图1010,应用程序可以分别指定每个像素/片区/块的相对重要性。在具体实施方式中,重要性值越接近1表示重要性越高,并且重要性值越接近0表示重要性越低。如此,图10中的重要性图1010表示中心像素是重要的(即,标记1的网格),紧邻的周围像素是中等重要的(即,标记0.6的网格),构成图像的顶部边缘和右边缘的像素的重要性相对较低(即,标记0.4的网格),并且最后,位于底部边缘和左边缘的其余像素的重要性最低(即,标记0的网格)。
在具体实施方式中,可以使用重要性图调整多重采样抗锯齿(MSAA)、描影、以及任意其他的图形任务。图10示出了重要性图1010用于确定每个像素使用多少光线以用于MSAA的实施例,如MSAA图1020中示出的。当图形系统执行MSAA时,其可以使用重要性图1010确定每个像素使用多少子采样光线。在示出的实施例中,因为重要性图1010中的对应网格指示这些像素为高度重要性,所以使用5个子采样光线对中心处的像素进行采样。因为紧邻的周围像素各自具有0.6的重要性值,所以使用较少的子采样光线(即,在示出的实施例中,为3个)进行采样。同样,因为其相应的对应重要性值是0.4,所以对于顶部边缘和右边缘上的像素,使用2个子采样光线。可以仅使用1个光线对底部边缘和左边缘上的其余像素(最不重要)进行采样。因为重要性图指示图像中的特定区域相比于其他区域更不重要,所以系统可以据此确定哪里的计算可被节省。例如,如果每个像素被同等对待,对于36个像素中的每个,常规系统可以使用5个子采样光线,即,使用180个子采样光线。相反,通过表示每个像素的重要程度,系统能够仅利用5x4+3x12+2x11+1x9=87个子采样光线执行MSAA。
在具体实施方式中,可替代地,可以使用焦面图默示地限定重要性值。如上所述,焦面图可以限定映射至虚拟图像传感器或屏幕上的对应点的点。对于屏幕上希望更高分辨率或更多细节的区域(例如,注视点处或附近的区域),焦面图上的点的对应限定可以更为密集化或粒度化,这反之可以致使生成更多的光线/子光线。相反,对于需要较低分辨率或较少细节的区域(例如,注视点之外的区域),焦面图上的点的对应限定可以较不密集化或粗糙,这反之可以致使生成较少的光线/子光线。
图11示出了基于变化的多重采样抗锯齿生成图像的示例性方法。在步骤1110,计算系统可以接收应用程序通过应用编程接口(API)指定的重要性图。例如,VR/AR应用程序(例如,游戏)可以向图形API发送包括重要性图的限定的指令。在具体实施方式中,重要性图可以包括与像素(或诸如片区和块等其他图像单元)或其相应的光线覆盖区对应的重要性值。在具体实施方式中,可以将重要性图存储在诸如图10中所示的实施例等网格数据结构中。在具体实施方式中,可替代地,可以例如基于像素/覆盖区位置来输出重要性值的算法或数学公式等程序式地限定重要性图。例如,重要性图可以程序式地限定中心最为重要,并且远离中心的像素,重要性级别可以逐渐降低。在具体实施方式中,还可以基于焦面图的密度指定什么是“重要的”。例如,具有较为密集网格的焦面图的区域(与通过该区域投射较为密集的光线对应)可以默示地表示该区域较为重要。
在步骤1120,系统可以确定三维(3D)空间中的方位,即,可以表示虚拟相机或观看者在3D空间中的方位。在具体实施方式,可以通过VR应用程序指定方位,这又可以基于通过虚拟现实设备生成的传感器数据。例如,头戴式设备可以包括跟踪用户的实时移动并且输出表示或描述移动的传感器数据的陀螺仪或惯性测量单元。VR应用程序可以使用由这样的运动跟踪传感器提供的传感器数据确定用户的当前方位并且向渲染引擎提供该方位,以定向/重新定向3D空间中的虚拟相机。
在步骤1130,系统可以基于所确定的方位在3D空间中生成多个光线覆盖区。例如,多个光线覆盖区可以分别表示虚拟屏幕(或对应图像传感器阵列)上的像素。在具体实施方式中,可以通过中心坐标及至少一个差值限定各个光线覆盖区。例如,如之前描述的,可以通过由矢量表示的垂直的差值限定正方形或矩形覆盖区。在具体实施方式中,可以基于虚拟相机的方位使用一个或多个变换矩阵或其他变换算法定位并且定向3D空间中的光线覆盖区。
在步骤1140,对于每个光线覆盖区,系统可以识别对应数目的子采样,以生成用于光线覆盖。在具体实施方式中,可以基于根据重要性图限定的重要性值来确定要生成的子采样的数目(例如,对于高的重要性值,生成的子采样较多,并且对于低的重要性值,生成的子采样较少)。在具体实施方式中,通过查询重要性图可以识别重要性值。例如,基于下列项可以识别光线覆盖区的对应重要性值,即,(1)重要性值在网格数据结构中的相对位置;和(2)光线覆盖区的对应像素在像素阵列/网格中的相对位置。例如,参考图10,可以将重要性图中的左上方重要性值0.4的相对位置识别为网格中的(1,1)。该重要性值可以与位于图像中的(1,1)位置处的像素或其对应的光线覆盖区对应。可替代地,如之前描述的,可以程序式地限定重要性图,以使得其输出给定位置的重要性值。作为又一可替代的方案,通过焦面图内的区域的密度可以默示地限定重要性值(例如,对于较为密集的区域,生成的子采样较多,并且对于较不密集的区域,生成的子采样较少)。因此,重要性图允许不同的光线覆盖区具有不同的重要性值。例如,应用程序可以使用重要性图来限定诸如图像的中心像素等的某些像素(或其对应的光线覆盖区)比诸如图像的边缘上的像素等的其他像素更为重要。
在步骤1150,系统可以基于对应的重要性值在各个光线覆盖区中生成一个或多个坐标(无论是通过重要性图进行明确限定、程序式地限定、或是通过焦面图进行默示限定)。坐标可以是光线覆盖区内的子采样位置。在具体实施方式中,要使用的坐标的数目可以是重要性值的函数。例如,如果每个光线覆盖区能使用的子采样光线的最大值是5并且重要性值的范围为0至1,则对于0.8至1的重要性值,可以使用5个子采样光线,对于0.6至0.8的重要性值,可以使用4个子采样光线,对于0.4至0.6的重要性值,可以使用3个子采样光线,对于0.2至0.4的重要性值,可以使用2个子采样光线,并且对于低于0.2的重要性值,可以使用1个子采样光线。由此,如果光线覆盖区具有重要性值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,如果用户站立,系统则可以基于用户的上升视角开始对情景进行渲染。然而,至时间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执行描影和光线投射。在示出的实施例中,在时间t1,线1至10就绪并且显示给用户。如时间线1220所示,因为系统的任务仅是生成10条线、而非全部40条线,所以生成线1至10所需的持续时间(例如,t1至t0)明显短于生成整个图像所需的持续时间(例如,t4至t0)。由此,在时间t1,将向用户呈现使用来自t0的最新传感器信息生成的线1至10,即,比由时间线1220示出的情景更接近当前。在具体实施方式中,可以继续显示线1至10,直至生成视频帧中的其余线,并且重复该处理,以基于虚拟相机的更新方位/位置生成更新的线1至10。
在具体实施方式中,在系统生成线1至10之后,系统可以继续生成线11至20,如时间线1241所示。处理可以在时间t1开始,在该时间,系统可以基于在该时间获得的最新传感器数据执行可见性测试。系统可以再次进入描影和光线投射的处理,并且然后,在时间t2,输出线11至20。由此,在时间t2,向用户呈现基于来自时间t1的感测数据而生成的线11至20。然后,系统可以重复该处理,从时间t2开始并且在时间t3结束,以生成线21至30,然后,从时间t3开始并且在时间t4结束,生成线31至40。由此,与由时间线1220呈现的情景相比较,在时间t4,向用户呈现包括更多当前信息(例如,近至时间t3)的视频帧,其中,在时间t4,向用户呈现基于t0数据生成的帧。
在具体实施方式中,渲染系统可以进一步预测用户的头部位置/方位,以输出与用户的期望相匹配的情景。例如,如果用户在转向过程中,系统则可以基于预测的相机位置/方位预测用户在下一帧中将继续转向并且开始对情景进行渲染。如果延迟是11ms,系统将不得不更为提前预测,从而更为困难并且更可能出错。如果延迟明显降低(例如,至1ms),系统将仅需要提前预测1ms。这使得预测任务更为容易并且更不易于出错。
图13示出了使用射束跟踪生成VR显示器的视频帧的示例性方法1300。方法可以从步骤1310开始,其中,计算系统可以在例如时间t0获得通过虚拟现实(VR)设备生成的传感器数据。例如,VR设备可以包括头戴显示器和诸如惯性测量单元、陀螺仪、加速计等的一个或多个运动传感器。在步骤1320,系统可以使用来自t0的传感器数据确定三维(3D)空间中的第一方位。例如,基于来自陀螺仪的旋转数据和用户在3D空间中的最新已知方位,系统可以计算用户的当前方位。在具体实施方式中,通过在3D空间中定向/定位虚拟相机,可以在3D空间中表示用户的方位。
在步骤1330,系统可以通过基于所确定的方位投射光线来测试与一个或多个对象的交集而确定被限定在3D空间中的一个或多个对象的可见性。例如,基于虚拟相机在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结束时,同时显示1至10行与11至20行。
可以重复图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可以在不同时间或不同位置执行此处描述或示出的一种或多种方法中的一个或多个步骤,如适用。
在具体实施方式中,计算机系统1400包括处理器1402、内存1404、存储器1406、输入/输出(I/O)接口1408、通信接口1410、以及总线1412。尽管本公开描述并且示出了具有具体布置中的具体数目的具体部件的具体计算机系统。
在具体实施方式中,处理器1402包括用于运行诸如构成计算机程序的指令的硬件。作为实施例并且不受限制,为了运行指令,处理器1402可以从内部寄存器、内部缓存、内存1404、或存储器1406中检索(或获取)指令;对指令进行解码和运行;然后,将一个或多个结果写入内部寄存器、内部缓存、内存1404、或存储器1406中。在具体实施方式中,处理器1402可以包括数据、指令、或地址的一个或多个内部缓存。本公开设想了包括任意合适数目的任意合适的内部缓存的处理器1402,如适用。作为实施例并且不受限制,处理器1402可以包括一个或多个指令缓存、一个或多个数据缓存、以及一个或多个转换旁置缓冲器(TLB)。指令缓存中的指令可以是内存1404或存储器1406中的指令副本,并且指令缓存可以加速处理器1402对这些指令的检索。数据缓存中的数据可以是内存1404或存储器1406中关于操作在处理器1402中运行的指令的数据副本;可以是关于在处理器1402上运行的后续指令进行访问或写入内存1404或存储器1406中的、在处理器1402上运行的之前指令的结果;或可以是其他合适的数据。数据缓存可以加速处理器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可以包括一个或多个存储器总线。在具体实施方式中,一个或多个存储器管理单元(MMU)寄存在处理器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(WNIC)通信的网络接口控制器(NIC)或网络适配器、或者用于与诸如WI-FI网络等无线网络通信的无线适配器。本公开设想了任意合适的网络和任意合适的通信接口1410。作为实施例并且不受限制,计算机系统1400可以与自组网络、个人局域网(PAN)、局域网(LAN)、广域网(WAN)、城域网(MAN)、或者互联网的一个或多个部分、或其中两种或更多种的组合通信。一个或多个这些网络中的一个或多个部分可以是有线或无线的。作为实施例,计算机系统1400可以与无线PAN(WPAN)(诸如,例如,蓝牙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)、磁光盘、磁光驱动、软盘、软盘驱动(ODD)、磁光盘、磁光驱动、软盘、软盘驱动(FDD)、磁带、固态驱动(SSD)、RAM驱动、安全数字卡或驱动、任意其他合适的计算机可读非易失性储存介质、或其中两种或更多种的任意合适组合,如适用。计算机可读非易失性储存介质可以是易失性、非易失性、或易失性和非易失性的组合,如适用。
此处,“或”是包含、而非排他,除非另有明确指示或上下文另有指示。因此,此处,“A或B”指“A、B、或A和B”,除非另有明确指示或上下文另有指示。而且,“和”指连带,除非另有明确指示或上下文另有指示。因此,此处,“A和B”指“连带A和B”,除非另有明确指示或上下文另有指示。
本公开的范围涵盖了本领域普通技术人员所理解的、此处描述或示出的示例性实施方式的所有变更、替换、变形、更改、以及改造。本公开的范围并不局限于此处描述或示出的示例性实施方式。而且,尽管此处本公开将相应的实施方式描述并且示出为包括具体的部件、元件、特征、功能、操作、或步骤,然而,任意这些实施方式可以包括本领域普通技术人员所理解的此处任意地方描述或示出的任意部件、元件、特征、功能、操作、或步骤的任意组合或置换。进一步地,无论装置、系统、部件或该具体功能是否被激活、启用、或解锁,只要该装置、系统、或部件被如此适配、布置、有能力、配置、支撑、操作、或实施,所附权利要求中引用被适配、布置、有能力、配置、支持、操作、或实施为执行具体功能的装置或系统、或者装置或系统中的部件则包含该装置、系统、部件。此外,尽管本公开将具体实施方式描述或示出为提供具体优点,然而,具体实施方式可以提供这些优点中的一些、或全部、或不提供这些优点。

Claims (20)

1.一种用于渲染图像的方法,包括:通过计算系统:
接收应用程序通过应用编程接口(API)指定的焦面图;
确定三维(3D)空间中的方位,其中,所述方位基于由虚拟现实设备生成的传感器数据;
基于所确定的方位生成所述三维空间中的多个第一坐标;
使用所述多个第一坐标和所述焦面图生成所述三维空间中的多个第二坐标,其中,所述多个第一坐标中的每个坐标与所述多个第二坐标中的一个坐标相关联;
对于所述多个第一坐标中的每个坐标,通过从所述第一坐标投射光线穿过相关联的第二坐标,来测试与限定在所述三维空间内的一个或多个对象的交集,以确定所述一个或多个对象的可见性;以及
基于所确定的所述一个或多个对象的可见性生成所述一个或多个对象的图像。
2.根据权利要求1所述的方法,其中,所述焦面图是坐标网格,其中,生成所述多个第二坐标包括:
对于所述多个第一坐标中的每个坐标,识别所述焦面图中被映射至所述第一坐标的坐标,并且基于所识别的所述焦面图中的坐标生成所述相关联的第二坐标。
3.根据权利要求1所述的方法,其中,通过算法指定所述焦面图,其中,生成所述多个第二坐标包括:
对于所述多个第一坐标中的每个坐标,通过根据所述算法处理所述第一坐标而生成所述相关联的第二坐标。
4.根据权利要求1所述的方法,其中,所述焦面图与第一原色相关联,其中,生成所述图像还基于与第二原色相关联的第二焦面图和与第三原色相关联的第三焦面图。
5.根据权利要求1所述的方法,其中,从所述多个第一坐标中的一个坐标投射的光线与从所述多个第一坐标中的另一个坐标投射的光线之间的最小角大于90度。
6.根据权利要求1所述的方法,其中,所述多个第二坐标与由所述焦面图限定的曲面拟合。
7.根据权利要求1所述的方法,其中,所述焦面图由Catmull-Rom面限定。
8.一种或多种包含软件的计算机可读非易失性存储介质,所述软件在被运行时能操作为使一个或多个处理器执行以下操作:
接收应用程序通过应用编程接口(API)指定的焦面图;
确定三维(3D)空间中的方位,其中,所述方位基于由虚拟现实设备生成的传感器数据;
基于所确定的方位生成所述三维空间中的多个第一坐标;
使用所述多个第一坐标和所述焦面图生成所述三维空间中的多个第二坐标,其中,所述多个第一坐标中的每个坐标与所述多个第二坐标中的一个坐标相关联;
对于所述多个第一坐标中的每个坐标,通过从所述第一坐标投射光线穿过相关联的第二坐标,来测试与限定在所述三维空间内的一个或多个对象的交集,以确定所述一个或多个对象的可见性;以及
基于所确定的所述一个或多个对象的可见性生成所述一个或多个对象的图像。
9.根据权利要求8所述的介质,其中,所述焦面图是坐标网格,其中,生成所述多个第二坐标包括:
对于所述多个第一坐标中的每个坐标,识别所述焦面图中被映射至所述第一坐标的坐标,并且基于所识别的所述焦面图中的坐标生成所述相关联的第二坐标。
10.根据权利要求8所述的介质,其中,通过算法指定所述焦面图,其中,生成所述多个第二坐标包括:
对于所述多个第一坐标中的每个坐标,通过根据所述算法处理所述第一坐标而生成所述相关联的第二坐标。
11.根据权利要求8所述的介质,其中,所述焦面图与第一原色相关联,其中,生成所述图像还基于与第二原色相关联的第二焦面图和与第三原色相关联的第三焦面图。
12.根据权利要求8所述的介质,其中,从所述多个第一坐标中的一个坐标投射的光线与从所述多个第一坐标中的另一个坐标投射的光线之间的最小角大于90度。
13.根据权利要求8所述的介质,其中,所述多个第二坐标与由所述焦面图限定的曲面拟合。
14.根据权利要求8所述的介质,其中,所述焦面图由Catmull-Rom面限定。
15.一种用于渲染图像的系统,包括:一个或多个处理器,以及耦合至所述一个或多个处理器的一个或多个计算机可读非易失性存储介质,所述一个或多个计算机可读非易失性存储介质包括指令,在通过所述一个或多个处理器运行所述指令时,所述指令能操作为使所述系统执行以下操作:
接收应用程序通过应用编程接口(API)指定的焦面图;
确定三维(3D)空间中的方位,其中,所述方位基于由虚拟现实设备生成的传感器数据;
基于所确定的方位生成所述三维空间中的多个第一坐标;
使用所述多个第一坐标和所述焦面图生成所述三维空间中的多个第二坐标,其中,所述多个第一坐标中的每个坐标与所述多个第二坐标中的一个坐标相关联;
对于所述多个第一坐标中的每个坐标,通过从所述第一坐标投射光线穿过相关联的第二坐标,来测试与限定在所述三维空间内的一个或多个对象的交集,以确定所述一个或多个对象的可见性;以及
基于所确定的所述一个或多个对象的可见性生成所述一个或多个对象的图像。
16.根据权利要求15所述的系统,其中,所述焦面图是坐标网格,其中,生成所述多个第二坐标包括:
对于所述多个第一坐标中的每个坐标,识别所述焦面图中被映射至所述第一坐标的坐标,并且基于所识别的所述焦面图中的坐标生成所述相关联的第二坐标。
17.根据权利要求15所述的系统,其中,通过算法指定所述焦面图,其中,生成所述多个第二坐标包括:
对于所述多个第一坐标中的每个坐标,通过根据所述算法处理所述第一坐标而生成所述相关联的第二坐标。
18.根据权利要求15所述的系统,其中,所述焦面图与第一原色相关联,其中,生成所述图像还基于与第二原色相关联的第二焦面图和与第三原色相关联的第三焦面图。
19.根据权利要求15所述的系统,其中,从所述多个第一坐标中的一个坐标投射的光线与从所述多个第一坐标中的另一个坐标投射的光线之间的最小角大于90度。
20.根据权利要求15所述的系统,其中,所述多个第二坐标与由所述焦面图限定的曲面拟合。
CN201910299818.0A 2018-04-16 2019-04-15 渲染光学失真效果的系统与方法及非易失性存储介质 Pending CN110390708A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/954,506 US10529117B2 (en) 2018-04-16 2018-04-16 Systems and methods for rendering optical distortion effects
US15/954,506 2018-04-16

Publications (1)

Publication Number Publication Date
CN110390708A true CN110390708A (zh) 2019-10-29

Family

ID=68161919

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910299818.0A Pending CN110390708A (zh) 2018-04-16 2019-04-15 渲染光学失真效果的系统与方法及非易失性存储介质

Country Status (2)

Country Link
US (2) US10529117B2 (zh)
CN (1) CN110390708A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112882674A (zh) * 2021-03-04 2021-06-01 腾讯科技(深圳)有限公司 虚拟现实图像数据的显示方法和设备
CN113052944A (zh) * 2019-12-10 2021-06-29 辉达公司 用于矢量图形的极坐标描边

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
US10692271B1 (en) 2018-12-13 2020-06-23 Advanced Micro Devices, Inc. Robust ray-triangle intersection
US11004255B2 (en) * 2019-04-24 2021-05-11 Microsoft Technology Licensing, Llc Efficient rendering of high-density meshes
KR102582407B1 (ko) * 2019-07-28 2023-09-26 구글 엘엘씨 포비에이티드 메시들로 몰입형 비디오 콘텐츠를 렌더링하기 위한 방법들, 시스템들, 및 매체들
US11107195B1 (en) * 2019-08-23 2021-08-31 Lucasfilm Entertainment Company Ltd. Motion blur and depth of field for immersive content production systems
US11029755B2 (en) * 2019-08-30 2021-06-08 Shopify Inc. Using prediction information with light fields
KR20210095766A (ko) * 2020-01-23 2021-08-03 한국전자통신연구원 표시 장치 및 이를 포함하는 증강 현실 장치
US11580616B2 (en) * 2020-04-29 2023-02-14 Lucasfilm Entertainment Company Ltd. Photogrammetric alignment for immersive content production
US11443475B2 (en) * 2020-05-08 2022-09-13 Nvidia Corporation Techniques for ray cone tracing and texture filtering
CN113628315B (zh) * 2020-05-08 2024-02-23 辉达公司 射线锥追踪和纹理过滤的技术
US12112422B2 (en) * 2022-03-21 2024-10-08 Nvidia Corporation Noise-free differentiable ray casting

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150332504A1 (en) * 2012-12-21 2015-11-19 Metaio Gmbh Method for Representing Virtual Information in a Real Environment
US20160148433A1 (en) * 2014-11-16 2016-05-26 Eonite, Inc. Systems and methods for augmented reality preparation, processing, and application
WO2016105521A1 (en) * 2014-12-23 2016-06-30 Meta Company Apparatuses, methods and systems coupling visual accommodation and visual convergence to the same plane at any depth of an object of interest
CN106133796A (zh) * 2014-03-25 2016-11-16 Metaio有限公司 用于在真实环境的视图中表示虚拟对象的方法和系统
US20170214907A1 (en) * 2012-08-04 2017-07-27 Paul Lapstun Head-Mounted Light Field Display

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6256038B1 (en) * 1998-12-10 2001-07-03 The Board Of Trustees Of The Leland Stanford Junior University Parameterized surface fitting technique having independent control of fitting and parameterization
US9866826B2 (en) * 2014-11-25 2018-01-09 Ricoh Company, Ltd. Content-adaptive multi-focal display
US8446433B1 (en) * 2009-06-12 2013-05-21 Lucasfilm Entertainment Company Ltd. Interactive visual distortion processing
US9699438B2 (en) * 2010-07-02 2017-07-04 Disney Enterprises, Inc. 3D graphic insertion for live action stereoscopic video
EP2910022B1 (en) * 2012-10-18 2023-07-12 The Arizona Board Of Regents On Behalf Of The University Of Arizona Stereoscopic displays with addressable focus cues
EP3712680B1 (en) * 2014-01-31 2022-07-13 Magic Leap, Inc. Multi-focal display system and method
US20170115489A1 (en) * 2015-10-26 2017-04-27 Xinda Hu Head mounted display device with multiple segment display and optics
US10204451B2 (en) * 2015-11-30 2019-02-12 Microsoft Technology Licensing, Llc Multi-optical surface optical design
US10097777B2 (en) * 2016-06-03 2018-10-09 Recognition Robotics, Inc. Depth map from multi-focal plane images
US10330936B2 (en) * 2017-01-19 2019-06-25 Facebook Technologies, Llc Focal surface display
GB201709199D0 (en) * 2017-06-09 2017-07-26 Delamont Dean Lindsay IR mixed reality and augmented reality gaming system

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170214907A1 (en) * 2012-08-04 2017-07-27 Paul Lapstun Head-Mounted Light Field Display
US20150332504A1 (en) * 2012-12-21 2015-11-19 Metaio Gmbh Method for Representing Virtual Information in a Real Environment
CN106133796A (zh) * 2014-03-25 2016-11-16 Metaio有限公司 用于在真实环境的视图中表示虚拟对象的方法和系统
US20160148433A1 (en) * 2014-11-16 2016-05-26 Eonite, Inc. Systems and methods for augmented reality preparation, processing, and application
WO2016105521A1 (en) * 2014-12-23 2016-06-30 Meta Company Apparatuses, methods and systems coupling visual accommodation and visual convergence to the same plane at any depth of an object of interest

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 辉达公司 用于矢量图形的极坐标描边
CN112882674A (zh) * 2021-03-04 2021-06-01 腾讯科技(深圳)有限公司 虚拟现实图像数据的显示方法和设备
CN112882674B (zh) * 2021-03-04 2022-11-08 腾讯科技(深圳)有限公司 虚拟现实图像数据的显示方法和设备

Also Published As

Publication number Publication date
US10529117B2 (en) 2020-01-07
US20190318526A1 (en) 2019-10-17
US11138782B2 (en) 2021-10-05
US20200043219A1 (en) 2020-02-06

Similar Documents

Publication Publication Date Title
CN110390708A (zh) 渲染光学失真效果的系统与方法及非易失性存储介质
US11069124B2 (en) Systems and methods for reducing rendering latency
CN110390714A (zh) 用于渲染凹形效果的系统、方法和非暂时性存储介质
US9754405B1 (en) System, method and computer-readable medium for organizing and rendering 3D voxel models in a tree structure
US6268862B1 (en) Three dimensional virtual space generation by fusing images
US8570322B2 (en) Method, system, and computer program product for efficient ray tracing of micropolygon geometry
Hadwiger et al. Interactive volume exploration of petascale microscopy data streams using a visualization-driven virtual memory approach
US7893936B2 (en) Generating efficient spatial indexes for predictably dynamic objects
US7940265B2 (en) Multiple spacial indexes for dynamic scene management in graphics rendering
CN106204712B (zh) 分段线性不规则光栅化
US8139060B2 (en) Ray tracing image processing system
CN110390711A (zh) 基于分层光线投影的计算机图形
DE102019101873A1 (de) Abfragespezifische Verhaltensmodifizierung von Baumtraversierung
US8248402B2 (en) Adaptive ray data reorder for optimized ray temporal locality
US20080024489A1 (en) Cache Utilization Optimized Ray Traversal Algorithm with Minimized Memory Bandwidth Requirements
US20080122838A1 (en) Methods and Systems for Referencing a Primitive Located in a Spatial Index and in a Scene Index
US11373358B2 (en) Ray tracing hardware acceleration for supporting motion blur and moving/deforming geometry
US20080049016A1 (en) Methods and Systems for Partitioning A Spatial Index
US20080088619A1 (en) Branch Prediction for Acceleration Data Structure Traversal
US10924727B2 (en) High-performance light field display simulator
CN101422035A (zh) 光源推定装置、光源推定系统与光源推定方法以及图像高分辨率化装置与图像高分辨率化方法
US11508112B2 (en) Early release of resources in ray tracing hardware
Hou et al. Micropolygon ray tracing with defocus and motion blur
WO2019089121A1 (en) High quality layered depth image texture rasterization
KR101661166B1 (ko) 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
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