ZINUN
  • About
  • CV
ZINUN

PBR 모델의 실제 사용

🔹 PBR에서 Point Light는 “형식은 유지, 방식은 진화”

항목
전통적 모델 (Phong/Blinn-Phong)
PBR (Physically Based Rendering)
광원의 종류
Point, Directional, Spot 등
동일하게 유지
조명 감쇠 (Attenuation)
보통 수동 설정 Fatt(d)=1kc+kld+kqd2F_{att}(d) = \frac{1}{k_c + k_l d + k_q d^2}Fatt​(d)=kc​+kl​d+kq​d21​
실제 물리 법칙 기반 1d2\frac{1}{d^2}d21​ or 에너지 보존 모델
빛의 세기 L\mathbf{L}L
임의의 RGB 색상 및 강도
실제 단위 (cd, lux 등) 기반 가능
조명 모델
Phong or Blinn-Phong(분리된 Ambient, Diffuse, Specular)
Microfacet BRDF 기반(GGX, Cook-Torrance 등)
표면 반응
Diffuse = LambertSpecular = empirical
Diffuse + Fresnel + Geometry + Distribution에너지 보존 법칙 충실
법선 벡터 n\mathbf{n}n
단순한 벡터 기반 조명
tangent space normal map 사용 등 세밀한 광반응 계산

🔸 PBR에서 Point Light의 역할

PBR에서도 Point Light는 여전히:

  • 3차원 공간상 하나의 위치에서
  • 모든 방향으로 동일하게 빛을 방출하는 광원

으로 정의됩니다.

하지만 다음과 같은 방식으로 조명 방정식의 물리적 충실도가 높아집니다.

🔹 원래 PBR 랜더링 방적식

Lo(p,ωo)=∫Ωfr(ωi,ωo)⋅Li(ωi)⋅(n⋅ωi) dωiL_o(\mathbf{p}, \omega_o) = \int_{\Omega} f_r(\omega_i, \omega_o) \cdot L_i(\omega_i) \cdot (\mathbf{n} \cdot \omega_i) \, d\omega_iLo​(p,ωo​)=∫Ω​fr​(ωi​,ωo​)⋅Li​(ωi​)⋅(n⋅ωi​)dωi​
기호
의미
Lo(p,ωo)L_o(\mathbf{p}, \omega_o)Lo​(p,ωo​)
지점 p\mathbf{p}p에서 관찰 방향 ωo\omega_oωo​로 반사되는 총 복사휘도
ωi\omega_iωi​
입사광 방향 (광원이 있는 쪽)
ωo\omega_oωo​
출사광 방향 (관찰자 방향)
Li(ωi)L_i(\omega_i)Li​(ωi​)
입사 방향 ωi\omega_iωi​에서 들어오는 복사휘도 (광원의 세기)
fr(ωi,ωo)f_r(\omega_i, \omega_o)fr​(ωi​,ωo​)
반사 분포 함수 (BRDF): 입사/출사 방향에 따른 반사율
n⋅ωi\mathbf{n} \cdot \omega_in⋅ωi​
입사각의 코사인: 에너지의 유효 투영면적 보정
Ω\OmegaΩ
입사광이 올 수 있는 반구 영역 (표면 위쪽)
dωid\omega_idωi​
입사 방향에 대한 미분 solid angle (입사 방향의 집합에 대한 적분 변수)

하지만 조명 계산에서 통합된 렌더링 방정식을 그대로 쓰지 않고, Lo=kd⋅Diffuse+ks⋅SpecularL_o = k_d \cdot \text{Diffuse} + k_s \cdot \text{Specular}Lo​=kd​⋅Diffuse+ks​⋅Specular 처럼 diffuse와 specular를 분리해서 사용한다. 그 이유는 주로 계산 효율성, 표현 제어, 그리고 렌더링 컨텍스트의 차이에 있습니다.

🔷 1. 렌더링 방정식은 이론적으로 완전하지만 계산 비용이 너무 큼

하지만 이 식을 정확히 계산하려면 다음이 필요합니다.

  • 모든 방향의 입사광 \omega_i에 대해 샘플링
  • 각 입사 방향에서 LiL_iLi​를 계산 (즉, 광원 → 표면 경로 추적 필요)
  • 재귀적 반사/투과 고려 필요 (간접 조명 포함)
→ 실시간 렌더링에서는 계산량이 매우 크고 비현실적

🔷 2. 따라서 실시간 렌더링에서는 광원을 “명시적으로” 분리

👉 핵심 전략: 광원 수만큼의 유한한 샘플링

렌더링 방정식의 적분을 점광원 단위의 유한한 합으로 근사합니다:

Lo=∑lightsfr(ωi,ωo)⋅Li⋅(n⋅ωi)L_o = \sum_{\text{lights}} f_r(\omega_i, \omega_o) \cdot L_i \cdot (\mathbf{n} \cdot \omega_i)Lo​=∑lights​fr​(ωi​,ωo​)⋅Li​⋅(n⋅ωi​)

그리고 이 frf_rfr​를 구현할 때:

  • 일반적으로 fr=fdiffuse+fspecularf_r = f_{\text{diffuse}} + f_{\text{specular}}fr​=fdiffuse​+fspecular​
  • 따라서 계산도 분리해서: Lo=kd⋅Diffuse+ks⋅SpecularL_o = k_d \cdot \text{Diffuse} + k_s \cdot \text{Specular}Lo​=kd​⋅Diffuse+ks​⋅Specular

이렇게 하면:

  • 각 항목을 독립적으로 제어 가능 (예: roughness, metallic 등에 따른 가중치 조절)
  • 최적화 가능성 증가 (특정 조건에서 생략 또는 LUT 사용 가능)
  • 아티스트/사용자 편의성 증가 (쉐이더 파라미터로 쉽게 조절)

🔷 3. 조명 항목 분리는 BRDF 설계에서도 자연스러운 방식

많은 BRDF 모델은 본래부터 다음처럼 구성됩니다:

fr=fdiffuse+fspecularf_r = f_{\text{diffuse}} + f_{\text{specular}}fr​=fdiffuse​+fspecular​

  • Lambert, Oren–Nayar 등은 diffuse 계열
  • Cook–Torrance, Blinn–Phong 등은 specular 계열

따라서 렌더링 방정식을 해석할 때도 분리된 항으로 정리하는 것이 논리적으로 타당하고, 실제 구현 시에는 표면 특성에 따라 한 쪽을 생략하는 것도 가능해집니다.

🔷 4. 실용적 장점: PBR 파라미터 적용이 직관적

Blender나 Unity, Unreal 같은 엔진에서는 사용자에게 다음과 같은 파라미터를 제공합니다:

  • Base Color, Metallic, Roughness, Specular, Clearcoat …

이들은 Diffuse와 Specular를 따로 제어하는 데에 매우 적합하므로, 모델을 분리하여 사용하는 방식이 더 모듈화되고 직관적입니다.

🔷 5. 요약 비교

항목
렌더링 방정식 (적분형)
Diffuse + Specular 분리형
모델링
물리적으로 가장 정확한 일반식
실제 사용 시 계산 간략화된 형태
계산량
높음 (다방향 샘플링 필요)
낮음 (광원별 단일 평가)
적용
주로 오프라인 렌더링 (e.g. path tracing)
주로 실시간 렌더링
제어
하나의 통합 함수 내에서 반응
사용자 파라미터 기반 제어 쉬움
확장성
이론적으로 매우 강력
성능과 직관성 중심으로 설계됨

✅ 결론

렌더링 방정식은 이론적으로 완전한 모델이지만, 실시간 렌더링과 인터랙티브 시스템에서는 효율성과 제어 용이성을 위해 일반적으로 Diffuse + Specular 분리형 모델 이것은 학문적 타당성과 실용적 필요성 사이의 균형을 반영한 결정입니다.

🔷 1. 수식 개요

PBR에서 Point Light로 인한 조명 계산은 다음과 같은 형태의 식으로 표현됩니다. 이 수식은 특정 지점에서 입사광 LiL_iLi​가 어떻게 반사되어 관찰자 방향 ωo\omega_oωo​로 나오는지(=출사광 LoL_oLo​)를 계산합니다.

Lo=F(ωi,h)⋅G(ωi,ωo,n)⋅D(h)4(n⋅ωi)(n⋅ωo)⋅LiL_o = \frac{F(\omega_i, \mathbf{h}) \cdot G(\omega_i, \omega_o, \mathbf{n}) \cdot D(\mathbf{h})}{4 (\mathbf{n} \cdot \omega_i)(\mathbf{n} \cdot \omega_o)} \cdot L_iLo​=4(n⋅ωi​)(n⋅ωo​)F(ωi​,h)⋅G(ωi​,ωo​,n)⋅D(h)​⋅Li​

🔷 2. 물리적 해석: 각 요소의 의미

기호
명칭
설명
LoL_oLo​
출사 복사휘도 (Outgoing Radiance)
관찰자가 보는 방향으로 반사된 빛의 세기
LiL_iLi​
입사 복사휘도 (Incoming Radiance)
광원으로부터 들어오는 빛의 세기 (예: Point Light의 세기)
ωi\omega_iωi​
입사 방향 (Light Direction)
표면 지점에서 광원을 향한 단위 벡터
ωo\omega_oωo​
출사 방향 (View Direction)
표면 지점에서 카메라 또는 눈 방향으로 향하는 단위 벡터
n\mathbf{n}n
법선 벡터 (Normal Vector)
표면의 수직 방향 (normalized)
h\mathbf{h}h
half vector
h=ωi+ωo∣ωi+ωo∣\mathbf{h} = \frac{\omega_i + \omega_o}{| \omega_i + \omega_o |}h=∣ωi​+ωo​∣ωi​+ωo​​ 입사광과 반사광의 중간 벡터 (specular reflection 계산에 사용)

🔷 3. 각 구성요소 세부 설명

🟨 1. Fresnel Term: F(ωi,h)F(\omega_i, \mathbf{h})F(ωi​,h)

  • 빛이 표면에 닿을 때 반사되는 비율을 각도에 따라 조절합니다.
  • 입사각이 작을수록 (빛이 표면에 수직) → 반사 적음
  • 입사각이 클수록 (빛이 스치듯 들어옴) → 반사 많음

  • 일반적으로 Schlick 근사를 사용: F(ωi,h)=F0+(1−F0)(1−(ωi⋅h))5F(\omega_i, \mathbf{h}) = F_0 + (1 - F_0)(1 - (\omega_i \cdot \mathbf{h}))^5F(ωi​,h)=F0​+(1−F0​)(1−(ωi​⋅h))5
  • F0F_0F0​: 표면의 정면 반사율 (예: 금속은 높고, 비금속은 낮음)

🟨 2. Geometry Term: G(\omega_i, \omega_o, \mathbf{n})

  • 마이크로 표면에 의해 빛이 가려지거나 마스킹되는 정도를 나타냅니다.
  • 즉, 입사광과 반사광이 얼마나 효율적으로 표면과 상호작용하는지 측정
  • 여러 모델이 존재하나 대표적으로 Smith G term:

G = G_1(\omega_i) \cdot G_1(\omega_o)

Smith 함수 예시:

G_1(\omega) = \frac{2 (\mathbf{n} \cdot \omega)}{(\mathbf{n} \cdot \omega) + \sqrt{\alpha^2 + (1 - \alpha^2)(\mathbf{n} \cdot \omega)^2}}

  • \alpha: 표면 거칠기 (roughness, 0~1)

🟨 3. Distribution Term: D(\mathbf{h})

  • 마이크로 표면이 특정 방향을 얼마나 잘 따르는지를 나타냅니다.
  • 즉, 얼마나 많은 마이크로면이 \mathbf{h} 방향으로 정렬되어 있는지
  • 대표적으로 GGX 분포 함수가 사용됩니다:

D(\mathbf{h}) = \frac{\alpha^2}{\pi \left[(\mathbf{n} \cdot \mathbf{h})^2 (\alpha^2 - 1) + 1\right]^2}

  • \alpha: 거칠기 roughness → 거칠수록 하이라이트가 넓어짐

🟨 4. 분모: 4 (\mathbf{n} \cdot \omega_i)(\mathbf{n} \cdot \omega_o)

  • 이 항은 입사 및 반사 방향이 표면과 이루는 각도의 기하학적 보정입니다.
  • 에너지 보존 및 BRDF 정상화 조건을 만족하기 위해 필요합니다.

🔹 PBR Point Light에서 달라지는 주요 특징

  1. 정확한 에너지 보존 (Energy Conservation)
    • 반사되는 빛의 양은 입사광보다 클 수 없음
  2. Fresnel 반사 고려
    • 각도에 따라 반사율이 변화 (Grazing angle에서 더 많이 반사됨)
  3. 마이크로 표면 구조 고려
    • 표면의 거칠기 (roughness)가 하이라이트 모양과 확산 정도 결정
  4. 실제 물리 단위 활용 가능
    • 광원의 밝기 단위를 candela, lux, lumens로 표현 가능

🔹 요약

항목
PBR의 Point Light에 대한 특징
위치 및 방향성
전통 모델과 동일
감쇠 방식
inverse-square law (자연스러움 강화)
조명 모델
BRDF 기반의 물리적 모델
표면 반응
Roughness, Fresnel 등 포함
하이라이트 표현
더 정확하고 현실적인 specular 표현

필요하시면 Unity 또는 Unreal Engine에서 PBR 기반 Point Light가 어떻게 설정되고 계산되는지도 예시로 보여드릴 수 있습니다.

좋습니다.

아래는 **Physically Based Rendering (PBR)**에서 사용되는 핵심 반사 모델인 Cook-Torrance BRDF 기반 조명 수식의 원리와 변수 설명입니다.

🔷 1. 수식 개요

PBR에서 Point Light로 인한 조명 계산은 다음과 같은 형태의 식으로 표현됩니다:

L_o = \frac{F(\omega_i, \mathbf{h}) \cdot G(\omega_i, \omega_o, \mathbf{n}) \cdot D(\mathbf{h})}{4 (\mathbf{n} \cdot \omega_i)(\mathbf{n} \cdot \omega_o)} \cdot L_i

이 수식은 특정 지점에서 **입사광 L_i**가 어떻게 반사되어 **관찰자 방향 \omega_o**로 나오는지(=출사광 L_o)를 계산합니다.

🔷 3. 각 구성요소 세부 설명

🟨 1. Fresnel Term: F(\omega_i, \mathbf{h})

  • 빛이 표면에 닿을 때 반사되는 비율을 각도에 따라 조절합니다.
  • 입사각이 작을수록 (빛이 표면에 수직) → 반사 적음
  • 입사각이 클수록 (빛이 스치듯 들어옴) → 반사 많음

  • 일반적으로 Schlick 근사를 사용:

F(\omega_i, \mathbf{h}) = F_0 + (1 - F_0)(1 - (\omega_i \cdot \mathbf{h}))^5

  • F_0: 표면의 정면 반사율 (예: 금속은 높고, 비금속은 낮음)

🟨 2. Geometry Term: G(\omega_i, \omega_o, \mathbf{n})

  • 마이크로 표면에 의해 빛이 가려지거나 마스킹되는 정도를 나타냅니다.
  • 즉, 입사광과 반사광이 얼마나 효율적으로 표면과 상호작용하는지 측정
  • 여러 모델이 존재하나 대표적으로 Smith G term:

G = G_1(\omega_i) \cdot G_1(\omega_o)

Smith 함수 예시:

G_1(\omega) = \frac{2 (\mathbf{n} \cdot \omega)}{(\mathbf{n} \cdot \omega) + \sqrt{\alpha^2 + (1 - \alpha^2)(\mathbf{n} \cdot \omega)^2}}

  • \alpha: 표면 거칠기 (roughness, 0~1)

🟨 3. Distribution Term: D(\mathbf{h})

  • 마이크로 표면이 특정 방향을 얼마나 잘 따르는지를 나타냅니다.
  • 즉, 얼마나 많은 마이크로면이 \mathbf{h} 방향으로 정렬되어 있는지
  • 대표적으로 GGX 분포 함수가 사용됩니다:

D(\mathbf{h}) = \frac{\alpha^2}{\pi \left[(\mathbf{n} \cdot \mathbf{h})^2 (\alpha^2 - 1) + 1\right]^2}

  • \alpha: 거칠기 roughness → 거칠수록 하이라이트가 넓어짐

🟨 4. 분모: 4 (\mathbf{n} \cdot \omega_i)(\mathbf{n} \cdot \omega_o)

  • 이 항은 입사 및 반사 방향이 표면과 이루는 각도의 기하학적 보정입니다.
  • 에너지 보존 및 BRDF 정상화 조건을 만족하기 위해 필요합니다.

🔷 4. 전체 동작 원리 요약

  • Point Light는 위치와 색상을 가지며, 거리 제곱 감쇠에 따라 L_i를 제공합니다.
  • 표면은 특정 방향(법선 \mathbf{n})과 거칠기(roughness), 금속성(metallic)에 따라 다르게 반사합니다.
  • 위 BRDF 수식은 이런 반응을 기반으로 관찰자 방향으로 반사되는 빛 L_o를 계산합니다.

🔷 5. 추가: Diffuse 성분 포함 (보통은 다음과 같이 합쳐 계산)

PBR에서는 보통 전체 조명을 이렇게 구성합니다:

L_o = (k_d \cdot \text{Diffuse}) + (k_s \cdot \text{Specular})

  • Diffuse (Lambert):
  • \text{Diffuse} = \frac{L_i}{\pi} \cdot (\mathbf{n} \cdot \omega_i)

    (비금속일 때만 활성화됨)

  • Specular는 위 Cook-Torrance 모델
  • k_d, k_s는 재질의 metalness에 따라 자동 분리됨:

k_s = F(\omega_i, \mathbf{h}), \quad k_d = (1 - k_s)(1 - \text{metallic})

🔷 요약 도표

항목
의미
설명
L_o
출사 휘도
화면에 그릴 픽셀의 조명 결과
L_i
입사 휘도
Point Light에서 오는 빛
\omega_i, \omega_o
입사/출사 방향
광원 및 카메라 방향
\mathbf{n}
법선 벡터
표면의 방향성
\mathbf{h}
half vector
입사/출사 중간 벡터
F
Fresnel
각도에 따른 반사율 변화
G
Geometry
마이크로 면에 의한 가림 효과
D
Distribution
하이라이트의 날카로움 결정
\alpha
roughness
표면 거칠기, 하이라이트 넓이 조절

필요하시다면 이 모델을 기반으로 한 GLSL 쉐이더 구현 예제나, Unreal/Unity에서의 실제 적용 방식도 안내드릴 수 있습니다.

네, 정확히 그렇습니다.

당신이 제시한 이 수식은 diffuse term과 specular term 모두를 포함하는

통합적이고 일반적인 조명 모델, 즉 **렌더링 방정식(Rendering Equation)**의 표면 반사 성분에 대한 통합 표현입니다.

🔷 수식 다시 보기

L_o(\mathbf{p}, \omega_o) = \int_{\Omega} f_r(\omega_i, \omega_o) \cdot L_i(\omega_i) \cdot (\mathbf{n} \cdot \omega_i) \, d\omega_i

🔷 구성 요소 설명

🔷 핵심 포인트: f_r(\omega_i, \omega_o) = Diffuse + Specular

✔️ f_r: BRDF는 다음을 포함합니다

f_r = f_{\text{diffuse}} + f_{\text{specular}}

  • 예: Cook-Torrance BRDF는 다음과 같이 구성됨:

f_r = \underbrace{\frac{(1 - F_0)(1 - \text{metallic})}{\pi}}{\text{Diffuse: Lambertian}} + \underbrace{\frac{F \cdot D \cdot G}{4 (\mathbf{n} \cdot \omega_i)(\mathbf{n} \cdot \omega_o)}}{\text{Specular: Microfacet}}

즉, 위 수식은 Lambertian과 Cook-Torrance 둘 다를 f_r 안에 포함하며,

이 적분 하나로 전체 반사 조명을 표현할 수 있습니다.

🔷 요약 정리

항목
설명
수식 역할
표면에서 나오는 총 반사 조명을 계산
포함 요소
Diffuse + Specular 모두 포함
핵심 함수
BRDF f_r: 재질에 따라 달라지며, diffuse + specular를 모두 포괄
왜 적분인가?
입사 방향 전체를 고려해서 총 반사 조명을 합산하기 위해
실제 구현 시
이 적분은 실시간 렌더링에선 보통 근사 (예: point light 방향만 샘플링)

✅ 결론

네, 이 수식은 Diffuse term과 Specular term을 모두 포함하는 일반적인 조명 모델입니다.
핵심은 f_r(\omega_i, \omega_o)이며, 이는 재질에 따라 구성되어 두 반사 성분 모두를 포함합니다.

필요하시면 이 수식이 실시간 렌더링에서는 어떻게 근사화되고, 레이트레이싱에서는 어떻게 샘플링 기반으로 구현되는지도 설명드릴 수 있습니다.