[Unity] [外文翻译] 在unity中添加360度视频

查看:1675 |回复:29 | 2017-5-16 00:29:07

您需要 登录 才可以下载或查看,没有账号?注册

x
    由misslivirose在2016年10月4日发布

174108syapte7iq5rd4pdv.png.thumb.jpg


    由于360度视频和计算机生成的交互内容之间的界限很模糊,我发现自己经常被问的一件事就是——怎样在一个unity的场景中添加一个360度的视频回放。这个快速教程将通过一个便捷方式在unity游戏引擎中向场景里添加360度的、2D视频内容(例如:这种类型的视频由Gear 360或者Ricoh Theta camera理光360度全景摄像数码相机摄制)

准备视频文件

    Unity通过引用Movie Texture 类支持视屏回放,并且允许你通过QuickTime去导入文件类型为 .mov, .mpg, .mpeg, .mp4, .avi, and .asf的文件。如果你还没有安装,你可以在窗口中获取QuickTime 来导入你的360度视频文件至你项目的Assets文件夹。我使用一个我在Gear 360中拍摄并上传到YouTube的简单视频,这个视频以 .mp4的文件类型在我的S6 Edge手机上的Gear 360 app上被缝合。你也想使用视频编辑工具来水平镜像你的视频片段,就像我们的shader会翻转视频那样,这是一个最简单的解决方案。当你有了你的缝合视频片段,是unity支持的视频文件格式,并且已经被镜像了,你就可以通过using Assets > Import New Asset将视频导入你的unity工程。

174924vw2zzenleeey3gew.png.thumb.jpg


创建我们播放视频的球体

    创建视频球体需要三个步骤,为了能够支持视频播放我们需要将他们组合起来。默认情况下,unity将指派我们的视频作为一个Movie Texture object,所以我们不需要在这里做任何特殊的事情。我需要做的事情是:
    1、创建一个球体环绕我们的相机,这个球体将作为我们视频播放的表面。
    2、为我们的 movie texture创建一个新的材质,使用自定义shader来改变球体内部视频的播放。
    3、为球体写一个脚本来播放movie texture。

    当你创建球体,给它一个较大的scale (我使用的是20,20,20)再放置它,便于中心点始终是我们的相机。如果你现在运行你的应用,你会发现unity在默认状态下不会渲染球体的内表面,我们需要在我们创建的新材质上通过修改它的shader来解决这个问题。

    在Assets 文件夹里,我们右击并且创建新文件夹:

    1、Assets > Create > Shader > Standard Surface Shader,命名为“InvertNorm”
    2、Assets > Create > C# Script, 命名为“PlayVideo.cs”
    3、Assets > Create > Material, 命名为“VideoMat”

双击InvertNorm shader文件在你的脚本编辑器里打开它(我使用的是Visual Studio编辑器,在这里是可以免费获取的)然后用这个代码来代替它:
  1. Shader "Flip Normals" {
  2.     Properties{
  3.         _MainTex("Base (RGB)", 2D) = "white" {}
  4.     }
  5.         SubShader{

  6.         Tags{ "RenderType" = "Opaque" }

  7.         Cull Front

  8.         CGPROGRAM

  9. #pragma surface surf Lambert vertex:vert
  10.         sampler2D _MainTex;

  11.     struct Input {
  12.         float2 uv_MainTex;
  13.         float4 color : COLOR;
  14.     };


  15.     void vert(inout appdata_full v)
  16.     {
  17.         v.normal.xyz = v.normal * -1;
  18.     }

  19.     void surf(Input IN, inout SurfaceOutput o) {
  20.         fixed3 result = tex2D(_MainTex, IN.uv_MainTex);
  21.         o.Albedo = result.rgb;
  22.         o.Alpha = 1;
  23.     }

  24.     ENDCG

  25.     }

  26.         Fallback "Diffuse"
  27. }
点击此处复制文本
至于3D模型,一个材质的默认行为是会把它放置在mesh物体的外部渲染,这将取决于物体的法线贴图—— 垂直方向上的平面几何结构。关于以上的脚本我们要做的就是告诉物体我们想要反转那些法线,便于代替外表面,与我们的几何结构相反,texture 应该朝向内部。

    保存我们的shader文件,然后双击PlayVideo.cs 来打开脚本。通常带有video texture的视频会自动播放,但当我们添加我们的自定义shader在材质上后,它将重载这部分,我们还需要触发我们视频的自动播放。将下面两条代码添加进PlayVideo.cs脚本中,使它看起来像这样:

  1. using UnityEngine;
  2. using System.Collections;

  3. public class PlayVideoOnLoad : MonoBehaviour {
  4.     public MovieTexture _movie;
  5.     // Use this for initialization
  6.     void Start () {
  7.         _movie.Play();
  8.     }
  9.      
  10.     // Update is called once per frame
  11.     void Update () {
  12.      
  13.     }
  14. }
点击此处复制文本
这将使我们的视频自动播放,你还可以随时调用_movie.Play() ,例如你在应用场景中与一个特殊物体进行交互时。既然这样,我们还需要指定我们在检视面板中要播放什么视频内容。

    保存你的脚本文件,然后回到unity。在Asset菜单中,选择VideoMat 并且在检视面板中进行如下设置:

    1、将shader从 顶部的Standard (Specular) 改为InvertNorm
    2、将视频文件拖拽至Base (RGB) texture 属性点。

    将你的视频材质拖拽到球体上。你应该能在内表面看见正如你所期望的360度视频视图!通过拖拽在球体上添加PlayVideo 脚本并且在unity中播放视频。你的视频播放应该自动开始并且在场景中环绕在你周围。

    在场景中四处查看和与物品进行交互的能力将依赖于你的main camera物体,所以我继续在demo中使用略微修改的FPS角色控制器,但是你可以用你选择的任何相机来重现这个画面。


资源

    完成工程案例可以在Github上找到https://github.com/misslivirose/360-video-example
    Shader资源:Answers.Unity3d.com


原文作者:misslivirose

2017-5-16 00:29:07  
 赞 赞 0

使用道具 登录

29个回答,把该问题分享到群,邀请大神一起回答。
2#
厉害哈哈哈哈
回复 收起回复
2017-5-16 01:45:55   回复
 赞 赞 0

使用道具 登录

3#
不错的教程,谢谢分享
回复 收起回复
2017-5-16 09:28:31   回复
 赞 赞 0

使用道具 登录

4#
谢谢楼主分享
回复 收起回复
2017-5-16 09:29:44   回复
 赞 赞 0

使用道具 登录

5#
只能说666
回复 收起回复
2017-5-16 12:37:34   回复
 赞 赞 0

使用道具 登录

6#
这世上没有什么是元素币搞不定的,如果有,那就用更多!
回复 收起回复
2017-5-17 00:24:49   回复
 赞 赞 0

使用道具 登录

7#
nice!
回复 收起回复
2017-5-22 13:52:48   回复
 赞 赞 0

使用道具 登录

8#
这个不错 试着做做看
回复 收起回复
2017-5-23 10:45:41   回复
 赞 赞 0

使用道具 登录

9#
好东西,感谢分享。
回复 收起回复
2017-5-24 11:19:46   回复
 赞 赞 0

使用道具 登录

10#
谢谢楼主分享
回复 收起回复
2017-6-6 10:21:47   回复
 赞 赞 0

使用道具 登录

11#
非常好的东西,谢谢分享
回复 收起回复
2017-7-13 11:13:48   回复
 赞 赞 0

使用道具 登录

12#
天下武功出少林,世界资源入元素!
回复 收起回复
2018-10-17 10:00:12   回复
 赞 赞 0

使用道具 登录

13#
回复 收起回复
2018-10-17 10:04:25   回复
 赞 赞 0

使用道具 登录

14#
厉害了厉害厉害  谢楼主分享
回复 收起回复
2018-10-17 10:07:08   回复
 赞 赞 0

使用道具 登录

15#
回复 收起回复
2018-10-17 10:11:04   回复
 赞 赞 0

使用道具 登录

16#
认真的看看
回复 收起回复
2018-10-17 10:27:49   回复
 赞 赞 0

使用道具 登录

17#
资源哪里好,肯定元素找!
回复 收起回复
2018-10-17 10:59:45   回复
 赞 赞 0

使用道具 登录

18#
66666
回复 收起回复
2018-10-17 11:08:53   回复
 赞 赞 0

使用道具 登录

19#
66666
回复 收起回复
2018-10-17 11:08:55   回复
 赞 赞 0

使用道具 登录

20#
资源哪里好,肯定元素找!
回复 收起回复
2018-10-17 11:26:20   回复
 赞 赞 0

使用道具 登录

CG 游戏行业专业问题

Unity3D技术手机游戏引擎手游引擎
12下一页
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表