티스토리 뷰

# Unreal Engine 5의 OpenGL 관련 RHI 계층 구조
1. 구조적 형태 : 데이터와 행동의 철저한 분리
이 설계의 가장 큰 특징은 "무엇을 만들 것인가(Desc)"와 "만들어진 결과물(Resource)",
그리고 이를 "어떻게 볼 것인가(View)"가 세 개의 기둥으로 나뉘어 있음
- 설명자 계층 (Descriptor Layer)
FRHITextureDesc,FRHIBufferDesc등. 실제 리소스를 생성하기 전, 하드웨어에 요구할 사양서
- 추상화 계층 (RHI Layer)
FRHIResource를 기준으로 생성되는 인터페이스 계층
- 구현 계층 (OpenGL Backend)
FOpenGLTexture,FOpenGLShader등. 상위 인터페이스를 상속받음- 실제
glGenTextures나glCompileShader에서 사용한 변수 혹은 함수들을 호출하는 객체
2. 주요 객체별 의미 및 역할
① 셰이더 계층 (Shader Hierarchy)
FRHIShader- 모든 셰이더의 공통 조상
FRHIGraphicsShader/FRHIComputeShader- 용도에 따른 1차 분기
FRHIVertexShader,FRHIPixelShader- 실제 파이프라인 단계에 매핑되는 최종 인터페이스
- 이렇게 세분화해야 PSO(Pipeline State Object)를 구성할 때 각 단계를 명확히 결합할 수 있음
② 리소스 계층 (Resource & Viewable)
FRHIResource- 모든 GPU 자원의 최상위 부모
FRHIViewableResource- 셰이더에서 참조(View)할 수 있는 실제 데이터 덩어리인
FRHIBuffer와FRHITexture의 부모
- 셰이더에서 참조(View)할 수 있는 실제 데이터 덩어리인
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. 이 설계가 갖는 엔지니어링적 가치
- 플랫폼 확장성
- 나중에
FDirectX12Texture를 추가하더라도
상위의FRHITexture를 쓰는 코드(SceneRenderer 등)는 단 한 줄도 고칠 필요가 없음
- 나중에
- 타입 안전성
FRHIView를 통해 SRV와 UAV를 명확히 구분함으로써,
셰이더에서 발생할 수 있는 잘못된 리소스 접근을 인터페이스 단계에서 차단
- 메모리 최적화
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
링크
TAG
- void* pointer
- 보이드 포인터
- Reflection
- SFINAE #Template #C++
- FloatingPoint
- 로드리게스 회전 행렬
- cmakelists
- 외부단편화
- 포인터
- 수학
- GameEngine
- 내부단편화
- 그래픽스
- void pointer
- GC
- 증명
- 모던 C++ 챌린지
- RHI
- MemoryProject
- 세그먼테이션기법
- RHICommand
- logproject
- 개발 일지
- 뮤택스
- pointer
- 메모리
- std::is_base_of
- 페이징기법
- cmake
- C++
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함