Unity3D VR 教程之VR开发

2016年10月13日 17:31 0 点赞 0 评论 更新于 2020-01-11 21:59

基础

在开始使用 Unity 进行基础 VR 开发之前,需完成 Unity 的配置与安装。在打开 Unity 前,要确保 DK2 已正确连接并启动,同时检查 Oculus 配置工具是否能正常工作。可能需要设置一个新用户来运行 Demo 场景。

创建你的第一个 VR 项目

首先创建一个测试项目,并以创建一个可在 VR 中观察的立方体作为开端。若你想研究更详细的现成 VR 示例,可下载概述中提到的 VR 示例项目。具体步骤如下:

  1. 创建空工程:在 Unity 启动时跳出的对话框中,创建一个空工程。
  2. 选择平台:在平台选择里,选择“PC, Mac & Linux Standalone”。可在最上面的菜单栏中选择“File > Build Settings”进行设置。
  3. 创建并调整立方体:在新建的空场景中,创建一个立方体(通过“Game Object > 3D Object > Cube”),然后使用移动工具将其位置调整到默认的主摄像机前。
  4. 保存场景:选择“File > Save Scene”保存当前场景。
  5. 检查设置:通过“Edit > Project Settings > Player”打开 Player 设置面板,检查是否已勾选“Virtual Reality Supported”。
  6. 进入 Play 模式:点击界面上方的 Play 按钮,进入 Play 模式。

此时,你应该可以在 DK2 上看到这个场景,同时电脑屏幕的 Game 窗口中会有摄像机的镜像。在 DK2 中环顾四周时,Unity 中的摄像机位置和旋转也会相应改变。

解决故障

若无法在 DK2 中看到场景,可参考以下提示:

  • 确认 DK2 在打开 Unity 项目之前已正确接入并开启。
  • 检查 Oculus Configuration Utility(Oculus 配置程序)中的 Demo Scene(示例场景)能否正常查看。
  • 升级显卡驱动。
  • 确认已安装 Oculus Runtime 0.8 或更高版本。

如需更多 VR 方面的帮助,可前往 [Unity VR 官方论坛](Unity VR Forum)。

VR 开发的实用信息

VR 开发与标准 Unity 开发有相似之处,但也存在一些需要注意的区别。

Editor 中的帧数(Frame Rate)

在 Editor 中查看项目时,由于场景会为每只眼睛各渲染一次,可能会感觉有延迟和抖动。同时,渲染 Unity IDE 也会带来一定负担。因此,建议时常构建项目并直接运行,以测试项目在设备上的性能。

摄像机移动

在 Unity 中不能直接移动 VR 摄像机。若要移动或旋转摄像机,需将其作为子对象放置在另一个 GameObject 下,然后对父对象进行操作。例如,在 VR Samples 项目中的 Flayer and Maze 场景。若要获取这些节点的位置,可使用 InputTracking 类。

摄像机节点

左眼和右眼节点并非在 Unity 中直接创建。若需获取场景中各个眼睛所在的位置,可使用以下脚本并添加到摄像机上:

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 the eye anchor is no longer a child of us, don't use it
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;
}
}

// Update the eye transform
eyes[i].transform.localPosition = InputTracking.GetLocalPosition((VRNode)i);
eyes[i].transform.localRotation = InputTracking.GetLocalRotation((VRNode)i);
}
}
}

VR 中的滤镜特效

在 VR 项目中,许多图像滤镜效果会消耗大量资源。由于场景会为每只眼睛各渲染一次,大多数滤镜会对帧数和性能产生较大影响,因此通常不使用。

由于 VR 是将用户的眼睛置于虚拟场景中展示画面,一些图像滤镜的意义不大。例如,景深、模糊、镜头光晕等效果在真实世界中通常不会出现,所以在 VR 中基本无用。不过,如果 VR 头戴设备最终支持眼球追踪,景深效果将变得有意义。

有一些滤镜是可以使用的:抗锯齿在低画质时非常有用;颜色分级也是必要的(可查看实用的 Unity 博客获取更多信息);Bloom 滤镜在某些游戏中可能会有不错的效果。因此,建议进行试验,以确定哪些滤镜在你的游戏中适用。

Unity 提供了一些合适的图像滤镜,可通过“Assets > Import Package > Effects”导入。Asset Store 中也有许多出色的图像滤镜,如 Colorful、Chromatica、Amplify Color 等。

渲染比例(render scale)

根据正在运行的 VR 场景的复杂度,可能需要调整渲染尺寸。这会影响纹理和镜头前的像素比例修正,意味着可能需要在性能和锐度之间进行权衡。

渲染比例只能通过代码设置,参考文档:http://docs.Unity3D.com/ScriptReference/VR.VRSettings.html,以下代码可方便设置:

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

namespace VRStandardAssets.Examples
{
public class ExampleRenderScale : MonoBehaviour
{
[SerializeField]
private float m_RenderScale = 1f; //The render scale. Higher numbers = better quality, but trades performance

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

我们的 VR 演示项目中有一个基础示例,位于 Scenes/Examples/RenderScale 场景中,MainMenu 场景中也有使用。

修改渲染比例示例

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

  • 若将渲染比例调整到 1.5,模型看起来会更清晰。
  • 若将渲染比例调整到 0.5,图像看起来会更像素化。

根据场景的运行状况,可能需要降低渲染尺寸以提高显示性能,或者增加渲染比例以提高显示的锐利度。

现在你已经对 Unity 中的基础 VR 集成有了更深入的了解。在下一篇文章“VR 中的交互”中,你将学习如何在 VR 中与物体进行交互。

作者信息

孟子菇凉

孟子菇凉

共发布了 3994 篇文章