Wavefront .objファイル
Wavefront OBJ (.OBJ) は、当初が、同社のアニメーションパッケージであるAdvanced Visualizerのために開発したジオメトリ定義ファイル形式である。
ファイル形式が公開されると、他の3DCGソフトウェアベンダーも対応を行っていった。おおよそ、これは広く受け入れられた形式である。
OBJファイル形式は、3Dジオメトリのみを表現する単純なデータ形式である。3Dジオメトリのみとは則ち、各頂点の位置、各テクスチャ座標の頂点のUV位置、頂点法線、頂点リストとして定義された各ポリゴンを形作る面、そしてテクスチャ頂点である。頂点は標準で反時計回りに記録され、面法線の明示的宣言を不要としている。OBJ座標は単位を持っていないものの、OBJ形式は人間の読めるコメント行内にスケール情報を含むことができる。
ハッシュ文字(#)から始まる行はコメントである。
OBJファイルは、頂点データ、自由曲線/曲面 (free-form curve/surface) 属性、要素、自由曲線/曲面本文、自由曲面間の連続性、グループおよび表示/描画属性情報を含むことができる。特に一般的な要素は、ジオメトリ頂点、テクスチャ座標、頂点法線、ポリゴン面である:
頂点 (vertex) は、文字"v"から始まる行で指定できる。これには (x,y,z[,w]) 座標が続く。w は任意であり、標準は 1.0 である。いくつかのアプリケーションは、赤、緑および青の値を、x、yおよびzの後に入れることで、頂点カラーに対応する。色の値の範囲は 0 から 1 である。
自由形式のジオメトリ文は、文字列"vp"から始まる行で指定できる。曲線 (curve) または曲面 (surface) のパラメータ空間における点を定義する。
"u" のみは曲線の点に必要であり、"u" および "v" は曲面の点と非有理境界曲線 (non-rational trimming curve) の制御点に必要であり、さらに "u"、"v" および "w" (weight: 重み) は有理境界曲線 (rational trimming curve) の制御点に必要である。
面 (face) は頂点リストを使って定義される。四角形のようなポリゴンは三つより多くの頂点/テクスチャ/法線インデックスを使うことで定義できる。
OBJ形式はまた、NURBS曲面のような、オブジェクト定義に曲線と曲面を使用する自由形式ジオメトリに対応する。
有効な頂点インデックスは、以前に定義した頂点リストの、対応する頂点要素に一致する。もしインデックスが正なら、1から始まる、その頂点リストのオフセットを指す。もしインデックスが負なら、それは頂点リストの終わりを相対的に指し、-1は最後の要素を差す。
それぞれの面は三つ以上の頂点を含む。
任意により、面を定義する際、テクスチャ座標インデックスは、テクスチャ座標を指定することに使われることができる。
面を定義する際、頂点インデックスにテクスチャ座標インデックスを追加するには、
頂点インデックスの後、直ぐにスラッシュを入れ、その後、テクスチャ座標インデックスを入れる必要がある。スラッシュの前後に空白は許可されていない。
有効なテクスチャ座標インデックスは、以前に定義した1から始まるテクスチャ座標の一覧にある対応する要素と一致する。
任意により、面を定義する際、法線インデックスは頂点のための法線ベクトルを指定するために使われることができる。
面を定義する際、頂点インデックスに法線インデックスを追加するには、
テクスチャ座標の後、二個目のスラッシュを入れなければならず、その後、法線インデックスを入れる。
有効な法線インデックスは、以前に定義した1から始まる法線の一覧にある対応する要素と一致する。
それぞれの面は、三つ以上の要素を含む。
テクスチャ座標は任意であるため、それら無しでジオメトリを定義することは可能であるが、その場合、頂点インデックスの後、法線インデックスを挿入する前に、二つのスラッシュを挿入しなければならない。
OBJファイルはTaylorおよびBスプラインのようないくつかの異なる種類の補間を使用した高次曲面に対応しているものの、サードパーティのファイルリーダーにおけるそれらの機能のサポートは、普遍的とはほど遠い。また、OBJファイルは、メッシュ階層や、いかなる種類のアニメーション/変形 (例えば、頂点スキニングやメッシュモーフ) にも対応していない。
ポリゴンのビジュアル面を記述するマテリアルは、外部の.mtlファイルに保存される。一つより多くの外部のMTLマテリアルファイルが、一つのOBJファイルから参照されることができる。.mtlファイルは一つ以上の名前のマテリアル定義を含むことができる。
このタグはタグに続いてマテリアル名を指定する。マテリアル名は、外部.mtlファイルで定義された名づけられたマテリアルに一致する。
名づけられたオブジェクトとポリゴングループは以下のタグを通して指定される。
ポリゴン間のスムーズシェーディングは、スムージンググループにより有効化される。
OBJファイルは、その一覧構造に関して、その絶対位置 (1で最初の定義された頂点を、NでN番目の定義された頂点を表す)か、その相対位置 (-1で最新の頂点を表す)かを問わず、頂点、法線などを参照することが可能である。
しかしながら、全てのソフトウェアが後者の方法をサポートするというわけではなく、逆にいくつかのソフトウェアは本質的に後者の形で書き込みを行い (頂点オフセットなどの再計算が不必要な要素を追加するのに好都合なため)、時折非互換を導く。
3DCGにおいて、最も一般的なジオメトリ交換ファイル形式の一つは、OBJ形式である。MTLファイル形式は、一つ以上のOBJファイルに含まれるオブジェクトのシェーディング (マテリアル) 特性を記述するために必携のファイル形式である。.OBJファイルは一つ以上の.MTLファイル (これを「マテリアルライブラリ」と呼ぶ) を参照し、そこから、名前によって一つ以上のマテリアル記述を参照する。
マテリアルテンプレートライブラリ形式 (MTL) は、Wavefront Technologiesにより定義された、コンピューターレンダリングの目的のための、フォン反射モデルに関する面の光反射特性を定義するASCIIファイルの標準である。この標準は、異なるコンピューターソフトウェアパッケージの間に広範なサポートがあり、便利なマテリアル交換形式となっている。
MTLファイルは一般的に、MTLファイルのマテリアルがマップされたジオメトリを定義するOBJファイルに付属し、そのファイルから参照される。
MTL形式は未だ広く使われているものの、時代遅れで、スペキュラマップおよびパララックスマップのような後発の技術に完全対応していない。しかしながら、フォーマットのオープン性と直感性により、これらのパラメータはカスタムのMTLファイルジェネレータを使って簡単に追加することができる。
MTL形式はいくつかの形式を定義している。
単体の .mtl ファイルは、複数のマテリアルを定義することができる。マテリアルはファイル内に逐次定義される。それぞれはnewmtlコマンドより始まる:
マテリアルのアンビエント色は、Kaを使って記述される。色の定義は、それぞれのチャンネルの値が0から1の間となるRGBである。
似たように、ディフューズ色は、Kdを使って記述される。
スペキュラ色は、Ksを使って記述され、スペキュラ指数 Ns を使って重み付けされる。
マテリアルは透過できる。これは「ディゾルブ」(dissolve) とも呼ばれる。本物の透過とは異なり、結果はオブジェクトの厚みに依存しない。
マテリアル毎に、複数の照明モデルが利用可能である。以下に列挙する:
テクスチャマテリアルは上記と同じプロパティを使用しており、追加でテクスチャマップを定義している。以下は一般的なマテリアルファイルの例である。より多くの詳細は、完全なWavefrontファイル形式リファレンスを参照。
テクスチャマップ文はオプションパラメータを持つこともある (full specを参照)。
反射マップ用:
ファイルの構文解析の容易さのため、またファイル形式が非標準で広まったために、ファイルはベンダー独自の改変を含んでいるかもしれない。
仕様によれば、オプションはテクスチャファイル名に先行することになっている。しかしながら、。