Synthetic Objects
카메라처럼 그래픽스에서 가상의 오브젝트를 Synthetic Object라고 부른다.
이 오브젝트들은 정점들(Vertices)와 Faces로 이루어져 있다.각 Vertex는,
position, normal, color, texture coord 등의 정보를 가지고 있고,
Faces들은 vertex이 어떻게 연결되어 있는지를 알려주는 indicese 등의 정보를 가지고 있다.
생각
다음과 같은 모델을 어떻게 데이터로 표현해야 할까?
Color, Normal, texture등을 제외하고 각 Vertex가 위치 정보 (position)만 가지고 있다고 가정할 때,
3차원 공간이기에 각 vertex마다 x, y, z로 이루어진 3차원 벡터정보를 담고 있을 것이다.
근데 생각해봐야 하는 것이, 지금 면(Face)들이 사각형, 삼각형, 다각형도 있는데 이걸 어떻게 컴퓨터 구조로 표현해야 할지 고민해야 한다.
Polygon Mesh
먼저 첫번째로 Polygon Mesh 방식은 다음과 같이 Vertex list들을 정해놓고, 각 Face마다 Vertex의 position index 순서를 지정함으로써 그릴 수 있다. 근데 이 방법은 먼저 각 면이 삼각형인지 사각형인지 몇각형인지를 미리 알려줘야 한다는 단점을 안고 있다.
그리고 실제로는 권장하지 않는 방식인데, 그 이유는 GPU는 기본적으로 삼각형으로 모든 것을 처리하기 때문에, 위 구조로 디자인을 한다고 하더라도 내부적으로는 결국 모든 것이 삼각형으로 처리된다. 다각형을 삼각형으로 바꾸는 과정을 Tessellation이라고 한다.
이 방법으로 하게 되면 결국 내부적으로 계산을 한 번 더 하게 된다.
Triangulated Mesh
이번에는 미리 삼각형으로 분할해서 처리하는 방식이다. 위 예제와는 달리, 모든 Face를 삼각형으로 처리하면 큰 장점이 하나 있는데, 굳이 Face마다 데이터를 분할해서 나눌 필요가 없다. 어처피 삼각형이라면 3개를 단위로 읽어서 Face를 처리하면 되기 때문이다.
이렇게 Vertex list를 정의하지 않고 그냥 position들의 조합으로만 나타낼 수도 있다. 이렇게 하면 Face마다 사각형인지 다각형인지 삼각형인지를 고려할 필요가 없고, 그냥 3개씩 끊어서 처리하면 되니 훨씬 효율적이다.
위 그림에 나와있는 1, 2, 3번째 순서대로 하나의 삼각형, 그 다음 4, 5, 6번째가 또 다른 삼각형, 이런식으로 처리하게 된다.
하지만 이 방법은 메모리를 더 쓸 수 있다는 단점이 존재하는데, 이를 해결하기 위해서 Polygon Mesh와 연결해서,
이런식으로 구조를 변경할 수도 있다. 미리 Position list를 정의해두고, index로만 삼각형의 순서를 정해 놓는 방식이다.
참고로 OpenGL ES와 Direct X는 Triangulated Mesh 방법만 지원한다.
GPU 처리 과정
위와 같이 Vertex Array들을 정의했다면 이걸 CPU 메모리에서 GPU 메모리로 옮겨주는 과정이 필요하다.
CPU 메모리에서 VRAM으로 데이터를 넘기는 것은 꽤나 오랜 시간이 걸린다. 서로 독립적인 하드웨어이므로 이 과정을 최소화 해 줄 필요성이 있다.
이를 위해 OpenGL에서는 Buffer Object라는 것을 지원한다. 그 중 대표적으로 VBOs(Vertex Buffer Objects), IBO(Index Buffer Object)등이 있다.
VBOs와 IBO에 Vertex list와 index 정보를 저장하고 GPU에 한번에 넘겨주기만 하면, 다시는 오브젝트의 정보를 VRAM에 올릴 필요가 없어지게 된다.
OpenGL 코드는 나중에 알아볼 것이다.
'개인 공부 > 컴퓨터그래픽스' 카테고리의 다른 글
02. Camera (1) | 2025.06.07 |
---|---|
01. Rendering Pipeline (0) | 2025.06.07 |
00. 컴퓨터 그래픽과 OpenGL의 역사 (4) | 2025.06.07 |