📍Polygon Mesh
모델링: 렌더링할 물체를 만들어 내는 것
- 어떤 구체를 모델링한다고 할 때, 반지름과 원점을 이용해 구의 부피를 구하는 방정식을 사용할 수도 있지만,
- GPU는 polygon mesh를 사용하는 방법에 더 최적화되어 있음
- 즉, 구체를 이루는 정점 몇개를 샘플링해서 이들을 연결하는 방식
triangle mesh
- polygon mesh 중에서 가장 널리 사용되는 방법
- OpenGL은 triangle mesh만 처리함
- 정점 갯수의 대략 2배 만큼 삼각형 메쉬가 있다
vs 사각형 메쉬
- 모델링 시 사각형 메쉬가 유리할 때도 있다
- 사각형 메쉬 -> 삼각형 메쉬 변환 간단 (2로 나누면 됨)
해상도
- 정점의 갯수(resolution)
- LOD(Level of Detail)라고도 함
- 해상도 늘이기: 정점의 갯수를 늘려서 원래 퀄리티처럼 부드럽게 만듬
📍Non-indexed vs Indexed representation
non-indexed
- vertex array: mesh를 이루는 vertex 들로 구성하는 배열
- non-indexed 방식에서는 중복 vertex들이 존재하여 비효율적
indexed representation
- vertex array 에 정점을 중복 없이 배치
- index array: 순서대로 원소 3개씩 하나의 삼각형을 이루며 vertex array의 인덱스를 원소로 가짐
- index array에는 정수값만 담기므로 비교적 메모리를 덜 차지함
- 따라서 더 non-indexed 방법 보다 더 효율적
📍Surface Normals
normal: 법선
- 모든 normal vector는 물체 바깥을 향해야 함
- 따라서 반시계 방향(CCW: counter-clockwise)으로 정점을 나열 (p1 -> p2 -> p3)
- 만약 p1, p3, p2의 시계방향으로 정점들이 배열되면 정점이 구 내부를 향해버려서 안됨
- 모든 normal은 단위 벡터로 표현됨 (정규화 과정 필요)
예) 구의 polygon mesh
- 모두 반시계 방향으로 배치
- t1: p -> q -> r
- t2: s -> p -> q
vertex normal
- 삼각형이 아닌 정점에서 법선을 그리는 것이 더 중요
- 폴리곤 메쉬만 있을 때 normal 구하는 방법: 각 정점은 여러 개의 삼각형에 공유되므로 그 정점들의 벡터를 구한 다음 이것들의 평균을 낸다 (물론 정규화 과정도 필요)
📍Export & Import
모델링 프로그램(예 - Max)으로 모델을 만들면, 3D 엔진 프로그램(예 - Unity)으로 이를 활용할 수 있다
- 이 때 .obj 형식의 파일 등을 사용할 수 있다
.obj 파일의 구성
- 정점의 갯수, 정점 법선의 갯수는 같다 (아래 사진의 예시에서 26개)
- 아래 사진에서 순서대로 삼각형을 그리게 정점이 배치되어 있음
import 과정
- face 정보를 바탕으로 정점과 노말을 하나씩 끌어옴
참고