본문 바로가기

공부/Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문

[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 16 - 전역 조명과 텍스처링 [2/2]

728x90
반응형

 

 

 

 

16.3 환경 매핑

 

16.3.1 큐브 매핑

 

주전자의 매끄러운 표면이 주변 환경을 반사한다.

 

  • 다음 그림과 같이 주변 환경을 반사하는 매끄러운 물체를 렌더링하는 기법이 환경 매핑(environment mapping)이다.
  • 이를 위해 첫 번째로 해야 할 일은 환경맵(environment map)이라고 불리는 텍스처에 주변 환경의 영상을 담는 것이다.

 

 

 

 

큐브맵 제작. 주변 환경을 여섯 번 촬영하거나 렌더링한다.

 

  • 가장 많이 쓰이는 환경맵은 큐브맵(cube map)이다.
  • 이 정육면체의 여섯 개 면 각각을 향해서 수직과 수평 방향으로 모두 90˚의 시야각(field of view)을 설정해 사진을 찍거나 렌더링을 수행하면 여섯 개의 정사각형 이미지를 얻을 수 있다.

 

 

정사각형 단면으로 그려진 큐브맵이 물체를 감싸고 있다. 카메라로부터 발사된 광선이 추적되어 p점에서의 반사 색상을 결정한다.

 

  • 물체 표면의 점 p가 주변 환경을 반사하도록 만들기 위해서, 카메라로부터 p를 향해 광선 $I$를 발사하고 이를 추적한다. $I$는 p의 표면 노멀 n을 기준으로 반사되어 $R$이라는 벡터를 결정한다.

 

 

  • 이는 전역 조명을 위한 광선 추적법에서 소개된 식과 동일하다. $R$은 큐브맵의 한 면과 교차하는데, 이 교차점을 이용해 해당 면의 이미지 텍스처를 필터링한다.
  • 예를 들면, 교차점 주변의 네 개 텍셀을 겹선형보간하는 것이다. 이 결과가 바로 p에서 반사되는 색상을 결정한다.
  • 이러한 큐브 매핑은 간략화된 광선 추적법이라 부를 수 있는데, 2차 광선 중 반사 광선만 추적이 되고 재귀적인 과정도 거치지 않기 때문

 

16.3.2 큐브 매핑을 위한 GL 프로그램과 쉐이더

 

큐브맵의 6개 면.
큐브맵 생성을 위한 GL 프로그램

 

  • 큐브맵도 텍스처의 한 종류이기 때문에, 모든 텍스처 오브젝트 생성에 필요한 glGenTexturesglBindTexture가 호출된다.
  • 큐브맵의 면에 GL은 GL_TEXTURE_CUBE_MAP_* 형식의 기호 상수를 할당한다. 여기서 *POSITIVE_X, NEGATIVE_X, POSITIVE_Y, NEGATIVE_Y, POSITIVE_Z, NEGATIVE_Z 중 하나이다.

 

 

 

  • 환경 매핑 구현 방법은 매우 간단하지만 그 결과는 훌륭하다. 지역 조명 모델로 렌더링된 영상에 더해져서 전역 조명 모델의 분위기를 만들어준다.
  • 하지만, 지역 조명 모델의 근본적 한계를 극복하지 못한다. 예를 들어, 물체는 자기 자신을 반사하지 못한다. 주전자 그림에서 보듯이 주전자 손잡이가 주전자 몸체에 반사되지 않는 모습을 볼 수 있다.

 

 

 

 

 

 

 

출처

[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]을 보고 공부하고 정리한 내용입니다.

 

 

 

728x90