newhaneul

[Multimedia] Lecture 2. Modeling 본문

4. University Study/Multimedia

[Multimedia] Lecture 2. Modeling

뉴하늘 2026. 3. 14. 21:09
728x90

본 포스팅은 인하대학교 안남혁 교수님의 [202601-EEC4410-001] Multimedia을 수강하고 공부한 내용을 정리하기 위한 포스팅입니다.

 

Modeling: 

1. Polygon Mesh

  • 실시간 컴퓨터 그래픽스 환경에서는 GPU 처리에 최적화된 명시적(Explicit) Polygon Mesh 표현 방식을 선호한다.
  • Mesh의 정점(Vertex)들은 매끄러운 실제 표면을 샘플링한 것으로, 완벽히 정확한 형태가 아닌 근사치(Approximation)에 해당한다.

  • 정점의 수(해상도)가 높아질수록 디테일은 정교해지지만, 이를 처리하는데 필요한 시간 역시 증가하므로 정확도와 효율성 사이의 Trade-off 관계에 놓여있다.

 

2. 배열을 통한 데이터 구조 최적화

  • Non-Indexed Representation: 정점 배열(Vertex array)만 사용하여 삼각형을 구성하는 방식이다. 단순히 3개의 정점을 선형 순서로 읽어 삼각형을 만들지만, 데이터가 중복 저장되어 비효율적이다.

  • Indexed Representation: 이 문제를 해결하기 위해 인덱스 배열(Index array)을 도입한다. 정점 배열에는 정점 데이터를 한 번만 저장하고, 인덱스 배열에 삼각형을 구성하는 3개의 인덱스 번호를 저장한다. 인덱스 배열을 위한 추가 공간이 필요하지만, 중복된 정점 데이터를 제거함으로써 얻는 저장 공간 절약 효과가 훨씬 크다.

** 2024-2 퀴즈 **

  • 정답: Indexed Representation

 

3. 표면 법선 (Surface Normal)과 정점 법선 (Vertex Normal)

 

  • 표면 법선은 컴퓨터 그래픽스에서 매우 중요한 속성 중 하나다.
  • 삼각형의 법선은 면을 구성하는 두 벡터의 외적(Cross product)을 통해 계산되며, 항상 길이가 1인 단위 벡터(Unit vector)로 변환하여 사용한다
    • $$a \times b = (a_y b_z - a_z b_y, a_z b_x - b_z a_x, a_x b_y - a_y b_x)$$

  • 정점을 배치하는 순서에 따라 법선의 방향이 달라진다. 다면체의 바깥쪽을 향하는 올바른 법선 방향을 얻기 위해, 일반적으로 정점을 반시계 방향(CCW)으로 정렬한다. 반대로 시계 방향(CW)으로 정렬하면 반대 방향의 법선이 생성된다.

  • 삼각형 단위의 법선보다 정점 법선(Vertex normal)이 그래픽스에서는 더 중요하다. 정점 법선은 해당 정점을 공유하는 모든 삼각형 법선들의 평균을 내어 계산하며, 곡면의 법선을 더 자연스럽게 근사하는 역할을 한다.

 

4. 모델의 익스포트(Export)와 임포트(Import)

  • 3ds Max나 Maya와 같은 외부 모델링 도구에서 제작한 폴리곤 매시 데이터는 파일 형태로 추출(Export)된다.
  • 이 파일은 Unity와 같은 3D 응용 프로그램으로 불러와(Import) 정점 배열 및 인덱스 배열 데이터로 변환된다.

  • 이 과정에서 널리 사용되는 확장자 중 하나는 .obj 포맷이다. 해당 파일 내부에는 정점 위치(v), 정점 법선(vn), 그리고 인덱스 정보가 담긴 면(f) 데이터가 텍스트 형태로 저장되어 있다.

 

  • 이미지 속 정육면체 윗면에 있는 파란색 삼각형을 보면, 세 개의 꼭짓점에서 뻗어 나간 빨간색 화살표(법선)가 모두 완전히 똑같은 위쪽 방향을 가리키고 있다.
  • 이처럼 완전히 평평한 면을 구성하는 정점들은 서로 같은 법선 방향을 공유하게 된다. 반대로 모서리처럼 꺾이는 부분에서는 한 위치의 정점이 여러 개의 법선을 가져야 하는 경우도 발생한다.

 

  • 외부 파일에 텍스트로 기록된 모델 정보가 프로그램 내부의 두 가지 핵심 배열(Array)로 변환되는 과정을 보여준다. 예시의 구(Sphere) 모델은 26개의 정점과 48개의 삼각형으로 이루어져 있다.
  • 정점 배열 (Vertex Array): 파일에 있는 v(정점 위치)와 vn(정점 법선) 데이터를 합쳐서 하나의 표로 만든다. 중복을 제외하고 총 26개의 고유한 정점 데이터가 0번부터 25번까지 저장된다.
  • 인덱스 배열 (Index Array): 각각의 삼각형을 그리기 위해 정점 배열에서 몇 번째 점을 꺼내 써야 하는지 그 '번호표'만 순서대로 나열해 둔 곳이다. 삼각형 하나당 3개의 꼭짓점이 필요하므로, 48개의 삼각형을 표현하기 위해 총 $48 \times 3 = 144$개의 번호가 저장된다.
728x90