2025年8月8日(現地時間)- Blender のジオメトリノードの新しい機能バンドルとクロージャについての情報が共有されたので、その内容を紹介したいと思います。
はじめに
バンドルは(Bundles)は、複数の値を一つのソケットにまとめることができるコンテナで、クロージャ(Closures)ソケットはノードグループ全体を含む任意の関数を渡すことができる機能です。
バンドルとクロージャの基本的な説明は以前紹介した以下の記事をご覧ください。
Blender 5.0には、バンドルとクロージャのための新しいソケットタイプが導入されます。
この記事では、それらが何であるか、なぜ重要なのか、そして今後どのように活用していく予定であるかを紹介したいと思います。
全体的な目標
バンドルとクロージャの新しい概念は、主要な目標の一つである「ジオメトリノードを使用して柔軟で高レベルな機能を構築すること」に近づくための助けとなります。つまり、これにより内部の仕組みをすべて理解しなくても使用できるツールを開発することが可能になるということです。
バンドルとクロージャは、ノードグループの作成者にとって非常に強力な機能であり、よりシンプルかつ柔軟なツールの構築を可能にします。さらに、ジオメトリノードを使用して宣言的システムを構築することも可能になり、これまでとは異なる新しいパラダイムでノードグループを設計できるようになります。
バンドル
バンドルは、2つの概念の中でよりシンプルな機能です。複数の項目をひとつにまとめ、単一のリンクでまとめて受け渡すことができます。この仕組みは、プログラミングにおける「構造体(structs)」に似ています。
バンドルを扱うための2つの新しいノードCombine BundleノードとSeparate Bundleノードがあります。
- Combine Bundle:任意の数のアイテムから新しいバンドルを作成
- Separate Bundle:バンドルを個別のアイテムに分解

Combine BundleノードとSeparate Bundleノード
例えば、キューブとシリンダーのメッシュをバンドルとして結合し、再び分離することが可能です。
バンドルには、ジオメトリ、単一の値、フィールド、オブジェクトなど、あらゆるジオメトリノードのタイプを含めることができます。また、Bakeノードやシミュレーションゾーンでベイクすることも可能です。
クロージャ
まず、ベースメッシュを生成、次に木の配置ポイントをいくつか散布し、その位置に木をインスタンス化することで地形を生成するノードグループで考えます。

地形生成のモックアップ
このノードグループでは木の密度をカスタマイズできますが、木の分布方法に関するユーザーの制御は非常に限られています。点の分布はノードグループの中間で行われるため、ユーザーにより多くの制御を与えることは困難です。つまり、地形生成の前や後で単純に処理することはできません。
クロージャは、カスタム機能をノードグループに渡すことを可能にすることで、この問題を解決します。これには、分布ノードの代わりに新しいEvaluate Closureノードを使用し、そのクロージャをグループ入力として公開する必要があります。

Evaluate Closureノードを使用した地形生成のモックアップ
ノードグループを使用する際、新しいClosure Zoneを使ってカスタムの分布関数を指定できるようになります。ゾーン内にあるものは、評価時に基本的にノードグループに注入されます。注意点として、クロージャゾーンの入力と出力の名前は、Evaluate Closureノードで使用されている名前と一致させる必要があります。これについては次のセクションで詳しく説明します。

Closure Zone
地形ジェネレーターには、異なる木の散布パターンに対応する追加のノードグループを構築することができます。これらは、同じ作成者によって提供されることも、、同じインターフェースを実装した第三者が提供することも可能です。
実際には、高レベルの地形ジェネレーターには基本的な散布機能を備えておくことが望ましいです。さらに、クロージャを活用することで、より高度なカスタマイズを可能にする設計が理想的です。

散布用ノードグループ
パススルー
Evaluate Closureノードがミュートされているか、クロージャが接続されていない場合、同じ名前を持つ入力と出力の値が自動的にパススルーされます。これは、クロージャがユーザーにとってオプションである場合に非常に便利です。

ミュートされたEvaluate Closureノード
値のキャプチャ
クロージャゾーンの重要な特徴の一つは、外部からゾーンに渡された値をキャプチャできることです。例えば、前述のランダムな木の散布ノードグループは下の画像のようになります。渡された密度がどのようにキャプチャされ、クロージャの一部となっているかに注目してください。

入力をキャプチャしているクロージャゾーン
ソケットのインスペクション
クロージャは、高レベルなツールを構築するために多くの可能性を提供しますが、その一方でデバッグが難しくなるという課題があります。これは、ノードツリーを単純に左から右へ評価できず、クロージャが評価される際に処理が前後へジャンプする必要があるためです。
これまでの主なデバッグツールとしては、ビューアノードとソケットのインスペクションがクロージャゾーン内でサポートされています。これは、クロージャが単一の場所で評価される場合に最も効果的です。その場合Blenderはクロージャ内でどのコンテキストをインスペクトすべきかを正確に把握できるからです。
一方、クロージャが複数の場所で評価される場合、Blenderは現状、基本的にランダムに1つを選択します。この挙動に対する詳細な制御機能は、今後追加が検討されています。
ソケットの同期
前述の通り、クロージャとバンドルは両方とも、入力と出力を識別するために名前を使用します。名前が一致しない場合はエラーが発生します。対応するノードが完全に別のノードグループにある可能性があるため、一般的にソケットを自動的に名前変更することは行えません。

アイテムが見つからないという警告
しかし、実際にはBlenderはリンクをたどることで、正しいソケットが何であるべきかを推測できます。2つのバンドルまたはクロージャノードが接続されていても、クロージャやバンドルが持つソケットの名前・型などが異なると検出された場合、ノードを同期するための新しいアイコンが表示されます。これをクリックすると、ノードは接続されているものと一致するように自動的に更新されます。

ソケットを更新するための同期ボタン
同期は、そのようなノードを初めてリンクする際に自動的に行われます。ノードに既にいくつかのソケットがある場合、それらは意図的なものであると見なされ、更新すると情報が失われる可能性があるため、自動的に更新されることはありません。
同期機能のデモンストレーション
将来の展望
ジオメトリノードにバンドルとクロージャが導入されたことは、既に大きな進歩であり、今後の多くの開発にもメリットがあります。
以下では、すでに進行中の計画の一部をご紹介します。
入力ウィジェット
現在、ノードグループの制御を公開する際の大きな制約として、カーブマッピングやカラーランプを直接入力として扱えない点があります。そのため、クロージャが登場する前は、例えばカラーランプをカスタマイズするためだけにノードグループのコピーを作成する必要がありました。
クロージャを利用すれば、カラーランプノードをクロージャ内に組み込み、それをノードグループへ渡すことが可能になり、この制約はすでに解消されています。しかし、この方法は必ずしも便利とは言えず、グループノード上で直接ウィジェットを利用できる方が望ましいとされています。
幸いなことに、これらのウィジェットは直接クロージャとして扱うことができます。例えば、カラーランプは「浮動小数点数を色にマッピングするクロージャ」、カーブマッピングは「浮動小数点数を新たな浮動小数点数へマッピングするクロージャ」と定義できます。そのため、これらのウィジェットはクロージャソケットの「サブタイプ」として使用できます。
なお、この機能に関してはすでに進行中のパッチがあります。
物理演算
物理演算やその他の宣言的システムはバンドルの導入によって大きな恩恵を受けます。さらに、クロージャを組み合わせることで、より高い柔軟性も実現できます。
物理シミュレーションでは、通常、すべてのシミュレーション対象エンティティとその制約を物理ソルバーに渡し、ソルバーが実際の計算を行います。これまで、そのすべての情報をジオメトリノード内で受け渡せるような適切なパッケージ化方法がありませんでしたが、バンドルがこの問題を解決します。物理ワールドに関するすべての情報を(ネスト構造を含む)バンドルにまとめ、それをソルバーへ渡すだけで処理が可能になります。
この仕組みの動作原理や応用可能性をより詳しく探るための実験が現在進行中です。
ジオメトリノードの枠を超えて
リピートゾーン、バンドル、クロージャ、入力ウィジェットといった多くの機能は、ジオメトリノード以外の領域でも有用です。
シェーディングノードへの応用
現在、これらの機能をシェーディングノードでも利用可能にするための開発が進行中です。これは、ノードツリーを内部的に前処理し、これらの高度な機能をすべてインライン化することで実現されます。この仕組みにより、各レンダーエンジンはわずかな修正を加えるだけで対応できるようになります。
このアプローチは、使用するテクスチャを変更するためだけにノードグループをコピーしなければならないようなケースも解決できます。さらに、PBRテクスチャセットのような関連テクスチャを含むバンドルを作成することも可能になります。
コンポジターでの応用
コンポジターも最終的にはこれらの機能をサポートするべきですが、その導入方法は異なる形になる可能性があります。
ジオメトリノードと同様、コンポジターのエバリュエーターは、すべての処理をインライン化することなく、これらの機能をネイティブにサポートすることが望ましいとされています。これは、インライン化には特定の条件、例えばリピートゾーンの反復回数が一定でなければならないといった制約が伴うためです。
結論
バンドルとクロージャは、ユーザーの熟練度を問わず恩恵をもたらす高レベルなツールをジオメトリノードで構築する上で、大きな前進となります。
さらに、これまで実装が難しかった機能への新たな可能性も開かれます。
開発をサポート
このプロジェクトは初期段階にあり、目標を達成するためには専門のデザインおよび開発リソースが必要になります。開発基金にメンバーとして参加するか、一度の寄付でサポートすることができます。




























コメント