SDF 関数の操作

バージョン16.0.0で、Substance 3D DesignerはSDF 関数を作成するための強力なノードのセットを導入しました。このノードを使用して、プロシージャルした3Dシェイプを作成および操作できます。

SDF 関数は、ツールセットで使用可能なSDFノードを組み合わせたSubstance関数グラフで、SDF 関数をサポートするノードの専用パラメータに適用されます。

作業を開始する前に、基本的なワークフローを以下に示します。

  1. 3Dビューアノードで、結果を視覚化するSDF 関数を作成します。
  2. 最終的な関数グラフをコピー(またはインスタンス化)して、Shape splatter v2などのSDF 関数をサポートするノードのSDF 関数パラメーターにコピーします。

Substance 3D Designerの3D SDF 関数ノード機能のモーショングラフ

SDF 関数とは

2Dで曲線としてプロットできるのと同様に、3Dでもサーフェスとしてプロットできます。

符号付き距離フィールドは、空間内の任意の点からサーフェス上の最も近い点までの距離を計算することによって、3D空間でサーフェスを定義する数学関数です。

「signed distance field」という名前をさらによく理解するために詳しく説明しましょう。

  • 符号付きとは、ポイントがサーフェスの外側または前面にある場合は関数が正の値を返し、ポイントがサーフェスの内側または背面にある場合は負の値を返し、ポイントが正確にサーフェス上にある場合は0を返すことを意味します。
  • 距離とは、関数が空間内の任意の点からサーフェス上の*最も近い*点までの距離を計算することを意味します。
  • Fieldは、関数が値のフィールドを記述することを意味します。これは、空間内の各ポイントには、最も近いサーフェスまでの距離を表す対応する値があるためです。
SDF 関数によって生成されたシェイプを、圧倒的なアイソラインで視覚化したもの。

これらの機能は、画面の描画、影のキャスト、コンターマスク、衝突検出など、コンピューターグラフィックスで多くの用途に使用されています。

Substance 3D Designerでは、SDF 関数を使用してプロシージャルした方法で3Dシェイプを作成および操作します。

SDF 関数の出力と意図された使用

SDF 関数ノードは、1つの浮動小数値、つまり最も近いサーフェスへの符号付き距離を出力します。

しかし、それらにはさらに多くのことがあります。ホストノードが定義する必要がある変数の値を内部的に取得および設定したり、結果のシェイプを操作および描画するために知っておく必要があります。

つまり、これらのノードは、変数をサポート​するノードのコンテキストで使用する必要があります。これらのSDF 関数を認識し、ネイティブに統合するためです。

ノードには、シェイプスプラッタv2と3Dビューアが含まれます。

Substance関数グラフ

SDF 関数ノードは専用のSubstance関数グラフで使用されるため、そのグラフの種類でのみ使用できます。
関数として表現するノードパラメーターでは、「関数の編集」ボタンを使用します。

Substance関数グラフについて知っておくべきこと:

  • グラフと同様に、nodes コネクターは​ specialized ​です。つまり、型🔗を表す​一致する色 の他のコネクターにのみ接続できます。
  • ノードにはパラメータはなく、入力のみを持つことができます。 (ただし、いくつかの例外があります)。
  • グラフには出力ノードが1つあります。 ノードを右クリックし、Set as outputを選択して出力ノードとして指定します。
  • グラフと同様に、基本ビルディングブロックである​ atomic ​ノードと、他のSubstance関数グラフを表す​ instance ​ノードがあります。
  • グラフ内の値に対して演算を実行できる個別の演算子(代数演算子、論理演算子、比較演算子)がありますが、SDFノードには独自の演算子があります
SDF 関数を定義する関数グラフの例
working-with-sdf-function-グラフ.png

はじめに

SDF 関数を作成するには、まずノードを視覚化して、調整するノードとパラメーターの効果を理解する必要があります。

3Dビューアノードには、ノードを使用して作成された図形を視覚化するための専用モードがあります。SDF 関数の シーンの種類 パラメーターをSDF functionに設定し、関数の編集​ボタンをクリックして、SDF 関数自体をホストする関数グラフを開きます。

このノードは、バウンディングフレームやアイソラインなど、より直感的かつ効率的にSDF 関数の側面を視覚化するための専用機能を提供します。

物理的な太陽/空ノードを使用すると、3Dビューアーで環境照明をすばやく設定できます。

3Dビューアノードを設定してSDF 関数を視覚化する。

TIP
table 0-row-2 0-border-none 1-border-none 2-border-none html-authored no-header

すべてのSDF 関数ノードとその入力コネクターには、その目的と使用方法に関する詳細を知らせるツールチップがあります。

ぜひチェックしてみてください。

SDF 関数ノードの入力コネクターのツールチップ。

ノード値の設定

Substance関数グラフのすべてのノードと同様に、SDF 関数ノードにはパラメータがなく、パラメータとして使用される入力コネクターのみが含まれます。

これらの入力の値を設定するには、定数ノードを使用します(浮動小数、浮動小数3、整数3​など)。
ノードメニューを使用して通常の方法で作成するか、またはノードから新しいコネクションをドラッグして、一致するタイプのコネクターのフィルタリングされたリストからメリットを得ることができます。

SDF 関数ノードのほとんどの入力コネクターにはデフォルト値があります。この値はツールチップに表示されます。

SDFプリミティブの編集に使用する定数ノード。

TIP
table 0-row-2 0-border-none 1-border-none 2-border-none html-authored no-header

一部の値を常に表示しておく必要がない場合は、Dキーを使用してノードをドッキングすると、スペースを節約し、グラフを除去できます。

また、コメントを使用して値を追跡することもできます。

SDF 関数ノードの入力コネクタのツールチップ。

境界フレーム

境界フレームは、3Dスペースのボックスで、シェイプスプラッタv2ノードでSDF 関数が評価および描画される 境界 を定義します。

境界フレームが小さすぎる場合は、シェイプの一部がトリミングされることがあります。 大きすぎると、不要な計算が発生し、処理時間が長くなる可能性があります。

バウンディングフレームパラメーターを使用すると、バウンディングフレームの表示を有効にできます。 次に、境界フレームのサイズパラメーターの値を変更して、境界フレームのサイズを調整できます。

[フレームの色抜き]パラメーターを使用すると、境界フレームの外側の領域が明るい赤で表示されるので、それに応じてフレームを調整できます。

3Dビューアノードのバウンディングフレーム機能(SDF 関数用)。

等値線

シェイプの変形では、シェイプが描画される空間を実際に*変形する*必要があるため、トランスフォームの後にノードを使用すると、意外な結果が生じることがあります。
その場合、空間自体を視覚化すると便利です。これは、図形の 距離フィールドを視覚化 することで実現できます。

そのために、3Dビューアーノードは、図形の表面から所定の距離を表す等高線を繰り返す 等高線 を使用します。 SDFアイソラインパラメーターを使用すると、ビジュアル化が可能になります。
等値線は、SDF等値線位置パラメーターで指定されたHeightに配置された水平面に描画されます。

シェイプに適用されたトランスフォームによって等値線がどのように変形されるかを確認すると、シェイプ自体がどのように変形されるかを理解し、それに応じてノードのパラメーターを調整するのに役立ちます。

3Dビューアノードのバウンディングフレーム機能(SDF 関数用)。

SDF 関数ノードカテゴリ

SDF 関数ノードは、その機能と目的に基づいてライブラリ内で分類されます。

必要な数のライブラリビューを作成して、作業スペースを整理できます。これにより、すべての作業を管理しながら、SDF 関数ツールセットをカテゴリ別に整理できます。 ウィンドウ/新規ライブラリ​の表示に移動して、ライブラリの独立したビューを個別に追加します。

サンプルワークスペース
working-with-sdf-workspace.png

プリミティブ

SDF 関数の基本ビルディングブロック。球体、ボックス、シリンダなどの基本的なシェイプを作成できます。

演算子

これらのノードを使用すると、プリミティブで作成されたシェイプを結合および修正できます。 次のようなものがあります。

  • 直線のブール演算式​の演算子(和、交差、減算など)を使用すると、様々な方法でシェイプを組み合わせることができます。
  • ブール演算式​の変形(丸め、モーフなど)により、シェイプをブレンド効果と組み合わせることができます。
  • 図形を変更および/または複製できるShellおよびSymmetryなどのその他の特殊な​演算子。

変形

図形は、翻訳、回転、拡大/縮小、ねじれなど、さまざまな方法で変形できます。
これらのノードを使用すると、サーフェスが定義されている空間そのものを 変換 ​することで、これらの変換を実行できます。

このスペースはPと呼ばれます。次のセクションに進むと、このスペースの意味とスペース変換の仕組みについて詳しく理解できます。

マテリアル

SDF 関数を使用して作成されたシェイプに対して、基本的なマテリアルマネジメントが利用できます。

基本的なマテリアルアトリビュート(カラー、粗さ、メタネス)を定義できます。このアトリビュートは、3Dビューアノードでの直接表示に使用したり、シェイプスプラッタv2ノードでのマテリアル作業のベースとして使用できます。
また、マテリアルIDをシェイプの異なる部分に割り当てて、それらを分離することもできます。

これらのノードのアプリケーションの詳細については、以下を参照してください。

'P’入力

オフセットや回転などのトランスフォームをシェイプに適用すると、シェイプが定義されている空間が実際にトランスフォームされます。

トランスフォームを他のシェイプに適用する場合(例えば、複数のシェイプを同じように回転させる場合)、トランスフォームされた同じ領域を使用している必要があります。

変換されたスペースは、専用のP入力を使用してノード間で共有されます。この入力は、ほとんどのSDFノードで見つけることができます。
'P’はワールド空間を表します​P osition:ワールド空間の点の座標を表す3Dベクトルです。

オフセットPおよび回転Pノードは、空間を変換し、その変換を継承するすべてのノードに伝達します。
たとえば、複数のシェイプのP入力を同じ回転Pノードに接続することで、複数のシェイプを一緒に回転できます。

これは単に便宜上の問題ではなく、SDFノードが空間内の同じ位置で動作することを確認するためです。

次に例を示します。

working-with-sdf-p-input.gif

球が繰り返され、空間が3Dグリッドとして表示されます。 スペースを繰り返す​ことで繰り返されます。
共有Pがない場合、曲がった円柱は球で使用される繰り返しスペースを使用します。
共有Pを使用すると、共有の回転されたスペースで図形を正しく定義できます。

「シェイプスプラッタv2」ノードのSDF 関数の使用

3DビューアノードのコンテキストでSDF 関数を完了したら、関数全体をコピーしてShape splatter v2ノードに貼り付け、そのノードのシェイプジェネレータとして使用できます。

図形の種類​パラメーターをSDF functionに設定し、パターンSDF 関数​パラメーターに移動して、関数の編集​ボタンをクリックして、パラメーターの関数グラフを開きます。
その後、3Dビューアノードからコピーした関数をグラフに貼り付けることができます。 (関数グラフの出力ノードをもう一度設定することを忘れないでください。)

SDF境界フレームサイズ​パラメータを調整して、3Dビューアーノードで使用していた境界フレームと一致させ、シェイプが正しく描画されていることを確認してください。

working-with-sdf-shape-splatter-v2.png
図形の種類​がSDF functionに設定された​図形スプラッタv2。SDF境界フレームサイズ​がシェイプに合わせて調整されています。

TIP
SDF 関数を簡単に再利用するには、新しいSubstance関数グラフにコピーし、そのグラフを3Dビューアとシェイプスプラッタv2ノードの両方で​ インスタンスノード ​として使用します。
これには、次のような利点があります。
  • 関数に対して行った更新は、両方のノードに反映されます。コピー&ペーストの必要はありません。 これは、複雑なシェイプのQOLを大幅に改善したものです。
  • グラフには、インスタンスノードに表示される説明的な名前を付けることができます。これにより、独自のSDFシェイプのライブラリを使用する方がはるかに管理しやすく、グラフを読みやすくすることができます。
  • Getノードで使用できる関数グラフの入力を作成できます。 これらの入力は、インスタンスノードで入力コネクタとして公開され、シェイプのバリエーションを簡単に作成できます。

マテリアル ID

SDF図形にはマテリアルIDを割り当てることができます。マテリアルIDは整数値で、図形の一部を区別したり、3Dビューアおよびシェイプスプラッタv2のノードでSDF図形に異なるマテリアルを割り当てたりするのに使用できます。

以下の例に示すように、異なるマテリアルIDを持つサーフェスは、ブレンドされたシェイプを横切るようにハードエッジで分割されます。

特定のマテリアルIDを使用してタグ付けする図形の部分の後にマテリアルIDの設定ノードを使用し、Integer定数ノードを使用して、必要なマテリアルID値を設定します。
3Dビューアーノードで、Output​パラメーターをMaterial IDに設定して、図形のマテリアルIDを表示します。

working-with-sdf-material-id.png
右側では、2つの3Dビューアーノードの出力が合成され、シェイプ(左)とそのマテリアルID (右)が表示されます。これにより、ブレンドしたシェイプで、マテリアルIDを分割している間にマテリアルがどのように補間されるかが示されます。

マテリアルIDは、Shape splatter v2コンパニオンノードで活用できます。

シェイプスプラッタv2マッパカラーノードでのカラーマッピング用のSDFマテリアルID。 カラーマッピングに使用されるマテリアル ID
図形スプラッタv2マッパーの色
Shape splatter v2マッパーのカラーノードでの三平面マッピングのSDF マテリアル ID。 三平面マッピングに使用されたマテリアル ID
図形スプラッタv2マッパーカラー
シェイプスプラッタv2でマスクを行うSDF マテリアル IDをマスクノードに変換します。
シェイプスプラッタv2でマスクに
マスクに使用されたマテリアル ID

カラー、ラフネス、メタネス

色の設定、ラフネスの設定、およびメタネスの設定ノードを使用すると、SDF 関数内の図形に対してこれらのマテリアル属性を定義できます。

その後、そのSDF 関数をShape splatter v2ノードでシェイプの種類として使用する場合、これらのマテリアル属性は、ノードの​SDFカラー、SDF ラフネス​および​ SDFメタネス ​出力でマップとして使用できます。 これらのマップは、他のノードを使用する、より複雑なマテリアル作業のベースとして使用できます。

以下の例に示すように、マテリアル IDとは異なり、値はブレンドされたシェイプ間でグラデーションとして​ 補間 ​されます。

シェイプスプラッタv2ノードのSDFカラー出力。 SDFカラー出力
シェイプスプラッタv2ノードのSDFラフネス。
SDFラフネス出力
シェイプスプラッタv2ノードのSDFメタネス。 SDFメタネス出力

マテリアルサンプル

錆びたボルト マテリアルサンプルを使用すると、シェイプスプラッタv2ノードのコンテキストで適用されたSDF 関数にジャンプできます。

グラフの構造、ノード設定、およびSDF 関数設定をガイドするように、ノードが整理され、注釈が付けられています。

また、完全に編集可能であるため、サンドボックスとして使用して、シェイプスプラッタv2とSDF 関数ツールセットについて実践的に理解することができます。 サンプルグラフは好きなだけ作れるので、自由に試してみてください。

3Dビューアノードのバウンディングフレーム機能(SDF 関数用)。
recommendation-more-help
substance-3d-designer-help-guide