텍스처링 (Texture Mapping)
텍스처 맵핑의 개념 (Concept of Texture Mapping)
소개 (Introduction)
텍스처 맵핑은 3D 모델의 표면에 2D 이미지를 적용하여 사실적인 효과를 만드는 기술입니다. 이 기법을 통해 모델에 디테일한 표면 질감과 패턴을 입힐 수 있습니다.
개념 (Concept)
- 텍스처 (Texture): 2D 이미지로, 주로 비트맵 형식으로 저장됩니다.
- 텍스처 맵핑 (Texture Mapping): 3D 모델의 표면에 텍스처를 매핑하는 과정입니다.
원리 (Principle)
- 텍스처 이미지를 모델의 표면에 매핑하기 위해 텍스처 좌표를 사용합니다. 이러한 좌표는 모델의 정점과 연결되어, 렌더링 시 각 픽셀에 텍스처 색상을 적용합니다.
예제 (Example)
// GLSL 예제: 텍스처 맵핑 #version 330 core layout(location = 0) in vec3 aPos; layout(location = 1) in vec2 aTexCoord; out vec2 TexCoord; uniform mat4 model; uniform mat4 view; uniform mat4 projection; void main() { gl_Position = projection * view * model * vec4(aPos, 1.0); TexCoord = aTexCoord; } #version 330 core out vec4 FragColor; in vec2 TexCoord; uniform sampler2D texture1; void main() { FragColor = texture(texture1, TexCoord); }
텍스처 좌표 및 매핑 기법 (Texture Coordinates and Mapping Techniques)
개념 (Concept)
- 텍스처 좌표 (Texture Coordinates): 2D 텍스처 이미지에서의 위치를 나타내는 좌표로, (u, v) 형태를 가집니다. 일반적으로 0에서 1 사이의 값으로 정규화됩니다.
- 매핑 기법 (Mapping Techniques): 다양한 방법으로 텍스처를 3D 모델에 적용합니다.
기법 (Techniques)
- UV 매핑 (UV Mapping): 모델의 표면을 평면으로 펼쳐서 텍스처 좌표를 지정하는 방법입니다.
- 프로젝션 매핑 (Projection Mapping): 특정 투영 방법을 사용하여 텍스처를 모델에 적용하는 방법입니다.
- 큐브 매핑 (Cube Mapping): 6개의 텍스처를 사용하여 모델의 모든 면에 텍스처를 적용하는 방법입니다.
예제 (Example)
// GLSL 예제: 텍스처 좌표 적용 layout(location = 1) in vec2 aTexCoord; out vec2 TexCoord; void main() { TexCoord = aTexCoord; }
텍스처 필터링 및 안티앨리어싱 (Texture Filtering and Anti-Aliasing)
개념 (Concept)
- 텍스처 필터링 (Texture Filtering): 텍스처를 확대하거나 축소할 때 발생하는 품질 저하를 개선하는 기술입니다.
- 안티앨리어싱 (Anti-Aliasing): 경계의 톱니 현상을 줄이는 기술입니다.
필터링 기법 (Filtering Techniques)
- 최근접 이웃 (Nearest Neighbor): 가장 가까운 텍스처 샘플을 사용하여 픽셀 색상을 결정합니다.
- 선형 필터링 (Linear Filtering): 주변 텍스처 샘플을 선형 보간하여 픽셀 색상을 결정합니다.
- 이방성 필터링 (Anisotropic Filtering): 텍스처의 방향성을 고려하여 더 높은 품질의 텍스처 필터링을 제공합니다.
예제 (Example)
// GLSL 예제: 텍스처 필터링 uniform sampler2D texture1; void main() { vec4 color = texture(texture1, TexCoord); // 선형 필터링 적용 FragColor = color; }
고급 텍스처링 기법 (Advanced Texturing Techniques)
소개 (Introduction)
고급 텍스처링 기법은 표면의 디테일을 더욱 현실감 있게 표현하는 데 사용됩니다. 이러한 기법은 주로 노멀 맵핑과 디스플레이스먼트 맵핑을 포함합니다.
개념 (Concept)
- 노멀 맵핑 (Normal Mapping): 추가적인 디테일을 표현하기 위해 표면의 노멀 벡터를 조작하는 기법입니다.
- 디스플레이스먼트 맵핑 (Displacement Mapping): 실제로 표면의 기하학적 변형을 적용하여 디테일을 표현하는 기법입니다.
원리 (Principle)
- 노멀 맵핑: 각 픽셀의 노멀 벡터를 변경하여 빛의 반사와 조명을 조작합니다.
- 디스플레이스먼트 맵핑: 텍스처를 사용하여 표면의 높이 정보를 변경하고, 이를 기반으로 실제 기하학적 변형을 적용합니다.
예제 (Example)
// GLSL 예제: 노멀 맵핑 uniform sampler2D normalMap; void main() { vec3 normal = texture(normalMap, TexCoord).rgb; normal = normalize(normal * 2.0 - 1.0); // 텍스처 값을 [-1, 1] 범위로 변환 // 조명 계산에 노멀 벡터 사용 } // GLSL 예제: 디스플레이스먼트 맵핑 uniform sampler2D displacementMap; uniform float displacementScale; void main() { float displacement = texture(displacementMap, TexCoord).r * displacementScale; vec3 displacedPosition = aPos + normal * displacement; // 정점 위치 변형 gl_Position = projection * view * model * vec4(displacedPosition, 1.0); }
사용법 (Usage)
- 노멀 맵핑: 주로 게임과 실시간 렌더링에서 사용되며, 저해상도 모델에 고해상도 디테일을 추가하는 데 유용합니다.
- 디스플레이스먼트 맵핑: 고해상도 모델링과 영화 제작에 사용되며, 실제 기하학적 변형이 필요한 경우에 유용합니다.
이와 같이 텍스처링 기법은 3D 모델의 표면을 더욱 현실감 있게 표현하는 데 중요한 역할을 합니다. 기본적인 텍스처 맵핑에서 고급 기법까지 다양한 텍스처링 기술을 통해 복잡하고 디테일한 그래픽스를 구현할 수 있습니다.