MOONSUN
[그래픽스] 빛(Lighting) 모델 : Lambertian Shading (램버트 조명 모델) 본문
게임 그래픽스에서 빛 계산(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. 물체 색상 × 빛 색상 × 입사량 → 최종 픽셀 색상
'D3D' 카테고리의 다른 글
| [게임 수학] 행렬 연산의 특징 : 비가환성, 역행렬, 전치(Transpose) 등.. (0) | 2025.09.19 |
|---|---|
| [게임 수학] 벡터의 내적(Dot product) 과 외적(Cross product) (0) | 2025.09.18 |
| [D3D] 상수버퍼(Constant Buffer) 와 HLSL 정렬규칙 (0) | 2025.09.10 |
| [D3D 이론] OpenGL vs DirectX 행렬 표현 차이 및 DirectX의 행렬 불일치로 인한 Transpose (0) | 2025.09.10 |
| [D3D 이론] 기저벡터(Basis Vector)와 행렬(Matrix) (0) | 2025.09.10 |