由浅入深的VR技术之旅

在云栖TechDay 活动第二十七期,来自阿里GM Lab的费义云(云魂)给大家带来了题为《VR大观》的分享。本次分享主要是从技术的角度梳理了VR方面知识的脉络,同时为听众们带来一次由浅入深的VR技术之旅。分享中所涉及的技术点主要包括:Head Tracking、镜片矫正、深度感产生、立体感渲染以及OpenGL坐标系变换等内容。

以下内容是根据PPT和现场分享整理而成。



VR核心问题

初学者要了解VR内的技术点是相对困难的,它要求的东西相对零乱:一方面需要一些偏图形学的知识;另一方面需要知道一些相对新的技术,例如陀螺仪、滤波等。初学VR时会感觉不知从哪里下手,如果要梳理清除其中的技术点,则需要确认VR中最为关键、最需要解决的问题。

VR中要解决的三个核心问题分别是:一解决沉浸感的问题;二是解决立体感的问题;三是解决3D感的问题。

VR要完成的使命是让用户在虚拟的环境中感知它和真实环境一样的交互。要达成这样的目的,首先需要隔绝外界对人的输入,最好的方式是通过盒子类的设备直接扣在眼睛前面,杜绝其看到外界的设备和环境,完全感应虚拟成像的环境。但这种方式导致了弊端,当特别近的物品到人眼前,人眼是无法聚焦的,因此为了便于聚焦,引入镜片,让特别近的画面能够看的清除。但是镜片的引入,带来了更多的问题,如放大镜效应和色散问题。

沉浸感能够让用户在虚拟环境中像真实环境感受一样,脑袋左右摆动,也要能够感知像真实环境一样摆动,所以需要准确的跟踪用户的头部行为;另一个问题是立体声,比如左耳听到相对较大的声音,就转头看一下发生了什么事情;此外,输入方面,需要各种各样的输入来模拟用户在真实环境下的交互。

立体感和3D感是两个不同的东西,3D感更多的是单目视觉,传统游戏常采用的方式;立体感在影院或者裸眼3D都能够感受到,它有一种纵深的感觉。

Immersion

 

引入棱镜导致了透镜畸变,透镜畸变有两种类型:一种是直线向外凸,称之为桶形畸变;另一种是线是向内凹的,称之为枕形畸变。在数学运算中,最基准的公式就是左边的三个公式,其中Xc和Yc表示图像的中心,X/Y分别指当前对应的像素点,经过畸变函数就变成带小尖号的X/Y,表示的是畸变后像素点所在的位置。L是r的函数,r是该像素点相对于光心的距离,两者之间有一定的比例关系,L可以像泰勒级数一样多项展开,实际情况下取到二次展开即可获得较好的矫正效果,也就是只需要确定K0/K1/K2,就可以得到一个校正函数。

直线在VR眼镜中是凹进去的,因此需要做的事情是将凹进去的直线进行一次反畸变,变成桶型畸变;然后再通过透镜来看,曲线就会重新恢复变直。

除此之外,透镜的引入还会造成色散现象,需要进行色散的校正,但由于色散校正太损耗设备性能,同时正常使用VR时也并不是很明显,所以这一点一般忽略。

下面来探讨下 Head Tracking方面的问题。一般手机上会有IMU带着三轴旋转,能够在一定情况下估计现在用户的姿势。但实际上最大的问题是传输过来的数据会因为硬件的不同、用户操作频率不同导致曲线的噪声较大,如果画成函数曲线的话,会发现波形呈锯齿状。我们需要做的任务就是将这些锯齿平滑掉。在head tracking中,最重要的命题是将曲线变得平滑,因此需要用到一些滤波器。常用的滤波器是卡尔曼滤波器和补偿滤波器。

手机中有三个重要的传感器:地磁、加速度和陀螺仪,实际上可以通过地磁以及加速度传感器推导出手机旋转的姿态,当然陀螺仪本身就能够独立测算出现在旋转的姿态。这两个结果和两个高斯分布一样都不可信,两者中间可以做一个高斯分布叠加求出比较靠谱的值,这是滤波在VR Head Tracking的一个应用。

另外一个应用,采用了补偿滤波器,例如在采用陀螺仪测算出的角速度,实际上是一个短期靠谱的值,长期就未必靠谱,因为每次测算要根据角速度然后乘以时间,一次一次的迭代上去,如果的每一个量都有非常小的误差,随着这个时间增长上去,误差量会越来越大,所以说陀螺仪短期是精确的,长期是不靠谱的;但是,加速度恰恰相反,它长期是靠谱的,短期不靠谱的。所以在决定一个值时,需要用陀螺仪这个短期靠谱的去纠正那个大趋势的幅度。

Stereoscopic

要了解立体感,首先需要知道人是如何感到深度的。单眼之所以能够感受都深度,是因为人脑学习的结果。因此,想要感受深度,双目是非常必要的。产生深度的原因包括透视投影、图片的细节度、遮挡以及透过光照和阴影、运动速率等,但最主要的原因还是双目产生视差造成的。

下面来具体看下视差如何计算的。

如上图所示,左右眼的视线方向是平行的,是非常垂直的发射出去的;竖着的平面是指投影面。在视差中存在正负关系,V1点分别投影到左右眼时会和投影平面有两个焦点,在这个焦点上可以看到在左眼的投影点和在右眼的投影点方向是不变的,形成正视差。对于V2而言,投影点刚好在物理平面上,此时视差是零;对于投影点在屏幕以外,视差会出现反转,形成负视差。因此,正视差人的感受是物体在屏幕以内,负视差的感到在屏幕以外,零视差则准确出现在屏幕上。

视差的正负以及零的情况对应于上图中曲线,它会随着深度的加大而慢慢变大。距离极大的情况下,视差变化率逐渐变慢,因此一个东西在相对较远的情况下,大家对它的深度感知并不明显,但等到距离近了,深度感知是相对明显的。另外,英伟达建议尽量不要去进行负视差的操作,尽管可以投影在屏幕外很酷,但实际上由于距离太近,人眼很难聚焦,容易让人眼部肌肉紧绷,产生眩晕感。一些文献建议如果存在负视差,不应超过收敛平面的二分之一。

最上面视差的计算公式,Separation是指瞳距65毫米;Convergence是收敛平面,指的是眼睛和投影面之间的距离;W指的是所在点的深度。根据深度测算出来分别投影到两个画面上的视差。

3D

在OpenGL Pipline中会有一些顶点的数据在Primitive Processing中进行一些图元的组装;然后在Vertex Shader中对图元的顶点进行一些相应的顶点变换;之后把变换好的顶点组装成对应的图元,如三角形、线段或者点;当图元组装完成后,由图元围成的区域去做一些光栅化;光栅化完成之后,可以交到Fragment Shader 当中对光栅化出来的每一个片源点去做相对应的着色;该步之后,对每一个片源点进行深度检测,如果太深直接抛弃,不再走后面的流程,如果没有被丢弃,接着送至Frame Buffer 上去上颜色的话,就需要来查看这个颜色是否透明,是否把之前的Frame Buffer颜色直接替换掉,还是做一下ColorBuffer Blend,之后再进行Dither,然后再走到Frame buffer里面。

实际上,进行透镜的畸变校正可以在Vertex Shader和Fragment Shader两个步骤中完成,在前者进行操作会比后者的性能好一些。

物体变换的过程如上图所示,是由模型空间投影到世界空间上;再由世界空间变到视的空间;再由视的空间变到剪裁空间NDC。实际上,在VR当中做Head Tracking 更多的一步是在世界空间转变到视空间的过程;游戏中的Camera已经变成人的真实眼睛所辐射进去的操作。



精彩问答:

提问者:3D感和立体感的具体区别?

云魂:在做3D时,只涉及单目的渲染;但是在做立体感时,需要双目的渲染,才能形成立体的感觉。3D感实际上并没有深度感,例如看一个立方体在旋转,时间久了就无法区分是顺时针还是逆时针旋转,但是如果把立方体能够带视差渲染成两个,并通过VR盒子去看,则不会造成这种混淆。

提问者:我的理解是:“如果一个东西它是立体的话,他肯定就是3D的。”

云魂:你可以再试一下,刚才我所说的那个两个笔尖相碰,并且你闭一只眼睛,然后你看他能不能对得上去可能会有一点感受,因为这个确实有非常多的人把这两个东西混淆,但是实际上他确实并不是一回事。或者再举一个例子,我们平常看裸眼3D的屏幕,实际上我们用正常的屏幕就已经能够看一个3D的场景了,但是我们还是需要类似的裸眼3D的屏幕去看立体感的东西,所看到那个屏幕是有深度的,也就是立体感。

 

 

 

 

时间: 2024-11-01 20:36:54

由浅入深的VR技术之旅的相关文章

EJB技术之旅(一)

EJB技术现在成了很多产品的卖点,所以对于开发者来说,掌握这种技能变得很重要.EJB技术诞生的时间不长,在国内应用也刚刚起步,国内也有不少这方面的资料.书籍,但都有这样几个毛病.第一,内容没有深度,比如用什么工具开发一个EJB实例,一步一步教会读者具体应用,这种内容对于初学者而言有一定帮助.第二,EJB技术是很好的,为什么好呢?我们都会去用它,我想很多人都忽视了技术本身的内部机理.第三,每个技术领域都有自己的核心内容,这些资料都没有教会读者如何面对新技术快熟的切入到核心层的方法,如果以后出现了"

【欢迎反馈建议】淘宝造物节意犹未尽的你,快来看看阿里四位专家畅聊背后的VR技术!

VR是视频品牌<云栖说>首期内容,已经观看"阿里GM Lab.优酷VR .阿里云,畅谈VR造物神"的朋友们,希望能得到大家的反馈. 观看报名链接:8月10日,http://yq.aliyun.com/webinar/join/35 产业.技术.资本.生态,从2015年下半年开始,似乎全世界的风都吹向了VR(虚拟现实). 从Ocules Rift.HTC Vive.Google Cardboard.Gear VR.PlayStation VR,到谷歌.Facebook.苹果.

VR技术不仅仅适用于淘宝 VR+医疗来袭

本文讲的是VR技术不仅仅适用于淘宝 VR+医疗来袭,淘宝推出的buy+技术刷新了我们对网上购物的新眼界,让我们可以立体真实感受网上购物的实店购买体验,让网上购物变得轻松无忧.其中的VR技术起了至关重要的作用,现在次技术应用到了医疗方面,首先对于解刨学来说,可以直观展现出3D效果的人体解剖图,对于学生的学习以及病症的判断有很大的帮助.医患在将来利用此技术的体验也是有极大提升的. 洞悉全球医健创新创业实践 我们自己做医生集团是基于我们过去认为,中国整个医疗产业生态里面,医生一直是被忽略的一个群体.过

VR技术会不会加速传统医疗的全面革新?

VR技术会不会加速传统医疗的全面革新? 会! 必须承认,当初移动医疗异军突起的时候,"颠覆" 之声不绝于耳.然而直到今年,移动医疗的时代已经结束了,传统医疗丝毫未变.所以现如今,VR 医疗会不会是又一次心血来潮?会不会多年后因为碌碌无为而被渐渐遗忘?我认为不会,因为 VR 医疗与移动医疗之间存在着价值观上的根本区别: 移动医疗改变传统医疗的思路是 "打破一个旧世界,创造一个新世界",企图凭借一己之力完全颠覆传统医疗.VR 医疗不是.虽然 VR 医疗的出现会在很多方面

VR技术行业应用前景初探:技术创新定义精彩未来

近年来,随着网络及信息技术的发展,虚拟现实技术逐渐被应用于会展领域,并给这一领域带来新的生机与活力.加入虚拟技术的展会比起传统展会具有更好交互性.体验性.趣味性等优势,因此受到会展行业的极大关注. 1.虚拟现实概述 虚拟现实(即VR)是一种综合性的信息技术,他通过多媒体技术与计算机仿真技术相结合建立虚拟模型模拟真实场景,用户通过一些必要的设备用听觉.视觉.触觉等自然方式与虚拟环境中的人或物进行交流.交互,从而产生身临其境的感受及体验. 从技术层面来说,虚拟现实技术是一种实时的.交互式的三维环境.

VR技术与生态:大咖跟你聊VR未来

产业.技术.资本.生态,从2015年下半年开始,似乎全世界的风都吹向了VR(虚拟现实).   火爆眼球的首届"淘宝造物节"以TAO为标志,分别围绕T(Technology科技).A(Art艺术).O(Originality原创力)三个主题板块,淘宝展向全世界的年轻人,展示科技.音乐.潮流时尚.现场综艺.亚文化等内容.这个节日有"三个最",最年轻.最好玩.最科技.从"吾皇万睡"."故宫淘宝"的淘宝创客,到"Buy+买包

Google VR技术大揭秘

VR 虚拟现实(Virtual Reality)技术是一种可以创建和体验虚拟世界的计算机仿真系统,它利用计算机生成一种模拟环境,是一种多源信息融合的.交互式的三维动态视景和实体行为的系统仿真, 使用户沉浸到该环境中. 附:Wikipedia VR产品 Google VROculusHTC Vivi Google VR for Android Google VR SDK同时支持DayDream和CardBoard. 包含了一些用于创建App的简单API和支持DayDream手机.DayDream控

VR技术

2016年被称为VR元年,全球硬件.内容.资本巨头动作频频, VR设备将继电脑.手机后的下一个计算平台,到2025年VR和AR的硬件营收将高达1100亿美元.从去年开始,包括Facebook.三星.索尼.HTC甚至阿里巴巴--已全线布局VR战略,抢滩千亿规模市场. 产业规模瞬时爆发势必促使VR行业规范及健康生态的建立.根据"全球VR技术标准",首次明确VR产品三大关键技术标准--低于20ms延时.75Hz以上刷新率及1K以上陀螺仪刷新率,这将成VR新行业的游戏规则. 一.VR产业技术标

EJB技术之旅(二)

设计实例的深入分析 要求: 本文假设读者对EJB技术有一定熟悉,对SQL有一定了解就可以了.由于EJB涉及到的技术很多,尽管每次只讲述一种技术,但各种技术是相关的,所以希望读者谅解,因为这样不是很好组织. 实例背景 数据库:SQL Server 2000 操作系统:Windows 2000 开发工具:JBuilder 7 EJB服务器:WebLogic 7.0 机器IP地址,10.11.12.58 实例综述:通过无状态Session Beans得到容器管理的Entity Beans中的数据,然后