PLY

**PLY**는 **폴리곤 파일 포맷**(Polygon File Format) 또는 **스탠퍼드 트라이앵글 포맷**(Stanford Triangle Format)으로 알려진 컴퓨터 파일 형식이다. 이 형식은 주로 3D 스캐너로부터 얻은 3차원 데이터를 저장하기 위해 설계되었다. 데이터 저장 방식은 명목상 평면인 다각형의 목록으로 단일 객체를 비교적 간단하게 묘사하는 것을 지원한다. 색상과 투명도, 표면 법선(surface normals), 텍스처 좌표 및 데이터 신뢰도 값 등을 포함한 다양한 속성을 저장할 수 있다. 또한 다각형의 앞면과 뒷면에 대해 서로 다른 속성을 가질 수 있도록 허용한다.

이 파일 형식에는 두 가지 버전이 있는데, 하나는 ASCII 형식이고 다른 하나는 이진 파일 형식이다.

## 파일 형식

Ply 파일은 메시의 요소와 그 유형을 지정하는 "헤더(header)" 속성으로 시작하며, 그 뒤에 요소 자체의 목록이 이어진다. 요소는 보통 정점(vertices)과 면(faces)이지만, 모서리(edges), 범위 지도(range maps)의 샘플, 삼각형 띠(triangle strips)와 같은 다른 엔티티가 포함될 수도 있다.

ASCII와 이진 파일 모두 헤더는 ASCII 텍스트로 되어 있다. 헤더 뒤에 오는 수치 데이터만이 두 버전 간에 차이가 있다.
헤더는 항상 다음 내용을 포함하는 한 줄인 "매직 넘버"로 시작한다.

 ply

이것은 해당 파일이 PLY 파일임을 식별한다. 두 번째 줄은 이 파일이 PLY 형식의 어떤 변체인지를 나타낸다. 다음 중 하나여야 한다.

 format ascii 1.0
 format binary_little_endian 1.0
 format binary_big_endian 1.0

표준의 향후 버전에서는 끝에 있는 개정 번호가 변경되겠지만, 현재 사용되는 버전은 1.0이 유일하다.

줄 시작 부분에 `comment`라는 단어를 사용하여 헤더에 주석을 남길 수 있다. 그 부분부터 줄 끝까지의 모든 내용은 무시된다. 예:

 comment This is a comment!

`element` 키워드는 특정 데이터 요소가 어떻게 저장되는지와 그 요소가 몇 개인지에 대한 설명을 도입한다. 따라서 12개의 정점이 있고 각각 부동 소수점 (X, Y, Z) 세 쌍으로 표현되는 파일의 경우 다음과 같은 내용을 볼 수 있다.

 element vertex 12
 property float x
 property float y
 property float z

다른 `property` 줄은 각 정점에 색상이나 다른 데이터 항목이 저장됨을 나타내고 해당 정보의 데이터 유형을 지정할 수 있다. 데이터 유형에 대해서는 ply 파일의 출처에 따라 두 가지 변체가 있다. 유형은 `char uchar short ushort int uint float double` 중 하나로 지정하거나, `int8 uint8 int16 uint16 int32 uint32 float32 float64` 중 하나로 지정할 수 있다. 10개의 다각형 면을 가진 객체의 경우 다음과 같이 보일 수 있다.

 element face 10
 property list uchar int vertex_index

PLY 구현체마다 속성 이름이 매우 다양하다. 예를 들어 블렌더와 VTK에서는 `vertex_index`보다 `vertex_indices`가 더 자주 사용된다. 확장 사양에는 속성 이름의 "핵심 목록(필수)", "보조 목록(자주 사용됨)", "세 번째 목록(제안된 확장)"이 나열되어 있다.

`list`라는 단어는 데이터가 값의 목록임을 나타내며, 그중 첫 번째는 목록의 항목 수이다(이 예에서는 'uchar'로 표현됨). 이 예에서 각 목록 항목은 'int'로 표현된다. 헤더의 끝에는 항상 다음과 같은 줄이 있어야 한다.

 end_header

## ASCII 또는 이진 형식
ASCII 버전의 형식에서 정점과 면은 각각 공백으로 구분된 숫자로 한 줄에 하나씩 설명된다. 이진 버전에서 데이터는 헤더에 지정된 `endianness`(엔디언)에 맞게, 그리고 `property` 레코드에 주어진 데이터 유형에 따라 단순히 밀접하게 패킹된다. 다각형을 나타내는 일반적인 `property list...` 표현의 경우, 해당 요소의 첫 번째 숫자는 다각형이 가진 정점의 수이고 나머지 숫자는 앞선 정점 목록에 있는 해당 정점들의 인덱스이다.

## 역사

PLY 형식은 90년대 중반에 마크 르보이(Marc Levoy)의 지도 아래 그레그 터크와 스탠퍼드 그래픽 연구소의 다른 이들에 의해 개발되었다. 그 설계는 웨이브프론트 .obj 형식에서 영감을 받았다. 그러나 Obj 형식은 임의의 속성 및 그룹화에 대한 확장성이 부족했기 때문에, 정점, 면, 관련 데이터 및 기타 그룹의 개념을 일반화하기 위해 `property` 및 `element` 키워드가 고안되었다.

## 예시 파일

다음은 블렌더 버전 4.0.2에서 내보낸 큐브 메시를 설명하는 PLY 파일의 전체 예시이다.

 ply
 format ascii 1.0
 comment Created in Blender version 4.0.2
 element vertex 14
 property float x
 property float y
 property float z
 property float nx
 property float ny
 property float nz
 property float s
 property float t
 element face 6
 property list uchar uint vertex_indices
 end_header
 1 1 1 0.5773503 0.5773503 0.5773503 0.625 0.5
 -1 1 1 -0.5773503 0.5773503 0.5773503 0.875 0.5
 -1 -1 1 -0.5773503 -0.5773503 0.5773503 0.875 0.75
 1 -1 1 0.5773503 -0.5773503 0.5773503 0.625 0.75
 1 -1 -1 0.5773503 -0.5773503 -0.5773503 0.375 0.75
 -1 -1 1 -0.5773503 -0.5773503 0.5773503 0.625 1
 -1 -1 -1 -0.5773503 -0.5773503 -0.5773503 0.375 1
 -1 -1 -1 -0.5773503 -0.5773503 -0.5773503 0.375 0
 -1 -1 1 -0.5773503 -0.5773503 0.5773503 0.625 0
 -1 1 1 -0.5773503 0.5773503 0.5773503 0.625 0.25
 -1 1 -1 -0.5773503 0.5773503 -0.5773503 0.375 0.25
 -1 1 -1 -0.5773503 0.5773503 -0.5773503 0.125 0.5
 1 1 -1 0.5773503 0.5773503 -0.5773503 0.375 0.5
 -1 -1 -1 -0.5773503 -0.5773503 -0.5773503 0.125 0.75
 4 0 1 2 3
 4 4 3 5 6
 4 7 8 9 10
 4 11 12 4 13
 4 12 0 3 4
 4 10 9 0 12

파일은 ASCII 형식의 파일을 정의하는 헤더로 시작한다. 총 14개의 정점(6개 면 * 4개 정점 - 병합으로 인해 저장된 10개의 정점)과 6개의 면이 있다. 헤더 다음에는 정점 및 면 데이터가 나열된다. 정점 목록에는 14개 정점 각각에 대한 위치(x,y,z), 법선(nx,ny,nz) 및 텍스처 좌표(s,t)가 포함되어 있다. 면 목록에는 6개의 사각형 면 각각에 대한 정점 수(4)와 정점 인덱스가 포함되어 있다.

## 같이 보기
* STL (파일 포맷): 3D 프린팅에 흔히 사용되는 또 다른 파일 형식
* Additive Manufacturing File Format
* 웨이브프론트 .obj 파일: .obj 파일 확장자를 가진 3D 기하학 정의 파일 형식
* GlTF: 3D 장면 및 모델을 위한 크로노스 그룹 파일 형식
* 유니버설 씬 디스크립션 (USD)

## 오픈 소스 소프트웨어
* CloudCompare: 메시를 위한 일부 추가 기능과 함께 점구름에 중점을 둠.
* GigaMesh Software Framework: PLY(또는 OBJ) 메시의 수치 계산.
* 메시랩: 3차원 메시를 PLY 파일 형식으로 시각화, 처리 및 변환하기 위한 일반 용도의 애플리케이션.

## 각주

## 외부 링크
* 의회 도서관 형식 설명
* PLY - Polygon File Format
* PLY 파일 작업을 위한 몇 가지 도구 (C 소스 코드)
* rply - PLY 파일 읽기 및 쓰기를 위한 Ansi C 소프트웨어 라이브러리 (MIT 라이선스)
* libply - PLY 파일 읽기 및 쓰기를 위한 C++ 소프트웨어 라이브러리 (GNU 라이선스)
* plyodine - PLY 파일 읽기 및 쓰기를 위한 C++23 라이브러리 (BSD 라이선스)
* PLY 파일 읽기 및 쓰기를 위한 또 다른 C++ 소프트웨어 라이브러리 (GPL 3.0 라이선스)
* PLY 형식으로 저장된 3D 모델 저장소

분류:CAD 파일 포맷
분류:3차원 그래픽스 파일 포맷