知識がなくても始められる、AIと共にある豊かな毎日。
AI動画・画像生成

AI で描いた模様を3Dプリントの表面の凹凸にする — 高さ画像の作り方と、継ぎ目・造形時間を数える

ゲンキ

3Dプリントの表面に模様を彫りたい、と思ったことはないだろうか。ざらついた皮、織物、六角のタイル。こうした凹凸は「3Dプリントのテクスチャ」と呼ばれ、滑らかな面を狙うのとは逆に、わざと模様を足す仕上げだ。「積層痕」をヤスリで削るな。スライサー設定ひとつでツルツルにするプロの時短術(2026-01-28 公開) が表面を滑らかにする話だったのに対して、本稿はその反対、面に模様を足す側を扱う。

材料には AI の画像生成を使う。白黒の画像を「高さの地図(高さ画像、ハイトマップ)」として読ませると、白いところが持ち上がり、黒いところは沈む。つまり、AI に模様を描かせれば、それをそのまま表面の凹凸へ翻訳できる。手元の ComfyUI で Z-Image-Turbo に4種類の模様を描かせ、その画像を継ぎ目の観点で数値にし、Python で板の表面を変形させ、Bambu Studio の CLI でスライスして、造形時間と材料の増え方を数えた。

※本記事にはアフィリエイト広告(PR)が含まれます。

結論を先に3つ書いておく。第一に、AI が描いた模様は、そのままでは左右・上下の端がそろわず、タイルのように並べると継ぎ目が出る。第二に、端を馴染ませると当サイトの継ぎ目の指標は 0 になるが、2×2 に並べて目で見ると薄い筋が残った。指標が 0 でも「継ぎ目が見えない」とは限らない。第三に、平らな板に凹凸をつけると、手元の Bambu Studio の見積りで造形時間が約 54%、材料の長さが約 34% 増えた。これは刷った結果ではなく、スライサーの見積りである。

忍者AdMax

高さ画像とは何か — 白が持ち上がり、黒は元の面のまま

高さ画像とは何か — 白が持ち上がり、黒は元の面のまま

高さ画像(ハイトマップ)は、明るさを高さとして読むグレーの画像だ。OrcaSlicer の wiki は、白が面を持ち上げ(原文 “white lifts the surface by”)、黒は元の面のままにする(原文 “black leaves it alone”)と書く。ただしこれは「中間レベル(Midlevel)」が既定の 0 のときの話で、このときは凹凸が上へ盛り上がるだけになる。中間レベルを 0.5 にすると、中間のグレーが動かず、それより明るいところは持ち上がり、暗いところは彫り込む(wiki の原文 “mid grey stays put, lighter greys rise and darker greys cut in”)。

同じ考え方は 3D ソフトにも共通する。Blender の Displace モディファイアは、テクスチャの明るさで頂点を動かす機能で、動かさない基準値を Midlevel と呼ぶ。変形量は「(画素値 − Midlevel)× 強さ」という単純な式で決まる。OrcaSlicer も同じく Midlevel の語を使う。要するに「3Dプリントのテクスチャ」を作るとは、模様の明暗を、面からの高さに翻訳する作業にほかならない。

そもそも面を荒らす手段は、大きく2通りある。一つは、スライス中にノズルの経路を揺らして面をざらつかせるやり方で、モデル自体には手を触れない。もう一つが、今回扱う高さ画像で、面の形(メッシュ)そのものを書き換える。OrcaSlicer の wiki も、ファジースキンは経路を乱すだけでモデルに触れないが、テクスチャ変位はメッシュを書き換える(原文 “texture displacement rewrites the mesh”)、と両者を分けている。模様をデータとして形に焼き込みたいなら、後者になる。

もう一つ、外せない前提がある。高さ画像は、すでにある頂点しか動かせない(wiki の原文 “A height map can only move vertices that already exist”)。平らな板のように頂点が四隅にしかない形では、どれほど細かい模様を渡しても凹凸は出てこない。そのため、変形の前に面を細かく分割しておく必要がある。逆に言えば、細かい模様を出したいほど頂点を増やす必要があり、それは後で見るように、スライスの重さへ跳ね返る。後で Python で凹凸をつけるときにも、この分割が効いてくる。

高さ画像で頂点を動かす考え方は、Blender の Displace モディファイアと同じだ。メッシュを自分で扱いたいなら、Blender の基本から押さえておくと応用が利く。

Z-Image-Turbo で白黒の凹凸模様を作る

Z-Image-Turbo で白黒の凹凸模様を作る

模様は手元の ComfyUI(127.0.0.1:8188)で、Z-Image-Turbo に描かせた。Z-Image-Turbo は Tongyi-MAI が公開した画像生成モデルで、ライセンスは Apache 2.0(Hugging Face のモデルカードの表記と、公式コードの GitHub の LICENSE 本体による)だ。蒸留された高速版で、公式の推奨は9ステップ(実際の計算は8回、8 NFE)・guidance 0。今回もこの設定に合わせている。ComfyUI とこの手のモデルのライセンスの読み方は、挿絵をローカル画像生成でまかなう — ComfyUIとFLUXのライセンスを読み違えないために(2026-08-27 公開) で詳しく扱った。

生成したのは、升目・六角・織り・ひび割れの4種類の白黒模様で、どれも 1024×1024 画素・1パスだ。記事のカバー用に使う 16:9 の2段アップスケールは外し、正方形のまま作っている。1枚あたり 10〜34 秒だった。白が高く黒が低い、という約束に合わせて、模様はすべて白黒で描かせている。

ここで気をつけたいのは、高さ画像に向く画像の条件だ。OrcaSlicer の wiki は、タイルのように繰り返すなら継ぎ目が無いこと、明暗の幅を使い切ること、影の無い平らな光で描くこと、細かすぎないことを挙げる。写真を使うと、光のムラが格子状の継ぎ目として出てしまう。AI に描かせるときも事情は同じで、陰影の強い「それらしい」画像より、明暗がはっきりして影の無い模様のほうが、高さ画像としては素直に働く。

模様の下絵を AI に描かせるなら、画像生成ツールの基本的な使い方を一通り知っておくと、狙った明暗の画像を作りやすい。

継ぎ目の段差をどう数えたか — 当サイトの定義

継ぎ目の段差をどう数えたか — 当サイトの定義

AI が描いた模様を並べて使うなら、画像の端がそろっていないと継ぎ目が出る。そこで、端のそろい具合を数値にした。ただし、継ぎ目のそろいを測る決まった一つの指標は存在しない。TexTile の論文(CVPR 2024)も、既存の指標を混ぜて使うと点数どうしが相関しない(原文 “the current mix of existing metrics produces uncorrelated scores”)と書いている。したがって以下は当サイトの定義であって、業界標準の指標ではない。

定義はこうだ。まず画像を 8 ビットのグレー(0〜255)にする。左右の継ぎ目の段差は、各行について「左端の画素と右端の画素の差の絶対値」を取り、その平均とした。上下の継ぎ目の段差は、各列について「上端と下端の差の絶対値」を取った平均だ。並べたときには右端の隣に左端が来るので、この差が小さいほど端はそろっていることになる。数値を高さに読み替えるなら、中間レベル 0 のとき白(255)が深さ(Depth)だけ持ち上がるので、1 階調はおよそ Depth ÷ 255 mm に当たる。

4種類の模様を、生成したまま測った結果が次の表だ(左右/上下、画素値 0〜255 の平均の差)。

模様生のまま 左右/上下
升目122.8 / 145.4
六角17.8 / 21.2
織り76.0 / 19.5
ひび割れ90.5 / 61.7

升目で左右 122.8・上下 145.4、ひび割れで左右 90.5・上下 61.7 と、端の差はかなり大きい。六角だけは左右 17.8・上下 21.2 と小さめだった。要するに、Z-Image-Turbo が描いた模様は、この実行では既定のままでは端がそろわず、そのまま並べると継ぎ目が出る、ということだ。

この平均には弱点もある。いちばん外の端の列どうしの差を平均しているので、ほとんどの行はそろっていても一部の行だけ大きく段差がある、という偏りを見落としやすい。当サイトの判断として、平均だけでなく最大値や上位 1% の値も併記すると、そうした読み違えが減る。さらに、画像を縦横に半分ずらして継ぎ目を中央に寄せた画像を並べて見れば、数値と見た目を一対一で対応させられる。数値は補助であって、最後に効くのは目で見た確認だ、という前提は崩さないほうがよい。

端を馴染ませても「継ぎ目が見えない」とは限らない

端を馴染ませても「継ぎ目が見えない」とは限らない

端をそろえる手は昔からある。画像をいちど縦横に半分ずらし(はみ出した分は反対側へ回す)、継ぎ目を画像の中央に持ってきて馴染ませる方法だ。GIMP の Offset や Tile Seamless、ComfyUI-seamless-tiling の Offset Image が、どれもこの考え方に立っている。今回は、いちばん外の端の列どうしを 0.5 ずつ混ぜて等しくし、そこから 64 画素かけて内側の値へ戻す、という馴染ませ方を使った。

この処理をかけると、当サイトの指標は4種類とも左右・上下ともに 0.0 になった。指標はいちばん外の端の列だけを見るので、そこを混ぜて等しくすれば、当然 0 になる。

模様生のまま 左右/上下端を馴染ませた後 左右/上下
升目122.8 / 145.40.0 / 0.0
六角17.8 / 21.20.0 / 0.0
織り76.0 / 19.50.0 / 0.0
ひび割れ90.5 / 61.70.0 / 0.0

ところが、馴染ませた画像を 2×2 に並べて目で見ると、硬い段差(継ぎ目)は消えたものの、混ぜた帯が少し平らに見える薄い筋が残った。模様の位相(周期の位置)が端で合っていないため、無理に馴染ませると、そこだけ溝のように見えるのだ。だから、指標が 0 でも「継ぎ目が見えない」とは言い切れない。本当にきれいに並ぶ模様にするには、周期が画像の幅を割り切る模様を選ぶか、はじめからタイルになるように生成するしかない。

この結果には、生成の仕組みの側の事情も関わっている。ComfyUI-seamless-tiling の Seamless Tile というノードは、モデルの中の Conv2d(畳み込み)の層の詰め物を循環にして、端がつながるようにする仕組みだ。しかし、ComfyUI が Z-Image を動かす本体は、画像を Linear(全結合)で取り込んでいて、そのファイルに Conv の層が無い。公式のコードでも取り込みは Linear だ。つまり、このノードは Z-Image の本体にはほとんど効かず、効くとすれば画像に戻す VAE の側だけ、という見込みになる。これはコードを読んだ範囲の話で、断定はしない。実際、端の段差は上の表のとおり、生成したままでは大きかった。

凹凸をつけた板をスライスして、時間と材料を数えた

凹凸をつけた板をスライスして、時間と材料を数えた

凹凸が造形にどれだけ響くかを、スライサーの見積りで確かめた。60×60 mm・厚さ 2 mm の板を用意し、その上面を 160×160 の格子に分けて、各頂点を高さ画像の明るさに応じて最大 2 mm 持ち上げ、水密(閉じた)の STL にした。模様は升目で、端を馴染ませた高さ画像を使っている。比べる相手は、同じ寸法の平らな板だ。

スライスは手元の Bambu Studio の CLI で行った。機種は Bambu Lab P1S、プロファイルは 0.20mm Standard、フィラメントは Generic PLA。板の STL と設定を渡し、--slice・--export-3mf・--outputdir で 3MF を書き出して、見積り時間と材料を読んだ。なお、使った Bambu Studio は 2.8.4 Public Beta(pre-release)である。

見積り時間フィラメント(mm)体積(cm³)
土台(平らな板)50m 4s2475.37.2
凹凸の板1h 16m 55s3321.612.34
増え方+約54%+約34%+約71%

凹凸をつけると、見積り時間は 50 分 4 秒から 1 時間 16 分 55 秒へ、約 54% 増えた。フィラメントの長さは 2475.3 mm から 3321.6 mm へ約 34%、体積は 7.2 cm³ から 12.34 cm³ へ約71%(12.34 ÷ 7.2)増えている。ここで念を押しておきたいのは、これらは手元の Bambu Studio の CLI が出した見積り(推定)であって、実機で刷って測った値ではない、という点だ。当サイトは板を印刷していない。それでも、表面に 2 mm の凹凸を足すだけで、時間も材料もこれだけ動く、という目安にはなる。

増え方が材料より時間でやや大きく、体積でいちばん大きいのは、凹凸が主に外側の壁の造形量を増やすからだと考えられる。平らな天面なら一筆で塗れるところを、細かい山と谷に沿ってノズルを上下左右に動かすぶん、距離と体積が伸びる。もう一つ、見落としやすいのが三角形の数だ。前の節で触れたとおり、模様を細かく出すほど頂点を増やす必要があり、三角形が増える。OrcaSlicer の wiki は、50 mm の板に六角の模様を焼き付ける公式の例として、12 個だった三角形が約 20 万 6 千個に増える、と書いている(当サイトの実測ではなく、OrcaSlicer の例だ)。三角形が増えれば、スライスにかかる時間もファイルの容量も重くなる。凹凸は見た目の密度と引き換えに、データと造形の両方を重くする。

凹凸をつけると、見積りで材料の長さが約34%増えた。模様をいくつか試すなら、PLA は多めに用意しておきたい。

¥1,695 (2026/09/19 09:46時点 | Amazon調べ)

OrcaSlicer 2.5 のテクスチャ変位(Texture Displacement)

OrcaSlicer 2.5 のテクスチャ変位(Texture Displacement)

ここまでは、画像を作って自分でメッシュを変形する手順だった。これを画面の操作だけで済ませる機能が、OrcaSlicer 2.5.0-alpha に入った「テクスチャ変位(Texture Displacement)」だ。以下は公式のリリースノート・wiki・ソース(v2.5.0-alpha、2026-10-16 公開の pre-release)による紹介で、当サイトはこの画面を操作していない。凹凸をつけたのは、前述のとおり当サイトの Python のコードである。

公式の説明では、模様を本物の凹凸として形に押し込む(原文 “stamps a texture onto a model as real, printable relief”)。内蔵の継ぎ目の無いテクスチャは 40 種以上あり、自分の PNG・JPG・BMP を読み込むこともできる。使い方は、深さ(Depth)とタイルサイズ(Tile size)をミリで決めて「焼き込み(Bake)」を実行する、という流れだ。ソースの初期値は深さ 0.4 mm、タイルサイズ 12.5 mm、中間レベル 0 になっている。内蔵の高さ画像は 512 か 1024 画素四方で、生成スクリプトの既定は 1024 画素だ。日本語の画面では、この機能は「テクスチャ変位」、Bake のボタンは「焼付け」、各設定は「深さ」「タイルサイズ」「中間レベル」と表示される。

焼き込みには大事な性質がある。面をざらつかせるファジースキン(Fuzzy Skin)がスライス中に経路を揺らすだけでモデルを変えないのに対して、焼き込みはメッシュそのものを書き換える(原文 “baking changes the mesh itself”)。そのため、焼き込んだ後はほかの形と同じようにスライス・プレビュー・書き出しができる。焼き込みを実行するまで何も変わらず、焼き込みは1回の取り消しで元に戻る。層は最大8枚まで重ねられ、カラー画像を使えば色も付けられる(混色の詳しい話にはここでは踏み込まない)。なお、wiki でいう「Resolution(解像度)」は三角形の大きさ(mm)であって、画像の画素数ではない。これを半分にすると三角形は約4倍になり、スライス時間とファイル容量が増える。OrcaSlicer 自体のライセンスは AGPL-3.0 だ。

継ぎ目の話は、OrcaSlicer の側にも形を変えて現れる。模様を面に繰り返し貼るとき、wiki のいう「鏡映しの繰り返し(Mirrored repeat)」は、一つおきにタイルを反転させて端を合わせる。継ぎ目は消えるが、模様が左右に反転する。また、既定の貼り方(Triplanar)は、角で硬い継ぎ目を作らない代わりに、角のところで模様が帯状に混ざる(原文 “the pattern cross-fades in a band right at the edge”)。これは画像そのものの継ぎ目とは別の、「貼り方の継ぎ目」だ。当サイトが Python で経験した「馴染ませた帯に薄い筋が残る」のと、向きは違えど同じ悩みが、画面の機能の側にもある、と読める。

凹凸のある面は、塗装すると模様がいっそう引き立つ。下地にサーフェイサーを吹いておくと、山と谷の陰影が見やすくなる。

高さ画像をまとめて配る Resource Texture

高さ画像をまとめて配る Resource Texture

OrcaSlicer 2.5 には、高さ画像をまとめて配る仕組みもある。「Resource Texture」というプラグインの一種で、テクスチャ変位の選択欄に高さ画像を足す。1つのプラグインが1つのパックを提供し、パックの名前がそのまま画面に出る。配布は Orca Cloud を通り、ほかの人が公開したパックを入れたり、自分のパックを公開したりできる。パックはプラグインと同じ扱いで入れ替えができ、有効・無効・削除は再起動なしで反映される。すでにパックの画像を使ったプロジェクトは、画像の写しを自分で持つので動き続ける。

中身の決まりは、ソースと wiki で一致している。パックは wheel(.whl)という1つのファイルで配り、名前と版は別の定義ファイルに書くのではなく、wheel が本来持つ METADATA から読む。画像はプラグインのフォルダの中の1階層に置き、下のフォルダは見ない。拡張子は png・jpg・jpeg・bmp で、1パックあたり最大 64 枚までだ。

当サイトは、この仕組みでパックを作って配布してはいない。Orca Cloud のパックの一覧のページは JavaScript で描画されて本文が取れなかったので、いま何個のパックがあるか、料金やアカウントが要るかには触れない。ここで押さえておきたいのは、自分で描いた「3Dプリントのテクスチャ」を、1つの wheel にまとめて人に配る道が用意されている、という点だ。

画像から凹凸をつける道具は OrcaSlicer だけではない

画像から凹凸をつける道具は OrcaSlicer だけではない

画像から表面に凹凸をつけるのは、OrcaSlicer が初めてではないし、OrcaSlicer だけでもない。スライサーでは ideaMaker が早く、4.1.0(2021-03-15 公開)でグレーの画像から表面に凹凸をつける機能が入っている。ideaMaker はスライスの過程で画像を凹凸に変える方式で、4.1.0 の説明では、床と平行な平らな面には凹凸が付かない、とされていた(最新版で変わったかは確認していない)。

スライサーの外にも道具はある。BumpMesh(CNC Kitchen、作者 Stefan Hermann)は、ブラウザでメッシュに凹凸をつけて書き出す道具で、自分の画像を高さ画像として読み込める。README の時点で内蔵の継ぎ目の無いテクスチャは 101 種あり、50% のグレーが動かず、白が外へ、黒が内へ動く設定になっている。ライセンスは AGPL-3.0 だ。つまり、メッシュに凹凸を焼き込む発想そのものは、OrcaSlicer に限らず複数の道具に共通する。

他社のスライサーについては、当サイトが確かめた範囲では見当たらなかった、という言い方にとどめる。Bambu Studio 2.8.4 Public Beta、PrusaSlicer 2.9.6 と 3.0.0-alpha12、Creality Print 7.3.0 のリリースノートとソースのファイル名を見た範囲では、高さ画像で凹凸をつける機能は見つからなかった。ただし「無い」とは断定しない。紛らわしい点が2つある。Bambu Studio 2.8.4 の「texture import」は色つきモデルの取り込みの改善であって、凹凸の機能ではない。また、Bambu Studio・OrcaSlicer・Creality Print のファジースキンにある「Displacement」というモードは、ノズルの経路を横にずらして面を荒らす方式の名前で、高さ画像による変位とは別物だ(PrusaSlicer のファジースキンにはこのモードは無い)。

この実験で言えないこと

この実験で言えないこと

最後に、今回の数値で言えないことを並べておく。

  • 実験は各条件1回だけだ。4種類の模様も、スライスの比較も、1回の実行の値である。「この実行ではこうだった」以上の一般化はしない。
  • 造形時間と材料は、手元の Bambu Studio が出した見積り(推定)であって、実機で刷って測った値ではない。板は印刷していない。
  • 継ぎ目の段差は当サイトの定義による数値で、業界標準の指標ではない。指標が 0 でも、目で見て継ぎ目が無いとは限らないことは、前に見たとおりだ。
  • Seamless Tile が Z-Image に効きにくい、というのはコードを読んだ範囲の見込みである。端の段差の実測がそれと同じ向きだっただけで、仕組みを完全に突き止めたわけではない。
  • OrcaSlicer のテクスチャ変位と Resource Texture は、公式の資料による紹介で、当サイトは画面を操作していない。両方とも alpha の pre-release なので、正式版までに仕様が変わりうる。

まとめ — 3Dプリントのテクスチャをどこから始めるか

まとめ — 3Dプリントのテクスチャをどこから始めるか

3Dプリントのテクスチャは、滑らかな面を狙う仕上げの、ちょうど反対側にある。模様を高さに翻訳するという一点さえ押さえれば、材料は意外に身近だ。AI に白黒の模様を描かせ、白を高く黒を低く読ませればよい。

手をつける順番としては、まず高さ画像の約束(白が高い、中間レベルが基準)を理解し、小さな画像で凹凸の出方を試すのがよい。並べて使うなら、端のそろいを数値と目の両方で確かめる。数値が 0 でも油断しない。造形に回す前には、スライサーの見積りで時間と材料の増え方を見ておくと、仕上げの重さが分かる。画面だけで完結させたいなら OrcaSlicer 2.5 のテクスチャ変位があり、メッシュを自分で扱いたいなら Python や BumpMesh がある。

模様を面に彫るか、面を滑らかにするか。どちらも「表面をどう見せるか」という同じ問いの、両側にすぎない。凹凸を足す側に回るとき、AI の画像生成は、下絵を手早く用意する手段になる。

参照

ブラウザだけでできる本格的なAI画像生成【ConoHa AI Canvas】
ABOUT ME
swiftwand
swiftwand
AIを使って、毎日の生活をもっと快適にするアイデアや将来像を発信しています。 初心者にもわかりやすく、すぐに取り入れられる実践的な情報をお届けします。 Sharing ideas and visions for a better daily life with AI. Practical tips that anyone can start using right away.
記事URLをコピーしました