컴퓨터과학/컴퓨터그래픽스

[컴퓨터그래픽스] 3D 조명: Local/Global Illumination, Phong 반사 모델

깃짱 2025. 10. 23. 15:00
반응형

🌏 조명(Lighting)

3D 그래픽스에서 "조명"은 단순히 화면을 밝게 만드는 게 아닙니다. 입체감을 만들고, 소재의 질감을 표현하고, 장면의 분위기를 결정짓는 핵심 요소입니다.

실제로는 광원의 위치, 표면의 재질, 관찰자의 시점이 결합되어 물체의 입체감과 사실감을 결정짓습니다.
즉, 조명은 “렌더링의 질”을 좌우하는 핵심 요소입니다.

 

이 포스팅에서는 Local/Global 조명, Phong 모델, 셰이딩 기법에 대해서 다루려고 합니다.

✅ Local vs Global Illumination

  • Local Illumination (직접 조명)
    • 조명과 물체 간의 직접적인 상호작용만 고려합니다.
    • 반사, 투과, 그림자 등의 간접 조명은 무시합니다.
    • 예. Phong 모델, Cook-Torrance 모델
  • Global Illumination (간접 조명 포함)
    • 조명뿐 아니라 다른 표면에서 반사된 빛도 고려합니다.
    • 보다 현실적이지만 계산량이 많음
    • 예. Ray tracing, Radiosity

Local은 손전등처럼 직접 비추는 빛만, Global은 벽에서 반사돼 다시 들어오는 빛까지 생각하는 방식입니다.

✅ Phong 반사 모델

Phong 모델은 현실적인 조명을 간단한 수학으로 근사한 대표적인 로컬 조명 모델입니다. 세 가지 성분을 더해서 최종 색상을 만듭니다

 

1. Ambient (환경광)

  • 주변에 퍼져 있는 일관된 빛
  • 물체가 어디에 있든 항상 일정한 밝기
  • I_ambient = k_a * I_a
    • k는 가중치

2. Diffuse (난반사광)

  • 물체 표면이 거칠어서 빛을 여러 방향으로 퍼뜨리는 효과
  • 입사각이 작을수록 밝게 보임 (램버트 법칙)
  • I_diffuse = k_d * I_l * max(0, N · L)
    • N: 표면의 법선 벡터
    • L: 빛의 방향

3. Specular (정반사광)

  • 표면이 반들반들할 때 생기는 하이라이트
  • 관찰자 방향에 따라 밝기가 달라짐
  • 계산 식:
    • R: 반사 벡터
    • V: 시선 벡터
    • n: shininess 계수 (클수록 날카롭고 작은 하이라이트)
  • I_specular = k_s * I_l * (R · V)^n

이 세가지를 모두 합하면 Phong Reflection 값이 된다!!!

✅ Specular Reflection에서 n의 영향

  • n이 클수록 하이라이트가 작고 날카로워집니다.
  • n이 작으면 넓게 퍼지고 흐릿한 하이라이트가 나타납니다.

예를 들어, 금속처럼 반들거리는 물체는 n이 큽니당

✅ 셰이딩 기법: Gouraud vs Phong

셰이딩(Shading)은 조명 모델을 다각형에 적용하는 방식을 말합니다.

셰이딩 기법 설명 특징
Gouraud 정점에서 색상을 계산하고, 픽셀에 보간 빠름, 부드럽지만 하이라이트 표현 약함
Phong 정점에서 법선 벡터를 보간하여 픽셀마다 조명 계산 느리지만 정밀한 하이라이트 표현 가능

✔ Gouraud: 색상을 보간

✔ Phong: 법선 벡터를 보간

 

✅ Flat vs Smooth Shading

  • Flat Shading
    • 삼각형 하나마다 하나의 법선 벡터 사용 → 각지게 표현
    • 각 면마다 다른 색상 → 다소 투박 (완성도 겁나 낮아보임)
  • Smooth Shading
    • 정점에서의 법선을 보간하여 부드럽게 연결
    • 곡면 같은 느낌을 줄 수 있음

WebGL에서는 보통 Phong + Smooth 조합을 많이 씁니다.

조명에 대해서 구체적으로 계산할 때 근사하는 식도 있습니다만 이건 개발을 위한 개념 이해에는 그닥 필요 없다고 생각해 스킵하겠습니다!

 

 

 

도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!

 

반응형