基于虚拟现实应用反畸变网格的空间点映射方法与流程

文档序号:13138641阅读:2218来源:国知局
基于虚拟现实应用反畸变网格的空间点映射方法与流程

本发明属于虚拟现实技术领域,具体是一种基于虚拟现实应用反畸变网格的空间点映射方法。



背景技术:

虚拟现实技术综合利用计算机图形学、光电成像技术、传感技术、计算机仿真、人工智能等多种技术,并借助各种交互设备,旨在为用户提供一个逼真的、具有多重感知的虚拟世界。近年来,随着facebook以20亿美金的价格收购oculus,虚拟现实技术在全球开始广泛引人关注。目前的虚拟现实应用中通常需要用户通过一个中间视线凝视点来指示用户视线在三维场景中的相对关系,这个凝视点用来表示当前视线和场景的交互关系,比如选中界面控件等。这个凝视点我们称之为凝视白点。而另一方面为了防止用户眩晕,虚拟现实设备刷新率要求能稳定在60帧及以上,然而受到硬件性能和功耗的限制,应用的图形渲染刷新率往往很难稳定保持在一定的刷新率,这个指标通常需要60帧及以上。业界为了解决这个问题,提出了一种图形算法插帧的方案(例如oculus的atw技术,睿悦信息nibiru的dtr技术,google提出的scanlineracing技术等)来解决在系统刷新率不够时候的刷新率稳定问题。然而不管是哪种插帧方案,由于都是图像变化算法,当插帧数过多的时候,算法结果和真实状态的偏差,会导致凝视白点在头部旋转过程中明显抖动。

如图1所示,给出了现有的渲染流程。现有技术中,由于vr的渲染是通常采用atw技术,而凝视白点的绘制是发生在场景绘制的流程中,故这个绘制流程存在延时,导致人看到的凝视白点存在抖动的情况。



技术实现要素:

本发明针对背景技术中存在的问题,提出将凝视白点的绘制结合插帧算法进行深度优化,改变凝视白点在目前主流的插帧算法中的绘制顺序,解决凝视白点抖动问题。

技术方案:

一种基于虚拟现实应用反畸变网格的空间点映射方法,该方法改变凝视白点的绘制时序,在异步时间扭曲线程中绘制凝视白点。

具体步骤为:

s1、场景绘制;

s2、获得渲染结果colorbuffer;

s3、根据硬件设备的参数进行追帧算法时间扭曲图形计算;

s4、根据视线和场景的关系在一定的空间位置绘制凝视白点;

s5、将结果输出到屏幕上。

优选的,s4中绘制凝视白点的方法具体为:

已知当前的mvp矩阵m1,凝视白点的世界坐标是p,根据当前的世界坐标p推算出景深,确定凝视白点在观察坐标系中坐标p_camera;

凝视白点在规范化设备坐标系ndc中表示为:

p1=mp*p

式中,mp为当前p的投影矩阵projectionmatrix;

根据反畸变算法,推算出p在屏幕上的uv坐标p_screen;

在将图像输出到硬件屏幕上之前,将接近p_screen的屏幕像素值设置成为预定义的颜色;或者,在p_screen的位置绘制一个凝视白点的可视化的图像,这个凝视白点就完成。

更优的,p在屏幕上的uv坐标p_screen的推导公式为:

p_screen=p*(1+k1*r^2+k2*r^4)

其中k1、k2是vr透镜的光学参数,r是p距离反畸变中心的距离。

在最后的屏幕上确定接近凝视白点距离像素的方法是设定一个阈值dd,d为像素坐标p3到p_screen的距离,判断d和dd的大小关系:若d<dd,则认为像素坐标p3是接近p_screen的屏幕像素值,并设置为预定义的颜色;若d>dd,则不改变该像素坐标p3的颜色。

本发明的有益效果

本发明是基于异步时间扭曲(atw)等追帧算法,在这个算法的基础上对凝视白点的绘制进行深度的优化,能够平滑的绘制凝视白点的同时,不会对现在主流的移动vr的解决方案增加计算量,也不需要修改现在atw等追帧算法的工作流程。

附图说明

图1为现有技术凝视白点的渲染流程图

图2为本发明凝视白点的渲染流程图

图3为透视投影视锥的参数示意图

图4为最终渲染结果示意图

图5为反畸变算法获得的网格示意图

具体实施方式

下面结合实施例对本发明作进一步说明,但本发明的保护范围不限于此:

结合图2。

s1、场景绘制;

s2、获得渲染结果colorbuffer;

s3、根据硬件设备的参数进行追帧算法时间扭曲图形计算;

s4、根据视线和场景的关系在一定的空间位置绘制凝视白点;

s5、将结果输出到屏幕上。

本发明将绘制凝视白点放在atw等追帧算法线程中,这个线程在vr绘制中通常是具有高优先级的,绘制不存在明显的延时,可以很好的解决抖动感。

原理说明:在一个三维的vr场景中,凝视白点可以理解为当前视线和场景的交点的显示表现。在三维渲染场景中,可以认为这个凝视白点是三位空间中相机坐标系中的一个位置为(0,0,z)的空间点,z是景深,通常由视线与场景中的实体求交获得。由于主流的追帧算法,都可以获得一帧渲染的framebuffer信息,这样在做追帧算法的时候在framebuffer的colorbuffer上绘制一个点的信息就比较简单。而通常在将获得的场景渲染结果绘制到屏幕上的过程中,会根据vr设备的光学透镜进行图像的反畸变,反畸变算法会将图像进行压缩,所以为了维持凝视白点和场景的相对位置关系,需要计算凝视白点在渲染的colorbuffer中的uv坐标值。

故具体实施时,首先通过对场景的管理,获得当前视线和场景的最近的交点,从而获得交点的景深信息,然后按照atw等追帧算法绘制实际的场景到一个framebuffer中,获得这个framebuffer的colorbuffer。

然后根据交点的景深信息与绘制场景的透视投影矩阵,求解获得凝视白点在colorbuffer中的位置信息,该信息使用uv坐标数值表示。

透视投影矩阵推导如下:

当前相机的位置为:p1(x1,y2,z2),相机的上方单位向量为:up(x2,y2,z2),

相机的瞄向单位向量为aim(x3,y3,z3),记为mcamera,那么相机的变换矩阵可以表达为:

各分量的计算方法如下:

sx=fy*z2+fz*y2

sy=fz*x2+fx*z2

sz=fx*y2+fy*x2

ux=sy*fz-sz*fy

uy=sz*fx-sx*fz

uz=sx*fy-sy*fx

那么相机的变换矩阵中:

m0=sx

m1=ux

m2=-fx

m3=0

m4=sy

m5=uy

m6=-fy

m7=0

m8=sz

m9=uz

m10=-fz

m11=0

m12=m0*x1+m4*y1+m8*z1

m13=m1*x1+m5*y1+m9*z1

m14=m2*x1+m6*y1+m10*z1

m15=m3*x1+m7*y1+m11*z1

透视投影视锥的参数表达为:left,right,bottom,top,near,far;如图3所示。

那么透视投影矩阵可以表达为:

记为mpro,各分量的计算方法如下:

p0=2*near/(right-left)

p1=0

p2=0

p3=0

p4=0

p5=2*near/(top-bottom)

p6=0

p7=0

p8=(right+left)/(right-left)

p9=(top+bottom)/(top-bottom)

p10=(far+near)/(near-far)

p11=-1

p12=0

p13=0

p14=2*far*near*(near-far)

p15=0

凝视白点的uv坐标数值推导如下:假定视线射线和当前的场景存在一个交点(即为凝视白点),齐次坐标表达为p0(x0,y0,z0,w0);

那么经过计算机图形学计算,在最后的标准化设备坐标(ndc)的坐标可以表达为:

pndc=mpro*mcamera*p0

同是可以确定,凝视白点在实际渲染图像中的纹理坐标值tc(u,v):

u=(pndc.x+1.0)/2

v=(pndc.y+1.0)/2

对于vr光学反畸变算法,根据光学的透镜特征,一般采用barreldistortion的算法进行反畸变,典型的此类反畸变的简化公式如下

u'=u*(1+k1*r2+k2*r4+k3*r6........)

v'=v*(1+k1*r2+k2*r4+k3*r6........)

其中k1、k2、k3等参数是vr透镜的光学参数,r是当前tc(u,v)距离反畸变中心的距离,通常使用光学设备检测得到。

通过这个反畸变算法公式,可以计算得到反畸变后凝视白点在最终反畸变网格上的纹理位置tf(u1,v1)。

最后进行反畸变处理:将获得的colorbuffer根据光学透镜的光学参数进行反畸变处理,由于凝视白点的空间位置信息主要是透过凝视白点在最终渲染的colorbuffer中的位置得以体现。opengl在做光学透镜反畸变处理通常使用若干三角网格来近视表达反畸变的位置信息,假设凝视白点存于一个三角形内部,那么根据三角形线性插值法,可以获得任意点的uv坐标。进而可以获得与凝视白点位置相同的像素值,将这部分的像素设置为一种特定的颜色。最终获得结果如图4所示。

说明:考虑到gpu渲染的性能,当前的移动vr实现反畸变实现主要是通过有限的网格实现,如图5所示。这个网格上的每一个顶点是按照反畸变算法实现的,顶点之间的像素由opengl栅格化渲染阶段根据三角形线性插值完成。

通过反畸变算法,我们可以计算任意一点经过光学反畸变后的图像坐标值,并且通过上述步骤的计算,可以得到在没有反畸变的情况下凝视白点的图像坐标位置tc(u,v),并且可以获得最临近的三个坐标点的未反畸变图像位置t1(tu1,tv1),t2(tu2,tv2),t3(tu3,tv3),与这三个点反畸变后的图像位置ft1(ftu1,ftv1),ft2(ftu2,ftv2),ft3(ftu3,ftv3),根据tc到t1、t2、t3的坐标信息,根据三角线性插值原理,可以推算出tc在反畸变网格上的位置result(rx,ry)。

在渲染反畸变网格的openglvertexshader中,以varying变量vposition记录下网格顶点在反畸变网格中的位置,在openglfragmentshader中接收varying变量vposition,当vposition的坐标值距离result在一定的阈值下时,即可以判定这个像素点属于凝视白点所映射的屏幕像素点,这个阈值的范围确定了最后凝视白点在屏幕上图斑的大小。

本文中所描述的具体实施例仅仅是对本发明精神做举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。

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