728x90
반응형
- 조명 모델은 일반적으로 지역 조명(local illumination)과 전역 조명(global illumination) 두 가지로 구분된다.
- 퐁 모델은 지역 조명 모델인데, 이는 조명 대상인 물체의 표면 재질과 광원의 속성만 이용해 해당 표면의 색상을 결정할 뿐, 같은 공간에 있는 다른 물체는 고려하지 않는다.
- 퐁 모델로 $S_2$를 라이팅할 때, $S_1$은 전혀 고려되지 않는다. 따라서, 그림에서 확인할 수 있듯이, 마치 $S_1$이 존재하지 않는 것처럼 $S_2$는 빛을 받는다. 퐁 모델은 물리학적으로 올바르지 않은 모델이다.
16.1 전역 조명 모델
- 컴퓨터 그래픽스 역사 초기에 제안된 전역 조명 기법은 광선 추적법(ray tracing)과 래디오 시티(radiosity)인데, 이들은 현재에도 여전히 널리 사용되고 있다.
16.1.1 광선 추적법(ray tracing)
- 뷰 프러스텀은 카메라에 수렴하는 투영선(projection line)의 집합임을 상기하자. 투영선의 개수는 스크린 영상의 해상도와 같고, 투영선 하나가 픽셀 하나의 색상을 결정한다.
- 광선 추적법 알고리즘에서는 각 투영선 반대 방향으로 광선(ray)을 발사한뒤 이를 추적하여 해당 투영선을 따라 들어오게 될 색상을 계산한다. 이것이 바로 픽셀의 색상이 된다.
- 이렇게 투영선 역방향으로 발사되는 광선을 1차 광선(primary ray)이라 부른다.
- 1차 광선이 어떤 물체와 부딪히면 우선 그 교차점이 그림자 안에 있는가를 검사한다. 이를 위해 그림자 광선(shadow ray)이라는 이름의 2차 광선(secondary ray)을 각 광원을 향해 발사한다.
- (b)의 경우 1차 광선은 커다란 구와 $p_1$에서 교차했는데, 여기에서 그림자 광선 $s_1$이 광원을 향해 발사되었다.
- 만약 $s_1$이 광원으로 가는 도중 다른 물체와 부딪히면 $p_1$은 광원의 직접적인 영향권에 있지 않으며 그림자 영역에 놓인 것으로 판정한다.
- 반면, $s_1$이 광원에 도달하게 되면, 이 광원으로부터 $p_1$에 입사하는 빛을 이용해 $p_1$의 직접 조명 색상을 결정한다. 이를 위해서 퐁 모델을 쓸 수 있다.
- 한편, 그림자 광선 말고도 두 가지 2차 광선이 $p_1$으로부터 추가로 발사된다. 하나는 반사 광선(reflection ray)인데, 이는 1차 광선이 $p_1$의 노멀 $n_1$을 중심으로 반사된 것이다.
- 1ck rhkdtjsdms $I_1$으로, 반사 광선은 $r_1$으로 표기하자. $I_1$의 입사각과 $r_1$의 반사각이 같다는 성질을 이용하여, $r_1$의 방향은 다음과 같이 구해진다.
$I_1$ - 2$n_1$($n_1$ · $I_1$)
- 또 하나의 2차 광선은 굴절 광선(refraction ray 혹은 transmitted ray)인데, 이는 1차 광선이 반투명한 물체와 부딪힐 때 발생한다.
- 굴절 광선을 $t_1$으로 표기했는데, $t_1$의 방향은 굴절의 법칙에 따라 정해진다. (반투명할 때)
- 광선 추적법은 재귀적인(recursive) 알고리즘이다. 즉, (b)에서 $r_1$과 $t_1$은 마치 이들이 1차 광선인 것처럼 다시 추적된다.
- 광선 추적법 알고리즘의 재귀적인 구조는 (c)의 광선 트리(ray tree)로 설명할 수 있다. 이 광선 트리는 반사/굴절 광선이 어떤 물체에도 부딪히지 않고 장면을 벗어날 때까지 또는 미리 정의된 재귀 단계에 도달할 때까지 확장된다.
- $p_3$를 생각해보면, $r_3$를 추적해서 얻은 색상은 $p_3$의 스페큘러 계수와 곱해지고, $t_3$를 추적해서 얻은 색상은 $p_3$의 투과율(transmission coefficient)과 곱해진다. 이 둘은 $s_3$를 통해서 계산된 직접 조명 색상에 더해지고, 그 결과는 부모 노드인 $p_1$으로 전달된다.
- 광선 트리의 모든 노드에서 이와 같은 작업이 재귀적으로 진행되면 최종적으로 루트 노드에서의 색상을 얻을 수 있다.
출처
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]을 보고 공부하고 정리한 내용입니다.
728x90
'공부 > Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문' 카테고리의 다른 글
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 16 - 전역 조명과 텍스처링 [2/2] (0) | 2022.06.25 |
---|---|
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 15 - 쉐도우 매핑 (0) | 2022.06.18 |
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 14 - 노멀 매핑 [2/2] (0) | 2022.06.11 |
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 14 - 노멀 매핑 [1/2] (0) | 2022.06.11 |
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 13 - 캐릭터 애니메이션 [4/4] (0) | 2022.06.06 |