CN113272872A - 用于后期渲染处理的显示引擎 - Google Patents
用于后期渲染处理的显示引擎 Download PDFInfo
- Publication number
- CN113272872A CN113272872A CN201980087765.4A CN201980087765A CN113272872A CN 113272872 A CN113272872 A CN 113272872A CN 201980087765 A CN201980087765 A CN 201980087765A CN 113272872 A CN113272872 A CN 113272872A
- Authority
- CN
- China
- Prior art keywords
- display
- pixel
- artificial reality
- ray
- block
- 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
Links
- 238000009877 rendering Methods 0.000 title claims description 141
- 238000012545 processing Methods 0.000 title description 19
- 238000000034 method Methods 0.000 claims abstract description 93
- 238000003860 storage Methods 0.000 claims description 32
- 230000009466 transformation Effects 0.000 claims description 21
- 238000004891 communication Methods 0.000 claims description 20
- 230000033001 locomotion Effects 0.000 claims description 13
- 238000013507 mapping Methods 0.000 claims description 8
- 230000006835 compression Effects 0.000 claims description 4
- 238000007906 compression Methods 0.000 claims description 4
- 230000015654 memory Effects 0.000 description 176
- 239000000872 buffer Substances 0.000 description 82
- 238000012937 correction Methods 0.000 description 71
- 230000000694 effects Effects 0.000 description 51
- 230000008569 process Effects 0.000 description 22
- 238000005266 casting Methods 0.000 description 20
- 230000008859 change Effects 0.000 description 19
- 230000004075 alteration Effects 0.000 description 15
- 239000003086 colorant Substances 0.000 description 14
- 241000023320 Luma <angiosperm> Species 0.000 description 12
- OSWPMRLSEDHDFF-UHFFFAOYSA-N methyl salicylate Chemical compound COC(=O)C1=CC=CC=C1O OSWPMRLSEDHDFF-UHFFFAOYSA-N 0.000 description 12
- 230000003287 optical effect Effects 0.000 description 10
- 238000005070 sampling Methods 0.000 description 10
- 230000004424 eye movement Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 9
- 230000003190 augmentative effect Effects 0.000 description 6
- 230000002452 interceptive effect Effects 0.000 description 6
- 238000004519 manufacturing process Methods 0.000 description 6
- 238000003491 array Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 5
- 210000003128 head Anatomy 0.000 description 5
- 238000012805 post-processing Methods 0.000 description 5
- 238000012952 Resampling Methods 0.000 description 4
- 238000001914 filtration Methods 0.000 description 4
- 230000004886 head movement Effects 0.000 description 4
- 239000000463 material Substances 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 238000005096 rolling process Methods 0.000 description 4
- 208000020764 Sensation disease Diseases 0.000 description 3
- 238000013459 approach Methods 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 239000002131 composite material Substances 0.000 description 3
- 201000003152 motion sickness Diseases 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 239000004744 fabric Substances 0.000 description 2
- 230000020169 heat generation Effects 0.000 description 2
- 230000004807 localization Effects 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 230000001151 other effect Effects 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 230000000246 remedial effect Effects 0.000 description 2
- 230000002441 reversible effect Effects 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 230000014616 translation Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 241001025261 Neoraja caerulea Species 0.000 description 1
- 206010040026 Sensory disturbance Diseases 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 239000011521 glass Substances 0.000 description 1
- 238000005286 illumination Methods 0.000 description 1
- 238000007654 immersion Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000000704 physical effect Effects 0.000 description 1
- 238000013139 quantization Methods 0.000 description 1
- 230000004461 rapid eye movement Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000007670 refining Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000000153 supplemental effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/20—Perspective computation
- G06T15/205—Image-based rendering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/011—Arrangements for interaction with the human body, e.g. for user immersion in virtual reality
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/011—Arrangements for interaction with the human body, e.g. for user immersion in virtual reality
- G06F3/013—Eye tracking input arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/02—Non-photorealistic rendering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/06—Ray-tracing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/20—Perspective computation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/40—Hidden part removal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/006—Mixed reality
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T3/00—Geometric image transformations in the plane of the image
- G06T3/14—Transformations for image registration, e.g. adjusting or mapping for alignment of images
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- Geometry (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Human Computer Interaction (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Image Generation (AREA)
- Controls And Circuits For Display Device (AREA)
- Processing Or Creating Images (AREA)
- Pharmaceuticals Containing Other Organic And Inorganic Compounds (AREA)
Abstract
在一个实施例中,一种方法包括访问人工现实场景的一个或更多个表面。该一个或更多个表面是基于以第一速率渲染的人工现实场景的一个或更多个图像并且基于第一观看位置生成的。该方法包括以高于第一速率的第二速率生成子帧。通过确定第二观看位置、确定从第二观看位置看的人工现实场景的一个或更多个表面的可见性、基于所确定的一个或更多个表面的可见性生成对应于显示器的输出位置的子帧的颜色值、以及提供子帧的颜色值用于显示,生成每个子帧。
Description
技术领域
本公开总体涉及为人工现实场景生成图形。
背景
人工现实涉及以沉浸式方式向用户显示计算机生成的图形。目标是让用户体验计算机生成的图形,就像它们存在于他们眼前的世界中一样。为人工现实渲染计算机生成的图形是一项计算密集型任务,通常需要昂贵的专用硬件。这至少部分是由于要求向用户显示的图形必须是非常高质量的。为了让用户相信图形表示了他们周围的世界(或者图形是他们周围的世界的一部分),图形必须具有令人信服的高质量。纱门效应(screen-dooreffect)即图形或用于投影图形的显示器允许用户看到像素之间的线条,会破坏任何沉浸感。此外,人工现实场景的图形通常是交互式的——当用户在虚拟空间中“移动”时,空间会随着他们或响应于他们而移动。在用户的移动(或移动命令)与显示该移动的效果之间的延迟会给用户带来极大的不适,诸如虚拟现实晕动症(virtual-reality sickness)。因为用户的移动通常是不可预测的,所以预先渲染(pre-render)人工现实场景的大多数组成部分是不切实际的。
特定实施例的概述
描述了一种用于为佩戴头戴式显示器的用户生成人工现实场景的系统和方法。该系统可以包括许多渲染组件,使得至少在头戴式显示器的主渲染组件和显示引擎之间划分渲染责任。主渲染组件可以处理计算量大的图形渲染阶段,诸如图元(primitive)解释和着色(shading),并且预期的输出在典型交互式图形渲染的范围内。主渲染组件可以输出一个或更多个专用对象图元(在本文中也被称为“表面”),或者输出由显示引擎制作成这样的表面的图像,该图像包括一个或更多个对象图元在人工现实场景中的定位和纹理数据。显示引擎可以接收对象图元,更新和细化它们的外观以反映观看者视角的变化和/或适应显示设备的特性,完成(finalize)渲染并准备结果以供显示给用户。
显示引擎可以包括多级(stage),具有多个硬件块来处理对将要显示的图像进行渲染的特定步骤。显示引擎可以包括控制块,该控制块接收对象图元和任何伴随的渲染指令。控制块可以准备一个或更多个共享存储器供显示引擎的其他块使用。控制块可以便于将纹理数据加载到一个或更多个存储器中。控制块可以向显示引擎的其他块提供指令,包括初始化图形渲染流水线(pipeline)的指令。
显示引擎可以包括变换块,该变换块确定对象图元在人工现实场景中的初始可见性。变换块可以从看向人工现实场景的用户的视点执行光线投射(raycasting),以对对象图元进行重新采样。变换块可以扭曲(warp)在光线投射中使用的光线,以近似或校正由显示器引起的一个或更多个效果。这些效果可以包括一个或更多个几何失真,这些失真是由显示器中使用的一个或更多个透镜的翘曲效应(warping effect)引起的。变换块可以确定场景中是否有任何光线与对象图元相交,并将任何的光线与对象图元相交(any ray-object-primitive intersections)的定位信息从视图坐标空间转换到对象图元的纹理坐标空间。
显示引擎可以包括像素块,该像素块高效地确定显示器的一个或更多个像素的像素颜色值。像素块可以从变换块接收相交信息(例如,投射的光线和对象图元之间的相交)。像素块可以引用与对象图元相关联的纹理数据,以对一个或更多个像素颜色值执行双线性插值。
显示引擎可以包括显示块,该显示块接收像素颜色值并最终确定像素颜色值,以供输出到显示器。显示块可以将像素颜色值转换成显示器所要求的格式或对准方式。显示块可以应用一种或更多种亮度校正效果。亮度校正效果可以包括提高图像质量的技术,诸如感知编码或抖动(dithering)。亮度校正效果可以解决和校正显示器中的不规则性,该不规则性是由显示器及其组件的制造方式(或者图像被显示给用户的方式)导致的。
本发明的实施例可以包括人工现实系统或者结合人工现实系统来实现。人工现实是一种在呈现给用户之前已经以某种方式进行了调整的现实形式,其可以包括例如虚拟现实(VR)、增强现实(AR)、混合现实(MR)、混杂现实(hybrid reality)或其某种组合和/或衍生物。人工现实内容可以包括完全生成的内容或与捕获的内容(例如,真实世界的照片)相结合的生成的内容。人工现实内容可以包括视频、音频、触觉反馈或它们的某种组合,并且它们中的任何一个都可以在单个通道或多个通道中被呈现(诸如向观看者产生三维效果的立体视频)。另外,在一些实施例中,人工现实可以与应用、产品、附件、服务或其某种组合相关联,这些应用、产品、附件、服务或其某种组合例如用于在人工现实中创建内容和/或在人工现实中被使用(例如,在人工现实中执行活动)。提供人工现实内容的人工现实系统可以在各种平台上实现,这些平台包括连接到主计算机系统的头戴式显示器(HMD)、独立的HMD、移动设备或计算系统、或者能够向一个或更多个观看者提供人工现实内容的任何其他硬件平台。
本文公开的实施例仅仅是示例,并且本公开的范围不限于它们。特定实施例可以包括本文公开的实施例的组件、元件、特征、功能、操作或步骤中的全部、一些,或不包括这些组件、元件、特征、功能、操作或步骤。根据本发明的实施例在涉及方法、存储介质、系统和计算机程序产品的所附权利要求中被具体公开,其中在一个权利要求类别(例如方法)中提到的任何特征也可以在另一个权利要求类别(例如系统)中被要求保护。在所附权利要求中的从属性或往回引用仅为了形式原因而被选择。然而,也可以要求保护由对任何前面的权利要求的有意往回引用(特别是多项引用)而产生的任何主题,使得权利要求及其特征的任何组合被公开并且可被要求保护,而不考虑在所附权利要求中选择的从属性。可以被要求保护的主题不仅包括如在所附权利要求中阐述的特征的组合,而且还包括在权利要求中的特征的任何其他组合,其中,在权利要求中提到的每个特征可以与在权利要求中的任何其他特征或其他特征的组合相结合。此外,本文描述或描绘的实施例和特征中的任一个可以在单独的权利要求中和/或以与本文描述或描绘的任何实施例或特征的任何组合或以与所附权利要求的任何特征的任何组合被要求保护。
根据本发明的一个方面,提供了一种方法,该方法包括由计算系统:访问人工现实场景的一个或更多个表面,其中该一个或更多个表面是基于以第一速率渲染的人工现实场景的一个或更多个图像并且基于第一观看位置生成的;以高于第一速率的第二速率生成子帧,其中每个子帧通过以下方式生成:确定第二观看位置;确定从第二观看位置看的人工现实场景的一个或更多个表面的可见性;基于所确定的一个或更多个表面的可见性,生成对应于显示器的输出位置的该子帧的颜色值;以及提供该子帧的颜色值用于显示。
确定从第二观看位置看的人工现实场景的一个或更多个表面的可见性优选地包括:基于第二观看位置,生成用于投射到人工现实场景中的光线;对光线应用几何变换,以修改光线进入人工现实场景的相应轨迹;以及基于修改后的光线轨迹,确定光线与人工现实场景中的一个或更多个表面的相交点(point of intersection)。
基于所确定的一个或更多个表面的可见性生成对应于显示器的输出位置的子帧的颜色值,优选地包括:将相交点的坐标映射到相交表面的表面纹理的表面坐标;从相交表面的表面纹理数据中访问在表面坐标处的颜色值,基于相交点对所访问的颜色值进行插值。
在一些实施例中,基于所确定的一个或更多个表面的可见性,生成对应于显示器的输出位置的子帧的颜色值可以包括对颜色值应用一个或更多个图形调整,该图形调整包括:亮度调整;抖动;凹式渲染(foveated rendering);或者感知压缩渲染。
在一些实施例中,光线可以对应于显示系统的像素。
光线可以对应于显示系统的像素的颜色通道。
优选地,一个或更多个表面包括该表面的纹理数据和该表面在人工现实场景中的位置的定位数据。
人工现实场景的一个或更多个图像优选地由不同于计算系统的另一计算系统来呈现。
优选地,计算系统与另一计算系统无线通信。
该计算系统优选地结合到头戴式显示单元中。
计算系统优选地包括用于生成子帧的显示引擎,并且其中显示引擎包括:用于确定从第二观看位置看的一个或更多个表面的可见性的变换块;像素块,用于执行颜色值的插值;和用于对颜色值应用图形调整的显示块。
第二观看位置优选地基于从以下组件接收的数据来确定:眼睛跟踪组件;或者运动跟踪组件。
根据本发明的一个方面,提供了一个或更多个体现软件的计算机可读非暂时性存储介质,该软件在被执行时可操作来:访问人工现实场景的一个或更多个表面,其中该一个或更多个表面是基于以第一速率渲染的人工现实场景的一个或更多个图像并且基于第一观看位置生成的;以高于第一速率的第二速率生成子帧,其中每个子帧通过以下方式生成:确定第二观看位置;确定从第二观看位置看的人工现实场景的一个或更多个表面的可见性;基于所确定的一个或更多个表面的可见性,生成对应于显示器的输出位置的子帧的颜色值;以及提供子帧的颜色值用于显示。
该软件可以优选地可操作来确定从第二观看位置看的人工现实场景的一个或更多个表面的可见性,还可操作来:基于第二观看位置,生成用于投射到人工现实场景中的光线;对光线应用几何变换,以修改光线进入人工现实场景的相应轨迹;以及基于修改后的光线轨迹,确定光线与人工现实场景中的一个或更多个表面的相交点。
在一些实施例中,该软件可操作以基于所确定的一个或更多个表面的可见性生成对应于显示器的输出位置的子帧的颜色值,还可操作来:将相交点的坐标映射到相交表面的表面纹理的表面坐标;从相交表面的表面纹理数据中访问在表面坐标处的颜色值,基于相交点对访问的颜色值进行插值。
优选地,该软件可操作以基于所确定的一个或更多个表面的可见性,生成对应于显示器的输出位置的子帧的颜色值,还可操作来:对颜色值应用一个或更多个图形调整,该图形调整包括:亮度调整;抖动;凹式渲染;或者感知压缩渲染。
根据本发明的另一方面,提供了一种系统,包括:一个或更多个处理器;以及耦合到一个或更多个处理器的一个或更多个计算机可读非暂时性存储介质,该介质包括指令,该指令当由一个或更多个处理器执行时可操作以使系统:访问人工现实场景的一个或更多个表面,其中该一个或更多个表面是基于以第一速率渲染的人工现实场景的一个或更多个图像并且基于第一观看位置生成的;以高于第一速率的第二速率生成子帧,其中每个子帧通过以下步骤生成:确定第二观看位置;确定从第二观看位置看的人工现实场景的一个或更多个表面的可见性;基于所确定的一个或更多个表面的可见性,生成对应于显示器的输出位置的子帧的颜色值;以及提供子帧的颜色值用于显示。
优选地,该指令可操作以使系统确定从第二观看位置看的人工现实场景的一个或更多个表面的可见性,在由一个或更多个处理器执行时还可操作以使系统:基于第二观看位置,生成用于投射到人工现实场景中的光线;对光线应用几何变换,以修改光线进入人工现实场景的相应轨迹;以及基于修改后的光线轨迹,确定光线与人工现实场景中的一个或更多个表面的相交点。
在一些实施例中,该指令可操作以使系统基于所确定的一个或更多个表面的可见性生成对应于显示器的输出位置的子帧的颜色值,在由一个或更多个处理器执行时还可操作以使系统:将相交点的坐标映射到相交表面的表面纹理的表面坐标;从相交表面的表面纹理数据中访问在表面坐标处的颜色值,基于相交点对访问的颜色值进行插值。
在一些实施例中,能够操作以使系统基于所确定的一个或更多个表面的可见性来生成对应于显示器的输出位置的子帧的颜色值的指令在由一个或更多个处理器执行时还可操作以使系统对颜色值应用一个或更多个图形调整,该图形调整包括:亮度调整;抖动;凹式渲染;或者感知压缩渲染。
应当理解,在合适的情况下,本发明的任何方面的特征可以与任何其他方面的一个或更多个结合。
附图简述
图1示出了人工现实渲染和显示系统的示例高级架构。
图2示出了显示引擎的示例高级架构。
图3示出了示例控制块。
图4示出了示例变换块。
图5示出了示例像素块。
图6示出了示例显示块。
图7示出了示例光线投射配置。
图8示出了示例光线投射配置。
图9示出了利用人工现实系统的显示引擎生成图形的示例方法。
图10示出了用于确定表面可见性的示例方法。
图11示出了准备用于输出的像素颜色值的示例方法。
图12示出了示例计算机系统。
示例实施例的描述
因为人工现实设备涉及创建数字场景或将计算机生成的图像叠加到真实世界的视图上,所以它们为设计师和工程师提供了一个平台,用于提供新形式的信息、娱乐或协作方法。例如,人工现实设备可以允许用户看似面对面地长距离通信,或者通过以不引人注目的方式向用户通知他们周围的环境来辅助用户。因为人工现实体验通常可以定制,所以如果以足够清晰和方便的方式呈现,则用户对人工现实的体验可能是非常个人化并且高度吸引人的。
如在增强现实或混合现实中,人工现实体验可以增强人类能力的一种方式是将计算机生成的图像和/或文本添加到真实世界。从这个简单的原理出发,可以考虑各种令人信服的用例。标签(例如,文本、字形等)或者描述真实世界对象的图像可以被固定在世界空间中(例如,定位感知(location-aware)标签充当街道标志或提供自行车路径的实时地图),或者当真实世界对象在空间中移动时,被固定到该真实世界对象的图像(例如,当公共汽车在它的路线上行进时,被添加到公共汽车的标签提供关于公共汽车的路线或容量的详细信息)。标签还可以用于帮助用户在不熟悉的城市中导航(例如,为最近的洗手间创建航点(waypoint)),或者帮助在人群中找到朋友(例如,固定于另一个用户的社交感知(socially-aware)航点)。其他值得考虑的体验可以基于与真实世界对象的交互。例如,用户可以将视频“投影”到墙壁或屏幕上,从而允许视频被播放,并且只对自己或能够访问共享的增强空间的其他人可见。作为另一个示例,用户可以将计算机生成的文本固定于物理对象,以充当增强现实书籍或杂志。内容可以相对于对象来显示(实现用户除了增强现实之外的物理资产),或者可以以与用户的固定关系来显示(例如,在视图的角落不断播放的教程视频)。可以为用户定制所呈现的媒体,使得同一内容显示空间可以显示与观看该同一物理空间的每个人相关的内容。作为另一个示例,用户可以通过“触摸”图标或手动“操纵”计算机生成的图像来与计算机生成的图形进行交互。这些图形可以被显示给从事于一个项目的多个用户,从而为团队协作创造机会(例如,多个架构师一起实时地致力于建筑物中的三维数字原型)。
为了便于使用,输出计算机生成的图形的显示器应该是直观的、可经常访问的以及不引人注目的。向用户显示高清晰度人工现实图形的一种方法是头戴式显示器。用户佩戴能够显示计算机图形显示的装置,诸如面罩(visor)、头戴式装置(headset)或眼镜。在增强现实体验或混合现实体验中,计算机图形可以在物理世界的旁边或上面被看到。然而,渲染这些计算机图形是计算密集型的。因此,在大多数情况下,渲染是由(例如,经由电缆或无线通信协议(诸如蓝牙))与头戴式显示器通信地连接的强大计算机来执行的。在这样的配置中,头戴式显示器受限于笨重的线缆、带宽和功率限制、热量限制以及其他相关限制。然而,这些限制的限度正在被推进。目前正在开发这样的头戴式显示器,它们舒适、高效,适合全天佩戴,却功能强大到足以显示复杂的图形。
一种用于减小实际显示大小而不影响表观显示(apparent display)大小的技术被称为扫描显示器。在扫描显示器中,多个较小的图像被组合以形成较大的合成图像。扫描显示器使用光源光、包括反射器的一个或更多个扫描元件以及光学系统来生成和输出图像光。输出的图像光可以被输出到用户的眼睛。光源光可以由发射器(诸如发光二极管(LED))提供。例如,光源可以是2560×1440个LED的阵列。反射器可以是附接到扫描元件的任何合适的反射表面。在特定实施例中,扫描元件可以是使用一个或更多个微机电系统(MEMS)组件来驱动的扫描镜。光学系统可以包括用于聚焦、重定向和以其他方式增强光的透镜。扫描元件可以使由光导(light guiding)组件处理的光源光以特定的模式(pattern)输出到用户的眼睛,该模式对应于发射器用来优化显示绘制速率的生成模式。因为例如,所有的发射器不需要立刻激活,以及还有各种其他因素,所以与由相同的发射器组成的传统显示器相比,扫描显示器可以需要更少的功率来运行,并且可以产生更少的热量。它们也可以具有更小的重量,这部分是由于扫描元件和光学系统中使用的材料的质量。使用扫描显示器的一个结果是,作为对例如功率、重量和热效率的交换,扫描显示器可能无法完美地显示呈现给它们的图像,例如打算用于传统显示器的图像。可能存在不均匀的失真,诸如图像的几何扭曲以及颜色失真和特别是亮度失真。如本文进一步解释的,可以通过对将要显示的图形进行后处理来校正这些失真,以在它们被传递到显示器之前抵消失真,从而产生没有失真的效果。虽然本公开描述了特定方式的显示器,但是本公开设想了任何合适的显示器。
自其存在以来,人工现实(例如,AR、VR、MR)技术一直受到响应于用户对AR/VR/MR场景的视角的突然变化而渲染AR/VR/MR对象的延迟问题的困扰。为了创建沉浸式环境,用户可能需要在观看场景时能够移动他们的头部,并且环境可能需要通过调整呈现给用户的视图来立即做出响应。每次头部移动都会稍微改变用户对场景的视角。这些头部移动可能很小,但偶尔发生,并且很难(如果不是不可能的话)预测。要解决的一个问题是头部移动可能快速发生,这要求场景的视图被快速地修改,以考虑随着头部移动而出现的视角变化。如果这做得不够快,由此产生的延迟可能会导致用户体验到感觉失调(sensorydissonance),从而导致虚拟现实晕动症或不适,或者至少会破坏体验的沉浸式本质。完整地重新渲染视图以考虑这些视角变化可能是资源密集型的,并且可能只能以相对低的帧速率(例如,60Hz,或者每1/60秒一次)来完成。因此,通过以防止用户感知到延迟并从而避免或充分减少感觉失调的足够快的速度(例如,200Hz,每1/200秒一次)重新渲染整个场景以考虑视角的变化来修改场景可能不是可行的。一种解决方案涉及生成和处理“表面”(即专门配置的对象图元,表示场景内对象的特定视图),其中表面对应于一个或更多个对象,这些对象由于视角的改变而被期望作为一个单元一起移动/平移、倾斜(skew)、缩放、扭曲或以其他方式改变外观。代替重新渲染整个视图,计算系统可以简单地从改变后的视角对这些表面进行重新采样,以近似从改变后的视角来看对应的对象将会是什么样子。这种方法本质上可能是一种有效的捷径,并且可以显著减少所需的处理,并因此确保视图被足够快地更新,从而充分减少延迟。与重新渲染整个视图不同,对表面进行重新采样可以足够高效,使得它可以用于在规定时间内(例如,在1/200秒内)利用HMD的计算系统的相对有限的处理能力来修改视图。这种修改所涉及的时间尺度非常小,以至于让在物理上与HMD分离的更强大的系统(例如,分离的膝上型电脑或可穿戴设备)执行修改可能是不可行的,因为HMD将必须传输关于HMD的当前位置和取向(orientation)的信息,等待分离的系统渲染新的视图,然后从分离的系统接收新的视图。通过简单地对表面进行重新采样,修改可以完全在HMD上进行,从而加快了过程。
图1示出了人工现实图形渲染和显示系统100。在特定实施例中,渲染和显示系统100可以包括保留渲染组件(reserve rendering component)110。保留渲染组件110可以是用于执行补充渲染(或者预先渲染可以在交互性要求较低的情况下准备的元素)的远程渲染组件。例如,保留渲染组件110可以是通过云计算网络或局域网提供的渲染服务器,该渲染服务器处理流视频(streaming video)或其他非交互式组件的预先渲染。用户可以提供她自己的保留渲染组件110,或者可以访问作为预订计划(subscription plan)的一部分的保留渲染组件110。保留渲染组件可以无线地或通过一个或更多个有线连接与主渲染组件120通信。主渲染组件120可以是独立的设备(诸如膝上型或台式计算机、视频游戏控制台或任何其他合适的本地图形渲染系统),或者是容易戴在用户身体上的设备(诸如手机、平板电脑或任何其他合适的紧凑的图形渲染系统)。保留渲染组件110和/或主渲染组件120可以执行典型渲染流水线的几个过程。在特定实施例中,基于由多个多边形定义的三维(“3D”)模型和足以支持高达或超过每秒60帧的帧刷新速率的渲染指令,主渲染组件120能够渲染交互式图形。
主渲染组件120可以接收渲染请求的主渲染数据。主渲染数据可以包括二维或三维模型、纹理、用于渲染计算机生成的图像的指令以及其他合适的信息。主渲染组件120可以基于接收到的主渲染数据,执行初始步骤来渲染人工现实场景的各方面。例如,主渲染组件120可以使用光线追踪(raytracing)、栅格化(rasterization)或其他合适的技术来执行可见性计算,以确定虚拟场景中虚拟对象的哪些3D模型的哪些多边形通过显示器的哪些像素是可见的。基于可见性确定,主渲染组件120可以执行着色计算,以确定每个像素的合适的颜色。在特定实施例中,主渲染组件120可以以每秒30帧的速率(或类似的速率)从保留渲染组件110接收压缩的或解压缩的流视频数据。主渲染组件120可以将从保留渲染组件110接收的数据与通过初始渲染步骤生成的数据进行组合。
在特定实施例中,可以生成供显示引擎150使用的一个或更多个专用对象图元,例如“表面”。作为示例,主渲染组件120可以如在典型的渲染流水线中那样,首先通过从3D模型渲染2D图像来生成表面。然后,主渲染组件120可以使用附加的后处理方法从2D图像生成表面。作为另一个示例,主渲染组件120可以直接从3D模型输出表面,这消除了仅涉及渲染2D图像的额外步骤。作为另一个示例,主渲染组件120可以将来自3D模型的2D图像输出到显示引擎150。显示引擎150可以使用附加的后处理方法,基于2D图像生成表面。
表面可以包括对于渲染人工现实场景的一个或更多个虚拟对象有用的信息。该信息可以包括表面在场景中的定位和/或位置数据,该数据是在与虚拟摄像机/观看者有关的视图空间的坐标系中指定的(替代地,表面的定位也可以在任何其他合适的坐标系(诸如世界空间坐标系)中被指定)。表面还可以包括纹理数据,该纹理数据由一个或更多个纹素(texel)阵列表示。因此,在特定实施例中,“表面”可以被认为是具有变换矩阵的矩形纹理,该变换矩阵指定表面在场景内的定位。纹素阵列中的每个纹素可以具有颜色信息和在纹素阵列内的2D坐标(例如,以(u,v)坐标指定)。在特定实施例中,每个纹素的颜色信息可以指示几个颜色通道(例如,红色、绿色和蓝色)的强度以及alpha信息,该alpha信息指示纹素的透明度级别(例如,完全透明、完全不透明或介于这两者之间)。在其他实施例中,纹素的颜色信息可以指示红色、绿色和蓝色的强度,而不单独指定透明度级别。在这种情况下,每种颜色的值可以被预先乘以纹素的相关联的透明度级别(例如,如果纹素是完全透明的,其alpha级别是0,则该纹素的红色值、绿色值和蓝色值将通过乘以0的alpha级别而全部归零)。
表面的纹理数据可以基于标准图形渲染流水线的结果来生成,这体现了这样的技术:基于三维场景中观看者的视角,最优地确定显示器或图像的像素应该显示的颜色。在特定实施例中,显示引擎150可以限制它将处理的表面的数量(例如,最多16个表面或任何其他合适数量的表面),以确保场景足够简单,以便可以满足性能需求(例如,以200-300赫兹输出帧)。因此,人工现实场景中的某些虚拟对象可以根据任何合适的规则进行分组。每个表面可以是场景内的一个或更多个对象的表示,由于用户对场景的视角的改变(例如,由用户头部上的HMD移动到不同的位置和/或取向导致的),这些对象被预期作为一个单元一起移动/平移、倾斜、缩放、扭曲或以其他方式改变外观。作为示例而非限制,如果确定人和帽子将作为一个单元一起移动/平移、倾斜、缩放、扭曲或以其他方式改变外观,则人的化身和化身所戴的帽子可以对应于一个表面。在特定实施例中,当用户对场景的视角改变时,表面可以对应于被预期作为单个单元移动/平移、倾斜、缩放、扭曲或以其他方式改变外观的点集合(例如,组成对象的点)。
主渲染组件120可以通过一个或更多个有线或无线连接与头戴式显示单元130通信。在特定实施例中,用户能够基于用户的需求来选择主渲染组件120和头戴式显示单元130如何进行通信。头戴式显示单元130可以被配置成从主渲染组件120接收数据(诸如表面和其他渲染指令)。头戴式显示单元130可以基于接收到的数据准备向用户显示人工现实场景。在特定实施例中,头戴式显示单元130可以包括显示引擎150和一个或更多个显示器170。在特定实施例中,显示器170可以是扫描显示器,包括所有必要的发射器、扫描元件和光学系统。头戴式显示单元130还可以包括未示出的附加组件,这些附加组件有助于人工场景的渲染和显示。这些附加组件可以包括附加的图像处理组件、眼睛跟踪组件、热检测组件、任何其他合适的组件或它们的任意组合。虽然本公开描述了特定方式的渲染组件,但是本公开设想了任何合适的渲染组件。
在特定实施例中,头戴式显示器的显示引擎150和显示器170可以被专门配置成实现快速的帧显示或刷新速率。在典型的交互式图形渲染系统中,目标帧速率可以是每秒60帧或者在每秒60帧左右。虽然在传统系统中,这足以使图像看起来像清晰(crisp)、平滑移动的视频,但对于人工现实来说,这可能还不够。由于人工现实体验的沉浸式本质,并且由于显示器的头戴式性质及其与用户眼睛的接近性而进一步加剧,人工现实渲染和显示系统100可以以高得多的帧显示速率(例如每秒高达200帧到300帧)为目标,以便响应于用户的视点的改变和/或移动(例如,头部和/或眼睛移动)来显示图像。如果这做得不够快,那么产生的延迟可能导致用户体验到感觉失调,从而会导致虚拟现实晕动症或不适。在特定实施例中,人工现实渲染和显示系统100能够跟踪用户的眼睛移动,并对其做出反应。为了在对眼睛移动作出反应时提供平滑的视频,系统100可以在特别激烈的时段(例如高达每秒八百帧的突发(burst))期间以甚至更高的显示速率为目标。
可以考虑到这些快速显示速率基准(benchmark)来配置整个系统。每秒200帧的目标帧速率大致相当于每5毫秒一帧。通过无线或甚至有线连接将移动数据传输到强大的图形处理器并且从该图形处理器更新渲染数据,会失去大量时间。因此,必须在头戴式单元中进行至少一定量的图形准备,以减少传输中失去的时间。然而,为了用户的舒适,头戴式显示单元130具有必须遵守的重量、功率和空间限制。这些重量、功率和空间限制限制了头戴式显示单元130可用的组件和计算能力。事实上,使用传统方法,适合长期佩戴的头戴式显示单元130的可用组件无法以每秒60帧用合适的照明来从包括多边形的3D模型渲染人工现实场景,更不用说沉浸式体验所必需的每秒200帧或更多。
为了解决这个问题,强大的主渲染组件120可以执行需要以每秒大约60帧的速率生成表面的复杂图形生成工作。头戴式显示单元130的显示引擎150可以包括这样的硬件组件:这些硬件组件足够强大到基于在来自主渲染组件120的更新之间的用户移动来调整或重新采样主渲染组件120产生的内容。显示引擎150可以快速响应由用户的移动产生的视角变化,以重新处理主渲染组件120的输出、扭曲或以其他方式调整主渲染组件120的输出,直到主渲染组件120已经准备好用于显示的另一帧。例如,如所述的,主渲染组件120可以以典型速率(例如,每秒60帧左右)渲染3D场景中虚拟对象的2D图像。2D图像可用于生成表面。每个表面可以包括指示表面相对于观看者的3D定位的定位信息和它们所表示的虚拟对象的纹理信息,包括复杂的照明效果、遮挡(occlusion)确定以及由主渲染组件120执行的其他渲染技术的实现的结果。主渲染组件120可以将表面发送给显示引擎150。然后,显示引擎150可以使用关于例如用户的位置和/或取向的更新信息,从当前的用户视角对表面进行重新采样,并扭曲表面以适应显示器的特性。场景的简化的几何形状(由于表面的使用),连同其他优化技术,使显示引擎150能够以期望的目标速率(例如,以每秒多于200帧)执行细化和渲染人工场景的任务。因此,当主渲染组件120每1/60秒准备一次精确到用户移动的表面时,显示引擎150可以每1/200秒(其填充在由主渲染组件120的帧速率产生的间隙(gap)中)对输出进行重新采样以细化图形的位置。这可以利用计算机生成的图形的平滑和无缝的移动来为用户产生高质量的人工现实体验,同时仍然提供舒适的装备。
图2示出了显示引擎150的系统图。显示引擎150可以包括四种类型的顶级块。如图2所示,这些块可以包括控制块200、变换块300、像素块400和显示块500。显示引擎150的一个或更多个组件可以被配置成经由一个或更多个高速总线、共享存储器或任何其他合适的方法进行通信。如图2所示,显示引擎150的控制块200可以被配置成与两条镜像的流水线的变换块300、像素块400和显示块500通信。在特定实施例中,显示引擎150的每条流水线可以专用于为单独的显示器170准备要显示的图像。每个显示器170可以被配置成分别向用户的左眼和右眼显示图像。如本文进一步详细解释的,该通信可以包括数据以及控制信号、中断和其他指令。两条流水线能够相互独立地操作。
在特定实施例中,控制块200可以从主渲染组件120接收输入数据流205,并初始化显示引擎150中的流水线以完成供显示的渲染。在特定实施例中,输入数据流205可以包括来自主渲染组件120的数据分组(packet)和控制分组。数据分组和控制分组可以包括信息,诸如包括纹理数据和位置数据的一个或更多个表面以及附加的渲染指令。控制块200可以根据需要向显示引擎150的一个或更多个其他块分发数据。控制块200可以为将要显示的一个或更多个帧启动流水线处理。在特定实施例中,头戴式显示单元130可以包括多个显示引擎150,并且每个显示引擎150可以包括它自己的控制块200。
在特定实施例中,变换块300可以确定在人工现实场景中将要显示的表面的初始可见性信息。一般来说,变换块300可以从显示器上的像素定位投射光线,并产生要发送到像素块400的滤光器命令(例如,基于双线性或其他类型的插值技术的过滤)。变换块300可以执行从用户的当前视点(例如,使用惯性测量单元、眼睛跟踪器和/或任何合适的跟踪/定位算法(诸如同时定位和地图构建(simultaneous localization and mapping,SLAM))被确定)到表面所在的人工场景中的光线投射,并且可以产生结果以发送给像素块400。
一般来说,根据特定实施例,变换块300可以各自包括四级流水线。变换块300的各级可以如下进行。光线投射器可以发出与具有一个或更多个对准的像素的阵列对应的光线束(ray bundle),该阵列称为图块(tile)(例如,每个图块可以包括16×16个对准的像素)。根据一个或更多个失真网格(distortion mesh),光线束可以在进入人工现实场景之前被扭曲。失真网格可以被配置成校正至少源自头戴式显示器130的显示器170的几何失真效果。通过将每个图块的边界框与每个表面的边界框进行比较,变换块300可以确定每条光线束是否与场景中的表面相交。如果光线束不与表面相交,则它可以被丢弃。检测到图块与表面的相交,并且将对应的图块-表面对(tile-surface pair)395传递到像素块400。
一般来说,根据特定实施例,像素块400从图块-表面对395中确定颜色值,以产生像素颜色值。从由控制块200接收并且存储的表面的纹理数据(例如,其作为输入数据流205的一部分)中采样每个像素的颜色值。像素块400从变换块300接收图块-表面对395,并调度双线性过滤。对于每个图块-表面对395,像素块400可以使用对应于投影的图块与表面相交之处的颜色值,采样图块内的像素的颜色信息。在特定实施例中,像素块400可以为每个像素单独处理红色分量、绿色分量和蓝色分量。然后,像素块400可以向显示块500输出像素颜色值495。
一般来说,显示块500可以从像素块400接收像素颜色值495,转换数据的格式使其更适合显示器的扫描线(scanline)输出,对像素颜色值495应用一个或更多个亮度校正,并准备像素颜色值495以输出到显示器170。显示块500可以将像素块400生成的图块顺序的像素颜色值495转换成显示器170可能要求的扫描线顺序或行顺序的数据。亮度校正可以包括任何所需的亮度校正、伽马映射和抖动。显示块500可以直接向显示器170提供像素输出595(诸如经校正的像素颜色值),或者可以以各种格式向显示引擎150外部的块提供像素输出595。例如,头戴式显示单元130可以包括附加的硬件或软件,以进一步定制后端颜色处理、支持显示器的更宽接口或者优化显示速度或保真度。
现在将从控制块200开始描述关于控制块200、变换块300、像素块400和显示块500的更多细节。在特定实施例中,控制块200可以从主渲染组件120接收输入数据流205,并且初始化显示引擎150中的流水线,以基于用户的当前视点来重新采样或校正人工现实表面。在特定实施例中,控制块200可以从主渲染组件120接收控制分组。控制分组可以包括一个或更多个表面,该表面具有将要在人工现实场景中进行渲染的纹理数据和位置数据(例如,位置数据是由变换矩阵定义的)。
图3示出根据特定实施例的示例控制块200的架构。在特定实施例中,控制块200可以包括具有本地存储器235的微控制器230。本地存储器235可以充当控制块200从主渲染组件120接收的数据的缓冲器。控制块200可以包括可由显示引擎150的一个或更多个其他块访问的共享存储器240。共享存储器240可用于存储由其他块使用的数据,同时为每个帧准备像素颜色值。作为示例,变换块300可以依赖于预先计算的值(例如,在变换块300不活动时计算的值),作为其流水线操作的一部分。类似地,显示块500可以依赖于在显示块500不活动时计算的值。这些值可以被存储在共享存储器240中。在特定实施例中,微控制器230可以仅在其他块不活动时(诸如在帧已经被处理并被输出到显示器170之后)或者在适用的情况下(在帧的特定部分的数据已经被发送到下一个块之后),向共享存储器240写入。这种布置可以防止同一帧内的结果不一致。类似地,可以仅在其他块不活动时(例如,在帧间(inter-frame)时间期间或者在微控制器230已经发出停止流水线的命令之后)执行状态更新和性能更新。在特定实施例中,共享存储器240可以包括被留出供特定块使用的部分(section)。只有当显示引擎150的特定块不活动时,微控制器230才可以向共享存储器240的该部分写入。虽然本公开描述了特定方式的微控制器和共享存储器,但是本公开设想了任何合适的方式的微控制器和共享存储器。
控制块200还可以包括纹素存储器220,其存储供像素块400使用的纹理数据。纹素存储器220可以具有专用的存储器控制器210。在特定实施例中,与表面相关联的纹理阵列可以经由存储器控制器210被直接写入到纹素存储器220。例如,微控制器230和存储器控制器210都可以连接到头戴式显示单元130的网络结构(network fabric),该头戴式显示单元130又可以通信地耦合到主渲染组件120。正因如此,在微控制器230已经与纹素阵列的发送方(例如,主渲染组件120)建立了传输之后,发送方可以通过输入数据流205经由存储器控制器210将纹素阵列写入到纹素存储器220。微控制器230也可以控制纹理数据的输入。在特定实施例中,存储器控制器210可以仅在帧间时段期间更新存储在纹素存储器220中的数据,或者可以仅在像素块400不活动时更新存储在纹素存储器220中的数据。
在特定实施例中,纹素存储器220可以被配置成对多个读取请求并行地做出响应。纹素存储器220和存储器控制器210可以被配置成解析来自像素块400的存储器读取请求,并且仅读取包含所请求的数据的存储器的子集。作为示例,纹素存储器220中的数据可以被存储在256位宽的逻辑存储体(logical bank)中,该逻辑存储体被划分成64位的字。在接收到存储器读取请求时,存储器控制器210可以确定需要这些64位的字中的哪些字,并且仅检索这些字,而不是检索整个256位的逻辑存储体。以这种方式执行读取可以减少总线上用于发送读取请求和接收后续数据的流量。它还可以通过减少整体执行的读取次数来降低用电量。
在特定实施例中,存储器控制器可以根据一个或更多个优先级方案来优先化对纹素存储器220的访问。例如,存储器控制器210可以以最高优先级处理(例如,来自主渲染组件120的)对存储器的写入。存储器控制器210可以以次高优先级处理来自像素块400的读取请求,并且可以以最低优先级处理其他访问请求(例如,通过高速通信总线250的请求)。在特定实施例中,存储在纹素存储器220中的纹素数据可以根据特定配置的模式来存储,以减少读取时间、后续处理时间、用电量和发热。在特定实施例中,纹素存储器220和存储器控制器210可以支持多种合适的颜色格式,其大小基于手头的应用而变化。例如,颜色格式可以包含RGB或RGBA指定的颜色,并且可以包括任何合适的大小。虽然本公开描述了特定方式的纹素存储器,但是本公开设想了任何合适的纹素存储器。
在特定实施例中,整个控制块200中的通信可以在高速总线250上执行,多个组件可以通过该高速总线250进行通信。微控制器230、存储器控制器210和共享存储器240可以连接到高速总线250。变换块300、像素块400和显示块500的组件也可以连接到高速总线250,以允许这些块的组件与微控制器230和共享存储器240进行通信。高速总线也可以连接到其他组件。在特定实施例中,微控制器230可以具有一个或更多个专用总线来与显示引擎150的一个或更多个组件进行通信。
在特定实施例中,控制块200可以被配置成接收和处理来自主渲染组件、头戴式显示单元130的一个或更多个其他组件、显示引擎150的一个或更多个其他组件、或者人工现实图形渲染和显示系统100的任何其他合适组件的中断。可以发出中断,以向显示引擎150的特定块或者总体地向显示引擎150提供高优先级的命令。仅作为示例而非限制,控制块200的微控制器210可以被配置成接收唤醒中断。唤醒中断可以使微控制器210启动将要由显示引擎150的每个块执行的引导序列(boot sequence)。作为另一个示例,微控制器210可以被配置成从显示引擎150的块接收错误中断。错误中断可以指示显示引擎150遇到的故障。控制块的微控制器210可以被配置成根据需要采取补救动作(例如,向日志或显示器输出调试信息、进入故障状态例程(route)或任何其他合适的补救动作)。作为另一个示例,微控制器210可以被配置成接收停止中断。一旦接收到停止中断,微控制器210可以发出停止渲染流水线的执行的命令,并进入关闭或暂停例程。虽然本公开描述了特定的中断和命令,但本公开设想了任何合适的中断和命令。
图4示出了示例变换块300的架构。变换块300包括光线投射器310、网格扭曲块320和扭曲存储器325、边界比较块330和边界存储器335以及变换引擎340和变换存储器345。在一些实施例中,扭曲存储器325、边界存储器335和变换存储器345中的一些或全部可以是控制块200的共享存储器240的被分配供这些存储器使用的部分。在一些实施例中,扭曲存储器325、边界存储器335和变换存储器345中的每一者可以是专用于存储由变换块300的相关块使用的数据的单独存储器。存储在这些存储器中的数据可以由控制块200的微控制器230接收,可以由控制块200的微控制器240生成,或者可以以任何其他合适的方式获得,这将通过下面对其中数据的描述而变得明显。在特定实施例中,变换块300可以包括附加的级和伴随的结构。
在特定实施例中,变换块300可以确定将要由显示器显示的表面的初始可见性信息。变换块300可以从观看人工现实场景的用户的视点(例如,如使用运动传感器数据、眼睛跟踪数据和/或跟踪/定位算法确定的视点)执行光线投射。变换块300的结果可以被发送到像素块400。在特定实施例中,显示引擎器150可以包括多个变换块300。第一变换块300的块能够独立于第二变换块300中的块的状态而前进(advance)。
变换块流水线可以包括光线投射器310,光线投射器310基于与一个或更多个表面相关联的位置数据将光线投射到人工现实场景中。一般来说,光线投射是一种用于确定人工现实场景中虚拟对象的主要可见性的技术。计算设备将源自视点的光线发送到虚拟场景中,目的是模拟场景中光粒子的行为。光线所落在的虚拟对象的颜色归因于将要显示的像素的颜色。以这种方式,光线投射与一种被称为光线追踪的技术相关,一个区别是,光线追踪通常涉及通过一个或更多个反射跟随光线,但是光线投射不涉及。代替的是,在光线投射中,与“跟随”光线相关联的计算在检测到光线已经与第一虚拟对象相交之后结束。
图7示出了用于确定将要在场景的视图内显示的虚拟对象(例如,由多边形组成的3D模型定义的虚拟对象)的视觉信息和定位信息的第一光线投射过程。场景的“视图”可以指场景的用户视角,其可以例如基于头戴式显示单元130的当前位置和取向来确定。为了更好地理解对象在视图内是如何显示的,想象从视点(例如,可以表示观看场景的用户的视点的“虚拟摄像机”)发出到屏幕上的像素的许多假想光线(imaginary ray)是有帮助的。作为示例而非限制,参考图7,假想光线730可以从视点720发出并与屏幕710的像素715相交。作为另一个示例而非限制,假想光线760可以与像素770相交。一条或更多条假想光线可以被重复投射,对于屏幕的所有像素(或像素的子集),使用在本文中可以称为“光线投射过程”的方法来确定每个像素应该显示什么(例如,像素的颜色和透明度)。计算系统可以执行光线投射过程,并确定每条假想光线是否与虚拟对象相交,并且可以进一步确定假想光线在虚拟对象上的相交位置。作为示例而非限制,假想光线730可以在交点755处与对象750(例如,AR钟表)相交。在该示例中,计算系统可以确定像素715与相交点755相关联,因为光线730也与屏幕710在像素715处相交。作为另一个示例而非限制,假想光线760可以不与对象750相交。在该示例中,计算系统可以确定像素715不应该与对象750相关联。光线投射过程的这种使用在本文中可被称为“可见性测试”,因为它可用于确定在给定视图内可见的对象(或其部分)。光线投射过程最终可以用于将屏幕的像素与对于场景的视图将可见的任何对象上的相交点相关联。
回到图4的讨论,变换块300的光线投射器310可以负责准备将要发送到人工现实场景中的光线。当与显示引擎150一起使用时,如本文所述,大部分渲染任务已经由主渲染组件120完成,包括大部分的对象遮挡和着色细节。由主渲染组件120执行的渲染任务的结果在每个表面的位置数据和纹理数据中被捕获。然后,由光线投射器310执行的光线投射(例如,对表面集合(a collection of surfaces)执行光线投射)不会限制显示引擎150可以实现的保真度。在特定的光线投射配置中,可以使用很多光线——例如,将被显示的每个像素对应于一条光线,或者甚至子像素对应于一条光线。跟踪光线的路径,直到它们接触到虚拟对象,或者超过某个阈值距离。例如,阈值可以基于光线已经行进的距离、在计算上花费的时间量或任何其他合适的度量。如果超过该阈值,则确定光线没有击中虚拟对象,并且应将默认值归因于该光线。如果光线击中虚拟对象,则将虚拟对象的值(通常是颜色)归因于光线。在一些实施例中,与光线对应的像素的颜色基于归因于光线的值来确定。
如上所述,为了确定可见性,可以针对显示器中的每个像素投射光线。然而,这可能在计算上效率不高,因为具有稀疏表面的场景可能导致许多光线不与任何事物相交。因此,在特定实施例中,光线投射器310可以代之以将光线束或光束(beams)从像素集合投射到场景中,使得可以立即检查较大的采样覆盖范围(footprint)。从概念上讲,如果光线束不与任何表面相交,那么束内的任何光线也不会与任何表面相交。基于这一观查,一旦确定光线束不与表面相交,就不需要针对该表面对从其投射光线束的像素执行进一步的处理。另一方面,如果光线束与表面相交,则光线投射器310可以对与光线束相关联的每个像素执行更精细的采样。在特定实施例中,可以从像素集合的单元投射光线束。例如,从其投射光线束的对准的像素的单元在本文中可以被称为“图块”。例如,每个图块可以是显示器的16×16个像素的对准的块。图块的位置可以基于任何合适的方案来指定,例如通过指定图块的四个角、中心点和到边缘的距离、数学方程式、任何其他合适的方法或其任意组合。在特定实施例中,从图块投射的光线束可以由从图块的四个角投射的四条光线来定义。因此,光线的位置可以在显示器的像素坐标空间中指定(例如,特定显示器的视图空间内的(x,y)像素位置,在图4中被称为“显示空间”,诸如左眼显示器170或右眼显示器170,与变换块300相关联)。
在特定实施例中,显示器的像素可以被划分成对准的图块行。光线投射器310可以针对显示器中的每个图块投射光线束。在特定实施例中,光线投射器可以在前进到下一行之前,针对水平的图块行内的每个图块投射单独的光线束(替代地,如果扫描线顺序是垂直的,则该序列可以基于垂直的图块列)。
在特定实施例中,光线投射器310可以优先化光线束。作为示例,光线投射器310可以以基于处理各个图块的期望的时间量的顺序,为图块准备光线束。例如,由扫描显示器显示的图像可能呈现出被称为色差(chromatic aberration)的效果,其中,显示器边缘附近的颜色的红色分量、绿色分量和蓝色分量相对于显示器中心附近的颜色不同步。下面将更详细地描述这种效果。由于校正这种效应的努力,处理显示器边缘附近的图块可能需要更多的读取带宽(例如,用于从存储器读取纹素阵列),和/或可能比处理显示器中心附近的图块花费更长的时间。例如,在为每个颜色分量(例如,红色、绿色或蓝色)投射单独的光线束以考虑色差的实施例中,每个有颜色的光线束的相交定位可能不同,这意味着可能需要从存储器中检索单独的纹理区域(例如,需要三次单独的存储器读取)。对于更接近显示器中心的图块,其中色差可能不太明显,针对所有三种的红色、绿色和蓝色光线束,可以使用同一纹理区域来计算颜色(例如,仅需要一次存储器读取)。基于该信息,光线投射器310可以在为较慢的图块(例如,更接近边缘的图块)准备光线束和为较快的图块(例如,更接近中心的图块)准备光线束之间交替。作为示例,如果一行中有160个图块,则以下图块顺序将平衡所需的平均纹素读取带宽:0、80、1、81、2、82(每个数字对应于一行160个图块中的图块顺序)。
在变换块300的下一个块中,网格扭曲320可以将一个或更多个“扭曲”或“失真”网格应用于光线,以指定它们各自的轨迹。例如,可以选择失真网格来模拟或校正摄像机或显示器的透镜的效果。尽管如上所述,扫描显示设备有许多优点,但也有一些缺点。与传统或理想显示器上的图像相比,这些缺点中的一些缺点以图像失真的形式出现。使用摄像机通过透镜窥视(peer into)场景的隐喻(metaphor),这些失真中的许多失真采取由光被摄像机透镜弯曲导致的扭曲或几何失真的形式。
图8示出了第二光线投射过程的示例概念化,该第二光线投射过程用于从场景的视点对用于显示的表面进行后扭曲(post-warp)或重新采样。在特定实施例中,一个或更多个表面可以包括将它们放置在与场景相关联的3D虚拟空间内的指定定位处的定位信息。作为示例而非限制,参考图8,可以基于相关联的定位信息,将表面850放置在其图示的定位处。在该示例中,虽然表面可以看起来是描绘相对于观看者具有不同深度的3D时钟(例如,9点钟区域可以看起来比3点钟区域离观看者更远),但是在特定实施例中,表面可以是面向观看者的平坦表面(例如,至少最初在视点改变之前,其法向矢量指向观看者)。对象的任何视觉表示都可以作为表面的纹理数据的一部分被存储。
在特定实施例中,表面的每个纹素可以具有指定其将要位于何处的相关联的定位信息。光线投射过程可以由光线投射器310执行。作为示例而非限制,参考图8,假想光线830可以从视点820发出,并与屏幕810(例如,头戴式显示单元130的两个目镜(eyepiece)之一的显示器170)的像素815相交。作为另一个示例而非限制,假想光线860可以与像素870相交。在特定实施例中,变换块300的网格扭曲块320可以解决由头戴式显示单元130的光学结构(例如,头戴式显示单元130的透镜的光学效应)引入的失真和/或其他像差(例如,色差)。可以在数学上校正失真/像差。如图8所示,这种校正可以在概念上表示为一个过程,其中假想光线穿过失真网格840行进,该失真网格840在数学上对假想光线(例如,假想光线830、假想光线860)进行方向校正(course-correct)以解决失真/像差。作为示例而非限制,假想光线830(在经过用于解决失真/像差的方向校正之后)可以在相交点855处与表面850相交。作为另一个示例而非限制,假想光线860(在经过用于解决失真/像差的方向校正之后)可以不与表面850或任何其他表面相交。
在特定实施例中,变换块300的网格扭曲320可以将一个或更多个失真网格应用于光线,以抵消(例如校正)这些几何失真。一种类型的失真被称为色差。色差指的是光学器件中的一种效果,在光学器件中离开透镜的光变得分散,导致透镜使不同波长(例如,颜色)的光在不同的焦点处聚焦。光线的红色分量可能具有与绿色或蓝色分量不同的折射角度。这种效果会产生带有彩色条纹的模糊图像。当在透镜中使用了相对便宜的材料时,由于这些透镜的物理属性,可能会出现这种效果。因为扫描显示设备的扫描元件和光学系统可能使用不太昂贵且重量更轻的材料,所以扫描显示器可能展示出这种效果。色差的效果可以通过应用失真网格来校正,而不是使用不同的硬件组件来校正。由于不同颜色的光线表现不同,因此特定实施例可以针对不同的颜色分别投射光线(例如,可以从每个像素投射三条红色、绿色和蓝色的光线),并且应用单独定义的失真网格来考虑不同波长的不同折射特性。在特定实施例中,并非为不同的颜色定义单独的失真网格,而是可以将用于校正红色分量和蓝色分量的色差的失真网格指定为相对于绿色分量的偏移。
为解决色差而定义的失真网格可以被配置成反转显示器170的预期色差特性和/或用户的眼睛的相对注视方向(例如,由眼睛跟踪器确定)。当失真网格被应用于由光线投射器310发送到人工现实场景中的光线时,红色、绿色和蓝色光线的角度可以变化。在特定实施例中,红色、绿色和蓝色光线之间的变化程度本身可以基于光线在显示器中的定位而变化。显示器中心附近的变化程度可能不存在,而一个或更多个边缘附近的变化程度可能相对较大且易于检测。变化可以平滑地改变,使得插值可以是一种计算失真网格的所有值的有效方式。在一些实施例中,变化可以使得可能需要进行直接校准。这些值可以作为一次性校准事件的一部分而被预先计算,被存储在共享存储器240或扭曲存储器325中,并且在设备使用时被应用。然而,透镜和显示器属性可能会随着热量而改变,如果检测到大量热量,则失真网格的值可能需要调整。
另一种类型的失真被称为透镜或扫描失真。这种失真可能因为透镜不是完全均匀的而被引入。当人们用他们的眼睛扫描透镜后面的表面时,光可能会有从一个定位到下一个定位的折射角度微小的变化。通常,透镜的模拟(诸如用于光线投射的模拟)被假设是均匀的。无法解决这种失真可能导致扫描显示器中使用的光的奇怪行为,这可能增强使用相对便宜的材料作为扫描显示器的一部分的效果。在特定实施例中,可以使来自光线投射器310的光线失真,以反转(invert)透镜失真的效果,从而在用户观看时产生完全均匀的透镜的明显效果。在一些实施例中,这种效果可以在制造期间被校准,因为可以假设透镜不会随着使用而显著变化。在一些实施例中,透镜可能会损坏,可能在其安装中轻微移动,可能由于热量而发生塑性变形,或者可能发生许多其他种类的永久改变。可以对应地修改用于校正透镜失真的失真网格。此外,在使用期间,由于可以使透镜扭曲的类似热量的效应(effects like heat),透镜失真的效果可能会加剧。失真网格可能需要频繁的重新校准来校正这种效果。
另一种类型的失真与图像在扫描显示设备上的显示方式有关,并且被称为滚动快门。扫描显示设备的像素不会一次全部显示。相反,它们按照扫描模式被“写入”显示器。例如,显示器的整行的所有像素可以在向下移动到下一行之前被写入。为了促进这一点,显示引擎150还可以在向下移动到另一行之前确定已设置的各行像素的像素颜色值。虽然显示引擎150被设计成提供快速的帧刷新率,但是在可以输出完整的帧之前,人工现实场景仍然可能改变。这可能会产生类似滚动快门效果的效果。可以计算失真网格来抵消这种效果。失真网格可以在帧的每一行被变换引擎处理之后更新,以为下一个输入行做好准备。
其他失真与显示器的制造方式有关。一种失真被称为晶片未对准(diemisalignment)。显示器(包括扫描显示器中使用的发射器)包括对准的LED面板。由于制造密集LED面板的困难,因此面板仅在指定的公差范围内对准。即使两个LED面板的垂直未对准在该公差范围内(可能超过两个像素),这两个LED面板的对准也可以被认为是可接受的。这可能导致每个发射器显示器包括几个未对准的面板。因此,像素的间距和对准可能不是根据理想显示器(构建人工场景所基于的模型)均匀地或正确地分布。为了校正晶片未对准,可以生成失真网格以使显示器中像素的外观均匀。作为示例,每个颜色通道(例如,红色、绿色和蓝色)的LED在被合成为单个面板时(或者在所得图像被组合用于显示时)可能不对准。未对准可能使得两个重叠的像素不能由相同的坐标号来标识。例如,对于将要显示的相同像素,红色面板中的LED可以由坐标位置(10,10)指代,而蓝色面板中相同物理位置处的LED可以由坐标位置(11,12)指代。由显示引擎应用的失真网格可以校正这些对准误差。作为另一个示例,未对准可能是由LED面板的取向引起的。例如,当与同一合成面板(或合成图像)中的第二LED面板相比时,第一LED面板可以呈现旋转。这种效果可以称为“时序(clocking)”。由显示引擎应用的失真网格可以校正由旋转的未对准导致的定位误差。这种方法可以校正明显的硬件未对准误差,大大简化了制造成本和公差的要求。因此,不管是什么原因,失真网格导致由光线投射器310发送的光线的角度被足够地重定向以抵消晶片未对准效果。在特定的实施例中,可以在制造期间校准这种效果,因为可以假设未对准不会随着使用而显著变化。
另一种失真与LED在显示器170中的位置有关。为了结合所需数量的LED并最大化质量,奇数列和偶数列的LED可能沿着显示器的垂直轴被定位在稍微不同的位置。这种失真被称为“奇数/偶数列失真”。类似于晶片未对准,这种特定的失真可以用失真网格来校正以抵消这种效果。可以在校准过程期间生成失真网格,因为奇数列和偶数列的LED的垂直对准不太可能随着使用而变化。
失真也可能是通过调整所模拟的透镜的焦点以对应变焦透镜引入的。在特定实施例中,头戴式显示单元170的显示器170可以安装在可移动平台上。这可以允许显示器170随着用户的焦平面移位而调整,从而提高显示保真度和用户的舒适度。然而,移动显示器可能导致由先前计算的失真网格校正的效果移位。因此,每次移动显示器时,失真网格可能需要调整。类似地,扫描显示器中的光学系统可以被改变以产生相同的效果,这需要类似的解决方案。此外,改变焦平面可能会引起其自身的失真出现,这可以通过失真网格来校正。
另一种类型的失真可能是由观看显示器时眼睛的移动引入的。眼睛可以快速移动,导致用户对场景的观看移位。这可以引入失真,因为快速的眼睛移动会导致眼睛中检测到的图像被剪切(shear)。这种效果与滚动快门效果的不同之处至少在于,基于眼睛移动的失真可能基于观看的眼睛本身中的效果,而不仅仅基于显示器中的效果。如上面所讨论的,头戴式显示单元130可以包括眼睛跟踪组件,该组件包括眼睛跟踪摄像机和伴随的软件。眼睛跟踪信息可以被传递到控制块200或变换块300。眼睛跟踪信息可用于预测眼睛移动(例如通过检测眼睛的加速度),确定用户可能体验的失真程度。可以计算抵消快速眼睛移动的几何失真效果的失真网格。
为了校正上述几何失真和任何其他的几何失真,变换块300的网格扭曲块320可以将一个或更多个失真网格应用于光线,以定义光线进入人工现实场景的轨迹。在特定实施例中,失真网格被预先计算并存储在变换块300的扭曲存储器325中。失真网格是预先计算的,从这个意义上说,网格扭曲块320不会在每次应用失真网格时生成失真网格。相反,它们可以由一个或更多个其他组件基于各种输入来生成。一些失真网格可以是静态的,从这个意义上说,它们可能只需要被计算一次,或者至少不频繁地被计算,诸如在校准过程期间。例如,为了生成失真网格以校正晶片未对准或奇数/偶数列失真,失真的精确程度只需要被确定一次,因为失真不太可能随着设备的使用而显著改变。其他失真可以使用一组网格进行校正,这组网格被预先计算并基于使用情况被应用。例如,可以预先计算用于校正透镜或扫描失真或者由滚动快门引入的失真的失真网格,并且网格扭曲块320或变换块300的另一合适组件可以选择适当的失真网格来使用。
其他失真网格可以是动态的,从这个意义上说,它们可能需要频繁地更新,多达并且包括每次由主渲染组件120渲染帧时,由显示引擎150渲染的每帧一次,或者甚至更频繁。例如,为校正变焦透镜的透镜移动而引入的失真可能需要在变焦透镜调整的任何时候更新。在特定实施例中,可以针对特定透镜配置(例如,一个用于可能最接近的位置,并且另一个用于最远位置)预先计算失真网格。基于透镜的实际位置(其数据可从变焦透镜的透镜调整控制器获得),每个像素的失真值可以通过对由预先计算的最接近位置和最远位置的失真网格指定的该像素的预先计算的失真值进行插值来计算。然后,插值后的失真值可用于在投射光线时使光线失真。动态失真网格的另一个示例用于校正由眼睛移动引起的失真。随着用户的眼睛相对于显示器(例如,左眼显示器170和右眼显示器170)移动,每次检测到眼睛移动或焦点移位时,可能需要更新每个显示器的失真网格。可以基于用户的眼睛相对于显示器的注视来计算对每个失真网格的调整。
在特定实施例中,这些失真网格中的每一者都可以被计算并存储在扭曲存储器325中。它们也可以被组合成单个失真网格,并被存储在扭曲存储器325中。在特定实施例中,失真网格可以由控制块200的微控制器230加载到扭曲存储器325中的一个或更多个查找表组成。查找表可以包括一个或更多个条目,这些条目指定对应于图块的各个像素的光线的失真程度。例如,查找表的值可以指定对应于图块的角像素的光线的失真程度。扭曲块320可以从这些角值中对要应用于内部光线或整条光线束的失真值进行插值。作为另一个示例,查找表的值可以指定对应于图块中所有像素的光线的失真程度。扭曲块320然后可以应用从扭曲存储器325读取的光线的失真值。在特定实施例中,查找表可以指定对应于单个颜色通道的光线束的失真值,并且可以对于对应于其他颜色的光线束指定相对于该失真值的颜色偏移。例如,查找表可以指定绿色通道的光线束的失真值。也可以对于红色和蓝色通道指定相对于绿色失真值的偏移。因此,失真网格值可以从扭曲存储器325中检索一次,并被应用于三条光线束。在一些实施例中,网格扭曲块320可以直接计算将要应用的一个或更多个失真网格。虽然本公开描述了特定方式的失真网格,但是本公开设想了任何合适方式的失真网格。
在变换块300的边界比较块330中,后扭曲光线束被投射到场景中,并且确定对应于光线束的图块是否与场景中的表面相交。在特定实施例中,由控制块200从主渲染组件120接收的表面可以使用规定的边界或边界函数(例如,表面的一个角在视图空间中的最小x坐标和y坐标,相对角在视图空间中的最大x坐标和y坐标)来指定表面的尺寸和定位。每个表面的边界信息可以由控制器块200预先计算,并且可以被存储在变换块300的边界存储器335中。为了确定图块是否与表面相交,光线束可以穿过表面所位于的视图空间。在特定实施例中,可以针对每个表面逐一测试每条光线束,以确定它们相应的边界是否相交。在特定实施例中,场景的表面可以以深度(depth-wise)方式来存储,其中与视点更接近的表面在数据结构中被设置为第一个,使得可以第一个测试与更接近的表面的相交。当光线束穿过场景时,每个表面的边界可以与投影的光线束的边界进行比较。可以使用执行该边界比较的其他有效方式。如果光线束被确定为没有与任何表面相交,则可以丢弃该光线束,并且对应的图块可以与默认值或指示该默认值的标志相关联。默认值可以是指定的背景纹理、纯色、无颜色、任何其他合适的默认值或其任意组合。如果确定图块与表面相交,则将图块-表面对(例如,图块的标识符和表面的标识符)传递给变换引擎340。可以在视图空间坐标系中指定图块-表面对和相交点的坐标。
变换块300的变换引擎340将图块-表面对中的图块的坐标从视图坐标空间(例如,相对于观看者的3D坐标空间)转换到表面的纹理坐标空间(例如,纹理内的2D坐标空间)。在对渲染流水线中的坐标的共识中,变换引擎340使用存储在变换存储器345中的坐标空间信息,将图块与表面相交之处的坐标从视图空间(例如,(x,y)坐标)转换成表面的纹理的(u,v)坐标。例如,变换引擎340可以将图块的四个角转换成表面坐标空间。在一些实施例中,变换引擎340可以直接计算转换。然后,与图块-表面对395相关联的数据被传递到相应的像素块400。在将图块-表面对传递到像素块400的过程中,变换块300还可以传递附加参数,包括从(x,y)坐标到(u,v)坐标的转换值(包括微分值(differential value))、纹理空间中其他颜色的光线束的相交定位的偏移值(例如,如果指定的绝对(u,v)坐标是针对绿色分量的,则也可以发送关于相对于绿色来定义的红色的u和v偏移和/或蓝色的u和v偏移的附加信息)、指示一行的所有图块已经被处理的行结束(End of Row)标志、任何其他合适的参数或其任意组合。虽然本公开描述了特定方式的坐标转换,但是本公开设想了任何合适方式的坐标转换。
像素块400可以从变换块300接收图块-表面对395,并在每个图块内的采样位置处执行双线性插值,以确定图块中每个像素的像素颜色值。在图5中示出了示例像素块400的架构。像素块400可以包括缓冲器管理器410,缓冲器管理器410接收数据并调度双线性插值。像素块可以进一步包括用于颜色值的每个分量的滤光器块,例如,红色滤光器(filter)块420、绿色滤光器块430和蓝色滤光器块440。至少由于色差的可能性,这三个颜色分量可以被单独处理。在图5所示的示例像素块中,缓冲器管理器410可以通过引用特定的存储器地址,向纹素存储器220发出读取请求415。纹素存储器220可以分别将对应的数据(例如,以每个时钟周期的256位为单位,对应于16个纹素,每个纹素的大小为16位)加载到滤光器块420、430、440的纹素缓冲器422、432、442中。在特定实施例中,可以可选地从纹素存储器220或图5中未示出的像素块400的其他组件读取滤光器块。
在图5的像素块中,缓冲器管理器410可以从变换块300接收图块-表面对395,图块-表面对395指示与图块相交的表面。在调度用于插值的样本之前,缓冲器管理器410可以将相关表面数据(即,来自纹素存储器220的其纹素阵列的颜色通道和相关部分)加载到红色滤光器块420、绿色滤光器块430和蓝色滤光器块440中的每一者内的缓冲器中。缓冲器管理器410可以通过为每个颜色分量计算纹理空间中的保守边界框(conservative boundingbox)来确定哪个纹素阵列是相关的,该保守边界框包含由变换块300确定的在投影图块和表面之间的相交。然后,这些边界框用于确定三个滤光器块420、430、440中的任何一者都将需要表面的纹素阵列的哪部分。缓冲器管理器410通过引用适当的存储器地址415,从纹素存储器220请求表面的纹素阵列的所需部分。纹素存储器220将所需部分加载到相关滤光器块的纹素缓冲器422、432、442中。在特定实施例中,被加载到纹素缓冲器422、432、442中的所需数据部分将足以确定(例如,经由双线性插值)图块内每个样本定位的颜色。例如,与32×32个纹素相关联的适当的颜色数据将会被加载到对应的滤光器块420、430、440中。
取决于某些失真(包括色差),缓冲器管理器410可能需要执行来自纹素存储器220的一个或更多个单独的请求,以满足滤光器块420、430、440的需要。在具有最小色差的情况下,来自纹素存储器220的单个读取请求(例如,具有256位的字,其对应于16个纹素的16位颜色信息)可以由所有三个滤光器块420、430、440使用(例如,读取数据可以被并行加载到它们相应的缓冲器中)。在具有大色差(例如,超过16个像素)的情况下,缓冲器管理器410可能需要根据滤光器块420、430、440的需求而为它们请求单独的纹素阵列组(例如,缓冲器管理器410可能需要分别为三个滤光器块执行三个单独的读取请求)。因此,色差可能导致纹素存储器220所需的读取带宽高达三倍的变化。因为变换块300的光线投射器310将具有预测的高色差(例如,沿着屏幕的边缘)的图块与具有预测的低色差的图块(例如,接近屏幕中心的图块)交错,所以控制了这种变化,并且使纹素存储器220和像素块400的带宽需求均衡或负载平衡。这又减少了保持像素块400忙碌所需的存储器带宽。虽然本公开描述了特定方式的缓冲器管理器,但是本公开设想了任何合适的缓冲器管理器。
在特定实施例中,对于给定的图块-表面对,缓冲器管理器410可以在允许过滤开始之前,加载图块中的每个样本位置所需的表面数据的部分。在特定实施例中,这可以通过在处理图块-表面对中的样本之前加载图块的所有所需纹素来完成。这样做的示例过程可以如下。给定与图块-表面对相关联的数据,像素块400可以计算每个颜色分量的投影图块在纹理空间中与表面相交之处的保守边界框。一旦空间在所有三个纹素缓冲器422、432、442中可用,缓冲器管理器410就可以发出来自纹素存储器220的读取请求,以获得确定图块内样本位置的颜色值(例如,16×16个样本)所需的纹素数据。在特定实施例中,边界框内所需的数据(例如,32×32个纹素)可以通过顺序读取4×4纹素组来获得。然后,可以将每个检索到的4×4纹素组加载到每个滤光器块的纹素缓冲器中,该滤光器块需要该特定的4×4纹素组用于颜色采样。
每个图块的颜色采样可由采样步进器块(sample stepper block)管理。基于来自变换块300的图块-表面数据395,采样步进器块可以确定特定颜色(例如,绿色)的投影图块的角与表面相交之处的(u,v)纹理坐标。在(由投影图块的角的(u,v)坐标定义的)投影图块的覆盖区内,通过对角坐标应用插值(例如,增量双线性插值,使得纹理坐标空间中的扭曲的投影图块不必是平行四边形),采样步进器可以确定图块内的(在(u,v)纹理空间中指定的)多个(例如,16×16个)样本定位。然后,采样步进器可以遍历16×16个样本,针对2×2样本块(其对应于屏幕空间中的2×2像素块)发出过滤命令。可以并行过滤四个样本。每个样本的过滤可以使用双线性插值或点采样来执行。
在特定实施例中,红色滤光器块420可以利用在其内部缓冲器中存储的表面和图块数据来执行双线性插值。对应于表面的纹素阵列可以从纹素存储器接收,并被存储在一个或更多个纹素缓冲器422中。纹素缓冲器422可以通过将相关联的(u,v)坐标的值移位来划分纹素阵列中的纹素。纹素数据可以存储在纹素存储器220中,使得从纹素存储器220读取的数据当被写入纹素缓冲器422时,导致纹素数据被划分成对准的纹素块。纹素数据依次存储在每个纹素缓冲器422中,以提供用于插值的任意对准纹素块。可以通过从一个或更多个像素缓冲器424采样来并行采样四个对准的像素位置。像素缓冲器424从纹理空间(例如,(u,v)坐标)中的图块产生2×2的样本位置块。纹素缓冲器422和像素缓冲器424用于执行双线性插值。双线性插值可以产生2×2的红色像素颜色值块427,其作为像素输出595的一部分被提供给显示块500。
在特定实施例中,可以采用额外的策略来优化速度或降低功耗,优先于质量(例如,使用单点采样代替双线性插值)。还设想了双线性插值的其他优化。例如,缓冲器管理器410可以使用(由变换块300提供的)子图块来确定图块位置不与表面相交,因此在该位置不需要双线性插值。红色滤光器块420将得到的像素颜色值427输出到显示块500的指定存储器位置。通过对相应的纹素缓冲器432和442中存储的纹素值进行操作,绿色滤光器块430和蓝色滤光器块440针对它们各自的颜色通道以基本上相同的方式工作,其中相同的像素值被存储在相应的像素缓冲器434和444中。绿色滤光器块430可以向显示块500输出绿色像素颜色值437。蓝色滤光器块440可以向显示块500输出蓝色像素颜色值447。缓冲器管理器410可以支持在滤光器块之间共享信息(诸如alpha颜色通道值),以减少从纹素存储器220的读取。虽然本公开描述了特定方式的双线性插值,但是本公开设想了任何合适方式的双线性插值。
在特定实施例中,眼睛跟踪器可以通过控制块200向显示引擎150报告用户的焦点或注视点(fixation point)。像素块400可以使用该信息以比远离用户的焦点的像素颜色值更高的保真度生成对应于用户的焦点的像素颜色值。这种技术被称为凹式渲染。凹式渲染允许显示引擎150优先化用户更可能注意到的像素位置,这节省渲染时间、能量成本和热量产生等因素,优于以相同的保真度程度渲染每个像素颜色值。像素块400可以基于正在执行的凹式渲染的类型来生成多种中央凹图案(foveation pattern)。例如,一个这样的图案可以被称为中央凹环(foveated ring),其中在远离焦点的像素定位处有不同的质量转变点。像素块可以对这些环之间所要求的质量水平进行插值。像素块可以将所得图案作为8位的中央凹图案450输出到显示块,并且可以将该图案存储在中央凹图案存储器525中。尽管本公开描述了特定方式的凹式渲染,但是本公开设想了任何合适方式的凹式渲染。
在特定实施例中,显示块500可以从像素块400接收像素颜色值495(例如,累积在图块缓冲器中的),对像素颜色值495应用一个或更多个亮度校正,并且准备像素颜色值495以输出到显示器170。当像素颜色值495被显示块500接收时,它们可以以图块顺序(例如,2×2的对准的红色、绿色和蓝色颜色值的块)被接收。这是因为像素块400可以在移动到下一个图块之前,顺序地输出一个图块(其可以包含16×16个像素)中的2×2个像素的像素颜色。为了输出将由显示器170(其可以是扫描显示器)使用的像素颜色值495,可以以扫描线顺序读出像素颜色值495。显示块500还可以对像素颜色值495应用一个或更多个亮度校正,以进一步提高显示质量。在图6中示出了示例显示块500的架构。
准备用于显示的像素颜色值495的第一步是将从像素块400接收的像素颜色数据495存储在一系列行缓冲器500中。行缓冲器500包括像素缓冲存储器510、字和图块元数据存储器515和中央凹图案存储器525。针对显示器170的整个宽度,像素缓冲存储器510保持两行图块。例如,在每个图块是16×16个像素并且显示器是2560像素宽的配置中,像素缓冲存储器510将会保持32×2560个像素。像素缓冲存储器510的配置可以根据显示器170的特定扫描线方向而改变,例如,如果扫描线方向是垂直的并且是1440像素高,则像素缓冲存储器可以保持1440×32个像素。像素缓冲存储器510中的每个像素可以由36位的颜色值(例如,用于红色通道、绿色通道和蓝色通道的12位值)表示。在特定实施例中,像素缓冲存储器510可以存储由像素块400计算的全色精度(full color precision)。在特定实施例中,像素缓冲存储器510可以使用压缩(诸如感知编码)来降低像素缓冲存储器510的存储器需求。行缓冲器505可以包括字和图块元数据存储器515。元数据存储器515可以将从像素块400接收的元数据存储在像素颜色值495中,或者作为单独的输出存储。元数据可以指示没有被像素块400写入的像素块或者不包括颜色值的图块(例如,因为从图块投射的光线束没有与任何表面相交),这可以减少浪费的带宽和/或对因为没有生成像素颜色值所以不需要显示的像素的计算。行缓冲器505还可以包括中央凹图案存储器525,其存储由像素块400生成的并且与像素缓冲存储器510中的图块相关联的8位的中央凹图案450。
在特定实施例中,行缓冲器505可以包括双缓冲器,该双缓冲器被配置成分别存储两行图块(例如,每个图块表示16×16个像素)、相关联的元数据和中央凹图案。像素块400可以向一个缓冲器写入,而另外一个缓冲器中的像素被输出到显示器170。当输出完成(例如,当前输出缓冲器中的所有像素都已被输出)时,显示块500可以交换两个缓冲器的角色。例如,先前用于输出像素的缓冲器现在将会被写入,并且先前用于接收新的像素数据的另外一个缓冲器将会向显示器输出这些像素。
在特定实施例中,从像素块400接收2×2对准像素块中的像素颜色值495(例如,在图块缓冲器中累积的像素颜色值495)。显示块500将对准的成对的2×2块合并成像素缓冲存储器510中的单个4×4写入。当来自像素块400的2×2四边形具有高吞吐量时,它们通常成对对准。这允许单个存储器访问端口被用于读取和写入。
像素缓冲存储器510中的存储器可以被布置成使得数据可以以图块顺序写入并且以行顺序读出。以8×1像素为单位将像素颜色数据从像素缓冲存储器读取到亮度校正块540中。像素缓冲存储器510可以被组织成两个存储体:存储体A和存储体B。在偶数行上,存储体A存储前四个像素,随后是存储体B中的四个像素,依此类推。在奇数行上,前四个像素被存储在存储体B中,随后是存储体A中的四个像素,依此类推。结果是每个对准的4×2写入和每个对准的8×1读取访问来自存储体A的4×1个像素和来自存储体B的4×1个像素。这种存储器写入和读取模式导致像素缓冲存储器510将图块顺序的写入转换为行顺序的读取。虽然本公开描述了以特定方式转换像素顺序,但是本公开设想了以任何合适的方式转换像素颜色顺序。
像素定序器530可以从元数据存储器515读取图块有效性(tile-validity)数据。像素定序器530可以确定从像素缓冲存储器510读取像素颜色值的顺序。在特定实施例中,像素定序器530可以使8×1个像素被读取到亮度校正块540以供处理。8×1个像素可以每时钟周期被读取两个像素(例如,如果每个像素具有三个12位的颜色通道数据,则每时钟周期将会读取72位),这意味着可以使用总共四个时钟周期来使8×1个像素被读取到亮度校正块540中。
在特定实施例中,像素定序器530可以以面向像素(pixel-oriented)的模式操作。以这种模式,从像素缓冲存储器510读取所有像素,并将所有像素发送到亮度校正块540。在这种面向像素的模式中,像素定序器530使得从像素缓冲存储器510中的两个不同位置交替地读取十六个像素颜色值的块。最初,像素定序器530使得从在一行开始处的图块将十六个像素颜色值读取到亮度校正块540中。接下来,它使得来自在该行中间处起始的图块的十六个像素颜色值被读取。它从这两个起始位置依次交替,直到已经读取了整行。面向像素的模式可以使用该顺序来适应由显示器170用于扫描显示设备的像素颜色值加载模式。
在特定实施例中,像素定序器530可以以面向图块的模式操作。以这种模式,像素定序器从对应于像素颜色值(该像素颜色值是从像素缓冲存储器510读取的)的字和图块元数据存储器515读取图块有效性元数据,并且像素定序器仅使得与已经根据元数据被标记为有效的图块对应的像素颜色值被读取到亮度校正块540中。在特定实施例中,字和图块元数据存储器515可以指定特定的存储器地址来存储行内图块的图块有效性位。例如,在每个图块为16×16个像素并且显示器为2560像素宽的配置中,一行中将会有160个图块。正因如此,元数据存储器515可以指定160个位来指示它们对应的图块是否有效。当存储在其中的位被读出时,160个图块有效性位可以被清除(例如,其二进制值是“假(false)”或“0”)。当任何像素数据被写入对应于与该图块有效性位相关联的图块的像素缓冲存储器510中时,每个图块有效性位然后可以被设置为“有效”(例如,二进制值是“真(true)”或“1”)。例如,如果2×2像素块与160个图块的行中的第10个图块相关联,则当该2×2像素块被写入像素缓冲存储器510中时,对应的图块有效性位将会被设置为“真”。如果像素缓冲存储器510中没有加载图块的像素数据,则该图块的图块有效性位将会保持其“假”值。
在特定实施例中,像素定序器530可以一次一行地处理像素数据。在一行图块(例如,160个图块)已经被加载到像素缓冲存储器510中之后,像素定序器530可以从一行图块的起始到结束依次读取所有元数据,诸如分别存储在字和图块元数据存储器515和中央凹图案存储器525中的图块有效性和中央凹图案数据。这些值被组装并且被发送到像素输出块550,使得下游设备(例如,显示器170和/或现场可编程门阵列)将会知道哪些图块是有效的或无效的,并且相应地组织输入的像素值。例如,如果像素输出块550被配置成每个时钟发送72位(例如,使得每个时钟可以发送价值为(worth of)两个像素的数据),则像素定序器530可以为八个图块组装元数据(例如,每个图块具有9位元数据,包括1位图块有效性和8位中央凹图案),并指示像素输出块550将组装的数据发送到显示器170或其他下游设备。像素定序器530可以重复该过程,直到所有160个图块的元数据已经被发送,使得下游设备知道160个图块中的哪些图块是有效的以及哪些图块是无效的。像素定序器530然后使得像素颜色值(例如,一次两个像素或72位)从像素缓冲存储器510被读取到亮度校正块540中(例如,像素定序器530可以通知亮度校正块540从像素缓冲存储器510读取哪些像素)。但是,只对与已经被标记为有效的图块相对应的像素颜色值执行此操作。经过处理后,像素数据将会被输出到下游设备。由于下游设备知道哪些图块是有效的或无效的,因此它可以对应地组织输入的像素数据。例如,如果图块有效性数据指示第一图块(每个图块表示16×16个像素)无效,并且同一行中的下一个图块有效,则下游设备将会知道它接收的第一组16个像素属于第二图块(有效的图块)而不属于第一图块(无效的图块)。虽然本公开描述了特定方式的像素定序器,但是本公开设想了任何合适的像素定序器。
亮度校正块540在像素颜色值被发送到像素输出块550之前,对像素颜色值应用一个或更多个亮度校正和显示调整。这些显示调整可以包括抖动、凹视(foveation)、感知编码或一个或更多个亮度校正网格,以校正失真。在特定实施例中,亮度校正网格可以包括每个像素颜色值的标量值,该标量值被选择来基于整个帧、帧的子部分(诸如像素的行或对准的块(例如图块))、每个单独的像素颜色值或其任意组合来产生最优颜色值。
一种类型的亮度失真被称为波导校正。在特定实施例中,用于显示器170的透镜(例如扫描显示器的光学系统中的透镜)可以在透镜的面(face)上呈现平滑的变化。这种效果也可以在可以用作扫描显示器的发射器的LED面板中找到。因此,当用户观看显示器的不同部分时,透镜的变化可能导致亮度的轻微变化,甚至考虑到由眼睛移动引入的其他失真。这种类型的失真可以被提前测量和校准,因为透镜的面上的平滑变化不太可能随着使用而改变。然而,在包括扫描显示设备的特定显示器中,热量会给透镜带来额外的翘曲,其中大量的热量会导致塑性变形。应用波导校正的亮度校正网格可以被预先计算(例如,在校准过程期间),或者可以在检测到热量、任何其他效果时被动态计算。
另一种类型的亮度失真被称为LED列校正。在特定实施例中,显示器中的每列LED(或扫描显示器的发射器中的LED)的亮度可能稍微变化。换句话说,当你垂直遍历显示器时,亮度(至少在此效果中测量的亮度)是恒定的,但是当你水平遍历显示器时,亮度(至少在此效果中测量的亮度)可能会逐列变化。通常,这种变化可能很难检测到,因为尽管许多LED面板可能呈现出这种效果,但是LED以足够大的密度封装,并且在足够大的距离处被观看,使得眼睛自然地将亮度水平混合在一起。因为头戴式显示器与用户极为接近,所以这种变化可能更容易检测到。因此,每列LED可能需要校正,以便向用户显示的图像掩盖变化的列亮度水平。可以采取的一种校正方法是将每一列缩放到最大或最小的表示值,即缩放到最亮或最暗的列。这种校正可以在校准过程期间被确定,因为除非LED面板损坏,否则亮度变化不太可能随着时间的推移而显著变化。
另一种类型的亮度失真与LED在通电和被提供颜色指令时如何发光有关。因为显示引擎被配置成支持高帧刷新率,所以必须小心注意由LED的脉冲偏移引入的延迟。LED的脉冲偏移是指从LED通电时到LED达到全亮度的时间点的时间量。类似的考虑是LED从全亮度到完全断电所花费的时间量。在一些LED中,这遵循从关闭到全亮度的正弦曲线,但是也设想了其他模式。在特定实施例中,为了降低校准亮度校正网格的难度,可以假设每个LED具有近似相似的脉冲偏移时间。然而,在一些实施例中,脉冲偏移可以基于例如将要显示的特定颜色、制造差异(甚至在公差范围内)、显示器中LED的位置以及许多其他因素而不同。然而,该亮度校正有可能是静态计算的,因为效果可能不会随着使用而显著改变。
可能出现的另一种亮度失真与如何表示关于像素颜色值的信息(特别是如何存储亮度值)有关。在特定实施例中,各个LED(或它们的驱动器)可以接受多达八位的颜色亮度信息,允许颜色亮度的宽范围表现。因为显示引擎150针对用于显示的帧的快速且高效的处理,所以在一些实施例中,像素颜色值可能无法包含全部八位的颜色亮度信息(例如,多达256个不同的亮度值)。例如,产生的像素颜色值可以仅包括五位颜色亮度信息(例如,多达32个不同的亮度值),可能的亮度值减少87.5%。因此,可能需要失真网格来将亮度值移位成对可能的值的更细致表达。该网格可以预先计算,但是可以基于像素颜色值表示格式而变化。当显示引擎设想了与宽范围的表示的兼容性时,可能需要确定多个亮度校正网格,即使对于同一帧或行的像素也是如此。
亮度校正网格可以应用的其他效果与附加的图像后处理技术有关。一种这样的技术是抖动。抖动涉及对信号应用随机过滤器,目的是使信号的值平滑。在图像处理中,抖动可用于使亮度和色彩饱和度值平滑。从形式上来说,抖动使由于试图用少量信息表示颜色而导致的亮度颜色的量化平滑。这防止了图像中出现某些类型的图案,诸如颜色或亮度条带(banding)。抖动也可以提高颜色分布的平滑度。已经设计了许多抖动算法,并且可以体现在亮度校正网格中。亮度校正网格可以基于正准备显示的帧(或帧的一部分)来确定。例如,对于相对于另一种颜色来说具有显著数量的一种颜色的帧,或者对于与具有许多不同颜色的帧相比具有显著数量的相似颜色的帧,可能需要不同程度的抖动。
另一种后处理校正被称为sRGB或感知压缩。人眼不会以线性方式体验亮度,也就是说,感知到的两个亮度级别之间的亮度变化并不总是等于实际亮度差异。具体来说,相比亮色,人眼更能分辨深色。相关地,为了引起期望的感知的亮度变化,人眼可能需要暴露于取决于初始亮度值的实际亮度的不同变化。被称为sRGB的颜色标准规定了在相等的感知步长(step)和相等的线性光步长之间映射的传递函数。这种编码允许使在相同量的信息中可以存储的不同强度在感知上最大化。在线性光值和sRGB值之间的转换可以用离散函数表示,该离散函数可以在亮度校正网格中被编码,并被应用于尚未在sRGB压缩中表示的所有像素颜色值。尽管本公开描述了特定方式的亮度校正,但是本公开设想了任何合适的方式的亮度校正。
另一种效果被称为凹式渲染。在凹式渲染中,显示引擎150可以利用这样的事实,即虽然当特征在用户的焦点或注视点处或附近时,眼睛能够详细确定特征,但是随着离焦点的距离减小,更难确定细节。如上所述,眼睛跟踪器可以通过控制块200向显示引擎150报告用户的焦点。接下来,像素块400可以使用该信息以远离用户的焦点的像素颜色值的较高保真度来渲染对应于用户的焦点的像素颜色值。所得图案可以由显示块500接收,并且可以作为中央凹图案被存储在中央凹图案存储器525中。中央凹图案可以由像素块400直接传递到显示块,可以通过控制块200的共享存储器240传递,可以由微控制器230或某个其他组件计算,或者可以以任何其他合适的方式生成。显示块500可以使用中央凹图案来进一步控制像素颜色值在被准备用于显示时所使用的保真度程度。凹式渲染可用于降低对与远离用户的焦点的像素定位对应的像素颜色值应用的亮度校正程度。这可以以连续的方式(例如,通过对中央凹环之间的质量等级进行插值)指定,或者以阈值为基础(例如,如果像素超过某个距离,则选择特定的渲染质量等级)指定。
亮度校正块540可以从亮度网格存储器545中检索一个或更多个亮度校正网格。亮度网格存储器可以包括由控制块200的微控制器210加载的一个或更多个亮度校正网格。亮度校正网格可以包括为16×16图块的每个角像素存储的标量亮度校正值。亮度校正块540可以使用这些角值,对内部像素的值进行插值。在特定实施例中,亮度校正网格可以为图块或整个显示器的每个像素指定标量亮度校正值。亮度校正块540可以通过将来自亮度校正网格的适当值与从像素缓冲存储器510接收的像素颜色值相乘来确定像素颜色值的最终强度。该过程可以针对像素颜色值的每个颜色通道单独执行(例如,一次针对红色通道,一次针对绿色通道,以及一次针对蓝色通道)。例如,给定亮度校正网格指定了用于像素的红色通道Pr、绿色通道Pg和蓝色通道Pb的亮度校正值Br、Bg、Bb,可以通过等式Pr’=Pr×Br得出红色通道的最终像素颜色值Pr′。绿色通道和蓝色通道可以通过类似的方法得出最终像素颜色值。本公开设想了给定亮度校正网格和像素颜色值的用于确定最终像素颜色值的任何合适的方法。
在应用亮度校正网格之后,所得的像素颜色值被发送到像素输出块550。根据显示模式,像素输出块550可以将像素颜色值发送到显示器170、显示器的驱动器或所需的附加组件。作为示例,像素输出块550可以以特定顺序发送像素颜色值,以便于扫描显示设备的操作。以这种模式,像素输出块550可以首先发送对应于显示器的左边缘到显示器的中心的像素颜色值,接着发送对应于显示器的右边缘到中心的像素颜色值,随着每行的完成,从顶部向底部移动。还设想了任何其他合适的显示模式。作为另一个示例,像素输出块550可以以特定格式发送像素颜色值,以便于附加组件的操作。像素输出块550可以发送报头,该报头具有描述与随后的像素颜色值对应的图块的信息。像素输出块550可以支持各种像素颜色值格式化选项,如显示器170或其他组件的要求可以规定的。附加组件可以包括单独的芯片,其用于定制后端颜色处理(backend color processing)或支持显示器的更宽的接口,以优化显示速度或保真度。虽然本公开描述了以特定方式输出像素,但是本公开设想了以任何合适的方式输出像素。
图9示出了使用人工现实系统100的显示引擎150生成图形的示例方法900。该方法可以在步骤910开始,在步骤910,显示引擎150的控制块200可以从主渲染组件120接收一个或更多个表面。表面可以是从使用3D模型(例如,使用基于多边形的渲染技术)渲染的2D图像并且从特定视点(例如,在时间t0时用户的视点)生成的对象图元,其指定了表面在人工现实场景中的定位数据和纹理数据。控制块200可以将表面纹理数据(例如,一个或更多个纹素阵列)经由存储器控制器加载到纹素存储器220中。控制块200可以接收其他图形生成控制数据,并将该数据存储在共享存储器240中。控制块200可以启动显示引擎150的图形生成。在步骤930,显示引擎150的变换块300可以确定对应于光线(或光线束)与表面的相交的图块-表面对,该光线(或光线束)对应于显示器170的一个或更多个像素。变换块200可以使用为对准像素的阵列(“图块”)生成的光线束来执行光线投射。可以从用户的更新的当前视点(例如,在上面提到的时间t0之后的时间t1)投射光线。通过将光线束投射到人工现实场景中并确定光线束是否与表面相交,变换块300可以确定表面的可见性。变换块300可以准备供像素块400使用的图块-表面对。在步骤940,显示引擎150的像素块400可以使用图块-表面对中的表面的表面纹理数据来生成显示器170的像素的像素颜色值。像素块400可以检索与表面相关联的图块阵列的对准纹素。像素块400可以将这些纹素与特定像素值相关联,并且对纹素颜色值执行双线性插值以确定像素颜色值。在步骤950,显示引擎150的显示块500可以生成显示器170的每个像素的像素输出值。显示块500可以根据显示器170的需要,对像素颜色值进行重新排序。在步骤960,显示引擎150可以通过显示器170(诸如扫描显示器)向用户提供用于显示的输出像素值。在步骤970,显示引擎150的控制块200可以确定它是否已经从主渲染组件120接收到更新的表面。如果否,则控制块200可以使显示引擎150返回到步骤930,并且使用旧的表面数据(例如,与时间t0相关联的表面数据)但是使用当前用户视点来重复图形生成。例如,控制块200可以接收需要重新计算图块-表面对、像素颜色值和像素输出的用户视点或位置信息。该过程可以重复,直到接收到新的表面(例如,在从与时间t0相关联的表面开始生成几帧之后的时间tn)。在接收到新的表面之后,控制块200可以使显示引擎150返回到步骤910,并且使用更新的表面数据再次进行图形生成过程。在适当的情况下,特定实施例可以重复图9的方法的一个或更多个步骤。虽然本公开描述并示出了图9的方法的特定步骤以特定顺序发生,但是本公开设想了图9的方法的任何合适的步骤以任何合适的顺序发生。此外,虽然本公开描述并示出了执行图9的方法的特定步骤的特定组件、设备或系统,但是本公开设想了执行图9的方法的任何合适步骤的任何合适的组件、设备或系统的任何合适的组合。
图10示出了使用显示引擎150来确定虚拟场景中表面的可见性的示例方法1000。该方法可以在步骤1010开始,在步骤1010,显示引擎150的变换块300的光线投射器310可以准备对应于显示器170的对准像素阵列(“图块”)的一个或更多个光线。例如,光线投射器310可以准备对应于一个图块的一个或更多个像素或图块的四个角的光线束,或者对应于整个图块的单个光线。在步骤1020,光线投射器310可以将光线投射到包括一个或更多个表面的人工现实场景中。光线投射器310可以从用户的视点开始投射光线通过对应于显示器170的屏幕。在步骤1030,变换块300的扭曲块320可以将一个或更多个失真网格应用于每个投射光线,以指定各个光线进入虚拟场景的轨迹。失真网格可以被配置成校正由于显示器170的制造或设计而可能发生的一个或更多个几何失真。失真网格可以包括存储在扭曲存储器325或共享存储器240中的查找表,其指示光线应该经历的失真程度。失真网格可以指定光线束的角光线(corner ray)的失真程度。失真网格可以指定与特定颜色通道相关联的光线的失真程度以及其他颜色通道的偏移。在步骤1040,变换块300的边界比较块330可以确定每条投射光线束是否与人工现实场景中的表面相交。边界比较块330可以把由光线束表示的图块的边界框与表面的边界框进行比较。如果光线束不与表面相交(例如,它们的边界框不相交),则在步骤1050,变换块300可以丢弃与该光线束相关联的图块(例如,不处理被丢弃图块的像素值)。如果光线束确实与表面相交,则在步骤1060,边界比较块330可以将相交的表面与通过光线束表示的图块相关联。边界比较块330可以确定相交的定位。在步骤1070,变换块300的变换引擎340可以将相交的定位从视图空间坐标系转换成图块-表面对的表面纹理的坐标系。在适当的情况下,特定实施例可以重复图10的方法的一个或更多个步骤。虽然本公开描述并示出了图10的方法的特定步骤以特定顺序发生,但是本公开设想了图10的方法的任何合适的步骤以任何合适的顺序发生。此外,虽然本公开描述并且示出了用于确定虚拟场景中表面的可见性的、包括图10的方法的特定步骤的示例方法,但是本公开设想了用于确定虚拟场景中表面的可见性的、包括任何合适的步骤的任何合适的方法,在适当的情况下,该任何合适的步骤可以包括图10的方法的所有步骤、一些步骤或者不包括图10的方法的步骤。此外,虽然本公开描述并示出了执行图10的方法的特定步骤的特定组件、设备或系统,但是本公开设想了执行图10的方法的任何合适步骤的任何合适的组件、设备或系统的任何合适的组合。
图11示出了用于准备由显示引擎150输出的像素颜色值的示例方法1100。该方法可以在步骤1110开始,其中显示引擎150的显示块500可以接收像素颜色值。例如,显示块500可以从显示引擎150的像素块400接收像素颜色值。在步骤1120,显示块500可以将像素颜色值加载到一个或更多个行缓冲器505中。在特定实施例中,显示块500可以将像素颜色值加载到双行像素缓冲存储器510中。显示块500可以将与像素颜色值相关联的附加数据写入相关的双行缓冲器(诸如字和图块元数据存储器515以及凹入图案存储器525)中。当这些值被加载到行缓冲器505中时,它们可以按图块排序(例如,这些值仍然反映16×16像素的对准)。在步骤1130,可以以面向扫描线的顺序从行缓冲器505读取像素颜色值(以及可选的其他相关数据)。显示器170可以是扫描显示器,其要求像素颜色值以特定模式(例如,逐个像素行地)呈现,而不是在单个帧一起呈现。可以以反映该模式的方式读取像素颜色值(例如,在前进到下一行之前读取一行上的所有像素颜色值)。在步骤1140,像素定序器530可以确定正在使用哪个像素排序模式。像素排序模式可以确定关于像素颜色值应该如何呈现给显示器170的附加细节。如果像素排序模式是面向像素的模式,则在步骤1150,像素定序器530可以使得显示器的所有像素的值被读入亮度校正块540,而不管是否存在有效的相关像素颜色值。如果像素排序模式是面向图块的模式,则在步骤1160,像素定序器可以从图块元数据存储器515读取图块元数据,并确定加载到行缓冲器505中的每个图块是否包括有效的像素颜色值。如果给定图块缺少有效的像素颜色值,当从像素存储器510读取像素时,像素定序器530可以绕过该图块的像素。
在步骤1170,像素定序器530可以使得将要由显示块500输出的像素(例如,与有效图块相关联的像素)的像素颜色值被读入显示块500的亮度校正块540。亮度校正块540可以将一个或更多个亮度校正网格应用于像素颜色值。亮度校正网格可以是存储在亮度网格存储器545中的阵列或查找表,其包括所选择的图块(或显示器)的一个或更多个像素的标量值,以将该像素调整到最佳亮度。例如,亮度校正网格可以指定图块的角像素的亮度校正值。在将要应用于图块的内部像素的亮度校正值读入亮度校正块540时,亮度校正块540随后可以对这些亮度校正值进行插值。在颜色通道的基础上,亮度校正网格可以指定值(例如,一个值用于红色通道的像素颜色值、一个值用于绿色通道,并且一个值用于蓝色通道)。亮度校正块540可以为每个通道应用亮度校正值。为了对像素应用亮度校正值,亮度校正块540可以将像素颜色值与亮度校正值相乘。所得像素颜色是像素输出值。亮度校正块540可以将像素输出值发送到像素输出块550。在步骤1180,像素输出块550可以最终确定像素输出值,并将像素颜色值提供给显示器170。在适当的情况下,特定实施例可以重复图11的方法的一个或更多个步骤。虽然本公开描述并示出了图11的方法的特定步骤以特定顺序发生,但是本公开设想了图11的方法的任何合适的步骤以任何合适的顺序发生。此外,虽然本公开描述并示出了用于准备像素颜色值以供输出的、包括图11的方法的特定步骤的示例方法,但是本公开设想了用于准备像素颜色值以供输出的、包括任何合适的步骤的任何合适的方法,在适当的情况下,该任何合适的步骤可以包括图11的方法的所有步骤、一些步骤或者不包括图11的方法的步骤。此外,虽然本公开描述并示出了执行图11的方法的特定步骤的特定组件、设备或系统,但是本公开设想了执行图11的方法的任何合适步骤的任何合适的组件、设备或系统的任何合适的组合。
图12示出了示例计算机系统1200。在特定实施例中,一个或更多个计算机系统1200执行本文描述或示出的一个或更多个方法的一个或更多个步骤。在特定实施例中,一个或更多个计算机系统1200提供本文描述或示出的功能。在特定实施例中,在一个或更多个计算机系统1200上运行的软件执行本文描述或示出的一个或更多个方法的一个或更多个步骤,或者提供本文描述或示出的功能。特定实施例包括一个或更多个计算机系统1200的一个或更多个部分。在本文,在适当的情况下,对计算机系统的引用可以包括计算设备,反之亦然。此外,在适当的情况下,对计算机系统的引用可以包括一个或更多个计算机系统。
本公开设想了任何合适数量的计算机系统1200。本公开设想了计算机系统1200采取任何合适的物理形式。作为示例而不是作为限制,计算机系统1200可以是嵌入式计算机系统、片上系统(SOC)、单板计算机系统(SBC)(例如,模块上计算机(COM)或模块上系统(SOM))、台式计算机系统、膝上型或笔记本计算机系统、交互式信息亭、大型机、计算机系统网状网、移动电话、个人数字助理(PDA)、服务器、平板计算机系统、增强/虚拟现实设备、或者这些系统的两个或更多个的组合。在适当的情况下,计算机系统1200可以包括一个或更多个计算机系统1200;是整体式的或分布式的;跨越多个位置;跨越多台机器;跨越多个数据中心;或者驻留在云中,云可以包括在一个或更多个网络中的一个或更多个云组件。在适当的情况下,一个或更多个计算机系统1200可以在没有实质性空间或时间限制的情况下执行本文描述或示出的一个或更多个方法的一个或更多个步骤。作为示例而不是作为限制,一个或更多个计算机系统1200可以实时地或以批处理模式来执行本文描述或示出的一个或更多个方法的一个或更多个步骤。在适当的情况下,一个或更多个计算机系统1200可以在不同的时间或在不同的位置处执行本文描述或示出的一个或更多个方法的一个或更多个步骤。
在特定实施例中,计算机系统1200包括处理器1202、存储器1204、存储装置1206、输入/输出(I/O)接口1208、通信接口1210和总线1212。尽管本公开描述并示出了具有在特定布置中的特定数量的特定组件的特定计算机系统,但是本公开设想了具有在任何合适布置中的任何合适数量的任何合适组件的任何合适的计算机系统。
在特定实施例中,处理器1202包括用于执行指令(例如构成计算机程序的那些指令)的硬件。作为示例而不是作为限制,为了执s行指令,处理器1202可以从内部寄存器、内部高速缓存、存储器1204或存储装置1206中检索(或取回)指令;将他们解码并执行它们;以及然后将一个或更多个结果写到内部寄存器、内部高速缓存、存储器1204或存储装置1206。在特定实施例中,处理器1202可以包括用于数据、指令或地址的一个或更多个内部高速缓存。在适当的情况下,本公开设想了处理器1202包括任何合适数量的任何合适的内部高速缓存。作为示例而不是作为限制,处理器1202可以包括一个或更多个指令高速缓存、一个或更多个数据高速缓存、以及一个或更多个转译后备缓冲器(TLB)。在指令高速缓存中的指令可以是在存储器1204或存储装置1206中的指令的副本,并且指令高速缓存可以加速处理器1202对那些指令的检索。在数据高速缓存中的数据可以是:在存储器1204或存储装置1206中的数据的副本,用于使在处理器1202处执行的指令进行操作;在处理器1202处执行的先前指令的结果,用于由在处理器1202处执行的后续指令访问或者用于写到存储器1204或存储装置1206;或其他合适的数据。数据高速缓存可以加速由处理器1202进行的读或写操作。TLB可以加速关于处理器1202的虚拟地址转译。在特定实施例中,处理器1202可以包括用于数据、指令或地址的一个或更多个内部寄存器。在适当的情况下,本公开设想了处理器1202包括任何合适数量的任何合适的内部寄存器。在适当的情况下,处理器1202可以包括一个或更多个算术逻辑单元(ALU);是多核处理器;或者包括一个或更多个处理器1202。尽管本公开描述并示出了特定的处理器,但是本公开设想了任何合适的处理器。
在特定实施例中,存储器1204包括用于存储用于使处理器1202执行的指令或用于使处理器1202操作的数据的主存储器。作为示例而不是作为限制,计算机系统1200可以将指令从存储装置1206或另一个源(例如,另一个计算机系统1200)加载到存储器1204。处理器1202然后可以将指令从存储器1204加载到内部寄存器或内部高速缓存。为了执行指令,处理器1202可以从内部寄存器或内部高速缓存中检索指令并将它们解码。在指令的执行期间或之后,处理器1202可以将一个或更多个结果(其可以是中间结果或最终结果)写到内部寄存器或内部高速缓存。处理器1202然后可以将这些结果中的一个或更多个写到存储器1204。在特定实施例中,处理器1202仅执行在一个或更多个内部寄存器或内部高速缓存中或在存储器1204(而不是存储装置1206或其他地方)中的指令,并且仅对在一个或更多个内部寄存器或内部高速缓存中或在存储器1204(而不是存储装置1206或其他地方)中的数据进行操作。一个或更多个存储器总线(其可以各自包括地址总线和数据总线)可以将处理器1202耦合到存储器1204。如下所述,总线1212可以包括一个或更多个存储器总线。在特定实施例中,一个或更多个存储器管理单元(MMU)驻留在处理器1202和存储器1204之间,并且便于由处理器1202请求的对存储器1204的访问。在特定实施例中,存储器1204包括随机存取存储器(RAM)。在适当的情况下,该RAM可以是易失性存储器。在适当的情况下,该RAM可以是动态RAM(DRAM)或静态RAM(SRAM)。此外,在适当的情况下,该RAM可以是单端口RAM或多端口RAM。本公开设想了任何合适的RAM。在适当的情况下,存储器1204可以包括一个或更多个存储器1204。尽管本公开描述并示出了特定的存储器,但是本公开设想了任何合适的存储器。
在特定实施例中,存储装置1206包括用于数据或指令的大容量存储装置。作为示例而不是作为限制,存储装置1206可以包括硬盘驱动器(HDD)、软盘驱动器、闪存、光盘、磁光盘、磁带或通用串行总线(USB)驱动器、或这些中的两个或更多个的组合。在适当的情况下,存储装置1206可以包括可移动或不可移动(或固定)介质。在适当的情况下,存储装置1206可以在计算机系统1200的内部或外部。在特定实施例中,存储装置1206是非易失性固态存储器。在特定实施例中,存储装置1206包括只读存储器(ROM)。在适当的情况下,该ROM可以是掩模编程ROM、可编程ROM(PROM)、可擦除PROM(EPROM)、电可擦除PROM(EEPROM)、电可变ROM(EAROM)、或闪存、或这些中的两个或更多个的组合。本公开设想了采用任何合适的物理形式的大容量存储装置1206。在适当的情况下,存储装置1206可以包括便于在处理器1202和存储装置1206之间的通信的一个或更多个存储装置控制单元。在适当的情况下,存储装置1206可以包括一个或更多个存储装置1206。尽管本公开描述并示出了特定的存储装置,但是本公开设想了任何合适的存储装置。
在特定实施例中,I/O接口1208包括为在计算机系统1200和一个或更多个I/O设备之间的通信提供一个或更多个接口的硬件、软件或两者。在适当的情况下,计算机系统1200可以包括这些I/O设备中的一个或更多个。这些I/O设备中的一个或更多个可以实现在人和计算机系统1200之间的通信。作为示例而不是作为限制,I/O设备可以包括键盘、小键盘、麦克风、监视器、鼠标、打印机、扫描仪、扬声器、静态摄像机、触笔、平板计算机、触摸屏、跟踪球、视频摄像机、另一个合适的I/O设备、或这些中的两个或更多个的组合。I/O设备可以包括一个或更多个传感器。本公开设想了任何合适的I/O设备以及用于它们的任何合适的I/O接口1208。在适当的情况下,I/O接口1208可以包括使处理器1202能够驱动这些I/O设备中的一个或更多个的一个或更多个设备或软件驱动器。在适当的情况下,I/O接口1208可以包括一个或更多个I/O接口1208。尽管本公开描述并示出了特定的I/O接口,但是本公开设想了任何合适的I/O接口。
在特定实施例中,通信接口1210包括提供用于在计算机系统1200和一个或更多个其他计算机系统1200或一个或更多个网络之间的通信(例如,基于包的通信)的一个或更多个接口的硬件、软件或两者。作为示例而不是作为限制,通信接口1210可以包括用于与以太网或其他基于有线的网络进行通信的网络接口控制器(NIC)或网络适配器,或用于与无线网络(例如Wi-Fi网络)进行通信的无线NIC(WNIC)或无线适配器。本公开设想了任何合适的网络和用于它的任何合适的通信接口1210。作为示例而不是作为限制,计算机系统1200可以与自组织网络、个域网(PAN)、局域网(LAN)、广域网(WAN)、城域网(MAN)或互联网的一个或更多个部分、或这些中的两个或更多个的组合进行通信。这些网络中的一个或更多个的一个或更多个部分可以是有线的或无线的。作为示例,计算机系统1200可以与无线PAN(WPAN)(例如,蓝牙WPAN)、WI-FI网络、WI-MAX网络、蜂窝电话网络(例如,全球移动通信系统(GSM)网络)、或其他合适的无线网络、或这些中的两个或更多个的组合进行通信。在适当的情况下,计算机系统1200可以包括用于这些网络中的任一个的任何合适的通信接口1210。在适当的情况下,通信接口1210可以包括一个或更多个通信接口1210。尽管本公开描述并示出了特定的通信接口,但是本公开设想了任何合适的通信接口。
在特定实施例中,总线1212包括将计算机系统1200的组件耦合到彼此的硬件、软件或两者。作为示例而不是作为限制,总线1212可以包括加速图形端口(AGP)或其他图形总线、扩展工业标准体系结构(EISA)总线、前端总线(FSB)、HYPERTRANSPORT(HT)互连、工业标准体系结构(ISA)总线、INFINIBAND互连、低引脚数(LPC)总线、存储器总线,微通道体系结构(MCA)总线、外围部件互连(PCI)总线、PCI-Express(PCIe)总线、串行高级技术附件(SATA)总线、视频电子标准协会本地(VLB)总线、或任何其他合适的总线、或这些中的两个或更多个的组合。在适当的情况下,总线1212可以包括一个或更多个总线1212。尽管本公开描述并示出了特定总线,但是本公开设想了任何合适的总线或互连。
在本文,在适当的情况下,一个或更多个计算机可读非暂时性存储介质可以包括一个或更多个基于半导体的或其他集成电路(IC)(例如,现场可编程门阵列(FPGA)或专用IC(ASIC))、硬盘驱动器(HDD)、混合硬盘驱动器(HHD)、光盘、光盘驱动器(ODD)、磁光盘、磁光盘驱动器、软盘、软盘驱动器(FDD)、磁带、固态驱动器(SSD)、RAM驱动器、安全数字(SECURE DIGITAL)卡或驱动器、任何其他合适的计算机可读非暂时性存储介质、或这些中的两个或更多个的任何合适组合。在适当的情况下,计算机可读非暂时性存储介质可以是易失性的、非易失性的或者易失性和非易失性的组合。
本文中,除非另有明确指示或通过上下文另有指示,否则“或”是包括一切的而非排他性的。因此在本文,除非另有明确指示或通过上下文另有指示,否则“A或B”意指“A、B或两者”。此外,除非另有明确指示或通过上下文另有指示,否则“和”既是联合的又是各自的。因此在本文,除非另有明确指示或通过上下文另有指示,否则“A和B”意指“A和B,联合地或各自地”。
本公开的范围包括本领域中的普通技术人员将理解的对本文描述或示出的示例实施例的所有改变、替换、变化、变更和修改。本公开的范围不限于本文描述或示出的示例实施例。此外,尽管本公开将本文的相应实施例描述并示为包括特定的组件、元件、特征、功能、操作或步骤,但是这些实施例中的任何一个可以包括本领域中的普通技术人员将理解的在本文任何地方描述或示出的任何组件、元件、特征、功能、操作或步骤的任何组合或置换。此外,在所附权利要求中对适合于、被布置成、能够、被配置成、实现来、可操作来、或操作来执行特定功能的装置或系统或装置或系统的组件的引用包括该装置、系统、组件,无论它或那个特定功能是否被激活、开启或解锁,只要该装置、系统或组件是这样被调整、被布置、使能够、被配置、被实现、可操作的、或操作的。此外,尽管本公开将特定实施例描述或示为提供特定优点,但是特定实施例可以提供这些优点中的一些、全部或不提供这些优点。
Claims (15)
1.一种方法,包括由计算系统:
访问人工现实场景的一个或更多个表面,其中,所述一个或更多个表面是基于以第一速率渲染的所述人工现实场景的一个或更多个图像并且基于第一观看位置生成的;
以高于所述第一速率的第二速率生成子帧,其中,所述子帧中的每个子帧通过以下方式生成:
确定第二观看位置;
确定从所述第二观看位置看的所述人工现实场景的所述一个或更多个表面的可见性;
基于所确定的所述一个或更多个表面的可见性,生成对应于显示器的输出位置的该子帧的颜色值;以及
提供该子帧的颜色值用于显示。
2.根据权利要求1所述的方法,其中,确定从所述第二观看位置看的所述人工现实场景的所述一个或更多个表面的可见性包括:
基于所述第二观看位置,生成用于投射到所述人工现实场景中的光线;
对所述光线应用几何变换,以修改所述光线进入所述人工现实场景的相应轨迹;以及
基于所述光线的修改后的轨迹,确定所述光线与所述人工现实场景中的一个或更多个表面的相交点;优选地,其中,基于所确定的所述一个或更多个表面的可见性,生成对应于所述显示器的输出位置的所述子帧的颜色值包括从以下各项中选择的一个或更多个:
将所述相交点的坐标映射到相交表面的表面纹理的表面坐标,从所述相交表面的表面纹理数据中访问在所述表面坐标处的颜色值,基于所述相交点对所访问的颜色值进行插值;以及
对所述颜色值应用一个或更多个图形调整,所述图形调整包括:亮度调整、抖动、凹式渲染或感知压缩渲染。
3.根据权利要求2所述的方法,其中,所述光线对应于从以下各项中选择的一个或更多个:显示系统的像素;显示系统的像素的颜色通道。
4.根据权利要求1、权利要求2或权利要求3所述的方法,其中,所述一个或更多个表面包括所述表面的纹理数据和所述表面在所述人工现实场景中的位置的定位数据。
5.根据权利要求1至4中任一项所述的方法,其中,所述人工现实场景的所述一个或更多个图像由不同于所述计算系统的另一计算系统渲染,并且可选地,其中,所述计算系统与所述另一计算系统无线通信。
6.根据权利要求1至5中任一项所述的方法,其中,所述计算系统被结合到头戴式显示单元中;和/或其中,所述计算系统包括用于生成所述子帧的显示引擎,并且其中,所述显示引擎包括:
变换块,所述变换块用于确定从所述第二观看位置看的所述一个或更多个表面的可见性;
像素块,所述像素块用于执行颜色值的插值;和
显示块,所述显示块用于对颜色值应用图形调整。
7.根据权利要求1至6中任一项所述的方法,其中,基于从以下项接收的数据,确定所述第二观看位置:
眼睛跟踪组件;或者
运动跟踪组件。
8.一个或更多个计算机可读非暂时性存储介质,其体现软件,所述软件在被执行时可操作来:
访问人工现实场景的一个或更多个表面,其中,所述一个或更多个表面是基于以第一速率渲染的所述人工现实场景的一个或更多个图像并且基于第一观看位置生成的;
以高于所述第一速率的第二速率生成子帧,其中,所述子帧中的每个子帧通过以下方式生成:
确定第二观看位置;
确定从所述第二观看位置看的所述人工现实场景的所述一个或更多个表面的可见性;
基于所确定的所述一个或更多个表面的可见性,生成对应于显示器的输出位置的该子帧的颜色值;以及
提供该子帧的颜色值用于显示。
9.根据权利要求8所述的介质,其中,可操作来确定从所述第二观看位置看的所述人工现实场景的所述一个或更多个表面的可见性的所述软件进一步可操作来:
基于所述第二观看位置,生成用于投射到所述人工现实场景中的光线;
对所述光线应用几何变换,以修改所述光线进入所述人工现实场景的相应轨迹;以及
基于所述光线的修改后的轨迹,确定所述光线与所述人工现实场景中的一个或更多个表面的相交点。
10.根据权利要求9所述的介质,其中,可操作来基于所确定的所述一个或更多个表面的可见性,生成对应于所述显示器的输出位置的所述子帧的颜色值的所述软件进一步可操作来:
将所述相交点的坐标映射到相交表面的表面纹理的表面坐标;
从所述相交表面的表面纹理数据中访问在所述表面坐标处的颜色值;以及
基于所述相交点,对所访问的颜色值进行插值。
11.根据权利要求9或权利要求10所述的介质,其中,可操作来基于所确定的所述一个或更多个表面的可见性,生成对应于所述显示器的输出位置的所述子帧的颜色值的所述软件进一步可操作来对所述颜色值应用一个或更多个图形调整,所述图形调整包括:
亮度调整;
抖动;
凹式渲染;或者
感知压缩渲染。
12.一种系统,包括:
一个或更多个处理器;和
一个或更多个计算机可读非暂时性存储介质,其耦合到所述一个或更多个处理器并且包括指令,所述指令在由所述一个或更多个处理器执行时可操作来使所述系统:
访问人工现实场景的一个或更多个表面,其中,所述一个或更多个表面是基于以第一速率渲染的所述人工现实场景的一个或更多个图像并且基于第一观看位置生成的;
以高于所述第一速率的第二速率生成子帧,其中,所述子帧中的每个子帧通过以下方式生成:
确定第二观看位置;
确定从所述第二观看位置看的所述人工现实场景的所述一个或更多个表面的可见性;
基于所确定的所述一个或更多个表面的可见性,生成对应于显示器的输出位置的该子帧的颜色值;以及
提供该子帧的颜色值用于显示。
13.根据权利要求12所述的系统,其中,可操作来使所述系统确定从所述第二观看位置看的所述人工现实场景的所述一个或更多个表面的可见性的所述指令在由所述一个或更多个处理器执行时进一步可操作来使所述系统:
基于所述第二观看位置,生成用于投射到所述人工现实场景中的光线;
对所述光线应用几何变换,以修改所述光线进入所述人工现实场景的相应轨迹;以及
基于所述光线的修改后的轨迹,确定所述光线与所述人工现实场景中的一个或更多个表面的相交点。
14.根据权利要求13所述的系统,其中,可操作来使所述系统基于所确定的所述一个或更多个表面的可见性来生成对应于所述显示器的输出位置的所述子帧的颜色值的所述指令在由所述一个或更多个处理器执行时进一步可操作来使所述系统:
将所述相交点的坐标映射到相交表面的表面纹理的表面坐标;
从所述相交表面的表面纹理数据中访问在所述表面坐标处的颜色值;以及
基于所述相交点,对所访问的颜色值进行插值。
15.根据权利要求13或权利要求14所述的系统,其中,可操作来使所述系统基于所确定的所述一个或更多个表面的可见性来生成对应于所述显示器的输出位置的所述子帧的颜色值的所述指令在由所述一个或更多个处理器执行时进一步可操作来使所述系统对所述颜色值应用一个或更多个图形调整,所述图形调整包括:
亮度调整;
抖动;
凹式渲染;或者
感知压缩渲染。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201862755333P | 2018-11-02 | 2018-11-02 | |
US62/755,333 | 2018-11-02 | ||
US16/586,598 | 2019-09-27 | ||
US16/586,598 US11403810B2 (en) | 2018-11-02 | 2019-09-27 | Display engine for post-rendering processing |
PCT/US2019/058724 WO2020092477A1 (en) | 2018-11-02 | 2019-10-30 | Display engine for post-rendering processing |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113272872A true CN113272872A (zh) | 2021-08-17 |
Family
ID=70458833
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980087765.4A Pending CN113272872A (zh) | 2018-11-02 | 2019-10-30 | 用于后期渲染处理的显示引擎 |
Country Status (7)
Country | Link |
---|---|
US (5) | US11308681B1 (zh) |
EP (1) | EP3874469A1 (zh) |
JP (1) | JP7467437B2 (zh) |
KR (1) | KR20210087052A (zh) |
CN (1) | CN113272872A (zh) |
TW (1) | TWI810395B (zh) |
WO (1) | WO2020092477A1 (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102017213177A1 (de) * | 2017-07-31 | 2019-01-31 | Audi Ag | Verfahren zum Betreiben eines Bildschirms eines Kraftfahrzeugs sowie Kraftfahrzeug |
US11282259B2 (en) * | 2018-11-26 | 2022-03-22 | International Business Machines Corporation | Non-visual environment mapping |
US11089320B2 (en) | 2019-03-27 | 2021-08-10 | Nvidia Corp. | Adaptive pixel sampling order for temporally dense rendering |
EP4005201A1 (en) * | 2019-07-28 | 2022-06-01 | Google LLC | Methods, systems, and media for rendering immersive video content with foveated meshes |
KR20210096449A (ko) * | 2020-01-28 | 2021-08-05 | 삼성전자주식회사 | Hud 시스템에서 영상을 재생하는 방법 및 그 hud 시스템 |
US11295509B2 (en) | 2020-06-29 | 2022-04-05 | Imagination Technologies Limited | Intersection testing in a ray tracing system using multiple ray bundle intersection tests |
US11308683B2 (en) | 2020-06-29 | 2022-04-19 | Imagination Technologies Limited | Intersection testing in a ray tracing system using ray bundle vectors |
CN115885237A (zh) * | 2020-07-17 | 2023-03-31 | 惠普发展公司,有限责任合伙企业 | 头戴式显示器图像和中心凹区亮度计算 |
US11423520B2 (en) | 2020-10-30 | 2022-08-23 | Facebook Technologies, Llc. | Distortion-corrected rasterization |
US11402634B2 (en) * | 2020-12-30 | 2022-08-02 | Facebook Technologies, Llc. | Hand-locked rendering of virtual objects in artificial reality |
DE102021104346A1 (de) * | 2021-02-24 | 2022-08-25 | Robert Bosch Gesellschaft mit beschränkter Haftung | Verfahren zu einem Kompensieren von Projektionsfehlern bei einer Ausgabe von Bildern, System mit einer Recheneinheit zu einer Ausführung des Verfahrens und Computerprogramm |
CN116310243B (zh) * | 2023-05-24 | 2023-08-15 | 山东捷瑞数字科技股份有限公司 | 基于人工智能的ar防抖方法、系统、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101506849A (zh) * | 2006-06-27 | 2009-08-12 | 多摩-技术转让机关株式会社 | 可见性评估方法和评估系统 |
US20150029218A1 (en) * | 2013-07-25 | 2015-01-29 | Oliver Michael Christian Williams | Late stage reprojection |
CN106127843A (zh) * | 2016-06-16 | 2016-11-16 | 福建数博讯信息科技有限公司 | 三维虚拟场景的渲染方法和装置 |
CN107004299A (zh) * | 2014-09-30 | 2017-08-01 | Cae有限公司 | 渲染三维多边形网格的似然图像 |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6697063B1 (en) * | 1997-01-03 | 2004-02-24 | Nvidia U.S. Investment Company | Rendering pipeline |
US7012604B1 (en) * | 2002-09-12 | 2006-03-14 | Advanced Micro Devices, Inc. | System architecture for high speed ray tracing |
JP4734640B2 (ja) | 2006-02-10 | 2011-07-27 | 国立大学法人岐阜大学 | 仮想現実画像表示装置 |
JP2010092360A (ja) | 2008-10-09 | 2010-04-22 | Canon Inc | 画像処理システム、画像処理装置、収差補正方法及びプログラム |
US8446433B1 (en) * | 2009-06-12 | 2013-05-21 | Lucasfilm Entertainment Company Ltd. | Interactive visual distortion processing |
GB2470611B (en) * | 2009-06-25 | 2011-06-29 | Tv One Ltd | Apparatus and method for processing data |
US8570320B2 (en) | 2011-01-31 | 2013-10-29 | Microsoft Corporation | Using a three-dimensional environment model in gameplay |
US9142043B1 (en) * | 2011-06-24 | 2015-09-22 | Nvidia Corporation | System and method for improved sample test efficiency in image rendering |
US9292959B2 (en) * | 2012-05-16 | 2016-03-22 | Digizig Media Inc. | Multi-dimensional stacking with self-correction |
US9424685B2 (en) | 2012-07-31 | 2016-08-23 | Imagination Technologies Limited | Unified rasterization and ray tracing rendering environments |
US9619911B2 (en) * | 2012-11-13 | 2017-04-11 | Qualcomm Incorporated | Modifying virtual object display properties |
US9652893B2 (en) | 2014-04-29 | 2017-05-16 | Microsoft Technology Licensing, Llc | Stabilization plane determination based on gaze location |
US10438331B2 (en) * | 2014-06-26 | 2019-10-08 | Intel Corporation | Distortion meshes against chromatic aberrations |
US10089790B2 (en) | 2015-06-30 | 2018-10-02 | Ariadne's Thread (Usa), Inc. | Predictive virtual reality display system with post rendering correction |
US10962780B2 (en) * | 2015-10-26 | 2021-03-30 | Microsoft Technology Licensing, Llc | Remote rendering for virtual images |
US9832451B2 (en) | 2015-11-17 | 2017-11-28 | Survios, Inc. | Methods for reduced-bandwidth wireless 3D video transmission |
US10026212B2 (en) | 2015-11-20 | 2018-07-17 | Google Llc | Electronic display stabilization using pixel velocities |
US11010956B2 (en) * | 2015-12-09 | 2021-05-18 | Imagination Technologies Limited | Foveated rendering |
US10129523B2 (en) | 2016-06-22 | 2018-11-13 | Microsoft Technology Licensing, Llc | Depth-aware reprojection |
US20180005432A1 (en) * | 2016-06-29 | 2018-01-04 | AR You Ready LTD. | Shading Using Multiple Texture Maps |
KR102357273B1 (ko) * | 2016-08-22 | 2022-02-08 | 매직 립, 인코포레이티드 | 가상, 증강, 및 혼합 현실 시스템들 및 방법들 |
US10379611B2 (en) * | 2016-09-16 | 2019-08-13 | Intel Corporation | Virtual reality/augmented reality apparatus and method |
US11127110B2 (en) | 2017-03-01 | 2021-09-21 | Arm Limited | Data processing systems |
US10365709B2 (en) * | 2017-03-03 | 2019-07-30 | Microsoft Technology Licensing, Llc | MEMS scanning display device |
US10885711B2 (en) * | 2017-05-03 | 2021-01-05 | Microsoft Technology Licensing, Llc | Virtual reality image compositing |
US10713752B2 (en) * | 2017-06-09 | 2020-07-14 | Sony Interactive Entertainment Inc. | Temporal supersampling for foveated rendering systems |
US10755383B2 (en) * | 2017-09-29 | 2020-08-25 | Apple Inc. | Multi-space rendering with configurable transformation parameters |
US10699374B2 (en) * | 2017-12-05 | 2020-06-30 | Microsoft Technology Licensing, Llc | Lens contribution-based virtual reality display rendering |
-
2019
- 2019-09-27 US US16/586,614 patent/US11308681B1/en active Active
- 2019-09-27 US US16/586,598 patent/US11403810B2/en active Active
- 2019-09-27 US US16/586,629 patent/US11113867B1/en active Active
- 2019-10-30 WO PCT/US2019/058724 patent/WO2020092477A1/en unknown
- 2019-10-30 JP JP2021520547A patent/JP7467437B2/ja active Active
- 2019-10-30 EP EP19809219.9A patent/EP3874469A1/en active Pending
- 2019-10-30 CN CN201980087765.4A patent/CN113272872A/zh active Pending
- 2019-10-30 KR KR1020217016020A patent/KR20210087052A/ko not_active Application Discontinuation
- 2019-10-30 TW TW108139247A patent/TWI810395B/zh active
-
2022
- 2022-06-10 US US17/837,540 patent/US11640691B2/en active Active
-
2023
- 2023-04-05 US US18/296,326 patent/US20230245381A1/en active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101506849A (zh) * | 2006-06-27 | 2009-08-12 | 多摩-技术转让机关株式会社 | 可见性评估方法和评估系统 |
US20150029218A1 (en) * | 2013-07-25 | 2015-01-29 | Oliver Michael Christian Williams | Late stage reprojection |
CN107004299A (zh) * | 2014-09-30 | 2017-08-01 | Cae有限公司 | 渲染三维多边形网格的似然图像 |
CN106127843A (zh) * | 2016-06-16 | 2016-11-16 | 福建数博讯信息科技有限公司 | 三维虚拟场景的渲染方法和装置 |
Non-Patent Citations (2)
Title |
---|
BERNHARD REINERT, ET AL: "Proxy-guided Image-based Rendering for Mobile Devices", COMPUTER GRAPHICS FORUM, 31 October 2016 (2016-10-31), pages 1 - 10 * |
T. ISHIKAWA, ET AL: "Real-time generation of novel views of a dynamic scene using morphing and visual hull", EEE INTERNATIONAL CONFERENCE ON IMAGE PROCESSING 2005, 31 December 2005 (2005-12-31), pages 1 - 4 * |
Also Published As
Publication number | Publication date |
---|---|
TWI810395B (zh) | 2023-08-01 |
US11308681B1 (en) | 2022-04-19 |
TW202036482A (zh) | 2020-10-01 |
US11113867B1 (en) | 2021-09-07 |
US20200143585A1 (en) | 2020-05-07 |
KR20210087052A (ko) | 2021-07-09 |
US11403810B2 (en) | 2022-08-02 |
US20220366644A1 (en) | 2022-11-17 |
WO2020092477A1 (en) | 2020-05-07 |
EP3874469A1 (en) | 2021-09-08 |
WO2020092477A8 (en) | 2021-05-06 |
JP7467437B2 (ja) | 2024-04-15 |
US20230245381A1 (en) | 2023-08-03 |
US11640691B2 (en) | 2023-05-02 |
JP2022504931A (ja) | 2022-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11640691B2 (en) | Display engine for post-rendering processing | |
US11176901B1 (en) | Pan-warping and modifying sub-frames with an up-sampled frame rate | |
CN116897326A (zh) | 人工现实中虚拟对象的手部锁定渲染 | |
US11170577B2 (en) | Generating and modifying representations of objects in an augmented-reality or virtual-reality scene | |
US11862128B2 (en) | Systems and methods for foveated rendering | |
US11410272B2 (en) | Dynamic uniformity correction | |
US20230148279A1 (en) | Occlusion of Virtual Objects in Augmented Reality by Physical Objects | |
CN113454702A (zh) | 多投影仪显示架构 | |
US11557049B1 (en) | Interpolation optimizations for a display engine for post-rendering processing | |
CN113302658A (zh) | 并行纹理采样 | |
US11011123B1 (en) | Pan-warping and modifying sub-frames with an up-sampled frame rate | |
US20210090322A1 (en) | Generating and Modifying Representations of Objects in an Augmented-Reality or Virtual-Reality Scene | |
TW202226832A (zh) | 自適應範圍之包裝壓縮 | |
US20230237730A1 (en) | Memory structures to support changing view direction | |
EP4304170A1 (en) | Pixel block encoder capable of jointly encoding pixel channels |
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 |