유니티 최고/유니티 구현

[Unity] 유니티 여러대의 카메라 캡쳐 (MultiCam Capture) / 투명 캡쳐

Lee_story_.. 2025. 4. 28. 17:26
728x90

 

이번글은 제목 그대로! 씬 상의 여러대의 카메라가 있을때 이를 동시에 사용하여 캡쳐하는 방법을 정리하였습니다!

 

 

이전에 정리했던 Recorder 기능을 이용하여 캡쳐를 진행하였고,

 

[Unity] 유니티 Recorder를 이용하여 화면 녹화하기

평소 블로그에 글을 쓰거나 했던 것들에 대해 사진으로 남기기는 약간 애매한경우!Window + G를 통해 전체 화면을 녹화 했었습니다! (윈도우 기본 녹화 프로그램) 하지만... 이를 이용한 녹화는 화

ljhyunstory.tistory.com

추가로 코드를 통해 캡쳐하는 방법도 알아보겠습니다.

 

 

그럼 시작!

 

 

먼저 저는 지난 글에 이어, bvh를 시각화 하는 프로그램을 만들고 있습니다. 

다양한 방향에서 보여주고 싶어서, 아래처럼 카메라가 여러대....를 만들어 버렸고,

 

보기 좋게 아래 화면 처럼 구성하긴 했지만!

 

각각의 애니메이션이 진행될때의 이미지가 필요한 상황....

그래서! Recoder를 사용해 보기로 하였습니다. 

 

Recorder에서 image Sequence를 추가해주면 프레임 마다의 캡쳐가 가능한데,

 

일단 생성하면 아래와 같은 설정창이 나오게 됩니다. 

 

각각 아래와 같은 기능을 가지고 있습니다. 

Source 무엇을 캡쳐할지 정하는 옵션입니다.
Targeted Camera → 특정 카메라 하나를 지정해서 그 카메라가 보는 뷰를 캡쳐합니다.
Camera 어떤 카메라를 캡쳐할지 설정합니다.
여기서는 TaggedCamera 타입으로 되어 있고, Tag에 따라 선택된 카메라(BackCam)를 캡쳐합니다.
Tag 특정 이름(BackCam)을 가진 카메라를 골라서 캡쳐하도록 설정합니다.
여기서 Tag는 카메라 오브젝트 이름을 기준으로 사용합니다.
Output Resolution 출력될 이미지의 해상도입니다.
여기서는 8K - 4320p (7680x4320) 고해상도로 캡쳐합니다.
Aspect Ratio 가로:세로 비율 설정입니다.
Custom으로 수동 설정 (1:1 비율) 되어 있습니다.
Flip Vertical 이미지를 수직으로 뒤집을지 여부입니다.
체크되어 있으므로, 캡쳐된 이미지는 상하 반전됩니다.

 

 

일단 저는 특정 카메라들의 촬영값을 받아야해서 Targeted Camera를 사용하겠습니다. 

 

 

 

 

타겟 카메라는 Tag를 통해 선택할 수 있고, 화질과 이미지의 크기, 그리고 상하 반전등을 조절 할 수 있습니다. 

 

 

 

이제 설정한 태그들을 만들어 주고, 카메라에 적용시켜준뒤!

 

 

에디터 실행후 레코딩 시작! 하면 

 

해당 카메라에 대한 캡쳐본이 

프로젝트 파일의 Recordings 폴더에 저장됩니다. 

 

 

여기서 여러대의 카메라를 캡쳐하고 싶다면!

Recorder를 여러대 만들면 끝! (태그는 다 별도로... 해야하는거 같습니다.)

 

 

 

 

 

추가로 배경을 투명하게 캡쳐하고 싶다면,

Png로 저장하고, Alpha 값 포함!

 

그리고 카메라 설정에서 Solid Color에서 알파값을 0으로 해주면 끝!

 

 

 

또 또 추가로

저장되는 이름도 따로 설정할 수 있는데, 

 

기본적으로 아래처럼 Take 번호와 Frame 번호가 같이 저장됩니다!

image_<Take>_<Frame>

 

 

 

또 또 또 추가로, 위 처럼 Recorder를 사용하지 않고,

각 카메라 텍스쳐를 따로 만들어 주고, 그걸 저장하는 코드!

using UnityEngine;

public class MultiCameraCapture : MonoBehaviour
{
    public Camera[] cameras;

    void CaptureAllCameras()
    {
        foreach (var cam in cameras)
        {
            RenderTexture rt = new RenderTexture(1920, 1080, 24);
            cam.targetTexture = rt;
            Texture2D screenShot = new Texture2D(1920, 1080, TextureFormat.RGB24, false);
            cam.Render();
            RenderTexture.active = rt;
            screenShot.ReadPixels(new Rect(0, 0, 1920, 1080), 0, 0);
            screenShot.Apply();

            byte[] bytes = screenShot.EncodeToPNG();
            System.IO.File.WriteAllBytes(Application.dataPath + $"/Camera_{cam.name}.png", bytes);

            cam.targetTexture = null;
            RenderTexture.active = null;
            Destroy(rt);
        }
    }
}

 

 

 

 


굳 잘 저장 되네요!

 

 

 

 


 이번글은 여기까지!

 

728x90