본문 바로가기
공부/Graphics

[Graphics] 텍스처에 그리기 RTT(Render To Texture)

by MY블로그 2023. 8. 7.

Render To Texture ?

렌더투텍스처(Render To Texture)(이하 RTT)를 의미합니다.

3D 그래픽스에서 매우 유용한 기술로, 장면을 렌더링(Rendering)하고 그 결과를 텍스처(Texture)로 저장하는 방식입니다.

다양한 그래픽스 기법과 효과를 구현하기 위하여 사용되며, 렌더링 결과를 다른 객체의 텍스처로입혀 사용하거나 후처리 효과를 적용하는 등의 용도로 사용됩니다.

 

일반적으로 3D의 화면을 렌더링할때 화면에 직접 출력되도록 보여집니다.

RTT를 사용하면 렌더링 결과를 프레임 버퍼가 아닌 텍스처로 저장하고 이후 이 텍스처를 다른 객체의 텍스처로 적용시키겨나 쉐이더(Shader)에 사용하여 다양한 시각적 효과를 구현할 수 있습니다.

 

예를들어 3D환경에서 배경의 이미지텍스처를 RTT를 사용하여 메탈릭한 객체의 반사 이미지로 사용합니다.


RTT를 사용하는 과정

1. 프레임 버퍼(Frame Buffer)의 생성

렌더링 결과를 임시로 저장할 프레임 버퍼를 생성합니다.

프레임 버퍼는 일반적인 렌더링과는 다른 출력 대상이 됩니다.

2. 텍스처(Texture)의 생성

렌더링 결과를 저장할 텍스처를 생성합니다.

텍스처는 RTT의 결과물을 담는 용도로 사용됩니다.

3. 프레임 버퍼와 텍스처의 연결

1번과 2번의 과정을 완료한후 버퍼와 텍스처를 연결하고난 뒤 렌더링 결과물을 텍스처로 저장할 수 있도록 합니다.

4. 렌더링(Rendering)

장면(Scene)을 렌더링하여 프레임 버퍼에 저장합니다.

이때, 프레임 버퍼와 연결된 텍스처에 렌더링 결과가 저장됩니다.


 

위의 과정을 거쳐 나온 결과(RTT에 저장된 자료)는 다른 객체의 텍스처로 적용시키거나 쉐이더에 사용하여 좀더 현실적인 시각적 효과를 구현할 수 있습니다.

 

예를 들어, 스크린 스페이스 엠비언트 오클루전(SSAO), 거울 효과, 그림자 맵 생성, 블러 효과, 실시간 반사효과 등을 구현하는데 사용됩니다.

 

RTT는 위처럼 좀더 사실적인 장면을 만드는데에 있어 아주 유용하지만 단점 또한 존재합니다.


RTT의 단점?

1. 추가적인 메모리 및 대역폭이 요구됩니다.

RTT를 사용하면 렌더링 결과를프레임 버퍼가아닌 텍스처로 저장하게 된다고 하였습니다.

이는 즉, 추가적인 메모리가 필요하다는 의미이며 프레임 버퍼에서 텍스처로 데이터를 복사하는 과정에서 대역폭 비용이 발생하게 됩니다.

(대역폭 이란? 일정한 시간내에 데이터 연결을 통과할 수 있는 정보량의 척도 입니다.)

2. 성능의 저하 위험

RTT는 결과적으로 렌더링이 총 2번 진행이 됩니다.

첫번째 렌더는 기본 렌더링 결과를 만들어 텍스처로 저장하는 과정이며,

두번째 렌더는 실제 화면에 렌더링하는 과정입니다.

이는 더 많은 계산이 요구됨에따라 성능에 영향을 끼치게 됩니다.

3. 복잡성 및 오버헤드

프레임 버퍼와 텍스처를 생성하고 연결하는 등의 추가적인 작업이 진행되어야 하기 떄문에 코드는 보다 복잡해지고, 구현에 오버헤드가 발생할 위험성이 있습니다.

또한, RTT를 지원하지 않는 그래픽 카드 또는 환경에서는 사용할수 없을수도 있습니다.

4. 메모리 관련 누수의 위험성

추가적인 텍스처 메모리를 관리해야 합니다.

때문에 메모리 누수가 발생할수도 있으며, 텍스처를 생성한 후 삭제를 제대로 처리하지 않는다면 메모리누수(Memory leak)의 위험성이 있습니다.


RTT가 적용된 예시는 코드 구현후 추가적으로 정리하도록 합니다.

댓글