見出し画像

【3DCG Tutorial】 ブーリアン操作

ZBrush や Blender では「ブーリアン」と呼ばれる操作があります。
このブーリアン、エンジニアや理数系の人には馴染みが深いのではないでしょうか。

ブーリアンはもとを辿っていくと数学のブール代数から来ています。

3DCGの文脈でのブーリアンは集合代数でのブール演算に近いです

集合代数におけるブール演算

和集合

ある集合Aと集合Bを論理和するとき、
・Aに含まれるもの
・Bに含まれるもの
・AとBに含まれているもの
を真とします。

積集合、あるいは共通部分

「集合AとBの積集合」とは、AとBに含まれている要素を真とした部分を指します。
それ以外のものは全て偽と扱います。

差集合

集合AとBの差集合」とは、Bに含まれていないAの要素を真とする集合です。
もう少しざっくり言えばAに対してBの集合で引き算を行います。

ZBrush と Blender のブーリアンでは主にこの3つの演算を行うことができます。

さて、3DCGでブール演算?となるのですが ZBrush や Blender におけるブール演算は「オブジェクトとオブジェクトでブール演算を行い、演算の結果「真」となる部分だけで構成された新しいオブジェクトを生成する」という意味になります。
なのでオブジェクト=集合のような感じです。
ただしこの集合の要素は必ずしも頂点を指すわけではありません。
どちらかと言えば頂点によって作られる「面」が集合の要素として扱われます

具体例を挙げてみましょう。
例えば以下のように二つのスフィアがあったとします。

左をA、右をBとします。
この二つのスフィアでブーリアンする事を考えてみましょう。

3DCGにおけるブール演算

和集合

和集合は前述した通りAとBに含まれている要素を真とする 集合なのでした。
このスフィアをそれぞれA,Bとして和集合を求めることを考えてみます。
このとき、論理和の演算に従うと以下のようになります。

  1. Aは全て真

  2. Bも全て真

  3. AとBが重なる部分も全て真

したがってこの二つの物体を用いて和集合を求めるとAとBの両方を持つオブジェクトが新たに生成されます。
AとBが重なる場合、結合されます。


このように近づけてブーリアンすると…
結合され、あたらしいオブジェクトが生成される!

ポリグループは異なりますが、がっちり頂点はつながっています

差集合

オブジェクト同士の差集合はざっくり言えばBのオブジェクトでAを引き算するニュアンスとなります。
Bと重なるAの部分はBの形に削られます

この状態で差集合を求めると…
重なる箇所がくり抜かれたオブジェクトが生成される!

積集合、共通部分

オブジェクト同士の積集合、あるいは共通部分とはAとBが重なる部分のみを真とする集合です。
逆に言うとAとBが重ならない部分は全て除外されます。

和集合、差集合同様にくっつけた状態でブーリアンすると…
重なる部分だけのオブジェクトが生成される!

いろいろと難しく書いてしまいましたが、実際にやっている事を見るととても単純ですね。
これを利用すると幾何学的な形状をした凹凸を表現するときに役立ちます。
特に ZBrush はスカルプトに特化したソフトであり、モデリングの操作は直感的に作られていますが、一方でこのような規則正しい形状をブラシや手作業だけで表現するのは非常に困難です。
そういったときにブーリアンが役立つかもしれません。
(ここでは書きませんが他にも3Dギズモ機能やZModelerなども規則正しい形状をモデリングするのに向いています!)

なお、ZBrush の場合はブーリアン演算をしたときのオブジェクトの座標をそのまま使用するので中心位置には気を付ける必要があります。

ZBrush でのブーリアンのやり方

ZBrush ではサブツールUIから演算を指定できます。 左から和・差・積です。 ZBrush では 和は加算、差は減算、積は乗算 と呼ばれます。

サブツールパレットに「ブーリアン」があるので開きます。

ブーリアンメッシュ作成 ボタンを押すことで演算が行われます。

LiveBoolean が有効になっていないと(オレンジ色になっていないとき)「ブーリアンメッシュ を作成」ボタンは押せないので注意が必要です。

LiveBoolean ボタンがオレンジ色の状態になっている必要がある

演算結果はサブツールに追加されるわけではなくツールに追加されるので、演算適用後にツールパレットから追加または挿入する必要があります。

↑ 演算適用後、Quick Pickに結果オブジェクトが追加されていることを確認します 


最初に書いた例ではわかりやすく2つのオブジェクトで演算を行いましたが、実際にはサブツールパレット上で表示状態になっているすべてのオブジェクトでブーリアン演算が行われます。
例えば以下のように
A … 加算
B … 加算
C … 減算
D … 減算
であるなら、CとDの位置にあるオブジェクトは減算の対象になります。

↑紫色(A, B)が加算、水色(C, D)が減算とします

LiveBoolean を有効にするとこのように演算結果がプレビューできます。

なお、この演算はサブツールパレットの下から上にかけて評価されるので減算の下に加算モードのオブジェクトがある場合、減算はされません。

このように一番下にBを持っていくと…
Bだけ演算されない


この記事が気に入ったらサポートをしてみませんか?