01. 조명
1-1. 조명과 음영
조명
- 물체의 꼭짓점에 대해 밝고 어두움을 계산하는 것

1-2. 지역 조명 모델과 전역 조명 모델
전역 조명모델(Global Illumination Model)
- 다른 물체면에서 반사되어 입사되는 빛까지 고려한 조명모델
모든 빛에 대해 고려함
영화나 게임 등
지역 조명모델(Local IlluminationModel)
- 광원으로부터 직접 물체면으로 입사되는 빛만을 고려한 모델
일부 빛에 대해서만 고려함
1-3. 광원과 물체 색
면적광원과 점광원

- 면적광원(Area Light Source)과 점광원(Point Light Source)
실제 물체는 면적광원이지만, 계산의 편리함을 위해 점광원을 사용할 것

- 면적광원은 분산 점광원(Distributed Point Light Source)으로 근사화 가능
위치성 광원과 방향성 광원

스포트라이트

- 점광원의 특수한 형태 중 하나
- openGL 내부에서 계산량의 증가함
I=A+D+S
I: 최종 빛의 세기
A(Ambient)
D(Diffuse)
- 난반사광 또는 확산광
- 빛이 물체 표면에 부딪혀 모든 방향으로 고르게 퍼지는 빛
- 표면의 법선 벡터와 광원의 방향 각도에 따라 밝기가 달라짐
S(Specular)
- 반사광
- 특정 방향으로 정반사되어 하이라이트를 만드는 빛
02. 지역 조명 모델

2-1. 주변 반사(Ambient Reflection)

광원에 직접 노출되지 않는 면에 밝기를 부여
- B면은 직접 빛을 받지 않으나, 실세계에서 완전한 검정색은 아님
- 주변의 복잡한 경로를 통해 B면에 빛이 도달함
모든 빛의 경로를 추적하기 어려움
- 면마다 상수 크기의 밝기를 임의로 추가
- 전역 모델조명 효과를 근사적으로 부여
거리에 따른 빛의 약화

AmbientReflection=(Ka)(Ia)/D2
Ia: 빛에 직접 노출되지 않는 부분에 반사되어 닿는 빛(주변광)의 세기
Ka: 반사되어 닿는 물체의 성질 (반사율), 주변광에 대한 반사율
1: 해당 물체는 반사되어 받는 빛을 그대로 반사함 (흰 종이 등)
0: 해당 물체는 반사되어 받는 빛을 그대로 흡수함 (블랙홀, 검정색 종이 등)
D: 관찰자의 거리
그러나 실제 D2로 계산하게 되면 너무 어둡게 출력됨

주변광 계수 증가

여타 반사광 + 주변광 계수 증가
주변광: 위치와 방향에 무관하게 전체적으로 밝게 해주는 빛
반사광: 특정 각도에서만 반짝이는 빛
주변광의 효과
- 광원의 위치나 물체면의 방향과는 무관하게 모든 물체면의 밝기가 증가
2-2 확산 반사(Diffusive Reflection)
난반사에 해당
완벽 확산체(Perfect Diffuser)

- 입사된 빛을 모든 방향으로 완벽하게 고르게 반사함
- 관찰자는 어느 위치에서 보아도 동일한 밝기를 느낌
- 지역조명 모델의 그래픽 처리를 단순화하기 위해서 완벽 확산체를 가정
눈의 좌표를 고려하지 않은 계산식을 사용할 수 있기 때문
방향성 확산체(Directional Difuser)
- 입사광의 대칭 방향으로 더 많은 빛이 반사됨
- 관찰자가 확산 방향에 근접하면 물체가 더욱 밝게 보임
확산광의 세기

DiffuseReflection=Kd⋅Id⋅cosθ/D2=Kd⋅Id(N⋅L)/D2
Kd: 확산광(난반사광)에 대한 반사율, 확산광 계수
Id: 광원의 확산광 세기
N: 수직인 법선벡터
L: 광원 벡터
확산광 효과
- 면이 서 있는 방향에 따라 차등적 밝기
- 입체감 부여

2-3. 경면 반사
반질반질한 표면에서 반사되는 빛
- 정반사에 의함
- 물체의 색이 아닌 광원의 색을 관찰하게 됨


SpecularReflection=Ks⋅Is⋅(cosΦ)n/D2=Ks⋅Is(R⋅V)n/D2
n
- 광택계수(Shines Coefficient)
- 물체면의 매끄러운 정도를 반영
금속은 100~200, 플라스틱은 10~20 정도가 적당
2-4. 반사광의 합성

I=A+D+S=(Ka)(Ia)+Kd⋅Id(N⋅L)+Ks⋅Is(R⋅V)n
-
꼭짓점 하나마다 해당 공식을 대입해서 밝기 값을 계산
-
Ia+Id+Is=1이 되도록 임의의 값 대입
-
Ka,Kd,Ks에는 물체 본연의 색을 대입
-
N,L,R,V에 대해

-
L은 조명의 방향
-
N은 꼭짓점마다 법선벡터
-
V는 gluLookAt()
-
R은 N⋅L과 같음
지엘의 조명
- 물체의 색: R, G, B별로 빛의 세기를 별도 계산 후 최종적으로 합산
관찰자가 느끼는 조명의 세기

-
빨간색 물체를 만들고 싶을 때 RGB = (1, 0, 0)
R의 강도에서 Ka = Kd = Ks = 1
G, B의 강도에서 Ka = Kd = Ks = 0
-
노란색 물체를 만들고 싶을 때 RGB = (1, 1, 0)
R, G의 강도에서 Ka = Kd = Ks = 1
R, G의 강도에서 Ia = 0.2, Id = 0.5, Is = 0.3
B의 강도에서는 K, I값을 0으로 설정
-
Ks(광택 있는 물체)의 경우 물체의 색상을 그대로 반사하기 때문에
Ksr, Ksg, Ksb = (1, 1, 1)로 가정하는 것이 일반적
03. 음영
음영 또는 표면 렌더링(Surface Rendering)
3-1. 플랫 셰이딩(Flat Shading)

- 주어진 하나의 다각형 전체를 동일한 색으로 칠함
마하밴드 효과(Mach Band Effect)

-
다각형 사이의 경계션이 필요 이상으로 뚜렷하게 보이는 현상
-
두 개의 면이 만나는 경계선 부근에서,
어두운 면은 더 어두워지고, 밝은 면은 더 밝게 보이는 일종의 착시 현상
3-2. 구로 셰이딩(Gouraud Shading)
- 다각형 내부를 서로 다른 색으로 부드럽게 채우는 방법 (그라데이션)

I4 = I1과 I3의 2:4 내분 = (I1 x 4 + I3 x 2) / (4 + 2)
I5 = I3과 I2의 4:6 내분 = (I3 x 6 + I2 x 4) / (6 + 4)
I6 = I4와 I5의 3:3 내분 = (I4 x 3 + I5 x 3) / (3 + 3)

Phong Shading
- 개수가 많은 모든 픽셀에 대해 조명 연산 수행
