Wavefront .obj ファイル

OBJジオメトリ形式
ファイル名拡張子
.obj
インターネットメディアの種類
モデル/オブジェクト[1]
開発者ウェーブフロントテクノロジーズ
フォーマットの種類3Dモデル形式

OBJ (または.OBJ)は、 Wavefront Technologies社がAdvanced Visualizerアニメーションパッケージ向けに開発したジオメトリ定義ファイル形式です。オープンファイル形式であり、他の3Dコンピュータグラフィックスアプリケーションベンダーにも採用されています

OBJファイル形式は、3Dジオメトリのみを表現するシンプルなデータ形式です。具体的には、各頂点の位置、各テクスチャ座標頂点のUV位置、頂点法線、そして各ポリゴンを構成する面(頂点のリストとして定義されます)、そしてテクスチャ頂点が含まれます。頂点はデフォルトで反時計回りの順序で保存されるため、面法線を明示的に宣言する必要はありません。OBJ座標には単位はありませんが、OBJファイルには人間が読めるコメント行にスケール情報を含めることができます。

ファイル形式

ハッシュ文字 (#) に続くものはすべてコメントです。

# これはコメントです。

OBJファイルには、頂点データ、自由曲面/曲線の属性、要素、自由曲面/曲線のボディステートメント、自由曲面間の接続、グループ化、表示/レンダリング属性情報が含まれます。最も一般的な要素は、幾何学的頂点、テクスチャ座標、頂点法線、ポリゴン面です。

# 幾何学的頂点のリスト。(x, y, z, [w]) 座標を持ちます。w はオプションで、デフォルトは 1.0 です。0.123 0.234 0.345 1.0v ......# テクスチャ座標のリスト。(u、[v、w]) 座標では 0 から 1 の間で変化します。v、w はオプションで、デフォルトは 0 です。vt 0.500 1 [0]vt ......# 頂点法線のリスト(x,y,z 形式)。法線は単位ベクトルではない可能性があります。vn 0.707 0.000 0.707vn ......# パラメータ空間の頂点は (u, [v, w]) 形式で指定します。自由形式のジオメトリステートメント (下記参照)0.310000 3.210000 2.100000副社長......# 多角形面要素(下記参照)f 1 2 33/1 4/2 5/3f 6/4/1 3/5/3 7/6/5f 7//1 8//2 9//3f ......# 線要素(下記参照)1 5 8 1 2 4 9

幾何学的頂点

頂点、文字 で始まる行で指定されますv。その後に (x,y,z[,w]) 座標が続きます。W はオプションで、デフォルトは 1.0 です。W は点のスケールを指定します。点 (x,y,z,w) は点 (x/w,y/w,z/w) に対応します。座標位置の指定には右手座標系が使用されます。一部のアプリケーションでは、xy と z の後に赤、緑、青の値を置くことで頂点の色を指定できます (この場合、w は指定できません)。色の値の範囲は 0 から 1 です。[2]

パラメータ空間の頂点

文字列 で始まる行に、自由形式のジオメトリステートメントを指定できます曲線vpまたはサーフェスのパラメータ空間内の点を定義します。曲線点の場合は のみ、サーフェス点および非有理トリミング曲線の制御点の場合はuのみが必要です。有理トリミング曲線の制御点の場合は 、 (重み) が必要です。uvuvw

顔の要素

面は、頂点、テクスチャ、法線インデックスのリストを使用して定義されます。リストの形式は、vertex_index/texture_index/normal_indexです。各インデックスは1から始まり、参照先の要素が定義された順序に応じて増加します。四辺形などの多角形は、3つ以上のインデックスを使用して定義できます。

OBJ ファイルは、 NURBSサーフェスなど、曲線とサーフェスを使用してオブジェクトを定義する自由形式のジオメトリもサポートします

頂点インデックス

有効な頂点インデックスは、事前に定義された頂点リストの対応する頂点要素と一致します。インデックスが正の場合、その頂点リスト内のオフセットを1から参照します。インデックスが負の場合、頂点リストの末尾を相対的に参照し、-1は最後の要素を参照します。

各面には 3 つ以上の頂点を含めることができます。

f v1 v2 v3 ...

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

オプションとして、面を定義する際にテクスチャ座標インデックスを使用してテクスチャ座標を指定できます。面を定義する際に頂点インデックスにテクスチャ座標インデックスを追加するには、頂点インデックスの直後にスラッシュを付け、その後にテクスチャ座標インデックスを付けます。スラッシュの前後にスペースを入れることはできません。有効なテクスチャ座標インデックスは1から始まり、事前に定義されたテクスチャ座標リストの対応する要素と一致します。各面には3つ以上の要素を含めることができます。

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

頂点法線インデックス

オプションとして、面を定義する際に法線インデックスを使用して頂点の法線ベクトルを指定できます。面を定義する際に頂点インデックスに法線インデックスを追加するには、テクスチャ座標インデックスの後に2つ目のスラッシュを付け、その後に法線インデックスを指定します。有効な法線インデックスは1から始まり、事前に定義された法線リストの対応する要素と一致します。各面には3つ以上の要素を含めることができます。

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

テクスチャ座標インデックスなしの頂点法線インデックス

テクスチャ座標はオプションなので、テクスチャ座標なしでもジオメトリを定義できますが、法線インデックスを置く前に頂点インデックスの後に 2 つのスラッシュを置く必要があります。

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

線要素

文字「l」(小文字の L)で始まるレコードは、ポリラインを構成する頂点の順序を指定します。

l v1 v2 v3 v4 v5 v6 ...

その他のジオメトリ形式

OBJファイルは、テイラーやBスプライン[3]といった様々な補間を用いた高次曲面をサポートしていますがサードパーティ製のファイルリーダーにおけるこれらの機能のサポートは、必ずしも普遍的ではありません。また、OBJファイルはメッシュ階層構造や、頂点スキニングやメッシュモーフィングといったアニメーションや変形をサポートしていません。

参考資料

ポリゴンの視覚的な特徴を表すマテリアルは、外部の.mtlファイルに保存されます。OBJファイル内から複数の外部MTLマテリアルファイルを参照できます。.mtlファイルには、1つ以上の名前付きマテリアル定義を含めることができます。

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

このタグは、後続の要素のマテリアル名を指定します。このマテリアル名は、外部の.mtlファイル内の名前付きマテリアル定義と一致します。

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

名前付きオブジェクトとポリゴン グループは、次のタグを使用して指定されます。

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

スムージング グループにより、ポリゴン全体のスムーズ シェーディングが可能になります。

1ページ ... # スムーズ シェーディングも無効にできます。 オフ ...

相対指標と絶対指標

OBJファイルはリスト構造のため、頂点や法線などを絶対位置(1は最初に定義された頂点、NはN番目に定義された頂点を表す)または相対位置(-1は最後に定義された頂点を表す)で参照できます。ただし、すべてのソフトウェアが後者のアプローチをサポートしているわけではなく、逆に一部のソフトウェアは後者の形式のみで記述します(頂点のオフセットなどを再計算せずに要素を追加できる利便性のため)。そのため、互換性の問題が発生する場合があります。[要出典]

マテリアルテンプレートライブラリ

MTLマテリアルフォーマット
ファイル名拡張子
.mtl
インターネットメディアの種類
モデル/mtl [4]
魔法の数字
  • ASCII: newmtl
  • 16進数: 6E65776D746C [5]
開発者ウェーブフロントテクノロジーズ
フォーマットの種類3Dテクスチャ形式

マテリアルテンプレート ライブラリ形式 (MTL) または .MTL ファイル形式は、 Wavefront Technologiesによって定義された .OBJ の関連ファイル形式で、1 つ以上の .OBJ ファイル内のオブジェクトの表面シェーディング (マテリアル) プロパティを記述します。.OBJ ファイルは、1 つ以上の .MTL ファイル (「マテリアル ライブラリ」と呼ばれる) を参照し、そこから 1 つ以上のマテリアル記述を名前で参照します。.MTL ファイルは、コンピュータ レンダリングを目的として、フォン反射モデルに従って表面の光反射特性を定義するASCIIテキストです。この標準は、さまざまなコンピュータ ソフトウェア パッケージで広くサポートされているため、マテリアルの交換に便利な形式です。

MTL形式は依然として広く使用されていますが、時代遅れであり、スペキュラマップや視差マップなどの新しい技術を完全にサポートしていません。しかし、この形式はオープンで直感的なため、カスタムMTLファイルジェネレーターを使用すれば、これらの技術を簡単に追加できます。

MTLフォーマットはいくつかのフォーマットを定義しています。[6] [7]

基本材料

1つの.mtlファイルで複数のマテリアルを定義できます。マテリアルはファイル内で次々に定義され、それぞれ以下のnewmtlコマンドで始まります。

# 'Colored'という名前のマテリアルを定義するnewmtl カラー

マテリアルの周囲色は を使用して宣言されます色の定義は RGB で、各チャンネルの値は 0 から 1 の範囲になります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~100010,000 ノヴァスコシア

マテリアルは透明にすることができます。これは溶解(ディゾルブ)と呼ばれます。実際の透明度とは異なり、結果はオブジェクトの厚さに依存しません。「d」(ディゾルブ)の値が1.0の場合がデフォルトであり、完全に不透明になります。「Tr」の値が0.0の場合も同様です。ディゾルブはすべての照明モデルで機能します。

# 一部の実装では 'd' を使用しますd 0.9# その他は 'Tr' を使用します (反転: Tr = 1 - d)Tr 0.1

透明マテリアルには、さらに「Tf」で指定された透過フィルタ カラーを追加できます。

# 透過フィルタの色(RGBを使用)TF 1.0 0.5 0.5# 透過フィルタの色(CIEXYZを使用) - yとzの値はオプションであり、省略された場合はxと等しいとみなされますTF xyz 1.0 0.5 0.5# スペクトル曲線ファイルからの透過フィルタカラー(一般的には使用されません)Tfスペクトル<ファイル名>.rfl<オプションの係数>

物質の表面には光学密度が存在する場合もあります。これは屈折率とも呼ばれます。

# 光学密度ニ 1.45000

値の範囲は0.001から10です。1.0は、光が物体を通過する際に屈折しないことを意味します。光学密度を上げると、屈折量が増加します。ガラスの屈折率は約1.5です。1.0未満の値では奇妙な結果が生じるため、推奨されません。[8]

マテリアルごとに複数の照明モデルが利用可能です。「d」または「Tr」で透明度を表現するために透明な照明モデルを設定する必要はありません。また、近年の用途では、透明なマテリアルであっても照明モデルを指定しないことがよくあります。照明モデルは以下のように列挙されます。

0. カラーオン、アンビエントオフ1. カラーオンとアンビエントオン2. ハイライト3. 反射とレイトレース4. 透明度: ガラスオン、反射: レイトレースオン5. 反射: フレネルオン、レイトレースオン6. 透明度: 屈折オン、反射: フレネルオフ、レイトレースオン7. 透明度: 屈折オン、反射: フレネルオン、レイトレースオン8. 反射オン、レイトレースオフ9. 透明度: ガラスオン、反射: レイトレースオフ10. 目に見えない表面に影を落とす
イルム2

テクスチャマップ

テクスチャ付きマテリアルは上記と同じプロパティを使用し、さらにテクスチャマップを定義します。以下は一般的なマテリアルファイルの例です。詳細については、Wavefrontファイル形式のリファレンスをご覧ください。

newmtl テクスチャ カ 1.000 1.000 1.000 Kd 1.000 1.000 1.000 Ks 0.000 0.000 0.000 d 1.0 イルム2 # アンビエントテクスチャマップ map_Ka lemur.tga  # 拡散テクスチャマップ(ほとんどの場合、 # アンビエントテクスチャマップ) map_Kd lemur.tga  # スペキュラカラーテクスチャマップ map_Ks lemur.tga  # スペキュラハイライトコンポーネント map_Ns lemur_spec.tga  # アルファテクスチャマップ map_d lemur_alpha.tga  # いくつかの実装では、以下の 'bump' の代わりに 'map_bump' を使用します マップバンプ lemur_bump.tga  # バンプマップ(デフォルトでは画像の輝度チャンネルを使用) バンプ lemur_bump.tga  # 変位マップ ディスプレイ lemur_disp.tga  # ステンシル デカール テクスチャ (デフォルトでは画像の「マット」チャンネル) デカール lemur_stencil.tga

テクスチャ マップ ステートメントにはオプション パラメータも含まれる場合があります (完全な仕様を参照)。

 # テクスチャ原点 (1,1,1) map_Ka -o 1 1 1 アンビエント.tga  # 球面反射マップ refl タイプの球状雲.tga

テクスチャオプション

-blendu on | off # 水平テクスチャブレンディングを設定(デフォルトはオン)-blendv on | off # 垂直テクスチャブレンディングを設定(デフォルトはオン)-boost float_value # ミップマップのシャープネスをブーストする-mm base_value gain_value # テクスチャマップの値を変更します(デフォルトは0 1) # base_value = 明るさ、gain_value = コントラスト-ou [v [w]] # 原点オフセット(デフォルト 0 0 0)-su [v [w]] # スケール(デフォルト 1 1 1)-tu [v [w]] # 乱流 (デフォルト 0 0 0)-texres resolution # 作成するテクスチャ解像度-clamp on | off # クランプされた 0-1 範囲のテクセルのみをレンダリングします (デフォルトはオフ) # クランプを解除すると、テクスチャは表面全体に繰り返され、 # クランプすると、0-1の範囲内にあるテクセルのみ # 範囲がレンダリングされます。-bm mult_value # バンプ乗数(バンプマップのみ)-imfchan r | g | b | m | l | z # ファイルのどのチャンネルを使用するかを指定します # スカラーまたはバンプテクスチャを作成します。r:red、g:green、 # b:青、m:マット、l:輝度、z:z深度。 # (バンプのデフォルトは 'l'、デカールのデフォルトは 'm' です)

例えば、

# は、bumpmap.tga の赤チャンネルをバンプマップとして使用することを指示しますバンプ -imfchan r バンプマップ.tga

反射マップの場合...

-type sphere # は「refl」反射マップの球体を指定します -type cube_top | cube_bottom | # キューブマップを使用する場合、各 cube_front | cube_back | # キューブの側面は別途指定します キューブ左 | キューブ右

ベンダー固有の変更

ファイルの解析が容易であり、ファイル形式が非公式に普及しているため、ファイルにはベンダー固有の変更が含まれる場合があります。

仕様によると、オプションはテクスチャファイル名の前に記述する必要があります。しかし、少なくとも1つのベンダーは、オプションをファイル名の末尾に記述したファイルを生成しています。

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

物理ベースレンダリング

オンライン3D編集・モデリングツールClara.ioの開発者は、MTL形式を拡張して物理ベースレンダリング(PBR)マップとパラメータを指定できるようにすることを提案しました。この拡張はその後、BlenderとTinyObjLoaderに採用されました。拡張PBRマップとパラメータは以下のとおりです。[9]

Pr/map_Pr # 粗さPm/map_Pm # メタリックPs/map_Ps # 光沢クリアコートの厚さ(PC)PCR # クリアコートの粗さKe/map_Ke # 発光異方性 # 異方性アニソル # 異方性回転norm # 法線マップ(RGB コンポーネントは表面法線の XYZ コンポーネントを表します)

さらに提案された拡張機能は、 MicrosoftDirectXエンジン用のDirectXMeshツールキットから来ており、モデルの事前コンパイルされたRMAマテリアルを定義する機能を提供します。[10]

map_RMA # RMA マテリアル (粗さ、金属性、アンビエント オクルージョン)map_ORM # map_RMA の代替定義

参照

参考文献

  1. ^ メディアサブタイプ名: obj
  2. ^ 「.OBJファイルに頂点カラー情報を含めるにはどうすればいいですか?」Game Development Stack Exchange . 2014年10月14日時点のオリジナルよりアーカイブ2014年10月8日閲覧。
  3. ^ 「Wavefront OBJ: グラフィックスファイルフォーマット百科事典からの要約」www.fileformat.info。2025年1月14日時点のオリジナルよりアーカイブ。 2025年2月13日閲覧
  4. ^ “メディアサブタイプ名: mtl”. 2021年4月12日時点のオリジナルよりアーカイブ2021年4月28日閲覧。
  5. ^ “Wavefront Material Template Library (MTL) File Format”.米国議会図書館. 2019年10月4日. 2021年4月12日時点のオリジナルよりアーカイブ。 2021年4月29日閲覧
  6. ^ 「MTLファイル - OBJファイルのマテリアル定義」People.sc.fsu.edu. 2004年6月14日。2010年6月13日時点のオリジナルよりアーカイブ。 2010年11月26日閲覧
  7. ^ 「Wavefront .mtl ファイル形式情報 - 不満と不平 - Wings - Wings3D - 公式開発フォーラム - メッセージボード」Nendowingsmirai.yuku.com. 2002年7月。2011年7月18日時点のオリジナルよりアーカイブ。 2010年11月26日閲覧
  8. ^ Ramey, Diane (1995). 「MTL マテリアルフォーマット (Lightwave, OBJ)」. Alias-Wavefront, Inc. 2016年11月12日時点のオリジナルよりアーカイブ2020年5月17日閲覧。
  9. ^ 「Ben Houston | 物理ベースレンダリングのためのWavefront MTLの拡張」benhouston3d.com
  10. ^ 「OBJ の MTL で RMA テクスチャを定義する機能。 by MattFiler · Pull Request #39 · microsoft/DirectXMesh」。GitHub
  • 付録B1. オブジェクトファイル(.obj)、Advanced Visualizerマニュアル
  • 材料仕様
  • ツール、ライブラリ、サンプルファイル
  • FileFormat.Info: Wavefront OBJ ファイル形式の概要
「https://en.wikipedia.org/w/index.php?title=Wavefront_.obj_file&oldid=1312058006」から取得