[GPU] Multiple Render Targets (MRT)

그림1: Multiple Render Target 예제 그림

최근(?) GPU는 대부분 Multiple Render Targets (MRT) 기능을 지원한다. MRT 기능을 간단히 설명하면 한 번의 Fragment Shader 연산을 수행하여 여러 개의 Texture (Render Target Textures)을 생성하는 방법을 의미한다. 그림1은 MRT 기능을 사용하는 Shader 연산 순서도이다.

MRT는 OpenGL 2.0과 Direct3D 9 부터 지원한다고 한다 (출처 1). 보통 MRT를 기능을 사용하여 생성된 Texture는 다른 Shader의 Input으로 사용된다. MRT 기능을 가장 많이 사용하는 경우는 Deferred Shading 연산을 수행할 때라고 한다. 예전에 Deferred Shading에 대해 정리한 적이 있다 (출처 4). Deferred Shading 연산의 경우 여러 개의 Texture을 생성하는 과정에서 동일한 Vertex Shader 연산을 수행하고 매번 다른 Fragment Shader 연산을 수행하게 된다. 결과적으로 여러개의 Texture 생성을 위해서는 같은  Vertex Shader연산을 여러번 수행해야 한다. MRT 기능을 지원하는 경우 Vertex Shader 연산을 한 번만 수행하고 Fragment Shader에서 여러개의 Texture (Render Target Texture)에 다른 결과값을 저장할 수 있다. 이렇게 되면 같은  Vertex Shader연산을 여러 번 수행할 필요가 없다.

그림 2: Deferred Shading 연산 예제 (출처 3)

그림 2은 Deferred Shading 연산을 보여준다. 그림 2와 같이 동일한 Vertex Shader 연산을 수행하고 Fragment Shader에서 각 Render Target Texture에 다른 Fragment Shader 연산 결과값을 작성하게 된다. 생성된 Texture을 사용하여 마지막에 결과 이미지를 생성하게 된다. MRT는 한번에 DrawCall Command로 여러 개의 Render Target Texture을 생성할 수 있어서 Deferred Shading에 많이 사용된다.

출처

  1. https://en.wikipedia.org/wiki/Multiple_Render_Targets
  2. https://en.wikipedia.org/wiki/Deferred_shading
  3. https://learnopengl.com/Advanced-Lighting/Deferred-Shading
  4. https://mkblog.co.kr/2019/01/30/gpu-forward-rendering-vs-deferred-rendering/

Leave a Comment