2025年10月7日(現地時間) に共有されたBlender 5.0 ジオメトリノードのボリューム機能の強化についての紹介です。
はじめに
ボリューメトリックデータは、メッシュ、ポイントクラウド、カーブに次ぐコアなジオメトリタイプの一つです。
メッシュ、ポイントクラウド、カーブの3つを処理する方法はすでに多く存在しますが、ボリュームを使用するためのジオメトリノードの機能セットは、これまで主にボリュームと他のタイプとの変換に関わるものだけで、非常に限定されていました。
Blender 5.0では、流体シミュレーション、SDFモデリング、科学的なボリューメトリックデータの視覚化など、多くの処理が可能となるジオメトリノードでのボリュームサポートの強化が行われる予定です。
新しいデータタイプ「ボリュームグリッド」
このアップデートの中核となるのは、float、vector、またはその他のプリミティブ タイプなど、特定のデータ タイプのボリューム データに対応する新しいボリューム グリッド データ タイプです。
グリッドを操作するノードは、わかりやすいように新しいグリッドソケットの形状が使用されます。ソケットの色は、それがどの種類のグリッドであるかを示します。一般的な使用例として、floatグリッドは通常3Dグリッド上に密度値を格納します。

グリッドに格納された値は、標準の数式(Math)ノードで変更することができます。2つのグリッドが加算されると、出力は、各ボクセルが対応する入力ボクセルの合計となる新しいグリッドになります。(これには、グリッドが同じトランスフォームを持つ必要があります)。

他のジオメトリタイプ上のアトリビュートとは異なり、グリッドはジオメトリソケットから完全に独立して存在できますが、ジオメトリソケットは任意の数の名前付きグリッドを格納することも可能です。良く使用されるグリッド名にはdensityやtemperatureなどがあります。
通常、最終的には計算されたグリッドをジオメトリに挿入し、名前やマテリアルを割り当てる必要がありますが、ビューアーノードを使用すると、最初にグリッドをジオメトリに入れることなく、グリッドを直接表示できます。
グリッドのデータ構造
ボリューメトリックデータは通常、計算負荷が非常に高いという特性があります。これは、少し詳細なグリッドであっても、格納する必要がある個々のボクセル値の数が膨大になるためです。たとえば、100x100x100のグリッドには、すでに1,000,000個のボクセルが存在します。このデータを効率的に格納および処理する方法が必要とされます。
ボリュームデータの格納には、業界標準であるOpenVDBライブラリが使用されます。その中核となる技術は、密な(dense)ボリュームグリッドと疎な(sparse)ボリュームグリッドをボクセルのグループとして効率的に格納するためのデータ構造です。各ボクセルは3Dの整数座標によってインデックス付けされます。たとえば、座標(0, 0, 0)は中央のボクセルであり、(1, 0, 0)はその右隣のボクセルです。
さらに、各ボリュームグリッドには、インデックス空間をオブジェクト空間にマッピングするトランスフォーム(位置、回転、スケール)があります。たとえば、グリッドのスケールが0.1の場合、各ボクセルの各方向の大きさは0.1ユニットになり、ボクセル(5, 0, 0)はオブジェクト空間の位置(0.5, 0, 0)に対応します。グリッドのトランスフォームはSet Grid Transformノードで設定でき、Grid Infoノードで取得できます。
グリッドは基本的に空間をすき間なく埋め尽くす構造になっているので、任意の位置で値をサンプリングできます。ただし、膨大なメモリが必要になってしまうので、すべてのボクセルごとに値を個別に保存するのは現実的ではありません。そこで OpenVDB では、データをより効率的に保存するために2つの技術を使っています。
これらの仕組みは、パフォーマンスへの影響を考慮すると、ユーザーはある程度意識する必要があります。
- タイル:例えば8x8x8ボクセルのブロックは小さなタイル(Tiles)を形成します。その中の値がすべて同じであれば、512 個のボクセルを個別に保存する代わりに、その値を一度だけ記録すれば済みます。さらに、あまり一般的ではありませんがこうした小さなタイルを 16×16×16 の単位にまとめて、より大きなタイルとして扱うことも可能です。Prune Grid ノードや Voxelize Grid ノードを使ってボクセルとタイルの変換を行うことができます。
- アクティブステータス:各ボクセルやタイルには「アクティブ状態(Active Status)」が設定されています。アクティブな場合、それ自体が値を格納します。非アクティブな場合、グリッドの背景値を使用します。この背景値は Set Grid Background ノードで指定することができ、多くの処理では非アクティブなボクセルは単純に無視されます。
グリッドのトポロジーとは、タイルの構造とアクティブ状態を組み合わせたものです。多くの処理は、入力されたグリッドのトポロジーをそのまま保持します。もし複数のグリッドを入力として扱う場合、たとえば二つのグリッドを加算するときには、それぞれのトポロジーが統合されるのが一般的です。ノードによっては「Topology」という専用の入力を持ち、そこでどのボクセルやタイルを処理対象とするかを決定できます。また、トポロジーに関する統計情報の一部はスプレッドシート上で確認することができます。

内部構造の詳細については、オリジナルのOpenVDB論文およびOpenVDBの概要で確認できます。
フィールドからグリッドへの変換
フィールドとグリッドは本質的に異なる概念です。たとえばノイズフィールドは、任意の位置でノイズ値を計算できる「関数」です。一方でグリッドは単なるデータの容器であり、それ自体を直接「評価」することはできません。ただし、グリッドは各ボクセルにフィールドの評価結果を保存することができます。
フィールドとの統合
フィールドをグリッドに変換する方法としては、Field to Grid ノードを使うのが一般的です。このノードは入力されたフィールドを各ボクセルやタイルごとに評価し、その結果を新しいグリッドに格納します。

もう一つの方法は、数式(Math)ノードを利用することです。数式ノードに少なくともひとつのグリッド入力がある場合、フィールド入力は内部的にそのグリッドのトポロジーに基づいて評価されます

フィールドをボクセルの文脈で評価する際には、標準的な Position ノードと、新しく導入された Voxel Index ノードという二種類の入力ノードを利用できます。
フィールド内でのグリッドのサンプリング
さらに、グリッドは、通常のフィールドの評価のようにサンプリングすることも可能です。その場合は Sample Grid ノードを使い、位置を入力すると、その座標における補間値を計算して返します。
より低レベルな方法としては、Sample Grid Index ノードを使い、グリッドに格納されている実際の値に直接アクセスすることもできます。
SDFグリッドモデリング
符号付き距離場(Signed Distance Field, SDF)グリッドとは、各ボクセルに「表面までの距離」を格納した浮動小数点グリッドのことです。値が 負の領域はオブジェクトの内部、正の領域は外部を示し、値が 0 の場所が表面になります。
メッシュに比べると詳細な形状を保存するには効率が悪い方法ですが、その代わりにメッシュでは難しい処理を簡単に行えるという大きな利点があります。特に、滑らかな遷移を伴うブーリアン演算は SDF なら簡単に実現できます。
また、SDF にはスムージングなどに使える専用のフィルタも用意されており、たとえば SDF Grid Mean ノードを使えばグリッドを平滑化できます。
OpenVDBオペレータ
OpenVDB を基盤にしている利点は、ボリュームデータを扱うための豊富なアルゴリズムがすでに揃っている点です。これらは Geometry Nodes から簡単に利用できるよう公開されています。
Blender 5.0 ではすでに、アドベクション(流体的な移動)、ブーリアン演算、ベクトル解析(カールや勾配)、各種 SDF フィルタといったノードが実装されています。時間の都合でまだ公開されていない機能もありますが、今後のリリースでさらに追加されていく予定です。
ボリューム機能開発の歴史
このリリースは、ボリューム機能に関する4年以上の設計と改良の集大成となっています。開発は、優先順位の関係で長年にわたってゆっくりと進行しました。

ジオメトリ ノードに SDF ボリューム機能を追加した 最初のプルリクエスト
SDF ボリューム機能の最初の設計検討は 2021 年に始まり、主に「名前付き属性(named attributes)」と同様の方法でボリュームグリッドへアクセスする設計が検討されました。2022 年にはその設計に基づく実装が始まったが、時間の経過とともに「ボリュームジオメトリから名前でグリッドを参照する方式」は操作が煩雑であるという課題が明らかになりました。
グリッドソケットの設計の登場により、これまで実装されていたノードは削除され、アプローチが刷新。過去 2年間、この新しい設計の実装が進められてきました。グリッドソケット形状の追加は、ジオメトリノードやコンポジター全体でソケットとフィールドを視覚化する方法に大きな変更が必要となりました。詳細は以下の記事をご覧ください。
これらの設計の見直しと時間をかけた改良によって、最終的により堅牢で持続的な仕組みとなると考えられています。
開発をサポート
ボリュームに関するさらなる改善はまだ開発中であり、専門の設計および開発リソースが必要となります。この開発を実現するためには、Development Fund(開発基金)へのメンバーシップ参加や寄付による支援が必要となります。
開発をサポート
このプロジェクトは初期段階にあり、目標を達成するためには専門のデザインおよび開発リソースが必要になります。開発基金にメンバーとして参加するか、一度の寄付でサポートすることができます。

























コメント