#お役立ちコラム
PLYファイルとは|メッシュ・点群・3DGSの見分け方と開き方

PLYファイル(拡張子 .ply)は、3Dの形状を点や面の集まりとして保存・交換するためのファイル形式です。
この記事では、PLYの構造、メッシュ・点群・3DGSの見分け方、目的に合う開き方、STL・OBJ・LASとの違い、変換や受け渡しの前に確認する項目を順に整理します。
執筆: bestat 編集部
PLYファイルとは
PLYは、3Dの形状を頂点や面の集まりとして記述し、保存・交換するためのファイル形式です。仕様では「ポリゴンの集まりとして記述されるグラフィックスオブジェクトを保存するための形式」と説明されています(Greg Turk「PLY - Polygon File Format」)。Polygon File Format の略で、Stanford Triangle Format とも呼ばれます。
スタンフォード大学で開発された形式です。同大学が公開する3Dスキャンデータも、断りがない限りPLYで配布されています(Stanford 3D Scanning Repository)。頂点や面に色・法線などの属性を付けられるため、形状だけでなく見た目の情報も一緒に運べます。
実際に .ply を受け取るのは、次のような場面です。
3Dスキャナやスキャン用アプリが出力した形状データ
レーザー計測や深度センサーで取得した点群
フォトグラメトリ(複数の写真から3D形状を作る方法)の処理結果
3DGSの学習結果として書き出されたデータ
研究用に公開されている3Dモデルのサンプル
PLYファイルの中身と構造
PLYファイルは、先頭のヘッダと、その後ろのデータ部に分かれます。ヘッダには「どの要素が何個あり、各要素がどの値をどの順で持つか」がテキストで書かれ、データ部にはその宣言どおりの数値が並びます。
ヘッダは必ず ply の4文字で始まり、end_header の行で終わります。この4文字はファイルの種類を示す印として決められています(Greg Turk「PLY - Polygon File Format」)。
仕様に載っている立方体の例では、ヘッダは次の行で構成されます。
ヘッダの行 | 意味 |
|---|---|
ply | ファイルの先頭4文字。PLYであることを示す |
format ascii 1.0 | データ部の書き方とバージョン。ascii / binary_little_endian / binary_big_endian のいずれか |
comment made by Greg Turk | 注記。読み込み時は無視される |
element vertex 8 | 「頂点」という要素が8個ある |
property float x | 各頂点が float 型の x を持つ(y・z も同様に宣言する) |
element face 6 | 「面」という要素が6個ある |
property list uchar int vertex_index | 面ごとに個数が変わるリスト。先頭に頂点の個数、続けて頂点番号が並ぶ |
end_header | ヘッダの終わり。次の行からデータ部 |
この8行を読むだけで、頂点が8個あり、それぞれが x・y・z を持ち、面が6個あることが分かります。データ部では、まず頂点8行、続けて面6行が宣言順に並びます。
elementとproperty
element は「何が何個あるか」、property は「各要素が持つ値と、その並び順」を宣言します。標準的に使われるのは vertex(頂点)と face(面)で、edge(辺)や独自の要素を足すこともできます。
property には、値が1つのスカラー型と、個数が可変のリスト型があります。スカラー型は char・uchar・short・ushort・int・uint・float・double の8種類です。仕様は、これらのバイト数をファイルの持ち運びに関わる要素とし、実装によって変えてはならないとしています。
リスト型は面の記述に使います。三角形と四角形が混在すると面ごとに頂点数が変わるため、先頭に個数を置いてから頂点番号を並べる形になっています。
ASCII形式とバイナリ形式の違い
PLYには、数値を文字として並べるASCII形式と、バイト列として格納するバイナリ形式があります。仕様は前者を「始めやすさのため」、後者を「容量を抑え、保存と読み込みを速くするため」と位置づけています。
比較項目 | ASCII形式 | バイナリ形式 |
|---|---|---|
format 行 | format ascii 1.0 | format binary_little_endian 1.0 など |
データ部 | 数値を文字として1行ずつ並べる | 宣言した型のバイト数で連続して格納する |
テキストエディタ | ヘッダもデータ部も読める | ヘッダは読める。データ部は文字化けする |
容量と読み書き | 大きくなり、読み書きも遅くなりやすい | 小さく、読み書きが速い |
追加で決まること | なし | バイト順(リトルエンディアンかビッグエンディアンか) |
ヘッダはどちらの形式でもテキストで書かれ、format 行の語だけが入れ替わります。この性質が、後述する中身の見分け方の前提になります。
スタンフォード大学のリポジトリは、公開データの多くをASCII形式にしています。理由として、形式に慣れていない人でも中身をつかめること、バイト順の取り違えを避けられることを挙げています(Stanford 3D Scanning Repository)。
同じ.plyでもメッシュ・点群・3DGSに分かれる
PLYは要素とプロパティを自由に足せる設計のため、面を持つメッシュ、面を持たない点群、3DGS用のデータが同じ拡張子で流通します。実装がばらついた結果ではなく、仕様が意図した拡張性がそのまま現れています。
仕様は、新しいプロパティの追加について次のように述べています(Greg Turk「PLY - Polygon File Format」)。
New properties are added in such a way that old programs do not break when these new properties are encountered. Properties that are not understood by a program can either be carried along uninterpreted or can be discarded.
読み込む側が理解できないプロパティは、意味を解釈しないまま持ち回すか、捨てるかを選べます。この前提があるため、後から生まれた3DGSのようなデータも、新しい拡張子を作らずにPLYへ載せられました。
中身のタイプ | ヘッダに現れる特徴 | 何を表しているか |
|---|---|---|
メッシュPLY | element face があり、個数が1以上。property list … vertex_index を持つ | 頂点と、頂点を結んだ面 |
点群PLY | element vertex だけ。face が無いか、個数が0 | 点の座標と、色・法線などの属性 |
3DGS PLY | element vertex に scale_0、rot_0、opacity、f_dc_0 などが並ぶ | 粒1つずつの位置・大きさ・向き・不透明度・色 |
点群は物の表面を多数の点で表したデータ、メッシュはその点を結んで面にしたデータです。違いと使い分けは点群データとはで整理しています。
3DGSのPLYは何が違うか
3DGS用のPLYは、頂点1つを「半透明な粒」として扱い、そのパラメータをプロパティとして持ちます。PlayCanvasの解説では、位置(x・y・z)、大きさ(scale_0〜2)、回転を表す四元数(rot_0〜3)が並びます。続けて不透明度、基本色(f_dc_0〜2)、見る向きによる色の変化(f_rest_0〜44)が格納されます(PlayCanvas「PLY フォーマット」)。
同じ資料は、3DGSのPLYを接続情報のない点データと説明しています。含まれる点は数十万から数百万で、圧縮がないためファイルは1シーンあたり50MBから数GBに達することがあります。メッシュ用のソフトで開いても、面が無いうえにプロパティも解釈されないため、期待した見た目にはなりません。
規格が許す拡張と、ソフトが読める範囲は別
プロパティを自由に足せることと、受け取ったソフトがそれを読めることは別の話です。MATLABの拡張機能であるComputer Vision Toolboxを例にとります。点群データ関数がサポートするプロパティは、(x,y,z) 座標・法線・色に限られます(MathWorks「PLY 形式」)。
そのため、渡した属性が相手側で無視されることがあります。読み込み後に消えて困る属性がある場合は、受け取り側のソフトが対応しているかを事前に確認します。
手元のPLYがどのタイプかを見分ける
拡張子とファイル名では判別できないため、テキストエディタでファイルを開き、先頭のヘッダを読みます。バイナリ形式でもヘッダはテキストで書かれているので、判別に必要な部分は読めます。
大きなファイルは、開くのに時間がかかったり、エディタが応答しなくなったりします。先頭の数十行だけを表示できるエディタや、ファイルを部分的に読み込む機能を使うと確認が速く済みます。
確認する順序は次のとおりです。
.ply をテキストエディタで開きます。2行目の format 行が ascii か binary_little_endian か binary_big_endian かを見ます。
element vertex の後ろの数字を見ます。これが頂点数で、点群であれば点数にあたります。
element face があるかを見ます。あって個数が1以上なら、面を持つメッシュです。
property の並びを見ます。scale_0、rot_0、opacity、f_dc_0 が並んでいれば3DGSのデータです。
red・green・blue があれば色を、nx・ny・nz があれば法線を持っています。
end_header の次の行からがデータ部です。ASCII形式なら、propertyの宣言順に数値が並びます。
ヘッダが読めないときに疑うこと
ヘッダの見え方から、ファイル自体の状態も切り分けられます。
見えている状態 | 考えられること | 次にすること |
|---|---|---|
先頭が ply で始まっていない | PLYではない、または転送や保存の途中で壊れている | 拡張子の付け替えでないかを確認し、作成元から取り直す |
end_header の後ろが文字化けしている | バイナリ形式。異常ではない | ヘッダだけでタイプを判定し、対応ソフトで開く |
element vertex の個数が0 | 中身が空のまま書き出されている | 書き出し側の選択範囲と出力設定を確認する |
大きすぎてエディタで開けない | 点数が多い、またはASCII形式で容量が膨らんでいる | 先頭だけを読める方法で開き直す |
PLYファイルの開き方
開く目的によって、使うソフトが分かれます。メッシュとして編集するのか、点群として処理するのか、3DGSとして表示するのかを先に決めると候補が絞れます。
中身のタイプに合わないソフトで開くと、読み込めない、点が表示されない、色が出ないといった症状になります。前節の手順でタイプを確かめてから選べば、こうした症状の原因を後から探さずに済みます。
目的 | ソフトの例 | 開いた後に確認すること |
|---|---|---|
メッシュとして見る・編集する | 面の数、頂点カラーの読み込み設定、上方向の軸 | |
点群として処理する | CloudCompare などの点群処理ソフト | 点数、色や法線の有無、点の表示サイズ |
3DGSとして表示する | SuperSplat などの3DGS対応ビューア | ファイルサイズと、読み込みに必要なメモリ |
中身だけ確認する | テキストエディタ | ヘッダの element と property |
Blenderのマニュアルは、ASCIIとバイナリのどちらのPLYも読み込めると説明しています。頂点カラーの読み込みは「読み込まない」「sRGB」「リニア」から選びます。書き出し時にはASCII形式を選べるほか、上方向と前方向の軸を指定できます。
色が付かないときに見るところ
PLYの色は頂点そのものに付いており、写真のようなテクスチャ画像はファイルに含まれません。色が出ない原因は、元データに色のプロパティが無いか、読み込み側が頂点カラーを表示していないかのどちらかです。
ヘッダに red・green・blue があるかを確認する。無ければ、そのファイルは色を持っていない
読み込み時の頂点カラーの設定が「読み込まない」になっていないかを確認する
表示モードを切り替え、頂点カラーが反映される設定になっているかを確認する
材質や質感まで含めて渡したい場合は、画像を参照できる形式への変更を作成元と相談する
仕様上、PLYはテクスチャ座標を持てますが、テクスチャそのものの記述は含みません(Greg Turk「PLY - Polygon File Format」)。画像で表現された質感は、PLYを渡すだけでは相手に届きません。
STL・OBJ・LASとの違い
面だけを渡すならSTL、テクスチャ画像を伴う見た目まで渡すならOBJ、測量由来の点群ならLASが使われます。PLYは、点にもメッシュにも属性を足せる位置にあり、点群とメッシュのどちらも同じ形式で運べます。
形式 | 主に運ぶもの | 色の持ち方 | 点群の扱い |
|---|---|---|---|
PLY | 頂点・面と、任意の属性 | 頂点ごとの色。テクスチャ画像は含まない | 面を持たない点群も表せる |
STL | 三角形の面と法線 | 色の情報を含まない | 表せない |
OBJ | 頂点・面・テクスチャ座標 | 別ファイル(.mtl)と画像で持てる | メッシュ向け |
LAS | 点群と、計測に由来する属性 | 形式によって点ごとのRGB | 点群のための形式 |
STLが記述するのは三角形の面と、その法線です(Paul Bourke「STL format」)。OBJは材質を .mtl という別ファイルで参照し、そこに色・テクスチャ・反射の設定が書かれます(Wavefront「MTL material format」)。LASは、機器やソフトをまたいで点群を交換するためにASPRS(米国写真測量・リモートセンシング学会)が定めた形式です(ASPRS LAS仕様)。
どの形式を選ぶかは、渡す相手が何を再現したいかで決まります。形式全体の見取り図は3Dデータのファイル形式にまとめています。
変換・受け渡しの前に確認すること
PLYには、単位も、座標の原点も、変換行列も書かれていません。ファイルを渡すだけでは寸法と位置が決まらないため、次の項目を別途そろえて伝えます。
仕様は、PLYがシーンを記述するための形式ではないと明記しています(Greg Turk「PLY - Polygon File Format」)。
The PLY format is NOT intended to be a general scene description language, a shading language or a catch-all modeling format. This means that it includes no transformation matrices, object instantiation, modeling hierarchies, or object sub-parts.
1つのPLYファイルが記述するのは1つのオブジェクトだけです。複数の部品を配置や階層のまま1ファイルで渡すことはできないため、部品ごとに分けるか、階層を持てる別の形式を選びます。
確認項目 | 決めること | 決まっていないと起きること |
|---|---|---|
単位 | 座標値がミリメートルかメートルか | 寸法が1000倍や1/1000でずれる |
座標の原点と軸 | どこを原点とし、どの軸が上か | 位置が合わない、モデルが横倒しで開く |
色と法線の有無 | red・green・blue、nx・ny・nz を含めるか | 色が出ない、陰影が想定と変わる |
ASCIIかバイナリか | format 行をどちらにするか | 相手のソフトで読めない、容量と読み込み時間が変わる |
点数・面数とファイルサイズ | データの規模 | 受け取り側の環境で開けない |
変換で落ちる情報を先に決める
形式を変換すると、変換先が持てない情報は失われます。何を残すかを決めてから変換すると、やり直しを避けられます。
3DGSの scale や opacity といったプロパティは、通常のメッシュ形式には持ち込めません
色や法線は、変換先の形式と書き出し設定によって残るかどうかが変わります
点群からメッシュへの変換は、形式の変換ではなく面を作る処理です。手順は点群データのメッシュ化で扱っています
ASCIIとバイナリの相互変換では要素の構成は変わりませんが、ASCIIで書き出すときは数値の桁数の設定を確認します
変換後は、点数・面数、色や法線の有無、代表的な寸法の3点を確認します。ファイルが開けることと、必要な情報が残っていることは別に確かめる必要があります。
よくある質問
PLYをx・y・zの座標が並んだテキストに取り出せますか
ASCII形式のPLYであれば、end_header の次の行から頂点数分の行が、propertyの宣言順に並んでいます。x・y・zだけを宣言したファイルなら、その部分がそのまま座標の一覧です。色や法線も宣言されている場合は、行の後ろにその値が続きます。
バイナリ形式の場合は、そのままではテキストとして読めません。点群処理ソフトやメッシュ処理ソフトでASCII形式のPLYやテキスト形式の点群として書き出すか、書き出し元のソフトで形式を選び直します。書き出した後は、列の意味がヘッダの宣言順と一致しているかを確認してください。
3DプリンタでPLYは使えますか
対応するかはスライサ(3Dモデルを印刷用の指示に変換するソフト)によって分かれます。PrusaSlicerが挙げる入力形式は3MF・STL・STEP・OBJ・AMFで、PLYは含まれていません(Prusa Knowledge Base)。UltiMaker Curaは、読み込み対応の拡張子に .ply を含んでいます(Curaの読み込みプラグイン)。
前提として、印刷に使えるのは面を持つメッシュPLYです。点群PLYや3DGS PLYは面を持たないため、そのままでは印刷できず、点群データのメッシュ化にあたる処理が必要になります。
PLYのサンプルファイルはどこで手に入りますか
代表的な入手先は、スタンフォード大学が公開するStanford 3D Scanning Repositoryです。3Dスキャンから作られたモデルがPLYで配布されており、ASCII形式のファイルはテキストエディタでヘッダとデータ部の対応をそのまま確認できます。
ソフトの動作確認に使う場合は、点数の少ないモデルから試すと読み込み時間を抑えられます。データの利用条件は配布ページの記載を確認してください。
まとめ
PLYは、3Dの形状を頂点や面の集まりとして保存・交換するための形式で、ヘッダに「何が何個、どの順で入っているか」がテキストで書かれています。要素とプロパティを自由に足せる設計のため、同じ .ply でもメッシュ・点群・3DGSに分かれます。
受け取ったファイルは、テキストエディタでヘッダを開いて確かめます。見るのは format 行、element vertex の数、element face の有無、propertyの並びです。ここまで分かれば、どのソフトで開けばよいかが決まります。
渡す側では、ファイルに書かれない情報を別途伝えます。単位、座標の原点と軸、色と法線の有無、ASCIIかバイナリか、データの規模の5点をそろえておくと、受け取り側での手戻りを減らせます。
3D.Core のサービス紹介資料をダウンロードできます。→ 資料ダウンロード
bestat 編集部について
bestat株式会社は、東京大学 松尾研究室発の産業用3Dデータに特化したAIスタートアップです。製造業・インフラ・土木の現場で、画像・動画・点群・360度動画などから3Dデータを生成・処理・活用する「3D.Core」シリーズを開発・提供しています。https://bestat-data.com/3dcore

