Blenderでブーリアン(Boolean)を使用するときの失敗の原因(うまくできない原因)と対処法についてまとめてみました。
1 法線(Normal)が逆になっているメッシュを使用している場合
画像1のような立方体と円柱を使用してブーリアン(Boolean)の差分(Difference)を行なう場合を例とします。
面の向き(Face Orientation)を使用して面の表裏を確認すると、画像2のように円柱の一方は面が裏になっています。
面の向き(Face Orientation)については下記の記事で紹介をしています。
このままブーリアン(Boolean)を実行すると、画像3のように面が裏になっている円柱の方はブーリアン(Boolean)に失敗してしまいます。
ブーリアン(Boolean)と面の表裏の関係については「補足」に書いたように失敗する(または成功する)条件は色々ありますが、メッシュの面は常に表向きにするということに気をつければこの失敗は回避できます。
2 埋もれた面(Interior Faces)があるメッシュを使用している場合
画像4のような立方体と円柱を使用してブーリアン(Boolean)の差分(Difference)を行なう場合を例とします。
画像5のように円柱の中央部には埋もれた面(Interior Faces)(画像5の選択した部分)があります。
埋もれた面(Interior Faces)について詳しくは以下の記事で紹介をしています。
このままブーリアン(Boolean)を実行すると、画像6のように埋もれた面(Interior Faces)の部分が残ってしまいます。
ブーリアン(Boolean)と埋もれた面(Interior Faces)についても「補足」に書いたように失敗する(または成功する)条件は色々ありますが、埋もれた面(Interior Faces)を作らないように常に気をつけておけば失敗は回避できます。
3 ミラー(Mirror)を使用している場合
画像7のような半分を削除してモディファイア―(Modifier)のミラー(Mirror)を追加した立方体を使用して、
画像8のようにミラー(Mirror)の境界線に配置した円柱とブーリアン(Boolean)の差分(Difference)を行なう場合を例とします。
モディファイア―(Modifier)の順番が上からミラー(Mirror)⇒ブーリアン(Boolean)の場合には問題なくブーリアン(Boolean)は成功しますが、順番が上からブーリアン(Boolean)⇒ミラー(Mirror)になっていると画像9のようにブーリアン(Boolean)に失敗してしまいます。
ミラー(Mirror)とブーリアン(Boolean)の順番を変えてもうまくいかない場合は、ミラー(Mirror)を適用(Apply)してからブーリアン(Boolean)を追加してみてください。
また、ブーリアン(Boolean)のオブジェクト(Object)に指定するメッシュ(この場合では円柱)が、ミラー(Mirror)の境界線上にない場合にはブーリアン(Boolean)は問題なく成功します。
4 同じ大きさ(幅・高さ・奥行き)のメッシュを使用している場合
画像10のように同じ高さの立方体と円柱を使用してブーリアン(Boolean)の差分(Difference)を行なう場合を例とします。
ソルバー(Solver)を高速(Fast)でブーリアン(Boolean)を行うと、画像11のように失敗してしまいます。
ソルバー(Solver)を正確(Exact)にすれば画像12のように成功します。
ソルバー(Solver)を正確(Exact)にする方法の他に、立方体または円柱の高さを変えることでもブーリアン(Boolean)は成功するようになります。
5 その他
以下の2つはブーリアン(Boolean)の失敗/成功の条件あるいは対処法についてよくわからなかったものです。
5.1 平面のメッシュを使用している場合
画像13のような平面とUV球を使用してブーリアン(Boolean)の差分(Difference)を行なう場合を例とします。
ソルバー(Solver)を正確(Exact)でブーリアン(Boolean)を行うと、画像14のように成功する場合もありますが、
平面またはUV球の位置によっては画像15のように失敗する場合もあります。
このような場合ソルバー(Solver)を高速(Fast)にすれば、どの位置でも画像8のように成功するようです。
画像16のようにメッシュの一部に穴が開いているようなメッシュを使用した場合にも、平面を使用した場合と同じように穴が開いたメッシュまたはUV球の位置によってブーリアン(Boolean)が成功する場合と失敗する場合があるようです。
5.2 頂点が重なってしまうような場合
画像17のようなループカット(Loop Cut)で辺を追加した立方体とUV球を使用してブーリアン(Boolean)の差分(Difference)を行なう場合を例とします。画像17の丸で囲んだ部分が立方体とUV球の頂点が重なっているところです。
ソルバー(Solver)を正確(Exact)でブーリアン(Boolean)を行うと画像18のように成功しているように見えますが、ブーリアン(Boolean)を適用(Apply)して画像18の丸で囲んだ部分を編集モード(Edit Mode)で確認すると、頂点が2重になっていることがあります。
頂点が重なってしまうような場合でも、メッシュの位置や形状によるのかわかりませんが、ブーリアン(Boolean)を適用(Apply)後に頂点が2重にならない場合もあるようです。
ソルバー(Solver)を高速(Fast)にした場合、こちらもメッシュの位置や形状によるのかわかりませんが、成功する場合もありますが失敗する場合もあるようです。
重なった頂点は、適用(Apply)した後に距離でマージ(Merge by Distance)またはモディファイアー(Modifier)の溶接(Weld)で重なった頂点を削除します。
頂点が重なっている場合にはベベル(Bevel)もうまくできなくなるので、上から順番にブーリアン(Boolean)⇒溶接(Weld)⇒ベベル(Bevel)としてください。
6 補足
ブーリアン(Boolean)を使用するときに失敗の原因となるようなものが、
・ブーリアン(Boolean)を追加する側のメッシュにあるのか
・ブーリアン(Boolean)のオブジェクト(Object)で指定するメッシュにあるのか
・交差(Intersect)・合成(Union)・差分(Difference)のうちどれを使用しているのか
・ソルバー(Solver)の高速(Fast)と正確(Exact)のどちらを使用しているのか
・この記事で紹介した失敗の原因が複数重なっている
などいろいろな条件が重なって失敗する場合も逆に成功する場合もあります。
例えば面が裏になっているメッシュを使用した場合に関して、差分(Difference)でソルバー(Solver)を正確(Exact)にすると失敗しますが、ソルバー(Solver)を正確(Exact)のまま交差(Intersect)または合成(Union)にすると、ブーリアンは問題なく成功します。
また、ソルバー(Solver)を高速(Fast)にすると面の表裏が混ざった状態になりますが、交差(Intersect)・合成(Union)・差分(Difference)でもブーリアン(Boolean)は成功します。
失敗または成功するパターンをすべて覚えるわけにはいかないので、メッシュの面が裏になったり、埋もれた面(Interior Faces)があったりするようなメッシュとして通常避けるべきとされているものは避けて、ソルバー(Solver)は通常は正確(Exact)を使用して、うまくいかない場合は高速(Fast)を試してみるといった感じでブーリアンの失敗はかなり減らせるはずです。
また、ブーリアン(Boolean)を追加する側のメッシュあるいはブーリアン(Boolean)のオブジェクト(Object)で指定するメッシュにモディファイアー(Modifier)をたくさん使用している場合は、ある程度適用(Apply)することで、問題となりそうな場所を見つけやすくなることもあります。
ここで紹介した失敗の原因は個人的に経験のあるものだけなので、ほかの原因もあると思います。
ブーリアン(Boolean)の基本的な使用方法については下記の記事で紹介をしてきます。
以上、Blenderの「ブーリアン(Boolean)が失敗する原因について」でした。
コメント