12 — 조명과 셰이딩 (Illumination & Shading)
출처: SSU 컴퓨터 그래픽스 슬라이드 —
SSU_Intro2CG_12_Illumination&Shading.pdf주차: 12주차 선행: 10 — 래스터화 (정점 속성 보간)
폴리곤에 빛을 입혀 색을 정하는 단계. 조명(illumination) 은 한 점의 색을 빛-재질 상호작용으로 계산하는 것이고, 셰이딩(shading) 은 그것을 면 전체에 어떻게 펼치느냐입니다. 핵심은 Phong 반사 모델과 Flat/Gouraud/Phong 셰이딩 3종의 차이입니다.
1. 빛의 전달과 색
출처: 슬라이드 — Light Transport / Color of Objects
빛은 광원(태양 등)에서 나와 직진하다가 물체에 닿으면 흡수되거나 반사됩니다. 우리가 보는 물체 색은 반사된 파장입니다.
1.1 색의 근사 — RGB
- 빛 색: R, G, B 성분으로 근사. 예) 빨강
(1,0,0), 흰색(1,1,1). - 물체의 반사: 각 성분을 얼마나 반사하는지의 비율.
- 최종 색 = 빛 색 ⊙ 표면 색 (성분별 곱, element-wise).
1.2 왜 셰이딩이 필요한가
구를 폴리곤으로 만들어 단색으로 칠하면 평평해 보입니다. 실제 구처럼 보이려면 점마다 다른 음영이 필요하고, 그것은 재질·광원·시점·표면 방향의 상호작용으로 결정됩니다.
2. 광원과 표면
출처: 슬라이드 — Surface Types / Simple Light Sources
2.1 표면 종류
- 매끄러운 표면: 반사광이 완전 거울 반사 방향에 집중 → 하이라이트.
- 거친 표면: 빛을 모든 방향으로 산란 → 무광.
2.2 단순 광원 모델 ⭐️
| 광원 | 특징 |
|---|---|
| Point source | 위치 + 색 (부피 없는 전구) |
| Spotlight | 점광원을 특정 원뿔로 제한 |
| Distant / Directional | 무한히 먼 → 광선이 평행 (방향만 있음) |
| Ambient light | 장면 어디서나 같은 양. 여러 광원·반사의 기여를 뭉뚱그린 트릭(hack) |
2.3 직접광 vs 전역조명
- 전역조명(Global Illumination) = 직접조명 + 간접조명.
- 이 장은 직접조명(direct illumination) 에 집중. (간접/전역은 레이트레이싱·라디오시티 등 → 14장 참고)
3. Phong 반사 모델 ⭐️⭐️
출처: 슬라이드 — Phong Reflection Model (Bui-Tuong Phong, 1975)
빠르게 계산 가능한 단순 모델. 세 성분의 합이며 네 벡터를 씁니다.
세 성분: Diffuse(난반사) · Specular(정반사) · Ambient(주변광) 네 벡터: 광원으로 · 시점으로 · 법선 · 완전반사
3.0 기호 사전 — 먼저 이것부터
식을 보기 전에 등장하는 기호들의 뜻을 잡고 갑시다.
| 기호 | 뜻 | 비유 |
|---|---|---|
| 법선 — 표면이 바라보는 수직 방향 | 바닥에 꽂은 막대 | |
| 광원 방향 — 그 점에서 전구를 향한 방향 | 점 → 전구 화살표 | |
| 시선 방향 — 그 점에서 눈을 향한 방향 | 점 → 눈 화살표 | |
| 완전반사 방향 — L이 거울처럼 튕긴 방향 | 당구공이 벽 맞고 튀는 방향 | |
| 표면의 반사 계수(재질 성질, 0~1) | 이 재질이 각 빛을 얼마나 반사하나 | |
| 광원 색·세기 / 주변광 세기 | 전구의 밝기 | |
| 광택 지수(shininess) | 표면이 얼마나 매끈한가 |
핵심 도구 — 내적 ⭐️
두 단위벡터의 내적은 둘이 얼마나 같은 방향인지를 주는 값으로, 입니다 (θ = 사이 각).
- 같은 방향(0°) → (최대)
- 수직(90°) →
- 반대(180°) →
내적은 "정렬 정도 측정기". Phong 식의 과 은 둘 다 "두 방향이 얼마나 맞아떨어지나"를 재는 것뿐입니다.
3.1 전체 식 ⭐️
한 점의 밝기 를 세 종류의 빛을 더해서 만듭니다. 각 항이 무엇으로 결정되는지:
| 항 | 식 | 무엇으로 결정 | 시점 의존? |
|---|---|---|---|
| 난반사 | 빛이 얼마나 정면(N)에서 오나 = | ❌ 어디서 봐도 같음 | |
| 정반사 | 눈(V)이 반사빛 방향(R)을 보나 = | ✅ 움직이면 따라옴 | |
| 주변광 | 방향 무관 상수 (깜깜함 방지) | — |
각 색 성분(R,G,B)마다, 그리고 각 광원마다 계산해 합칩니다.
수식의 세 항이 각각 어떤 벡터/각도로 결정되는지 아래에서 직접 보세요. 광원 L 과 시선 V 를 드래그하면 N·L(난반사), (V·R)ⁿ(정반사), 상수(주변광)가 따로 변하고, 방향별 반사 세기인 반사 로브가 함께 그려집니다. (셰이딩 적용 결과는 그다음 구(球)에서 확인)
Phong 반사 모델 — 벡터와 3D 반사 로브
3D세 항이 각각 무엇으로 결정되는지 봅니다 — 난반사는 N·L(빛 각도, 시점 무관), 정반사는 (V·R)ⁿ(반사방향 R 과 시선 V 의 정렬), 주변광은 상수. 반투명 로브가 방향별 반사 세기이고, V 화살표 끝의 점이 그 로브를 읽는 위치입니다. 씬을 드래그해 돌려 보세요.
Phong Illumination — 실시간 셰이딩 구체
live구체의 각 픽셀에 Phong 모델 I = Kd·Lc(N·L) + Ks·Lc(V·R)n + Ka·La 를 직접 계산합니다. 광원 각도와 shininess, 각 계수를 바꿔 하이라이트가 어떻게 변하는지 보세요.
shininess ↑ → 하이라이트가 작고 날카로워짐. Ks=0 으로 두면 무광(Lambertian), Ka 만 남기면 빛을 등진 면도 검지 않게 됩니다.
3.2 난반사 — Lambertian (Diffuse) ⭐️
무광(matte) 표면을 Lambertian 이라 합니다. 광택이 없고, 시점에 무관하게 사방으로 균등 산란.
Lambert 법칙: 표면 색은 법선과 광원 방향 사이 각의 코사인에 비례.
- : 난반사 계수(= 표면 색) [0,1]
- : 음수면 0 으로 클램프 (빛을 등진 면).
직관: 빛이 표면 정면(N 방향)에서 똑바로 내리쬐면 로 제일 밝고, 비스듬히 들어올수록 이 작아져 어두워집니다.
정오의 태양(머리 위) 아래 땅은 밝고, 해질녘(비스듬) 같은 땅은 어두운 것과 똑같습니다. 그리고 난반사 식에는 가 없습니다 → 어디서 봐도 밝기가 같음(시점 무관). 가 곧 그 표면의 색.
3.3 정반사 — Specular ⭐️
매끄러운 표면의 하이라이트. 완전반사 방향 근처에 집중되며 시점 의존적(view-dependent).
- : 반사방향 R 과 시선 V 사이 각. 에서 최대, 멀어지면 급격히 감소.
- n (shininess): 정반사 지수. 클수록 하이라이트가 작고 날카로움.
- 반사벡터:
단계별로 읽기:
- = 광원 이 거울처럼 튕긴 방향 (당구공이 벽 맞고 튀는 방향).
- = 내 눈이 그 튕긴 빛 방향과 정렬됐나? 정렬되면 1(번쩍!), 벗어나면 작아짐 → 그래서 고개를 움직이면 광택 위치가 따라 움직임(시점 의존).
의 n 이 하는 일 ⭐️
은 01 값인데, 01 사이 수를 거듭제곱하면 급격히 작아집니다. 이게 하이라이트를 좁고 날카롭게 만드는 장치예요. 예를 들어 일 때:
| n | 하이라이트 모양 | 재질 느낌 | |
|---|---|---|---|
| 1 | 0.90 | 넓고 흐릿 | 거친 표면 |
| 10 | 0.35 | 좁아짐 | 플라스틱 |
| 50 | 0.005 | 거의 점 | 광택 |
| 128 | ≈ 0 | 날카로운 점 | 거울·금속 |
n 이 클수록 R 에서 조금만 벗어나도 값이 확 떨어져 → 하이라이트가 작고 또렷한 점. n 이 작을수록 넓고 부드러운 광택. 고무공(n 작음) vs 당구공(n 큼)의 차이가 바로 이 지수입니다.
3.4 주변광 — Ambient ⭐️
Lambertian 만 쓰면 빛을 등진 면()이 완전히 검게 나옵니다. 현실에선 벽·바닥에 튕긴 빛이 돌아다녀 그늘도 깜깜하진 않죠. 그 간접광을 일일이 계산하긴 비싸니, "장면에 깔린 최소 밝기"를 상수로 더해주는 트릭:
방향()도 시점()도 없는 그냥 한 덩어리 상수 — 깜깜함 방지용입니다.
3.5 거리 감쇠 & 다중 광원
- 거리 항: 점광원 빛은 거리 제곱에 반비례. 인수를 곱해 부드럽게.
- 다중 광원: 광원마다 계산해 모두 더함.
4. 폴리곤 셰이딩 3종 ⭐️⭐️
출처: 슬라이드 — Illumination vs. Shading / Flat·Gouraud·Phong
조명 식을 면 전체 어디서 계산하느냐에 따라 세 가지:
| 방식 | 계산 단위 | 절차 | 비용/품질 |
|---|---|---|---|
| Flat | 폴리곤당 | 삼각형 1개에 노멀 1개 → 면 전체 같은 색 | 가장 쌈, 에지에서 색 불연속(각진 면) |
| Gouraud | 정점당 | 정점에서 조명 계산 → 색을 보간 | 부드러움, 단 하이라이트 약함 |
| Phong | 픽셀당 | 정점 노멀을 보간 → 픽셀마다 조명 계산 | 가장 비쌈, 하이라이트 정확 |
테셀레이션(면 분할)을 낮춰서 세 방식의 차이를 극적으로 비교해 보세요. Flat 은 면이 각지고, Gouraud 는 하이라이트가 면 사이로 사라지며, Phong 은 면 한가운데서도 하이라이트가 또렷합니다.
폴리곤 셰이딩 3종 비교 — Flat · Gouraud · Phong
3D같은 저폴리 구 3개에 동일한 Phong 조명식을 적용하되, 어디서 조명을 계산하는지만 다릅니다. 분할 수를 낮추면 차이가 또렷해집니다 — 씬을 드래그해 돌려 보세요. (세 구는 같은 시점에서 함께 회전합니다.)
4.1 Flat Shading
삼각형마다 노멀 하나로 조명을 한 번 계산해 면 전체에 동일 적용. 빠르지만 면 경계에서 명암이 끊겨 각져 보임(faceted).
4.2 Gouraud Shading (정점 색 보간)
- 각 정점의 노멀 추정 — 보통 인접 삼각형 노멀들의 평균:
- 정점에서 조명 계산 (정점 색).
- 래스터화 중 정점 색을 선형 보간해 내부 픽셀 채움.
문제: 작은 정반사 하이라이트가 폴리곤 내부에 떨어지면 놓침. 정점에서만 계산하므로 정점 사이의 하이라이트가 사라짐.
4.3 Phong Shading (정점 노멀 보간)
- Gouraud 처럼 정점 노멀 추정.
- 래스터화 중 노멀 자체를 보간 (색이 아니라!).
- 보간된 노멀로 픽셀마다 조명 계산.
→ 하이라이트를 폴리곤 한가운데서도 정확히 포착. 대신 가시 픽셀마다 조명을 계산해 비쌈.
혼동 주의: Phong 반사 모델(3장, 조명 식)과 Phong 셰이딩(여기, 노멀 보간 기법)은 다른 것. 둘 다 Bui-Tuong Phong 이 만들어 이름이 같을 뿐입니다.
잠재 문제: 표면 노멀이 심하게 요동치면 정점 노멀 보간이 부정확해질 수 있음.
5. 고급 조명 (참고)
출처: 슬라이드 — Advanced Illumination & Shading
현실의 다양한 효과 — 반사/굴절(Reflection & Refraction), 투명, 표면하 산란(Subsurface Scattering), 간접 정반사(Caustics). 이를 다루는 전역조명 알고리즘:
- Ray tracing, Radiosity, Beam tracing, Path tracing ...
- 이론적 토대는 렌더링 방정식(Rendering Equation) 과 물리기반 반사 모델(PBR).
📝 Knowledge Check: 조명과 셰이딩
Illumination & Shading
Phong 반사 모델의 세 성분으로 옳은 것은?
🔗 다음 학습
- 이전: 11 — 파라메트릭 곡선
- 다음: 13 — 텍스처 매핑 — 표면에 이미지를 입혀 디테일 추가.
- 시험 대비: 기말 대비 — Numerical Hard Mode