Wavefront .objファイル

Wavefront OBJ  は、当初Wavefront Technologiesが、同社のアニメーションパッケージであるAdvanced Visualizerのために開発したジオメトリ定義ファイル形式である。

ファイル形式が公開されると、他の3DCGソフトウェアベンダーも対応を行っていった。おおよそ、これは広く受け入れられた形式である。

OBJファイル形式は、3Dジオメトリのみを表現する単純なデータ形式である。3Dジオメトリのみとは則ち、各頂点の位置、各テクスチャ座標の頂点のUV位置、頂点法線、頂点リストとして定義された各ポリゴンを形作る面、そしてテクスチャ頂点である。頂点は標準で反時計回りに記録され、面法線の明示的宣言を不要としている。OBJ座標は単位を持っていないものの、OBJ形式は人間の読めるコメント行内にスケール情報を含むことができる。

1. ファイル形式
---------

ハッシュ文字に続く文字はコメントである。

これはコメントである。OBJファイルは、頂点データ、自由曲線/曲面  属性、要素、自由曲線/曲面本文、自由曲面間の連続性、グループおよび表示/描画属性情報を含むことができる。特に一般的な要素は、ジオメトリ頂点、テクスチャ座標、頂点法線、ポリゴン面である:

 座標によるジオメトリ頂点の一覧。w は任意であり、標準は 1.0 である。右手座標系である。v 0.123 0.234 0.345 1.0 v ... ...

 座標によるテクスチャ座標の一覧。座標は0から1の間で変化することができる。v と w は任意であり、標準は 0 である。vt 0.500 1 [0] vt ... ...

 形式による頂点法線の一覧; 法線は単位法線ではないかもしれない。vn 0.707 0.000 0.707 vn ... ...

 形式によるパラメータ空間頂点 ; 自由ジオメトリ文 vp 0.310000 3.210000 2.100000 vp ... ...

ポリゴン面要素 f 1 2 3 f 3/1 4/2 5/3 f 6/4/1 3/5/3 7/6/5 f ... ...

ライン要素 l 5 8 1 2 4 9

1.1. ジオメトリ頂点
------------

頂点  は、文字vから始まる行で指定できる。これには  座標が続く。w は任意であり、標準は 1.0 である。右手座標系である。いくつかのアプリケーションは、赤、緑および青の値を、x、yおよびzの後に入れることで、頂点カラーに対応する。色の値の範囲は 0 から 1 である。

1.2. パラメータ空間頂点
--------------

自由形式のジオメトリ文は、文字列vpから始まる行で指定できる。曲線  または曲面  のパラメータ空間における点を定義する。u のみは曲線の点に必要であり、u および v は曲面の点と非有理境界曲線  の制御点に必要であり、さらに u、v および w  は有理境界曲線  の制御点に必要である。

1.3. 面要素
--------

面  は頂点、テクスチャ、法線のインデックスのリストを使って定義される。これはそれぞれのインデックスが1から始まり、定義された参照要素の順序に応じて増加するvertex_index/texture_index/normal_indexの形式による。四角形のようなポリゴンは三つより多くのインデックスを使うことで定義できる。

OBJ形式はまた、NURBS曲面のような、オブジェクト定義に曲線と曲面を使用する自由形式ジオメトリに対応する。

1.3.1. 頂点インデックス
---------------

有効な頂点インデックスは、以前に定義した頂点リストの、対応する頂点要素に一致する。もしインデックスが正なら、1から始まる、その頂点リストのオフセットを指す。もしインデックスが負なら、それは頂点リストの終わりを相対的に指し、-1は最後の要素を差す。

それぞれの面は三つ以上の頂点を含む。

f v1 v2 v3 ....

1.3.2. 頂点テクスチャ座標インデックス
----------------------

任意により、面を定義する際、テクスチャ座標インデックスは、テクスチャ座標を指定することに使われることができる。 面を定義する際、頂点インデックスにテクスチャ座標インデックスを追加するには、 頂点インデックスの後、直ぐにスラッシュを入れ、その後、テクスチャ座標インデックスを入れる必要がある。スラッシュの前後に空白は許可されていない。 有効なテクスチャ座標インデックスは、以前に定義した1から始まるテクスチャ座標の一覧にある対応する要素と一致する。

f v1/vt1 v2/vt2 v3/vt3 ...

1.3.3. 頂点法線インデックス
-----------------

任意により、面を定義する際、法線インデックスは頂点のための法線ベクトルを指定するために使われることができる。 面を定義する際、頂点インデックスに法線インデックスを追加するには、 テクスチャ座標の後、二個目のスラッシュを入れなければならず、その後、法線インデックスを入れる。 有効な法線インデックスは、以前に定義した1から始まる法線の一覧にある対応する要素と一致する。 それぞれの面は、三つ以上の要素を含む。

f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ....

1.3.4. テクスチャ座標インデックス無しの頂点法線インデックス
---------------------------------

テクスチャ座標は任意であるため、それら無しでジオメトリを定義することは可能であるが、その場合、頂点インデックスの後、法線インデックスを挿入する前に、二つのスラッシュを挿入しなければならない。

1.3.5. ライン要素
------------

文字"l"から始まる記述はポリラインを構築する頂点順序を指定する。

1.4. 他のジオメトリ形式
--------------

OBJファイルはTaylorおよびBスプラインのようないくつかの異なる種類の補間を使用した高次曲面に対応しているものの、サードパーティのファイルリーダーにおけるそれらの機能のサポートは、普遍的とはほど遠い。また、OBJファイルは、メッシュ階層や、いかなる種類のアニメーション/変形  にも対応していない。

1.5. マテリアル参照
------------

ポリゴンのビジュアル面を記述するマテリアル は、外部の.mtlファイルに保存される。一つより多くの外部のMTLマテリアルファイルが、一つのOBJファイルから参照されることができる。.mtlファイルは一つ以上の名前のマテリアル定義を含むことができる。

mtllib [外部 .mtl ファイル名] ...

このタグはタグに続いてマテリアル名を指定する。マテリアル名は、外部.mtlファイルで定義された名づけられたマテリアルに一致する。

usemtl [マテリアル名] ...

名づけられたオブジェクトとポリゴングループは以下のタグを通して指定される。

o [オブジェクト名] ... g [グループ名] ...

ポリゴン間のスムーズシェーディングは、スムージンググループにより有効化される。

s 1 ...

スムーズシェーディングは無効化することもできる。s off ...

1.6. 相対および絶対インデックス
------------------

OBJファイルは、その一覧構造に関して、その絶対位置 か、その相対位置 かを問わず、頂点、法線などを参照することが可能である。 しかしながら、全てのソフトウェアが後者の方法をサポートするというわけではなく、逆にいくつかのソフトウェアは本質的に後者の形で書き込みを行い 、時折非互換を導く。

2. マテリアル・テンプレート・ライブラリ
---------------------

マテリアルテンプレートライブラリ形式  又は .MTL ファイル形式は、一つ以上のOBJファイルに含まれるオブジェクトの面のシェーディング  特性を記述するために必携のファイル形式であり、同じくWavefront Technologiesにより定義された。.OBJファイルは一つ以上の.MTLファイル  を参照し、そこから、名前によって一つ以上のマテリアル記述を参照する。.MTL はコンピューターレンダリングの目的のための、フォン反射モデルに関する面の光反射特性を定義するASCIIファイルである。この標準は、異なるコンピューターソフトウェアパッケージの間に広範なサポートがあり、便利なマテリアル交換形式となっている。

MTL形式は未だ広く使われているものの、時代遅れで、スペキュラマップおよびパララックスマップのような後発の技術に完全対応していない。しかしながら、フォーマットのオープン性と直感性により、これらのパラメータはカスタムのMTLファイルジェネレータを使って簡単に追加することができる。

MTL形式はいくつかの形式を定義している。

2.1. 基本的なマテリアル
--------------

単体の .mtl ファイルは、複数のマテリアルを定義することができる。マテリアルはファイル内に逐次定義される。それぞれはnewmtlコマンドより始まる:

'Colored'と名づけたマテリアルを定義newmtl Colored

マテリアルのアンビエント色は、Kaを使って記述される。色の定義は、それぞれのチャンネルの値が0から1の間となるRGBである。

白Ka 1.000 1.000 1.000

似たように、ディフューズ色は、Kdを使って記述される。

白Kd 1.000 1.000 1.000

スペキュラ色は、Ksを使って記述され、スペキュラ指数 Ns を使って重み付けされる。

黒 Ks 0.000 0.000 0.000

0から1000の範囲Ns 10.000

マテリアルは透過できる。これは「ディゾルブ」 とも呼ばれる。本物の透過とは異なり、結果はオブジェクトの厚みに依存しない。"d"における1.0の値は標準であり完全に不透明を意味し、Trの0.0の値と同等である。

いくつかの実装は 'd' を使う。d 0.9

他は 'Tr'  を使う。Tr 0.1

マテリアルはそのサーフィスの光学密度を持つことができる。これは屈折率としても知られている。

光学密度Ni 1.45000

値は0.001から10の範囲を取る。1.0の値は光がオブジェクトをパススルーし曲がらないことを意味する。光学密度の増加は光の曲がる量を増加させる。 ガラスは約1.5の屈折率を持つ。1.0未満の値は奇妙な結果を生むため推奨されない。

マテリアル毎に、複数の照明モデルが利用可能である。以下に列挙する:

illum 2

2.2. テクスチャマップ
-------------

テクスチャマテリアルは上記と同じプロパティを使用しており、追加でテクスチャマップを定義している。以下は一般的なマテリアルファイルの例である。より多くの詳細は、完全なWavefrontファイル形式リファレンスを参照。

newmtl Textured Ka 1.000 1.000 1.000 Kd 1.000 1.000 1.000 Ks 0.000 0.000 0.000 d 1.0 illum 2

アンビエントテクスチャマップmap_Ka lenna.tga

ディフューズテクスチャマップ map_Kd lenna.tga

スペキュラカラーテクスチャマップmap_Ks lenna.tga

スペキュラハイライト成分map_Ns lenna_spec.tga

透過度テクスチャマップmap_d lenna_alpha.tga

いくつかの実装は下の'bump'の代わりに'map_bump'を使用しているmap_bump lenna_bump.tga

バンプマップ bump lenna_bump.tga

ディスプレースメントマップdisp lenna_disp.tga

ステンシルデカールテクスチャ decal lenna_stencil.tga

テクスチャマップ文はオプションパラメータを持つこともある 。

テクスチャ原点 map_Ka -o 1 1 1 ambient.tga

球形反射マップrefl -type sphere clouds.tga

2.3. テクスチャオプション
---------------

反射マップ用:

2.4. ベンダー独自の改変
--------------

ファイルの構文解析の容易さのため、またファイル形式が非標準で広まったために、ファイルはベンダー独自の改変を含んでいる可能性がある。

仕様によれば、オプションはテクスチャファイル名に先行することになっている。しかしながら、date=2018年10月。

0.2のバンプ乗数bump texbump.tga -bm 0.2

2.4.1. 物理ベースレンダリング
------------------

オンライン3D編集及びモデリングツールの製作者であるClara.ioはMTL形式に物理ベースレンダリングのパラメータを表現する以下のパラメータを含めるよう拡張することを提案した:

更なる提案された拡張はMicrosoftのDirectXエンジンのためのDirectXMeshツールキットから来ている。これはモデルの事前コンパイルされたRMAマテリアルの定義を可能とする。

3. 関連項目
-------

GlTF
Standard Triangulated Language 
PLY  - ほとんどの光造形アプリケーションよりも柔軟性を提供する代替ファイル形式。

4. 出典
-----

5. 外部リンク
--------

[2]
[3]
[4]
[5]
[6]