原文链接:http://www.arvrschool.com/read.php?tid=180&fid=21
AR/VR技术交流群 129340649,欢迎加入~
一、平台准备:
Cardboard Unity SDK version 0.5.0Vuforia Unity SDK version 5.0.5
Unity3d version 5.0.0f4(64bit)
二、场景设置:
先后导入Vuforia Unity SDK version 5.0.5和Cardboard 0.5.0SDK,如果顺序反了,可能需要修改AndroidManifest文件。
然后双击Scenes中Vuforia-3-AR-VR场景,然后拖入Cardboard/prefabs/CardboardMain.prefab.
查看ARCamera的检视窗口(Inpsector),找到Bind Alternate Camera属性,勾选,并将CardboardMain中Head组件、MainCameraLeft以及MainCameraRight组件拖过去,然后点击Add Vuforia Components按钮。
另外要将Viewer设置Cardboard.
另外除了Cardboard外,还有Gear VR.
接下来需要设置Cardboard的组件,CardboardMain.
设置Camera的背景色,看不到的地方都设置为该颜色,设置为黑色。
目的:增加神秘感。
主要需要观察的地方有三点:
1、 Camera位置:模拟人眼瞳距,一般人眼瞳距为58-64mm,一般设置为60mm.形成视差,否则不会有立体效果,比如Vuforia 5.0.5新增的VR模式,两个Camera的位置一样,因此看到的场景一模一样,所以没有立体效果。
2、 裁剪平面Clipping Planes:官方设定为0.5,500,这个就是OpenGL里面的远平面和近平面,在Unity3d中,可以控制Camera视场的远近,在某种程度上也可以节省资源。
3、 视口矩形Viewport Rect:Camera视口的大小,这个在做一些小窗口以及VR应用中很常用。X,Y为左上角点坐标,范围为(0,1),W,H为宽高的大小,范围为(0,1)。
VR场景中,由于是分屏处理的,左右Camera看到的场景分别显示在屏幕左右两边。通过这里来控制显示位置。
调整几个组件的位置,使得场景在视野中的位置正确:
CardboardMain:x = 0, y = 0, z = -1.
Head: x = 0, y = 2, z = 0.
Main Camera:x = 0, y = 0, z = -0.3.
三、代码修改:
CardboardEye.cs 脚本 (Assets/Cardboard/Scripts)
复制代码
1
2
3
|
Vuforia.VuforiaBehaviour.Instance.ApplyCorrectedProjectionMatrix(proj, eye ==
Cardboard.Eye.Left);
|
CardboardHead.cs脚本(Assets/Cardboard/Scripts)
复制代码
1
|
Vuforia.VuforiaBehaviour.Instance.UpdateState(
false
,
true
);
|
这些地方设置完成之后,测试Android版本的基本可以在手机上跑起来了。
官方教程:
http://developer.vuforia.com/library/articles/Solution/Integrating-Cardboard-to-the-ARVR-Sample
另外,我不使用Cardboard的sdk,仅使用Vuforia做的VR+AR的效果,也给大家瞅瞅:
其实仅仅使用Vuforia4.x以上版本也可以做VR效果,但是是没有畸变的效果,使用蚁视机饕观看没有问题,但是使用向Cardboard这种有畸变的解决方案的VR设备可能会有问题。
对于AR+VR组合的场景,有个共同的问题,大家可以观察一下两幅视口的3D模型与拍摄到画面背景的位置关系,会发现模型相对于背景图像有一定的偏移,这个偏移就是视差引起,但是在AR这种场景中,带上VR设备观察,确实是有立体效果,但是3D模型是悬浮在2D背景上面的,这个问题一直遗留着,暂时还没有得到解决,也希望有兴趣的朋友一起来攻克这个难题。