Notifications
Article
无边界的体验-Unity中开发360度视频应用简介
Updated 8 months ago
185
0
Unity中开发360度视频应用简介
Unity支持Equirectangular (经纬度)或是立方体贴图(6帧)布局的180°和360°视频。
理论上来说,无论全景视频的类型是什么,都可以在Unity中通过以下3个步骤实现全景视频的播放:
1. 将Video Player的回放视频源设置为一个渲染纹理(Render Texture)。
2. 设置一个接收RenderTexture的Skybox材质。
3. 将场景设置为使用Skybox材质。
Video Player设置
一旦将视频导入Unity成为资源,就可以通过将视频资源拖动到场景层级窗口的空白区域来创建视频播放器。默认情况下,系统会使用默认摄像机播放全屏视频,而这并不是我们想要的(按下播放,尝试一下)。我们要做一下修改,让它渲染到一个渲染纹理,这样我们就能准确地控制它的播放方式。具体做法是,点击Assets->Create菜单,创建一个渲染纹理(Render Texture)。将渲染纹理的Size设置为与视频完全匹配(在视频资源的检视器面板下部,预览 UI的“Source Info”部分,可以看到视频的尺寸信息),并将Depth Buffer选项设置为No Depth Buffer。

现在回到Video Player检视器,将Render Mode切换为Render Texture,并将Asset视图中新建的Render Texture拖动到Target Texture一栏中。进入播放模式,可以验证功能是否正常。此时,你不会在游戏视图中看到播放的视频,但如果你在Project窗口中选中那个渲染纹理资源,你可以看到它的内容已被更新为视频帧的内容。
创建一个Skybox材质
注意:在开始这个步骤之前请从Unity官方Github下载Skybox PanoramicShader。此Shader目前还没有集成到Unity编辑器中,将会被集成到Unity 2017.3版本中。下载地址:https://github.com/Unity-Technologies/SkyboxPanoramicShader)
为了将全景视频渲染为我们场景的背景,我们将用视频内容替换默认的Skybox。通过Assets->Create菜单新建一个材质,将材质的Shader设置为Skybox/Panoramic。将渲染纹理从Assets视图拖动到新建材质的纹理栏中。要使全景视频正确显示,你必须正确鉴别视频内容的类型。对于立方体贴图类型(例如与普通静态天空盒纹理一样的十字条形布局),选择6 Fames Layout Mapping。对于Equirectangular,选择Latitude Longitude Layout Mapping。然后,选择360°还是180°子选项,取决于视频是全360°视图,还是仅前向180°视图。如果设置无误,你应当可以在材质检视器底部的预览窗口中平移查看360或180内容是否正确。
渲染全景视频到天空盒
最后一步是将新建的Skybox材质连接到场景。从Window->Lighting菜单打开Settings面板。将新的Skybox材质拖放到Environment下的第一个栏位即可。此时点击播放按钮,应该能看到360视频在场景背景的天空盒上播放。更改场景摄像机方向会显示天空盒的不同部分,亦即全景视频的不同部分。
关于3D的说明
如果你在Player Settings中启用了Virtual Reality Support,Skybox/Panoramic材质中将会出现一个额外的3D Layout选项。如果你的视频源是立体的,应当启用该选项。如果左右眼内容分别位于左右位置,可使用Side by Side。如果左右内容在视频中是上下位置的,则应选择Over Under。在VR中渲染每只眼睛的内容时将会选择正确的视频部分。
对于非360的3D视频(不使用Skybox材质),如果使用Camera Near/Far Plane渲染模式,相同的3D Layout选项会直接出现在Video Player组件中。
立方体贴图视频的另一种渲染纹理类型
对于立方体贴图视频,除了上述步骤之外还有另一种选择。与其让VideoPlayer渲染到2D渲染纹理,完全保留与原视频一致的立方体贴图布局,不如让视频播放器直接渲染到渲染纹理立方体。只需简单的将渲染纹理资源的Dimension从2D改为Cube。这种情况下,渲染纹理的大小要设置为源视频单面的尺寸(例如,假设你有一个分辨率为4096x3073的4x3水平交叉立方体贴图布局视频,那么渲染纹理的大小应设置为1024x1024)。当Video Player渲染这样的一个Cube Target Texture时,它会假定源视频包含一个交叉或条状布局的立方体贴图(根据视频高宽比自动确定),并使用正确的立方体面填充渲染纹理的各个面。 得到的Render Texture Cube可被用作Skybox,使用一个Skybox/Cubemap材质替换上面提到的Skybox/Panoramic材质。
关于视频尺寸和转码的说明
立方体贴图(6帧布局) 2D视频的宽高比应当是1:6、3:4、4:3或6:1,视面布局而定。Equirectangular(经纬度布局)2D视频的宽高比应当是2:1(针对360°内容)或1:1(针对180°内容)。要包含3D内容,需要视频的宽度或高度翻倍(分别对应Side-by-Side 或 Over-Under布局)。请记住,许多桌面硬件视频解码器都限制为4K分辨率,而移动硬件视频解码器通常限制为2K或更低,这限制了这些平台上实时播放时的回放分辨率。可以使用视频转码生成全景视频的低分辨率版本,但要注意避免在左右格式3D内容的边缘,或者立方体贴图的面之间,以及邻接的黑色区域产生溢出。一般来说,进行视频创作和转码时,建议将大小设定为2的次幂,以减少视觉瑕疵。
【示例工程下载】

Richard Yang 杨栋
Platform Project Manager / Evangelist Lead - Programmer
6
Comments