技术小白想要成为小白的我被病娇学习 Cardboard 怎么办

Unity3D移动端(7)
沉浸体验是VR的核心也是一直以来的技术难点,虚拟现实的发展一直专注于怎样让用户获得更好的沉浸式体验,这涉及到多个领域的多项技术,上至渲染优化,性能优化,下至人眼的构造,肢体的运动与感知。
Cardboard也为沉浸式体验提供了一种方案,本篇主要介绍Cardboard是用哪些技术实现VR体验的。
之前有人和我说,用Unity实现VR效果,很简单,新建两个Camera,相隔一定长度,然后把两个摄像机的viewport,分屏输出,就实现了VR,乍一听还挺有道理的,但是仔细一想,这种实现方式,漏洞百出,更夸张的说,它可能根本算不上VR
首先我们要明白沉浸式的虚拟现实系统是怎样的系统?
以下摘自百度百科:
沉浸式虚拟现实其明显的特点是:利用头盔显示器把用户的视觉、听觉封闭起来,产生虚拟视觉,同时,它利用数据手套把用户的手感通道封闭起来,产生虚拟触动感。系统采用语音识别器让参与者对系统主机下达操作命令,与此同时,头、手、眼均有相应的头部跟踪器、手部跟踪器、眼睛视向跟踪器的追踪,使系统达到尽可能的实时性。临境系统是真实环境替代的理想模型,它具有最新交互手段的虚拟环境。
那么我们从第一个特征开始:虚拟视觉
虚拟视觉是一个很抽象的概念,要去理解他,必须要进行具体化,而我们手上正好有Unity这样的工具可以帮助我们实际去感受,什么是虚拟视觉。
这是Cardboard的主物体,我们把它全部展开,发现CardboardMain下面有三个层级,Head是CardboardMain的子物体,GazePointer和Main Camera分别又作为Head的子物体,而Main Camera下又附带着两个Camera,,可能有人不明白为什么这样设置,别担心,等我们介绍完你就明白了。
纵观整一个CardboardMain,发现带有Camera组件的只有Main Camera和他所属的两个子物体,如上图所示,三个Camera的近裁面大小并不一样,我们截图进行一下对比
Main Camera Left和Main Camera Right的近裁面分别是相比Main Camera的近裁面等高但是宽度减小的两个矩形,而且两个矩形不重叠,它们相差了一定间隔。
这个间隔看似不起眼,实际就很有讲究了,要阐明其原理,首先要从3D电影的原理讲起:
/***********************************************************************************************************************************/
不知道大家有没有在脱掉3D眼镜的情况下,观察3D电影的屏幕,会发现其实屏幕上的画面,很模糊,看起来像是两幅画面的叠加。但是戴上眼镜以后瞬间清晰了,而且更加逼真震撼。
3D电影的原理其实很简单,它确实是利用两台并列安置的电影摄影机,同步拍摄出两条略带水平视差的电影画面(要注意的是,这样的两幅画面,并不是时间上的先后关系,而是在拍摄时,摄影机摄像位置的空间上的间距),所以,一部只用一个摄像机拍摄的电影,无论用什么方法也成为不了3D电影,3D的基础,就是两幅在不同点观察的画面。
为什么要这样做?
做一个小实验吧,先闭上左眼,同时睁开右眼。
然后迅速睁开左眼,同时闭上右眼
再回到第一步,不停的循环。比对一下,左眼中的世界,和右眼中的世界,是一样的吗?
这就是我们视觉的运行方式,两眼在不同的空间位置去观察这个世界,接受不同的反射光线,然后被大脑所接受,形成一个条件反射,我们在看“现实”的世界,所有物体都是实际存在的,都是有空间大小的。这就是我们感觉的“3D”
问一个很玄乎的问题。在看一幅画的时候,为什么我们知道是在看一幅画,而不是画中的世界?
也许我们的双眼在看这幅画的时候,大脑就已经确定了这是一幅画,里面的物体都是处于“画”这个平面上的,我们永远不可能进入到画中去看画中的世界。
然而科学的进步告诉我们,真的可以进入画中的世界,只要在画中给我们的眼睛建模,形成“画中的视觉“。
如何建模呢?
很简单的一种方式,像3D电影拍摄一样,用摄像机替代我们的双眼,但是摄像机获得的画面并不能直接投射到我们的视网膜上被大脑感知,我们还需要一样东西,3D眼镜。
3D眼镜将匹配的偏振光接受,拒绝不匹配的光线,这样的设计导致了,我们的左右眼可以获取到对应的画面,而两个画面互不影响。
于是,两幅用摄像机模拟眼睛拍摄的画面,就在我们的左右视网膜上分别投影出来了。
这就是虚拟视觉。
用一句话概括就是,把自己的双眼“放”到虚拟世界中去,“感知”这个世界的光线,让你觉得这个世界像是实际存在的,于是“虚拟”就变成了“现实”。
/***********************************************************************************************************************************/
现在我们来看Cardboard是怎么实现虚拟视觉的,Main Camera Left和Main Camera Right上都有一个脚本,叫Cardboard Eye.cs
这是关于此脚本的介绍:
Controls one camera of a stereo pair. &Each frame, it mirrors the settings of&the parent mono Camera, and then sets up side-by-side stereo with an appropriate&projection based on the head-tracking data from the Cardboard.SDK object.To enable a stereo camera
pair, enable the parent mono camera and set&Cardboard.SDK.vrModeEnabled = true.
控制一对立体摄像机中的其中一个,每一帧都复制其父物体上的单摄像机的设置,然后根据从Cardboard.SDK对象得到的头部追踪数据同合适的投影来建立立体像对。
要启用立体摄像机对,先启用父物体的单摄像机并置Cardboard.SDK.vrModeEnabled = true
显然Cardboard是用这对摄像机来产生立体图像的,这个摄像机Cardboard给了个定义叫stereo camera,介绍里还涉及到一个摄像机,叫mono Camera,这个mono Camera就是Main Camera物体上camera组件
为什么要叫mono Camera或者说这个mono Camera有什么用呢?上面介绍过了mono Camera的近裁面是一个大的矩形,而两个stereo Camera的近裁面只是包含于mono Camera的近裁面中的矩形,这说明stereo Camera获得的投影来自于mono Camera投影的一部分。Cardboard把mono Camera的投影作为世界的投影,而stereo Camera的投影作为输入眼部的投影,为了与现实保持一致,stereo Camera使用函数public void CopyCameraAndMakeSideBySide(StereoController
controller,&float parx = 0, float pary = 0)保证相机的所有settings是与mono Camera保持一致的。这样做的目的,就是希望我们看到的,是和世界一致的,这是想当然的问题,我们肯定不会希望我们眼睛看到的与世界表现的不相同,即使在虚拟世界中。
细心的同学会发现一个问题,在工程运行的时候,Main Camera Left和Main Camera Right上的camera组件是关闭的,但是我们依然能看到图像,这是怎么回事呢?
Alternate means of rendering stereo, when you don't plan to switch in and out of VR mode:In the editor, disable the MainCamera's camera component. &Enable the two stereo eye camera components.
Cardboard给了两种渲染stereo的方式,一种是启用mono Camera,关闭两个stereo Camera(默认方式),还有一种是关闭mono Camera,启用两个stereo Camera。
这是在UnityEditor里的功能,所以Android运行时应该用不到
当然实现视觉的虚拟不仅仅是以上这么简单,我们获得了两个不同视点观察的经过投影变换后的图像(准确的来讲,这个图像应该叫做RenderTexture),现在我们需要将摄像机输出的视口(viewport)摆放到屏幕的准确位置,这一步很重要,因为我们不希望在用VR眼镜观察的时候因为输出的viewport位置不对,导致看不全viewport或者看到了viewport外围黑色背景的现象,我们希望,我们的视野(视野这个词,后面都简写为FOV,field of view,这个视野可能是眼睛的视野,也有可能是眼睛透过VR透镜观看的视野),正好覆盖输出的viewport,一分一毫也不能偏差,差一点点可能就会毁了我们的沉浸式体验过程。
这个过程,我自己定义了一个名字,叫做外部的FOV适配。(不同于内部的FOV适配,后面会讲)。
完成了外部的FOV适配,至少我们已经将我们的眼睛“放”到了游戏场景中,但是这仅仅是一个开始,我们还需要解决很多问题。
例如,VR透镜的使用造成的最典型的一个问题,图像畸变。
下一章我们会从扭曲矫正开始继续介绍。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:34962次
排名:千里之外
原创:27篇
评论:33条
(1)(2)(3)(8)(6)(5)(1)(3)写给VR手游开发小白的教程:(六)Cardboard如何实现沉浸式VR体验之构造双眼
沉浸体验是VR的核心也是一直以来的技术难点,虚拟现实的发展一直专注于怎样让用户获得更好的沉浸式体验,这涉及到多个领域的多项技术,上至渲染优化,性能优化,下至人眼的构造,肢体的运动与感知。
Cardboard也为沉浸式体验提供了一种方案,本篇主要介绍Cardboard是用哪些技术实现VR体验的。
之前有人和我说,用Unity实现VR效果,很简单,新建两个Camera,相隔一定长度,然后把两个摄像机的viewport,分屏输出,就实现了VR,乍一听还挺有道理的,但是仔细一想,这种实现方式,百出,更夸张的说,它可能根本算不上VR
首先我们要明白沉浸式的虚拟现实是怎样的系统?
以下摘自百度百科:
沉浸式虚拟现实其明显的特点是:利用头盔显示器把用户的视觉、听觉封闭起来,产生虚拟视觉,同时,它利用数据手套把用户的手感通道封闭起来,产生虚拟触动感。系统采用语音识别器让参与者对系统主机下达操作命令,与此同时,头、手、眼均有相应的头部跟踪器、手部跟踪器、眼睛视向跟踪器的追踪,使系统达到尽可能的实时性。临境系统是真实环境替代的理想模型,它具有最新交互手段的虚拟环境。
那么我们从第一个特征开始:虚拟视觉
虚拟视觉是一个很抽象的概念,要去理解他,必须要进行具体化,而我们手上正好有Unity这样的工具可以帮助我们实际去感受,什么是虚拟视觉。
这是Cardboard的主物体,我们把它全部展开,发现CardboardMain下面有三个层级,Head是CardboardMain的子物体,GazePointer和Main Camera分别又作为Head的子物体,而Main Camera下又附带着两个Camera,,可能有人不明白为什么这样设置,别担心,等我们介绍完你就明白了。
纵观整一个CardboardMain,发现带有Camera的只有Main Camera和他所属的两个子物体,如上图所示,三个Camera的近裁面大小并不一样,我们截图进行一下对比
Main Camera Left和Main Camera Right的近裁面分别是相比Main Camera的近裁面等高但是宽度减小的两个矩形,而且两个矩形不重叠,它们相差了一定间隔。
这个间隔看似不起眼,实际就很有讲究了,要阐明其原理,首先要从3D电影的原理讲起:
/***********************************************************************************************************************************/
不知道大家有没有在脱掉3D眼镜的情况下,观察3D电影的屏幕,会发现其实屏幕上的画面,很模糊,看起来像是两幅画面的叠加。但是戴上眼镜以后瞬间清晰了,而且更加逼真震撼。
3D电影的原理其实很简单,它确实是利用两台并列安置的电影摄影机,同步拍摄出两条略带水平视差的电影画面(要注意的是,这样的两幅画面,并不是时间上的先后关系,而是在拍摄时,摄影机摄像位置的空间上的间距),所以,一部只用一个摄像机拍摄的电影,无论用什么方法也成为不了3D电影,3D的基础,就是两幅在不同点观察的画面。
为什么要这样做?
做一个小实验吧,先闭上左眼,同时睁开右眼。
然后迅速睁开左眼,同时闭上右眼
再回到第一步,不停的循环。比对一下,左眼中的世界,和右眼中的世界,是一样的吗?
这就是我们视觉的运行方式,两眼在不同的空间位置去观察这个世界,接受不同的反射光线,然后被大脑所接受,形成一个条件反射,我们在看&现实&的世界,所有物体都是实际存在的,都是有空间大小的。这就是我们感觉的&3D&
问一个很玄乎的问题。在看一幅画的时候,为什么我们知道是在看一幅画,而不是画中的世界?
也许我们的双眼在看这幅画的时候,大脑就已经确定了这是一幅画,里面的物体都是处于&画&这个平面上的,我们永远不可能进入到画中去看画中的世界。
然而科学的进步告诉我们,真的可以进入画中的世界,只要在画中给我们的眼睛建模,形成&画中的视觉&。
如何建模呢?
很简单的一种方式,像3D电影拍摄一样,用摄像机替代我们的双眼,但是摄像机获得的画面并不能直接投射到我们的视网膜上被大脑感知,我们还需要一样东西,3D眼镜。
3D眼镜将匹配的偏振光接受,拒绝不匹配的光线,这样的设计导致了,我们的左右眼可以获取到对应的画面,而两个画面互不影响。
于是,两幅用摄像机模拟眼睛拍摄的画面,就在我们的左右视网膜上分别投影出来了。
这就是虚拟视觉。
用一句话概括就是,把自己的双眼&放&到虚拟世界中去,&感知&这个世界的光线,让你觉得这个世界像是实际存在的,于是&虚拟&就变成了&现实&。
/***********************************************************************************************************************************/
现在我们来看Cardboard是怎么实现虚拟视觉的,Main Camera Left和Main Camera Right上都有一个脚本,叫Cardboard Eye.cs
这是关于此脚本的介绍:
Controls one camera of a stereo pair. Each frame, it mirrors the settings ofthe parent mono Camera, and then sets up side-by-side stereo with an appropriateprojection based on the head-tracking data from the Cardboard.SDK object.To enable a stereo camera pair, enable the parent mono camera and setCardboard.SDK.vrModeEnabled = true.
控制一对立体摄像机中的其中一个,每一帧都复制其父物体上的单摄像机的设置,然后根据从Cardboard.SDK对象得到的头部追踪数据同合适的投影来建立立体像对。
要启用立体摄像机对,先启用父物体的单摄像机并置Cardboard.SDK.vrModeEnabled = true
显然Cardboard是用这对摄像机来产生立体图像的,这个摄像机Cardboard给了个定义叫stereo camera,介绍里还涉及到一个摄像机,叫mono Camera,这个mono Camera就是Main Camera物体上camera组件
为什么要叫mono Camera或者说这个mono Camera有什么用呢?上面介绍过了mono Camera的近裁面是一个大的矩形,而两个stereo Camera的近裁面只是包含于mono Camera的近裁面中的矩形,这说明stereo Camera获得的投影来自于mono Camera投影的一部分。Cardboard把mono Camera的投影作为世界的投影,而stereo Camera的投影作为输入眼部的投影,为了与现实保持一致,stereo Camera使用函数public void CopyCameraAndMakeSideBySide(StereoController controller,float parx = 0, float pary = 0)保证相机的所有settings是与mono Camera保持一致的。这样做的目的,就是希望我们看到的,是和世界一致的,这是想当然的问题,我们肯定不会希望我们眼睛看到的与世界表现的不相同,即使在虚拟世界中。
细心的同学会发现一个问题,在工程运行的时候,Main Camera Left和Main Camera Right上的camera组件是关闭的,但是我们依然能看到图像,这是怎么回事呢?
Alternate means of rendering stereo, when you don't plan to switch in and out of VR mode:In the editor, disable the MainCamera's camera component. Enable the two stereo eye camera components.
Cardboard给了两种渲染stereo的方式,一种是启用mono Camera,关闭两个stereo Camera(默认方式),还有一种是关闭mono Camera,启用两个stereo Camera。
这是在UnityEditor里的功能,所以运行时应该用不到
当然实现视觉的虚拟不仅仅是以上这么简单,我们获得了两个不同视点观察的经过投影变换后的图像(准确的来讲,这个图像应该叫做RenderTexture),现在我们需要将摄像机输出的视口(viewport)摆放到屏幕的准确位置,这一步很重要,因为我们不希望在用VR眼镜观察的时候因为输出的viewport位置不对,导致看不全viewport或者看到了viewport外围黑色背景的现象,我们希望,我们的视野(视野这个词,后面都简写为FOV,field of view,这个视野可能是眼睛的视野,也有可能是眼睛透过VR透镜观看的视野),正好覆盖输出的viewport,一分一毫也不能偏差,差一点点可能就会毁了我们的沉浸式体验过程。
这个过程,我自己定义了一个名字,叫做外部的FOV适配。(不同于内部的FOV适配,后面会讲)。
完成了外部的FOV适配,至少我们已经将我们的眼睛&放&到了游戏场景中,但是这仅仅是一个开始,我们还需要解决很多问题。
例如,VR透镜的使用造成的最典型的一个问题,图像畸变。
下一章我们会从扭曲矫正开始继续介绍。1237人阅读
Unity3D移动端(7)
上篇为大家介绍了如何实现虚拟视觉,链接如下:
本篇分为五部分,为大家讲述虚拟视觉的引入带来的两个基本问题以及Cardboard的解决方案
一、VR设备透镜的作用
上篇已经说过,要实现FOV的外部匹配,需要使得我们双眼的视野正好覆盖手机屏幕,这意味着手机会离我们的眼睛很近,当我们长时间注视一个近距离物体时无疑会产生视觉上的疲劳,久而久之,产生近视或者是对身体更大的危害。
这是虚拟视觉带来的很显而易见的问题,如何解决?目前所有的VR设备都采用了一个方法:增加镜头。
关于VR透镜的设计涉及到了光学方面的原理,提供两篇好的文章:
综上所述,透镜的作用大约可以概括为2个:1、防止视觉疲劳2、增大视场角(FOV)
现在多数的VR眼镜,都采用了菲涅尔透镜,它与普通的透镜其实没什么区别,只不过它将内部的材质移去,使得整个镜片更加轻薄。
二、畸变问题的产生
畸变是因为相机镜头在成像时,视场不同区域的放大率不同而产生的变形。
下图所示,畸变分为桶形畸变和枕形畸变。
桶形畸变的产生原因实际上是因为中间部分的放大率比边缘部分大,导致图像产生了向内弯曲的现象(如下图中黑色圈中的线明显比绿色圈中的线要长)。
反之枕形畸变则是中间部分的放大率比边缘部分小而导致的。
光学上可以通过改进透镜的工艺来改善畸变,比如采用非球面镜片,但是我们的VR设备的价格注定了我们观察的图像必然会发生畸变(果然是便宜没好货-.-),所以处理图像畸变也是我们面临的一个难题。
三、Unity中的扭曲矫正(RadialUndistortionEffect.cs)
Cardboard使用了RadialUndistortionEffect.cs这个脚本来做扭曲矫正:
Applies the inverse of the lens distortion to the image. &The image is &undistorted& so that when viewed through the lenses (which redistort), the image looks normal. &In the case of Cardboard, the lenses apply a pincushion distortion, so this effect applies
a barrel distortion to counteract that.
应用了透镜扭曲的反效果。图像是“反扭曲”的以至于当我们透过透镜观察的时候(经过了扭曲),图像会看起来正常一些。在Cardboard里,透镜产生了枕形畸变,因此可以使用一个桶形畸变的图像效果来消除畸变的影响。
这句注释很清楚的告诉了我们如何去消除畸变,那就是产生一个已经畸变了的图像去抵消透镜产生的畸变,如果透镜产生了枕形畸变,那我们直接生成已经桶形畸变了的图像,反之也同理。
如何产生桶形畸变的图像?这主要涉及到Unity中shader的概念,shader主要用于生成一系列图像效果,称作着色器程序,它主要运行在GPU上,编写这样的代码段,需要一定的功力,也需要对Unity和其渲染机制有很高的理解。(博主没有编写过shader,没法去解释其实现了。。)
最后,通过该函数Graphics.Blit(source, dest, material);将我们的源RenderTexture经过material处理后转换成目标RenderTexture。
可以做一个实验,在运行的时候,如果将脚本RadialUndistortionEffect.cs关闭,则会出现下图的现象。
注意!!!这种方式只适用于Unity Editor,如果要在手机当中产生失真矫正效果,需要调用的是手机对应的图形处理程序。
可惜的是所有Android或者ios的方法在Unity中只能以库的形式调用,以Android为例,我们通常会在eclipse或者Android Studio中打包成类库,然后在Unity当中去做引用,基于这一点,我们并不能看到Android产生畸变的图像的具体实现过程,因为它们已经被封装起来了。
四、FOV的内部匹配问题
我们在上篇已经说过了FOV的外部匹配,通常人的视场角为60度左右,在60度的范围内我们要做到正好覆盖图像输出的viewport位置,任何图像小于视场或者大于视场的现象均会导致沉浸感降低。这是FOV的外部匹配问题。
现在我们不仅有现实中的视觉,别忘了在虚拟世界中,我们也有视觉,对应的当然也有FOV。这里所说的FOV内部匹配,就是现实视觉的FOV与虚拟视觉的FOV之间的匹配。
换言之,就是保证虚拟视觉的视场角保持在一个对于人来说舒适的范围,60度左右。
那么为什么要做匹配呢?我们完全可以在虚拟世界中获得更大或者是更窄的FOV,从实现的角度考虑,这没有问题,但是人体习惯于以60度左右的FOV观察世界,并且我们想要观察超出人体视场的物体时,会习惯性的转头,这就像是一种本能,大脑已经习惯于这样的FOV,现在当我们被迫接受不匹配的FOV时,大脑对于新的改变表现出不适,从而产生强烈的眩晕感。
从某些方面来看,FOV内部匹配甚至比外部匹配更加重要。
五、FOV内部匹配的解决方案(StereoController.cs)
StereoController这个类主要用来对双眼(Cardboard Eye)进行控制和调整,它绑定在mono Camera上,对两个子物体stereo Camera进行控制。
Controls a pair of CardboardEye objects that will render the stereo view of the camera this script is attached to.
这个脚本控制一对用来产生立体画面的摄像机物体。
这个脚本下有几个重要的属性:
/***********************************************************************************************************************************/
stereoMultiplier:
Adjusts the level of stereopsis for this stereo rig. &Note that this parameter is not the virtual size of the head -- use a scale on the head game object for that. &Instead, it is a control on eye vergence, or rather, how cross-eyed or not the stereo rig
is. &Set to 0 to turn off stereo in this rig independently of any others.
通过本控制器调整立体度等级。注意这个参数不是虚拟头部的大小--使用scale来调整头部物体,而是对眼睛离散度的控制,这个离散度也可以理解为视线怎样倾斜。设置为0的时候,关闭立体效果。
上两张图大家就能发现这个参数的功能了:
这是一张stereoMultiplier设置为1时候的图
这是stereoMultiplier设置为0时候的图
两者的差别,大家可以仔细的观察一下(必须要很仔细很仔细的观察,才能发现不同 :-D)
如果还是找不到不同,好吧,我们用两张图来表达差异:
平常,我们的眼睛观察物体,是这样的。
现在,stereoMultiplier设为0,是这样的。
第一种方式,同时考虑了视线的倾斜,而第二种方式只是将画面平视输出,很显然,如果想要更高的立体感,这个参数设为1更好。
/***********************************************************************************************************************************/
matchMonoFOV:
这个参数,就是上述的FOV内部匹配
The stereo cameras by default use the actual optical FOV of the Cardboard device,because otherwise the match between head motion and scene motion is broken, which impacts the virtual reality effect. &However, in some cases it is desirable to adjust the FOV
anyway, for special effects or artistic reasons. &But in no case should the FOV be allowed to remain very different from the true optical FOV for very long, or users will experience discomfort.This value determines how much to match the mono camera's field
of view. &This is a fraction: 0 means no matching, 1 means full matching, and values in between are compromises. &Reasons for not matching 100% would include preserving some VR-ness,and that due to the lens distortion the edges of the view are not as easily
seen as when the phone is not in VR-mode.Another use for this variable is to preserve scene composition against differences in the optical FOV of various Cardboard models. &In all cases, this value simply lets the mono camera have some control over the scene
in VR mode, like it does in non-VR mode.
立体摄像机默认使用Cardboard设备实际的FOV,不然会导致头部运动和场景运动的匹配关系破裂(这会影响沉浸感),然而,在一定情况下,也可以调整FOV(为了特效或者艺术感),但是长时间使用与实际视觉FOV不同的FOV是不允许的,这会让用户不舒服。这个值决定了mono Camera获得的FOV的匹配度。0意味着不匹配,1意味着完全匹配,中间的值折中。不进行100%匹配的原因包括,保留VR的特性,VR模式下图像的边缘不易被非VR模式看到,不同类型的Cardboard进行兼容等。这个值通常让mono Camera在VR模式下对于场景有一些控制。
/***********************************************************************************************************************************/
matchByZoom:
Determines the method by which the stereo cameras' FOVs are matched to the mono camera's FOV (assuming matchMonoFOV is not 0). &The default is to move the stereo cameras (matchByZoom = 0), with the option to instead do a simple camera zoom (matchByZoom =
1). &In-between values yield a mix of the two behaviors.It is not recommended to use simple zooming for typical scene composition, as it conflicts with the VR need to match the user's head motion with the corresponding scene motion. This should be reserved
for special effects such as when the player views the scene through a telescope or other magnifier (and thus the player knows that VR is going to be affected), or similar situations.Note that matching by moving the eyes requires that the centerOfInterest object
be non-null, or there will be no effect.
决定stereo cameras的FOV和mono camera的FOV进行匹配的方式(前提是matchMonoFOV不是0)。默认是移动stereocameras(matchByZoom = 0),还有一种方式是简单的对camera的视野进行缩放(matchByZoom = 1),中间的值,表示两种方式的混合,不建议使用简单缩放,因为它和头部移动与场景移动的匹配相冲突。同样缩放效果可以被保留用作特效,比如玩家通过望远镜观看场景。注意移动匹配需要兴趣中心点物体非空,否则会无效。
/***********************************************************************************************************************************/
centerOfInterest:
Matching the mono camera's field of view in stereo by moving the eyes requires a designated &center of interest&. &This is either a point in space (an empty gameobject) you place in the scene as a sort of &3D cursor&, or an actual scene entity which the
player is likely to be focussed on.The FOV adjustment is done by moving the eyes toward or away from the COI so that it appears to have the same size on screen as it would in the mono camera. &This is disabled if the COI is null.
为了移动stereo camera匹配FOV,我们需要一个被设计好的“兴趣中心点”。这可以是一个空物体,也可以是非空物体,甚至是场景中玩家可能会关注的实际物体,FOV调整根据距离兴趣中心点的距离以至于看起来与在mono camera中有同样的尺寸。
radiusOfInterest:
在兴趣中心为非空物体时,可以定义半径大小。
综上,可以看出Cardboard使用基于mono camera来调整每个stereo camera的方法,并且设置了兴趣中心点,这个点相当于我们双眼视线的中心交点,除了作为基准外,一些游戏为了吸引玩家注意也会在这个点上放置重要的物体。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:34964次
排名:千里之外
原创:27篇
评论:33条
(1)(2)(3)(8)(6)(5)(1)(3)

我要回帖

更多关于 同行想要学习技术怎样回绝 的文章

 

随机推荐