こんにちは!
コチラの記事では、フリーの3DCGソフト「Blender」を使う上でのヒントになる情報を発信しています。
今回は、3DCGのファイル形式の一つである「OBJファイル」のインポート・エクスポートの方法をまとめてみました。
実は、Blenderの最新バージョン「Blender 3.2」ではOBJファイルを扱う機能が改善されて使いやすくなっていますので、Blender3.2での使用を前提に紹介していきたいと思います!
もちろん、Blender3.1以前のバージョンでもOBJファイルを扱うことはできますので、その方法についてもまとめます。
OBJファイルとは?

まず、「OBJ」ファイル形式について簡単に紹介します。
OBJとは、正式には「Wavefront OBJファイル」(拡張子.obj)といって、メッシュの3次元形状を表現するファイル形式です。
メッシュの3次元形状を表現するファイル形式としては、別記事で紹介した「STLファイル」がありますが、OBJファイルには以下の特徴があります(詳細はWikipediaの記事を参照)。
- 面法線ではなくて頂点法線を定義している。
- 4角形以上の多角形ポリゴンを表現できる。
- テクスチャ座標のデータを含んでいる。
- 色やテクスチャの情報を格納した「MTLファイル」を読み込むことで、マテリアルを表現できる。
- プレーンテキスト形式なので、「メモ帳」ソフトなどで人間が読むことができる。
ちなみに、OBJファイルを「メモ帳」ソフトで開くと、中身はこんな感じになっています。

別のファイル形式である「STLファイル」についてはコチラの記事で紹介していますので、あわせて参考にしてみてください。

MTLファイルとは?

「MTLファイル」(拡張子.mtl)とは、OBJファイルの色やテクスチャの情報を格納するファイルのことです。
MTLファイルは、Blenderなどの3DソフトからOBJファイルをエクスポートする際に、(設定をONにしておくことで)自動で作られます。
また、OBJファイルをインポートする際にMTLファイルも自動で読み込まれます。
MTLファイルには以下の情報が格納されています。
- マテリアル名
- マテリアルを設定しているオブジェクトおよびポリゴングループ
- スムーズシェード
- 色情報
ちなみに、MTLファイルを「メモ帳」ソフトで開くと、中身はこんな感じになっています。

「スペキュラ」「アンビエント」など耳慣れない言葉が出てきますが、MTLファイルの色は「フォンの反射モデル」と呼ばれる方法で出力されます。
詳しくは、Wikipediaの記事を参照してください。
OBJファイルの使用用途

OBJファイルを活用することで、他の3DCG・ゲームエンジンなど外部ソフトとデータをやり取りできます。
以下はOBJファイルに対応してるソフトの例です。
- 3DCGソフト(Blender, MAYA, ZBrushなど)
- ゲームエンジン(Unity, UE5など)
- イラストソフト(CLIP STUDIO, ペイント3Dなど)
- 3DCADソフト(Fusion360, Solidworksなど)
他のソフトと組み合わせて使うことで表現の幅が広がるので、ぜひ他のソフトとOBJファイルのインポート/エクスポートを試してみていただければと思います。
Blender3.2でOBJのインポート/エクスポート機能が大幅改善!
2022年6月8日に、Blenderの新しいバージョン「Blender 3.2」がリリースされました。
「シャドウコースティクス」「スカルプトペイント」など多くの新機能が追加されました。
(詳しくは下の参考記事をご覧ください!)
それに比べると多少地味かもしれませんが、じつは、OBJファイルのインポート/エクスポートの機能も大幅に改善されています!
Blender3.2の新機能については、コチラの記事で紹介していますので、あわせて参考にしてみてください!

標準機能でインポート/エクスポートできるように!
Blender3.1以前のバージョンでは、OBJファイルのインポート/エクスポートを行うためには標準搭載アドオン「Wavefront OBJ format」を有効化する必要がありました。
(アドオン有効化・使用方法はあとで紹介します。)
Blender3.2では、それがアドオン不要で、標準機能でできるようになりました。

これで、Blenderにほとんど触ったことのない「リアルBlender初心者」の方でも、OBJファイルのインポート/エクスポートに困らなくなりそうです!
読み込み速度がUP!
Blender3.2では、OBJファイルの読み込み速度が非常に速くなりました。
コチラの方のツイートによると、約1GBのオブジェクトファイルを読み込むのに、以前のバージョンでは4分近くかかっていたのが20秒程度に短縮されたらしいので、約10倍のスピードアップです!
Blender公式リリースノートによると「2.4GB、24000オブジェクトのモデルの読み込みが4時間から53秒に」速くなったらしいので、大規模なモデルほど効果が大きそうです。
「Z-brush」などの外部ソフトで生成したハイポリデータをBlenderにインポートするのに非常に重宝しますね!
アップデートの詳細は、コチラのリリースノートを参考にしてください。
OBJファイルのエクスポート・書き出し
まず、BlenderからOBJファイルをエクスポートする方法を紹介します。
Blender3.2の使用を前提として説明します。
3.1以前のバージョンでは、後ほど紹介するように内蔵アドオン「Wavefront OBJ format」を有効化する必要があります。
OBJファイルをエクスポートする方法
メッシュなどのオブジェクトを、OBJファイルとしてエクスポートする方法を紹介します。
まずコチラのように、オブジェクトモードで、エクスポートするオブジェクトを選択します。
複数オブジェクトをエクスポートする場合は「Shift」キーを押しながらクリックして複数選択します。

つぎに、トップバーから「ファイル」→「エクスポート」→「Wavefront OBJ(実験的機能)」を選択します。

すると、コチラのようなエクスポート用の設定画面が開きます。

設定メニューの内容はコチラです(参考:Blenderリファレンスマニュアル)。
- アニメーション:「アニメをエクスポート」にチェックを入れると、開始から終了フレームまでの番号を振られたOBJファイルをエクスポートします。
- オブジェクトプロパティ
- 「前方の軸」「上」:出力する座標系の向きを設定します。
出力先のソフトの座標系によって、「Yが上」などに設定する必要があります。 - スケール:各頂点の座標値に倍率をかけます。
- オブジェクト:
- 「選択物のみ」にチェックを入れると、選択されたオブジェクトのみエクスポートします。
- 「モディファイアーを適用」にチェックをONで、適用した状態でエクスポートされます。
- プロパティ:サブディビジョンサーフェスモディファイアー(サブサーフ)などを適用する際に、「ビューポート」か「レンダー」かを選択します。
- パスモード:出力するファイルのパスを設定します(通常は「自動」のままでOKです)。
- 「前方の軸」「上」:出力する座標系の向きを設定します。
- 形状のエクスポート:エクスポートする際のオプションです。
- UV座標:UVテクスチャ座標を出力します(デフォルトでON)
- ノーマル:頂点法線を出力します(デフォルトでON)
- マテリアル:MTLファイルを出力します(デフォルトでON)
- メッシュの三角面化:メッシュを三角形に変換します。
- カーブをNURBSカーブに:NURBSカーブオブジェクトを、メッシュオブジェクトに変換せずにNURBSカーブのままで出力します。
- グループ化(「OBJグループ」に対応するアプリケーションでのみ機能します)
- オブジェクトグループ:複数のオブジェクトを、単一のオブジェクトとして出力します。
- マテリアルグループ:異なるマテリアルを設定した部分を、OBJグループとして設定します。
- 頂点グループ:面の頂点グループ名を出力します。
- スムーズグループ:スムーズシェード面をスムージンググループに、フラットシェード面を「0」として出力します。
- スムーズグループビットフラグ:スムーズシェード面をグループ「1」、フラットシェード面を「0」として出力します。
エクスポートした結果、コチラのように「.obj」「.mtl」の2つのファイルが出力されました。

エクスポートしたOBJファイルをBlenderの新規プロジェクトに読み込むと、コチラのようにエクスポートしたメッシュが現れました。
マテリアルを設定していない場合は、マテリアルなしの状態でインポートされます。

マテリアル・テクスチャのエクスポート
あらかじめオブジェクトにマテリアルを設定しておくと、MTLファイルにマテリアルの情報が書き込まれます。
ただし、いろいろと試してみたところ、エクスポートできるマテリアルにはコチラのような制限があるようです。
- 出力できるシェーダーはプリンシプルBSDFのみ。
- 出力できるテクスチャは画像テクスチャのみ。
コチラの、プリンシプルBSDFのベースカラーに、画像テクスチャがつながったマテリアルをエクスポートしてみます。

すると、コチラのようなMTLファイルが出力されます。

OBJファイルをインポートすると、コチラのようにMTLファイルも自動で読み込まれます。

外部ソフト(Fusion 360)でも、コチラのようにBlenderからエクスポートしたOBJファイル・MTLファイルが読み込めます。

ちなみに、下図の左のようなプロシージャルマテリアルは、そのままではOBJファイルに出力することはできませんので、下図右のように画像テクスチャへの「ベイク」が必要です。

テクスチャのベイクのやり方については、コチラの記事にまとめていますので、あわせて参考にしてみてください。

OBJファイルのインポート・読み込み
OBJファイルのインポートの方法・トラブルの対処法について紹介します。
OBJファイルをインポートする方法
トップバーから、「ファイル」→「インポート」→「Wavefront OBJ(実験的機能)」を選択します。

コチラの設定画面が開きます。
先ほど示したエクスポートと比べて、設定項目が非常に少ないですね。

設定メニューの内容はコチラです。
- トランスフォーム
- バウンディングボックスで制限:インポートするオブジェクトのサイズを、一定の大きさに収まるように制限します。
- 「前方の軸」「上」:Blenderの座標系の向きにあわせて、モデルの座標系を変換します。
出力先のソフトの設定によって、「Yが上」などに設定する必要があります。
- オプション:「メッシュを検証」で、OBJファイルのメッシュエラーの確認・修正ができます。
(読み込み速度は遅くなります。)
OBJファイルをインポートすると、MTLファイルが同じフォルダにあれば自動で読み込まれます。

インポートしたOBJファイルが表示されない時は?
外部ソフトからエクスポートしたOBJファイルをBlenderにインポートしても「見えない・表示されない」場合は、以下の原因が考えられます。
- インポートしたOBJファイルの座標が、(0,0,0)から遠く離れたところにある
- インポートしたOBJファイルのスケールが大きすぎ/小さすぎて見えない
OBJファイルをインポートしたら、まずはアウトライナーを見てインポートしたオブジェクトがあることを確認しましょう。

次に、「オブジェクトプロパティ」の「トランスフォーム」→「位置」を確認して、遠く離れた位置にあるようであれば[X=0,Y=0,Z=0]に設定するとコチラのように表示されるようになります。

また、「/」(スラッシュ)を押しても表示されないようであれば、オブジェクトのスケールが大きすぎてビュー範囲から外れている可能性があります。
その場合は「N」キーでサイドメニューを表示し、「ビュー」→「終了」を非常に大きな数字に設定するとコチラのように表示されるようになります。
オブジェクトが大きすぎ/小さすぎの場合は、「S」キーで拡縮することでスケールを調節できます。
また、オブジェクトが大きすぎの場合は、インポートの際に「バウンディングボックスで制限」を有効にすることで、サイズを制限することができます。

Blender3.1以前のバージョンの場合
Blender3.1以前のバージョンの場合は、標準搭載アドオン「Wavefront OBJ format」を有効化しないとOBJファイルをインポート/エクスポートできない仕様になっています。
やり方を簡単に紹介します。
アドオンを有効化しよう
コチラのように、「プリファレンス」からアドオン「Import-Export: Wavefront OBJ format」を有効化しましょう。

アドオンの有効化の方法については、コチラの記事にまとめているので、あわせて参考にしてみてください。
インポート・エクスポート
アドオンを有効化すると、トップバーの「ファイル」→「インポート/エクスポート」→「Wavefront (.obj)」が選択できるようになります。
あとは、Blender 3.2の方法と同様にインポート/エクスポートできます。
(設定内容は、特にBlender3.1以前と3.2で変更はありません。)

まとめ
OBJファイルを使ったインポート・エクスポートの方法についてまとめてみました。
OBJ/MTLは、外部ソフトとのデータのやり取りによく使われるフォーマットだと思うので、参考にしていただければと思います。
Blender3.2では、アドオン不要で読み書きが高速になったので、ぜひ試してみてください!
コメント