illumination model 은 물체의 색상을 계산하는 방법으로 light model, shading model 등으로도 불린다.
대부분의 모델은 단순화하고 추상화하여, 간단한 수식 한 줄로 이루어져 있는 경우가 많다.
이렇게 해도 사람 눈에는 비슷하게 보이기 때문이다.
우선 텍스쳐 값은 고려하지 않고, 빛과 물체 자체의 색상만 고려하여 계산하는 과정을 따라가보자.
이번 글에서는 Blinn-phong illumination model 에 대해서 정리한다.
이 모델은 빛의 반사를 고려한다.
반사에는 평면이 매끈하여 입사각과 반사각을 기반으로만 반사하는 정반사와, 평면이 울퉁불퉁하여 여기저기로 빛이 반사되는 난반사가 있다.
phong reflection model 에서는 크게 3가지 빛 반사를 고려한다.
1. ambient lighting
2. diffuse lighting
3. specular lighting
ambient lighting 은 산란된 빛이 사방에서 들어와서 어둡게라도 은은하게 물체가 보이는 효과를 말한다.
이 효과를 계산할 때는 빛이 어디에서 오는지는 신경쓰지 않는다. 그냥 모든 방향에서 온다고 본다.
diffuse lighting 은 출발점이 명확한 하나의 빛이 난반사되는 효과를 말한다.
이 효과는 광원의 위치에 따라서는 바뀔 수 있지만, 관찰자의 위치는 상관없이 동일한 색으로 물체가 보인다.
specular lighting 은 출발점이 명확한 하나의 빛이 정반사되는 효과를 말한다.
이는 사실 빛을 직접 보는 것과 같다. (물체의 색이 아니라 빛의 색을 보는 것이다)
이 3가지를 조합하면 이렇게 보인다.
Ambient Lighting
공기중에 산란된 빛에 의해서 물체가 밝아지는 것을 묘사한다.
물체의 색이 균일하게 밝아지는 효과가 있기 때문에 3차원이 아니라 2차원처럼 보인다.
이 색상값은 이렇게 계산한다.
Ia 는 빛의 ambient light 성분 밝기로 보통 0~1 사이의 실수값으로 표현한다.
ka 는 물체의 특성에 따른 ambient-light 에 대한 반사 계수를 말한다.
(반사를 많이 할 수록 ambient light 가 더 밝게 보일 것이고, 빛의 세기가 셀 수록 ambient light 가 더 밝게 보일 것이다)
Diffuse Light
광원이 명확한 빛의 난반사 특성을 나타내는 값이다.
어떻게보면 밝기를 계산할 때 제일 중요한 부분이다.
이 값을 계산할 때 빛은 점광원이라고 가정한다. (계산 편의를 위해서)
그리고 이 빛이 물체에 닿으면 모든 방향으로 같은 밝기를 갖고 퍼져나간다.
따라서 관찰자는 어디에서 보든 이 성분의 빛을 같은 밝기로 본다. (관찰자의 시점과 밝기는 무관하다)
이 성분의 밝기는 광원 벡터와 물체 표면의 법선벡터 사이 각도에 영향을 받는다.
이 성분을 계산하는 원리는 다음과 같다.
빛이 들어올 때 광선벡터 L 과 물체 표면의 법선벡터 N 사이의 각도에 따라 밝기가 결정된다.
따라서 위와 같이 식을 밝기를 계산할 수 있다.
ambient 성분과 마찬가지로 광원의 밝기(이때는 점광원이 특정되어있으므로 Ip, 다른 밝기값이다)와 diffuse 성분 밝기의 반사계수를 곱하고, 물체 표면의 법선벡터와 빛 사이의 cos 값을 곱한다. (수직이면 0이고, 방향이 일치하면 1이므로, 수직으로 들어올 때 밝기가 최대이다)
위 그림 수식에서 N벡터와 L 벡터의 내적으로도 표시하기도 하고 cos 세타만 쓰기도 하는 이유는 N, L 벡터가 정규화되어있어 크기가 1이기 때문이다.
그런데 점광원을 다룰 때, 빛의 위치를 구체적으로 특정한 뒤 메번 L 벡터를 계산할 수도 있지만
태양처럼 빛이 너무 멀리 떨어져있어서 사실상 항상 같은 방향으로 들어오는 것처럼 생각할 수 있는 경우도 있다.
이런 빛을 directional light 라고 하며, 이때는 L 벡터가 상수값이 되어 계산이 더 간편해진다.
또한 점광원 빛을 고려할 때, 빛으로부터 거리가 멀어지면 점점 어두워진다. (감쇄효과)
이때 단위 면적에 도달하는 빛의 에너지는 광원으로부터의 거리의 제곱에 반비례한다.
따라서 거리를 고려하기 위해서 원래 빛의 밝기 값에 1/d^2 을 곱해서 밝기를 처리한다.
그런데 현실에서는 공기중의 먼지나 여러 요소에 의해서 밝기가 추가적으로 감소할 수도 있다.
그래서 이를 고려하여 이렇게 수식을 작성하기도 한다.
그리고 이 계산 결과값은 1보다 커지면 안되기 때문에 최대 밝기 값은 1로 제한한다.
(1보다 커지면 원래 광원보다 밝아지는, 말이 안되는 현상이 발생하기 때문)
최종적으로 물체의 색을 결정하기 위해서, 물체가 가진 diffuse color 성분과, 빛의 rgb color 성분 각각에 대해 diffuse 밝기 값을 계산한다. (r, g, b 따로 밝기를 계산하는 것이다)
그래서 어떤 물체의 diffuse light 의 R 성분 밝기는 'R 성분에 대한 ambient 성분 밝기 x 물체의 빨간색 성분' + 'R 성분에 대한 diffuse 성분 밝기 x 물체의 빨간색 성분' 으로 구할 수 있으며 위 수식에서는 앞서 말한 거리 기반의 빛의 감쇄효과까지도 고려하였다.
이 과정을 G, B 성분에 대해서도 반복해주면 물체의 최종색을 결정할 수 있다.
(참고로 빛의 색도 0~1 사이 값이다)
Specular Light
specular light는 물체가 반짝반짝 하는, 빛의 하이라이트 부분을 표현하는 성분이다.
이 성분은 정반사되어 빛이 뻗어나가는 방향이 정해져있기 때문에 관찰자의 위치에 따라 보이기도, 안보이기도 한다
그래서 관찰자를 고려하면 반사되는 빛의 벡터를 R 벡터, 관찰자가 물체를 보는 벡터를 V 벡터라고 할 때
R벡터와 V 벡터 사이의 각도를 알파로 정의하고, 이 알파 각도가 0일 때 반사된 빛의 밝기가 최대로 보인다 가정한다.
두 번째로, 이 알파 각도가 커지면 반사된 빛의 밝기는 급격하게 감소한다고 가정한다.
그 감소하는 정도는 cos a 를 n 제곱하여 표현한다.
이때 n의 값은 물체의 속성으로, 만약 물체가 완벽히 모든걸 반사하는 물체라면 n은 무한대가 된다.
(n을 가리켜 specular-reflection exponent 라고 부른다)
그래서 항상 하던 것처럼 반사계수와 빛의 세기를 고려한 뒤, 이 빛의 밝기의 감소 정도를 위와 같이 곱해주면 specular light 성분의 밝기를 계산할 수 있다.
R, V 벡터 역시 정규화되어있기 때문에 (cos a) ^ n 만 적어줘도 된다.
그리고 위 식에서는 생략했지만, 여기에서도 빛의 거리에 따른 빛의 밝기 감소 효과를 함께 고려해야 한다.
참고로 이 밝기 값에는 물체의 색상값을 곱하지 않는다.
왜냐하면 이 성분은 물체가 아니라 빛을 바로 보는 것이기 때문이다.
최종적으로 어떤 물체의 R 성분 밝기 값은 이렇게 구할 수 있다.
반사 계수(k)는 ambient, diffuse, specular 가 모두 다르다.
'CS > 컴퓨터그래픽스와 메타버스' 카테고리의 다른 글
[그래픽스] 8. Transformation (0) | 2025.06.11 |
---|---|
[그래픽스] 6. Scan Conversion (1) | 2025.06.11 |
[그래픽스] 5. Rendering (3) - Lightening & Ray Tracing (2) | 2025.06.09 |
[그래픽스] 4. Rendering (2) - Texture Mapping, Shadow Generation (1) | 2025.06.08 |
[그래픽스] 3. Rendering (1) - Shading (0) | 2025.06.08 |