728x90
반응형
- 3차원 물체를 표현하는 다양한 기법이 존재하지만, 실시간 그래픽스 영역에서는 폴리곤 메시를 압도적으로 많이 사용한다.
3.1 폴리곤 메시
- 오른쪽 그림, 폴리곤 메시와 같이 정점(vertex) 및 폴리곤과 같은 요소들을 명시적으로 정의하여 구를 표현할 수 있다.
- 게임을 비롯한 실시간 응용에서는 폴리곤 메시를 선호하는데, 그 이유는 GPU가 폴리곤 메시 처리에 최적화되어 있기 때문이다.
- 하지만, 폴리곤 메시는 정확한 표현법이 아닌 근사적 표현법이라는 사실을 염두해 두자.
- 가장 간단한 폴리곤은 삼각형이다. 폴리곤 메시 중 가장 널리 쓰이는 것은 삼각형으로만 구성된 메시, 즉 삼각형 메시(triangle mesh)이다.
- 하지만 모델링 작업을 위해서는 사각형 메시(quad mesh)가 선호된다.
- 사각형 메시가 주어졌을 때 이를 삼각형 메시로 바꾸는 가장 간단한 방법은, 각 사각형을 두 개의 삼각형으로 분할하는 것이다.
- 폴리곤 메시는 부드러운 곡면을 근사적으로 표현한 것이다. 따라서 얼마나 많은 정점을 사용하여 근사할 것인가는 중요한 문제가 된다.
- 정점 개수가 많으면 메시의 해상도(resolution)가 높다고 말하며, 정점이 적으면 해상도가 낮다고 표현한다.
- 그림과 같이 해상도는 정확성과 효율성 사이의 상반관계를 고려하여 결정된다.
- 메시의 해상도가 올라갈수록 본래의 곡면과 흡사해지지만 메시를 처리하기 위한 시간이 증가하여 효율성은 떨어진다.
3.1.2 폴리곤 메시 표현
- 삼각형 메시를 표현하는 가장 단순한 방법은 삼각형을 구성하는 세 개의 정점을 순서대로 나열하는 것, 한 번에 세 개씩 정점을 읽어서 하나의 삼각형을 정의한다.
- 정점들이 저장된 메모리 공간은 정점 배열(vertex array)이라 부른다.
- 이 표현법은 상당히 직관적이지만, 중복된 데이터를 가진다는 단점이 있다.
- 정점 배열에는 정점들을 중복없이 저장하고, 이들을 가리키는 인덱스를 별도의 인덱스 배열(index array)에 기록하면 효율적으로 메모리를 사용할 수 있다.
- 정점 배열(vertex array)에는 일반적으로 정점 위치뿐만 아니라 다종다양한 데이터가 포함된다.
- 중복된 데이터를 제거하여 절약되는 정점 배열 공간은 인덱스 배열이 차지하는 공간 크기를 능가하게 된다.
3.2 표면 노멀
- 3차원 물체를 렌더링할 때 핵심적인 역할을 하는 것은 그 물체 표면의 노멀(surface normal), 즉 표면에 수직인 법선 벡터이다.
3.2.1 삼각형 노멀
- 삼각형 노멀은 벡터곱 v1 x v2로 정의되며, 오른손 법칙이 적용된다.
- 삼각형의 정점 순서가 <P1, P2, P3>일 경우 다음과 같이 삼각형 노멀이 정의된다. (반시계 방향)
- 다음과 같은 순서를 거치게 되면 앞서 보았던 삼각형 노멀 방향과는 반대의 결과가 나오게 된다.
- <P1, P2, P3>와 <P1, P3, P2>는 같은 삼각형은 맞지만 바깥으로 나가는 노멀과 안으로 향하는 노멀로 나오게 된다.
- 컴퓨터 그래픽스에서는 모든 노멀이 물체 바깥으로 향하게 하는 것이 원칙이다. 따라서, 삼각형의 정점은 항상 반시계 방향으로 정렬되어 있어야 한다.
- 시작점은 그렇게 중요하지는 않다. 대신, 반시계방향으로 통일하기
3.2.2 정점 노멀
- 컴퓨터 그래픽스에서 실제 중요한 것은 정점 노멀(vertex normal)이다.
- 생각해보면, 원래 부드러운 곡면을 샘플하여 폴리곤 메시의 정점을 얻은 것이다. 정점 노멀은 해당 정점이 샘플한 곡면에 수직이어야 함을 이해할 수 있을 것이다.
- 하지만, 원래의 곡면(smooth surface)없이 폴리곤 메시만 주어졌을 때 정점 노멀을 계산하는 정답은 없다. 그럴듯한 결과를 내는 기법들이 사용될 뿐이다.
- 가장 간단한 방법은 그림과 같이 하나의 정점을 공유하는 모든 삼각형 노멀들의 평균을 취하는 것이다.
- 정점 노멀은 3ds Max 등과 같은 패키지가 자동으로 계산한다. 정점 노멀은 라이팅에 필수적이므로, 정점 위치와 더불어 정점 배열의 핵심 구성 요소가 된다.
3.3 폴리곤 메시 내보내기와 불러오기
- 하나의 응용프로그램에서 만들어진 데이터를 다른 응용프로그램에 적합한 형태로 출력하는 과정은 내보내기 혹은 익스포트(export)라 부르고, 이렇게 출력된 데이터를 읽어오는 과정은 불러오기 혹은 임포트(import)라 한다.
- 3ds Max가 지원하는 대표적인 파일 포맷 중 하나는 .obj이다.
- 이는 기본적으로 정점 위치와 노멀, 그리고 삼각형 정보를 저장하는데, 정점 위치는 vertex의 앞으로 v, 정점 노멀은 vertex normal의 앞 글자 vn, 삼각형은 face(면)의 앞 글자 f를 기호로 사용한다.
- 구의 경우 특별한 경우라 vertex normal이 각각 고유하기 때문에 많은 vertex normal을 가지게 된다.
- 내보내기(export)한 모델링의 삼각형 개수는 48개이니까, 불러오기(import)한 index array에는 48x3 = 144개 만큼의 배열이 필요하다.
출처
728x90
'공부 > Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문' 카테고리의 다른 글
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 6 - OpenGL ES와 쉐이더 (0) | 2022.02.14 |
---|---|
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 5 - 정점 처리 (0) | 2022.02.13 |
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 4 - 좌표계와 변환 (0) | 2022.02.12 |
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 2 - 수학 기초 (0) | 2022.02.11 |
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 1 - 서론 (0) | 2021.07.10 |