Amazonで商品を見るセール会場へ

Blender│ジオメトリノードの基本|面に球を散らす作り方と適用の注意

ジオメトリノードは、ノードをつなぐだけで、モデルの形を作ったり変えたりする機能です。

この記事では、猿の表面に小さな球を散らす例で、基本を確かめました。

  • 使うノードは、「面にポイント配置」→「ポイントにインスタンス作成」→「ジオメトリ統合」。散らす形(ICO球)をつなぐ
  • 「密度」を30から150にすると、球は約370個から約1,880個になった
  • そのまま「適用」すると、散らした球が消える。先に「インスタンス実体化」をはさむ
  • Blender 5.2.1 では、モディファイアーの値は mod["Socket_1"] では変えられず、mod.properties.inputs で変える

この記事の結果は、2026年9月29日に Blender 5.2.1 LTS を背景実行(画面なし)して試したものです。

モディファイアーの適用と「インスタンス実体化」の追加は、2026年10月15日に Windows 11 Pro の画面でも操作して確かめました。

ノードや項目の名前は、Blender の日本語の表示に合わせています。

目次

作るもの

猿(スザンヌ)の表面にRandom方式で点を置き、各点に小さな球を並べます。密度は単位面積当たりの点数で、面ごとに同じ個数を置く設定ではありません。形状・面積・シードが違えば個数も変わります。

元の猿を残すため、最後に元メッシュと球のインスタンスを同じ出力へまとめます。ジオメトリ統合だけで頂点同士を溶接するわけではありません。

スポンサーリンク

使うノード

ノード(日本語表示)役目つなぐもの
グループ入力モディファイアーに渡された形と、設定値を受け取るジオメトリ・密度・半径
面にポイント配置面の上に点をランダムに置くメッシュ(入力)、密度
ICO球散らす形を作る半径
ポイントにインスタンス作成各点に、ICO球のコピーを置くポイント、インスタンス
ジオメトリ統合元の猿とコピーを1つにまとめる猿とインスタンス
グループ出力結果を返すジオメトリ
Blender 5.2.1 の日本語表示

作り方

  1. 猿のオブジェクトを選び、「モディファイアー」から「ジオメトリノード」を追加して、「新規」を押す
  2. ジオメトリノードの画面で、上のノードを追加してつなぐ(追加は Shift+A)
  3. グループ入力に「密度」と「半径」の入力を足して、それぞれ「面にポイント配置」の「密度」と「ICO球」の「半径」につなぐ
  4. 密度と半径の値を、モディファイアーの画面で変える

練習用の新規ファイルで初期キューブを削除し、Scriptingワークスペースの新しいテキストへ次の例を貼り、1回だけ実行します。

import bpy

if bpy.data.objects.get("ScatterPractice"):
    raise RuntimeError("ScatterPractice が既にあります。練習用の新規ファイルで実行してください。")
bpy.ops.mesh.primitive_monkey_add()
ob = bpy.context.object
ob.name = "ScatterPractice"
ng = bpy.data.node_groups.new("ScatterPractice", "GeometryNodeTree")
ng.interface.new_socket("Geometry", in_out="INPUT", socket_type="NodeSocketGeometry")
ng.interface.new_socket("Geometry", in_out="OUTPUT", socket_type="NodeSocketGeometry")
ng.interface.new_socket("Density", in_out="INPUT", socket_type="NodeSocketFloat").default_value = 30.0
ng.interface.new_socket("Size", in_out="INPUT", socket_type="NodeSocketFloat").default_value = 0.05
n = ng.nodes
gi = n.new("NodeGroupInput")
go = n.new("NodeGroupOutput")
dp = n.new("GeometryNodeDistributePointsOnFaces")
iop = n.new("GeometryNodeInstanceOnPoints")
ico = n.new("GeometryNodeMeshIcoSphere")
ico.inputs["Subdivisions"].default_value = 1
jg = n.new("GeometryNodeJoinGeometry")
links = ng.links
for output, target in [
    (gi.outputs["Geometry"], dp.inputs["Mesh"]),
    (gi.outputs["Density"], dp.inputs["Density"]),
    (gi.outputs["Size"], ico.inputs["Radius"]),
    (dp.outputs["Points"], iop.inputs["Points"]),
    (ico.outputs["Mesh"], iop.inputs["Instance"]),
    (gi.outputs["Geometry"], jg.inputs["Geometry"]),
    (iop.outputs["Instances"], jg.inputs["Geometry"]),
    (jg.outputs["Geometry"], go.inputs["Geometry"]),
]:
    links.new(output, target)
mod = ob.modifiers.new("Scatter", "NODES")
mod.node_group = ng
for node, position in [(gi, (-600, 100)), (dp, (-350, 200)),
                       (ico, (-350, -150)), (iop, (-100, 200)),
                       (jg, (150, 100)), (go, (350, 100))]:
    node.location = position

ノードの内部の名前(GeometryNodeDistributePointsOnFaces など)は、日本語表示とは別です。

2026年10月12日に撮影した、Blender 5.2.1 LTSの3Dビューポートです。

平面の上に、球が散らばって表示されています。

平面にアイコ球のインスタンスが散布されたBlenderの3DビューポートとNパネル
撮影日:2026-10-12。Blender 5.2.1 LTS/Windows 11 Pro (10.0.26200)。アプリ内のPythonスクリプト実行で作成した作業用ノードサンプルを実機撮影。4 m四方の平面に密度2、シード24で半径0.15 mのアイコ球を散布。球の中心は平面上にあり、平面を結合しているため上半分が見える状態。

Nパネルの「アイテム」タブでは、この平面の寸法は4 m・4 m・0 mで、スケールは1.000でした。

平面の寸法とスケールを、先に確認しておくと、球の数や大きさを調整しやすくなります。

密度と半径を変えて描画した

猿の表面に球を散らした結果。密度0は元のまま、密度30で約370個、密度150で約1,880個、半径を0.12にすると球が大きくなり表面を覆う
密度半径球の数見た目
00.050元の猿のまま
300.05約370個まばらに球が並ぶ
1500.05約1,880個表面がつぶつぶになる
1500.12約1,880個大きな球が重なって、表面を覆う
Blender 5.2.1・480×480・Workbench での描画(球の数はインスタンスの数)

密度を5倍にすると、球の数も約5倍になりました。

適用すると球が消える

ジオメトリノードのモディファイアーを「適用」して、普通のメッシュにしたくなることがあります。

2026年10月15日に、Windows 11 Pro 上の Blender 5.2.1 LTS(日本語表示)の画面で、適用の前後を比べました。

条件は、密度150・半径0.12・シード0で、ICO球の細分化は1です。

画面で密度を30から150に変えると、球は370個から1,882個になりました。

Blender 5.2.1 LTSで、密度150・サイズ0.120のScatterモディファイアーが残ったまま、スザンヌの表面に球が散らばった適用前の画面
2026-10-15撮影。Blender 5.2.1 LTS、Windows 11 Pro (10.0.26200)。Scatterモディファイアーの密度を30から150に変えた、適用前の実機画面。半径(サイズ)0.12、シード0で、球は1,882個。左上の統計のオブジェクト数1,883は元の猿を含む。頂点519は猿とICO球1個分の数で、すべての球を数えた数ではない(ウィンドウのタイトルバーのみ切り取り)。

この状態で、Scatter モディファイアーの見出しの右にある「∨」のメニューから「適用」を押しました。

そのまま適用すると、頂点の数は507のままで、散らした球は消えてしまいました。

モディファイアーもなくなり、元の猿の形だけが残っています。

インスタンス実体化を通さずに適用した結果、球が消えて507頂点のスザンヌだけが残り、モディファイアー欄が空になったBlenderの画面
2026-10-15撮影。Blender 5.2.1 LTS、Windows 11 Pro (10.0.26200)。「インスタンス実体化」を通さずに、Scatterモディファイアーのメニューから「適用」を押した直後の実機画面。球が消え、頂点は507のまま、モディファイアーはなくなった(ウィンドウのタイトルバーのみ切り取り)。

「ポイントにインスタンス作成」で置いたものは、メッシュではなく「インスタンス」で、適用しても取り込まれないためです。

「ポイントにインスタンス作成」と「ジオメトリ統合」の間に「インスタンス実体化」をはさむと、球が残り、頂点は23,091(元の507+球1,882個×12頂点)になりました。

2026年10月15日の確認では、ジオメトリノードの画面で F3 を押して「インスタンス実体化」を検索して追加しました。

「ポイントにインスタンス作成」から「ジオメトリ統合」へつながる線の上に置くと、前後が自動でつながりました。

「すべて実体化」はオンのままです。

つないだ時点で、左上のスプレッドシートに出る評価済みのメッシュの頂点の行数は、23,091になりました。

ジオメトリノードの画面で、ポイントにインスタンス作成とジオメトリ統合の間にインスタンス実体化をつなぎ、スプレッドシートの行数が23,091になったBlenderの画面
2026-10-15撮影。Blender 5.2.1 LTS、Windows 11 Pro (10.0.26200)。F3の検索で「インスタンス実体化」を追加し、「ポイントにインスタンス作成」と「ジオメトリ統合」の間につないだ実機画面。左上のスプレッドシート(評価済み)の頂点の行数は23,091(ウィンドウのタイトルバーのみ切り取り)。

この状態で同じように「適用」を押すと、球がメッシュとして残りました。

頂点は23,091、辺は57,465、面は38,140で、モディファイアーはなくなっています。

インスタンス実体化を通してから適用し、球がメッシュとして残って23,091頂点になったスザンヌのBlenderの画面
2026-10-15撮影。Blender 5.2.1 LTS、Windows 11 Pro (10.0.26200)。「インスタンス実体化」をつないでから「適用」を押した実機画面。球がメッシュとして残り、頂点23,091・辺57,465・面38,140で、モディファイアーはなくなった(ウィンドウのタイトルバーのみ切り取り)。

適用する前の画面の統計に出る頂点数519は、猿の507と、共有しているICO球1個分の12を足した数です。

球をすべてメッシュにしたときの数ではないので、実体化した後の数は、適用した後の統計で確かめます。

つなぎ方適用した後の頂点数
インスタンス作成 → 統合507(球が消える)
インスタンス作成 → インスタンス実体化 → 統合23,091(球が残る)
密度150・半径0.12の状態で適用した結果

実体化すると共有インスタンスが実際のジオメトリへ変わり、個数や複雑さに応じて処理・メモリ負荷が増えます。この例で適用した結果は、猿と多数の球を含む1つのメッシュオブジェクトであり、球ごとに別オブジェクトが作られるわけではありません。

5.2でスクリプトから値を変える

以前の Blender では、モディファイアーの値を mod["Socket_1"] = 30 のように変えられましたが、5.2.1 ではエラーになりました。

TypeError: bpy_struct[key] = val: id properties not supported for this type

この記事のBlender 5.2.1では、次の方法で変更できました。2026年10月23日に公式APIのNodesModifier.propertiesを照合しましたが、動的なinputs以下の全項目は静的APIページに列挙されていません。このコードの実行記録は5.2.1の練習用ノードに限ります。

import bpy

ob = bpy.context.object
if ob is None or ob.type != "MESH":
    raise RuntimeError("練習用メッシュを選んでください。")
mod = ob.modifiers.get("Scatter")
if mod is None or mod.type != "NODES" or mod.node_group is None:
    raise RuntimeError("上の例で作成した Scatter モディファイアーが必要です。")
socket = next((item for item in mod.node_group.interface.items_tree
               if item.item_type == "SOCKET" and item.in_out == "INPUT"
               and item.name == "Density"), None)
if socket is None:
    raise RuntimeError("Density 入力がありません。")
getattr(mod.properties.inputs, socket.identifier).value = 150.0
ob.update_tag()

Socket_1 のようなidentifierは入力の追加順で変わるため、決め打ちせず Density という名前の入力を探して値を変えます。

ng.interface.items_tree の各項目の identifier で調べられます。

2026年10月15日に確かめたファイルでは、「密度」(Density)の identifier は Socket_2 でした。

mod["Socket_2"] と書いても、同じ TypeError になりました。

画面で密度を150に変えたあと、mod.properties.inputs から読んだ密度の値も150でした。

Blenderの版は、画面右下のステータスバーに出ます。

2026年10月15日に撮影したこの記事の画面では、右下に「5.2.1」と出ています。

ビルドの日付などの詳しい情報は、左上のBlenderのアイコンのメニューにある「Blenderについて」で確認します。

インストールしている拡張機能(アドオン)の一覧は、版とは別に、「編集」→「プリファレンス」の「アドオン」で確認できます。

2026年10月12日に撮影した画面です。

BlenderのPreferencesに表示されたアドオン設定画面
2026-10-12撮影。Blender 5.2.1 LTS、Windows 11 Pro (10.0.26200)。実機画面、原寸保存。

練習用ファイルで適用前後を確かめる

Blender練習用データをダウンロード(ZIP・約2.1MB)

ZIPを別フォルダーへ展開してから開き、元のファイルを上書きせずコピーで試してください。

Blender 5.2.1 LTSで生成し、背景実行でデータと処理を検証したものです。

2026年10月15日には、記事の作成コードで別に用意したファイルを画面で開き、密度の変更、インスタンス実体化の追加、適用、Ctrl+Z での取り消しを確かめました(「適用すると球が消える」の画像)。

その作成コードは背景実行で流したもので、Scripting ワークスペースに貼って実行する操作は、確認に含めていません。

このZIPの中のファイルを画面で開く操作と、Unityへの取り込みも、確認に含めていません。

  1. scatter-density30.blend を開き、ScatterPracticeを選んで密度と半径を確認する
  2. コピー上で密度を150に変え、球の数とメッシュの重さを比べる
  3. scatter-realize-ready.blend を別に開く。このファイルはインスタンス実体化を接続済み
  4. コピー上でモディファイアーを適用し、メッシュの頂点数を確認する

2026年10月2日に Blender 5.2.1 LTSの背景実行で再検証しました。

密度30で370個、150で1,882個になり、実体化後の適用では23,091頂点が残りました。

実体化を通さない例を適用すると、猿の507頂点だけが残ることも再確認しました。

球が見えないときは密度と半径の値、インスタンス作成の入力、グループ出力までの接続を確認します。

ノードを置いただけでは変化しないので、下の練習用ファイルとリンクの接続先を見比べてください。

適用直後でUndo履歴が残っていれば、Ctrl+Zで戻せます。起動中でも履歴の件数・メモリ制限や後続操作によって戻せないことがあるため、適用前の別名ファイルを残してください。

2026年10月15日の確認では、実体化せずに適用して上書き保存したあとでも、そのまま Ctrl+Z を押すと、Scatter モディファイアーと1,882個の球、密度150が戻りました。

Blender を閉じたあとは取り消しの履歴が残らないため、適用前の練習用ファイルを開き直します。

スポンサーリンク

まとめ

  • 「面にポイント配置」で点を置き、「ポイントにインスタンス作成」でコピーを置く
  • 最後は「ジオメトリ統合」で、元の形とまとめる
  • 適用する前に、「インスタンス実体化」を入れる。入れないと球が消える
  • 5.2.1 のスクリプトは mod.properties.inputs で値を変える

描画のエンジンの選び方は、CyclesとEEVEEの違いを見てください。

参考:Blender 5.2.1 LTS での実行結果(2026年9月29日)と、Windows 11 Pro の画面での適用の確認(2026年10月15日)。

参考:Realize Instances、Distribute Points on Faces、NodesModifier API、Undo & Redo(2026年10月23日照合)。

よくある質問:Blenderのジオメトリノードで球を散らすときのチェックリスト

ジオメトリノードとは、何ですか?

ノードをつなぐだけで、モデルの形を作ったり変えたりする機能です。この記事では、猿(スザンヌ)の表面に小さな球を散らす例で、基本を確かめます。

どのノードを使いますか?

「面にポイント配置」、「ポイントにインスタンス作成」、「ジオメトリ統合」の3つを、散らす形(ICO球)につないで使います。最後に元のメッシュと球を1つにまとめるため、ジオメトリ統合を使います。

密度を変えると、球の数はどうなりますか?

この記事の確認では、密度を30から150にすると、球は約370個から約1,880個になりました。密度を5倍にすると、球の数も約5倍になりました。

モディファイアーを適用したら、球が消えました。

「ポイントにインスタンス作成」で置いたものは、メッシュではなくインスタンスで、適用しても取り込まれないためです。「ポイントにインスタンス作成」と「ジオメトリ統合」の間に、「インスタンス実体化」をはさむと、球が残ります。

実体化すると、何か問題がありますか?

共有していたジオメトリが実体化されるため、数が多いと処理・メモリ負荷が増えます。この例では球ごとの別オブジェクトではなく、猿と球を含む1つのメッシュになります。この記事の確認では、実体化後に適用すると頂点は23,091になりました。

Blender 5.2.1で、スクリプトから値を変えるには?

以前のBlenderでは、モディファイアーの値をキー指定で変えられましたが、5.2.1ではエラーになりました。5.2.1では、mod.properties.inputsを使って変えます。Socket_1のような識別子は、入力の追加順で変わるため、決め打ちせず、Densityという名前の入力を探して値を変えてください。

球が見えないときは、何を確認しますか?

密度と半径の値、インスタンス作成の入力、グループ出力までの接続を確認します。ノードを置いただけでは変化しないため、練習用ファイルとリンクの接続先を見比べてください。

この記事の結果は、どこまで確認済みですか?

密度と球の数などは、Blender 5.2.1 LTSの背景実行(画面なし)で確認した結果です。モディファイアーの適用、インスタンス実体化の追加、Ctrl+Zでの取り消しは、2026年10月15日にWindows 11 Proの画面でも確かめました。Unityへの取り込みと、練習用ZIPを画面で開く操作は、検証に含みません。元のファイルを上書きせず、コピーで試してください。適用直後でUndo履歴が残っていればCtrl+Zで戻せますが、取り消しだけをバックアップ代わりにしないでください。メニュー名や仕様は、バージョンで変わることがあるため、Blender公式マニュアルで最新を確認してください。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

3DCGのおすすめ書籍

3DCG用PCの選び方

周辺機器の優先度

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