다음과 같은 음영은 어떻게 줄 수 있을까
Lighting
Illumination
- 광원으로부터 표면까지 전달되는 에너지 (Direct / Indirect)
- 일루미네이션의 두 가지 요소는 light sources 와 surface properties 임
- 광원: 발광하는 빛의 색을 알아야 하고 기하학적 속성으로는 빛의 Position, Direction, Shape을 알아야 함.
또한 Directional attenuation과 Polarization 의 요소도 존재
(attenuation은 빛이 광원에서 나온 이후 거리에 반비례해서 밝기가 줄어드는 것)
- 표면: 표면의 색을 알아야 하고, 마찬가지로 기하학적 속성으로 표면의 Position, Orientation, Micro-structure(분자구조-빛의 산란 방향 등 결정)를 알아야 함.
또한 Subsurface reflectance 요소도 있는데 표면에서 바로 반사되는지, 어느 정도 들어갔다가 반사되는지, 빛이 얼만큼 깊게 들어가는지, 들어간 빛이 어느 방향으로 튀어나오는지 등을 알 수 있음.
- 결과적으로 라이팅은 색깔을 정하는 행위임
- 빛도 중요하고, 물체와 물체 간의 상호작용 관계도 중요함
- 광원의 정보와 표면의 정보를 바탕으로 조명효과를 계산
Lighting Model
무엇을 계산해야 할까?
- 광원과 표면 간의 인터랙션 (반사, 굴절)
- 불투명한 오브젝트는 반사만 고려하면 됨
- 광원과 표면 외의 카메라의 Position과 Direction도 고려해야 함
정반사만 일어나는 거울 외의 대부분의 물체는 난반사가 일어남
거의 무한한 방향으로 반사가 일어날텐데 이 모든 걸 계산해야할까?
무한한 것을 유한한 것으로 바꾸어서 단순화 시켜야 함
1. 광원을 단순화
- 계산되는 Ray의 개수를 줄임
- 반사 모델을 단순화
- 내 눈으로 들어오는 것만 계산하자! (Direct illumination)
- Indirect Illumination은 반사되서 어두운 부분도 밝혀주는데 반사되는 것들을 무한히 많이 계산해주어야 함
Reflection Model
- 반사를 하려면 표면의 분자구조에 따라 계산해야하는데 너무 복잡하므로 단순화하는 것이 목표
- 반사된 빛을 계산
- 표면의 점에 대한 정보를 바탕으로 빛이 반사되는 방향과 색들을 계산
** Light Reflection
- 광원으로부터 빛이 들어오는 방향과 표면에서 반사되는 방향에 의해 빛의 세기가 바뀜
** DIffuse Reflection (난반사)
- 실제 거친 면에서는 반사가 불규칙적으로 일어날 것이지만 전부 계산하는 것은 불가함
- 들어오는 빛의 방향에 의해서 밝기가 결정되는데, 수직에 가까울 수록 많이 반사됨
Lambert's Cosine Law
표면의 수직 벡터와 들어오는 빛의 방향 벡터와의 코사인에 비례해서 빛의 세기가 결정된다.
- 빛이 노말벡터와 같은 방향이면 코사인이 0도니까 1로 가장 많이 반사된다.
- 90도 보다 크면 뒷 면이 되고, 코사인도 음수가 되서 0부터 90도 까지만 계산함
Light Reflection
- Highlight가 없으면 밋밋한 표면이 됨 (특히 metal 표면인 경우)
- Highlight 효과를 표현해주는 것을 specular reflection이라고 함
Specular Highlight는 어떻게 계산할까?
Snell's Law
- 빛이 들어오는 방향의 벡터와 나가는 방향의 벡터가 면의 수직 벡터와 이루는 각이 항상 같다
(입사각 = 반사각)
- 들어오는 벡터, 나가는 벡터, 수직 벡터가 항상 하나의 평면 상에 존재한다
- 계산하기 위해 알아야 하는 것
- 입사각
- Light source position or light direction 을 알아야 함
- point location 을 알아야 함
- 수직벡터
- 카메라 위치의 점의 위치
- 표면상의 점과 카메라까지의 방향 벡터가 r벡터와 같으면 가장 밝게 보일 것
Diffuse reflection vs Specular reflection
Diffue
- l, n 벡터 알아야 함
- 모든 방향으로 나가는 빛이 동일해서 카메라가 보는 벡터는 몰라도 됨
Specular
- l, n 벡터 알아야 함
- 한 쪽 방향으로만 세게 나가기 때문에 카메라가 보는 벡터 알아야 함
(참고로 입사각인 l과 표면의 수직벡터인 n만 알면 r을 구할 수 있다)
Snell's Law는 거울과 같이 완벽한 스페큘러 표면을 가진 경우에만 잘 동작하고, 일반 표면에서는 별로..
General surface reflection
- 빨간색으로 표시한 점에서 멀어질 수록 어두워짐
- 표면이 거칠수록 Highlight의 영역이 커지는데, 매끈하지 않으면 다른 방향으로 튀는 게 많아지기 때문
- 보통 빛은 l방향으로 들어와서 r방향으로 나간다고 했었는데, 이러한 경우 몇 개는 다른 방향으로 나가기도 함
- Ks: 표면의 색깔
- Ilight: 들어오는 빛의 세기
- Cosine: view vector 와 reflection vector의 각도에 대한 코사인 값 (크기가 1인 두 벡터를 내적해서 얻을 수 있음)
- nshiny: 이 값이 클수록 각도가 적은 부분에만 밝게 나타남
Direct illumination 의 한계?
- 빛이 직접적으로 닿지 않는 곳은 실제보다 더 어둡게 보임 (반사가 없어서)
Ambient light
- 광원 외에 주변 물체가 방출하는 빛이 관찰자가 보는 물체에 반사되어 관찰자에게 도달함
- Global(indirect) illumination을 근사한 것
- 실제로는 무한에 가까운 Ray인데 모든 방향에서 똑같이 나온다고 단순화
- 환경광을 상세히 계산하는 대신, 모든 표면을 동일하게 상수값으로 밝혀주어서 어두운 부분을 없애줌. 그래서 음영이 전혀 없음
Specular reflection (정반사)
- 특정 방향으로만 반사되는 빛이며, 광원의 색이 그대로 관찰자에게 보여지는 하이라이트와 같은 부분을 표현하기 위한 것
- 정반사 범위를 계산하기 위한 모델로 Phong 정반사 모델이 있다 (쉐이딩 모델이 아님!)
Phong Light Model
- ambient, diffuse, specular를 다 합한 것
- 광원의 색깔에서 ambient, diffuse, specular의 색을 각각 따로 가질 수도, 동일하게 가질 수도 있음
Lighting Model 정리
- Ambient: normal vector 포함 어떤 파라미터도 중요하지 않고, 광원의 색깔과 표면의 색깔만 중요
- Lambert/Diffuse: surface normal vector와 light 사이의 각도 이용
- Specular: surface normal, light, and viewport 모두 이용
Light sources
Ambient Light source
- Light position, Viewer position, Surface angle 모두 중요하지 않음
Directional Light source
- sun light를 묘사한 것
- 빛의 방향이 일정함
- Surface Angle 중요, Viewer position 아마도 중요, Light position 안중요
즉 각 점의 수직벡터 중요하고, 스페큘러 계산해야 해서 카메라 위치 중요하고, 똑같은 방향에서 오기 때문에 광원의 위치는 중요하지 않음
Point Light
- Lighting ray direction이 계산됨
- Light Position, Viewer Position, Surface Angle 모두 중요
- 가까이 있으면 더 많은 부분을 비추고, 멀리 갈 수록 적은 부분을 비춤
Other lights
- Spotlight: 무대조명처럼 일부만 비춤. 비추는 중심의 방향, 중심의 방향으로부터 몇 도를 비추는지에 대한 각도 정도 필요
- Area Light: soft shadow 가 생김 (point light의 그림자는 hard shadow)