基于Unity的VR全景视频(一)

实现全景视频播放主要包括两种方式:1、以暴风魔镜等移动端为载体的开发 2、以HTC vive等PC端为载体的开发。这是因为Unity自身的MovieTexture仅可以支持PC端,而在移动端只能利用类似于EasyMovieTure的插件来开发,但两者的底层技术是一样的,都是将视频解析成一帧一帧的图像作为Texture贴在Material赋给球形GameObject。
本篇讲述利用Unity自身的MovieTexture制作全景视频,首先Unity并不能直接加载.mp4 , .mov 格式的视频文件,官方文档给出的方式是将需要视频放在Quickime上播放一遍,其实本质就是将.mp4 , .mov 等视频格式转成.ogv,Unity才能直接识别。所以可以利用格式转化工具Theora Converter .NET、ffmpeg等直接将视频转成.ogv。
其中视频有三个参数需要注意,码率、帧率、分辨率。因为这三者是关系到最后视频贴图贴在材质上的播放的清晰度和流畅度的问题。毕竟,在VR设备中,刷新帧率至少要大于60帧才不会让人觉得眩晕,但视频的清晰度直接影响了刷新率的大小,所以如何在两者中找到一个平衡点。
基于Unity的VR全景视频(一)_第1张图片

将贴图贴在球形GameObject里面的shander:

Shader "Unlit/DoubleSided" 
{ 
    Properties 
    { 
        _Color("Main Color", Color) = (1,1,1,1) 
        _MainTex("Texture", 2D) = "white" {} 
    } 
        SubShader 
    { 
        //Ambient pass 
        Pass 
        { 
            Name "BASE" 
            Tags {"LightMode" = "Always" /* Upgrade NOTE: changed from PixelOrNone to Always */} 
            Color[_PPLAmbient] 
            SetTexture[_BumpMap] 
            { 
                constantColor(.5,.5,.5) 
                combine constant lerp(texture) previous 
            } 
        SetTexture[_MainTex] 
    { 
        constantColor[_Color] 
        Combine texture * previous DOUBLE, texture *constant 
    }
        }
        //Vertex lights 
        Pass{ 
        Name "BASE" 
        Tags {"LightMode" = "Vertex"} 
        Material 
    { 
        Diffuse[_Color] 
        Emission[_PPLAmbient] 
        Shininess[_Shininess] 
        Specular[_SpecColor] 
    }
        SeparateSpecular On 
        Lighting On 
        cull off 
        SetTexture[_BumpMap] 
        { 
            constantColor(.5,.5,.5) 
            combine constant lerp(texture) previous 
        } 
        SetTexture[_MainTex] 
        { 
            Combine texture *previous DOUBLE, texture *primary 
        } 
    }
    }
        FallBack "Diffuse", 1 
}

ffmpeg用法:

ffmpeg - i “文件路径/文件名.格式” -s 3000x1500(分辨率) -r 25 (帧率) -b:v 8782(码率,默认单位为Bit/s) "输出文件路径/输出文件名.格式" 

你可能感兴趣的:(Unity3D基础)