UltKit

STL・OBJ・3MFの違いとは?3Dファイル形式の選び方

スライスするだけの単色プリントにはSTL、レンダリングやゲームエンジン向けにテクスチャを持つモデルにはOBJ、スライサーが対応していて単位・色・複数パーツをそのまま受け渡したい場合は3MFを使います。形式が決めるのはメッシュと一緒に運ばれるメタデータであり、メッシュ自体に問題がないかどうかは形式では決まりません。

Jonas WeberJonas WeberWebパフォーマンス担当編集者
更新日 12 分で読めます
白い机の上に置かれた透明な筐体の家庭用3Dプリンター。3Dモデルを表示したノートパソコンと、地形マップや赤い歯車などカラフルな造形物が並んでいる

STL:三角形の一覧だけを持つ形式

STLは1987年に3D Systemsの最初の光造形機のために作られた形式で、その設計にも成り立ちが表れています。ファイルは三角形を並べただけのリストで、各三角形は面の法線と3つの頂点で表されます。頂点テーブルを共有しないため、6つの三角形が接する頂点は6回書き込まれます。単位のフィールドもなく、座標の25がミリメートルなのか、インチなのか、メートルなのかは分かりません。ほぼすべてのスライサーはミリメートルと推測します。色、テクスチャ、パーツ名を入れる場所も基本仕様にはなく、だからこそ今でもすべてのスライサー、CAD、造形サービスで読み込めます。

STLには2種類のエンコードがあります。ASCII STLはすべてをテキストで書き出し、facet normal、outer loop、vertex 12.5 0 3.2 のような行が並ぶため、テキストエディタで開いて数値を読めます。バイナリSTLは80バイトのヘッダーと4バイトの三角形数で始まり、その後に各三角形を4バイトの浮動小数点数12個と2バイトの属性フィールドで保存します。つまり1三角形ちょうど50バイトで、サイズを予測しやすい形式です。100万三角形のモデルはバイナリで約50 MBですが、同じメッシュのASCII版は、数字が1桁ずつ文字になるため通常4〜6倍の大きさになります。

このシンプルさは強みであると同時に落とし穴でもあります。STLからは、1つのパーツのつもりだったのか3つなのか、インチで書き出されたのか、三角形が実際に中身のある立体を囲んでいるのかが分かりません。スライサーが生の座標から判断するので、推測が外れると、25.4倍小さいパーツや壁の欠けが生じます。自分で設計してミリメートルで書き出した単色のパーツなら、これらは問題にならず、STLは今でも最も拒否されにくい形式です。

OBJ:ポリゴン、UV、付属のマテリアルファイル

OBJはWavefront Technologiesが開発した形式で、同社のAdvanced Visualizerが1980年代後半に使用し、1990年代にほぼすべての3Dソフトがやり取りできるテキスト形式として広まりました。STLと違って頂点リストを持ち、インデックスで面を構成するため、共有される頂点は1回だけ保存され、面は三角形、四角形、それ以上の多角形にもできます。v で始まる行は位置、vt はテクスチャ座標(UV)、vn は法線、f は面を表します。グループ(g)とオブジェクト(o)でパーツに名前が付くため、Blender、Maya、ZBrushを行き来しても構造が保たれます。

見た目の情報は .obj ファイルの外にあります。mtllib の行が付属の .mtl ファイルを指定し、usemtl の行で面にマテリアルを割り当てます。.mtl ファイルには Kd(拡散色)などの色が保存され、map_Kd wood.png のような記述でテクスチャ画像を参照します。したがってテクスチャ付きOBJは、ジオメトリ、マテリアルライブラリ、1つ以上の画像という少なくとも3つのファイルで構成され、すべて相対パスで参照されます。.obj だけを送ると、受け取った側にはグレーのモデルが表示されます。この分離は、アーティストがジオメトリに触れずにテクスチャを差し替えるゲームやVFXの制作では便利ですが、ダウンロードしたモデルの見た目がおかしくなる最も多い原因でもあります。

OBJもスケールに関してはSTLと同じ弱点があり、単位のない数値だけを保存します。多くのモデリングツールはメートルやセンチメートルで書き出しますが、スライサーはミリメートルで読むため、ゲームアセットストアのOBJは10倍や1,000倍ずれて届くことがあります。造形用としては、一部のツールの頂点カラーを除き、スライサーが使う情報をOBJは何も追加しません。アート用のアセットを造形するなら、テクスチャはレンダリング用に残し、スライサーにはきれいなメッシュを渡すのが簡単です。逆方向では、STLをOBJに変換するのが、造形用モデルをレンダリングやゲームの作業に取り込む最短の方法です。

3MF:印刷用に設計されたZIPパッケージ

3MFは2015年に3MFコンソーシアムが公開した形式で、このコンソーシアムはMicrosoftが中心となり、3DプリンターやCAD業界の企業と立ち上げたものです。.3mf ファイルはZIPアーカイブで、ZIP・RAR・7zの違いで取り上げたものと同じ入れ物です。拡張子を .zip に変えると、メッシュを収めた 3D/3dmodel.model というXMLファイル、コンテンツタイプのファイル、リレーションシップのファイルのほか、サムネイルやスライサーの設定が入っていることもよくあります。各モデルは単位(マイクロン、ミリメートル、センチメートル、インチ、フィート、メートル)を宣言するため、STLやOBJにつきまとうスケールの問題は起こりません。色、基本マテリアル、複数のオブジェクト、ビルドプレート上の配置も仕様に含まれます。

仕様はさらに、メッシュがマニホールドで向きが一貫していることを求めています。すべての辺がちょうど2つの三角形に共有され、すべてが外向きでなければなりません。規則に従うエクスポーターは、STLなら平気で保存できる開いたジオメトリや自己交差したジオメトリを書き出せません。現行ツールの対応は広く、PrusaSlicer、Bambu Studio、OrcaSlicer、UltiMaker Curaが3MFを読み込めます。PrusaSlicerとBambu Studioは造形設定やペイントした色を含むプロジェクト全体を .3mf で保存し、WindowsのMicrosoft 3D Builderアプリも直接開けます。弱点は、今もSTLを前提とする古いファームウェア、プリントファームのポータル、CADインポーターです。その場合は3MFをSTLに変換しますが、付加情報は失われます。

from ↓ · to →UnitsColorTextures複数パーツ造形設定マニホールド規則
STL– STL to Units: no– STL to Color: no– STL to Textures: no– STL to 複数パーツ: no– STL to 造形設定: no– STL to マニホールド規則: no
OBJ– OBJ to Units: noOBJ to Color: yesOBJ to Textures: yesOBJ to 複数パーツ: yes– OBJ to 造形設定: no– OBJ to マニホールド規則: no
3MF3MF to Units: yes3MF to Color: yes3MF to Textures: yes3MF to 複数パーツ: yes3MF to 造形設定: yes3MF to マニホールド規則: yes
supported not offered行は形式、列はファイル自体が保持できる情報です。OBJの色とテクスチャには別の.mtlファイルと画像が必要で、3MFのテクスチャはマテリアル拡張で扱います。バイナリSTLの未使用バイトに色を書き込むツールもありますが、標準規格はありません。
木製の作業台に並ぶフレーム剥き出しの3Dプリンター。手前の1台のビルドプレートには青い円柱状のパーツがいくつも載っている
写真:Unsplash

用途に合った3Dファイル形式の選び方

適した形式は、新しさではなく、ファイルの渡し先で決まります。次がスライサーで単色のパーツならSTLで十分で、あらゆるフォーラム、モデルライブラリ、造形サービスが今も対応しています。次がレンダラー、ゲームエンジン、他のアーティストのモデリングツールなら、STLが捨ててしまうUV、法線、名前付きグループをOBJが保持し、テキスト形式なので問題も調べやすくなります。

3MFが役立つのは、ファイルがジオメトリ以外の情報を持つときです。Bambu Studioでペイントした多色造形、1回の造形に配置した12個のパーツのプレート、インチで設計したパーツ、積層ピッチやインフィルを同じ設定で開き直したいプロジェクトには3MFが必要で、ここで挙げた他の形式にはその情報を保存できません。複数の渡し先がある場合は、最も情報の多いバージョンをマスターとして保管し、変換を重ねるのではなく、3Dモデル変換でそこから簡易版を書き出してください。

通常の造形にはSTL

1パーツ、単色、ミリメートルで書き出し。あらゆるスライサー、CADの読み込み画面、造形サービスのアップロードフォームで開けます。

テクスチャ付きモデルにはOBJ

Blender、Maya、Unity、Unreal向けのUV、法線、名前付きグループ。.mtlファイルとテクスチャ画像も一緒に渡してください。

最新のスライサーには3MF

実際の単位、色、複数のオブジェクト、造形設定を1つのZIPに。PrusaSlicerとBambu Studioのネイティブなプロジェクト形式です。

3Dファイルでよくある5つのトラブル

形式のせいにされる造形の失敗や読み込みエラーの多くは、実際にはメッシュの問題か、受け取るプログラムがメッシュについて行った想定の問題です。STLはミスを見つけるメタデータがないため最も影響を受けやすく、OBJもスケールやファイル欠落の問題を共有し、3MFは設計上ほとんどを避けられますが、いい加減なエクスポーターだと不良メッシュを書き出すこともあります。以下の項目を開くと、それぞれの失敗の見え方と主な原因が分かります。

非マニホールドメッシュ

1つの三角形、または3つ以上の三角形に共有される辺、面と面の隙間、厚みゼロの壁などです。スライサーでは層の欠け、ランダムな穴、開いた辺の警告として表れます。原因はモデリングやエクスポートにあり、触れているだけのパーツを結合したときによく起こります。

法線の反転

一部の三角形が内向きになっています。レンダラーでは黒や透けた部分が表れ、スライサーはその領域を空間として扱うことがあります。Blender、Meshmixer、スライサーの修復ツールにある法線の再計算で直ります。

ミリメートルとインチの取り違え

インチで描いたパーツは、ミリメートルを前提とするスライサーで25.4倍小さく読み込まれ、センチメートルをミリメートルとして読むと10倍の誤差になります。STLとOBJは単位を記録できないため、エクスポートや変換のときに指定します。

.mtlファイルやテクスチャの欠落

OBJがグレーやマゼンタで読み込まれる場合は、マテリアルライブラリか画像が失われているか、.mtl 内のパスが元の作者のパソコンのフォルダを指しています。すべてのファイルを1つのフォルダに入れ、まとめてZIPにしてください。

巨大なASCII STLファイル

精細なスキャンデータをASCII STLで保存すると数百MBを超えることがあり、スライサーが重くなり、アップロード上限にも達します。同じメッシュをバイナリSTLで書き出し直すと、三角形を1つも変えずに約5分の1になります。

各形式の一般的なファイルサイズ

サイズは構造から決まります。バイナリSTLは1三角形あたり50バイトで固定なので、書き出す前に計算できます。ASCII STLは各頂点をテキストで繰り返すため、通常はバイナリの4〜6倍になります。OBJは共有頂点を1回だけ保存してインデックスで参照するため、一般的な閉じたメッシュではASCII STLより小さく、バイナリSTLとほぼ同程度で、UVや法線も含めるとそれより大きくなります。3MFはインデックス化したXMLをZIP内で圧縮するので、同じジオメトリなら通常3つの中で最小です。

以下の数値は、精細なフィギュアのような約50万三角形の閉じたメッシュの一般的な値です。実際のファイルは座標の精度やエクスポーターで変わるため、桁の目安として見てください。造形サービスのアップロード上限があるときや、3MFから書き出したSTLが数倍大きくなったときに役立ちます。

バイナリSTL(50万三角形 × 50バイト)
≈ 25 MB
ASCII STL、同じメッシュ、一般的な値
≈ 100–150 MB
UVなしのOBJ、一般的な値
≈ 15–30 MB
ZIP圧縮後の3MF、一般的な値
≈ 5–12 MB

3Dモデル変換で直せること、決して直せないこと

変換は、ある入れ物から三角形を読み取り、別の入れ物に書き込む処理です。変換先の形式で表現できるものは引き継がれ、表現できないものは捨てられます。そのため、STLからOBJへの変換はジオメトリについては損失がなく、3MFからSTLでは色、単位、プレートの配置が失われ、OBJからSTLではテクスチャとパーツ名が失われます。UltKitの3Dツールでは、追加の設定が明示されています。モデルの単位は元データのスケールを指定し、上方向の軸はゲームエンジンとスライサーのY軸上向きとZ軸上向きの違いを扱い、1つのメッシュに統合は別々のパーツを分けたままにするかを決めます。

どの変換でもメッシュの修復は行われません。STLに穴があれば、そこから作ったOBJにも同じ穴があり、3MFのエクスポーターは拒否するか、そのまま書き出します。修復はメッシュツールやスライサー内蔵の修復機能で行う別の作業で、他の形式に書き出す前に、マスターファイルで1回だけ行うのが最善です。スケールも同じで、インチのつもりだったパーツでも、指定しなければ変換では分かりません。ディテールも同様で、低ポリゴンのSTLは低ポリゴンのOBJや3MFになるため、品質が重要なときは元のモデルから書き出し直してください。

形式の変更でできること

  • 同じ三角形を、別のプログラムが受け付ける入れ物に移す
  • モデルの単位で選んだ単位を適用し、25.4倍や10倍のスケール誤差を直す
  • 上方向の軸でモデルをY軸上向きとZ軸上向きの間で回転する
  • ASCII STLをバイナリで書き出して小さくする
  • 1つのメッシュに統合の設定に応じて、別々のパーツを保持または統合する

そのまま変わらないもの

  • 穴、開いた辺、非マニホールドのジオメトリ
  • 反転した法線や一貫性のない法線
  • 自己交差するパーツや厚みゼロの壁
  • 最初にメッシュを書き出したときに失われたディテール
  • 変換先の形式に保存場所がない色やテクスチャ

比較表:STL・OBJ・3MFのどれを選ぶか

この質問になると、ほかに2つの形式がよく話題に上がります。STEP(ISO 10303)は三角形ではなく正確なソリッドとサーフェスを保存するため、パーツを Fusion 360、SolidWorks、FreeCAD に戻して編集する場合に使う形式です。GLB は Khronos Group の glTF 2.0 のバイナリ形式で、メッシュとマテリアル、テクスチャを1つのファイルにまとめ、単位はメートルです。Webでのモデル表示や Android の AR に向いています。

この記事で扱う3つの形式については、下の表に出力先ごとの選び方をまとめました。2つの行に当てはまる場合は、より多くの情報を持てる形式を選び、シンプルな形式は後で書き出してください。3MFからSTLへの変換は簡単ですが、失われた色や単位を作り直すのは手作業になります。

ファイルの用途で選ぶ
状況最適な形式理由
単色のパーツをどのスライサーでも使いたいSTL(バイナリ)どこでも対応しており、スライサーに追加情報は不要です
モデルライブラリや出力サービスにアップロードするSTL、可能なら3MFもSTLは必ず受け付けられ、3MFは単位と色を保持します
多色・複数素材での造形3MFスライサー向けに色とパーツごとの素材を保存できる、この中で唯一の形式です
印刷設定つきで複数パーツを1枚のプレートに配置する3MFオブジェクトの配置とスライサー設定を1つのファイルに保存できます
インチで設計したパーツ3MF単位を宣言するため、25.4倍のスケール変換が起きません
Blender、Unity、Unreal 用のテクスチャ付きモデルOBJ(+ .mtl と画像)UV、法線、マテリアルの割り当てを保持します
テキストエディタで手早く中身を確認したいOBJ または ASCII STL1行ずつ読めるプレーンテキストです
STLしか選べない古いファームウェアやソフトSTL余分な情報を除き、メッシュだけを送ります

ポイント

  • STLは三角形だけを保存します。単位も色もなく、バイナリ形式では1三角形あたり50バイトです。
  • OBJはUV、法線、名前付きグループを追加できますが、色とテクスチャは別の .mtl ファイルと画像ファイルに依存します。
  • 3MFはXMLをZIPにまとめた形式で、単位、色、複数のオブジェクト、印刷設定を記録でき、閉じたメッシュが必要です。
  • 単色の通常の造形にはSTL、アートやゲーム制作のテクスチャ付きモデルにはOBJ、スライサーが対応しているなら3MFを使いましょう。
  • 変換で変わるのは入れ物であり、メッシュ自体は変わりません。穴や法線の修復はメッシュツールで行い、単位は自分で設定してください。
共有XFacebookWhatsAppTelegram

よくある質問

STLは3MFに置き換わりつつあるのですか?

3Dプリントの現場ではゆっくりと進んでいます。PrusaSlicer や Bambu Studio はすでにプロジェクトを3MFで保存しますが、STLはすべてのツールとモデルライブラリが受け付ける形式であり続けるため、両者は今後数年は共存します。

バイナリSTLに色を保存できますか?

標準的な方法ではできません。一部のソフトは各三角形の2バイトの属性フィールドに色を書き込みますが、ほとんどのスライサーは無視します。色が重要なら3MFかOBJを使ってください。

ダウンロードしたOBJがグレーで表示されるのはなぜですか?

.mtl ファイルやテクスチャ画像が置き去りになっているか、.mtl 内のパスがお使いのコンピューターに存在しないフォルダを指しています。.obj、.mtl、画像を同じフォルダに入れて、モデルを読み込み直してください。

ASCII STLとバイナリSTLでは、どちらが精度の高い印刷になりますか?

実際の造形精度はどちらも変わりません。どちらも同じ三角形を表し、バイナリは座標を32ビット浮動小数点で、ASCIIはテキストで保存します。バイナリのファイルは通常、数分の1の大きさになります。

OBJを印刷用にSTLへ変換し直せますか?

はい、できます。三角形はそのまま引き継がれ、UV、マテリアル、テクスチャはSTLに保存する場所がないため削除されます。モデリングツールのOBJはメートルやセンチメートル単位であることが多いため、変換後にスケールを確認してください。

他の人に印刷してもらうためにモデルを共有するなら、どの形式が適していますか?

幅広く使えるようにSTLを用意し、モデルが複数パーツ、多色、またはインチで設計されている場合は、最新のスライサーを使う人がすべての設定を得られるよう、3MFも並べて提供してください。

関連記事