Wavefront .objファイル

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索
OBJ ジオメトリ形式
拡張子 .obj
MIMEタイプ text/plain
開発者 Wavefront Technologies英語版
種別 3Dモデル形式

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

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

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

ファイル形式[編集]

ハッシュ文字(#)から始まる行はコメントである。

# これはコメントである。

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

  # (x,y,z[,w]) 座標によるジオメトリ頂点の一覧。w は任意であり、標準は 1.0 である。
  v 0.123 0.234 0.345 1.0
  v ...
  ...
  # (u, v [,w]) 座標によるテクスチャ座標の一覧。座標は0から1の間で変化することができる。w は任意であり、標準は 0 である。
  vt 0.500 1 [0]
  vt ...
  ...
  # (x,y,z) 形式による頂点法線の一覧; 法線は単位法線ではないかもしれない。
  vn 0.707 0.000 0.707
  vn ...
  ...
  # ( u [,v] [,w] ) 形式によるパラメータ空間頂点 ; 自由ジオメトリ文 ( 以下を参照 )
  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 ...
  ...

ジオメトリ頂点[編集]

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

パラメータ空間頂点[編集]

自由ジオメトリ文は、文字列"vp"から始まる行で指定できる。曲線またはサーフィスのパラメータ空間により、点を定義する。 "u" のみは曲線の点に必要であり、"u"および"v"はサーフィスの点と非加重トリム曲線に必要であり、"u"、"v"および"w"は加重トリム曲線に必要である。

面要素[編集]

面は頂点の一覧を使うことにより定義される。四角形のようなポリゴンは三つより多くの頂点/テクスチャ/法線インデックスを使うことで定義できる。

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

頂点インデックス[編集]

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

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

f v1 v2 v3 ....

頂点テクスチャ座標インデックス[編集]

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

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

頂点法線インデックス[編集]

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

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

テクスチャ座標インデックス無しの頂点法線インデックス[編集]

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

f v1//vn1 v2//vn2 v3//vn3 ...

他のジオメトリ形式[編集]

ObjファイルはTaylor及びBスプラインのようないくつかの異なった種類の補完を使用した高次サーフィスに対応しているものの、サードパーティのファイルリーダーがそれらをサポートするのは一般的からほど遠い。また、Objファイルは、メッシュ階層や、どんな種類のアニメーション/変形(例えば、頂点スキニングやメッシュモーフ)にも対応していない。

マテリアル参照[編集]

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

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

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

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

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

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

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

s 1
  ...
  # なお、スムースシェーディングは無効化することができる。
  s off
  ...

相対および絶対インデックス[編集]

OBJファイルは、その一覧構造に関して、その絶対位置 (1で最初の定義された頂点を、NでN番目の定義された頂点を表す)か、その相対位置 (-1で最新の頂点を表す)かを問わず、頂点、法線などを参照することが可能である。 しかしながら、全てのソフトウェアが後者の方法をサポートするというわけではなく、逆にいくつかのソフトウェアは本質的に後者の形で書き込みを行い (頂点オフセットなどの再計算が不必要な要素を追加するのに好都合なため)、時折非互換を導く。

マテリアル・テンプレート・ライブラリ[編集]

MTLマテリアル形式
拡張子 .mtl
開発者 Wavefront Technologies英語版
種別 3Dテクスチャ形式

概要[編集]

3DCGにおいて、最も一般的なジオメトリ交換ファイル形式の一つは、OBJ形式である。MTLファイル形式は、一つ以上のOBJファイルに含まれるオブジェクトのシェーディング(マテリアル)プロパティを記述するために必携のファイル形式である。.OBJファイルは一つ以上の.MTLファイル ("マテリアルライブラリ"と呼ぶ)を参照し、そこから、名前によって一つ以上のマテリアル記述を参照する。

序説[編集]

マテリアルテンプレートライブラリ形式 (MTL) は、Wavefront Technologiesにより定義された、コンピューターレンダリングの目的のための、フォン反射モデルに関するサーフィスの光反射プロパティを定義するASCIIファイルの標準である。この標準は、異なるコンピューターソフトウェアパッケージの間に広く対応があり、便利なマテリアル交換形式となっている。

MTLファイルは一般的に、MTLファイルのマテリアルがマップされたジオメトリを定義するOBJファイルに付属し、そのファイルから参照される。

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

MTL形式はいくつかの形式を定義している[2][3]

基本的なマテリアル[編集]

単体の .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     # 黒 (無効)
   Ns 10.000                # 0から1000の範囲

マテリアルは透過できる。これはディゾルブされると言われている。 実際の透過と異なり、結果はオブジェクトの厚みに依存しない。

d 0.9                    # いくつかの実装は 'd' を使う。
   Tr 0.1                   # 他は 'Tr' (反転)を使う。

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

0. 色 有効 かつ アンビエント 無効
1. 色 有効 かつ アンビエント 有効
2. ハイライト 有効
3. 反射 有効 かつ レイトレース 有効
4. 透過: グラス 有効, 反射: レイトレース 有効
5. 反射: フレネル 有効 かつ レイトレース 有効
6. 透過: 反射 有効, 反射: フレネル 無効 かつ レイトレース 有効
7. 透過: 反射 有効, 反射: フレネル 有効 かつ レイトレース 有効
8. 反射 有効 かつ レイトレース 無効
9. 透過: ガラス 有効, 反射: レイトレース 無効
10. 不可視サーフィスに影を投影
   illum 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      # 透過度テクスチャマップ
   map_bump lenna_bump.tga    # いくつかの実装は下の'bump'の代わりに'map_bump'を使用している
   bump lenna_bump.tga        # バンプマップ (標準で画像の輝度値チャンネルを使用)
   disp lenna_disp.tga        # ディスプレースメントマップ
   decal lenna_stencil.tga    # ステンシルデカールテクスチャ (標準で画像の'matte'チャンネルを使用)

テクスチャマップ文はオプションパラメータを持つかもしれない (full specを参照)。

   map_Ka -o 1 1 1 ambient.tga            # テクスチャ原点 (1,1,1) 
   refl -type sphere clouds.tga           # 球形反射マップ

テクスチャオプション[編集]

   -blendu on | off                       # 水平テクスチャ混合を設定 (標準は on)
   -blendv on | off                       # 垂直テクスチャ混合を設定 (標準は on)
   -boost float_value                     # mip-mapのシャープさを押し上げ
   -mm base_value gain_value              # テクスチャマップの値を変更 (標準は 0 1)
                                          #     base_value = brightness, gain_value = contrast
   -o u [v [w]]                           # 原点オフセット            (標準は 0 0 0)
   -s u [v [w]]                           # スケール                  (標準は 1 1 1)
   -t u [v [w]]                           # Turbulence                (標準は 0 0 0)
   -texres resolution                     # 作成するテクスチャ解像度
   -clamp on | off                        # 0から1の範囲でクランプされたテクセルのみレンダー (標準は off)
                                          #   クランプしない場合、テクスチャはサーフィスを横断して繰り返す。
                                          #   クランプする場合、0から1の範囲中に置かれるテクセルのみ、
                                          #   レンダリングされる。
   -bm mult_value                         # バンプ乗数 (バンプマップ専用)

   -imfchan r | g | b | m | l | z         # スカラーまたはバンプテクスチャを作成するために
                                          # どのファイルのチャンネルを使用するか指定。 r:赤、g:緑,
                                          # b:青, m:マット, l:輝度値, z:Z深度
                                          # (バンプ用の標準は'l'であり、デカール用の標準は'm'である)
   bump -imfchan r bumpmap.tga            # bumpmap.tgaの赤チャンネルをbumpmapとして使うと宣言する。

反射マップ用...

   -type sphere                           # "refl"反射マップのための球を指定
   -type cube_top    | cube_bottom |      # キューブマップを使う際のそれぞれのテクスチャファイル
         cube_front  | cube_back   |      # キューブの側面は別々に指定する
         cube_left   | cube_right

ベンダー独自の改変[編集]

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

仕様によれば、オプションはテクスチャファイル名に先行することになっている。しかしながら、少なくとも一つのベンダーは、オプションを後ろに付加してファイル名を生成する。

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

関連項目[編集]

出典[編集]

  1. ^ How can I include vertex color information in .OBJ files?”. Game Development Stack Exchange. 2014年10月8日閲覧。
  2. ^ MTL Files - Material Definitions for OBJ Files”. People.sc.fsu.edu (2004年6月14日). 2010年11月26日閲覧。
  3. ^ Author. “Wavefront .mtl file format info - GRIPES and GRUMBLES - Wings - Wings3D - Official Development Forum - Message Board”. Nendowingsmirai.yuku.com. 2010年11月26日閲覧。

外部リンク[編集]