안녕하세요.
오늘은 Lighting에 대해서 정리해보겠습니다.
말 그대로 그래픽에서의 빛에 대한 개념이라고 생각하시면 됩니다.
순서는 다음과 같습니다.
8.1. Light Sources
8.2. Surface Type
8.1 Light Sources
우리말로 번역하자면 광원이라는 뜻입니다. 빛이 시작되는 곳이라고 생각하시면 됩니다.
이 Light Source에도 여러 가지 종류가 존재합니다. 빛은 그 종류가 다양하기 때문이죠
● Point light sources
첫 번째 광원은 '점광원'입니다.
하나의 점에서부터 빛 에너지가 시작됩니다. 아래 사진을 보시죠
하나의 점에서부터 시작된 빛이 객체에 직접 영향을 끼치고 있습니다.
점 광원에서 가장 중요한 것은 위치와 방향, 그리고 뿜어져 나오는 빛의 색입니다.
이 3가지 요소의 영향을 받아 객체로 직접 빛을 쏘는 것이죠.
● Infinitely distant light sources
두 번째 광원은 '무한대 광원'입니다. 점광원이 아주 멀리 있다고 생각하시면 됩니다.
우리에게 있어서 '태양'이라고 생각하시면 됩니다. 아주 멀리서 전체적으로 영향을
끼치는 형태입니다. 보통 정해진 빛의 색과 방향이 있습니다.
● Directional light sources
세 번째 광원은 '방향 광원'입니다. 위치는 없고 방향만 존재합니다.
이처럼 특정한 같은 방향으로 빛이 들어옵니다. 정해진 구체적인 광원의 위치는 없으며,
빛의 방향이 객체에 중요한 영향을 끼칩니다.
● Radial intensity attenuation
위에서 총 3가지 큰 '광원'의 종류를 알아보았습니다.
빛은 가까이 있을 때 밝고, 멀어질수록 어둡다는 특징이 있죠 (당연하죠 ?)
그렇기에 빛은 거리에 따라 약해집니다. 하지만 태양과 같은 무한대 광원은 예외입니다.
무한대 광원은 감쇄가 없으며, 점 광원은 그 거리에 따라 감쇄가 있습니다.
이를 식으로 표현하면 아래와 같이 유도할 수 있습니다.
8.2 Surface Type
이번에는 표면 타입에 대해서 정리해봅시다.
단순히 광원만 존재한다고 하여 모두 같은 빛의 영향을 받는 것이 아닙니다.
표면(Surface)의 종류에 따라 빛을 반사하는 정도가 모두 다르기 때문이죠.
이 Light Source에도 여러 가지 종류가 존재합니다. 빛은 그 종류가 다양하기 때문이죠
● Surface Type
아래 두 가지의 표면을 보시죠.
부드러운 표면 | 거친 표면 |
부드러운 표면의 경우 빛이 반사되는 것이 일정합니다. 그렇기에 완전히 부드러운 표면일
경우에는 입사각과 반사각이 거의 같다고 볼 수 있어요.
반대로 오른쪽 사진과 같이 거친 표면에서는 난반사가 일어납니다.
들어온 빛이 어디로 튀어나갈지 모르기에 다루기가 어렵습니다.
그러기에 우리는 퐁 모델이라는 것을 사용하여 객체를 표현하고자 합니다.
● Phong Model
Phong Model(퐁 모델)입니다. 이는 다음 3가지 요소로 빠르게 계산할 수 있습니다.
- Diffuse
- Specular
- Ambient
● Diffuse Reflection
먼저 Diffuse Reflection부터 봅시다. 난반사라고도 불립니다.
위 사진이 이상적인 난반사 표면으로 람버시안(Lambertian)이라고도 불리웁니다.
같은 방향으로 빛이 들어와도 모든 서로 다른 방향으로 퍼지는 형태입니다.
표면이 빛의 방향을 향할 때 가장 밝고, 정 반대일 때 가장 어둡습니다.
이러한 성질을 통해 Diffuse Reflection의 식은 다음과 같이 나타낼 수 있습니다.
여기서 은 조명의 밝기, 색을 뜻합니다 (r,g,b)
그리고 는 Diffuse 계수 (빛을 얼마나 반사하는지 정도)를 뜻합니다.
N은 노말벡터이고, L은 빛의 방향 (단위벡터) 입니다.
● Ambient Reflection
두 번째는 Ambient Light입니다.
빛이 닿지 않는 면이라도 아예 까맣게 느껴지지는 않습니다.
반사되는 빛에 의해 간접적인 영향을 받기때문이죠. 즉 Ambient Light는 간접광을 뜻해요
이를 구하는 식은 다음과 같습니다.
는 표면으로부터 반사되는 빛의 비율입니다. ambient 반사 계수라고 생각하면 됩니다.
는 반사되는 빛의 밝기 (강함 정도) 입니다.
● Specular Reflection
마지막은 Specular Reflection입니다. 위의 Phong model 객체에서 하얀색 부분이에요
즉, 하이라이트라고 생각하시면 될 것 같습니다.
객체를 보다 사실적으로 표현해주는데 꼭 필요하죠.
이를 구하는 식은 조금 복잡하니 아래 그림과 함께 봅시다.
L은 입사각이며, R은 반사각 입니다. 그리고 V는 시선(카메라)의 방향입니다.
V=R이면 빛이 가장 많이 보입니다. 눈으로 빛이 바로 들어오니 당연하죠?
Ks는 물질의 특성에 따른 Specular reflection 계수입니다. Ks=1 일때, 90도입니다
는 이전과 같이 입사되는 빛의 밝기 정도를 뜻합니다.
이를 크로스 프로덕트 하여 위의 식을 유도해나갈 수 있습니다.
● Ambient + Diffuse + Specular Reflection
이제 3가지를 모두 더해주면 우리가 구하고자 하는 Phong model을 구현할 수 있습니다.
최종적으로 찾아낸 식이 바로 위의 I를 구하는 식 입니다.
세가지 reflection에서 유도된 식을 더해준 것 뿐입니다.
오늘은 Lighting에 대해서 정리하였습니다.
다음 포스팅에서는 이를 바탕으로 실제 객체를 구현해보겠습니다.
감사합니다.
'OpenGL' 카테고리의 다른 글
[OpenGL-10] object viewer 구현하기 (2) (0) | 2017.05.17 |
---|---|
[OpenGL-9] object viewer 구현하기 (1) (13) | 2017.04.06 |
[OpenGL-7] Projection Matix (0) | 2016.12.31 |
[OpenGL-6] Model View Matrix (2) | 2016.11.13 |
[OpenGL-5] Cube Control Program (1) | 2016.11.02 |