[CV] OBJ 파일
카테고리: CV
OBJ란
3D 그래픽에서 Mesh를 저장하는 여러가지 File Format는 여러가지가 있다.
그 중에 많이 사용하는 OBJ 형식에 대해 알아보려고 한다.
OBJ는 폴리곤(Polygon)뿐만 아니라 물체의 재질(Material)이나 질감(Texture)을 표현할 수 있는 정보를 가지고 있다.
그렇기 때문에 기하학적인 형태만을 표현하는 다른 포맷들보다 좀 더 자세하게 물체를 표현할 수 있다.
OBJ 파일 구성
OBJ는 보통 3개의 파일로 구성이 된다.
- .obj(.mod)
- .mtl
- bmp, jpg, png …
.obj(.mod)
-
.obj의 경우 ASCII로 저장하고 .mod는 Binary로 저장을 한다.
-
[v] ,[vt] ,[vn] ,[f]를 통해 Polygon 정보를 얻는다.
-
v (x / y / z) : Vertex의 좌표
-
vt : 텍스쳐 좌표 (vertex texture)
-
vn : 노말 인덱스 (vertex normal)
-
f (v / vt / vn): 한 면을 구성하는 Vertex(v) / 텍스쳐(vt) / 노말 인덱스(vn)
-
- [mtllib]를 통해 mtl파일의 정보를 얻는다.
- mtllib : 재질, 질감을 정의해 놓은 mtl 파일 정보
- mtllib : 재질, 질감을 정의해 놓은 mtl 파일 정보
- [usemtl]를 통해 사용할 재질의 정보를 얻는다.
- usemtl : mtl 파일에 정의된 재질 정보 중에서 사용할 재질 정보
.mtl
- newmtl : 여러 종류의 재질들을 분리하기 위한 키워드
- newmtl이 여러개 있다면 여러개의 재질을 사용했다는 것
- newmtl이 여러개 있다면 여러개의 재질을 사용했다는 것
-
Ns : specular의 초점(exponent) (0 ~ 1000)
-
[Ka], [Kd], [Ks]를 통해 재질의 정보를 얻는다.
-
Ka (r / g / b) : 주변 반사율 (Ambient)
-
Kd (r / g / b) : 기본 재질 색상 (Diffuse color)
-
Ks (r / g / b) : 정반사율 지정 (Specular color)
-
Ke (r / g / b) : 표면에서 방출되는 빛의 색상 (Emission color)
-
-
Ni : 광학적 밀도(optical_density), 굴절률(refraction) (0.001 ~ 10)
- d : 재질의 투명성
- 1 : 불투명
- 1 미만 : 투명도 적용
-
illum : material에 적용될 조명 모델 (0 ~ 10)
- [map_Kd]를 통해 질감의 정보를 얻는다.
- map_kd(-options args filename) : color texture file 이나 color procedural texture file
- 렌더링 될 때 kd 값을 곱해서 사용한다.
- mad_d(-options args filename) : scalar texture file, scalar procedural texture file
- 렌더링 될 때 d 값을 곱해서 사용한다.
- 렌더링 될 때 d 값을 곱해서 사용한다.
- Tr : 투명도(Transparency)
.obj 예시
실제 HW로 진행한 공을 들고 있는 남자 obj 파일의 경우 총 80841줄로 구성되어있다. 간단히 그 내용을 살펴보면
mtllib basketball_player_fr0001.mtl
v 1635 3564 1320
v 1626 3563 1327
v 1627 3568 1321
.
.
vt 2570 2811
vt 1429 2219
vt 1423 2228
.
.
usemtl material0000
f 1/1 2/2 3/3
f 4/4 1/1 3/3
.
.
다음과 같이 구성되어있다.
f 1/1 2/2 3/3이 의미하는 것은
한 face를 구성하는 세 Vertex가 각각 v의 1, 2, 3번째 줄이라는 것이다.
이런 식으로 face가 어떻게 구성되어있는지 확인할 수 있다.
댓글남기기