728x90
반응형
- 라이팅(lighting 혹은 illumination)은 빛과 물체 간 상호작용을 처리하는 기술이다.
- 이 장에서는 퐁(Phong)이 제안한 라이팅 기법(퐁 모델)을 소개하고, 어떻게 쉐이더로 구현되는지 설명한다.
9.1 퐁 모델
- 라이팅을 위해서는 우선 광원(light source)을 정의해야 한다.
- 간단한 광원 중 하나는 점 광원(point light source)으로, 이는 3차원 공간의 한 점(point)으로부터 전방위로 빛이 발산되는 것
- 근처에서 가장 쉽게 볼 수 있는 광원중에 하나인 태양은 매우 강력한 광원이 아주 멀리 존재하는 경우이다.
- 물체 표면의 여러 점에 입사하는 햇빛의 방향은 서로 평행하다고 가정해도 무리가 없다. 이런 광원을 방향성 광원(directional light source)라고 한다.
- 방향성 광원을 다룰 때에는, 광원의 색상과 단일한 입사 방향만 고려하면 된다.
- 이 책에서는 방향성 광원 하나만 다루고 있다.
- 퐁 모델은 물체 표면에서 감지되는 색상을 디퓨즈(diffuse), 스페큘러(specular), 앰비언트(ambient), 발산광(emissive light) 네 가지 항목으로 분리해서 처리한다.
9.1.1 디퓨즈 항 - 난반사
- 디퓨즈 표면이라 불리는 이상적인 표면으로 들어온 빛은 그림과 같이 모든 방향을 따라 같은 강도로 반사된다. 이를 난반사라고 한다.
- 카메라에 의해 감지되는 빛은 카메라의 시선에 무관하며 오로지 물체 표면에 들어오는 빛의 양에 비례하게 된다.
- 물체 표면으로 들어오는 빛의 방향은 이른바 빛 벡터(light vector)에 의해 정의된다.
- 물체 표면의 점 p의 노멀(noraml) n과 빛 벡터 l사이의 각도 ∂를 입사각(incident angle)이라고 하는데, ∂가 작을수록 p는 더 많은 빛을 받는다.
- n과 l의 내적을 사용하여 p에 들어오는 빛의 양을 결정할 수 있다.
- cos∂는 점 p가 받는 빛의 양을 결정하게 된다.
- 위 식은 n · l이 음수가 되는 경우 0을 선택하여 p에 들어오는 빛의 양을 0으로 만든다.
- 위 식은 점 p에 들어오는 빛의 '강도'만을 결정한다.
- 여기서 s_d는 광원의 RGB 색상을, m_d는 물체의 디퓨즈 계수(diffuse reflectance)를 나타낸다.
- (표기법에서 s는 광원(light source)을, m은 재질(material)을 의미한다.)
- 다음 그림의 주전자는 디퓨즈 항에 의해서만 렌더링되었다.
9.1.2 스페큘러 항 - 정반사
- 퐁 모델의 스페큘러 항은 물체 표면에 하이라이트(hightlight)를 만드는 데 사용된다.
- 이를 위해 시선 벡터(view vector)와 반사 벡터(reflection vector)가 필요하다.
- 시선 벡터는 물체 표면의 점 p와 카메라를 연결하는 것으로 v로 표기된다. 빛 벡터 l과 마찬가지로 v 역시 실제 카메라 시선과 반대 방향으로 정의된다.
- p에 들어온 빛이 입사각 ∂와 동일한 각도를 이루며 반사되는 것을 정반사라고 하는데, 이 방향을 따른 벡터가 반사 벡터이며 r로 표기한다.
- n과 l이 이루는 입사각 ∂는 n과 r이 이루는 반사각과 같다.두 직각삼각형은벡터 ncos∂로표현된 변을공유한다.왼쪽삼각형의 l과 ncos∂를 연결하는 벡터를 s로 표기하자
- l이 단위 벡터이므로 r 역시 단위 벡터가 된다.
- 디퓨즈(난반사)는 카메라가 어느 위치에 있든 상관이 없지만, 스페큘러(정반사)는 카메라가 어느 위치에 있는지 중요하다.
- 하이라이트를 볼 수 있는 영역은 그림과 같이 r을 중심으로 한 원뿔 모양으로 묘사할 수 있다.
- 여기에서 sh는 shininess의 앞 글자로 표면의 매끈함의 정도를 나타낸다.
- r과 v가 같으면 sh값에 관계없이 1이 되고 최대의 하이라이트가 카메라에 보인다. 하지만 r과 v가 다르면 sh가 커질수록 하이라이트는 급격히 감소하게 된다.
- 여기서 s_s는 광원의 색상이고, m_s는 물체의 스페큘러 계수(specular reflectance)이다. 디퓨즈와 마찬가지로 max함수가 필요하다.
- m_s는 m_d와 달리 (0.9, 0.9, 0.9), (0.8, 0.8, 0.8) 등과 같은 회색조(gray-scale)로 표현되는데, 이는 물체 표면의 하이라이트가 광원의 색을 반영하도록 하기 위함이다.
→ 예를 들어 빨간색의 금속성 물체에 흰색 광원이 비치는 경우를 상상해 보자. 물체 표면이 빨간색이더라도 하이라이트 영역은 흰색으로 빛날 것이다. - 따라서 m_s는 회색조로 설정되어, s_s가 반사되는 정도를 조절하게 된다.
- 다음 그림의 주전자는 스페큘러 항에 의해서만 렌더링되었다.
출처
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]을 보고 공부하고 정리한 내용입니다.
728x90
'공부 > Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문' 카테고리의 다른 글
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 10 - 출력 병합기 (0) | 2022.03.05 |
---|---|
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 9 - 라이팅 (앰비언트, 발산광) [2/2] (0) | 2022.03.01 |
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 8 - 이미지 텍스처링 [2/2] (0) | 2022.02.18 |
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 8 - 이미지 텍스처링 [1/2] (0) | 2022.02.17 |
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 7 - 래스터라이저 (0) | 2022.02.15 |