生成AIで作った3Dモデルの肉厚は、断面では測れない|ウツボカズラ型の鉢を刷るまで

食虫植物用の鉢を3Dプリンターで作っています。前回はカタツムリ(巻貝)、今回はウツボカズラの捕虫袋をかたどった形です。

造形は画像生成系の3DモデルAI(Meshy)、寸法の詰めは自前のメッシュ解析という分担で進めました。結論から言うと、最後に見つかった問題はAIの側ではなく、私の検証方法の側にありました。肉厚2.0mmという貫通寸前の箇所を、印刷するまで見逃していました。

目次

前提:この鉢に必要な条件

モウセンゴケ(Drosera capensis)は太い根を縦に深く伸ばします。一方、腰水栽培では用土の毛細管現象による吸い上げが10〜15cmで頭打ちになります。

この2つの綱引きから、用土の深さ100〜130mmが実用解になります(詳しくは前回の記事に書きました)。これが今回の設計要件です。

1回目:穴が開いていなかった

Meshyには生成したモデルに植え込み用のキャビティと排水穴を追加する機能があります。円柱を配置して「処理」を押すだけです。

出てきたSTLを測ると、こうでした。

  • 外形 75.5 × 54.0 × 124.3mm
  • 111,122面、閉じたメッシュ
  • 体積 183.7cm³

メッシュの品質は申し分ありません。前回のように穴や不正エッジが混ざることもなく、修復工程は不要でした。

ところが断面を取ると、胴体が全部材料で埋まっていました。キャビティの円柱がモデルの上方にはみ出した位置にあり、本体をほとんど削っていなかったのです。

画面上では円柱が重なって見えるので気づきにくい。断面を見るまで分からない種類の失敗です。

おまけに、そもそも入らなかった

ついでに「この形に最大どれだけの穴が開けられるか」を総当たりで探しました。壁3mmを確保する条件で、Ø33mm × 深さ68mmが上限でした。

原因は首の細さです。z=74〜94の範囲でY方向の外形が41mmしかなく、ここが通路の幅を決めていました。

用土量にして約60cm³。成株には足りません。細長い上位袋(upper pitcher)を元にすると容量を稼げない、というのがここでの学びです。

2回目:ずんぐりした袋から作り直す

下位袋(lower pitcher)寄りの、ずんぐりした形で作り直しました。

  • 外形 90.6 × 64.8 × 171.2mm
  • 内径 Ø37 × 38mm、深さ 112mm(床は z=11)
  • 排水穴6個(各Ø約5mm)が底に貫通済み
  • 断面ごとに測った最薄壁 5.5mm

深さ112mmは要件の範囲に入っています。今度は使えそうです。

この形では中空シェルを選べない

Meshyのキャビティ設定には「ソリッド」と「中空シェル」があります。中空シェルは外形に沿った薄い殻を作るので軽量ですが、この捕虫袋の形では選べません。

捕虫袋は胴が膨らんでいて、その膨らみの天井が内側から見ると内向きのオーバーハングになります。FDM印刷ではここにサポートが必要になりますが、開口は上の細い首だけなので、内部のサポートを取り出せません。残ったサポートが用土の中に居座ることになります。

前回のカタツムリでは中空シェルで成功しているので、矛盾して見えるかもしれません。違いは内側の形です。カタツムリは殻の内側が単純な器の形で、開口から底まで見通せるため、オーバーハングが生じませんでした。中空シェルが使えるかどうかは、中空かどうかではなく、内側の形で決まるというのが、2つを並べて分かったことです。

ソリッドを選んでも、実際に中身が詰まるわけではありません。スライサー側で充填率15%にすれば済む話です。軽量化より、取り出せることを優先するという判断になります。

角を落とす

出力には、葉の上に二股の角が生えていました。先端はz=171、左右にY=±22まで反り返っています。

鉢としては不要ですし、細く尖って外へ反る形状は印刷時にサポートが要る厄介な部分です。

切る高さを3案作って比べました。

案 切断高さ 外形 体積
A z=150 91 × 65 × 150 178.3cm³
B z=138 91 × 65 × 138 175.4cm³
C z=126 89 × 65 × 126 169.8cm³

Bを選びました。A案は角のすぐ下で切ることになり、葉が外へ反り返り始める位置が残ります。切り口が外に張り出したツバのような形になり、角の付け根が中途半端に残って見えます。

Bはその反りが始まる手前なので、丸みを保ったまま収まります。C案は葉ごと落として筒にした案で、印刷は一番楽ですがウツボカズラらしさは薄れます。

切断位置を決めるときは、その高さでの断面の肉厚も確認しました。いずれも8〜11mmあり、カミソリのような薄い縁は残りません。

1.2倍で印刷

内径Ø37は細めだったので、スライサー側で1.2倍にして刷りました。STLを作り直す必要はありません。

  • 外形 109 × 78 × 166mm
  • 内径 Ø44〜46mm、深さ 134mm
  • 体積 303cm³(充填15%で約58g)

A1 miniの造形領域(180×180×180)にぎりぎり収まるサイズです。

そして、見逃していた2.0mm

刷り上がった実物を見ると、前方側に外壁を突き破りそうな箇所がありました。

慌てて測り直したところ、こうでした。

項目 値
最小肉厚 2.0mm
位置 Z = 12〜13mm、X ≈ −40、Y −5〜+11
3mm未満の範囲 30ボクセル、5クラスタ
全体の中央値 8.0mm

原因は、穴の底が z=13 まで下りているのに、外壁はその高さで既に内側へ絞られていることです。袋の下部は丸く絞られていくので、まっすぐ下りる円柱の穴とは下端で接近します。

なぜ最初の測定で見つからなかったか

ここが本題です。最初に「最薄壁5.5mm」と出した方法は、高さごとに水平断面を取り、外形の幅と穴の幅を引き算するものでした。

この方法には穴があります。断面の「幅」しか見ていないので、円周上のどこか一箇所だけが薄い場合を拾えません。外形も穴もほぼ円形なら平均的な壁厚は出ますが、両者の中心がずれていたり、外形が楕円だったりすると、最薄点を見落とします。

正しくは距離変換(distance transform)を使います。材料の各点について最寄りの表面までの距離を求め、その中心線(medial axis)上で2倍すれば、局所的な肉厚が点ごとに出ます。この方法なら、どこが何mmかをクラスタ単位で特定できます。

今回の数字で言えば、断面法で5.5mm、距離変換で2.0mm。倍以上の開きがありました。

生成AIのモデルは左右対称でも同心でもないので、断面の引き算は原理的に合いません。ここは最初から距離変換で測るべきでした。

次版の修正

薄肉部への対策は2つ、どちらもキャビティ設定だけで済みます。

  • 穴の底を8mm上げる:深さ134 → 126mm。要件の100〜130mmには収まる
  • 穴の中心を薄い側と反対へ6mm寄せる:深さを犠牲にしない

あわせて、つるの先端を丸めます。球を足して、吊り下げられる形にする予定です。

排水穴の位置は、薄肉部とぶつかる

排水穴は少し前側へ寄せたいと考えていました。ただ、薄肉部も前方側にあります。

実測で位置関係を確かめると、穴の中心は X≈−18、半径22なので、穴の縁がちょうど X=−40、つまり薄肉部の位置です。排水穴はその穴底に半径18のリングで並んでいるため、前方へ寄せるほど薄い壁に近づきます。

排水穴を前へ寄せたい希望と、薄肉部から離したい要求は、同じ側でぶつかっています。どこで折り合いをつけるかは、上の2つの対策を入れた後の肉厚を測り直してから決めます。

まとめ

  • Meshyのキャビティは位置がずれていても処理が通る。断面を取るまで分からない
  • 細長い袋は容量を稼げない。ずんぐりした形を元にする
  • 中空シェルが使えるかは内側の形で決まる。捕虫袋は膨らみの天井が内向きのオーバーハングになり、内部サポートを取り出せない
  • 肉厚は断面の引き算では測れない。距離変換で点ごとに測る
  • 生成モデルは対称でも同心でもない。対称を前提にした測り方が通用しない

造形をAIに任せて寸法を自分で詰める、という分担自体は有効でした。ただし「寸法を詰める」側の道具が粗いと、結局は印刷してから気づくことになります。今回はそれを実物で教わりました。


関連記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメント一覧 (1件)

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次