スポンサーリンク

Blender: ブーリアン(Boolean)が失敗する原因について

Blenderでブーリアン(Boolean)を使用するときの失敗の原因(うまくできない原因)と対処法についてまとめてみました。

1 法線(Normal)が逆になっているメッシュを使用している場合

画像1のような立方体と円柱を使用してブーリアン(Boolean)の差分(Difference)を行なう場合を例とします。

blender boolean

画像1

面の向き(Face Orientation)を使用して法線(Normal)を確認すると、画像2のように円柱の一方は法線(Normal)が逆になっています。

blender boolean

画像2

このままブーリアン(Boolean)を実行すると、画像3のように法線(Normal)が逆になっている円柱の方はブーリアン(Boolean)に失敗してしまいます。

blender boolean

画像3

ブーリアン(Boolean)とメッシュの法線(Normal)については「補足」に書いたように失敗する(または成功する)条件は色々ありますが、メッシュは常に表向きにするということに気をつければ失敗は回避できます。

画像2で使用している面の向き(Face Orientation)については下記の記事で紹介しています。

Blender: 面の向き(Face Orientation)で法線を確認する方法
Blenderの面の向き(Face orientation)という機能を使用して、法線の向きを確認する方法について、1. Face orientationの使用方法、2. その他の法線の向きを確認する方法という順番で紹介をしてきます。※この記事で使用しているのはBlender 2.80です。

2 埋もれた面(Interior Faces)があるメッシュを使用している場合

画像4のような立方体と円柱を使用してブーリアン(Boolean)の差分(Difference)を行なう場合を例とします。

blender boolean

画像4

画像5のように円柱の中央部には埋もれた面(Interior Faces)(画像5の選択した部分)があります。

blender boolean

画像5

このままブーリアン(Boolean)を実行すると、画像6のように埋もれた面(Interior Faces)の部分が残ってしまいます。

blender boolean

画像6

ブーリアン(Boolean)と埋もれた面(Interior Faces)についても「補足」に書いたように失敗する(または成功する)条件は色々ありますが、埋もれた面(Interior Faces)を作らないように常に気をつけておけば失敗は回避できます。

埋もれた面(Interior Faces)について詳しくは以下の記事で紹介をしています。

Blender: 埋もれた面(Interior Faces)を選択する方法
Blenderで埋もれた面(Interior Faces)を選択する方法を紹介します。埋もれた面(Interior Faces)とは、メッシュの内部に埋もれた(隠れてしまっている)面を選択することができる選択機能のひとつです。Blender Wikiの英語版では埋もれた面(Interior Faces)の説明は「Select faces where all edges have more than 2 faces.」とされていて、訳すと「辺のすべてが2つ以上の面を持つ面」となります。

3 ミラー(Mirror)を使用している場合

画像7のような半分を削除してモディファイア―(Modifier)のミラー(Mirror)を追加した立方体を使用して、

blender boolean

画像7

画像8のように円柱とブーリアン(Boolean)の差分(Difference)を行なう場合を例とします。

blender boolean

画像8

モディファイア―(Modifier)の順番が上からミラー(Mirror)→ブーリアン(Boolean)の場合には問題なくブーリアン(Boolean)は成功しますが、順番が上からブーリアン(Boolean)→ミラー(Mirror)になっていると画像9のようにブーリアン(Boolean)に失敗してしまいます。

blender boolean

画像9

ミラー(Mirror)とブーリアン(Boolean)の順番を変えてもうまくいかない場合は、ミラー(Mirror)を適用(Apply)してからブーリアン(Boolean)を追加してみてください。

また、ブーリアン(Boolean)のオブジェクト(Object)に指定するメッシュ(この場合では円柱)がミラー(Mirror)の境界線上にない場合にはブーリアン(Boolean)は問題なく成功します。

4 同じ大きさ(幅・高さ・奥行き)のメッシュを使用している場合

画像10のように同じ高さの立方体と円柱を使用してブーリアン(Boolean)の差分(Difference)を行なう場合を例とします。

blender boolean

画像10

ソルバー(Solver)を高速(Fast)でブーリアン(Boolean)を行うと、画像11のように失敗してしまいます。

blender boolean

画像11

ソルバー(Solver)を正確(Exact)にすれば画像12のように成功します。

blender boolean

画像12

ソルバー(Solver)を正確(Exact)にする方法の他に、立方体または円柱の高さを変えることでもブーリアン(Boolean)は成功するようになります。

5 その他

以下の2つはブーリアン(Boolean)の失敗/成功の条件あるいは対処法についてよくわからなかったものです。

5.1 平面のメッシュを使用している場合

画像13のような平面(Plane)とUV球を使用してブーリアン(Boolean)の差分(Difference)を行なう場合を例とします。

blender boolean

画像13

ソルバー(Solver)を正確(Exact)でブーリアン(Boolean)を行うと、画像14のように成功する場合もありますが、

blender boolean

画像14

平面(Plane)またはUV球の位置によっては画像15のように失敗する場合もあります。

blender boolean

画像15

このような場合ソルバー(Solver)を高速(Fast)にすれば、どの位置でも画像8のように成功します。

画像16のようにメッシュの一部に穴が開いているようなメッシュを使用した場合にも、平面を使用した場合と同じようにブーリアン(Boolean)が失敗することがあります。

blender boolean

画像16

画像16のようなメッシュでもソルバー(Solver)を高速(Fast)にすれば、どの位置でも成功します。

5.2 頂点が重なってしまうような場合

画像17のようなループカット(Loop Cut)で辺を追加した立方体とUV球を使用してブーリアン(Boolean)の差分(Difference)を行なう場合を例とします。

blender boolean

画像17

ソルバー(Solver)を正確(Exact)でブーリアン(Boolean)を行うと画像18のように成功しているように見えますが、ブーリアン(Boolean)を適用(Apply)して画像18の丸で囲んだ部分を編集モード(Edit Mode)で確認すると、

blender boolean

画像18

画像19のように立方体とUV球が重なった部分の頂点が2重になっています。

blender boolean

画像19

このような場合、ソルバー(Solver)を高速(Fast)にすると成功する場合もありますが失敗する場合もあるので、適用(Apply)した後に距離でマージ(Merge by Distance)またはモディファイアー(Modifier)の溶接(Weld)で重なった頂点を削除します。

頂点が重なっている場合にはベベル(Bevel)もうまくできなくなるので、上から順番にブーリアン(Boolean)→ 溶接(Weld)→ ベベル(Bevel)としてください。

頂点が重なってしまうような場合でも、メッシュの形によってはブーリアン(Boolean)を適用(Apply)後に頂点が2重にならない場合もあるようです。

6 補足

ブーリアン(Boolean)を使用するときに失敗の原因となるようなものが、
・ブーリアン(Boolean)を追加する側のメッシュにあるのか
・ブーリアン(Boolean)のオブジェクト(Object)で指定するメッシュにあるのか
・交差(Intersect)・合成(Union)・差分(Difference)のうちどれを使用しているのか
・ソルバー(Solver)が高速(Fast)と正確(Exact)のうちどちらを使用しているのか
・この記事で紹介した失敗の原因が複数重なっている
などいろいろな条件が重なって失敗する場合も逆に成功する場合もあります。

例えば法線(Normal)が逆になっているメッシュを使用した場合に関して、差分(Difference)でソルバー(Solver)を正確(Exact)にすると失敗しますが、ソルバー(Solver)を正確(Exact)のまま交差(Intersect)または合成(Union)にすると、ブーリアンは問題なく成功します。
また、ソルバー(Solver)を高速(Fast)にすると(Operand Type)法線(Normal)が裏表混ざった状態になりますがどの(Operand Type)でもブーリアン(Boolean)は成功します。

失敗または成功するパターンをすべて覚えるわけにはいかないので、法線(Normal)が逆になったり埋もれた面(Interior Faces)があったりするようなメッシュとして通常避けるべきとされているものは避けて、ソルバー(Solver)は通常は正確(Exact)を使用して、うまくいかない場合は高速(Fast)を試してみるといった感じでブーリアンの失敗はかなり減らせるはずです。

ここで紹介した失敗の原因は個人的に経験のあるものだけなので、ほかの原因もあると思います。

以上、Blenderの「ブーリアン(Boolean)が失敗する原因について」でした。


※この記事で使用しているのはBlender 3.0.0です。
※ 参考サイト: https://docs.blender.org/manual/en/latest/modeling/modifiers/generate/booleans.html

コメント

タイトルとURLをコピーしました