Unity3D VR 教程之VR开发

2017年04月05日 18:04 0 点赞 0 评论 更新于 2020-01-11 22:03

基础

在开始使用 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 项目之前已正确连接并开启。
  • 检查 Occulus Configuration Utility(Occulus 配置程序)中的 Demo Scene(示例场景)是否能正常查看。
  • 升级显卡驱动。
  • 确认已安装 Oculus Runtime 0.8 或更高版本。

若你需要更多 VR 方面的帮助,可前往 Unity VR Forum(Unity VR 官方论坛)。

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 中基本无用。不过,若 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 篇文章