메쉬(Mesh)
컴퓨터가 이해할 수 있는 형식으로 대상의 형태를 정의하는 방법
형태를 정의하기 위해 버텍스, 에지, 페이스라는 3가지 정보를 저장한다.
버텍스(Vertex)
3D 공간에 있는 점을 의미한다.
그냥 꼭짓점 아니야? 라고 생각하면 틀린 말은 아니지만, 꼭짓점이라는 정의보단 3D 공간에 존재하는 점으로 이해하는게 더 맞다.
꼭짓점이라는 개념으로 생각해버리면 구체의 버텍스는 없다는 결론이 나와버리기 때문에, 꼭짓점이랑 동일하게 생각하지는 말아야한다.
참고로 메쉬의 버텍스는 '벡터'를 사용해서 정의된다! 쉐이더 코드에서 가장 기본이 되는 데이터 타입 중 하나이기 때문에 벡터에 대해서도 추후 포스팅 할 예정이다.
에지
버텍스를 연결한 선
형태를 만들기 위해 에지는 버텍스가 어떻게 연결되는지 정의한다.
페이스
3개 혹은 그 이상의 에지로 구성된 2D 형태, 에지로 둘러쌓인 공간이라고 생각해도 괜찮다.
* 어떤 2D 형태도 페이스가 될 수 있으나 처리속도와 간결함을 위해 많은 엔진들이 삼각형 형태의 페이스로 구성된 메쉬를 요구한다.
메쉬가 컴퓨터 그래픽에서 널리 쓰이는 이유?
코드에서 매우 쉽게 정의할 수 있기 때문이다. (다른 이유도 있긴 하다)
메쉬는 오직 버텍스만을 메모리에 저장하고, 에지와 페이스는 버텍스 순서를 간접적으로 정의한다.
-> 여기서 버텍스 순서가 결정되는 두가지 케이스가 있다.
1. 메쉬 데이터에 버텍스가 저장되는 순서에 따라 결정
2. 인덱스 버퍼(Index buffer)라는 데이터 구조를 통해 순서를 정의
* 와인딩 순서 (Winding order)
- 페이스의 중심을 기준으로 반시계 방향/ 시계방향으로 버텍스 순서를 정하는데, 이렇게 선택한 방향을 와인딩 순서라고 한다.
버텍스 순서는 왜 중요한가요?
이 순서가 2D 형태인 페이스의 앞면을 결정하기 때문임
앞면 뒷면을 중요하게 생각해야 하는 이유는, 백페이스 컬링(Backface Culling)이라 불리는 최적화 테크닉 때문이기도 하다.
백페이스 컬링은 대부분의 상황에서 사용되는 최적화 테크닉인데, 요약하면 페이스의 앞면만 렌더링하고 뒷면을 렌더링하지 않는 기법이다.
'개발 > 쉐이더' 카테고리의 다른 글
게임 그래픽 개념 - 렌더링(Rendering) (0) | 2021.12.19 |
---|