OBJファイルフォーマット

概要

Wavefront社のAdvanced Visualizerというソフト用のファイルフォーマットです。
多くのCGソフトがサポートし、CGソフトの中間ファイルフォーマットとして広く使用されています。

記録される3Dモデルデータは、頂点座標値データ、頂点法線ベクトルデータ、テクスチャ座標値データ、凸多角形面データなどです。

頂点座標値データ、頂点法線ベクトルデータ、テクスチャ座標値データは、X成分、Y成分、Z成分が記録されます。

凸多角形面データは、頂点座標値データ、頂点法線ベクトルデータ、テクスチャ座標値データそれぞれの番号の配列として記録されます。

テクスチャデータ、マテリアルデータの記録にも対応しています。

OBJファイルフォーマットは、アスキーフォーマットです。

公式の仕様書

筆者は、公式の仕様書の所在を知りません。
公式の仕様書の所在をご存知の方はご一報ください。(「ホーム > コンタクト」)

フォーマット

構文

# コメント
mtllib マテリアルファイル名
g グループ名
usemtl マテリアル名
v x成分値 y成分値 z成分値
v x成分値 y成分値 z成分値
v x成分値 y成分値 z成分値
…(省略)…
vt x成分値 y成分値
vt x成分値 y成分値
vt x成分値 y成分値
…(省略)…
vn x成分値 y成分値 z成分値
vn x成分値 y成分値 z成分値
vn x成分値 y成分値 z成分値
…(省略)…
f 頂点座標値番号/テクスチャ座標値番号/頂点法線ベクトル番号 (多角形の頂点の数だけ続く)
f 頂点座標値番号/テクスチャ座標値番号/頂点法線ベクトル番号 (多角形の頂点の数だけ続く)
f 頂点座標値番号/テクスチャ座標値番号/頂点法線ベクトル番号 (多角形の頂点の数だけ続く)
…(省略)…
g グループ名
usemtl マテリアル名
v x成分値 y成分値 z成分値
v x成分値 y成分値 z成分値
v x成分値 y成分値 z成分値
…(省略)…
vt x成分値 y成分値
vt x成分値 y成分値
vt x成分値 y成分値
…(省略)…
vn x成分値 y成分値 z成分値
vn x成分値 y成分値 z成分値
vn x成分値 y成分値 z成分値
…(省略)…
f 頂点座標値番号/テクスチャ座標値番号/頂点法線ベクトル番号 (多角形の頂点の数だけ続く)
f 頂点座標値番号/テクスチャ座標値番号/頂点法線ベクトル番号 (多角形の頂点の数だけ続く)
f 頂点座標値番号/テクスチャ座標値番号/頂点法線ベクトル番号 (多角形の頂点の数だけ続く)
…(省略)…

解説

すべての行が、
    キーワード[1文字スペース]データ
という形式になっています。

改行コードに関しては、CR+LF、LF、CRのどれが正しいのかは不明です。

キーワードおよびデータを区切るものとしては、1文字分の半角スペースです。
複数文字分の半角スペースやタブでも良いかに関しては不明です。
キーワードの前にスペースやタブを入れても良いかに関しては不明です。

「#」キーワード行
コメント行です。
キーワードの後には区切り文字をはさんで、任意の文字列が記されます。
任意の文字列の文字数の制限に関しては不明です。
「mtllib」キーワード行
マテリアルファイル名を指定します。
キーワードの後には区切り文字をはさんで、マテリアルファイル名が記されます。
マテリアルファイル名の文字数の制限に関しては不明です。
「g」キーワード行
グループ名を指定します。
キーワードの後には区切り文字をはさんで、グループ名が記されます。
グループ名の文字数の制限に関しては不明です。
グループデータの開始を表します。
「g」行から「g」行もしくはファイルの終端までを一組とし、1つのグループデータが記されます。
「g」行がないときファイル全体で1つのグループデータとなります。
「usemtl」キーワード行
現在のグループデータが使用するマテリアル名を指定します。
キーワードの後には区切り文字をはさんで、マテリアル名が記されます。
マテリアル名の文字数の制限に関しては不明です。
現在のグループは、マテリアルファイル中の指定したマテリアル名のマテリアル設定値を使用します。
「v」キーワード行
1つの頂点の頂点座標値を指定します。
キーワードの後には区切り文字をはさんで、1つの頂点の頂点座標値のX成分値 Y成分値 Z成分値が記されます。
「vt」キーワード行
1つの頂点のテクスチャ座標値を指定します。
キーワードの後には区切り文字をはさんで、1つの頂点のテクスチャ座標値のX成分値 Y成分値が記されます。
テクスチャ座標値は2次元座標値です。
「vn」キーワード行
1つの頂点の頂点法線ベクトルを指定します。
キーワードの後には区切り文字をはさんで、1つの頂点の頂点法線ベクトルのX成分値 Y成分値 Z成分値が記されます。
「f」キーワード行
1つの凸多角形面データを指定します。
キーワードの後には区切り文字をはさんで、凸多角形面の頂点の数だけ、頂点に関するデータが、区切り文字をはさんで記されます。
1つの頂点に関するデータは、 頂点座標値番号/テクスチャ座標値番号/頂点法線ベクトル番号 となります。
テクスチャ座標値番号、頂点法線ベクトル番号はそれぞれ省略可能です。
数値/数値/数値 の場合、頂点座標値番号/テクスチャ座標値番号/頂点法線ベクトル番号 が指定されています。
数値/数値 の場合、頂点座標値番号/テクスチャ座標値番号 が指定されています。
数値//数値 の場合、頂点座標値番号//頂点法線ベクトル番号 が指定されています。
数値 だけの場合、頂点座標値番号 だけが指定されています。
番号は、1から始まる番号を指定します。
ファイルの先頭から、頂点座標値データ、テクスチャ座標値データ、頂点法線ベクトルデータ、それぞれに関して、1から始まる番号が割り振られます。

ダウンロード

サンプルファイル

cube.obj ( 10x10x10 立方体 )