ラベル 3Dモデル生成 の投稿を表示しています。 すべての投稿を表示
ラベル 3Dモデル生成 の投稿を表示しています。 すべての投稿を表示

2026年8月18日火曜日

2次元資料から波状口縁土器3Dモデル生成

 Generating 3D Models of Pottery with Wavy Rims from 2D Source Material


I am working on generating prototype 3D models of Jomon pottery from 2D source material using a custom AI assistant designed for Blender. In this instance, I generated a solid of revolution from a cross-sectional profile and then created a wavy rim on that form. For the wavy rim generation, I employed a method based on the numerical control of the Z-coordinates of the rim's vertices.


自作Blender専用AIアシスタントをツールにして、2次元資料から縄文土器3Dモデル祖型生成に取組んでいます。今回は、断面輪郭線から回転体を生成し、その回転体に波状口縁を生成しました。波状口縁生成方式は「口縁頂点Zを数値制御」方式を採用しました。

1 波状口縁土器の2次元資料


波状口縁土器の2次元資料

加曽利貝塚博物館発行パンフレットから引用

4単位の波状口縁の例です。

2 断面輪郭線から回転体生成


断面輪郭線から回転体生成

自作Blender専用AIアシスタント(以下AABと略称)で作成したBlenderPythonスクリプトで、断面輪郭線から回転体を生成します。


回転体3Dモデル(マテリアルプレビュー)


回転体3Dモデル(ワイヤフレーム)

3 波状口縁の生成

3-1 今回波状口縁生成に使った原理

今回は波状口縁の無い回転体の口縁部頂点を口縁部を構成する辺に沿って少しずつ移動させて波状口縁を実現しました。


今回波状口縁生成に使った原理

口縁部の外面側頂点全部(64)、内面側頂点全部(64)について、一部を除き辺に沿って適切なカーブを描くように少しずつ移動(下方ベクトル)させました。

頂点移動は頂点IDと対応する辺ID及び移動する座標のZ値を記述したcsvを読み込んで、頂点をその通り移動させるBlenderPythonスクリプトによりおこないました。このBlenderPythonスクリプトはAABで生成しました。


参考 口縁部外面側頂点のID

3-2 波状口縁生成結果


波状口縁生成結果


波状口縁土器3Dモデル(マテリアルプレビュー)


波状口縁土器3Dモデル(ワイヤフレーム)

4 メモ

回転体から波状口縁をBlenderで生成する方法についてChatGPTに提案してもらったところ次の11方法についての方法がありました。


Blenderで回転体から波状口縁を生成する方法

今回はこのうち、再現性があり、シミュレーション(やり直し)が容易な「口縁頂点Zを数値制御」方式を採用しました。

波状口縁形状は、今回は2次元資料から想定曲線を描き、頂点毎にZ値を按分比例で当てはめました。

波状口縁が出来るようになると、次のテーマは把手ということになります。回転体、波状口縁、把手ができるようになると、縄文土器3Dモデル祖型づくり基本技術が揃います。


2026年8月13日木曜日

2次元資料から縄文土器3Dモデル生成 その2

 Generating Jomon Pottery 3D Models from 2D Source Material: Part 2


I generated a 3D model of Jomon pottery—representable entirely as a solid of revolution—based on 2D source material. By simply drawing the cross-sectional outline, I was able to create the model instantly using a Blender Python script I had previously developed. The image texture was applied manually using the UV Project modifier.


回転体だけで表現できる縄文土器3Dモデルを2次元資料に基づいて生成しました。断面輪郭線だけを描き、既に作成したBlenderPythonスクリプトで一瞬で作成できました。画像は手作業でUV投影モディファイアで貼りつけました。

1 2次元資料


2次元資料(有吉北貝塚発掘調査報告書から引用)

有吉北貝塚北斜面貝層から出土した土器です。

2 3Dモデル生成方法

AAB(Blender専用AIアシスタント)で作成した断面輪郭線から回転体を作成するBlenderPythonスクリプトで、3Dモデルを生成しました。

3 生成3Dモデル

画像貼りつけは手作業でUV投影モディファイアで行いました。


生成3Dモデル(マテリアル)


生成3Dモデル(ソリッド)


生成3Dモデル(ワイヤフレーム)


生成3Dモデル(画像と3Dモデル)


生成3Dモデル(マテリアル)


生成3Dモデル(マテリアル)

2次元資料から縄文土器3Dモデル生成

 Generating 3D Models of Jomon Pottery from 2D Source Material


I experimented with generating 3D models of Jomon pottery—which features relatively simple shapes—from 2D source material using an AI assistant designed for Blender.


最も単純形状である縄文土器について、2次元資料から3Dモデル生成をBlender専用AIアシスタントで試しました。

1 縄文土器2次元資料


縄文土器2次元資料(加曽利貝塚博物館発行パンフレットから引用)


縄文土器2次元資料

2 断面輪郭線の描画


断面輪郭線の描画

今回はBlenderにインポートされた縄文土器2次元資料をなぞって、断面輪郭線を手作業で描画しました。ビェジェ曲線で描き、メッシュオブジェクトに変換しました。

3 Blender専用AIアシスタント(以下AABと略称)による3Dモデル生成

3-1 AABに入力したメッセージ

選択されているメッシュ(ライン)のZ軸下方の端点に原点を移動してください。次にそのメッシュ(ライン)にスクリューモディファイアを次の条件で追加してください。角度:360度、スクリュー:0m。回数:1、座標軸:X、ビューのステップ数:32、レンダー:32、ノーマル:スムーズシェーディングにチェック。さらにソリッド化モディファイアをモード:シンプル、幅:0.02m、オフセット:-1.0、ふち:フィルにチェックで追加してください。

3-2 AABの作業方針

選択中のメッシュオブジェクトを対象に、各メッシュの「Zが最も低い端点」へ原点を移動し、形状の見た目は動かさず保持します。  

その後、スクリューモディファイア(X軸・360度・ステップ32)とソリッド化モディファイア(Simple・幅0.02m・オフセット-1・ふちFill)を追加します。  

端点は「接続エッジ数が1以下の頂点」を優先し、見つからない場合は全頂点から最低Zを選びます。複数選択時は選択メッシュすべてに適用します。  

次の改良候補:最低Zが複数ある場合の選択ルール、既存同名モディファイアの再利用/上書き、適用後メッシュ化など

3-3 結果


生成された3Dモデル


生成された3Dモデル


生成された3Dモデル

4 検討

AABに指示した内容は次の3点です。

・メッシュ原点を下方端に移動する。

・スクリューモディファイアを追加して土器立体形を描く。

・ソリッドモディファイアを追加して土器に厚みをつける。

これらの指示通りのBlenderPythonスクリプトが生成され、土器3Dモデルを生成することができました。

この1例だけの作業なら、AABを利用するよりも手作業ですべて実行した方が手間が少ないことになります。しかし、今後同じような事例を多数扱う場合はBlenderPythonスクリプトを利用して瞬間的に作業を実行することができ、大きな省力化につながります。またBlenderPythonスクリプトでは設定条件を最初にまとめて書いてあるので、条件変更は柔軟にできます。


BlenderPythonスクリプト画面(冒頭部)

5 画像投影

平行投影カメラをAABで所定位置に追加し、UV投影モディファイアで土器3Dモデルに画像を投影してみました。今回のUV投影モディファイア追加は手作業です。最終微調整を手作業で行うことにすれば、UV投影モディファイア追加もAABで行うことは直ぐにできそうです。


土器3Dモデルに画像を投影した様子


土器3Dモデルに画像を投影した様子

この場合、UV投影モディファイアでは、同じ画像が土器外面と内面のそれぞれ2箇所に投影されます。


2026年7月13日月曜日

自然言語でのBlender geometry nodes生成→3Dモデル生成 自作Blenderアドオンの使い勝手 その6

 Generating Blender Geometry Nodes and 3D Models from Natural Language: Usability of My Custom Blender Add-on (Part 6)


As the final test for my custom Blender add-on, I evaluated the process of generating Geometry Nodes and 3D models based on prompts provided by ChatGPT. The results were successful in terms of practicality for 8 out of the 9 tasks. The significance of this add-on is shifting: it is evolving from a mere "Python generation system for creating finished 3D models via natural language" into a tool that facilitates a workflow of "creating a prototype from natural language, followed by iterative rounds of modification and refinement until the final product is achieved."


自作Blenderアドオン開発テストの最終番として、ChatGPTからいただいたお題でgeometry nodes生成→3Dモデル生成をテストしました。9問中8問で実用性合格です。このアドオンの意義は単なる「自然言語による3D完成品作りのためのPython生成システム」から、「自然言語による祖型作成→修正改変→修正改変→修正改変→完成品プロセス」のためのツールに変化しています。

この記事は2026.07.12記事「感動 自然言語での「風で揺れる草原」生成 自作Blenderアドオンの使い勝手 その5」の続きです。

1 事例1 Scatter

事例1は2026.07.12記事「感動 自然言語での「風で揺れる草原」生成 自作Blenderアドオンの使い勝手 その5」で説明した内容です。

2 事例2 道路生成

●プロンプト:Bezier Curveを追加してください。Geometry Nodesで道路を生成してください。道路幅は4m。カーブに沿って道路が作られるようにしてください。カーブを編集すると道路形状も更新されるようにしてください。

●ChatGPTの作業方針:Blender unit = 1m として、編集可能な Bezier Curve を追加し、そのカーブに Geometry Nodes モディファイアを設定します。Geometry Nodes 内で幅4mのプロファイル線を Curve to Mesh でカーブに沿わせ、カーブ編集時に道路メッシュが自動更新される構成です。


2.jpg(Blender画面)

3 事例3 フェンス生成

●プロンプト:Bezier Curveを追加してください。Geometry Nodesで木製フェンスを作ってください。柱は2m間隔。柱の間に横板を3枚配置してください。カーブを編集するとフェンスも変化してください。

●ChatGPTの作業方針:新規作業として、Bezier Curveオブジェクトを作成し、そのカーブ入力を使うGeometry Nodesモディファイアを追加します。柱はカーブに沿って約2m間隔で生成し、横板は3段の連続した木製板としてカーブに追従します。カーブの制御点を編集すると、Geometry Nodesによりフェンス形状も更新されます。


3.jpg(Blender画面)

4 事例4 ランダム岩場

●プロンプト:Plane上に大小様々な岩をランダム配置してください。Geometry Nodesだけで生成してください。岩はIcosphereを変形して作成してください。岩同士は重ならないようにしてください。

●ChatGPT作業方針:新規スクリプトとして作成しました。PlaneにGeometry Nodesモディファイアを追加し、Plane面上にPoisson Disk分布で点を生成して、Icosphere由来の岩メッシュをインスタンス化・ランダム拡縮・回転・ノイズ変形します。岩の最大半径より十分大きい最小点間距離を設定して、岩同士が重ならない安全な配置にしています。

●エラーが出て送信:Python: Traceback (most recent call last):  File "G:\パソコンとソフト\ChatGPT\20260625Blenderアドオン改良\UI版バージョン3開発\k9rtest14.blend\gpt_generated.py", line 234, in <module>  File "G:\パソコンとソフト\ChatGPT\20260625Blenderアドオン改良\UI版バージョン3開発\k9rtest14.blend\gpt_generated.py", line 38, in set_socket_default  File "G:\パソコンとソフト\ChatGPT\20260625Blenderアドオン改良\UI版バージョン3開発\k9rtest14.blend\gpt_generated.py", line 28, in get_socketTypeError: 'int' object is not iterable

●ChatGPTの作業方針:前回エラーは、ソケット取得関数が整数指定を想定しておらず、`int`を反復処理しようとして発生していました。今回はソケット名・複数名・インデックス指定のすべてに対応する安全な関数に修正し、Geometry Nodes全体を再構築する完全スクリプトとして出力します。Plane上にPoisson Diskで点を配置し、Icosphereをノイズ変形した岩をランダムスケール・ランダム回転でインスタンス化します。

●特記事項:Random Rock Scale X、Y、ZがCombine Non Uniform ScaleのXYZにつながれていなかったので、手作業でラインをつなぎ完成品となる。


4.jpg(Blender画面)

5 事例5 成長する木

●プロンプト:Geometry Nodesで樹木を作成してください。幹から枝が分岐し、枝からさらに枝が分岐するようにしてください。乱数で自然な形状にしてください。

●ChatGPTの作業方針:ランダムな再帰分岐で「幹→枝→小枝」を作る曲線スケルトンを生成し、それをGeometry Nodesの「Curve to Mesh」で太さ付きの木として表示するスクリプトです。枝先には簡易的な葉メッシュも追加します。毎回少し違う自然な形になります。


5.jpg(Blender画面)

6 事例6 縄文土器片ランダム配置

●プロンプト:Plane上に縄文土器片を500個ランダム配置してください。Geometry Nodesで作成してください。大きさはランダム。回転もランダム。重なりは少なくしてください。密集する場所と疎らな場所を自然に作ってください。

●ChatGPTの作業方針:Plane上に500個の縄文土器片を配置します。配置点・サイズ・回転・種類番号はPythonで安全に生成し、Geometry Nodesでは点群オブジェクト上に土器片プロトタイプのコレクションをインスタンス化します。重なりを減らすため簡易Poisson風の距離チェックを行い、クラスター中心を混ぜて密集・疎らの自然な分布を作ります。

●エラー送信:縄文土器片が一カ所に塔のように積み上がっています。縄文土器片をPlaneの上に平面的に配置して、密集とまばらを作ってください。

●ChatGPTの作業方針:前回の「一カ所に塔のように積み上がる」原因を避けるため、500個分の配置点をXY平面上の点メッシュとして明示的に作り、各点にスケール・Z回転・プロトタイプ番号属性を持たせました。Geometry Nodesではその点に対して土器片プロトタイプのコレクションを「Separate Children / Pick Instance」で平面的にインスタンス化します。密集と疎らはクラスタ分布+距離チェックで生成し、重なりを抑えています。

●特記事項:点が小範囲で立体的に分布するものになり、結局望む3Dモデルは出来なかった。別に2回トライしたが、いずれも使える結果にならなかった。「密集する場所と疎らな場所を自然に作ってください。」という言葉の意味をChatGPTが誤解している可能性を感じる。


6.jpg(Blender画面)

7 事例7 貝層

●プロンプト:Geometry Nodesで貝層を作成してください。Plane上に二枚貝をランダム配置してください。一定方向にやや配向してください。層厚30cm程度。部分的に密度を変えてください。

ChatGPTの作業方針:Blender 4.4.3でそのまま実行できる新規スクリプトです。Plane上に、30cm程度の層厚を持つ貝層ボリュームを作り、二枚貝形状をランダム配置します。配向は一定方向へ弱く揃え、密度は高密度・低密度パッチで部分的に変化させています。対象PlaneにはGeometry Nodesコントローラ用モディファイアも付与します。


7.jpg(Blender画面)

8 事例8 石器散布

●プロンプト:Plane上に石器を100個散布してください。谷状に密集するようにしてください。Geometry Nodesで作成してください。

●ChatGPTの作業方針:Geometry NodesモディファイアをPlaneに作成し、別途用意した100頂点のポイントメッシュを参照して石器コレクションをインスタンス散布します。ポイントは蛇行する谷筋に沿って生成しているため、Plane上で谷状に密集します。石器は複数の低ポリゴン石器メッシュを作成し、Geometry Nodes側でランダムに選択・回転・スケールします。


8.jpg(Blender画面)

9 事例9 樹木林

●プロンプト:Plane上に樹木を配置してください。林縁では密度を低くしてください。中央部は密度を高くしてください。

●ChatGPTの作業方針:XY平面上の「Plane」を対象にし、存在しない場合は新規作成します。中央ほど採用確率を高く、外周ほど低くするリジェクションサンプリングで樹木を配置し、林縁の密度を低くしています。既存オブジェクトは削除せず、前回生成した同名コレクションのみ作り直します。

●特記事項:プロンプトにgeometry nodesをふくんでいないので、geometry nodesが使われないで、3Dモデルが生成した。


9.jpg(Blender画面)

10 メモ

10-1 結果

プロンプトからそのままgeometry nodes→3Dモデルができたもの。6件(2、3、5、7、8、9)

軽微な手作業追加でgeometry nodes→3Dモデルができたもの。1件(1)

エラーがでたが、エラー克服してgeometry nodes→3Dモデルができたもの。1件(4)

3Dモデルが出来なかったもの。1件(6)

10-2 評価

出来上がったものが望み通りとはかぎらないが、予想以上の好成績といえる。BlenderChatGPTUI版のgeometry nodes生成能力は素晴らしいもので、十分に実用的であるといえる。この能力をいかに引き出すプロンプトを用意するかというユーザーサイドの能力向上が求められる。またgeometry nodesを思い通りに改変して行く上で、ユーザーにgeometry nodes組み立て技術の基礎が求められる。

3Dモデルが出来なかったものは「いい線まで」行っていて、プロンプトを適切に改変するなど、じっくりユーザーが取組めば完成できる可能性を感じる。今後プロンプトを「祖型生成+対話的改良」のプロセスに区切って、試したい。

10-3 感想

このアドオンの意義は単なる「自然言語による3D完成品作りのためのPython生成システム」から、「自然言語による祖型作成→修正改変→修正改変→修正改変→完成品プロセス」のためのツールに変化している。

ChatGPT(web版)と私とのBlenderアドオン開発に関する考え方の調子が合ってきている。