Objファイル基礎


概要

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

種類

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

コメント

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

ほとんどのobjファイルの先頭には出力したソフト(Blender、maya等)の
情報がコメントで書かれています。

記号 #
使用例 #Blender v2.79 (sub 0) OBJ File: 'Cube.blend'

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/1 2/2/1 3/3/1
例2(テクスチャ無し) 1//1 2//1 3//1
上の例1のように全てが設定されていることもあれば、 例2のようにテクスチャ番号が設定されていない書式もあります。 また、ポリゴン数も3つではなく4つ以上で構成されていることもあります

mtlの構成

mtlファイルもテキストエディタを使用することで
データとしての中身を確認できます。

このファイルにはメッシュに設定するアンビエントなどの色情報や
各マテリアルで使用するテクスチャ情報が書かれており、
mtlファイルにはobjファイルが必要です。

model_render_0002

※mtlは設定項目が多く、プロジェクトによっては使用しない箇所もあるので、
 今回は最低限の項目の説明をします。

①マテリアル名宣言

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)
map_Kd テクスチャ名 文字列
例えば「Ka 1.000000 1.000000 1.000000」は「アンビエントカラーのRGBが全て1」 「map_Kd character.png」は「マテリアルはcharacter.pngを使用している」という意味です。