Unity开发VR眼镜中文入门教程(2)

VR基础开发

 

按照前面所描述的安装后软硬件环境.并在Oculus Configuration Utility运行Demo Scene场景确保DK2的连接和配置正确.

创建第一个VR项目

 

我们现在开始创建一个VR测试项目,在场景中放置立方体便于查看运行效果,可以从资源商店里下载更精美的示例场景(https://www.assetstore.unity3d.com/#!/content/51519).

第一步: 打开Unity,新建个空项目.

第二步: 确保选择的PC, Mac & Linux Standalone 平台,在File > Build Settings设置.

1_build_settings

第三步: 创建一个立方体(Game Object > 3D Object > Cube)并用移动工具把它放在默认主相机的前方.

2_basic_cube_rotated

第四步:保存场景 (File > Save Scene).

第五步:到Edit > Project Settings > Player下选”Virtual Reality Supported”复选框.

3_enable_vr_-2

第六步,点击Play按钮进入播放模式

现在可以在DK2中看到你的场景.同样的你可以在Unity的Game视图看到相同的画面.

故障排除: 如果在DK2中看不到场景,可以试试下面的方法:

  • 在打开Unity项目之前确保DK2连接好电脑并且开启电源.
  • 在Oculus Configuration Utility查看Demo场景是否正常运行.
  • 更新你的显卡驱动.
  • 确保安装了Oculus Runtime 0.8(https://developer.oculus.com/downloads/)或更新版本.

如果仍旧没有解决需要在VR开发需要援助请查看Unity的VR论坛:forum.unity3d.com/forums/virtual-reality.80/

VR开发中一些重要信息

 

VR的开发与常规Unity开发非常相似,但还是有一些差异的.

编辑器中的帧率

 

如果在编辑器中运行VR项目,可能会遇到一些延迟和抖动,由于电脑要渲染两次相同的内容,Unity编辑器界面绘制也会消耗一定资源,所以最好要偶尔把项目编译出来直接运行它来检查效率.

相机的运动

 

在Unity中不能直接移动VR相机,如果你想改变它的位置和朝向,要确保相机有一个父物体,并去移动或旋转这个父物体.

4_cameracontainer

可以查看VR示例项目中的Flyer和Maze场景我们操作移动相机的方法.

相机节点

 

Unity中是不需要创建左右眼相机的.如果你想活的左右眼相机的位置,你只能用InputTracking(docs.unity3d.com/ScriptReference/VR.InputTracking.html)类.如果你想在场景中获得左右眼相机的位置或者用来测试之类,可以用下面的脚本附加到相机上来查看.

 

using UnityEngine;
using UnityEngine.VR;
public class UpdateEyeAnchors : MonoBehaviour
{
 GameObject[] eyes = new GameObject[2];
 string[] eyeAnchorNames ={ "LeftEyeAnchor", "RightEyeAnchor" };void Update()
 {
 for (int i = 0; i < 2; ++i)
 {
 //如果左右眼对象没有父物体,就不能用它
 if (eyes[i] != null && eyes[i].transform.parent != transform)
 {
 eyes[i] = null;
 }
// If we don't have an eye anchor, try to find one or create one
 if (eyes[i] == null)
 {
 Transform t = transform.Find(eyeAnchorNames[i]);
 if (t)
 eyes[i] = t.gameObject;
if (eyes[i] == null)
 {
 eyes[i] = new GameObject(eyeAnchorNames[i]);
 eyes[i].transform.parent = gameObject.transform;
 }
 }
// 更新眼睛位置
 eyes[i].transform.localPosition = InputTracking.GetLocalPosition((VRNode)i);
 eyes[i].transform.localRotation = InputTracking.GetLocalRotation((VRNode)i);
 }
 }
}

 

VR的图像效果

 

在VR项目中很多图像效果都是很耗费性能的相当于同样的场景渲染两次,因为每只眼睛都要渲染一次,用图像效果(image effects)越多对帧率影响越大.

由于VR是虚拟现实中用户眼睛看到的景象,所以一些图像效果在VR中一般是没有意义的,例如景深,模糊,镜头眩光等等.因为现实中人眼是看不到它们的.如果未来VR设备支持眼球跟踪,那么可以用景深效果提高真实感.

一些图像效果是可以用的,如抗锯齿(特别是低分辨率的VR眼镜),Color Grading(blogs.unity3d.com/2015/05/12/color-grading-with-unity-and-the-asset-store/)和Bloom在一些游戏中可以用的,可以试着用用它们调整出更好的效果.

Unity提供了很多图像效果供你使用(Assets > Import Package > Effects),在资源商店中也有很多不错的图像效果,如Colorful(https://www.assetstore.unity3d.com/en/#!/content/44845), Chromatica(https://www.assetstore.unity3d.com/en/#!/content/20743), Amplify Color(https://www.assetstore.unity3d.com/en/#!/content/20743), 其它等等(https://www.assetstore.unity3d.com/en/#!/search/page=1/sortby=popularity/query=category:148).

渲染比例

 

根据VR场景和使用的VR硬件,我们可能要改变渲染比例,控制镜头中图像与像素的比例.这意味着图像表现锐度会被改变.

这必须要通过代码,具体看这里: http://docs.unity3d.com/ScriptReference/VR.VRSettings-renderScale.html. 可以用下面这个脚本很容易的实现:

 

using UnityEngine;
using System.Collections;
using UnityEngine.VR;

namespace VRStandardAssets.Examples
{ 
 public class ExampleRenderScale : MonoBehaviour
 {
 [SerializeField] private float m_RenderScale = 1f; //这个渲染比,数值越高画质越好但是性能越低

void Start ()
 {
 VRSettings.renderScale = m_RenderScale;
 }
 }
}

可以在VR示例的Scenes/Examples/RenderScale中看到相关基本例子,它同样可以用在主菜单场景.

更改渲染比例的例子:Unity中默认渲染比是1.0:

5_renderscale-1x

如果我们增加到1.5,可以看到画面更清晰.

6_renderscale-1.5x

最后,我们降低渲染比例到0.5,我们会看到画面损失了:

7_renderscale-0.5x

根据实际运行测试,我们或降低渲染比例以提高性能,或提高渲染比例增加视觉清晰度.


原文:http://unity3d.com/learn/tutorials/topics/virtual-reality

由 四角钱 (XK) 翻译,转载请注明来自 http://blog.1vr.cn

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注