VITALIFY.ASIA logo

三面図から立体を起こす AI ― SDF で「形のアタリ」をつかむ

上面図・正面図・側面図の三面図から3Dモデルを起こすAIを試作。SDF(符号付き距離関数)で形状の「アタリ」を推定し、図面から取得した正確な座標と組み合わせてポリゴン化します。テスト500件でIoU 97.1%、直方体形状では72.5%が完全一致した結果と、検算方法・課題・今後の展望を紹介します。

三面図から立体を起こす AI ― SDF で「形のアタリ」をつかむ
目次

設計の現場では、上面図・正面図・側面図の三面図を見比べて 3D モデルを起こす作業が、今も手作業で行われています。これを自動化する AI を試作しています。この記事では、その中心にある SDF という考え方と、現時点でどこまでできているかを、実例を見ながら紹介します。

SDF とは

SDF(Signed Distance Function、符号付き距離関数)は、空間のどの点についても「立体の表面まで、どれだけ離れているか」を返す関数です。距離には符号が付いていて、立体の中なら負、外なら正、ちょうど表面の上なら 0 になります。

穴の開いた板(左)と、その SDF(右)。青が図形の中(負)、オレンジが外(正)で、白い線が SDF = 0、つまり図形の表面です。縞模様は距離 0.1 ごとの等高線です。穴の中は図形の「外」なので正の値になり、内側の点にとって一番近い表面は穴の縁になります。わかりやすさのため 2D で描いていますが、立体の SDF は同じことを 3D の空間全体で行います。

立体を SDF で表すと、次のような利点があります。

  • どんな形でも同じ方法で表せます。 平面も曲面も、穴やくぼみも、「距離の値」という 1 種類の情報で表現できます。
  • AI の出力に向いています。 AI は「点の座標を入れると距離を返す関数」を学習すればよく、形状ごとに頂点の数が違う、といった面倒を考えずに済みます。
  • いつでもポリゴンに変換できます。 SDF = 0 の面を抜き出せば、3D モデルになります。

弱点もあります。AI が学習した SDF は、角や細い溝がどうしても少し丸く、ぼやけます。図 1 の右でも、半円の切り欠きの中に余計な線が出ています。そこでこのプロジェクトでは、SDF を最終形状ではなく「アタリ(下書き)」として使う方針にしています。

仕組み

  1. 入力は、実線(見える稜線)と破線(隠れた稜線)で描かれた三面図です。線は画像ではなく、座標の一覧として渡します。
  2. AI は、空間の各点について、その点が各図の線に対してどこにあるか(近い線はどれか、各方向に何本の線を横切るか)を調べ、SDF の値を推定します。
  3. SDF から形の大枠をつかみます(Stage 1)。
  4. 正確な座標は図面から取り、SDF はどれを採用するかの判断に使って、正確なポリゴンを組み立てます(Stage 2)。
学習データの例。左が元の立体、右が三面図です(赤の破線が隠れた稜線)。

学習データは、直方体・円柱・球・ドーナツ(トーラス)をランダムに足したり引いたりして作った立体と、その三面図です。立体を先に作ってから三面図を描くので、正解(Ground Truth、GT)が正確にわかっています。学習には 5 万個を使い、評価は学習に一切使っていない 500 個で行います。

比較の基準として、視体積交差法(Visual Hull)も計算しています。三面図の外形線だけを使って、3 方向の影を押し出して重ねた立体です。外形だけで答えた場合の成績にあたるので、AI がこれを上回った分が「図面の中身(破線など)を読めた分」だと言えます。

現時点で達成していること

形の推定:テスト 500 個で IoU 97.1%

IoU(予測と正解の重なり率)は、テスト 500 個の平均で 97.1% です。直方体の組み合わせでは 98.7%、曲面を含む形状では 96.1% です。視体積交差法はそれぞれ 91.6%、94.2%、90.0% なので、どれも上回っています。

改善の歩み
改善の歩み。最初の AI はビジュアルハルに負けていました(88.6%)。「各方向に何本の線を横切るか」を特徴量に加えてハルを超え、学習方法の修正とデータ・モデルの拡大で 97.1% まで来ました。

実例を見てみます。左から、正解、視体積交差法、AI の出力(SDF をそのままポリゴン化したもの)です。

上部に大きなポケット(くぼみ)がある円柱。くぼみは外から見た影には映らないので、外形線だけのハルは上面が平らに塞がった円柱になります(IoU 80.3%)。AI は、正面図と側面図の赤い破線(隠れ線)からくぼみを読み取り、正確に削り出しています(IoU 100.0%)

切り欠きを重ねた箱。破線から隠れた段差を読み取り、ハルの 82.5% に対して 94.1% です。このように、複雑な形状になると現時点ではGTとのズレが生じます。

正確なポリゴン化:直方体の組み合わせで 72.5% が完全一致

SDF をアタリとして使い、正確な 3D モデルを組み立てる処理も試しました。直方体の組み合わせなら、次の手順でできます。

  1. 三面図の線の端点から、x・y・z の座標値を図面の値そのままで集めます。
  2. その座標で空間を小さな直方体(セル)に区切ります。
  3. 各セルが「中身か空か」を SDF で判定します。
  4. 中身のセルの外側の面をつないで、ポリゴンにします。
  5. できた立体から三面図を描き直し、入力の図面と一致するかを検算します。
直方体の組み合わせのテスト 189 個では、72.5% が正解と完全に一致しました(IoU 99.99% 以上)。座標は図面から取っているので、SDF が少しぼやけていても、判断さえ合っていれば寸法は正確です。

特に重要なのが、最後の検算です。検算を通った形状(56.6%)は、1 つ残らず正解と一致していました。 つまり、正解を知らなくても、図面だけで「この結果は正しい」と確かめられるということです。一方、検算で不一致になったものの中には、実際には正しいのに描画の細かい差で不一致と判定されたもの(15.9%)も含まれていて、検算の判定基準にはまだ調整の余地があります。

今後の展望と限界

展望

  • データとモデルを大きくするほど、まだ素直に伸びています。特に曲面の伸びが大きいです。
  • 曲線を細かい線分に分けず、円弧のまま AI に渡すことで、曲面のぼやけを減らせる見込みです。
  • 曲面を含む形状も、図面の円から寸法を読み取り、CAD のソフトウェア部品(OpenCascade など)で組み立てれば、正確なモデルにできるはずです。
  • 4 面以上の図や断面図にも対応させれば、隠れた形状の推定がさらに正確になります。

限界

  • 実際の図面との差:今は自分で描いた「きれいな図面」だけで学習しています。寸法線や注記、省略表記を含む実際の図面では、まだ試していません。
  • 答えが一つに決まらない図面:三面図がまったく同じになる別の立体が存在する場合があり、原理的に当てきれません。候補を並べて人が選ぶ仕組みが必要です。
  • 迷ったら埋める癖:自信がない場所では「中身あり」と答えがちで、隠れたくぼみを埋めてしまうことがあります(図 7)。
  • 細かさの限界:部品の大きさに比べてごく細い溝や薄い壁は、うまく表現できません。
失敗例。AI が右上のくぼみを「中身あり」と判定し、埋まってしまいました。検算は不一致を正しく検出していますが、自動で直すところまではできていません。

SDF は単独では寸法の正確な CAD にはなりません。でも「形のアタリ」としてはかなりの精度に達していて、図面から取った正確な座標と組み合わせれば、完全に正しい 3D モデルを起こせることが見えてきました。

おわりに

SDF は、単独では寸法の正確な CAD データにはなりません。
角は少し丸まり、細い溝はぼやけます。

それでも、「どこに物があって、どこが空いているか」という形のアタリとしては、学習に使っていない形状で 97% を超える精度に届きました。
外形線だけでは決して見えない隠れたくぼみを、図面の破線から読み取って削り出せることも確かめられました。

そして、SDF にすべてを任せる必要がないこともわかりました。
寸法は図面から正確に取り、AI には「どれを採用するか」の判断だけを任せる
最後に、できあがった立体から三面図を描き直して、入力と一致するかを確かめる。
この組み合わせで、直方体の組み合わせなら、正解と完全に一致する 3D モデルを、正しさの確認まで含めて自動で起こせるようになりました。

AI の「ぼんやりした理解」と、ルールによる「厳密な計算と検算」が、それぞれの得意なところで補い合う形が見えてきたことが、今回いちばんの収穫です。

1,000社以上の事業成長を支えた圧倒的な『スピードと柔軟性』で、御社のアイデアを最短で形にします。まずは無料で壁打ちしませんか?

ブログに戻る
ぼくはデューパー、なんでもきいてね!