STL を GLTF に変換

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

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

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

訪問者に STL を見せるには変換が必要になる

ブラウザーは STL も glTF もそのままでは描画できず、どちらも実行環境が必要です。three.js には STL 用のローダーが付属しているため、STL をそのまま配信すればよいという考え方もあり、社内向けの一度きりのツールならそれで十分です。

ページが公開され、モデルそのものがコンテンツになる場面では話が変わります。STL は通信量の面で最も非効率な形式のひとつで、境界を持たないためカメラの位置を解析後に計算する必要があり、すべての三角形が重複した頂点を伴って届きます。glTF はこの転送のために設計された形式で、これら 3 つの問題をすべて解決します。

頂点の統合がサイズ削減の中心

バイナリの STL は三角形の数を n とすると必ず 84 + 50n バイトで、形状によらずこの計算式が成り立ちます。50 バイトの内訳は面法線に 12 バイト、3 つの完全な頂点に 36 バイト、未使用の 2 バイトです。何も共有されないため、立方体でも 8 つの角に対して 36 個の頂点記録が必要になります。

この変換は座標を小数点以下 6 桁で丸めてキーを作り、同じ位置にある頂点をすべて 1 つに統合します。閉じた表面では 1 つの頂点がおよそ 5 個から 6 個の三角形に使われるため、頂点データはその割合でおおよそ減ってから float32 として書き出されます。三角形あたり 12 バイトの uint32 インデックスを足しても、実際に閉じたメッシュであれば glTF の形状データは元の STL より小さく収まります。

glTF の中身とビューアーの寄り方

1 つのシーン、1 つのノード、1 つのメッシュ、1 つの三角形プリミティブ、float32 の VEC3 位置アクセサー、uint32 の SCALAR インデックスアクセサーで構成され、asset ブロックはバージョン 2.0 を宣言します。バッファーは base64 のデータ URI として埋め込まれ、単体で完結するファイルになります。

POSITION アクセサーには仕様が要求する min と max が書き込まれており、これがあるかどうかがモデルが表示されるかどうかの実質的な分かれ目になります。model-viewer や three.js はこの 6 個の数値から初期のカメラ距離を計算するため、これらがないファイルは何もない場所へズームした状態で開き、その状態は壊れた読み込みと区別がつきません。

フラットシェーディングは正しい見え方

NORMAL 属性は書き込まれず、glTF の仕様では法線を持たないメッシュに対してビューアーが面ごとのフラットな法線を計算するよう定めています。スカルプトツールから読み込んだ有機的なモデルであればこれは欠点に見えますが、CAD から出力された STL に対しては、これが実際の形状を正直に表しています。

STL には曲面がありません。エクスポーターがそのときの許容誤差で作った三角形があるだけで、それをなめらかに陰影づけて描くのは、プリンターが実際に再現する形状について見栄えの良い嘘をつくことになります。プレビューをなめらかに見せたいなら、法線を平均化してごまかすのではなく、より細かい許容誤差で STL を書き出し直すのが正攻法です。

ミリメートルとメートル——単位のずれに注意

STL は単位を宣言せず、エンジニアリングや 3D プリントの現場ではその数値をミリメートルとして読む慣習になっています。glTF 2.0 は距離の単位をメートルと定めています。この変換は座標をそのまま渡すため、元にない係数を推測してかけることはしません。

そのため、60 mm のブラケットは glTF の中では 60 メートルのブラケットになります。単体で見る限りは境界からカメラが自動的に寄ってくるので違和感はありませんが、シーンの中で他の何かと並んだ瞬間におかしくなり、物理ベースのライティングもこのスケールでは違う挙動をします。ビューアーのノードに一様な 0.001 のスケールを設定するか、ビルド時に gltf-transform で適用してください。

1 つの STL は 1 つのメッシュ、1 回の描画呼び出し

STL には部品やグループ、オブジェクトという概念がないため、glTF には正確に 1 つのプリミティブだけが含まれます。これは描画にかかるコストとしては最も安く、300 個のグループを持つ CAD の書き出しにありがちな描画呼び出し過多の問題を STL 由来のモデルは起こしません。

マテリアルもテクスチャも UV 座標も頂点カラーもありません。元の STL がそれらを一切持っていなかったからです。ビューアーは既定のマテリアル、たいてい中間のグレーの物理ベースマテリアルを適用します。three.js で別のマテリアルを 1 行で割り当てる価値はあり、金属感をわずかに加えて環境マップを設定するだけで、技術部品の見え方が既定よりずっとわかりやすくなります。

base64 のバッファーと GLB を選ぶタイミング

ここで書き出される .gltf はバッファーを base64 のデータ URI として埋め込むため、別途 .bin を配信する必要がなく、相対パスが壊れる心配もありません。base64 は 3 バイトを 4 文字で表すため、その利便性の代償としておよそ 33 パーセントほどバイト数が増え、整形された JSON の分も加わります。

確認したり差分を取ったり、ビルド時に gltf-transform に渡したりするファイルなら glTF を、訪問者が実際にダウンロードするファイルなら GLB を選んでください。同じ形状、同じ境界情報で、バッファーがバイナリになり、リクエストが 1 回で済みます。STL をどちらに変換するかはこのページの中では同じ処理で、拡張子だけが違いです。

STL はどこにも運ばれずに glTF になる

この処理はページの中で普通の JavaScript として動きます。ダウンロードする WebAssembly エンジンも、モデルを運ぶリクエストも、待ち行列もありません。ウェブ用のプレビューに変換される STL は顧客の部品や未発表の製品であることが多く、アップロードされたジオメトリで見積もりを出すような業者にとって、これがどこにも送られないことには実際の意味があります。

無料の上限は 100 MB で、三角形あたり 50 バイトとして計算すると 200 万三角形のモデルに相当します。これほど大きなファイルは、変換の前に減らしておく価値があります。glTF もそれに比例して大きくなり、スマートフォンのブラウザービューアーはどの形式であっても快適には扱えません。

STL を GLTF に変換する手順

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

STL と GLTF——何が変わるか

STLとGLTFの比較
STLGLTF
正式名称StereolithographyGL Transmission Format
拡張子.stl.gltf
メディアタイプmodel/stlmodel/gltf+json
最初の公開19872015
発行元3D SystemsKhronos Group
仕様glTF 2.0
ライセンスオープン標準オープン標準
現在の位置づけ現行現行
ブラウザで開けるか対応なし対応なし
代わりに検討される形式3MF, OBJ, PLYGLB, OBJ

結果を開く

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

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

2 つは狙っている用途が違います。STL は3D プリント、GLTF はウェブと完成したファイルの受け渡しです。ここは考える価値があります。一方が存在する理由が、そのままもう一方が使いにくい理由になっていることが多いからです。

GLTF は Khronos Group の形式で、2015 年から使われています。規定は glTF 2.0 です。Blender、three.js、Babylon.jsがこの形式を読めます。

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

STL から GLTF:よくある質問

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

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

STL から GLTF への変換は無料ですか。

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

STL を GLTF に変換すると品質は落ちますか。

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

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

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

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