GLB を OBJ に変換

ここで GLB を OBJ に変換できます。無料、アカウント不要です。ファイルを上の枠に落とせば、数秒で結果がダウンロードできる状態になります。 変換はお使いのブラウザーの中で行われるので、ファイルはアップロードされません。Windows でも macOS でも Linux でも、iPhone でも Android でも同じように動き、通信を切っても動き続けます。

  • 処理される場所 ブラウザーの中です。ファイルがアップロードされることはありません。
  • 作り直し OBJはGLBとは仕組みが違います。非可逆コーデックのような段階的な劣化ではありません。OBJが表現できるものは忠実に再現され、対応するものがないものはまったく残りません。
  • ファイルサイズの上限 1ファイルあたり100MBまで。無料、アカウント不要です。
  • 知っておきたいこと 形状だけです。材質・色・テクスチャ・アニメーションは引き継がれず、同じモデルを複数回配置していた場合は、それぞれの位置に焼き付けられた別々のコピーとして返ってきます。

一度に100ファイルまで。フォーマットが混ざっていても構いません。

GLB が OBJ を必要とする場面

glTF とそのバイナリ版は、多くのエンジニアやアーティストが実際に使っているソフトより 8〜9 年若い形式です。Wavefront が OBJ を発表したのは 1992 年で、いまも最大公約数の位置にあります。Blender、MeshLab、Maya はもちろん、ほとんどの CAD インポーター、メッシュ修復ツール、スライサーが読めます。Web パイプラインから出てきた GLB を、そうした世界で開くには OBJ にする必要があります。

これは品質の劣化というより、種類の違う変換だと考えたほうが正確です。GLB はシーンです——ノードの階層、材質、テクスチャ、アニメーション、カメラを持ちます。OBJ は点とその間の三角形のリストに、材質ファイルへのポインターを添えただけのものです。幾何情報以外はどこかに行き場を探すことになり、この変換ではその行き場が用意されていません。

GLB を通した OBJ ファイルの中身

3 種類の行しかありません。書き出しツール名のコメント行、メッシュごとに GLB の名前を引き継いだ o 行、頂点ごとに 3 つの小数座標を持つ v 行、三角形ごとに 3 つのインデックスを持つ f 行です。vt 行も vn 行も、s のスムージンググループも、usemtl も、mtllib もありません。

つまずきやすいのはインデックスの数え方です。OBJ のインデックスは 0 ではなく 1 から始まり、各グループでリセットされずファイル全体を通して数えられます。自分でパーサーを書く人がよく間違える部分です。この変換ではメッシュを走査しながらその通算オフセットを追跡しているので、2 つ目のオブジェクトが自分自身の最初の頂点を参照していても、それまでの合計を足したインデックスで書き出されます。ここを誤ると、開けはするのに違う三角形が表示される OBJ になり、開けないより厄介です。

欠けている MTL こそが本当のコスト

OBJ 自体は材質を持ったことがありません。材質は mtllib 行が指す別の .mtl ファイルに書かれ、色や光沢、テクスチャマップのパスはそちらに入ります。この変換は mtllib 行を書かず .mtl も作らないので、OBJ は材質的には空白で、読み込む側のソフトが既定のグレーを割り当てます。

これは幾何情報だけを読む変換の当然の結果です。GLB のメタリック・ラフネスのパラメーター、ベースカラー、法線テクスチャ、UV 座標は一切取り出されないので、MTL に書けるものが最初からありません。もっともらしい既定値だけの MTL を作るほうがかえって悪い結果になります。それは元の材質だったという誤った印象を後工程の担当者に与えるからです。

パーツ名は GLB から OBJ のグループへ引き継がれる

glTF のメッシュ名はそれぞれ、そのグループの OBJ の o 行として書き出されます。筐体、ブラケット、カバーのように名前の付いた部品で組まれたモデルなら、Blender や Maya には 1 つに融合した形ではなく、3 つの名前付きオブジェクトとして読み込まれます。名前のないメッシュには生成された名前が付き、グループ構造は見失われません。

これは見た目以上に重要です。幾何情報だけの変換では、名前だけがほぼ唯一残る意味情報で、後工程の担当者が正しいパーツに材質を割り当て直せるのも名前があるからです。GLB のメッシュが無名で、あとで区別が必要になりそうなら、書き出す前に、読み込んだあとではなく、名前を付けておいてください。

GLB のシーングラフが OBJ の頂点数を膨らませる仕組み

glTF は 1 つのメッシュを複数のノードから異なる行列で参照することで、何度も配置できます。OBJ にはこれに相当する仕組みがありません。この変換ではシーンを走査し、各ノードの行列を親のものと合成して、書き出す前に頂点座標へ焼き込むことでこの差を解消しています。

つまり、1 個のネジのメッシュが 60 回インスタンス化された GLB は、60 個のグループと 60 個分のネジの完全な複製を持つ OBJ になります。見た目はこれで正しくなります——これ以外に正しく保つ方法がないからです——が、その部分だけファイルサイズはインスタンス化されていた元の 60 倍になります。読み込み先のソフトがインスタンス化に対応しているなら、読み込んだあとにインスタンスを組み直す手間は、たいてい割に合います。

GLB の数値が OBJ の数値になるときのスケールと単位

スケール変換は一切行われません。GLB が持っていた座標値は、JavaScript が出力する精度のまま OBJ に書き写されます。これは正しい振る舞いであると同時に落とし穴でもあります。2 つの形式は「数値」の意味が違うからです。

glTF 2.0 は線形単位をメートルと定義しているので、実寸で作られた椅子の座標はおよそ 0.9 になります。OBJ には単位の宣言がなく、読み込むソフトごとに慣例が異なります——Blender では多くがメートル、古い CAD ツールではセンチメートルやインチのことが多いです。あとで印刷した部品や組み立てで係数の取り違えに気づくより、読み込み直後に既知の寸法とバウンディングボックスを一度突き合わせておくほうが確実です。

GLB のインデックスバッファが OBJ の頂点リストになる過程

そのまま渡ります。glTF はすでに三角形を共有された位置配列へのインデックスとして持っているので、再構成する必要がありません。アクセサーの各要素が同じ順番で 1 本の v 行になり、各インデックスが 1 本の f エントリになります。この経路では何もマージしません。座標の重複をまとめる処理は、重複が当たり前の STL や OBJ の読み込みで働くもので、ここでは働きません。

これは実在のエクスポーターから出た GLB で意味を持ちます。glTF は頂点ごとに UV と法線を 1 組しか持てないため、テクスチャの継ぎ目やハードエッジ上の頂点は、属性を変えるために同じ位置にもう 1〜2 個の複製が作られます。その複製は OBJ にも引き継がれますが、複製の理由だった属性のほうは引き継がれません。結果として、本来閉じているはずのモデルが、継ぎ目に沿って境界エッジを報告することがあります。Blender の「距離でマージ」や MeshLab の「近接頂点のマージ」で 1 コマンドで解決できます。

変換後の OBJ を Blender、MeshLab、Maya で開く

いずれも設定なしで読み込めます。すぐに面取りされたような見た目になることを見込んでおいてください。vn 行がないので、各ソフトが平坦な面法線を計算し、三角形分割された曲面はポリゴンの殻そのものに見えます。Blender の「シェード:スムーズ」や、30 度前後のオートスムーズ角度で、GLB にあった見た目に近づけられます。

材質は付かないものと見込んでください。3 つのどのソフトでも割り当ては数クリックで済み、モデルをビューポートの背景から見分けやすくするために最初にやっておく価値があります。モデルがまったく表示されない場合、原因はたいてい読み込み失敗ではなくスケールです。選択範囲へズームして寸法パネルを確認してください。

GLB のまま残しておいたほうがいい場合

読み込み先が glTF に対応しているなら変換しないでください。Blender、three.js、Babylon.js、Unity、Unreal、Windows の 3D ビューアー、macOS のプレビューはどれも材質を保ったまま GLB を開けます。OBJ を経由すると、それらすべてを何の見返りもなく失います。

変換すべきなのは、読み込み先が本当に glTF を読めない場合や、目視やコマンドで検査・比較できるテキストファイルが欲しい場合です。OBJ は 1 行に 1 頂点、1 行に 1 面という単純さがあり、この 6 つの形式の中でいちばん目で確認しやすい形式です。忠実さではなく、この読みやすさこそが、新しい形式に対して OBJ が今も持っている強みです。

GLB を OBJ に変換する手順

  1. お手元の GLB ファイル をこのページに落とすか、押してファイルを選んでください。
  2. 変換先に OBJ を選びます。変換はブラウザーの中で行われ、ファイルはアップロードされません。
  3. できあがった OBJ ファイル をダウンロードします。

GLB と OBJ——何が変わるか

GLBとOBJの比較
GLBOBJ
正式名称Binary glTFWavefront オブジェクト
拡張子.glb.obj
メディアタイプmodel/gltf-binarymodel/obj
最初の公開20161992
発行元Khronos GroupWavefront Technologies
仕様glTF 2.0
ライセンスオープン標準オープン標準
現在の位置づけ現行現行
ブラウザで開けるか対応なし対応なし
代わりに検討される形式GLTFGLTF, PLY, STL

結果を開く

Blenderは GLB と OBJ のどちらも読めるので、別のプログラムを開かずに、結果を元のファイルと並べて確かめられます。

どちらの形式が何のためのものか

2 つは狙っている用途が違います。GLB はウェブと完成したファイルの受け渡し、OBJ はプログラム間のデータ受け渡しと編集です。ここは考える価値があります。一方が存在する理由が、そのままもう一方が使いにくい理由になっていることが多いからです。

GLB は Khronos Group の形式です(2016 年に登場)。 glTF 2.0 で規定されています。ファイルが、それを書いた道具より長く生きなければならないなら、この一点には値打ちがあります。

OBJ は Wavefront Technologies の形式で、1992 年から使われています。Blender、MeshLab、Mayaがこの形式を読めます。

OBJ は 1992 年、GLB は 2016 年に登場しました。人に渡すならたいてい古いほうが安全で、新しいほうは同じ仕事をより少ないバイト数で片づけます。

GLB から OBJ:よくある質問

GLB ファイル はどこかにアップロードされますか。

いいえ。この変換は完全にブラウザーの中で行われるので、ファイルが端末から出ることはありません。ご自分で確かめられます。開発者ツールのネットワークタブを開いて、何か変換してみてください。ページそのものと、このサービスの費用をまかなっている分析・広告のリクエストは見えますが、あなたのファイルを運んでいるリクエストはひとつもありません。

GLB から OBJ への変換は無料ですか。

はい。アカウントも透かしもなく、消費される 1 日の割り当てもありません。お使いの機械の上で動くので、何度でも戻ってきていただけます。ブラウザーが扱えるのは 100 MB までのファイルで、一度に 100 本です。

GLB を OBJ に変換すると品質は落ちますか。

GLB と OBJ は、内容の表し方が根本から違います。ですからこの変換は複製ではなく再構築です。誠実ではありますが、1 バイトも同じというわけではありません。 形状だけです。材質・色・テクスチャ・アニメーションは引き継がれず、同じモデルを複数回配置していた場合は、それぞれの位置に焼き付けられた別々のコピーとして返ってきます。

できあがった OBJ ファイル を開くのに、何かインストールが必要ですか。

変換には要りません。すでに開いているブラウザーの中で行われます。そのあと結果を開くには、お使いの端末がふだん Wavefront Object を表示するのに使っているソフトが必要です。

これらのフォーマットについて