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

[그래픽스] 빛(Lighting) 모델 : Lambertian Shading (램버트 조명 모델) 본문

D3D

[그래픽스] 빛(Lighting) 모델 : Lambertian Shading (램버트 조명 모델)

MoonSun_v 2025. 9. 15. 14:36

 
게임 그래픽스에서 빛 계산(Lighting) 관련 주요 모델들로는 다음과 같이 3가지 모델이 있다.
 
각 모델은 조명 계산 방식과 현실감 정도가 다름.
 

모델특징현실감 정도
Lambert확산광만, 하이라이트 없음낮음 (무광 느낌)
Blinn-Phong확산 + 정반사 하이라이트중간 (플라스틱/금속 느낌)
PBR물리 기반, 금속도/거칠기/환경광 포함높음 (현실적 재질 표현)

 
즉, Lambert → Blinn-Phong → PBR 순으로 점점 복잡하고 현실감이 높아진다. 
 
3가지 모델 중 가장 기본적이고 간단한 램버트 모델에 대해서 알아보고자 한다.
 
 
 
 

1. Lambertian Shading 정의

  • 확산(diffuse) 조명 모델 중 하나
  • 표면이 빛을 모든 방향으로 균일하게 반사한다고 가정
  • 가장 기본적이고 계산이 빠른 조명 모델

즉, 빛이 닿는 각도만 고려하고, 하이라이트나 반사광은 없음.
 
 
 
 
 

2. 수학적 표현

최종색상 RGB = 빛의 색상RGB * 표면의 색상 RGB * 입사량 ( N dot L )
Vector3               Vector3             Vector3                 Float 

평면에 빛이 정면(수직)으로 들어오면 밝고, 비스듬히 들어오면 어둡다는 것. 
 
 

입사량 ( N dot L )

  • N : 표면의 Normal ( 법선, 단위벡터 )
  • L : 빛의 방향           ( 단위벡터, 보통은 -LightDir )
  • N⋅L= ∣N∣∣L∣cosθ = cosθ        ( 단위벡터라서 |N|=|L|=1 )

즉,

빛과 표면의 각도 cosθ 값  
정면    θ = 0°cosθ = 1 밝음 (최대)
수직    θ = 90°cosθ = 0 빛 없음
뒤쪽    θ > 90°cosθ < 0빛 없음 (그림자 쪽)

 
 
 
 

3. 색상 계산

vec3FinalColor = saturate ( dot ( vec3Normal , -vec3Light )  *  vec3Color )
  • saturate()
    • saturate(Input) = input의 각성분을 0~1로 잘라냄
    • 빛 계산에서 음수(-)는 필요 없으니 0으로 잘라내는 과정. 

 

 
1.  Normal과 LightDir 사이 각도 계산 → cosθ 
2.  cosθ가 음수면 0으로 잘라줌(saturate) → 그림자 처리
3.  물체 색상 × 빛 색상 × 입사량 → 최종 픽셀 색상