Objファイル基礎

概要

最終更新日:2021/05/29

3Dモデルフォーマットの一つであるObjファイルの説明と構成について書いた記事です。
主に次の項目に該当する方に向けて書いています。
  • Objファイルとは何か知りたい
  • objファイルの構成を知りたい
  • mtlファイルの構成を知りたい



Objファイルとは

ObjファイルはWavefront社が開発した3Dモデルフォーマットの1つです。
数ある3Dのモデルフォーマットの中でトップクラスで分かりやすい作りになっているので、
プログラムなどで3Dモデルを初めて扱う人には適していると言えます。

種類

objファイルは頂点、法線などの情報が格納されている「.obj」と
モデル色やテクスチャ情報を格納している「.mtl」で構成されています。
ただ、mtlファイルがなくてもobjファイルさえあればモデルの形状を描画することは可能です。

コメント

次の項目からobj、mtlファイルの構成を書いていきます。
ですが、どちらのファイルにも共通している「コメント」の説明を先にします。
objのコメントは様々なプログラム言語のコメントと同じで、
データ内に情報を書き込めるメモ機能として使用できます。

記号 #
使用例 #Blender v2.79 (sub 0) OBJ File: 'Cube.blend'
余談ですが、objファイルの先頭には出力したソフト(Blender、maya等)の情報がコメントで 書かれていることが多いです。

objの構成

objファイルはテキストエディタを使用することで、テキストとして確認ができます。
このファイルにはメッシュの形状を構成する情報と
マテリアルファイルと連携をとるための情報が書かれています。
objファイル単体でメッシュを描画することも可能ですが
色やテクスチャはマテリアルに情報があるため、描画に反映することができません。

model_render_0001

※上の構成の「o」と「s」は使用する際に説明をしますので、このページでは説明を省きます。

①マテリアルファイル宣言

mtllib」はこのObjファイルで使用するマテリアルファイルを宣言するためのキーワードです。

書式 mtlib ファイル名
mtlib Cube.mtl
この宣言によってマテリアルとの関連が生まれるので、 カラー情報やテクスチャなどを使用している場合は必ず宣言されています。

②メッシュ宣言

メッシュ宣言では「頂点座標」「テクスチャ座標」「法線」が宣言されており、
各情報には専用のキーワード「v」「vt」「vn」が用意されています。

キーワード 情報
v 頂点座標
vt テクスチャ座標
vn 法線
各情報は左からX、Y、Zの順番で値が設定されています。

③使用マテリアル宣言

usemtl」はマテリアル使用を宣言するためのキーワードです。

書式 usemtl マテリアル名
mtlib Cube.mtl
この宣言以降は宣言しているマテリアルに所属していることになります。 宣言の効果は次のusemtlが使われるかファイルが終了するまで続きます。 マテリアル名はmtllibのマテリアルファイルに書かれている名前が指定されています。

④ポリゴン宣言

「f」はポリゴンの情報を表すキーワードです。
ポリゴン情報は複数の頂点情報をもっており、頂点同士は「スペース」で区切られています。
この頂点は「頂点番号」「テクスチャ番号」「法線番号」が設定されており、
各情報は「/」で区切られています。

書式 頂点/テクスチャ/法線
例1(全て使用) 1/1/1 2/2/1 3/3/1
例2(テクスチャ無し) 1//1 2//1 3//1
上の例1のように全てが設定されていることもあれば、 例2のように一部の情報(テクスチャ番号)が設定されていないこともあります。 また、ポリゴン数も3つではなく4つ以上で構成されていることもあるので、気をつけて下さい。

mtlの構成

mtlファイルもテキストエディタを使用することでテキストとして確認ができます。
このファイルにはメッシュに設定するアンビエントなどの色情報や
各マテリアルで使用するテクスチャ情報が書かれていますが、単体では意味がありません。
mtlファイルはobjファイルありきで用意されています。
※mtlは設定項目が多いため、今回は良く使う項目をいくつか説明をします。

model_render_0002

①マテリアル名宣言

newmtl」はマテリアルの名前を宣言するキーワードです。

書式 newmtl マテリアル名
newmtl Material
この宣言以降に書かれる情報は宣言したマテリアル名のものとして扱われます。 有効範囲は次のnewmtl宣言かファイルの終了までです。

②マテリアル情報

マテリアル情報は数多くの項目が用意されていますが
今回は良く使われるマテリアル情報である「Ka」「Kd」「Ks」「map_Kd」の説明をします。

キーワード 情報
Ka アンビエントカラー RGB(0.0~1.0)
Kd ディフューズカラー RGB(0.0~1.0)
Ks スペキュラーカラー RGB(0.0~1.0)
Ns スペキュラ指数 0~1000の実数
map_Kd テクスチャ名 文字列
例えば「Ka 1.000000 1.000000 1.000000」は「アンビエントカラーのRGBが全て1」 「map_Kd character.png」は「このマテリアルではcharacter.pngを使用している」という意味です。