ブール演算合成オブジェクト

ブール演算オブジェクトは、2 つのオブジェクトにブール演算操作を実行して、それらのオブジェクトを結合します。

ヒント: ProBoolean は、強化された、最新型のブール演算合成オブジェクトのより完全な実装です。一般的に、3D オブジェクトを結合する際は、Boolean より ProBoolean を使用することをお勧めします。

オペランド A (左)、オペランド B (右)

ジオメトリ用のブール演算操作の結果です。

ブール演算オブジェクトは、元の 2 つのオブジェクトを合わせたボリュームを持つオブジェクトになります。ジオメトリの交差する部分または重なり合う部分は取り除かれます。

交差

ブール演算オブジェクトは、元の 2 つのオブジェクトに共通していた(重なり合っていた)ボリュームだけを持つオブジェクトになります。

ブール演算オブジェクトは、交差しているボリュームを削除した一方のオリジナル オブジェクトのボリュームを含みます。

2 つのオリジナルのオブジェクトがオペランド A およびオペランド B として指定されます。

ブール演算をスタック表示に積んで、単一のオブジェクトが多数のブール演算を組み込めるようにします。スタック表示へ移動することで、各ブール演算のコンポーネントに再度アクセスして変更を加えることができます。

差: A-B(上)、B-A(下)

和(上)、交差(下)

マテリアルが割り当てられているオブジェクトでのブール演算

ほとんどのプリミティブでは、サーフェス上でいくつかのマテリアル ID を使用します。たとえば、ボックスはその側面で 1 ~ 6 のマテリアル ID を使用します。6 つのサブマテリアルとともにマルチ/サブオブジェクト マテリアルを割り当てる場合は、各側面に 1 つのマテリアルが 3ds Max によって自動的に割り当てられます。 2 つのサブマテリアルとともにマルチ/サブオブジェクト マテリアルを割り当てる場合は、3ds Max によって最初のマテリアルが 1、3、5 の側面に、2 番目のマテリアルが 2、4、6 の側面に割り当てられます。

マテリアルが割り当てられているオブジェクトからブール演算を作成する場合、3ds Max では次のようにしてマテリアルが結合されます。

詳細については、[マテリアル アタッチ オプション](Material Attach Options)ダイアログ ボックスを参照してください。

ブール演算の使用時の問題の解決方法

旧リリースでは、ブール演算アルゴリズムにより、予測できない動作が起こることがありました。その解決方法を次に示します。

サーフェス トポロジ

ブール演算では、オペランドのサーフェス トポロジが完全な状態(面が欠けたり重なっている部分がなく、頂点も連結されていない)でなければなりません。また、サーフェスは、連続する 1 つの閉じたサーフェスであることが必要です。

ブール演算では、この要件を満たさないオペランドがあると、自動的に補正します。ただし、自動補正では必ずしも意図したとおりに補正されるとは限らないので、手動でサーフェスの補正を行った方がよい場合もあります。

ジオメトリの穴を確認するには、[STL-チェック]モディファイヤまたは[計測]ユーティリティを使用します。

穴を埋めるには、[キャップ ホール](Cap Holes)モディファイヤを使用します。

面の法線

ブール演算では、サーフェスの面の法線が矛盾していない必要があります。しかし、反転された法線が、意図せず作成されることもあります。また、同一方向を向いた複数の面に隣接する面が反転されているサーフェスにも問題があります。このような現象は、CAD プログラムから読み込まれたジオメトリで発生しがちです。ブール演算では、これらの面が最適な状態になるように修正されます。また、手動で修正した方がよい結果が得られます。

シェーディングされたビューポートを使用して、オブジェクトが裏返しに表示されたり、間違った見え方をしていないかを確認しながら、法線の問題点を探すことができます。[編集可能メッシュ](Editable Mesh)(面) [サーフェス プロパティ](Surface Properties)ロールアウト [法線](Normals)領域の[表示](Show)をオンにすることもできます。ここで法線を修正するか[法線](Normal)モディファイヤを使用します。

重複する要素

ブール演算は、メッシュの内側と外側を明確に区別して実行されるため、重複するメッシュでは、不適切な結果を生じる可能性があります。たとえば、ブール演算機能をオンにせずに、2 つの重なっているオブジェクトで[集約](Collapse)ユーティリティを使用した場合、ブール演算のオペランドとしては不適切なオブジェクトが作成されます。このことは、自己重複する[ティーポット](Teapot)プリミティブ(すべてのパーツがオン)でも問題になります。

このようなオブジェクトをブール演算のオペランドとして使用する必要がある場合、各コンポーネントに分解してから、ブール演算と組み合わせることによって、単一の重複のないメッシュとして再構築することができます。

反転メッシュの操作

ブール演算では、「反転メッシュ」(法線を反転することで裏返しにされたメッシュ)に対し理想的な結果がいつでも得られるとは限りません。問題は、反転されたメッシュの内側の領域は「外側」として正しく表示される一方で、外側の領域も「外側」として表示される場合がある点です。この問題に対処するには、メッシュを反転せずに、非常に大きなボックスまたは他のプリミティブをメッシュの中心に(ただし、接しないように)作成し、ブール演算でメッシュの減算を行います。それから、編集可能メッシュに変換して、ボックスの面を削除します。これで、ブール演算で正しく操作できる正しく反転されたメッシュが得られます。

位置合わせ

2 つのブール演算オペランドが実際には交差せずにぴったり並んでいると、ブール演算操作で不適切な結果が生じる場合があります。まれなことですが、このような事態が生じた場合は、オペランドが少し重なるようにすれば対処できます。

オペランド間の相対的な複雑さ

ブール演算は、2 つのオペランドの複雑さが同程度である場合に、最適な結果が得られます。セグメントのないボックスからテキスト(多数の面と頂点からなる複雑なオブジェクト)を減算すると、多数の細長い面が形成され、レンダリング エラーが発生する可能性が高くなります。ボックス セグメントの数を増やすと、結果が改善されます。オペランド間で、複雑さを同程度に保つようにしてみてください。

共有面および共有エッジ

以前には、ブール演算ではオブジェクトが重なっている必要がありました。2 つのオブジェクトが重ならずに、単にエッジとエッジ、または面と面が接触しているだけの場合は、ブール演算は失敗していました。

このソフトウェアでは、重ならないオブジェクトでもブール演算操作を実行できるようになりました。共有面、共有エッジ、および共有頂点は問題ではなくなりました。他のオブジェクトに完全に内包され、エッジが交差しないオブジェクトでも、ブール演算を作成することができます。

複数のオブジェクトでブール演算を作成する方法については、[集約](Collapse)ユーティリティを参照してください。

手順

ブール演算オブジェクトを作成するには:

  1. オブジェクトを 選択します。このオブジェクトがオペランド A になります。
  2. [作成](Create)パネル/[ジオメトリ](Geometry)/[合成オブジェクト](Compound Objects)/[オブジェクト タイプ](Object Types)ロールアウト/[ブール演算](Boolean)ボタンをクリックします。[パラメータ](Parameters)ロールアウトにあるオペランドリストに、オペランド A の名前が表示されます。
  3. [ブール演算を選択](Pick Boolean)ロールアウトで、オペランド B のコピー方法を選択します([参照](Reference)、[移動](Move)、[コピー](Copy)、[インスタンス](Instance)から選択できます)。選択方法については、次のトピック「[ブール演算を選択](Pick Boolean)ロールアウト」の項を参照してください。
  4. [パラメータ](Parameters)ロールアウトで、実行するブール演算を選択します([和](Union)、[交差](Intersection)、[減算(A-B)](Subtraction (A-B))、[減算(B-A)](Subtraction (B-A))から選択できます)。また、後の「[操作](Operation)領域」の項で説明する、[カット](Cut)操作の 1 つを選択できます。
  5. [ブール演算を選択](Pick Boolean)ロールアウトで、[オペランド B を選択](Pick Operand B)をクリックします。
  6. ビューポート内でクリックしてオペランド B を選択します。ブール演算操作が実行されます。3ds Max

    オペランドのオブジェクトは、ブール演算オブジェクトのサブオブジェクトとして残ります。ブール演算のオペランド サブオブジェクトの作成パラメータを修正すると、オブジェクト作成後でもオペランドのジオメトリを調整してブール演算の結果を変更したりアニメートしたりできます。

例: 複数のブール演算を含む単一のオブジェクトを作成、修正するには:

    2 つの穴があるボックスを作成する場合について考えます。1 つの穴は球オブジェクトを使用し、もう 1 つの穴は円柱オブジェクトを使用して切り取ります。球オブジェクトまたは円柱オブジェクトに変更を加えるには、次の手順を実行します。

  1. 前の項の手順に従って、ブール演算を作成します。オリジナルのオブジェクト(ボックス)がブール演算に変換され、オペランド A と指定されます。2 番目のオブジェクト(球)はオペランド B に変換されます。
  2. ブール演算オブジェクトの選択を解除します。円柱オブジェクトがなければ、ここで作成します。
  3. ブール演算オブジェクトを 選択し、[合成オブジェクト](Compound Objects)にある[ブール演算](Boolean)ボタンを再びクリックします。
  4. [オペランド B を選択](Pick Operand B)ボタンをクリックして、ビューポートの円柱オブジェクトをクリックします。オペランド Bに変換されます。
  5. [修正](Modify)パネルで、[パラメータ](Parameters)ロールアウト オペランド リストから[オペランド B](Operand B)を選択します。オペランド B を表示する場合は、[表示/更新](Display/Update)ロールアウト [表示](Display)領域 [オペランド](Operands)または[結果 + 非表示のオペランド](Result + Hidden Ops)を選択します。

    円柱または円柱のパラメータをアニメートする場合、モディファイヤ スタック表示でアクセスできるようになりました。

  6. 球オブジェクトのパラメータを修正する場合は、オペランド リストから球オブジェクトを選択します。
  7. これで、ブール演算の名前が付いたエントリがスタック表示に 2 つできました。下側のエントリを選択します。球オブジェクトがオペランド リストに表示されます。
  8. オペランド リストから[球](Sphere)を選択します。球オブジェクトのパラメータを使用するには、モディファイヤ スタック表示で球オブジェクトの名前をクリックします。
  9. この方法を使用すると、複数のブール演算で、オペランドのパラメータを変更したり、オペランドをアニメートしたりできます。

更に、トラック ビューで複数のブール演算を操作することもできます。トラック ビューでオペランドをクリックすると、モディファイヤ スタック表示内のエントリに直接アクセスできるようになります。多数のブール演算を含む複雑なオブジェクトでは、これは前述のものよりも簡単な方法といえます。

インタフェース

[ブール演算を選択](Pick Boolean)ロールアウト

オペランド B を選択するときに、ブール演算オブジェクトの[ブール演算を選択](Pick Boolean)ロールアウトにある選択項目に応じて、[参照](Reference)、[移動](Move)(オブジェクト自体を移動)、[コピー](Copy)、または[インスタンス](Instance)を指定します。ブール演算を作成した後で、シーンのジオメトリをどのように使用するかによって選択します。

通常、ブール演算オブジェクトは、重なり合っているオブジェクトから作成するため、オペランド B が削除されていない(既定の[移動](Move)オプションを使用していない)場合、オペランド B によりブール演算オブジェクトの一部が隠れてしまうか、ブール演算オブジェクトによりオペランド B の一部が隠れてしまうことがあります。更に、ブール演算オブジェクトまたは B オブジェクトを移動して、ブール演算の結果を確認しやすくすることもできます。

オペランド B を選択

このボタンを使用して、ブール演算を完了するのに使用する 2 番目のオブジェクトを選択します。

[参照](Reference)、[コピー](Copy)、[移動](Move)、[インスタンス](Instance)

オペランド B を論理演算オブジェクトに転送する方法を指定します。参照、コピー、インスタンス、または移動のいずれかとして転送することができます。

  • [参照](Reference)を使用して、モディファイヤによって生じたオリジナルのオブジェクトへの変更をオペランド B に同期させることができます。ただし、逆方向に同期させることはできません。
  • シーン内で他の目的のためにオペランド B のジオメトリを再利用するときに、[コピー](Copy)を使用します。
  • [インスタンス](Instance)を使用すると、ブール演算オブジェクトのアニメーションと元の B オブジェクトへのアニメートされた変更の同期をとることができます。
  • ブール演算を作成するためだけにオペランド B のジオメトリを作成し、他では使用しない場合は、[移動](Move)(既定値)を選択します。

    使用する方法に関係なく、オブジェクト B のジオメトリは、ブール演算オブジェクトの一部になります。

[パラメータ](Parameters)ロールアウト

[オペランド](Operands)領域
オペランドのリスト
現在のオペランドを表示します。
名前
この編集ボックスでオペランド名を変更できます。オペランド リストでオペランドを選択すると、そのオブジェクトの名前がこの編集ボックスに表示されます。
オペランドを抽出
選択されたオペランドのコピーまたはインスタンスを抽出します。リスト ウィンドウ内でオペランドを 1 つ選択すると、このボタンが使用可能になります。
注: このボタンは[修正](Modify)パネルでのみ使用できます。[作成](Create)パネルがアクティブになっている間は、オペランドを抽出できません。
[インスタンス](Instance)、[コピー](Copy)
オペランドを抽出する方法としてインスタンスまたはコピーを指定します。
[操作](Operation)領域
  • ブール演算オブジェクトは、元の 2 つのオブジェクトを合わせたボリュームを持つオブジェクトになります。 ジオメトリの交差する部分または重なり合う部分は取り除かれます。
  • 交差ブール演算オブジェクトは、元の 2 つのオブジェクトに共通していた(重なり合っていた)ボリュームだけを持つオブジェクトになります。
  • 減算 (A-B)オペランド B の交差ボリュームをオペランド A から減算します。ブール演算オブジェクトには、交差ボリュームが減算されたオペランド A のボリュームが含まれます。
  • 減算 (B-A)オペランド A の交差ボリュームをオペランド B から減算します。ブール演算オブジェクトには、交差ボリュームが減算されたオペランド B のボリュームが含まれます。
  • [カット](Cut)オペランド A をオペランド B で切り取りますが、オペランド B からメッシュには何も追加しません。これは、[スライス](Slice)モディファイヤと似た機能ですが、平面ギズモを使用する代わりに、[カット](Cut)では切断面としてオペランド B のシェイプを使用します。 [カット](Cut)では、ブール演算オブジェクトのジオメトリを、閉じた塗り潰し領域ではなくボリュームとして取り扱います。[カット](Cut)は、オペランド B からオペランド A にジオメトリを追加しません。オペランド B の交差は、オペランド A のジオメトリを変更するため、切断領域を定義します。

    [カット](Cut)には、次の 4 種類があります。

    • リファインオペランド B がオペランド A の面と交差するオペランド A 内の位置に新しい頂点とエッジを追加します。3ds Max では、オペランド B の交差領域の内側に面を追加して、取得したオペランド A のジオメトリをリファインします。交差によって切り取られた面はいくつかの新しい面に分割されます。 このオプションを使用して、別々のマテリアル ID をオブジェクトに割り当てられるように、テキストでボックスをリファインできます。
    • [分割](Split) [リファイン](Refine)と同様の動作をしますが、更にオペランド B がオペランド A を切り取る境界線に沿って、もう 1 セットの頂点とエッジ、またはダブル セットの頂点とエッジを追加します。[分割](Split)により、同じメッシュに属する 2 つの要素が得られます。[分割](Split)を使用することで、オブジェクトを他方のオブジェクトの境界に沿って 2 つのパーツに分割できます。
    • 内側を除去オペランド B の内側のすべてのオペランド A 面を削除します。このオプションにより、オペランド B と交差する領域の内側にあるオペランド A の面が修正され、削除されます。3ds Max ではオペランド B から面を追加しないという点を除き、これは減算オプションと同様の動作をします。ジオメトリから特定の領域を削除するには、[内側を除去](Remove Inside)を使用します。
    • 外側を除去オペランド B の外側のすべてのオペランド A 面を削除します。このオプションにより、オペランド B と交差する領域の外側にあるオペランド A の面が修正、削除されます。3ds Max ではオペランド B から面を追加しないという点を除き、これは交差オプションと同様の動作をします。ジオメトリから特定の領域を削除するには、[除去](Remove)を使用します。

[表示/更新](Display/Update)ロールアウト

[表示](Display)領域

ブール演算の結果を視覚化するのは少し困難な作業です。操作の後で修正を加えたり、アニメートしたりする場合などは、特に手間がかかります。[表示/更新](Display/Update)ロールアウトの[表示](Display)領域を使用して、ブール演算の構成方法を視覚化できます。

ブール演算を作成するまでは、この表示コントロールは影響を与えません。

  • [結果](Result) ブール演算操作の結果、つまりブール演算オブジェクト自体を表示します。
  • [オペランド](Operands) ブール演算の結果の代わりにオペランドを表示します。
    ヒント: オペランドをビューポートで確認するのが難しい場合は、オペランドリストを使用して、いずれかのオペランドを選択することができます。選択を行うには、オペランド A またはオペランド B の名前をクリックします。
  • [結果 + 非表示のオペランド](Results + Hidden Ops) 「非表示の」オペランドをワイヤフレームとして表示します。

    オペランドのジオメトリは、表示またはレンダリングされませんが、合成ブール演算オブジェクトの一部として残ります。オペランド ジオメトリは、すべてのビューポート内でワイヤフレームとして表示されます。

オペランドの表示

結果(A-B)の表示

A-B 後の非表示のオペランドの表示

B-A 後の非表示のオペランドの表示

[更新](Update)領域

既定値では、オペランドを変更すると常に、ブール演算オブジェクトが更新されます。シーンにアニメートされた複雑なブール演算が 1 つ以上含まれていると、パフォーマンスが低下する場合があります。[更新](Update)領域のオプションを使用すると、パフォーマンスを改善する代替手段が指定できます。

  • [常時](Always) インスタンス化または参照されたオリジナルのオペランド B オブジェクトを含め、オペランドの変更後すぐに、ブール演算オブジェクトを更新します。既定値は、この設定です。
  • [レンダリング時](When Rendering) シーンがレンダリングされるか、[更新](Update)をクリックしたときのみ、ブール演算オブジェクトを更新します。このオプションを使用しても、ビューポートに現在のジオメトリが常に表示されるわけではありませんが、必要に応じて更新を実行することができます。
  • [手動](Manually) [更新](Update)ボタンがクリックされたときのみ、ブール演算オブジェクトを更新します。このオプションを使用しても、ビューポートとレンダリング出力に現在のジオメトリが常に表示されるわけではありませんが、必要に応じて更新を実行することができます。
更新

ブール演算オブジェクトを更新します。[常時](Always)が選択されていると、[更新](Update)ボタンは使用できません。