Polygon
- polygon이란 유한한 직선으로 묘사된 평면 도형
- 게임에서는 주로 삼각형 사용(영화 분야에선 사각형 사용)
Explicit representation
- 게임 분야에서는 명시적 표현이 더 선호되는 편
- GPU가 polygon 처리에 최적화되어 있기 때문
- mesh의 vertex들은 부드러운 표면을 샘플링하는 점이므로 polygon mesh는 정확한 표현이 아니라 대략적인 표현
Implicit representation
- 공간의 각 점을 표면의 안, 위, 바깥쪽으로 분류하는 함수에 의해 모양을 정함
- 각 공간에 대한 확인을 해야해서 공간을 잘게 나눌 수록 Detail은 살지만 연산이 많이 필요
Polygon Mesh
- closed mesh(구멍이 없는)는 100개의 vertex가 주어지면 200개의 삼각형을 가짐
오일러 공식

v: vertex e: edge f: face
정확성, 효율 Tradeoff

- polygon mesh의 vertex 수는
resolution(삼각형)이나 LOD에 의해 묘사됨
- resolution이 증가하면, 부드러운 표면에 가까워지지만 mesh 처리 시간도 증가함
GPU
- GPU는 렌더링에 특화되어 있는 전기 회로임
- GPU는 병렬 구조로 설계되어 있음.
- 병렬 구조로 되어 있어서 뉴런 네트우크나 이미지 처리 같이 큰 데이터 블록을 병렬 처리하는 알고리즘이 사용됨
- 그런데, GPU는 O/S를 스스로 실행시킬 수 없음
- 왜냐면, 렌더링에 필요한 데이터는 data bus(PCI-e bus)를 통해 CPU에서부터 GPU로 전달되어야 한다.

Polygon Mesh 표현
Non-indexed 표현
vertex array: memory 공간에서 vertex들이 나열되는 곳
- 3개의 vertex는 삼각형을만들기 위해 선형으로 읽힌다.
- vertex의 순서는 사용되는 좌표계에 따라 다름: LHS or RHS

- vertex array는 장황한 데이터를 포함하기 때문에 비효율적임
- 설상가상, vertex array에 저장된 데이터가 vertex 위치 뿐 아니라 추가적인 정보(color, normal, etc..)도 가지고 있음

Indexed 표현
- 더 나은 방법은 index array를 쓰는 거임
- vertex array에 vertex가 오직 한번만 쓰임
- 삼각형 하나 당 3개의 인덱스가 index array에 저장된다
- 중복 데이터를 제거함으로써 절약된 vertex array 저장 공간이 index array에 필요한 추가 저장 공간보다 더 크다
LHS와 RHS를 쓸 때
엄지 손가락이 해당 면에서 바깥으로 향하게 두면 됨
Normals
- normal은 무언가에 수직(perpendicular)인 벡터임
- 무언가는 vertex, triangle, surface, etc.
- Normal이 주로 사용되는 곳:
- Lighting, Shading
- Collision Detection
- Backface Culling
- Bump and Normal Mapping
Surface normal
- Normal은 주어진 점에서 표면 접선(tangent)에 수직인 벡터임
- 중심 점에서 물체의 표면의 밝기는 점에서의 normal과 빛의 방향 사이의 각도에 달려있다.
- surface normal은 triangle normal과 vertex normal로 분류된다.

Triangle normal

- (p1, p2, p3)의 삼각형이 주어졌을 때, v1을 p1과 p2를 연결한 벡터를 나타낸다 하자
- v2는 p1과 p3를 연결하는 벡터라고 하자.
- p1, p2 그리고 p3 순서가 CCW임.
- 모든 normal vector는 단위 벡터로 만들어진다.
CCW vs. CW
- normal은 반대 방향이다
- normal 방향은 vertex 순서에 달려있다
- 컴퓨터 그래픽스에서, surface normal은 다면체(polyhedron)의 바깥쪽을 향해야 합니다.
Vertex normal
- vertex에 normal을 할당할 수 있으며, 이 vertex normal은 vertex가 샘플링하는 매끄러운 표면의 점의 normal을 근사합니다.
- vertex normal은 vertex를 공유하고 있는 모든 삼각형들의 normal들의 평균으로 정의된다
- vertex normal은 거의 항상 vertex array를 통해 GPU로 전달되는 데이터다

Normal 비교
- flat shading에서, triangle normal은 전체 삼각형에 걸쳐 조명에 사용되는 단일 방향을 정의하기 때문에 가장 중요합니다.
- smooth shading에서, vertex normall은 인접한 vertex들의 normal들 사이 보간(interpolating)에 의해 휜 표면의 상황을 허용할 수 있어서 중요함.
- 물리 계산, 충돌 감지와 반사와 굴절 같은 정밀한(precise) 그래픽 효과에서,특정한 지점에서의 정확한 surface normal은 필요하다.
Export and Import
- 오프라인 그래픽 패키지를 이용하여 제작된 Polygon mesh와 관계된 데이터들은 파일 안에 저장되어 있고 런타임 3D 프로그램에 전달됨
- 다른 어플리케이션에 어울리는 포맷으로 데이터를 내보내는 과정을 expert라고 함.
- 반면에 집어 넣는 것은 import
단위 구에서의 low-resoultion mesh 고려
- 구 표면은 mesh가 26개의 vertex와 48개의 삼각형으로 구성되도록 45도로 균일하게 샘플링 된다.
- 아래는 .obj 파일 내 mesh 일부이다.

Importing to the 3D application
- 파일 내 저장된 데이터는 3D 어플리케이션의 vertex, index array 안으로 import 됨
- mesh가 48개의 삼각형으로 구성되어 있으면, index array는 144(48 x 3)개의 요소를 가진다.