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

[D3D 이론] 빛(Lighting) 모델 : Phong, Blinn-Phong 와 수식 의미 본문

D3D

[D3D 이론] 빛(Lighting) 모델 : Phong, Blinn-Phong 와 수식 의미

MoonSun_v 2025. 9. 22. 16:33

 

이전에는 게임 그래픽스의 빛 계산(Lighting) 모델로 램버트(Lambert) 모델에 대해 알아봤었다. 

 

 

램버트 모델을 소개하면서 다른 모델들에 대해서도 간단 언급했었는데,

이번에는 나머지 모델인 Phong과 Blinn-Phong에 대해 알아보고자 한다. 

 

 

들어가기에 앞서, 간단 요약해보면 다음과 같다. 

모델 특징 현실감 정도
Lambert 확산광만, 하이라이트 없음 낮음 (무광 느낌, 매트 느낌)
Phong 확산광 + 정반사 하이라이트 + 환경광(Ambient) 중간 이하 (광택 표현 가능하지만 비물리적)
Blinn-Phong 확산 + 정반사 하이라이트 (Half Vector 사용, 부드럽고 빠름) + 환경광 중간 (플라스틱/금속 느낌, 옛날 게임 표준)
PBR 물리 기반, 금속도/거칠기/환경광 포함 높음 (현실적 재질 표현, 현대 엔진 표준)

 

즉, Lambert Phong → Blinn-Phong → PBR 순으로 점점 복잡하고 현실감이 높아진다. 

 

 

 

1. Phong Shading (1975)

GPU 성능이 좋지 않았던 과거의 Legacy Shading 모델

픽셀의 최종 색상은 환경(ambient)광+ 확산(diffuse)광+ 정반사(specular)광의 합으로 결정한다.
  • 구성 요소: Ambient + Diffuse + Specular
    • Ambient: 씬 전체의 최소 밝기
    • Diffuse: 표면에 닿은 빛이 균일하게 퍼짐
    • Specular: 반사된 빛(거울 같은 하이라이트)

 

 

1-1. 환경광 (Ambient)

 

  • 씬 전체에 균일하게 퍼져 있는 최소 밝기
  • 실제로는 "간접광(Indirect light)"을 단순화한 개념
  • 그림자가 져도 완전히 까맣지 않은 이유

 

 

 

 

1-2. 확산광 (diffuse)

 

  • 빛이 표면에 닿으면 모든 방향으로 퍼져 나가는 빛
  • 표면이 빛을 얼마나 정면으로 받는지에 따라 세기가 달라짐 (법선과 광원 방향 각도에 의존)

 

 

 

1-2-1. Phong의 확산광(diffuse)

“빛이 표면에 닿으면, 표면 위에서 바로 모든 방향으로 고르게 퍼져나간다.”고 단순하게 정의 

  • 즉, 표면에 빛이 닿자마자 산란(reflection) 되는 것으로 취급.
  • 표면 재질이 어떤 구조인지, 내부에서 무슨 일이 일어나는지는 고려하지 않기 때문에,
    • 나무, 돌, 플라스틱, 종이 → 다 똑같은 방식으로 확산광을 계산한다. 
“빛이 표면에서 바로 튕김” (재질 무시, 단순화된 가정)

 

 

 

1-2-2. PBR의 확산광(diffuse)

현실 세계에서는 빛이 표면에 닿으면 바로 튕기지 않고, 표면 내부로 조금 들어간다.

 

  • 재질의 두께, 색, 밀도에 따라 빛의 퍼짐이 달라짐

 

“빛이 재질 내부로 들어가 산란 후 나옴” (재질 특성 반영)

 

 

 

1-3. 정반사광 (Specular)

 

  • 거울처럼 반짝이는 하이라이트
  • 입사각 = 반사각 조건을 만족할 때 카메라 쪽으로 강한 빛이 보임
  • 광택이 강할수록(높은 shininess 값) 좁고 선명한 하이라이트

 

Phong의 수식
반사 벡터

 

 

 

2. Blinn-Phong Shading (1977)

개선된 Phong 모델

 

정반사광(specular) 계산에서, 반사벡터 R 대신 -> Half Vector(H) 를 사용
  • Half Vector (H)
    • = (빛 방향 L + 카메라 방향 V) / |L+V|
  • 반사 벡터 계산을 줄이기 위해 근사치(Half Vector: H) 를 사용해 계산 효율이 좋아지고,
    • 하이라이트가 더 넓고 부드럽게 표현됨

 

 

 

 

3. Phong과 Blinn-Phong의 정반사(Specular) 계산 

  • Phong            : 반사 벡터 (R) 사용
  • Blinn-Phong   : 빛과 뷰 사이 중간 벡터 (H) 사용 

 

3-1. Phong의 정반사 항

 

 

 

 

  • 𝑅 : 입사광 𝐿을 법선 𝑁기준으로 반사시킨 벡터
  • 𝑉 : 뷰(카메라) 방향
  • 𝛼 : shininess (광택 지수)

 

 

 

3-2. Blinn-Phong의 정반사 항 

 

 

 

 

  • 𝐻 = (𝐿+𝑉) / (∣𝐿+𝑉∣) : Half vector (빛과 뷰 사이 중간 벡터)
  • 𝑁 : 표면 법선
  • 𝛼 : shininess

 

 

 

 

 

4. Phong과 Blinn-Phong 수식

두 모델의 최종 수식은 다음과 같다.

  • Phong 모델

  • Blinn-Phong 모델 

 

4-1. 의미

 

                 1. 첫 번째 항 : 환경광(Ambient)     → 씬 전체에 균일한 최소 밝기

 

    2. 두 번째 항 : 확산광(Diffuse)       → 표면이 광원 방향에 얼마나 노출되었는지

 

 

3. 세 번째 항 : 정반사광(Specular) → 하이라이트

 

 

즉, 최종 픽셀 색상 = Ambient + Diffuse + Specular 구조의 수식 표현이다. 

 

 

4-2. 차이

 

Phong : 반사 벡터 계산 필요, 하이라이트 좁고 날카로움

 

Blinn-Phong : 반사벡터 계산 없이 Half Vector 사용, 하이라이트 넓고 부드러움

 

 

 

 

5. 요약 

Phong           모델은 환경광+ 확산광+ 정반사광의 합으로 픽셀의 최종 색상을 결정하는 모델이고,
Blinn-Phong  모델은 Phong 모델을 더 효율적으로 연산 하는 모델이다. 

 

라이팅 모델에 대해 설명하다보니, "반사 벡터 (reflection vector)"를 언급하게 되었는데,

 

이후 글에서는 반사 벡터에 대해서 정리해보고자 한다..!