Wavefront OBJ (.OBJ) ファイル形式の詳細解説
Wavefront OBJファイル形式は、当初Wavefront Technologiesが開発した3Dジオメトリを定義するためのファイル形式です。そのシンプルさとオープンな性質から、多くの3DCGソフトウェアで広く採用されています。
OBJファイル形式の特徴
OBJファイルは、主に以下の要素で構成されています。
頂点 (Vertex): 3D空間における点の位置を示す座標データ。
テクスチャ座標 (Texture Coordinate): 2Dテクスチャを3Dモデルに貼り付けるためのUV座標データ。
頂点法線 (Vertex Normal): 各頂点における面の向きを示す法線ベクトル。
ポリゴン面 (Polygon Face): 頂点のリストとして定義される、3Dモデルを構成する面。
パラメータ空間頂点 (Parameter Space Vertex): 自由形式のジオメトリを定義する際に使用される、曲線や曲面上の点の座標。
OBJファイルは、これらの要素をテキスト形式で記述し、コメントやグループ情報、マテリアル参照なども含めることができます。
ファイル構造の詳細
OBJファイルは、行単位で情報を記述します。行頭の記号によって、その行がどのような情報を表しているかを区別します。
`#`: コメント行
`v`: ジオメトリ頂点
`vt`: テクスチャ座標
`vn`: 頂点法線
`vp`: パラメータ空間
頂点
`f`: ポリゴン面要素
`l`: ライン要素
`mtllib`: 外部マテリアルファイル参照
`usemtl`: マテリアル指定
`o`: オブジェクト名
`g`: グループ名
`s`: スムージンググループ
頂点データは、`v` に続けて、x, y, z座標を記述します。オプションでw成分やRGBカラー値を追加することもできます。
v 0.123 0.234 0.345
v 0.456 0.567 0.678 1.0
v 0.789 0.890 0.901 0.5 1.0 0.0
テクスチャ座標データ
テクスチャ座標は、`vt` に続けて、u, v座標を記述します。オプションでw成分を追加することもできます。
vt 0.500 1.000
vt 0.250 0.750 0.0
頂点法線データ
頂点法線は、`vn` に続けて、x, y, z成分を記述します。
vn 0.707 0.000 0.707
vn 0.000 1.000 0.000
パラメータ空間頂点データ
パラメータ空間頂点は、`vp` に続けて、u, v, w座標を記述します。
vp 0.310 3.210 2.100
ポリゴン面要素
ポリゴン面要素は、`f` に続けて、頂点、テクスチャ座標、法線のインデックスを記述します。
頂点のみを指定する場合: `f v1 v2 v3`
頂点とテクスチャ座標を指定する場合: `f v1/vt1 v2/vt2 v3/vt3`
頂点、テクスチャ座標、法線を指定する場合: `f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3`
頂点と法線を指定する場合(テクスチャ座標を省略): `f v1//vn1 v2//vn2 v3//vn3`
ライン要素
ライン要素は、`l` に続けて、頂点のインデックスを記述します。
l v1 v2 v3 v4 v5
マテリアル参照
OBJファイルは、マテリアル情報を外部の`.mtl`ファイルに記述し、それを参照します。
`mtllib [外部 .mtl ファイル名]`: .mtlファイルを指定します。
`usemtl [マテリアル名]`: 使用するマテリアルを指定します。
スムージング
`s` タグを使用して、ポリゴン間のスムーズシェーディングを有効化または無効化できます。
`s 1`: スムーズ
シェーディングを有効化
`s off`: スムーズシェーディングを無効化
相対インデックスと絶対インデックス
OBJファイルは、頂点や法線などを参照する際、絶対インデックス(1から始まる)と相対インデックス(-1が最後の要素)の両方を使用できます。ただし、一部のソフトウェアは相対インデックスをサポートしていない場合があります。
マテリアル・テンプレート・ライブラリ (.MTL) ファイル形式の詳細解説
MTLファイルは、OBJファイルで参照されるマテリアルの詳細を記述するテキスト形式のファイルです。各マテリアルは、`newmtl` で始まり、その後にアンビエント色、ディフューズ色、スペキュラ色、透過率、屈折率、テクスチャマップなどの情報が続きます。
基本的なマテリアル定義
`newmtl [マテリアル名]`: 新しいマテリアルの定義を開始します。
`Ka [r] [g] [b]`: アンビエント色をRGBで指定します。
`Kd [r] [g] [b]`: ディフューズ色をRGBで指定します。
`Ks [r] [g] [b]`: スペキュラ色をRGBで指定します。
`Ns [float]`: スペキュラ指数を指定します。
`d [float]` または `Tr [float]`: 透過率を指定します (`d` は不透明度、`Tr` は透明度)。
`Ni [float]`:
屈折率を指定します。
`illum [int]`: 照明モデルを指定します。
テクスチャマップの指定
テクスチャマップは、`map_` に続けて、アンビエント、ディフューズ、スペキュラなどの種類とテクスチャファイル名を指定します。
`map_Ka [filename]`: アンビエントテクスチャマップを指定します。
`map_Kd [filename]`: ディフューズテクスチャマップを指定します。
`map_Ks [filename]`: スペキュラテクスチャマップを指定します。
`map_Ns [filename]`: スペキュラハイライトテクスチャマップを指定します。
`map_d [filename]`: 透過度テクスチャマップを指定します。
`bump [filename]` または `map_bump [filename]`: バンプマップを指定します。
`disp [filename]`: ディスプレースメントマップを指定します。
`decal [filename]`: ステンシルデカールテクスチャを指定します
テクスチャオプション
テクスチャマップの挙動を制御するオプションも指定できます。
`-blendu on | off`: 水平テクスチャ混合を設定します。
`-blendv on | off`: 垂直テクスチャ混合を設定します。
`-boost [float]`: mip-mapのシャープさを調整します。
`-mm [base_value] [gain_value]`: テクスチャマップの値を変更します。
`-o [u] [v] [w]`: 原点オフセットを指定します。
`-s [u] [v] [w]`: スケールを指定します。
`-t [u] [v] [w]`: Turbulenceを設定します。
`-texres [resolution]`: 作成するテクスチャ解像度を設定します。
`-clamp on | off`: 0から1の範囲でクランプされたテクセルのみレンダリングします。
`-bm [float]`: バンプマップの乗数を設定します。
`-imfchan r | g | b | m | l | z`: テクスチャチャンネルを指定します。
`-type sphere`: 球形反射マップを指定します。
`-type cube_top | cube_bottom | cube_front | cube_back | cube_left | cube_right`: キューブマップのテクスチャを指定します。
物理ベースレンダリング(PBR)への拡張
MTLファイル形式は、物理ベースレンダリングのパラメータを格納するために拡張が提案されています。
`Pr/map_Pr`: ラフネスを指定します。
`Pm/map_Pm`: メタリックを指定します。
`Ps/map_Ps`: Sheenを指定します。
`Pc`: クリアコートの厚さを指定します。
`Pcr`: クリアコートのラフネスを指定します。
`Ke/map_Ke`: 放射を指定します。
`aniso`: 異方性を指定します。
`anisor`: 異方性の回転を指定します。
`norm`: 法線マップを指定します。
DirectX Meshツールキットの拡張
MicrosoftのDirectXエンジンのためのDirectXMeshツールキットは、RMAマテリアルを定義するための拡張を提案しています。
`map_RMA`: RMAマテリアル (ラフネス、メタルネス、アンビエントオクルージョン) を指定します。
* `map_ORM`: `map_RMA` の代替定義を指定します。
まとめ
OBJとMTLファイル形式は、3Dモデルのジオメトリとマテリアル情報を表現するためのシンプルかつ柔軟な方法を提供します。これらのファイル形式は、多くの3DCGソフトウェアやツールで広くサポートされており、3Dモデルの交換や編集において重要な役割を果たしています。これらの形式を理解することで、3Dグラフィックスの分野でより効果的な作業が可能になります。