Computer Graphics/OpenGL

OpenGL 정리 - 21. 큐브 맵 (Cubemap)

surkim 2024. 10. 28. 10:25

1. 큐브 맵 (Cubemap)

1.1 큐브 맵이란?

큐브 맵(Cubemap)은 6장의 2D 이미지를 하나의 정육면체(큐브) 형태로 붙인 텍스처 맵이다. 각 이미지는 큐브의 한 면을 담당하며, 결과적으로 6개의 면으로 이루어진 입체적인 텍스처가 된다. 이 큐브 맵을 사용하면 3D 장면에서 주변 환경을 감싸는 것처럼 보일 수 있고, 물체가 주변을 반사하는 효과를 자연스럽게 만들 수 있다.

1.2 큐브 맵의 특징과 활용

  • 큐브 맵은 카메라를 중심으로 3차원 방향 벡터를 사용해 텍스처를 샘플링한다. 예를 들어, 카메라가 (1, 0, 0) 방향을 바라본다면 큐브의 오른쪽 면을 텍스처로 보여주는 식이다.
  • 이러한 큐브 맵은 보통 배경을 표현하는 Skybox물체의 반사나 굴절을 표현하는 환경 맵핑에 많이 활용된다.

2. 큐브 맵을 이용한 Skybox

2.1 Skybox란?

Skybox는 장면의 배경을 채워주는 큰 큐브이다. 우리가 게임에서 하늘, 먼 산, 넓은 바다 같은 배경을 볼 때, 실제로는 하늘을 그리고 있는 것이 아니라 이 Skybox 큐브로 배경을 표현하는 경우가 많다. Skybox 덕분에, 카메라가 회전해도 장면의 끝없이 넓은 배경이 자연스럽게 보이게 된다.

2.2 Skybox의 특징

Skybox는 카메라의 주변을 감싸고 있어 카메라가 어느 방향을 보더라도 넓은 배경이 보이도록 하는 것이 특징이다. 또한, Skybox는 주로 큐브 맵을 사용해 쉽게 3D 환경을 구성할 수 있는데, 이렇게 하면 실제 배경 오브젝트를 멀리 배치하는 것보다 적은 정점과 리소스로도 넓은 배경을 표현할 수 있다.


3. 큐브 맵을 이용한 환경 맵핑 (Environment Mapping)

3.1 환경 맵핑이란?

환경 맵핑(Environment Mapping)은 물체 표면에서 주변 환경이 반사되거나 굴절된 것처럼 보이게 만들어 주는 기법이다. 예를 들어, 금속 구체가 있다면 그 표면에 주변 배경이 반사되는 것처럼 표현하거나, 유리 물체가 있다면 그 속이 굴절된 것처럼 보여주면서 사실적인 시각 효과를 만들어 준다.

3.2 반사와 굴절의 구현 원리

  • 반사(Reflection): 반사 효과를 표현할 때는 카메라에서 물체로 향하는 시선과 물체 표면의 노멀 벡터를 이용해 반사 벡터를 계산한다. 이 반사 벡터를 큐브 맵의 방향으로 사용해, 물체 표면에서 어떤 방향으로 큐브 맵을 바라보고 있는지에 따라 큐브 맵의 색상을 물체 표면에 적용한다.
  • 굴절(Refraction): 반사와 비슷하게, 굴절 효과도 시선 방향과 노멀 벡터를 사용해 굴절된 벡터를 계산한다. 굴절된 벡터는 유리와 같은 반투명 물체에서 주로 사용되며, 물체 표면을 통해 보이는 왜곡된 배경을 표현하는 데 사용된다.

이 과정에서 큐브 맵 텍스처가 어떤 방향에서 보이느냐에 따라 반사나 굴절된 색상을 제공해 주는 중요한 역할을 한다.


4. 동적 환경 맵 (Dynamic Environment Map)

4.1 동적 환경 맵이란?

동적 환경 맵(Dynamic Environment Map)은 정적인 이미지가 아닌, 실시간으로 변경되는 큐브 맵을 사용하여 반사나 굴절을 표현하는 방법이다. 장면이 바뀌거나, 특정 오브젝트가 움직일 때마다 그 변화를 반영해 큐브 맵을 새로 생성하여 반사에 반영해 주는 방식이다.

4.2 동적 환경 맵의 특징과 한계

  • 특징: 동적 환경 맵을 사용하면 움직이는 오브젝트나 변화하는 장면을 실시간으로 반영할 수 있어서, 현실감 넘치는 반사 효과를 만들 수 있다.
  • 한계: 이 방법은 매 프레임마다 큐브 맵을 갱신하기 때문에, 성능에 큰 영향을 미친다. 따라서 일반적으로 동적 환경 맵은 중요한 오브젝트특정 상황에 한해 선택적으로 사용하게 된다.