[3D Vision] 3D ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(Mesh, Point Cloud)์™€ ํฌ๋งท(OBJ, PLY, PCD)

2025. 3. 5. 22:08ยท๐Ÿ“– Fundamentals/3D vision & Graphics
๋ฐ˜์‘ํ˜•

Computer Vision ์—…๋ฌด๋ฅผ ํ•˜๋‹ค๋ณด๋ฉด 3D ๋ฐ์ดํ„ฐ๋„ ์ž์ฃผ ๋‹ค๋ฃจ๊ฒŒ ๋œ๋‹ค. ํ˜„์‹ค ์„ธ๊ณ„๋ฅผ ๋””์ง€ํ„ธ ๊ณต๊ฐ„์— ์žฌํ˜„ํ•˜๋ ค๋ฉด 3D ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์ˆ˜์ ์ด๋‹ค. ์ตœ๊ทผ์—๋Š” ์ž์œจ์ฃผํ–‰, ๋กœ๋ณดํ‹ฑ์Šค, AR/VR, 3D ์žฌ๊ตฌ์„ฑ, ์˜๋ฃŒ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ 3D ๋ฐ์ดํ„ฐ๊ฐ€ ํ™œ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

 

3D ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅ ๋ฐฉ์‹์— ๋”ฐ๋ผ Mesh, Point Cloud, Voxel ๋“ฑ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๊ณ , ๊ฐ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด PLY, PCD, OBJ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํŒŒ์ผ ํฌ๋งท์ด ์กด์žฌํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ํฌ๋งท์€ ํŠน์ •ํ•œ ์šฉ๋„์™€ ์žฅ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ”„๋กœ์ ํŠธ์˜ ๋ชฉํ‘œ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

์ด ๊ธ€์—์„œ๋Š” 3D ๋ฐ์ดํ„ฐ์˜ ์ฃผ์š” ๊ตฌ์กฐ์™€ ํฌ๋งท์„ ์ •๋ฆฌํ•ด ๋ณด๊ณ ์ž ํ•œ๋‹ค.


๐Ÿ“Œ 3D ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

1. Mesh

๐Ÿ“ ํŠน์ง•

  • 3D ๊ณต๊ฐ„์—์„œ ์ •์ (Vertex)๊ณผ ๋ฉด(Face)์˜ ์—ฐ๊ฒฐ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ชจ๋ธ์„ ํ‘œํ˜„ํ•œ๋‹ค.
  • ๋ฒ•์„ (Normal), ํ…์Šค์ฒ˜(Texture), UV ์ขŒํ‘œ ๋“ฑ์˜ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ Œ๋”๋ง, ๊ฒŒ์ž„ ๊ทธ๋ž˜ํ”ฝ, 3D ๋ชจ๋ธ๋ง์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿ“ ๋Œ€ํ‘œ์ ์ธ ํŒŒ์ผ ํฌ๋งท

ํฌ๋งท ํŠน์ง•
OBJ (+MTL) ๊ฑฐ์˜ ๋ชจ๋“  3D ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ์ง€์›, ํ…์Šค์ฒ˜ ํฌํ•จ ๊ฐ€๋Šฅ
FBX Autodesk ํฌ๋งท, ์• ๋‹ˆ๋ฉ”์ด์…˜ ํฌํ•จ ๊ฐ€๋Šฅ
GLTF/GLB WebXR ๋ฐ AR/VR์—์„œ ๋งŽ์ด ์‚ฌ์šฉ, ์••์ถ•๋ฅ ์ด ์ข‹์Œ
STL 3D ํ”„๋ฆฐํŒ…์— ๋งŽ์ด ์‚ฌ์šฉ, ํ…์Šค์ฒ˜ ์ •๋ณด ์—†์Œ
PLY ๋ฉ”์‹œ์™€ ์ ๊ตฐ์„ ์ €์žฅ ๊ฐ€๋Šฅ, ๋‹ค์–‘ํ•œ ์†์„ฑ ํฌํ•จ ๊ฐ€๋Šฅ

 

2. Point Cloud

๐Ÿ“ ํŠน์ง•

  • 3D ๊ณต๊ฐ„์—์„œ ์ขŒํ‘œ(x, y, z)์™€ ์ปฌ๋Ÿฌ(RGB, Intensity) ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • LiDAR ์„ผ์„œ, Structure from Motion(SfM), 3D ์Šค์บ๋‹์—์„œ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋ฉ”์‹œ๋ณด๋‹ค ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ํฌ์ง€๋งŒ, ๋”ฅ๋Ÿฌ๋‹๊ณผ 3D ๋ถ„์„์— ์œ ๋ฆฌํ•˜๋‹ค.

๐Ÿ“ ๋Œ€ํ‘œ์ ์ธ ํŒŒ์ผ ํฌ๋งท

ํฌ๋งท ํŠน์ง•
PCD PCL(Point Cloud Library)์—์„œ ์ตœ์ ํ™”๋จ
PLY ์ปฌ๋Ÿฌ ๋ฐ ๋ฒ•์„  ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์–ด ์ ๊ตฐ๊ณผ ๋ฉ”์‹œ ์ €์žฅ ๊ฐ€๋Šฅ
LAS/LAZ LiDAR ๋ฐ์ดํ„ฐ ์ €์žฅ์šฉ (LAZ๋Š” ์••์ถ• ๋ฒ„์ „)
XYZ ๋‹จ์ˆœํ•œ (x, y, z) ์ขŒํ‘œ ๋ฆฌ์ŠคํŠธ, ์ปฌ๋Ÿฌ ์ •๋ณด ์—†์Œ

๐Ÿ”„ 3D ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜: Mesh ↔ Point Cloud

3D ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋‹ค ๋ณด๋ฉด Mesh์™€ Point Cloud ์‚ฌ์ด์˜ ๋ณ€ํ™˜์ด ์ž์ฃผ ํ•„์š”ํ•˜๋‹ค. ๊ฐ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๊ฐ€์ง„ ํŠน์„ฑ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ๋ชฉ์ ์— ๋งž๊ฒŒ ๋ณ€ํ™˜ํ•˜๋ฉด ๋”์šฑ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ๋ฅผ ๋ฉ”์‹œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ด์œ ๋Š” ์ฃผ๋กœ ๋ Œ๋”๋ง๊ณผ 3D ๋ชจ๋ธ๋ง ๋•Œ๋ฌธ
์ด๋‹ค. ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ๋Š” ์ ๋“ค์˜ ๋ชจ์Œ์ด๋ผ ์ง์ ‘ ๋ Œ๋”๋งํ•˜๋ฉด ๋น„์–ด ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ Triangulation ๊ณผ์ •์„ ํ†ตํ•ด ์ ๋“ค์„ ์—ฐ๊ฒฐํ•ด ๋ฉด(Face)์„ ํ˜•์„ฑํ•˜๋ฉด, ๊ฒŒ์ž„, AR/VR, 3D ํ”„๋ฆฐํŒ… ๋“ฑ์˜ ์‘์šฉ์—์„œ ๋” ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ๋Š” Poisson Surface Reconstruction์ด๋‚˜ Ball Pivoting Algorithm๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์ด ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, MeshLab์—์„œ๋Š” `Surface Reconstruction` ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด ์‰ฝ๊ฒŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, CloudCompare์—์„œ๋„ `Poisson Reconstruction`์„ ํ™œ์šฉํ•ด ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ๋ฅผ ๋ฉ”์‹œ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.


๋ฐ˜๋Œ€๋กœ, ๋ฉ”์‹œ๋ฅผ ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ด์œ ๋Š” ์ฃผ๋กœ 3D ๋”ฅ๋Ÿฌ๋‹๊ณผ LiDAR ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฉ”์‹œ ๋ฐ์ดํ„ฐ๋Š” ๋ฉด์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์ง€๋งŒ, ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ(PointNet ๋“ฑ)์€ ๋ฉ”์‹œ๋ณด๋‹ค ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”์‹œ ํ‘œ๋ฉด์—์„œ ์ผ์ •ํ•œ ๊ฐ„๊ฒฉ์œผ๋กœ ์ ์„ ์ƒ˜ํ”Œ๋งํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Uniform Sampling์ด๋‚˜ Poisson Disk Sampling๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์ด ์‚ฌ์šฉ๋˜๋ฉฐ, MeshLab์—์„œ๋Š” `Poisson-disk Sampling` ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด ๋ฉ”์‹œ๋ฅผ ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. CloudCompare์—์„œ๋„ `Mesh to Cloud` ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ฉ”์‹œ๋ฅผ ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.


์ด๋Ÿฌํ•œ ๋ณ€ํ™˜ ๊ณผ์ •์€ CG, AR/VR, ์ž์œจ์ฃผํ–‰, 3D ํ”„๋ฆฐํŒ…, ์ธ๊ณต์ง€๋Šฅ ์—ฐ๊ตฌ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ํ•„์ˆ˜์ ์œผ๋กœ ํ™œ์šฉ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋–ค ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•œ์ง€์— ๋”ฐ๋ผ ๋ณ€ํ™˜์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์ ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

3. Voxel

๐Ÿ“ ํŠน์ง•

  • 3D ๊ณต๊ฐ„์„ Voxel(3D ํ”ฝ์…€) ๋‹จ์œ„๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • CT, MRI ๊ฐ™์€ ์˜๋ฃŒ ์˜์ƒ ๋ฐ์ดํ„ฐ๋‚˜ 3D ๋”ฅ๋Ÿฌ๋‹ ์—ฐ๊ตฌ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค.
  • ๋ฉ”์‹œ๋‚˜ ์ ๊ตฐ๊ณผ ๋‹ฌ๋ฆฌ ๋‚ด๋ถ€ ๊ตฌ์กฐ๊นŒ์ง€ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“ ๋Œ€ํ‘œ์ ์ธ ํŒŒ์ผ ํฌ๋งท

ํฌ๋งท ํŠน์ง•
VDB (OpenVDB) Sparse Voxel ์ €์žฅ, CG ๋ฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ ์‚ฌ์šฉ
NII (NIfTI) ์˜๋ฃŒ ์˜์ƒ (MRI, CT) ๋ฐ์ดํ„ฐ ํฌ๋งท
MRC Cryo-EM ๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉ

 


๐Ÿ“Œ 3D ๋ฐ์ดํ„ฐ ํฌ๋งท

1. PLY (Polygon File Format, Stanford PLY)

๐Ÿ“ ํŠน์ง•

  • Point Cloud์™€ Mesh ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ASCII ๋ฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•์‹์„ ๋ชจ๋‘ ์ง€์›ํ•˜์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉ.
  • ๊ฐ ์ ๋งˆ๋‹ค RGB ์ปฌ๋Ÿฌ, ๋ฒ•์„ (normal), ํˆฌ๋ช…๋„(alpha), ๋ฐ˜์‚ฌ์œจ ๋“ฑ ๋‹ค์–‘ํ•œ ์†์„ฑ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  • ์ ๊ตฐ(Point Cloud) ๋ฐ์ดํ„ฐ ์ €์žฅ
  • 3D Reconstruction ๊ฒฐ๊ณผ ์ €์žฅ
  • Open3D, MeshLab ๋“ฑ์˜ ํˆด์—์„œ ์‚ฌ์šฉ

*๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ๋†’์ด๋Š”๋ฐ ์œ ๋ฆฌํ•˜๋‹ค.

 

ply ํŒŒ์ผ ์˜ˆ์‹œ

 

์œ„ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ply ํฌ๋งท ํŒŒ์ผ์„ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋กœ ๋ณด๋ฉด end_header ์•„๋ž˜๋กœ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๋ผ์„œ ์•Œ์•„ ๋ณผ ์ˆ˜ ์—†์Œ

→ ๋•Œ๋ฌธ์— ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด open3d๋ฅผ ์ด์šฉํ•ด์„œ ํŒŒ์ผ์„ ์ฝ๊ณ  ํ”„๋กœ์„ธ์‹ฑํ•˜๋ฉด ๋จ

 

import open3d as o3d
import numpy as np

# ํŒŒ์ผ ๊ฒฝ๋กœ ์ง€์ •
file_path = 'scans/scene0000_00/scene0000_00_vh_clean_2.ply'

# 1. ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ๋กœ ์ฝ๊ธฐ
print("=== ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ ์ •๋ณด ===")
pcd = o3d.io.read_point_cloud(file_path)
points = np.asarray(pcd.points)

# ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ณธ ํŠน์„ฑ
print(f"ํฌ์ธํŠธ ์ˆ˜: {len(pcd.points)}")
print(f"ํฌ์ธํŠธ ์ฐจ์›: {np.asarray(pcd.points).shape}")
print(f"์ปฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์กด์žฌ ์—ฌ๋ถ€: {pcd.has_colors()}")
if pcd.has_colors():
    print(f"์ปฌ๋Ÿฌ ๋ฐ์ดํ„ฐ shape: {np.asarray(pcd.colors).shape}")
print(f"๋…ธ๋ฉ€ ๋ฒกํ„ฐ ์กด์žฌ ์—ฌ๋ถ€: {pcd.has_normals()}")
if pcd.has_normals():
    print(f"๋…ธ๋ฉ€ ๋ฒกํ„ฐ shape: {np.asarray(pcd.normals).shape}")

# 2. ๋ฉ”์‹œ๋กœ ์ฝ๊ธฐ
print("\n=== ๋ฉ”์‹œ ์ •๋ณด ===")
mesh = o3d.io.read_triangle_mesh(file_path)

# ๋ฉ”์‹œ ๊ธฐ๋ณธ ํŠน์„ฑ
print(f"์ •์  ์ˆ˜: {len(mesh.vertices)}")
print(f"์‚ผ๊ฐํ˜• ๋ฉด ์ˆ˜: {len(mesh.triangles)}")
print(f"์ •์  ๋…ธ๋ฉ€ ์กด์žฌ ์—ฌ๋ถ€: {mesh.has_vertex_normals()}")
print(f"์ •์  ์ปฌ๋Ÿฌ ์กด์žฌ ์—ฌ๋ถ€: {mesh.has_vertex_colors()}")
print(f"์‚ผ๊ฐํ˜• ๋…ธ๋ฉ€ ์กด์žฌ ์—ฌ๋ถ€: {mesh.has_triangle_normals()}")

# 3. ์‹œ๊ฐํ™” (ํ•„์š”ํ•œ ๊ฒฝ์šฐ)
o3d.visualization.draw_geometries([pcd])  # ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ ์‹œ๊ฐํ™”
o3d.visualization.draw_geometries([mesh])  # ๋ฉ”์‹œ ์‹œ๊ฐํ™”

  • ply ํŒŒ์ผ์„ point cloud ๋˜๋Š” mesh ๊ตฌ์กฐ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์Œ
  • point cloud๋Š” points, colors, normals์™€ ๊ฐ™์€ ๊ฐ’๋“ค์ด ์กด์žฌ
  • mesh๋Š” vertices, triangles, vertex_colors์™€ ๊ฐ™์€ ๊ฐ’๋“ค์ด ์กด์žฌ

 

์ขŒ: point cloud, ์šฐ: mesh

 

  • ์‹œ๊ฐํ™” ๊ฒฐ๊ณผ๋Š” ์œ„์™€ ๊ฐ™๊ณ , point cloud๋Š” ๊ฐ ํฌ์ธํŠธ์˜ ์ปฌ๋Ÿฌ๊ฐ’์„ ํ‘œํ˜„ํ•˜๊ณ 
  • mesh๋Š” vertex color๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ triangle ์—์„œ interpolation ํ•ด์„œ ํ‘œํ˜„ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

2. PCD (Point Cloud Data)

๐Ÿ“ ํŠน์ง•

  • Point Cloud Library (PCL)์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” Point cloud ๋ฐ์ดํ„ฐ ํฌ๋งท์ด๋‹ค.
  • ASCII, ๋ฐ”์ด๋„ˆ๋ฆฌ, ์••์ถ• ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•์‹์„ ์ง€์›
  • XYZ ์ขŒํ‘œ, RGB, ๋ฒ•์„ , ๋ฐ˜์‚ฌ์œจ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  • PCL์„ ์‚ฌ์šฉํ•  ๋•Œ (ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ ํ•„ํ„ฐ๋ง, ์ •๋ ฌ, ๋ถ„ํ•  ๋“ฑ)
  • LiDAR ์Šค์บ” ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ์ฒ˜๋ฆฌ

 

3. OBJ (+ MTL)

๐Ÿ“ ํŠน์ง•

  • 3D Mesh ๋ฐ์ดํ„ฐ ์ €์žฅ์— ๊ฐ€์žฅ ๋„๋ฆฌ ์“ฐ์ด๋Š” ํฌ๋งท์ด๋‹ค.
  • ์ •์ (Vertex), ๋ฉด(Face), ๋ฒ•์„ (Normal), UV ๋งต(Texture Coordinates) ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ…์Šค์ฒ˜(Texture) ์ •๋ณด๋Š” ๋ณ„๋„์˜ `.mtl` (Material Library) ํŒŒ์ผ์— ์ €์žฅ๋œ๋‹ค.

๐Ÿ“ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  • 3D ๋ชจ๋ธ ์ €์žฅ (AR/VR, ๊ฒŒ์ž„, 3D ํ”„๋ฆฐํŒ… ๋“ฑ)
  • ๋ฉ”์‹œ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ๋ถ„์„ (๋”ฅ๋Ÿฌ๋‹, ๋ Œ๋”๋ง ๋“ฑ)

 

mtllib f9c955b7467aea60bb17e584a89c7b57_obj0_object.mtl
v -0.41838332895 -0.100635208392 0.0562479311505
v -0.359337028451 -0.100635208392 0.0442104636768
...

vt -5.0965 1.0390
vt -0.0000 -0.0000
...
usemtl Color_003
f 1/1 2/2 3/3
f 2/2 1/1 4/4
...

 

์š”์†Œ ์„ค๋ช… ๋””ํ…Œ์ผ ์˜ˆ์ œ
v 3D Vertex ์ขŒํ‘œ v x y z ํ˜•์‹์œผ๋กœ, 3D ๊ณต๊ฐ„์—์„œ ์ •์ (Vertex)์˜ ์ขŒํ‘œ๋ฅผ ์ •์˜ v -0.418 -0.100 0.056
vt ํ…์Šค์ฒ˜ ์ขŒํ‘œ vt u v ํ˜•์‹์œผ๋กœ, 3D ๋ชจ๋ธ์— ์ ์šฉ๋  2D ํ…์Šค์ฒ˜ UV Mapping๋ฅผ ์ •์˜ vt -5.0965 1.0390
f face ์ •์˜ f a/b c/d e/f ํ˜•์‹์œผ๋กœ,3D ๋ชจ๋ธ์˜ ๋ฉด(Face)์„ ์ •์˜

a → Vertex) ์ธ๋ฑ์Šค (v์—์„œ ์ •์˜ํ•œ ๋ฒˆํ˜ธ)
b → ํ…์Šค์ฒ˜ ์ขŒํ‘œ ์ธ๋ฑ์Šค (vt์—์„œ ์ •์˜ํ•œ ๋ฒˆํ˜ธ)

f 1/1 2/2 3/3
usemtl ์‚ฌ์šฉํ•  ๋จธํ‹ฐ๋ฆฌ์–ผ ์„ค์ •   usemtl Color_003

 

  • OBJ ํŒŒ์ผ์€ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์œผ๋กœ ์ €์žฅ
  • 3D ๋ชจ๋ธ์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด Vertex, ํ…์Šค์ฒ˜ ์ขŒํ‘œ, Face ์ •๋ณด๋ฅผ ํฌํ•จ
  • .mtl ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋จธํ‹ฐ๋ฆฌ์–ผ ๋ฐ ํ…์Šค์ฒ˜ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•

'๐Ÿ“– Fundamentals > 3D vision & Graphics' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[3D Vision] Marching Cubes: 3D ๋ณผ๋ฅจ ๋ฐ์ดํ„ฐ๋ฅผ Mesh๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•  (0) 2025.03.24
[3D Vision] Point Cloud vs. Mesh: ์ฐจ์ด์ , ๋ณ€ํ™˜ ๋ฐฉ๋ฒ•  (0) 2025.03.12
[CV] SFM (Structure From Motion) : ์—ฐ์†๋œ 2D ์ด๋ฏธ์ง€๋“ค๋กœ ์นด๋ฉ”๋ผ ํฌ์ฆˆ์™€ 3D shape ์žฌ๊ตฌ์„ฑํ•˜๊ธฐ  (0) 2022.06.05
[CV] 3D Geometry ์„ค๋ช…  (0) 2022.04.04
[Graphics] 3D ๋ชจ๋ธ๋ง์„ ์œ„ํ•œ OBJ & MTL ํŒŒ์ผ ๊ตฌ์กฐ์™€ PBR ์žฌ์งˆ ์ •๋ฆฌ  (0) 2022.04.04
'๐Ÿ“– Fundamentals/3D vision & Graphics' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [3D Vision] Marching Cubes: 3D ๋ณผ๋ฅจ ๋ฐ์ดํ„ฐ๋ฅผ Mesh๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•
  • [3D Vision] Point Cloud vs. Mesh: ์ฐจ์ด์ , ๋ณ€ํ™˜ ๋ฐฉ๋ฒ•
  • [CV] SFM (Structure From Motion) : ์—ฐ์†๋œ 2D ์ด๋ฏธ์ง€๋“ค๋กœ ์นด๋ฉ”๋ผ ํฌ์ฆˆ์™€ 3D shape ์žฌ๊ตฌ์„ฑํ•˜๊ธฐ
  • [CV] 3D Geometry ์„ค๋ช…
๋ญ…์ฆค
๋ญ…์ฆค
AI ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ
    ๋ฐ˜์‘ํ˜•
  • ๋ญ…์ฆค
    CV DOODLE
    ๋ญ…์ฆค
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • โœจ About Me
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (198)
      • ๐Ÿ“– Fundamentals (33)
        • Computer Vision (9)
        • 3D vision & Graphics (6)
        • AI & ML (15)
        • NLP (2)
        • etc. (1)
      • ๐Ÿ› Research (64)
        • Deep Learning (7)
        • Image Classification (2)
        • Detection & Segmentation (17)
        • OCR (7)
        • Multi-modal (4)
        • Generative AI (6)
        • 3D Vision (2)
        • Material & Texture Recognit.. (8)
        • NLP & LLM (11)
        • etc. (0)
      • ๐ŸŒŸ AI & ML Tech (7)
        • AI & ML ์ธ์‚ฌ์ดํŠธ (7)
      • ๐Ÿ’ป Programming (85)
        • Python (18)
        • Computer Vision (12)
        • LLM (4)
        • AI & ML (17)
        • Database (3)
        • Apache Airflow (6)
        • Docker & Kubernetes (14)
        • ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ (4)
        • C++ (1)
        • etc. (6)
      • ๐Ÿ’ฌ ETC (3)
        • ์ฑ… ๋ฆฌ๋ทฐ (3)
  • ๋งํฌ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    multi-modal
    CNN
    ๊ฐ์ฒด๊ฒ€์ถœ
    ๊ฐ์ฒด ๊ฒ€์ถœ
    Python
    LLM
    ์ปดํ“จํ„ฐ๋น„์ „
    AI
    ํ”„๋กฌํ”„ํŠธ์—”์ง€๋‹ˆ์–ด๋ง
    airflow
    ChatGPT
    Text recognition
    VLP
    ํŒŒ์ด์ฌ
    ๋„์ปค
    3D Vision
    GPT
    Image Classification
    OpenCV
    pandas
    segmentation
    object detection
    deep learning
    OpenAI
    Computer Vision
    nlp
    ๋”ฅ๋Ÿฌ๋‹
    pytorch
    OCR
    material recognition
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
๋ญ…์ฆค
[3D Vision] 3D ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(Mesh, Point Cloud)์™€ ํฌ๋งท(OBJ, PLY, PCD)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”