Unity摄像机画面制作全景图片|截图制作全景图

Posted Glunn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity摄像机画面制作全景图片|截图制作全景图相关的知识,希望对你有一定的参考价值。

Unity摄像机画面制作全景图片

目录

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

效果展示

unity的场景

生成的图片

Unity编辑器中使用脚本部分

[MenuItem("生成图片/CreatPic")]
    public static void A()
    
        Camera cam = Camera.main;
		//可修改数值   new RenderTexture(4096, 4096, 32);
        RenderTexture cubemap = new RenderTexture(2048, 2048, 16);
        cubemap.dimension = TextureDimension.Cube;
        cam.RenderToCubemap(cubemap, 63, Camera.MonoOrStereoscopicEye.Mono);
		//可修改数值 new RenderTexture(4096, 4096, 32);
        RenderTexture equirect = new RenderTexture(1920, 1080, 8);
        cubemap.ConvertToEquirect(equirect, Camera.MonoOrStereoscopicEye.Mono);

        RenderTexture.active = equirect;
        Texture2D tex = new Texture2D(equirect.width, equirect.height, TextureFormat.ARGB32, false, true);
        tex.ReadPixels(new Rect(0, 0, tex.width, tex.height), 0, 0);
        RenderTexture.active = null;
        GL.Clear(true, true, Color.black);
        tex.Apply();
        byte[] bytes = tex.EncodeToTGA();
        CreateDirectroryOfFile(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) + "\\\\全景图\\\\)");
        System.IO.File.WriteAllBytes(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop)
            + "\\\\全景图\\\\" + System.DateTime.Now.Ticks + ".tga", bytes);

    

    public static void CreateDirectroryOfFile(string filePath)
    
        Debug.Log($"CreateDirectrory filePath[folder_path],");
        if (!string.IsNullOrEmpty(filePath))
        
            string dir_name = Path.GetDirectoryName(filePath);
            if (!Directory.Exists(dir_name))
            
                Debug.Log($"No Exists dir_name[dir_name],");
                Directory.CreateDirectory(dir_name);
            
            else
            
                Debug.Log($"Exists dir_name[dir_name],");
            
        
    

Unity编辑器中使用方法

我们的脚本部分写完左上角的菜单栏中会出现生成图片四个字

打开这个选项我们可以看到CreatPic
然后我们点击后就可以执行完毕
会自动在我们的桌面创建文件夹然后把图片存储进去

Unity动态存储图片脚本部分

 Camera cam;
    RenderTexture cubemap;
    RenderTexture equirect;
    [Header("生成次数  true为连续生成")][SerializeField] private bool ison;
    void Start()
    
        cam = Camera.main;
        cubemap = new RenderTexture(4096, 4096, 32);
        cubemap.dimension = TextureDimension.Cube;
        equirect = new RenderTexture(4096, 2048, 32);
        StartCoroutine(B());
    

    // Update is called once per frame
    void Update()
    
        if (ison)
        
            StartCoroutine(B());
        
    

    IEnumerator B()
    
        if (ison)
        
            while (true)
            
                Creat();
                yield return new WaitForSecondsRealtime(0.04F);
            
        
        else
        
            Creat();
        


        yield return null;
    


    public void Creat()
    
        cam.RenderToCubemap(cubemap, 63, Camera.MonoOrStereoscopicEye.Mono);
        cubemap.ConvertToEquirect(equirect, Camera.MonoOrStereoscopicEye.Mono);
        RenderTexture.active = equirect;
        Texture2D tex = new Texture2D(equirect.width, equirect.height, TextureFormat.ARGB32, false, true);
        tex.ReadPixels(new Rect(0, 0, tex.width, tex.height), 0, 0);
        RenderTexture.active = null;
        GL.Clear(true, true, Color.black);
        tex.Apply();
        byte[] bytes = tex.EncodeToTGA();
        CreateDirectroryOfFile(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop) + "\\\\全景图\\\\)");

        System.IO.File.WriteAllBytes(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop)
            + "\\\\全景图\\\\" + System.DateTime.Now.Ticks + ".tga", bytes);
    
    public static void CreateDirectroryOfFile(string filePath)
    
        Debug.Log($"CreateDirectrory filePath[folder_path],");
        if (!string.IsNullOrEmpty(filePath))
        
            string dir_name = Path.GetDirectoryName(filePath);
            if (!Directory.Exists(dir_name))
            
                Debug.Log($"No Exists dir_name[dir_name],");
                Directory.CreateDirectory(dir_name);
            
            else
            
                Debug.Log($"Exists dir_name[dir_name],");
            
        
    

Unity动态存储图片使用方法

动态存储的方法 很简单 随便放置一个空物体然后把我们的脚本放置上去就可以了

其中注意我们的脚本上会有一个bool值 此值的作用为True的时候会连续存储图片

Unity 制作360全景视频 全景图片流程

Recorder的使用

在Unity制作360图片或者视频需要用到UnityPackage:Recorder

如果没有就在Package Manager寻找

1、在菜单栏找到Window/General/Recorder/RecorderWindow

参数说明:

  • Animation Clip:录制动画剪辑

  • Movie:录制视频

  • Image Sequence:序列帧图片

  • GIF Animation:GIF格式的动图

  • Audio:仅录制音频

录制360视频

设置参考:

1.点击AddRecorder选择Movie

2.在Source选择360 View

3.Recording Mode选择模式

  • Manual 手动开始与关闭录制
  • Single Frame 录制单帧(输入第几帧)
  • Frame Interval 帧间隔(开始帧到结束帧)
  • Time Interval 时间间隔(开始时间到需要录制的时间)

START RECORDING开始录制

制作一个可以播放360视频的工具



1.创建空物体增加组件VideoPlayer,Render Mode模式选择 Material Override

2.在这个物体下再次创建一个球体,材质设置成Skybox/Panoramic

3.在组件VideoPlayer中Video Clip选择360视频

4.Renderer选择球体

5.摄像机放在球体中间就可以看到360视频

制作一个360图片

这个就比较简单,创建一个球体,材质设置成Skybox/Panoramic,直接拖入图片就可以

录制图片一般只需要录制1帧就可以了,不要忘记设置,到时候录制一大推高质量图片
设置参考:

(图片设置)记得把Geberate Mip Maps取消勾选,不然图片会有一条缝隙

相机设置:

如果无法正常显示制作好的360图片或者360视频,可能是相机设置有问题

Demo下载链接

以上是关于Unity摄像机画面制作全景图片|截图制作全景图的主要内容,如果未能解决你的问题,请参考以下文章

全景梦境般的H5如何制作

Unity 制作360全景视频 全景图片流程

大型网游全景图制作方法

全景效果图用啥软件做

Unity2017中VR全景图和全景视频设置

3Dvr全景制作的流程是啥?