OFFファイル形式の概要
OFF(Object File Format)は、2Dまたは3Dオブジェクトの形状を、主に頂点で定義されたポリゴン(面)の集合として記述する、軽量で人間にも読みやすいASCIIベースのファイル形式です。1980年代後半に開発され(特にオハイオ州立大学のプロジェクトと関連が深く、その後ミネソタ大学Geometry CenterのGeomviewという対話的3Dビューアによって広まりました)、OFFは現在でも学術研究、メッシュ処理ライブラリ(CGAL、MeshLab、libiglなど)、3Dベンチマーク(Princeton Shape Benchmarkなど)、そして表面再構成・可視化・計算幾何学のツールにおいて広く使われています。
OFFは意図的にシンプルかつ拡張可能な設計になっており、テクスチャ、マテリアル、アニメーション、階層構造といった機能は持たず(OBJやPLY、あるいはFBXやglTFのようなより複雑な形式とは異なります)、ポリゴンメッシュそのものに焦点を当てています。有限要素解析、コンピュータビジョンにおける形状解析、3Dプリント前処理など、トポロジーに絞ったクリーンな形状データのやり取りが求められる場面で威力を発揮します。
主な特徴と構造
- デフォルトはASCII形式(バイナリ版も存在しますが、あまり一般的ではなく、必ずしもすべてのツールでサポートされているわけではありません)。
- 任意の多角形面に対応(三角形だけでなく、n角形も可)。
- 頂点ごと・面ごとの色(RGBA)、法線、その他の拡張情報をオプションで付加可能(「COFF」「NOFF」「CNOFF」などの行で始まる)。
- 2Dポリゴン、3D多面体、さらには拡張形式によってより高次元のオブジェクトも表現可能。
- 単位や座標系のメタデータは持たず、座標は抽象的な浮動小数点数として扱われる。
- ヘッダが最小限で、手作業でもプログラムでも解析が容易。
標準的なOFFファイルの構造
基本的なOFFファイルは、次のようなレイアウトに従います:
- 1行目(マジックヘッダー):
OFF(非常に古いファイルでは省略されていることもありますが、記述が推奨されます)。 - 2行目: 3つの整数:
n_vertices n_faces n_edges
(n_edges は0に設定され、多くの場合読み込み側では無視されます。歴史的にはオイラー標数のチェックのために含まれていました。) - 続くn_vertices行: 頂点座標
各行:x y z(浮動小数点数、1行につき1頂点) - 続くn_faces行: 面の定義
各行は整数v(その面を構成する頂点数)で始まり、続けて頂点リストへの0始まりのインデックスがv個並びます:
v idx1 idx2 ... idxv
各面は平面かつ自己交差しないものと仮定され、表向きの面では反時計回りの巻き順が一般的です。
例:シンプルな立方体(頂点8個、四角形の面6個)
OFF
8 6 0
-0.5 -0.5 0.5
0.5 -0.5 0.5
0.5 0.5 0.5
-0.5 0.5 0.5
-0.5 -0.5 -0.5
0.5 -0.5 -0.5
0.5 0.5 -0.5
-0.5 0.5 -0.5
4 0 1 2 3
4 4 5 6 7
4 0 1 5 4
4 1 2 6 5
4 2 3 7 6
4 3 0 4 7
拡張形式(色付き / 法線付きバリアント)
- COFF:色付きOFF——頂点にXYZの後にRGBAが続く(例:
x y z r g b a)。面にも色を付けられる。 - NOFF:法線付きOFF——頂点にXYZの前に法線ベクトルが続く(例:
nx ny nz x y z)。 - CNOFF:色と法線の両方を持つ。
多くの現代的な実装(MeshLab、CGALなど)はこれらに対応しています。純粋な「OFF」リーダーは、余分なフィールドを無視するか、問題なく読み込みに失敗するようになっています。
利点と制約
利点:読み書きが非常に簡単、依存関係がない、人間の手で編集可能、基本的なメッシュならコンパクト、任意の多角形に対応(ワークフローによっては三角形分割によるアーティファクトを減らせる)。
制約:テクスチャ/UVなし、マテリアルなし、階層/グループなし、メタデータ(単位、作者など)なし、巨大なモデルに対するバイナリ形式の効率性はない(一部のツールにはバイナリ版OFFも存在します)、実用上ほとんどのレンダラーでは面が凸かつ平面である必要がある。
より高度な用途には、今日ではPLY(プロパティ付き)、OBJ(MTLマテリアル付き)、glTFといった形式が好まれることが多くなっています。しかしOFFは、その純粋さと実装のしやすさから、幾何学処理の研究や教育分野において今なおゴールドスタンダードであり続けています。
参考資料:拡張形式や例を含む、OFF形式の包括的な説明。