科技魔方

Meta专利为AR/VR无序头部运动的渲染预测提出支持视图方向改变的储存器结构

AR/VR

2023年08月29日

  传统的AR/VR系统会根据用户的视图方向来渲染帧,而这主要是基于与前一帧相关的头部追踪数据预测的。但在渲染过程所需的一段时间内,系统很难准确地预测未来的视图方向。由于用户可能随时随意改变头部运动,很难准确预测未来10毫秒内用户的视线方向。这种在预测用户视角方向的不准确性可能会对渲染帧的质量产生负面影响。

  为了解决这个问题,Meta在名为“Memory structures to support changing view direction”的专利申请中提出了一种能够支持视图方向改变的储存器结构。

  系统的特定实施例可以基于眼/头追踪系统实时或近实时测量的用户视图方向,并以高帧率生成子帧。在High level,可以使用两个可选的储存器组织框架来将组合帧转换为多个子帧,而子帧可根据用户视图方向的变化进行调整。

  在第一储存器组织框架下,系统可根据大致视图方向移动缓冲存储器中存储的像素数据。例如,系统可以使用这种储存器架构为每个合成帧生成100个子帧,其帧率为90 Hz,从而得到9 kHz的子帧率。

  第二储存器组织框架下,系统可根据用户的大致视图方向移动用于读取帧缓冲区的地址偏移,并从帧缓冲区存储器中读取像素数据,从而生成新的子帧。例如,系统可以使用这种储存器架构为每个合成帧生成4个子帧,帧率为90hz,从而得到360 Hz的子帧率。

  为了通过移动帧缓冲区中的像素数据或移动读取偏移量来正确生成子帧以读取像素数据,根据用户的视图方向生成的合成帧和子帧可包括与视图平面均匀分布在角度空间的多个像素位置相对应的像素数据。

  然后,可以将像素数据存储在帧缓冲器中。当系统检测到用户的头部运动时,系统可以通过调整存储在帧缓冲区中的像素数据或根据用户随时间变化的视图方向调整像素数据的地址偏移量,以响应用户的头部运动并根据用户的大致视图方向成相应的子帧。

  用户的大致视图方向可以是由头部追踪系统测量的用户的实时或近实时视图方向,而不是基于前一帧的头部方向数据预测的视图方向。

  所述系统的特定实施例可以使用所述两种储存器架构中的任何一种来根据实时或近实时测量的用户视图方向以高帧率生成子帧。

  通过避免使用可能不准确且可能影响显示内容质量的预测视图方向,系统可以实现更好的显示质量,减少闪烁和闪烁伪影,并提供更好的用户体验。

  通过使用独立于主帧速率的更高子帧速率,系统可以允许LED在每个显示期间开启更长的显示时间,并且可以提高亮度并降低由于驱动电流水平降低而导致的功耗。

  通过基于实际LED位置和系统的畸变对像素值进行重新采样,系统可允许对帧畸变进行校正,并且因此提供改进的显示质量。

  通过使用独立的主帧速率和子帧速率,系统可以允许显示速率自适应用户头部运动量,并允许渲染速率自适应场景及其遮挡变化的速率,从而提供最佳性能和优化的计算资源分配。

  图2A示出了示例性系统架构200A。系统架构可以包括上游计算系统201、显示引擎202、帧缓冲器203和一个或两个显示芯片204A、204B。

  上游计算系统201可以是头显的计算单元或与头显通信的计算机。上游计算系统201可以基于要显示的AR/VR内容生成主帧211。主帧可以基于显示内容以主帧速率生成。上游计算系统201可以将主帧211传输到显示引擎202。显示引擎202可以基于所接收的主帧211生成或组合所述组合帧212,例如,使用光线投射和重采样方法。

  例如,显示引擎202可以将光线从视点投射到场景的一个或多个表面,以基于所投射的光线是否与所述表面相交来确定从所述视点可见哪个表面。

  然后,显示引擎可以使用重采样过程来确定纹理,再确定从视点查看的可见表面的像素值。因此,可以根据用户的最新视点和视图方向生成合成帧212。

  然而,合成帧212可以根据显示内容或/和计算资源并以渲染帧速率成,例如90hz。所以系统可能存在渲染帧率的上限。

  当用户的头部高速移动时,由于计算资源的限制,渲染帧率可能不足以赶上用户的头部运动。

  为了解决这个问题,可以将由显示引擎202生成的合成帧212存储在帧缓冲区203中。当用户头部移动时,系统可根据用户的视图方向以更高的子帧速率生成相应的子帧213。子帧213可以根据头部追踪系统实时或近实时测量的用户的视图方向,并通过移动用于读取帧缓冲区203的地址偏移量来生成。

  所述子帧213可以以远高于所述渲染帧速率212的子帧速率213生成。这样,系统可以将用于更新LED阵列的子帧速率与显示引擎用于渲染合成帧的渲染帧速率解耦,并且可以使用高子帧速率更新LED,而不需要显示引擎以如此高的帧速率重新渲染。

  在特定实施例中,当帧缓冲器位于承载LED阵列的硅芯片上时,系统可以在存储器阵列内移动像素以生成子帧。存储器的特定区域可用于为LED的特定Tile生成亮度。

  在特定实施例中,当帧缓冲器位于远离承载LED阵列的硅芯片的不同组件时,系统可以移动地址偏移量。其中,偏移量指定用于读取帧缓冲器以生成子帧的存储器阵列内原点的位置。

  存储器中的帧缓冲区位置可以随着x的变化在左/右方向上旋转,并且可以随着y的变化在上/下方向上旋转。值得注意的是,VR设备的帧缓冲区可以大于LED阵列,以允许随着头部移动而移动数据。

  图2B-2C示出示例系统架构200B和200C。在特定实施例中,系统可以使用像素存储器阵列和Tile处理器来在头部在显示帧期间旋转时计算LED阵列的亮度水平。

  处理器可位于LED阵列后面的显示硅芯片之上。每个Tile处理器可以仅访问存储在存储器阵列中靠近Tile处理器的存储器。存储在像素存储器中的像素数据可以在像素存储器中移位,使得每个Tile处理器需要的像素始终为本地。

  架构200B可以包括上游计算系统221、显示引擎222、分别位于220A和220B的显示芯片的两个帧缓冲器223A和223B,以及分别位于220A和220B的显示芯片的两个LED阵列224A和224B。

  所述帧缓冲器223A可用于生成用于更新所述LED阵列224A的子帧227A。所述帧缓冲器223B可用于生成用于更新所述LED阵列224B的子帧227B。

  显示引擎可以以相应的渲染帧速率生成合成帧。合成帧可以存储在各自的帧缓冲区中。然后,系统可以根据用户的视图方向移动存储在帧缓冲区中的像素数据以生成子帧。用于更新相应LED阵列的子帧可以以高于渲染帧速率的各自子帧速率生成。

  在一个实施例中,系统可以为主帧和子帧的速率支持灵活的或可变的显示帧速率。由于头部运动和对象运动/变化引起的遮挡变化可以在显示帧速率下计算。在100 fps时,用户可能看不到遮挡的变化。显示帧率不需要固定,但可以根据遮挡变化的幅度而变化。

  在特定实施例中,系统可以将像素数据帧加载到阵列处理器中,阵列处理器可以调整像素数据并以明显高于100 fps的子帧速率生成子帧,从而考虑用户视点角度的变化。

  在特定实施例中,系统可能遇到用户头部旋转速度快至300度/秒的情况。系统可以以高达100fps的加载速度将显示帧数据加载到像素存储器中。因此,每个显示帧可能有多达3度的视点角度变化。

  图3A示出具有均匀间隔像素的示例方案300A。像素阵列可以在视图平面302均匀间隔。用户的视图方向或视角可由垂直于视图平面302的视场中心线308表示。像素303、304、305可均匀分布于所述视图平面302。

  换句话说,像素303与304、304与305可以具有等于单位距离的相同距离。从视点301向每个像素投射光线,则三角形角度可以在阵列上变化。当射线靠近视场中心线308时,delta角可能较大,而当射线远离视场中心线308时,delta 角可能较小。对于90度的视场,delta角的方差可能是2:1。角度的切线可以增量地改变大小,并且像素可以分布在称为切线空间的空间中。

  图3B示出一个示例场景300B,其中视图方向旋转,并且系统尝试为旋转的视图平面313重用像素值。用户的视图方向316可以由垂直于旋转的视图平面313的向量线表示。可以扩展视图向量以显示为原始视图平面302计算的像素落在视图平面313的位置。

  换句话说,当视图平面302旋转到新的视图平面313时,系统可以尝试移动在视图平面302上

  均匀间隔的像素阵列中的像素值的位置,以表示从不同的视图方向或视角306观看的场景。

  例如,视图平面302的像素315可以向左移动3个像素,并且可以用于表示旋转视图平面313的最左像素,因为像素315可以落在视图平面313上最左像素321的位置。

  但如果视图平面302的像素314向左移动3个像素,并且用于表示旋转视图平面313的第二左像素,由于像素314落在与视图平面313上的第二左像素不同的像素位置322,系统可能在像素位置失配。

  换言之,像素阵列中的像素值的方向偏移可能导致旋转视图平面313的对应像素位置的不均匀分布,并且可能导致显示内容中的失真。

  在图3C示出的示例方案300C中,像素在角度空间而不是在视图平面中均匀间隔。在特定实施例中,系统可以使用具有像素阵列在角度空间中均匀间隔而不是在视图平面上均匀间隔的显示器。

  换句话说,在像素阵列中,阵列中相邻的像素对可以具有与单位角对应的相同空间角。在特定实施例中,系统可以从视点339以对应于角度空间的恒定增量角度投射光线,而不是在视图平面上使用均匀间隔像素。

  可以通过从视点339投射光线来确定视图平面330上的像素位置。彼此相邻的投射光线可以具有等于单位角的相同空间角。像素位置可以在视图平面330具有非均匀距离。

  例如,像素位置352和353之间的距离可以大于像素位置353和354之间的距离。距离中心点355较近的相邻像素之间可以具有较小的距离,距离中心点355较远的相邻像素之间可以具有较大的距离。

  视角可以由垂直于视角平面330的视场中心线356表示。像素可以沿视图平面330具有可变间距。因此,所述像素可以均匀间隔或分布在角度空间中,并且在所述视面330上可以具有非均匀分布模式。

  在图3D示出的示例方案300D中,视图平面330旋转,并且系统尝试重用像素值。用户的视图方向可以由垂直于旋转视图平面360的视场中心线365表示。像素位置沿着旋转的视图平面360可以是不等间距的,并且它们的间距可以与它们在视图平面330上的间距完全相同。因此,像素阵列的简单移动可能足以允许Tile处理器为垂直于视场中心线365的新视图方向旋转360度的视图平面生成新的像素阵列。

  例如,像素331、332和333可以向左移动2个像素单位,并可以落在视图平面360上像素361、362和363的像素位置上,因此,可以有效地重复使用以表示旋转视图平面360上的相应像素。同样的原理可以应用于像素数组中的所有其他像素。

  因此,系统可以根据用户的新视角方向简单地移动像素阵列中的像素值,从而沿着视场中心线365为新的视角方向生成新的像素阵列。在特定实施例中,系统可以根据用户的视图方向生成子帧,从而考虑用户的视角变化,但不考虑观看者与视图平面之间的距离变化。通过根据用户的视图方向对子帧进行校正或调整,系统依然能够能够提供最佳的显示质量和出色的用户体验。

  在图3D示出的示例方案300D中,视图平面330旋转,并且系统尝试重用像素值。用户的视图方向可以由垂直于旋转视图平面360的视场中心线365表示。像素位置沿着旋转的视图平面360可以是不等间距的,并且它们的间距可以与它们在视图平面330上的间距完全相同。

  因此,像素阵列的简单移动可能足以允许Tile处理器为垂直于视场中心线365的新视图方向旋转360度的视图平面生成新的像素阵列。例如,像素331、332和333可以向左移动2个像素单位,并可以落在视图平面360上像素361、362和363的像素位置上。所以,可以有效地重复使用以表示旋转视图平面360上的相应像素。

  图4A示出具有16×16像素与16×16切线空间网格相比较的示例角度空间像素阵列400A。

  在一个实施例中,系统可以产生角度空间像素阵列,如图4A中的点所示。角度空间像素阵列中的像素可以沿水平和垂直方向均匀地间隔在角度空间中。换句话说,沿垂直或水平方向的相邻像素在角度空间中可以具有相同的空间角度。像素的位置可以使用从用户的视点到视图平面的光线投射过程来确定。因此,像素位置可以不与切线空间网格401对齐,其网格单元和交点在视图平面上均匀间隔。

  图4B示出与16×16切线空间网格相比具有24×24像素的示例角度空间像素阵列400B。

  在一个实施例中,系统可以产生角度空间像素阵列,如图4B中的点所示。角度空间像素阵列中的像素可以沿水平和垂直方向均匀地间隔在角度空间中。换句话说,沿垂直或水平方向的相邻像素在角度空间中可以具有相同的空间角度。像素的位置可以使用从用户的视点到视图平面的光线投射过程来确定。因此,像素位置可以不与切线空间网格411对齐,其网格单元和交点在视图平面上均匀间隔。

  在特定实施例中,像素阵列不需要与LED阵列相同的大小,甚至不考虑边缘周围的溢出像素,因为系统可以使用重新采样过程来根据像素阵列中的像素值确定LED值。通过使用重采样过程,像素阵列的大小可以大于或小于LED阵列的大小。

  在一个实施例中,角度空间像素阵列中的像素数可以大于LED的数量。在特定实施例中,角度空间像素阵列中的像素数可以小于LED的数量。系统可以使用重采样过程基于角度空间像素阵列确定LED值。在具体实施例中,系统可以使用角度空间映射,并且可以在中央注视点区域计算更多的像素,在外围区域计算更少的像素。

  名为“Memory structures to support changing view direction”的Meta专利申请最初在2022年1月提交,并在日前由美国专利商标局公布。

+1

来源:映维网

延展资讯