まずエラー表示で直す場所を決める
- resource_budget / certified_target_not_reached:形状を守る自動軽量化が時間・メモリ・安全面数の範囲で完了していません。部品分割か、外部ツールでの段階的な面数削減が必要です。
- component_budget:複数bodyを一律に削ると、小さな部品を消す恐れがあります。bodyごとに分離し、各部品に必要な面数を残して個別に処理します。
- quality_failed:STEP自体は作れても、元形状との距離・体積・外形寸法の基準を超えています。5,000面で落ちた場合は10,000→20,000面と段階的に増やします。
- non-manifold / topology / self-intersection:穴とは限りません。1本のedgeを3枚以上の面が共有する、内部面が重なる、shell同士が線で接触する、といった状態を先に直します。
- timeout / memory:同じ設定で繰り返すより、アップロード前に軽量化するか、意味のある部品単位に分ける方が確実です。
共通の安全手順
原本を保存する
元STLには上書きせず、作業用コピーを作ります。単位と外形寸法、body数も記録します。
メッシュを診断する
三角形数、水密性、boundary edge、non-manifold edge、連結body数、退化三角形を確認します。エラー名だけで穴埋めを始めないでください。
loose partを分ける
独立した部品はbodyごとに分けます。小さなねじ、キー、ピンなどを大きな本体と同じ割合で削減しないためです。
破損を先に直す
重複面、面積ゼロの三角形、内部面、自己交差を除去します。non-manifold edgeは、どの面同士が同じshellかを見て分離またはBoolean結合します。
部品ごとに軽量化する
平面部はLimited Dissolve、曲面部はQEM系のDecimateを使います。鋭い稜線、穴の縁、薄い爪、嵌合面を優先して残します。
保存後のSTLを再診断する
一度STLを書き出して閉じ、その保存ファイルを再度開いて、水密性、body数、法線、自己交差、単位と外形寸法を確認します。保存前のメモリ上では正常でも、STLの座標量子化や頂点統合でnon-manifoldになる場合があります。
PartSmithで再変換する
最初は形状を残す設定で試し、quality_failedなら面数を10,000→20,000と増やします。複数bodyは個別変換後にCADでまとめる方法も使えます。
非多様体edgeは「全穴埋め」しない
boundary edgeが0本でもnon-manifoldになることがあります。代表例は、複数の閉曲面が同じedgeで接触している状態や、同じ場所に内部面・重複面が残っている状態です。この場合、穴埋め機能は修復対象を見つけられません。問題edgeの周囲をワイヤ表示し、面の向きとつながりを見ながら、意図したshellごとに分離するか、重なったsolidをBoolean Unionします。どちらが正解か一意に決まらない場合は、PartSmithが推測しないのが正常です。
意図が『接触shellを1つのsolidとして一体化する』と明確な場合に限り、voxelまたはlevel-setで体積を再構築する方法も使えます。これは穴埋めではなく形状意味の選択です。解像度を記録し、元STLとの双方向距離とbboxを必ず測ってください。別部品として残すべきモデルへ無断で使ってはいけません。
- Blender:Edit Modeで全選択し、Mesh > Clean Up > Merge by Distanceを実行。その後 Select > Select All by Trait > Non-Manifold で問題箇所だけを確認します。
- 重複・内部面:透過表示やFace Orientationを使い、同じ位置の面やsolid内部の壁を削除します。
- 線・点だけで接触するshell:意図が別部品なら頂点とedgeを分離し、別objectとして書き出します。意図が一体なら十分な重なりを作ってBoolean Unionします。
- 大きな開口:元形状から蓋の位置を安全に推定できない場合は、自動で塞がず、CAD上で閉じる面を明示します。
数十万〜数百万面は段階的に減らす
高密度なwatertight STLは壊れていなくても、証明付きの削減処理が安全時間内に目標へ届かないことがあります。いきなり5,000面にせず、まず100,000面、次に50,000面、最後に20,000〜30,000面のように段階を分けると、各段階で崩れた場所を見つけやすくなります。機械部品では平面を先にLimited Dissolveし、残った曲面へQEMを使うと効率的です。有機形状は輪郭と顔・指・ベルトなどの細部を目視し、必要なら面数を多めに残します。QEMでnon-manifoldが生じる場合は、topology-preserving decimatorかmanifold維持方式へ切り替えます。
- MeshLab:Cleaning and Repairing系で重複頂点・重複面・ゼロ面積faceを除去し、Quadric Edge Collapse Decimationで境界・法線・トポロジー保持を有効にします。メニュー名は版により少し異なります。
- Blender:平面主体ならLimited Dissolve、自由曲面主体ならDecimateのCollapseを使い、適用前後を切り替えて穴・文字・爪・薄肉部を確認します。
- 面数だけで判断せず、各bodyに最低限必要な面を残します。7個の小部品を含むモデルを全体比率だけで削ると、小部品が先に消えます。
複数bodyは個別変換が最短のことがある
2つの独立bodyがそれぞれ約26,000面なら、全体では30,000面を超えても、各bodyを別STLに書き出せば安全上限内に入ります。Blenderの Separate > By Loose Parts、MeshLabの連結成分分割などで分け、部品ごとにPartSmithへ入力します。変換後はFusion 360やFreeCADで同じ座標のまま読み込み、1つのassemblyまたはcompoundとして保存します。原点を動かさずに書き出すのが重要です。
quality_failedは面数を戻して再試行する
5,000面への削減後に体積差は小さくても、曲面の距離P95だけが1%を超えることがあります。この場合は修復ではなく、近似が粗すぎるのが原因です。10,000面で再変換し、まだ不合格なら20,000面へ増やします。穴の円周、薄いクリップ、曲率の強い角へ面を優先して残すと改善しやすくなります。
極小スケールは作業中だけ拡大する
bboxが数mm以下のモデルでは、STLやOCCの絶対公差に対して形状が小さすぎ、正常な水密メッシュでもsolid化に失敗することがあります。単位が正しいと確認できている場合は、作業用コピーを1000倍してSTEP変換し、CADでSTEPを厳密に1/1000へ戻します。戻したSTEPのbbox・体積・元STLとの距離まで確認して初めて完了です。単位を推測で変える操作ではないため、倍率と原点を記録してください。
再入力前の合格チェック
- 元STLと修復版の双方向P95距離が、外形対角長に対して1%以下
- 体積差の絶対値が0.5%以下
- 外形寸法の最大差が1%以下
- 意図したbody数を維持し、各bodyがwatertightな閉じたsolidになっている
- 小さな部品、穴、爪、文字、嵌合面が消えていない
今回の失敗パターンならこう進める
- 約2万面・non-manifold edge多数:問題edgeのface fanを目視で分離し、内部面を除去。1 solidへ統合する意図が明確なら、承認付きのvoxel体積再構築も候補です。
- 約20万面・quality_failed:5,000面ではなく10,000→20,000面で再試行し、曲面と取付部へ面を戻します。
- 約50万〜190万面・resource_budget:機械部品は平面を先に整理し、意味のある部品単位で20,000〜30,000面へ。有機形状は細部欠落を許容できるか確認します。
- 約5.3万面・独立2body:2つのSTLへ分離し、それぞれを変換してCADで再結合します。最も回収しやすいパターンです。
- 複数キー+non-manifold:退化fragmentを除去し、別部品を維持するならloose partごとに個別修復します。一体solidでよい場合だけvoxel unionを明示承認します。
実走確認:7件はどこまで回収できたか
2026-08-01にThingiverse実モデルのFAIL-CLOSED 7件へ上の手順を実行し、PartSmith本体でSTEP化した後、未加工の元STLへ直接照合しました。Motor Mountだけ2 bodyを別STEPにしたため成果物は8個で、8個すべてがclosed solid・free edge 0でした。
- Guitar Hero Cover:1,884,104面をmanifold維持で整理。最終STEP P95 0.3329%、体積差0.0009%。
- Bosch Support:QEM 10,000面から再変換。最終STEP P95 0.4409%、体積差0.0034%。
- P-40-K Bolt Pistol:QEM 30,000面から再変換。最終STEP P95 0.6469%、体積差0.0722%。
- Simple Backpack:manifold整理+局所MeshFix、1000倍作業スケールから1/1000へ正規化。最終STEP P95 0.6086%、体積差0.0036%。
- Motor Mount:原点を保持して2 bodyへ分割。両STEPとも元componentに対してP95 0.0000%、体積差0.0000%。
- Action Force Boat:0.75mm voxel体積再構築でP95 0.4097%。元が非多様体なのでユーザー承認付きのみ。
- T10x Keys:2.0mm voxel union+VTK 30,000面化でP95 0.7617%。body意味を1 solidへ変えるためユーザー承認付きのみ。
やってはいけないこと
- non-manifoldという理由だけで、すべての開口を自動で塞ぐ
- 意味を確認せず、離れた小部品や退化片をまとめて削除する
- 複数bodyを全体の一律比率で5,000面へ落とす
- レンダリングが似ているだけで、元形状と同じと判断する
- 元STLへ上書きし、どこを変更したか追跡できなくする
登録もインストールも不要。STL / OBJ をドロップするだけで 3D プレビューが立ち上がります。
STEP変換をもう一度試す →