지식

[Graphics] Forward Rendering과 Deferred Rendering

라구넹 2025. 5. 30. 17:39

3D 그래픽스에서 조명과 픽셀 색상을 계산하는 서로 다른 렌더링 파이프라인 방식

 

Forward Rendering

모든 오브젝트를 렌더링할 때 조명 계산을 동시에 수행하는 방식

오브젝트를 그릴 때 픽셀 당 조명 정보를 바로 계산함

 

특징

- 조명과 쉐이딩이 렌더링 시점에 직접 적용됨

- 각 픽셀에서 사용하는 조명의 수가 제한됨

- 투명 객체 처리에 유리

- 구현이 비교적 단순

 

장점

- 투명도 처리에 강함

- MSAA같은 전통적 안티 앨리어싱과 잘 작동

- 낮은 수의 조명일 경우 빠름

 

단점

- 많은 수의 조명이 있을 경우 성능 급락

- 조명이 많은 씬에서 비효율적

 

 

Deferred Rendering

렌더링을 두 단계로 나눔

1. G-Buffer에 기하학 정보(법선, 색상, 깊이 등)를 저장

2. 그 후 저장된 정보로 조명 연산을 한 번에 수행

 

특징

- 조명 계산을 지연(Deferred)시켜서 한 번에 처리

- 모든 픽셀에 대해 조명을 개별 계산

 

장점

- 수백 개의 조명을 효율적으로 처리 가능

- 복잡한 씬에서 성능이 더 좋을 수 있음

- 동일 픽셀을 한 번만 조명 처리 (불필요한 반복 제거)

 

단점

- 투명도 처리 복잡 (G-Buffer에 투명 정보 저장하기 어려움)

- MSAA같은 전통적 안티앨리어싱과 호환 어려워서 TAA 같은 거 써야 함

- 메모리 사용량 증가 (G-Buffer)

 

항목 Forward Rendering Deferred Rendering
조명 처리 시점 오브젝트 렌더링 시 즉시 후처리 단계에서 일괄 계산
성능 (조명 수 적을 때) 빠름 느릴 수 있음
성능 (조명 수 많을 때) 매우 느려짐 상대적으로 안정적
투명도 처리 쉬움 어려움
구현 난이도 쉬움 복잡함
메모리 사용 적음 많음 (G-buffer 필요)
안티앨리어싱 지원 쉬움 (MSAA 사용 가능) 어려움 (기술 추가 필요)

모바일 게임, 조명이 적음 -> 포워드

PC, 콘솔 게임 등 조명이 많은 경우 -> 디퍼드

 

 

G-Buffer?

Deferred Rendering에서 사용하는 버퍼로

Geometry 혹은 Graphics의 약자

화면에 렌더링되는 기하학적 정보를 저장해두는 버퍼임

 

 

저장 항목 예시  설명
World Position 픽셀이 3D 공간에서 어디에 있는지
Normal Vector 표면의 방향 (법선 벡터)
Albedo 표면의 기본 색상 (텍스처 컬러)
Specular 반사 성분 정보
Metallic / Roughness PBR(Material) 관련 정보
Depth 픽셀의 깊이값 (z-buffer)

이 정보들로 이후 조명 계산할 때 화면 상의 모든 픽셀에 대해 한 번만 광원 영향 계산함

 

 

*그럼 Z-Buffer는?

픽셀이 얼마나 카메라에 가까운지 판단하기 위해 사용하는 버퍼로 Depth Buffer하고도 함

렌더링 시 각 픽셀이 얼마나 카메라로부터 떨어져있는지 (z값)를 저장하는 2D 버퍼

 

목적: 오클루전

겹치면 가까운 거 보여주려고 (Depth Test)

 

Z-Buffer는 투명 객체 처리엔 약함

반투면 오브젝트는 뒷 쪽이 보여야 하기에 별도 처리 필요

일반적으로 투명 오브젝트는 뒤에서부터 그리기 (Back-to-Front Sorting) 사용

 

 

* 왜 Deferred Rendering은 투명도 처리가 복잡한가?

G-Buffer가 한 픽셀에 하나의 표면 정보만 저장하기 때문 -> 뒤에 있는 투명한 표면들의 정보는 버려짐

투명도는 여러 표면이 겹쳐 보이는 것이기에 충돌함

* 렌더링 시 계산: 픽셀 색상 = 앞쪽 표면 * 투명도 + 뒤쪽 표면 * (1 - 투명도)

 

어떻게 해결하는가?

1. 투명 객체만 Forward Rendering으로 따로 처리

- 이때는 Z-Sorting 등을 사용하여 투명도 계산

* Z-Sorting 

객체나 픽셀을 깊이 기준으로 정렬하는 기법

 

2. OIT (Order-Independent Transparency)

- 픽셀마다 여러 레이어 저장

- 리소스 많이 먹음

 

3. 알파 블렌딩 + Depth Sort

- 투명한 오브젝트를 깊이 순으로 정렬해서 그리기

- 단점: 완전한 정렬이 어렵고 깨질 수 있음