티스토리 뷰

TMI

 - Modeling과 Mesh 구성 요소

 - 여러가지 Mesh File Format

 

이번 포스팅에서는 Mesh를 저장하는 여러가지 File Format에 대해서 이야기 해보겠습니다.

아래 그림과 같이 수많은 File Format들이 있지만 이 중에서도 많이 사용하는 OFF, OBJ, STL에 대해서 알아보도록 하겠습니다. 또한, 알아보기 쉽게 Binary 파일이 아닌 ASCII 파일 기준으로 설명하도록 하겠습니다.

다양한 3D Graphics File Format - 출처 Wikipedia "List of file formats"

0. 들어가기 앞서

 File 내용에 대해 이야기 하기 전에 먼저 앞으로 많이 나오게 될 표현들에 대해서 저희끼리 약속을 하고 넘어가도록 하겠습니다. 

 V = vertex(점), F = face(면), E = edge(선), Vi = vertex Index, Vn = vertex normal, Fn = Face normal

 V.x, V.y, V.z = vertex의 각 x y z 좌표

 

1. OFF(Object File Format)

 1번으로 OFF를 선택한 이유는 Triangle Mesh를 표현하는 file format 중 가장 간단하기 때문입니다. OFF는 Vertex 정보와 Face 정보 두가지로 분류가 됩니다. 아래 그림은 OFF 파일 형식으로 표현된 Cube 입니다.

OFF 파일 형식으로 표현한 Cube

 맨 첫 Line 에는 OFF라고 쓰여있고(여러 옵션이 앞에 붙을 수 있지만 여기서는 다루지 않겠습니다.)

 그 아래 Line에 V의 개수, F의 개수, E의 개수 순서로 작성되어 있는데 E는 0으로 적어도 무관합니다.

 

 그 다음 Line 부터는 V의 개수만큼 V의 정보가 나열되어 있습니다. 각 V는 "V.x, V.y, V.z"의 좌표를 가지게 되며, 위의 그림에서 보면 Cube의 첫번째 V는 3번 줄에 있는 (-1, -1, -1)를 좌표로 가지게 됩니다.

 

 V의 개수만큼 V의 정보가 다 나열되었다면 그 다음은 F의 개수 만큼의 F의 정보가 들어가게 됩니다. F의 정보에는 "F를 이루는 V의 개수, F를 이루는 n개의 Vi"로 작성되어 있습니다. Vi 는 [V의 순서 - 1]입니다. 예를 들어 위의 그림에서 11번째 줄을 보면 3(F가 triangle이다), 0 1 3(1번째, 2번째 4번째 V로 F가 구성됨) 으로 적혀있는 것을 볼 수 있습니다.

 

 만약 Color 값도 표현하고 싶다면 F 정보에 Color 정보를 추가해주게 됩니다. 첫번째 F의 Color를 빨간색으로 표현하고 싶다면 3 0 1 3 1.0 0.0 0.0 1.0 로 표현할 수 있으며 F의 정보 뒤에 Color의 [r g b w] 값을 추가하는 식으로 표현하게 됩니다. 

 

2. OBJ(Object)

 다음은 OBJ 파일 포멧에 대해서 알아보겠습니다. OBJ 파일은 OFF보다 더 많은 정보를 포함할 수 있습니다. V의 좌표 뿐만이 아니라 Vn, Vt(texture coordinate), Vp(parameter space) 값과 같은 여러 옵션들이 추가될 수 있지만 저희는 오늘 Vn 즉 normal 값 까지만 알아보도록 하겠습니다. 아래 그림은 OBJ 파일 형식으로 표현된 Cube 입니다.

OBJ는 앞에 v, vn, f를 적음으로써 뒤에 적힌 숫자들이 어떤것을 표현하고 있는지 설명해 줍니다. v는 Vertex 좌표 정보를 나타내고 vn은 Vertex normal 값을, f는 각 F가 가지는 Vertex index나 normal 등의 값을 가지고 있습니다.

 

먼저 V 개수에 맞게 V의 정보를 나열하게 됩니다. 

그 다음으로는 Mesh가 가지는 normal 수 만큼 vn을 적어줍니다. (vn 정보는 생략할 수 있습니다.)

 

F는 여러 방식으로 나열됩니다.

 - Vi 만 가지고 표현되는 F

Vi로만 표현된 F

 - Vi와 texture coordinate Vt, Vi와 Vt, Vn으로 표현되는 F(현재 내용에서는 다루지 않겠습니다.) "/" 한개로 표현

Vi, Vt, Vn으로 표현된 F

 - Vi와 Vn으로 표현되는 F

Vi, Vn으로 표현된 F

 Vi 뒤에 오는 값이 어떤 값인지 구분하기 위해 "/"의 개수를 다르게 표현합니다. "/"이 두개가 있다면 Vi 뒤에 있는 값은 Vn 값이 됩니다. 

 

3. STL(Standard Triangle Language)

 마지막으로 STL입니다. STL 파일의 특징은 삼각형만 표현한다는 것입니다. OFF에서는 여러가지 폴리곤을 다룰 수 있지만 STL에서는 오직 삼각형만 표현됩니다. 아래 그림은 STL 파일 형식으로 표현된 Cube의 일부입니다.

STL 파일 형식으로 표현된 Cube

 STL file의 특징은 V와 F를 따로 나열하는게 아닌 F 정보 안에 V 정보까지 포함하게 됩니다. 위 그림을 보게 되면 각 F가 순서대로 나열되어 있습니다. 아래 그림이 하나의 F를 표현하는 정보입니다. facet normal은 현재 Fn 방향이 됩니다. 아래 F는 (0, 0, 1) 즉 Z축 방향으로 Fn이 설정되어 있는 것을 확인할 수 있습니다.

다음  Line에는 outer loop와 endloop로 묶인 V정보가 있습니다. 이때 3개의 V를 순서대로 연결했을 때 Fn을 가지는 방향으로 V가 나열됩니다. 즉 Fn 기준으로 ccw(Counter Clock Wise : 시계 반대 방향)로 V가 나열됩니다. 

ccw로 나열된 F의 V들 출처 : fabbers.com/tech/STL_format

이렇게 F의 개수만큼 F의 정보를 나열하면 STL 파일이 완성됩니다.

 

 

 

오늘 포스팅에서는 Mesh를 표현하는 여러가지 File format 중에서도 자주 사용하는 OFF, OBJ, STL에 대해서 간단하게 알아보는 시간을 가졌습니다. 

 

다음 포스팅에서는 각각 Data를 저장하는 여러가지 방법에 대해서 알아보도록 하겠습니다.

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함