OBJ

OBJファイルとは

プレーンテキストで書かれた 3D モデル形式で、どのモデリングソフトでも読めます。

OBJ とは何か

OBJ はプレーンテキスト形式です。どのエディターでも開けます。 ピクセルではなく図形と座標を保存するので、どんな大きさでも鮮明なままです。看板の大きさまで引き伸ばしたロゴでも、失うものはありません。 プログラム間のデータ受け渡しと編集のために使われます。

拡張子は .obj、正式名称は Wavefront Object です。ただしどちらも、そのファイルが中に何を持てるかほどには多くを語りません。このページの残りは、その中身についての話です。

OBJ はどこから来たのか

Wavefront Technologies が 1992 年に公開しました。

これだけ長く読まれ続けてきた形式なら、10 年後に取り出したいものを預けても大丈夫です。

仕様は公開されています

仕様書がそのまま公開されているので、中身を推し量るのではなく文書を読んで実装できます。この形式が数多くのプログラムに載っているのはそのためであり、20 年前に書かれたファイルが今も開けるのもそのためです。ただし「仕様が公開されている」ことと「使用料が要らない」ことは別の話です。中でコーデックを包んでいる形式では、特許のライセンスは仕様書が答えていない別の問題として残ります。

捨てられるものはありません

OBJ ファイルは中身をそのまま保存します。保存し直しても何も変わらないので、開いて、直して、また保存する——それを何度繰り返しても劣化は積み上がりません。これが、渡すための形式ではなく作業のための形式である理由です。

OBJ を開けるのは何か

Blender、MeshLab、Mayaが読めますし、同じ種類のプログラムならたいてい読めます。

ファイルが開かないとき、形式が悪いことはめったにありません。たいていはプログラムのほうが形式より古いのです。もっと古い形式に変換してしまうのが確実な逃げ道で、このサイトの残りの部分はそのためにあります。

ブラウザーで開く

これを読めるブラウザーはありません。

これを変換するいちばんよくある理由がこれです。形式が悪いのではありません。ファイルを見せたい場所が、それを読めないというだけのことです。

作業のための形式です

OBJ は、開いて手を入れるために作られています。作業が続いているあいだはこの形式でファイルを持ち、完成したものが必要になるたびに、ここから書き出してください。

あらゆるものが読める形式です

OBJ は 1992 年から 3D の最大公約数であり続けています。あらゆるモデリングソフト、あらゆるゲームエンジン、あらゆるレンダラー、あらゆるオンラインビューアーがこれを読み込め、これはほかのどのメッシュ形式にも当てはまりません。それだけで生き残っています。仕様は三十年前のもので、ほかのすべてが持つ機能を欠いていますが、相手がそのファイルを開けるかどうかが問われているとき、そんなことは関係ありません。

プレーンテキストであることも、この魅力の半分です。頂点は v で始まり三つの数値が続く行、面は f で始まりその頂点を結ぶ行です。テキストエディタでモデルを開いて理解できるというのは、3D 形式としては珍しく、口にする価値があります。

MTL ファイルと、モデルが灰色で届く理由

OBJ が持つのはジオメトリだけです。色やマテリアル、テクスチャは、OBJ が冒頭数行で名前を挙げる別の .mtl ファイルの中にあり、テクスチャの画像はさらに別のファイルで、MTL が名前を挙げています。

だからモデルは実質フォルダーです。.obj が一つ、.mtl が一つ、そして何枚かの画像ファイル。.obj だけを送る ── 見覚えのある名前のファイルだから、人はよくそうします ── と、受け取った側にはテクスチャのない灰色のジオメトリしか見えません。これはこの形式でいちばんよくある問題で、直し方はすべてを送るか、フォルダーごと ZIP にすることです。

UV 座標がテクスチャの貼られ方を決めます

テクスチャは平らな画像で、モデルはその画像のどの部分が面のどこに属するかを言わなければなりません。それが UV 座標で、頂点ごとにひと組ずつある別の数値の組で、メッシュを画像の上に写像します。

これは OBJ の中に保存されているので、マテリアルが渡らなくても旅を生き延びます。モデルがテクスチャなしで届いたときこれは知っておく価値があり、UV が無事なら、テクスチャを付け直すのはどのモデリングソフトでも二分の仕事です。UV を持たずに書き出されていた場合、誰かがメッシュを改めて展開し直さなければならず、そちらは本物の手間です。

単位がなく、どちらが上かの合意もありません

OBJ の中の数値には単位が付いていません。幅 10 の立方体は 10 ミリメートルかもしれず、10 センチメートルかもしれず、10 メートルかもしれず、ファイルはそれを言いません。各ソフトウェアが読み込み時に自分の前提を当てはめるので、モデルは極小で届くこともあれば、建物ほどの大きさで届くこともあります。

向きについても同じです。あるソフトウェアは Y を上として扱い、あるソフトウェアは Z を上として扱い、この形式はどちらの立場も取りません。だからモデルは横倒しで届くことが日常的にあります。どちらの問題も、読み込み時に拡大縮小と回転をすれば数秒で直り、何かを測定したり印刷したりする前に確かめておく価値があります。

テキストは読みやすく、そして大きくなります

すべての座標を十進のテキストとして保存するのは、かなりの容量を消費します。同じメッシュをバイナリの STL や PLY にすれば、たいてい三分の一から五分の一のサイズになり、OBJ として書き出された精密なスキャンは何百メガバイトにも達することがあります。

また同じ理由で非常によく圧縮されます。ZIP 化した OBJ は元のほんの一部になります。十進のテキストは非常に冗長だからです。モデルの転送やアーカイブには、ZIP 化はほぼ無料で、この形式に対する反対理由の多くを取り除いてくれます。

OBJ が持てないもの

アニメーションなし、リギングやボーンなし、シーンの階層なし、カメラやライトなし、そして現代的なマテリアルモデルもありません。MTL 形式は 1990 年代初頭のシェーディングの考え方を記述していて、メタルネスやラフネスのマップには居場所がなく、慣習として渡されるにすぎません。

これが glTF が存在し、ゲーム向けのパイプラインが代わりにそれを使う理由です。OBJ は静的な形状を一つのソフトウェアから別のソフトウェアへ渡すためのもので、そこに関してはほかの何より優れています。リギングされたキャラクターやアニメーションのあるシーン、物理ベースのマテリアルには、この形式は間違った選択です。

印刷のための OBJ の準備

スライサーは OBJ を受け付けます。ジオメトリはきれいに STL に変換されます。STL は OBJ が表現できるものの厳格な部分集合 ── 三角形だけ ── だからです。問題になるのはメッシュが水密かどうかです。すべての辺がちょうど二つの面に共有され、穴がなく、反転した法線もないこと。

レンダリング用に作られたモデルはたいていそうなっていません。厚みのない面はビューポートでは完璧に見えても印刷不可能です。スライサーはその内側が何かを判断できないからです。印刷の前に修復ツールにファイルを通しておけば、たいていの問題を捕まえられ、プリンターで四時間かけて問題に気づくより速く済みます。

基本情報

OBJフォーマットの識別子と出自。
拡張子.obj
メディアタイプmodel/obj
公開元Wavefront Technologies
初版1992

OBJ ファイルについてよくある質問

自分の OBJ モデルが灰色でテクスチャがないのはなぜですか

色とテクスチャは OBJ の中にありません。それらは OBJ が名前を挙げる .mtl という相棒ファイルの中にあり、テクスチャの画像はさらに別のファイルです。.obj だけを送ると受け取った側には裸のジオメトリしか見えません。フォルダーごと送るか ZIP にしてください。

OBJ ファイルはどう開けばいいですか

ほとんどどんな 3D ソフトウェアでも開けます。Blender、MeshLab、Windows の 3D ビューアー、たいていのオンラインビューアー。プレーンテキストでもあるので、生の頂点と面を見たいならテキストエディタでも構いません。

自分のモデルが間違ったサイズで読み込まれるのはなぜですか

この形式には単位がありません。幅 10 の立方体は 10 ミリメートルかもしれず 10 メートルかもしれず、各ソフトウェアは独自の前提を当てはめます。読み込み時に拡大縮小すれば直り、何かを測定したり印刷したりする前に確かめる価値があります。

自分のモデルが横倒しで表示されるのはなぜですか

あるソフトウェアは Y を上の軸として扱い、あるソフトウェアは Z を上として扱い、この形式はどちらの立場も取りません。読み込み時に回転させれば直り、たいていのインポーターはまさにこのために軸の設定を持っています。

OBJ と STL の違いは何ですか

OBJ はテクスチャ座標とマテリアル、あらゆる形の多角形を持てます。STL は三角形だけです。STL は印刷用の形式、OBJ は交換用の形式です。OBJ から STL への変換では見た目が失われ、形状は保たれます。

OBJ ファイルにアニメーションを持たせられますか

できません。単一の静的なメッシュだけを持ち、ボーンもリギングもシーンの階層もカメラもライトもありません。アニメーションやリギングされたモデルには glTF がそれらを持てる形式です。