유니티 엔진에서 임의 Camera 만들어 월드 세계 렌더링 후 RenderTexture에 내보내기 - Whitmem
유니티 엔진에서 임의 Camera 만들어 월드 세계 렌더링 후 RenderTexture에 내보내기
게임 개발 및 엔진
2026-01-20 19:40 게시 d03d4f05dca8017ef1fc

0
0
24
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
유니티 엔진에서 임의로 객체를 렌더링하기 위해서는 CommandBuffer을 사용하면 된다. 예를 들면 아래와 같다.
CommandBuffer cmd = CommandBufferPool.Get("Buffer1"); //cmd.SetViewProjectionMatrices(); //cmd.SetRenderTarget() 렌더 타겟 지정 cmd.ClearRenderTarget(true, true, Color.black); cmd.DrawMesh(mesh, matrix, material); Graphics.ExecuteCommandBuffer(cmd);
그러면 엔진 내부의 그래픽 파이프라인 처리 과정에 해당 CommandBuffer이 큐에 삽입되어 실행을 대기할 것이고, 렌더링 시점에 해당 명령이 GPU에서 수행될 것이다.
하지만 위 방법을 통하면 임의 독단적으로 렌더링한 것이기 때문에 빛의 처리 및 광원 처리가 모두 적용되지 아니한다.
따라서 유니티 엔진 내부의 환경 그대로 가져와서 어떤 처리를 하기 위해서는 (예를 들자면 스크린샷이 있다.) 임의 카메라를 하나 만들어 그 카메라의 렌더 타겟을 임의 텍스처로 지정하여 기본 엔진의 URP 파이프라인 흐름안에서 렌더링이 수행되도록 해야한다.
일단 게임 오브젝트를 생성하고, Camera Component를 등록한다.
그런다음 카메라의 기본 위치, 방향등을 지정한다. Quaternion으로 지정해야하는데, Transform에는 LookAt이라는 편리한 함수가 제공되기 때문에 방향벡터를 각도로 손쉽게 변환할 수 있다.
이후 렌더링될 타겟 텍스처를 지정한다.
카메라의 배경 색상, Flags 를 지정한다. 여기서는 0,0,0 단일 색상으로 초기화하도록 해주고 cullingMask 는 Layer의 마스크를 지정해주면 된다. 유니티 엔진의 레이어가 총 0~31로 32개가 존재하는 것을 확인할 수 있는데, LayerMask.NameToLayer("String")을 통해서 특정 String 의 Layer을 index로 변환할 수 있다. 이 index를 cullingMask에 그대로 적용하는게 아니라, 1 << 비트 마스크로 적용하게끔 shift 연산해주어야 한다.
그리고 원하는 지점에서 렌더를 요청하면 된다.
유의 사항
여기서 호출하는 camera.Render()은 요청이다.즉 유니티 엔진 내부 파이프라인에서 해당 카메라를 호출할 수 있도록 대기열에 추가하는 행위이다. 게다가 전역적으로 똑같은 장면을 카메라 시점에서 한 번더 렌더링해야 하는 것으로 꽤나 무거운 작업이다. 즉 Render() 한 번 호출이 FPS 1을 잡아먹는 행위이다.
필자는 아틀라스를 만들 때 내부적으로 수행하기 위해 사용했는데, render()은 요청하는 행위이기 때문에 즉시 렌더링되지 않는다. 이 명령을 날리고 카메라 객체를 Destroy하면 렌더링이 수행되지 않는다. 따라서 Render() 후 적어도 1 프레임 대기하는 작업이 필요하다.
프레임을 대기하기 위해서, 코루틴을 사용할 수 있다. 함수를 IEnumerator로 정의하고, Render() 후에 yield return new WaitForEndOfFrame() 을 호출한다.
이렇게 하면 유니티 엔진 내부에서 StartCoroutine(함수()) 으로 함수를 호출하면 되는데, 내부에서 1회 호출하면 camera.Render 후 다음 yield return가 반환되고, 다음 프레임에서 호출시 다음 영역이 호출되는 식으로 마치 분기를 저장하여 함수 내 에서 스테이트를 관리하는 형식으로 작업이 수행된다.
모든 루틴이 끝나면 다시 함수의 첫 진입이 시작된다.
이런식으로 관리하여 카메라를 렌더링할 수 있다.
댓글 0개
댓글을 작성하는 경우 댓글 처리 방침에 동의하는 것으로 간주됩니다. 댓글을 작성하면 일회용 인증키가 발급되며, 해당 키를 분실하는 경우 댓글을 제거할 수 없습니다. 댓글을 작성하면 사용자 IP가 영구적으로 기록 및 부분 공개됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.