티스토리 뷰

개인 프로젝트/Renderer

[ Renderer ] UE5 - RHI 계층 구조

겨울엔군고구마한잔 2026. 1. 27. 02:33

# Unreal Engine 5의 OpenGL 관련 RHI 계층 구조

1. 구조적 형태 : 데이터와 행동의 철저한 분리

이 설계의 가장 큰 특징은 "무엇을 만들 것인가(Desc)""만들어진 결과물(Resource)",
그리고 이를 "어떻게 볼 것인가(View)"가 세 개의 기둥으로 나뉘어 있음

  • 설명자 계층 (Descriptor Layer)
    • FRHITextureDesc, FRHIBufferDesc 등. 실제 리소스를 생성하기 전, 하드웨어에 요구할 사양서
  • 추상화 계층 (RHI Layer)
    • FRHIResource를 기준으로 생성되는 인터페이스 계층
  • 구현 계층 (OpenGL Backend)
    • FOpenGLTexture, FOpenGLShader 등. 상위 인터페이스를 상속받음
    • 실제 glGenTexturesglCompileShader에서 사용한 변수 혹은 함수들을 호출하는 객체

2. 주요 객체별 의미 및 역할

① 셰이더 계층 (Shader Hierarchy)

  • FRHIShader
    • 모든 셰이더의 공통 조상
  • FRHIGraphicsShader / FRHIComputeShader
    • 용도에 따른 1차 분기
  • FRHIVertexShader, FRHIPixelShader
    • 실제 파이프라인 단계에 매핑되는 최종 인터페이스
    • 이렇게 세분화해야 PSO(Pipeline State Object)를 구성할 때 각 단계를 명확히 결합할 수 있음

② 리소스 계층 (Resource & Viewable)

  • FRHIResource
    • 모든 GPU 자원의 최상위 부모
  • FRHIViewableResource
    • 셰이더에서 참조(View)할 수 있는 실제 데이터 덩어리인 FRHIBufferFRHITexture의 부모
  • FRHITexture
    • 2D, 3D, Cube 등 모든 텍스처 형태를 추상화

③ 뷰 계층 (View System - SRV / UAV)

리소스 자체와 그 리소스를 셰이더가 사용하는 방식을 분리했습니다.

  • FRHIShaderResourceView (SRV)
    • 리소스를 '읽기 전용'으로 바라봅니다. (Read-Only)
  • FRHIUnorderedAccessView (UAV)
    • 리소스를 '읽고 쓰기'가 가능한 상태로 바라봅니다. (Read-Write, 주로 Compute Shader용)

④ OpenGL 전용 객체 (Specific Implementations)

  • FOpenGLTexture / FOpenGLBuffer
    • 상위의 FRHIBuffer 혹은 FRHITexture를 상속받아 내부에 실제 OpenGL의 GLuint 핸들을 들고 있습니다.
  • FOpenGLDynamicRHI
    • 이 모든 리소스를 실제로 생성하고, 바인딩 명령을 내리는 '공장'이자 '통제실' 역할을 합니다.

3. 이 설계가 갖는 엔지니어링적 가치

  1. 플랫폼 확장성
    1. 나중에 FDirectX12Texture를 추가하더라도
      상위의 FRHITexture를 쓰는 코드(SceneRenderer 등)는 단 한 줄도 고칠 필요가 없음
  2. 타입 안전성
    1. FRHIView를 통해 SRV와 UAV를 명확히 구분함으로써,
      셰이더에서 발생할 수 있는 잘못된 리소스 접근을 인터페이스 단계에서 차단
  3. 메모리 최적화
    1. Desc 구조체를 별도로 둠으로써, 리소스 생성 시점에 필요한 메모리 레이아웃을
      미리 계산하고 할당할 수 있는 기반이 마련

'개인 프로젝트 > Renderer' 카테고리의 다른 글

[ Renderer ] RHICommand  (0) 2026.01.01
[ Renderer ] World & Renderer Worker  (0) 2025.12.30
[ Renderer ] wtr::Engine 구조 설계  (0) 2025.12.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함