Notice
Recent Posts
Recent Comments
Link
«   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
Tags
more
Archives
Today
Total
관리 메뉴

MOONSUN

[그래픽스] IBL (Image Based Lighting) : PBR을 위한 환경 기반 간접광 본문

D3D

[그래픽스] IBL (Image Based Lighting) : PBR을 위한 환경 기반 간접광

MoonSun_v 2025. 12. 10. 14:59

 

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로 평가한 뒤 적분하여 합산해야 한다.

 

GI의 대표 공식으로 -> 위 식을 풀어쓰면 아래와 같다
Diffuse BRDF + Specular BRDF(Cook–Torrance) 을 모두 포함한 GI 적분 식

즉,

“장면 전체의 모든 표면에서 반사된 광량을 다시 모아서 계산하는 과정” 이 필요하다.

 

하지만 이러한 반구 적분(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 → 재질 특성 조정 = 뷰 의존 보정 
    • 빛의 방향에 대한 주변광만 제공할 뿐, 벽·기둥 같은 실제 구조물이 반영된 간접광은 제공하지 않음 

 

 

 

3. IBL이 하는 일 : Diffuse IBL + Specular IBL

IBL은 환경 HDR 큐브맵을 이용해서 아래 두 가지 간접광을 제공한다:

  1. Diffuse IBL 
    • 부드럽게 퍼진 환경광
    • 거칠기, 빛 방향, 시야 방향과 무관 → “단순 누적 가능”
    • Irradiance Map 사용
  2. 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이 하는 일 

p지점에서의  Normal 따라 받을 수 있는 반구의 Lambert 적용된 빛 총합을  큐브 텍스처 Normal 방향에 저장한다.

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

 

즉, 

"각 방향별로 환경광을 얼마나 받는지"를 저장한 맵

예시) 스카이 박스에서 Irradiance Map은 다음과 같이 저장된다.

  • 방향성은 있지만
  • roughness, 시야 방향(view)에는 무관하기 때문에

Diffuse IBL은 항상 부드러운 조명이 된다.

 

 

 

5. IBL Specular  - 가장 핵심이자 복잡

Specular IBL은 Cook–Torrance BRDF 기반의 스페큘러 반사 성분을 적분한 것.

 

원래 해야 하는 일

Specular BRDF
Specular IBL 적분

 

 

즉, 환경방향(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 으로 미리 계산해 사용한다.

Specular 적분을 두 항으로 분리

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. 정리 

지금까지 설명했던 내용을 흐름대로 정리하면 아래와 같다. 

  1. 조명은 direct + indirect로 나누어서 계산된다.
  2. indirect 조명은 반구 적분이 필요한 계산인데, 반구 적분 계산은 복잡하기 때문에 이를 해결하기 위해 IBL을 사용한다.
  3. IBL은 HDR 환경에서 간접광을 추출하는 기술
  4. IBL = Diffuse IBL + Specular IBL
  5. Diffuse IBL → Irradiance Map으로 저장됨 
  6. Specular IBL → Prefiltered Env + BRDF LUT 
  7. IBL의 목적: "PBR 재질이 실제 환경에 존재하는 것처럼 빛을 받도록 하는 것"
         [HDR Environment Map]
                    │
     ┌──────────────┴─────────────────┐
     │                                │
[Irradiance Map]              [Prefiltered EnvMap]
  (Diffuse IBL)                 (Specular IBL)
                           Prefiltered Env + BRDF LUT
     │                                │
     └─────> Indirect Light (IBL) <───┘
                     │
           Final = Direct + IBL