On this page | |
Since | 16.0 |
概要 ¶
このノードは、 Operation パラメータに応じて色々な機能を実行することができます。
一般的な操作は以下のとおりです:
-
2つの“ソリッド”モデル間の ブーリアン 演算(加算、交差、減算):
-
切断サーフェスによるソリッドモデルの 粉砕 :
いくつもの複雑な切断サーフェスを使って粉砕することができるので、自然な感じで芸術的に破壊を制御することができます。
//
-
2つのモデルが交差した 継ぎ目 に沿ったポリラインの生成。
-
交差を 検出 して、交差しているポリゴンをグループに格納。
入力モデルを“ソリッド”(モデルサーフェスを中身が詰まったものとして扱います)または“サーフェス”(モデルサーフェスを平坦な平面のように扱います)として指定することができます。
ブーリアン演算 ¶
以下の画像の“粉砕”の例では、分解された破片をはっきりとさせるためにExploded Viewノードを使用しています。
ソリッド/ソリッドのブーリアン演算 ¶
Before |
ソリッド間のブーリアン演算を説明するために、単純にオフセットした2つのボックスを使用します。 |
Union |
2つの入力ボリュームを結合して閉じた新しいソリッドを作成します。 |
Intersect |
2つの入力ボリュームの交差部分を閉じた新しいソリッドを作成します。 |
Subtract |
入力ボリュームから別の入力ボリュームを除算します。 |
Shatter |
IntersectとSubtractの組み合わせのようなものです。ソリッドの表面との交差に沿ってカットして、そこから新しい形状を抽出します。 |
Seam |
2つのソリッドの表面の交差からポリラインを出力します。 |
ソリッド/サーフェスのブーリアン演算 ¶
Before |
ソリッドとサーフェス間のブーリアン演算を説明するために、単純なボックスとコーナーのサーフェスを使用します。 |
Union |
ソリッドのボリュームの外側にあるサーフェス部分を基準とした 両面の壁 でソリッドを分けます。 Note 開いたサーフェスは両面の壁になります。これは“体積がゼロのソリッド”と考えることができるので、ポイントが重なっていると見なされます。 右側の画像で言うと、立方体の外側の“コーナー”の部分が両面の壁となり、各コーナーでポイントが重複していると見なされます(以下の概略図を参照)。 このノードがソリッドとサーフェス間で相互作用させる方法を考えると、これが論理的に整合性の取れた結果であるとわかりますが、あなたがこのノードがそこまでできると期待していなかったら驚くんじゃないでしょうか。 あなたがやりたいブーリアン演算に対してサーフェスを使用することができますが、一般的には、この演算はあまり使用しません。 |
Intersect |
ソリッドの外側にあるサーフェス部分を削除します。 |
Subtract |
ソリッドからサーフェスを減算することで、そのソリッドとそのサーフェスの交差箇所に 両面の壁 を作成し、それを使ってソリッドを分断させます。 サーフェスがソリッドを“完全に横切っている”場合、そのサーフェスは、まさに粉砕に使用することができ、そのサーフェスがソリッドを別々の破片に分断します。 しかし、(右側のように)サーフェスがソリッドと完全に交差していない場合は、そのサーフェスはソリッドからゼロ幅の形状を“切り取り”、各コーナーでポイントが重複した両面の壁を残します(以下の概略図を参照)。 サーフェスからソリッドを減算することで、そのソリッドの内側にあるサーフェス部分を削除します。 |
Shatter |
IntersectとSubtractの組み合わせのようなものです。その交差から新しい形状を抽出します。 サーフェスがソリッドを“完全に横切っている”場合、そのサーフェスは、ソリッドを別々の破片に分断します。 しかし、サーフェスがソリッドと完全に交差していない場合は、そのサーフェスはソリッドからゼロ幅の形状を“切り取り”、各コーナーでポイントが重複した両面の壁を残します(以下の概略図を参照)。 |
Seam |
サーフェスとソリッドの交差からポリラインを出力します。 |
サーフェス/サーフェスのブーリアン演算 ¶
Before |
サーフェス間のブーリアン演算を説明するために、2つのコーナー形状を使用します。この2つの形状は、サーフェスが交差(底面)しているだけでなく、重複(奥側の面)もしています。 |
Union |
重複面を結合し、2つのサーフェスの交差部分を結合します。 |
Intersect |
重複面のみを維持します。 |
Subtract |
重複面を削除し、交差に沿って両面切断します。 |
Shatter |
IntersectとSubtractの組み合わせのようなものです。交差を切断し、同一面を新しい形状として維持します。 |
Seam |
同一面からポリゴンを出力し、サーフェス交差からポリラインを出力します。 |
概略図 ¶
以下のテーブルでは、色々な演算について説明した概略図を載せています。この概略図は、ビューポートでは見えない色々な出力の側面をわかりやすくしています。 両面の壁は、厚みを付けて表現し、複数接続のポイントをドットで表現しています。
Solid/Solid |
Surface/Surface |
Solid/Surface |
|
---|---|---|---|
Union |
|
|
|
Intersect |
|
|
|
A - B |
|
|
|
B - A |
|
|
|
Shatter |
|
|
|
Custom ¶
“重複”サーフェスまたは“同心”サーフェス(例えば、ボックスの中のボックス、自己交差のあるジオメトリ)を持つソリッドモデルに関しては、“Custom”演算を使用することで、(片方または両方の入力を基準に)指定した“Depth”のソリッド領域だけを抽出することができます。
ソリッド内のポイントの“Depth”とは、モデルの外側に出るために交差しなければならないサーフェスの最小数のことです。
この図では、3つの同心円ボックス(灰色)のモデルと単一レベルのボックス(緑)を組み合わせています。
この図の番号は、各ボリュームの“Depth”を表わしています。そのため、Custom範囲を4-9999
に設定すると、その中心の暗い灰色の正方形のみが出力されます。
この図では、単一モデルの2箇所に自己交差があり、それが内部で入れ子の空間が作成されています。Custom範囲を2-9999
に設定すると、明るい灰色の部分が削除され、暗い灰色のボックスが残ります。
Custom演算は、このような空間から“外側の層”を削除して内側の層を取得するのに役立ちます。
Detect ¶
Resolve ¶
このモードは、内部テストに使用し、四面体化できるか簡単にチェックする時以外は通常ではおそらく使用しません。 このモードは、このノードのアルゴリズムの中間過程で生成されたそのままの三角形化されたメッシュを出力します。このメッシュは、すべてのポリゴンをサーフェスとして結合したものと同等です。 これらのポリゴンの向きは整合性が取れていないことがあります。
ヒントとメモ ¶
-
パラメータエディタで、入力が“Solid”なのか“Surface”(ゼロ幅)なのかを指定します。入力を“Solid”に指定する場合は、その入力が 良い ソリッドでなければなりません。
-
一般的に、ソリッドは閉じていて密閉された状態にしてください(以下参照)。
-
ソリッドの すべての法線方向が外側 を向いている状態にしてください(整合性の取れたポリゴンの周回方向)。ビューポートで法線の表示を有効にすることで、反転ポリゴンや重複ポリゴンをチェックすることができます。
-
ソリッドに ノンマニフォールド (非多様体)のエッジがないようにしてください(つまり、T字接続のように3つ以上のポリゴンで共有されたエッジがないようにしてください)。
このノードは、ノンマニフォールドエッジまたは不整合な法線に遭遇しても、ジオメトリを なんとか処理 しますが、あなたが求めている結果にならないことがあります(これらの問題は、アルゴリズムに“内側”と“外側”の判断を誤らせてしまいます)。そのような場合、このノードは曖昧さが発生したことについて警告を表示します。ノードの情報ウィンドウでその警告を読むことができます。この警告には、問題のあるポリゴンが指定されたグループが含まれています。
-
-
開いたサーフェスが論理的矛盾を生じない限り、その開いたサーフェスをソリッドとして使用することができます。例えば、ソリッドとして扱われるメッシュの非共有エッジは、そのソリッドの内側または他のソリッドと交差することができません。
開いたサーフェスをソリッドとして使用して不整合が発生すると、このノードは、その問題の境界エッジを赤くハイライトします。
-
このノードがアクティブな時のガイドの可視化を無効にすることができます。ビューポート内で右クリックまたはオペレーションツールバー(ビューアの上部)の左側にあるBooleanアイコンをクリックし、そのメニューから可視化オプションを無効にします。
-
ブーリアン演算の後の接続性を可視化する方法がいくつかあります:
-
ビューポートでSelectツールと一緒にグループリストを使用することで、非接続箇所の上にマウスカーソルを置くと、そこがハイライトします。この方法ならネットワークを変更する必要がありません。
-
Assembleノードを使って、非接続のピース毎に共通の
name
アトリビュート値を与えてから、Colorノードまたはカラービジュアライザで“Random color by attribute”オプションを使って、そのname
値に基づいてポリゴンに色を付けます: -
Exploded Viewノードを使って、パーツをお互いに引き離します。
-
-
2つのポリゴンジオメトリをこのノードの2つの入力に接続、または、1つの入力を接続してSet A Group と Set B Group パラメータを使ってグループ別に操作することができます。
入力を1つだけ接続して、Set AとSet Bのグループを空っぽのままにすると、そのブーリアン演算は、そのモデル 自体 に適用されます。 これを利用してShatterを使用すれば、自己交差に基づいてモデルを分離させることができます。他のブーリアン演算も論理的に整合性が取れます(UnionとIntersectはすべてを通過させ、Subtractはすべてを削除します)がまったく意味がありません。
-
このノードでは、Point/Vertexアトリビュートは 補間 され、Primitiveアトリビュートは コピー されます。
-
このノードで美的な目的のために2つのモデルのエッジを整列させようとする事は通常では何の意味もありません。例えば、球の赤道線上に切断平面を 正確に 配置しようとする事がそれです。微小な数値精度誤差が原因で、たとえズームしてそれらの2つのエッジが整列しているように見えても、技術的には、コンピュータによってはエッジ間に隙間が出ます。このような不整列によって発生した微小なポリゴンは、ブーリアンで自動的にクリーンアップされます。
-
このノードの可視化の赤いドットは、その結果の微小なポリゴンなどの問題のある領域を示します。
-
非常に複雑なプロシージャルなブーリアン、例えば、(視覚的なモデリングに対してブーリアンを使用するのとは対照的に)非常に細かく作り込まれたサーフェスとのブーリアンや距離が離れているサーフェス間のブーリアンをする場合、でブーリアン結果に微小な自己交差が発生することがあるので、他のBooleanノードの後にBooleanノードを追加すると予期しない結果を招く可能性があります。
この場合、上流のBooleanノードの Assume seam polygons are flat を無効にしてみてください。それが動作しないようでしたら、 Detriangulate を“Only unchanged polygons”に設定してください。 これらの設定は、出力結果に多くの三角形を残してしまいますが、その自己交差を修復することができます。
精度問題
浮動小数点精度の問題が原因で、三角形以外のポリゴンは技術的には(ポリゴンを軸上に乗せない限り)ほとんど平面になることはないので、まず最初に、このノードは入力ジオメトリを三角形化して、それらが完全に平坦なポリゴンになるようにします。その次に、( Detriangulate を“No polygons”に設定しない限り)その三角形に分割されたポリゴンを“元に戻し”ます。
この三角形化によって、実際の目的を果たすために途中で“平坦な”ポリゴンに折り目を生成し、その出力の三角形を元に戻すので、その結果のポリゴンにはその折り目があった箇所に余計なポイントが追加されます。 これでは、そのポリゴンが扱いにくくなります。そのため、 Assume seam polygons are flat を有効にすれば、このノードはその余計なポイントも削除します。
この浮動小数点精度の問題は、このBooleanノードは、任意の精度のジオメトリのポイントをより低いハードウェアの浮動小数点値に“合わせる”必要があるので、出力を生成する時にそのBooleanノードが任意の精度で内部的に動作していることです。 このため、任意の精度では別々だったポイントが、浮動小数点精度では重複したポイントとなってしまうので、非常に小さな自己交差が作成されてしまいます。 特にこれは、 Assume seam polygons are flat が有効な時にBooleanノードが“実用的に平坦な”ポリゴン上のポイントを削除する時がそうです。
パラメータ ¶
Group
1番目の入力のサブセットを“A”オブジェクトとして使用します。
Treat As
このジオメトリをソリッドオブジェクトの境界と見なすか、または、内側も外側もない平坦なサーフェスと見なすかどうかを指定します。
Resolve Self-intersections
モデルに交差や重複したサーフェスがあった場合、自動的にそれを修復します。いくつかの演算には交差のないジオメトリが必要になるので、この設定をそのまま有効にします。
Group
2番目の入力のサブセットを“B”オブジェクトとして使用します。入力が1つしか接続されていない場合、これは代わりに1番目の入力のグループを参照します。これによって、同じジオメトリから2つのグループを操作することができます。
Treat As
このジオメトリをソリッドオブジェクトの境界と見なすか、または、内側も外側もない平坦なサーフェスと見なすかどうかを指定します。
Resolve Self-intersections
モデルに交差や重複したサーフェスがあった場合、自動的にそれを修復します。いくつかの演算には交差のないジオメトリが必要になるので、この設定をそのまま有効にします。
Operation
入力の組み合わせ/修正の方法。上記の演算を参照してください。
Operation がブーリアン演算(Union, Intersect, Subtract, Shatter)の時は、以下のパラメータが表示されます。
Detriangulate
このノードは、内部的に入力ジオメトリを三角形に変換します。これは、出力する時にその三角形化したジオメトリを元のジオメトリに合うようにN角形のポリゴンに戻すかどうかを制御します。
All Polygons
同じ入力ポリゴンから生成された隣接三角形をまとめて結合します。
Only Unchanged Polygons
入力ポリゴンが演算の結果としてカットされている場合、その部分を三角形のまま維持します。それ以外の部分は三角形化されたポリゴンを元に戻します。
No Polygons
三角形化されたジオメトリを出力します。
Assume Seam Polygons Are Flat
ほとんどの“平坦な”ポリゴンは、浮動小数点精度の問題が原因で技術的には平坦ではありません。 これは、三角形化された出力結果を元に戻す時にそのような問題による違いを無視します。 ほとんどのケースでは、デフォルト(有効)で良いですが、非常に細かく作り込まれたサーフェス/距離が離れているサーフェスのジオメトリに対してプロシージャルなブーリアンをする場合には、これを無効にしたいことがあります。 これを無効にすることで、その出力結果には多くの三角形が残ります。
詳細は、上記のヒントとメモを参照してください。
Unique Points Along Seams
出力するサーフェスを継ぎ目に沿って別々のポリゴンに分けます。その継ぎ目を境とする両側の各ポリゴンには、それぞれ独自に継ぎ目のポイントがコピーされます。 これを使用することで、出力時にその継ぎ目のPointアトリビュートをブレンドしないようにすることができます。
Collapse Tiny Seam-Adjacent Edges
2つのモデルを組み合わせる時にそれらのモデルのエッジを非常に厳しく整列させたとしても、微小な数値精度誤差によって(通常では)それらのエッジは微小ながら整列しなくなってしまうので、出力結果に余計なエッジが発生します。 このオプションを有効にすると、このノードは、それらの微小エッジを自動的に結合します。そのため、なにかしらの理由で微小ポリゴンを本当に必要とする場合を除き、これを無効にするべきではありません。
Edge Length Threshold
Collapse Tiny Seam-Adjacent Edges が有効な時、この長さ以下のエッジが出力結果で自動的に結合されます。
Operation が“Custom”の時は、以下のパラメータが表示されます。
A Depth Min/Max
生成する結果に対するAの深度の範囲。 例えば1..1000の範囲にすると、Aの内側が網羅されます(1000は単なる最大の上限です)。 -1000..0の範囲にすると、Aの外側が網羅されます。 1..1の範囲にすると、多階層の深さにある領域を除外したAの内側が網羅されます。
B Depth Min/Max
A Depthと同様ですが、それがBに対して処理されます。
Output Pieces Matching
ピースの生成に必要な範囲を、AとBの両方または片方に対して指定した範囲に合わせなければならないかどうかを指定します。
Merge Adjacent Pieces
トグルがオンの時、例えば指定した範囲内で1つずつA深度が変わっていく度に、壁を共有して生成されたソリッドピースが別々のソリッドとして生成するのではなく、単一のソリッド結果に結合されていきます。
Operation が“Seam”の時は、以下のパラメータが表示されます。
Generate A-A seams
Aの自己交差の継ぎ目を表現したポリラインを出力します。
Generate B-B seams
Bの自己交差の継ぎ目を表現したポリラインを出力します。
Generate A-B seams
AとBの交差の継ぎ目を表現したポリラインを出力します。
Operation が“Detect”の時は、以下のパラメータが表示されます。
AxA Polygons
Aの自己交差に関係しているポリゴンを含んだグループを出力に作成します。
AxB Polygons
Bと交差しているAのポリゴンを含んだグループを出力に作成します。
AxA List
Aポリゴン上にそのポリゴンと交差したAのプリミティブ番号の配列を含んだ アトリビュート を作成します。
AxB List
Aポリゴン上にそのポリゴンと交差したBのプリミティブ番号の配列を含んだ アトリビュート を作成します。
出力ジオメトリにグループを作成するには、そのグループの隣のチェックボックスを有効にします。
このノードは、ブーリアン演算(Union, Intersect, Subtract, Shatter, Custom)のグループだけを作成します。
A inside B
B内のAのポリゴンを含んだグループを作成します。
A outside B
B外のAのポリゴンを含んだグループを作成します。
B inside A
A内のBのポリゴンを含んだグループを作成します。
B outside A
A外のBのポリゴンを含んだグループを作成します。
出力ジオメトリにグループを作成するには、そのグループの隣のチェックボックスを有効にします。
このノードは、 Operation が“Detect”または“Resolve”の時にはエッジグループを出力しません。
A-A seams
Aの自己交差の継ぎ目を表現したエッジを含んだグループを作成します。
B-B seams
Bの自己交差の継ぎ目を表現したエッジを含んだグループを作成します。
A-B seams
AとBの交差の継ぎ目を表現したエッジを含んだグループを作成します。
See also |