ZINUN
  • About
  • CV
ZINUN

Point Light (Phong/Blinn-Phong)

https://dev.epicgames.com/documentation/en-us/unreal-engine/point-lights-in-unreal-engine

3D 그래픽스에서 Point Light는 가장 기본적인 광원 중 하나로, 실세계의 전구나 촛불처럼 모든 방향으로 균등하게 빛을 방사하는 점 광원(point source)을 이상화한 모델입니다. 학술적으로 이를 이해하려면, 광원의 특성, 수학적 모델링, 그리고 렌더링 시스템에서의 구현 방식까지 다룰 수 있습니다.

🔹 정의 (Definition)

Point Light는 3차원 공간상의 한 점에 위치하며, 방향성이 없고, 거리 감쇠(distance attenuation)를 가지는 광원입니다. 이는 빛의 파장이 아닌, 지오메트릭 광선 모델(geometric optics)에 기반하여 광선을 추상화한 표현적 조명 모델(explicit lighting model)의 일종입니다.

🔹 수학적 모델링 (Mathematical Modeling)

Point Light는 다음 요소들로 모델링됩니다:

📌 1. 위치 (Position)

광원은 3D 공간상 위치 $\mathbf{p}_L = (x, y, z)$를 가집니다.

📌 2. 방사광도 (Radiant Intensity)

모든 방향으로 등방성(isotropic)으로 동일한 세기의 빛을 방사합니다. 즉, 방향에 무관하게 일정한 방사광도 $I$를 갖습니다.

📌 3. 거리 감쇠 (Distance 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​
  • ddd: 광원과 픽셀(또는 표면)의 거리
  • kc,kl,kqk_c, k_l, k_qkc​,kl​,kq​: 각각 상수, 선형, 제곱 감쇠 계수

이는 물리적으로는 역제곱 법칙(inverse-square law)을 기반으로 하나, 그래픽스에서는 보다 유연한 조절을 위해 계수를 도입합니다.

📌 4. 조명 계산 (Lighting Computation)

픽셀 또는 표면에 대해 Lambertian 또는 Phong 조명 모델 등과 조합하여 다음과 같은 조명을 계산합니다.

예: Phong reflection model에서는 아래와 같은 식으로 나타낸다.

I=Ia+Fatt(d)⋅(Id+Is)I = I_a + F_{att}(d) \cdot (I_d + I_s)I=Ia​+Fatt​(d)⋅(Id​+Is​)

각 항목: • IaI_aIa​: Ambient term (환경광) • Id=kd⋅L⋅max⁡(0,n⋅l)I_d = k_d \cdot L \cdot \max(0, \mathbf{n} \cdot \mathbf{l})Id​=kd​⋅L⋅max(0,n⋅l): Diffuse term • Is=ks⋅L⋅(max⁡(0,r⋅v))sI_s = k_s \cdot L \cdot (\max(0, \mathbf{r} \cdot \mathbf{v}))^sIs​=ks​⋅L⋅(max(0,r⋅v))s: Specular term

📌 각 벡터 및 변수의 의미

기호 설명

  • n\mathbf{n}n 표면 법선 벡터 (surface normal vector)렌더링되는 픽셀 또는 vertex의 위치에서 바깥 방향으로 향하는 단위 벡터 (normalized vector)
  • l\mathbf{l}l 벡터표면에서 광원 방향을 가리키는 단위 벡터
  • r\mathbf{r}r 반사 벡터 (reflection vector) l\mathbf{l}l이 n\mathbf{n}n에 대해 반사된 방향
  • v\mathbf{v}v 뷰어 방향 벡터 (view direction vector)표면에서 카메라 또는 관찰자 방향을 향하는 벡터
  • kdk_dkd​ 확산 반사 계수 (diffuse reflectivity, RGB 벡터 또는 스칼라)
  • ksk_sks​ 경면 반사 계수 (specular reflectivity)
  • sss 샤이니니스 계수 (shininess exponent) – 하이라이트의 날카로움 정도
  • LLL 광원의 색상 및 세기 (radiance or intensity, RGB 벡터)
    • 광원의 RGB 색상 및 강도를 포함하는 스칼라 또는 벡터 값입니다.
    • 예: L = (1.0, 0.8, 0.6)이면 주황빛을 내는 광원
    • 이 값은 diffuse 및 specular 조명 계산 시 반사 계수와 곱해져 픽셀 색상에 영향을 줍니다.
  • Fatt(d)F_{att}(d)Fatt​(d) 거리 감쇠 함수 (attenuation function)

🔹 법선 벡터 n\mathbf{n}n의 역할

  • n⋅l\mathbf{n} \cdot \mathbf{l}n⋅l 항은 빛의 입사각과 표면의 각도 차이를 반영합니다.
  • 입사각이 클수록 (빛이 표면을 스치듯 비출수록) cos⁡(θ)\cos(\theta)cos(θ) 값이 작아지며, 이로 인해 diffuse 조명이 약해집니다.
  • 따라서 n\mathbf{n}n은 표면의 방향성 정보를 통해 빛의 밝기를 조절하는 핵심 요소입니다.

🔹 시각적 예시 (설명)

  • n\mathbf{n}n ↑ (수직)일 때 → 빛이 정면에서 들어오면 가장 밝음
  • n\mathbf{n}n ← (기울어짐)일 때 → 빛이 옆에서 들어오면 어두워짐

🔹 렌더링 시스템에서의 구현 (Implementation in Rendering Systems)

🔸 실시간 렌더링 (e.g., OpenGL, DirectX, Unity)

  • 일반적으로 씬(scene) 내에 다수의 point light를 설정 가능
  • 쉐이더(Shader)에서 표면 셰이딩 시 연산
  • 그림자 처리에는 Shadow Mapping 또는 Deferred Shading 사용

🔸 물리 기반 렌더링(PBR)

  • point light의 에너지 보존을 고려하여 BRDF와 결합
  • 감쇠 모델은 실제 inverse-square law에 더 가깝게 사용
  • 표면 반사 모델로 GGX, Cook-Torrance 등을 사용

🔹 참고 문헌 (References) • Pharr, M., Jakob, W., & Humphreys, G. (2016). Physically Based Rendering: From Theory to Implementation. Morgan Kaufmann. • Foley, J. D., van Dam, A., Feiner, S. K., & Hughes, J. F. (1996). Computer Graphics: Principles and Practice. Addison-Wesley. • Shirley, P., Marschner, S. (2009). Fundamentals of Computer Graphics. A K Peters.