[Unreal Engine] Compute Shader Basic 4

이매·2026년 5월 12일

Unreal Graphics & Rendering

목록 보기
16/16
post-thumbnail

참고 자료
Resource binding overview - Microsoft

4. GPU Resource

이전까지 GPU의 병렬 실행 구조와 메모리 계층 구조에 대해 알아보았다.
그렇다면 이제 실제 Compute Shader에서는 GPU 메모리에 저장된 데이터를 어떤 방식으로 읽고 쓰는지 이해할 필요가 있다.

GPU는 단순히 메모리에 직접 접근하는 방식이 아니라, Resource라는 형태를 통해 데이터를 관리한다.
그리고 Compute Shader는 이러한 Resource를 읽거나 쓰면서 병렬 계산을 수행하게 된다.

예를 들어

  • 캐릭터 Vertex 데이터
  • Texture 이미지 데이터
  • Particle 위치 정보
  • Compute Shader 계산 결과

와 같은 데이터들이 모두 GPU Resource 형태로 관리된다.


4-1. Resource View

GPU는 해당 Resource를 어떤 방식으로 접근할 것인지에 대한 정보 역시 함께 필요로 한다.

Compute Shader에서는 수많은 Thread가 동시에 Resource에 접근하게 되므로, GPU는 Resource를 어떤 방식으로 사용할 것인지 명확하게 구분한다.

대표적으로

  • 읽기 전용(Read Only)
  • 읽기/쓰기(Read / Write)

방식이 존재하며, DirectX에서는 이를 Resource View라는 개념을 통해 정의한다.

Compute Shader에서는 특히

  • Shader Resource View(SRV) (읽기 전용)
  • Unordered Access View(UAV) (읽기/쓰기 전용)

두 가지가 매우 중요하게 사용된다.

4-1-1. SRV

SRV(Shader Resource View)는 GPU Resource를 읽기 전용(Read Only)으로 접근하기 위한 Resource View이다.
즉, Shader는 SRV를 통해 Resource의 데이터를 읽을 수는 있지만 직접 수정할 수는 없다.

일반적으로 Compute Shader에서는 입력 데이터(Input Resource)를 전달할 때 SRV를 사용한다.

4-1-2. UAV

UAV(Unordered Access View)는 GPU Resource를 읽기/쓰기(Read / Write) 가능한 형태로 접근하기 위한 Resource View이다.

앞서 설명한 SRV가 입력 데이터를 읽기 위한 용도로 사용되었다면, UAV는 Compute Shader의 계산 결과를 기록하기 위한 출력 Resource로 자주 사용된다.


4-2. Buffer

Buffer는 연속된 메모리 공간에 데이터를 저장하는 가장 기본적인 Resource 형태 중 하나이다.

일반적으로 Buffer는

  • Vertex 데이터
  • Index 데이터
  • Particle 데이터
  • Transform 정보

와 같은 구조화된 데이터를 저장하는 데 사용된다.

4-2-1. StructuredBuffer

StructuredBuffer는 구조화된 데이터를 저장하기 위한 읽기 전용(Read Only) Buffer이다.
주로 Compute Shader에서 입력 데이터를 전달하기 위한 용도로 사용된다.

HLSL에서는 다음과 같이 선언할 수 있다.

StructuredBuffer<float> InputBuffer;

StructuredBuffer는 SRV(Shader Resource View)를 통해 접근되기 때문에 Shader 내부에서 데이터를 읽을 수만 있고 직접 수정할 수는 없다.

4-2-2. RWStructuredBuffer

RWStructuredBuffer는 구조화된 데이터를 읽고 쓸 수 있는 Buffer이다.
앞서 설명한 StructuredBuffer가 입력 데이터 용도였다면, RWStructuredBuffer는 Compute Shader의 계산 결과를 저장하기 위한 출력 Buffer로 자주 사용된다.

HLSL에서는 다음과 같이 선언할 수 있다.

RWStructuredBuffer<float> ResultBuffer;

RWStructuredBuffer는 UAV(Unordered Access View)를 통해 접근되며, 읽기와 쓰기가 모두 가능하다.
다만 여러 Thread가 동일한 위치에 동시에 접근하는 경우에는 Race Condition 문제가 발생할 수 있기 때문에 주의가 필요하다.


4-3. Texture

Texture는 GPU에서 이미지 형태의 데이터를 저장하기 위해 사용하는 Resource이다.
앞서 설명한 Buffer가 선형(Linear) 구조의 데이터를 저장하는 데 사용되었다면, Texture는 주로 2차원 혹은 3차원 좌표 기반의 데이터를 저장하는 데 사용된다.

일반적으로 Texture는

  • 이미지 데이터
  • Render Target
  • Depth 정보

등을 저장하는 데 사용된다.

4-3-1. Texture2D

Texture2D는 2차원 Texture 데이터를 읽기 전용(Read Only)으로 접근하기 위한 객체이다.
주로 입력 이미지 데이터를 Shader에서 읽기 위해 사용된다.

HLSL에서는 다음과 같이 선언할 수 있다.

Texture2D<float4> InputTexture;

Texture2D는 SRV(Shader Resource View)를 통해 접근되며, 읽기만 가능하고 직접 수정할 수는 없다.

4-3-2. RWTexture2D

RWTexture2D는 2차원 Texture 데이터를 읽고 쓸 수 있는(Read / Write) Texture 객체이다.
주로 Compute Shader의 계산 결과를 이미지 형태로 저장하기 위해 사용된다.

HLSL에서는 다음과 같이 선언할 수 있다.

RWTexture2D<float4> OutputTexture;

RWTexture2D는 UAV(Unordered Access View)를 통해 접근되며, 읽기와 쓰기가 모두 가능하다.

다만 여러 Thread가 동일한 픽셀 위치를 동시에 수정하는 경우에는 Race Condition 문제가 발생할 수 있기 때문에 주의가 필요하다.

profile
언리얼 엔진 주니어(신입) 개발자 | 소설 쓰는 취준 개발자

0개의 댓글