MOONSUN
[그래픽스] IBL (Image Based Lighting) : PBR을 위한 환경 기반 간접광 본문
IBL (Image Based Lighting) 은
환경 HDR 한 장으로 간접광을 만드는 기술이다.
실시간 렌더링에서 현실적인 Global Illumination(간접광) 을 표현하기 위한 가장 핵심적인 요소이며,
현대 PBR(Pysically Based Rendering)에서 빠질 수 없는 기본 조명 시스템이다.
이전 글에서는 PBR의 원리와 조명 모델에 대해 정리했는데,
이번 글에서는 그 PBR의 기반이 되는 환경 기반 간접광, 즉 IBL이 어떻게 구성되고 동작하는지 자세히 알아보도록 하겠다.
01. 조명의 두 종류 : Local vs Global Illumination
Local Illumination
- “직접 오는 빛(Direct Light)”만 계산
- 단 한 번의 bounce
- 점광/스팟/직사광 같은 일반 조명
Global Illumination(GI)
- 빛이 표면·대기 등에 부딪혀 여러 번 산란되는 간접광(Indirect Light) 까지 포함
→ 현실적인 조명
즉,
GI (Global Illumination) = Direct Light + Indirect Light(2 bounce 이상)
1-1. GI 의 이론적 계산 방법과 실시간 구현의 한계
이론적으로 Global Illumination을 정확하게 계산하려면,
표면의 한 점에서 반구 형태로 사방에서 들어오는 빛을 BRDF로 평가한 뒤 적분하여 합산해야 한다.




즉,
“장면 전체의 모든 표면에서 반사된 광량을 다시 모아서 계산하는 과정” 이 필요하다.
하지만 이러한 반구 적분(Hemispherical Integral) 은
수백~수천 개의 방향을 샘플링해야 하므로 GPU가 실시간으로 처리하기에는 너무 무겁다.
그래서 실시간 렌더링에서는 다음과 같은 전략을 사용한다:
- Direct Light(직접광) 과
- Indirect Light(간접광) 을 분리하고,
이 중 Indirect(간접광) 은 씬 변화가 크지 않은 경우, 미리 계산해둔(precomputed) 데이터를 활용하여 빠르게 근사한다.
Direct Light은 아래 식처럼 한 번의 조명 계산으로 해결되지만,

Direct = (Diffuse BRDF + Specular BRDF) × Radiance × max(N · L, 0)
Indirect Light은 반구 적분이 필요한 계산이다:

Indirect = ∫ (BRDF × Incoming Radiance × N·L) dω
이 복잡한 적분을 현실적으로 처리하기 위한 대표적인 정적 간접광 방식이
바로 IBL(Image-Based Lighting) 이다.
02. 정적 간접광(Precomputed GI)의 종류
정적 GI는 “실시간이 아닌 미리 계산된 간접광”을 의미하고, 그 방식은 여러가지있다.
| 기술 | 특징 |
| Lightmap | 표면에 미리 베이크된 간접광·그림자를 텍스처로 저장하는 방식 |
| Light Probe (SH Probe) | 공간에 샘플된 간접광 정보를 동적 객체에 보간해 적용하는 방식 |
| IBL (Image-Based Lighting) | 환경 HDR 맵을 사용해 방향 기반 조명을 제공하는 방식 |
- Lightmap
- 빛이 여러 번 bounce된 결과를 완전 baked로 텍스처 저장 (미리 계산된 데이터)
- 매우 고품질. 예: 건물 실내 조명, 벽면 반사, 색번짐(color bleeding) 등이 정확히 표현됨.
- IBL = 환경 기반 조명
- 엔진에 로드된 HDR 큐브맵을 통해 다음을 계산:
- Diffuse IBL → 주변의 환경광(soft lighting) = 난반사 간접광
- Specular IBL → 주변의 반사광(Reflection) = 반사 간접광
- BRDF LUT → 재질 특성 조정 = 뷰 의존 보정
- 빛의 방향에 대한 주변광만 제공할 뿐, 벽·기둥 같은 실제 구조물이 반영된 간접광은 제공하지 않음
- 엔진에 로드된 HDR 큐브맵을 통해 다음을 계산:
3. IBL이 하는 일 : Diffuse IBL + Specular IBL
IBL은 환경 HDR 큐브맵을 이용해서 아래 두 가지 간접광을 제공한다:
- Diffuse IBL
- 부드럽게 퍼진 환경광
- 거칠기, 빛 방향, 시야 방향과 무관 → “단순 누적 가능”
- Irradiance Map 사용
- Specular IBL
- 반사되는 빛(Reflection)
- 거칠기/시야에 따라 크게 달라짐
- 복잡해서 실시간 계산 불가 → Prefiltered EnvMap + BRDF LUT 로 미리 계산해 둠
→ 이것이 유명한 “Split-Sum Approximation”
Final Color = Direct + Indirect(IBL)
Indirect IBL = IBL Diffuse + IBL Specular
최종 간접광:

4. IBL Diffuse의 Irradiance Map
Diffuse IBL은 표면이 환경으로부터 받는 난반사 간접광(diffuse indirect light) 을 계산하는 과정이다.
난반사 BRDF(Lambertian)은 방향에 관계없이 일정한 값이므로 다음과 같이 정리된다:
Diffuse IBL의 원래 적분식
Diffuse 간접광은 원래 다음과 같은 반구 적분으로 정의된다:

여기서 Lambert BRDF(붉은색 영역) 은 상수이므로 적분 바깥으로 분리할 수 있다.
Irradiance(조도) 정의
상수인 Lambert BRDF를 밖으로 빼면, Diffuse IBL은 아래와 같음 :

여기서 적분 부분이 Irradiance(조도) 이다.

즉, 최종으로

4-1. Irradiance Map이 하는 일


Irradiance Map은 큐브맵의 각 방향(=법선 N)에 대해,
그 방향이 받아들이는 반구 환경광(N·L 가중)의 총합을 미리 적분해 저장한 맵이다.
즉,
"각 방향별로 환경광을 얼마나 받는지"를 저장한 맵

- 방향성은 있지만
- roughness, 시야 방향(view)에는 무관하기 때문에
Diffuse IBL은 항상 부드러운 조명이 된다.
5. IBL Specular - 가장 핵심이자 복잡
Specular IBL은 Cook–Torrance BRDF 기반의 스페큘러 반사 성분을 적분한 것.
원래 해야 하는 일


즉, 환경방향(L) 모든 방향에 대해 Cook–Torrance 스펙큘러 BRDF 적분
∫ (D * F * G) * (N·L) * Li dω
하지만, 너무 복잡해서 매번 계산하기 버거움
그래서 등장한 것이 Split-Sum Approximation (= 두 부분으로 나누기)
5-1. Split-Sum Approximation
복잡한 DFG항의 적분을 두 부분 1) Env Prefilter + 2) BRDF LUT 으로 미리 계산해 사용한다.


SpecularIBL = PrefilteredEnvMap(R, roughness)
× (F0 * A + B)
1) Prefiltered Environment Map

반사 벡터 R 주변에서 기여하는 환경광을 적분한 결과를 mipmap 레벨로 저장한 HDR 큐브맵
다양한 roughness 값에 대해 GGX 분포(D), 조명 기여(N·L), 등 을 포함한 중요도 샘플링을 함.
- roughness = 0에서는 GGX 분포가 한 방향으로 수렴하므로 R 방향의 환경광 픽셀 하나만 반사
- roughness가 증가할수록 GGX 분포가 넓어져 R 주변의 더 넓은 영역의 환경광을 가중 평균하여 흐릿한 반사가 저장

즉, “거울 → 반무광 → 무광” 으로 roughness에 따라 자동 변화되는 것.
2) BRDF LUT (A, B) : BRDF LookUp Table

Specular의 3개의 요소 D, G, F 에서
D는 Prefiltered Environment Map(각 roughness mipmap)에 미리 들어있으므로, 나머지 F, G 만이 뷰 방향에 따라 변한다
그래서 뷰 방향(N·V) 와 roughness 두 값만 있으면 F와 G의 평균값을 미리 계산해 LUT에 저장해둘 수 있다.
LUT는 아래의 2차원 텍스처다

- X축: NdotV (0~1)
- Y축: Roughness (0~1)
각 픽셀에는 다음이 들어있다 :
- R 채널: ⟨F * G⟩ 의 평균값 => (IBL에 필요한 Fresnel * Geometry 조합)
- G 채널: ⟨G⟩ 의 평균값 => (Geometry 보정값)
→ 즉, Specular BRDF가 뷰 방향에 따라 바뀌는 값들을 미리 테이블화한 것

위 공식에서 A는 R 채널 = F*G 평균값 을 뜻하고, B는 G 채널 = G 평균값 을 의미한다.
7. 정리
지금까지 설명했던 내용을 흐름대로 정리하면 아래와 같다.
- 조명은 direct + indirect로 나누어서 계산된다.
- indirect 조명은 반구 적분이 필요한 계산인데, 반구 적분 계산은 복잡하기 때문에 이를 해결하기 위해 IBL을 사용한다.
- IBL은 HDR 환경에서 간접광을 추출하는 기술
- IBL = Diffuse IBL + Specular IBL
- Diffuse IBL → Irradiance Map으로 저장됨
- Specular IBL → Prefiltered Env + BRDF LUT
- IBL의 목적: "PBR 재질이 실제 환경에 존재하는 것처럼 빛을 받도록 하는 것"
[HDR Environment Map]
│
┌──────────────┴─────────────────┐
│ │
[Irradiance Map] [Prefiltered EnvMap]
(Diffuse IBL) (Specular IBL)
Prefiltered Env + BRDF LUT
│ │
└─────> Indirect Light (IBL) <───┘
│
Final = Direct + IBL
'D3D' 카테고리의 다른 글
| [그래픽스] HDR 렌더링 : 렌더타겟, 노출, 톤 매핑 (0) | 2025.12.17 |
|---|---|
| [D3D] IBL 구현 이슈 : IBL Specular가 Roughness에 반응하지 않았던 이유 (0) | 2025.12.16 |
| [그래픽스] PBR(PBR Rendering)에서의 감마 보정 (0) | 2025.12.03 |
| [그래픽스] PBR 이론 및 구현 : BSDF, BRDF, Cook–Torrance (0) | 2025.12.02 |
| [그래픽스] PBR(Physically Based Rendering) : 빛의 물리 기반 렌더링의 이해 (0) | 2025.12.01 |