[VR 개발]360 VR Capture를 통해 360 Panoramic 이미지 만들기 및 이미지

728x90

VR 공간 캡쳐 및 360도 파노라마 이미지 만들기 

생성한 에셋들로 구성된 씬의 한 지점에서 캡처를 통해 360 이미지를 생성하고 VR환경으로 가져와 제작하려고 한다. 

사용되는 기술은 스테레오 360 이미지 및 비디오 캡처로 구글의 옴니 방향 스테레오(ODS) 기술을 기반으로 만들어졌다.

자세한 내용은 아래 블로그를 참고하면 되겠다.

Stereo 360 Image and Video Capture | Unity Blog

 

Stereo 360 Image and Video Capture | Unity Blog

For the PC standalone player, you need to enable the “360 Stereo Capture" option in your build (see below) so that Unity generates 360 capture enabled shader variants which are disabled by default in normal player builds.

blog.unity.com

레벨디자인된 씬에서 몇가지 설정을 진행하도록 하겠다.

먼저 Create - Render Texture로 렌더 텍스쳐를 2개 생성해 준다. 하나는 2DOut으로 이름을 변경해주고 Dimension : 2D / Size : 4096 x 2048로 설정해준다. 나머지 렌더 텍스쳐는 Mono Render로 이름 설정 후 Dimension : Cube / Size : 4096 x 4096으로 변경해주면 된다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HDRcapture : MonoBehaviour
{
    public Camera mainCamera;
    public RenderTexture RenderTextureMono;
    public RenderTexture RenderTexture2DOut;
    
    private void Update()
    {
        if(Input.GetMouseButtonDown(0))
        {
            VRCapture();
        }
    }
    
    public void VRCapture()
    {
        // 눈 사이의 거리 6.4cm 
        mainCamera.stereoSeparation = 0.064f;
        // facemask 63은 기본값으로 6개의 큐브맵 면을 모두 렌더링 한다는 의미
        mainCamera.RenderToCubemap(RenderTextureMono, 63, Camera.MonoOrStereoscopicEye.Mono);
        // 큐브맵을 equirect format으로 바꾼다. 
        RenderTextureMono.ConvertToEquirect(RenderTexture2DOut, Camera.MonoOrStereoscopicEye.Mono);
        // 2D 텍스쳐 크기를 정하고,
        Texture2D OutTexture = new Texture2D(RenderTexture2DOut.width, RenderTexture2DOut.height);
        // RenderTexture.active 설정은 Graphics.SetRenderTarget을 호출하는 것과 동일함. 변경할때 사용.
        RenderTexture.active = RenderTexture2DOut;
        // 텍스쳐에 읽어온다.
        OutTexture.ReadPixels(new Rect(0, 0, RenderTexture2DOut.width, RenderTexture2DOut.height), 0, 0);
        // 변경 닫을때 null 입력한다고 생각하는 개념으로
        RenderTexture.active = null;
        // 텍스쳐의 값을 jpg 형태로 변경
        byte[] bytes = OutTexture.EncodeToJPG();
        // 저장 위치
        string path = Application.dataPath + "/1001/Panorama.jpg";
        // 파일 쓰기
        System.IO.File.WriteAllBytes(path, bytes);
    }
}

다음으로 하이라키 상에 Create empty를 생성하고 VRcapture라는 위의 스크립트를 작성해서 연결해준다. 그리고 각각의 소스들을 매핑해주면 된다. 임의로 폴더 생성(스크립트 내용과 맞추기 위해 1001 이름으로 폴더 생성했음)하고 플레이 모드 실행 후 왼쪽마우스를 클릭하면 360도 캡처된 이미지 파일이 생성되어 폴더에 저장된다.

저장된 이미지를 VR 환경 상으로 가져오면 완성된다. 해당 방법은 아래 블로그를 참고하면 된다.

https://seongju0007.tistory.com/98?category=879137 

 

[VR 개발]HDR Panoramic 360 VR 이미지 만들기

VR 개발 과정에 필요한 360도 VR 이미지를 생성하는 방법은 다음과 같이 4가지이다. 다양한 이미지 소스들에 따라 제작 방법이 각각 다르므로, 자신이 가지고 있는 이미지 형태에 맞춰 사용하면 되

seongju0007.tistory.com

 

A 이미지를 보다가 B이미지로 전환하고 싶을 때는 다음 방법을 사용해 주면 된다. (Sphere에 Shader을 매핑한 경우)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ChgTexture : MonoBehaviour
{
    public Texture m_ChgImg;
    Renderer myImg;
    // Start is called before the first frame update
    void Start()
    {
        myImg = GetComponent<Renderer>();
    }
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            myImg.material.SetTexture("_MainTex", m_ChgImg);
        }
    }
}

위 스크립트를 Sphere에 연결하고, Chg Img에 전환하고 싶은 이미지 소스를 넣어주기만 하면 된다. 플레이 시 마우스 왼쪽 버튼을 클릭하면 처음 이미지에서 새로 추가한 이미지로 전환되는 것을 확인할 수 있다. 

728x90