如何用Unity 2018.1制作360度图片和视频

今年1月26日Unity在博客更新里宣布其新版本Unity 2018.1 开始支持立体360度图片和视频捕捉的新功能。

此功能基于谷歌的全方位立体(Omni-directional Stereo, ODS) 技术,在编辑器和PC单机播放器上均支持用户通过Unity本身的图像加工流程里渲染生成立方体地图。生成的立方体可以进一步被转化成立体全景地图,用于在360度媒体上展示播放。

这篇博客大家简单讲解了一番这个新功能并发布了立体内容抓取和转化功能的API,如下:
1. public bool RenderToCubemap(Cubemap cubemap, int faceMask = 63)
2. public void ConvertToEquirect(RenderTexture equirect, Camera.MonoOrStereoscopicEye eye)

本教程意在对使用步骤进行更详细的分解。这里我们使用安装Unity时的案例项目,你可以把它选作一个Component.

Unity下载和安装

现在我们就可以开始使用这项功能了:

1. 在你的项目里启动以下三个渲染质地:

unity render

将cubemap_left和cubemap_right的参数如下图所示设置:

unity setting

然后,将equirect相关选项如下设置:

unity configure

2. 在API中找到以下脚本,将其附加到系统的主相机上。

using UnityEngine;
using UnityEngine.Rendering;

//attach this script to your camera object
public class CreateStereoCubemaps : MonoBehaviour
{
public RenderTexture cubemapLeft;
public RenderTexture cubemapRight;
public RenderTexture equirect;
public bool renderStereo = true;
public float stereoSeparation = 0.064f;

void LateUpdate()
{
Camera cam = GetComponent();

if (cam == null)
{
cam = GetComponentInParent();
}

if (cam == null)
{
Debug.Log(“stereo 360 capture node has no camera or parent camera”);
}

if (renderStereo)
{
cam.stereoSeparation = stereoSeparation;
cam.RenderToCubemap(cubemapLeft, 63, Camera.MonoOrStereoscopicEye.Left);
cam.RenderToCubemap(cubemapRight, 63, Camera.MonoOrStereoscopicEye.Right);
}
else
{
cam.RenderToCubemap(cubemapLeft, 63, Camera.MonoOrStereoscopicEye.Mono);
}

//optional: convert cubemaps to equirect

if (equirect == null)
{
return;
}

if (renderStereo)
{
cubemapLeft.ConvertToEquirect(equirect, Camera.MonoOrStereoscopicEye.Left);
cubemapRight.ConvertToEquirect(equirect, Camera.MonoOrStereoscopicEye.Right);
}
else
{
cubemapLeft.ConvertToEquirect(equirect, Camera.MonoOrStereoscopicEye.Mono);
}
}
}

3. 选取主相机,用检视器中的渲染质地来创建立体的立方体地图

unity main camera

4. 运行脚本。Equirect此时已经记录下了主相机所捕捉到的立体内容。

unity main camera stereo

我们创建了一个新的UI元素RawImage来跟踪Equirect的产出,如下面这个屏幕中的左上角方块所示:
记得把Equirect拖到RawImage的质地属性。然后就全部完成了,现在我们可以播放一遍录制出来的整个场景了!
Unity推荐使用Unity Frame Recorder插件来作为导出媒介。此插件一帧一帧输出渲染质地,然后您可以使用常规的视频编辑软件来把这些帧连接成360度的视频。

而Unity’s 360 Video Playback插件可以用来在Unity里回放全景视频。

unity raw image

这篇博文还提到了XR设置中的360立体捕捉选项。这个选项用来控制你的Unity项目是否支持360度着色器, 给Unity的游戏开发者们留足了想象空间,因为这样他们就可以让玩家进行第一人称的全景游戏录屏了。

unity xr setting

这项新功能目前对于部分开发者的自定义着色器还未必能运行得很好,可能会导致360度拍摄异常。我们也期待Unity在这方面的进展。