メッシュ・CAD・点群・ボリュームなどの表現方式と、代表的なファイル形式の特徴・構造・使い分け
ファイル形式を理解する前に、「形をどう数値で表すか」という表現方式を押さえておくと整理しやすくなります。多くの形式は、以下のどれか(または複数)を保存するための入れ物です。
メッシュは「表面だけを平面のつぎはぎで近似」、B-rep は「数式で厳密に」、点群は「つながりを持たない標本」、ボクセルは「内部まで格子で」表す、と捉えると違いがわかりやすいでしょう。用途に応じて相互に変換されます(例:点群 → メッシュ化、CAD → メッシュ化して3Dプリント、メッシュ → ボクセル化してシミュレーション)。
形状そのもの(頂点と面)を中心に保存する、比較的シンプルな形式です。研究用データセットや3Dプリントでよく使われます。
光造形(ステレオリソグラフィ)用に作られた形式で、現在も3Dプリントの事実上の標準です。三角形ごとに「法線ベクトル+3頂点の座標」を並べるだけの極めて単純な構造です。
頂点を共有せず三角形ごとに座標を重複して持つため、ファイルが大きくなり、隣接関係(どの三角形がつながっているか)も読み込み後に再構築する必要があります。色・材質・単位の情報は持ちません(mm か inch かは受け手が判断します)。バイナリ版は「80バイトのヘッダー+三角形数(uint32)+1三角形あたり50バイト」という固定長構造です。
行頭のキーワードで意味を表すテキスト形式です。v(頂点座標)、vt(テクスチャ座標)、vn(法線)、f(面)が基本で、面は「頂点/テクスチャ座標/法線」の番号の組で指定します。番号は1から始まる点に注意が必要です。
材質は別ファイルの MTL(mtllib で参照、usemtl で適用)に書き、テクスチャ画像はさらに別ファイルになります。人が読めて実装が容易なため、ほぼすべての3Dソフトが対応しています。一方、アニメーションやシーン階層は扱えません。
Stanford 3D Scanning Repository(Bunny、Dragon、Lucy など)で使われ、研究分野で広く普及しました。ヘッダーで element(vertex、face など)と property(型と名前)を宣言し、その定義どおりに本体を並べる自己記述的な構造が特徴です。
頂点色・法線・信頼度・反射強度などの任意の属性を追加できます。そのため、メッシュだけでなく点群の保存にもよく使われます。最近では 3D Gaussian Splatting の学習結果(ガウシアンの位置・共分散・球面調和係数)を保存する器としても用いられています。
先頭に OFF、次に頂点数・面数・辺数、続いて頂点座標と面のリストを並べるだけの最小構成の形式です。Princeton Shape Benchmark や ModelNet など、形状解析・機械学習のデータセットで見かけます。
STL の欠点を補う3Dプリント向けの後継形式です。ZIP アーカイブの中に XML で頂点共有型のメッシュを格納します。単位、色、材料、複数オブジェクトの配置、プリント設定などを1ファイルにまとめられ、主要なスライサーが対応しています。
Web で3Dを扱うために1990年代に作られた形式で、X3D はその XML ベースの後継です。シーングラフ(階層構造)を表現できます。現在は Web 用途では glTF に置き換わりつつありますが、フルカラー3Dプリントの入稿形式としては今も使われることがあります。
4つの頂点 (0,0,0), (1,0,0), (0,1,0), (0,0,1) を持つ四面体を各形式で表すと、次のようになります。面の頂点順は、外側から見て反時計回りです。
# tetrahedron
v 0 0 0
v 1 0 0
v 0 1 0
v 0 0 1
f 1 3 2
f 1 2 4
f 1 4 3
f 2 3 4
OFF
4 4 6
0 0 0
1 0 0
0 1 0
0 0 1
3 0 2 1
3 0 1 3
3 0 3 2
3 1 2 3
ply
format ascii 1.0
element vertex 4
property float x
property float y
property float z
element face 4
property list uchar int vertex_indices
end_header
0 0 0
1 0 0
0 1 0
0 0 1
3 0 2 1
3 0 1 3
3 0 3 2
3 1 2 3
solid tetrahedron
facet normal 0 0 -1
outer loop
vertex 0 0 0
vertex 0 1 0
vertex 1 0 0
endloop
endfacet
...(残り3面も同様)
endsolid tetrahedron
3 は、その面の頂点数を表します。
形状に加えて、材質、テクスチャ、カメラ、ライト、階層構造、骨格(スケルトン)、アニメーションなどを含む「シーン全体」をやり取りする形式です。DCC(Digital Content Creation)ツール間の受け渡しや、ゲーム・Web での配信に使われます。
「3DのJPEG」を目指して設計された、実行時の配信に向いた形式です。シーン構造を JSON(.gltf)に書き、頂点などの大量データはバイナリバッファ(.bin)に、GPU にそのまま渡せる形で格納します。これらをすべて1ファイルにまとめたものが GLB です。
物理ベースレンダリング(PBR)の metallic-roughness 材質、スキニング、モーフターゲット、アニメーションに対応しています。Draco や meshopt によるメッシュ圧縮、KTX2 によるテクスチャ圧縮などの拡張もあります。three.js、Babylon.js、Unity、Unreal、Blender など対応環境が広く、Web 3D の第一選択です。
Maya、3ds Max、MotionBuilder、Unity、Unreal などの間でモデルやアニメーションをやり取りする、映像・ゲーム業界の定番形式です。仕様は非公開で、公式 SDK を通じて扱うのが前提のため、ソフト間で解釈の差が出ることがあります。
Pixar が大規模な映画制作パイプラインのために開発したシーン記述形式です。最大の特徴はコンポジション(合成)で、複数のファイル(レイヤー)を参照・上書き・バリアント切り替えしながら1つのシーンを組み立てられます。これにより、多人数での分業が可能になります。
.usda はテキスト、.usdc はバイナリ、.usdz はそれらとテクスチャをまとめた ZIP パッケージで、Apple の AR Quick Look で使われています。NVIDIA Omniverse などのデジタルツイン基盤でも採用されています。
アニメーションやシミュレーション(布、流体のメッシュ、破壊など)の結果を、フレームごとの形状として「焼き込んで」保存する形式です。リグや計算手順は持たず、結果の形だけを効率よく受け渡します。
ツール間交換のためのオープンな XML 形式です。機能は豊富ですが、記述の自由度が高く実装ごとの差が大きいという問題がありました。現在は新規用途では glTF が推奨されます。
.3ds(旧3D Studio の形式。1オブジェクトあたり頂点数65,536の制限あり)、.blend(Blender のネイティブ形式)、.max / .ma / .mb(3ds Max・Maya のネイティブ形式)などがあります。ネイティブ形式は各ソフト専用なので、他ソフトに渡す際は上記の交換形式に書き出します。
機械設計では、形状を三角形で近似せず、NURBS 曲面や円柱面などの数式で厳密に表します。面同士のつながり(位相)も保持します。寸法の正確さが必要な製造・解析ではこちらを使います。
製品データ交換の国際標準で、異なる CAD ソフト間で B-rep 形状を渡すときの第一選択です。用途別にアプリケーションプロトコル(AP)が定められています。AP203(形状・構成管理)、AP214(自動車)、そして両者を統合した AP242 では、寸法公差などの製造情報(PMI)も扱えます。
STEP 以前から使われてきた CAD 交換形式です。曲線や曲面の受け渡しはできますが、ソリッドとしての位相情報が欠けやすく、読み込み後に面の隙間を修正する作業が必要になることがあります。古いデータや一部の業界では今も使われています。
CAD ソフトの形状計算エンジン(ジオメトリカーネル)に固有の形式もあります。Parasolid の .x_t / .x_b(SolidWorks、NX などが採用)や、ACIS の .sat などです。同じカーネルを使うソフト同士なら、ほぼ劣化なく受け渡せます。
JT(.jt、ISO 14306)は、大規模な組立品を軽く表示・共有するための形式で、多段階の詳細度(LOD)を持つメッシュと B-rep を併せて格納できます。各 CAD のネイティブ形式(.sldprt、.catpart、.prt、.ipt など)は、設計履歴(フィーチャー)まで含みますが、原則として他ソフトでは直接開けません。
レーザースキャナ(LiDAR)、深度カメラ、フォトグラメトリなどで取得した点の集合を保存する形式です。点ごとに色、反射強度、法線、分類ラベルなどの属性を持つことが多くあります。
1行に1点の座標(と色など)を並べただけの形式です。最も単純で扱いやすい反面、仕様の統一がなく、列の意味はファイルごとに確認が必要です。
面要素を持たない PLY は、そのまま点群形式として使えます。Open3D、MeshLab、CloudCompare などで標準的に扱えます。
PCL の標準形式で、ロボティクス分野(ROS など)でよく使われます。PLY と同様にヘッダーでフィールドを宣言します。加えて、センサーの位置・姿勢(VIEWPOINT)や、画像のように縦横に並んだ「組織化点群」の幅と高さを記録できます。
航空レーザー測量の標準形式です。座標系の情報、反射強度、リターン番号、地表・建物・植生などの分類コード、GPS 時刻などを持ちます。LAZ はその可逆圧縮版です。国や自治体が公開する地形点群データの多くはこの形式で配布されています。
地上型3Dレーザースキャナのデータ交換用規格です。複数スキャン位置の点群に加えて、各スキャナの位置・姿勢や、同時撮影したパノラマ画像も格納できます。
3D Gaussian Splatting は、点の代わりに半透明の3次元ガウス分布を多数配置して、写真のようなシーンを再現する手法です。学習結果は PLY に独自属性として保存されるのが一般的です。ほかに、配信用に軽量化した .splat や、圧縮形式の .spz も使われています。形式の標準化はまだ発展途上です。
表面だけでなく内部の情報まで、3次元格子の値として保存する形式です。
| 形式 | 拡張子 | 概要 |
|---|---|---|
| DICOM | .dcm | 医用画像の国際標準。CT・MRI は断面画像のシリーズとして保存され、重ねると3次元ボリュームになる。患者情報や撮影条件も含む。 |
| NIfTI | .nii / .nii.gz | 脳画像研究で標準的な形式。1ファイルに3次元(+時間)ボリュームと座標変換行列を格納する。 |
| OpenVDB | .vdb | DreamWorks Animation 発の疎(スパース)なボリューム形式。煙・炎・雲などの映像エフェクトや、レベルセットによる形状処理に使われる。 |
| RAW+メタ情報 | .raw / .mhd など | 値をそのまま並べたバイナリと、寸法・型・間隔を書いたヘッダーの組。科学計算や研究用データで多い。 |
| MagicaVoxel | .vox | ボクセルアート用。セルごとにパレット番号(色)を持つ。 |
ボリュームから表面メッシュを取り出すには、マーチングキューブ法などで等値面を抽出します。医用画像から臓器の STL を作って3Dプリントする、といった流れが典型例です。
建築分野の BIM(Building Information Modeling)データ交換の国際標準です。壁・柱・窓といった建築要素を、形状だけでなく材料・属性・要素間の関係を持つオブジェクトとして記述します。
CityGML は、都市の建物・道路・地形を意味情報付きで表す OGC 標準です。詳細度(LOD)の概念を持ち、日本の国土交通省 PLATEAU でも採用されています。
3D Tiles は、都市規模の巨大な3Dデータ(建物群、点群、フォトグラメトリモデル)を階層的なタイルに分割し、Web で段階的にストリーミング表示するための形式です。Cesium が開発し、現在は OGC のコミュニティ標準になっています。中身のタイルには glTF が使われています。
| 形式 | 形状表現 | 保存方式 | 色・テクスチャ | 材質 | 階層 | アニメ | 主な用途 |
|---|---|---|---|---|---|---|---|
| STL | 三角形 | テキスト/バイナリ | × | × | × | × | 3Dプリント |
| OBJ | 多角形 | テキスト | ○(UV+画像) | △(MTL) | △(グループ) | × | 汎用交換 |
| PLY | 多角形/点群 | テキスト/バイナリ | ○(頂点色) | × | × | × | 研究・スキャン |
| OFF | 多角形 | テキスト | △ | × | × | × | 形状解析データセット |
| 3MF | 三角形 | ZIP+XML | ○ | ○(造形材料) | ○ | × | 3Dプリント |
| glTF/GLB | 三角形など | JSON+バイナリ | ○ | ○(PBR) | ○ | ○ | Web・AR・ゲーム |
| FBX | 多角形・NURBS | バイナリ/ASCII | ○ | ○ | ○ | ○ | 映像・ゲーム制作 |
| USD | 多角形・曲面など | テキスト/バイナリ/ZIP | ○ | ○ | ○ | ○ | 映像制作・デジタルツイン |
| Alembic | 多角形・曲線 | バイナリ | △ | × | ○ | ○(焼き込み) | シミュレーション結果 |
| STEP | B-rep(厳密) | テキスト | △ | △ | ○(組立) | × | 機械設計・製造 |
| IGES | 曲線・曲面 | テキスト | △ | × | △ | × | 旧来のCAD交換 |
| PCD | 点群 | テキスト/バイナリ | ○ | × | × | × | ロボティクス |
| LAS/LAZ | 点群 | バイナリ | ○ | × | × | × | 航空測量・GIS |
| DICOM | ボリューム | バイナリ | — | — | — | — | 医用画像 |
| OpenVDB | 疎ボリューム | バイナリ | — | — | ○ | ○(連番) | VFX |
○:標準で対応 △:限定的・実装依存 ×:非対応 —:該当しない
| やりたいこと | 推奨形式 | 理由 |
|---|---|---|
| Web ページや AR で3Dモデルを表示したい | glTF / GLB(iOS AR は USDZ) | 軽量で読み込みが速く、ブラウザのライブラリが標準対応している |
| 3Dプリントしたい | 3MF(なければ STL) | 3MF は単位・色を保持できる。STL は最も確実に読める |
| CAD ソフト間で設計データを渡したい | STEP(AP242 / AP214) | 厳密な曲面と位相が保たれ、後から修正・解析ができる |
| ソフト間でモデルを手軽に受け渡したい | OBJ(材質込みなら glTF) | 対応ソフトが最も多く、テキストなので中身も確認しやすい |
| キャラクターのアニメーションを受け渡したい | FBX / glTF | 骨格・スキニング・キーフレームを保持できる |
| スキャンデータや点群を研究で扱いたい | PLY(LiDAR 測量なら LAS/LAZ) | 任意の属性を付けられ、Open3D などで標準的に扱える |
| 自作プログラムで形状を読み書きしたい | OBJ / OFF / PLY | 仕様が短く、パーサーを自作しやすい |
| 大規模な制作パイプラインを組みたい | USD | レイヤー合成により多人数での分業が可能 |