命令条目:选择对象。 “创建”面板 (几何体)“复合对象”“对象类型”卷展栏 “布尔”
命令条目:标准菜单:选择对象。“创建”菜单 “复合”“布尔”
布尔对象通过对其他两个对象执行布尔操作将它们组合起来。
提示ProBoolean 是一种对布尔复合对象进行了改进和更新、并且更加全面的实现。通常,建议在组合 3D 对象时使用 ProBoolean 而非布尔。
操作对象 A(左);操作对象 B(右)
以下是几何体的布尔操作:
并集
布尔型对象包含两个原始对象的体积。将移除几何体的相交部分或重叠部分。
布尔型对象只包含两个原始对象公用的体积(即重叠的位置)。
如果操作对象 A 无材质,则继承操作对象 B 的材质。
如果操作对象 B 无材质,则继承操作对象 A 的材质。
如果两个操作对象均有材质,则最终的材质为对两个操作对象的材质进行组合后的“多维/子对象”材质。
选择对象。此对象为操作对象 A。
单击“布尔”。操作对象 A 的名称显示在“参数”卷展栏的“操作对象”列表中。
在“拾取布尔”卷展栏上选择操作对象 B 的复制方法:“移动”、“复制”或“实例”。(本主题后面将在“拾取布尔”卷展栏部分中介绍这些方法。)
在“参数”卷展栏上选择要执行的布尔操作:并集、交集、差集 (A-B) 或差集 (B-A)。还可以选择“剪切”操作之一,本主题后面将在“操作”组部分中介绍该操作。
在“拾取布尔”卷展栏上,单击“拾取操作对象 B”。
单击视口以选择操作对象 B。3ds Max 将执行布尔操作。
操作对象保留为布尔对象的子对象。通过修改布尔操作对象子对象的创建参数,稍后可以更改操作对象几何体,以更改布尔操作结果或设置布尔操作结果的动画。
按照上述步骤创建布尔操作。将原始对象(长方体)转换为布尔操作,指定为操作对象 A。将第二个对象(球体)转换为操作对象 B。
取消选择布尔对象。如果不存在圆柱体,则建立圆柱体。
选择布尔对象,在“复合对象”下再次单击“布尔”。
单击“拾取操作对象 B”,然后在视口中单击圆柱体。将其转换为操作对象 B。
在 “修改”面板上,从“参数”卷展栏 “操作对象”列表中选择“操作对象 B”。如果要查看操作对象 B,请选择“显示/更新”卷展栏 “显示”组 “操作对象”或“结果 + 隐藏的操作对象”。
如果要设置圆柱体或圆柱体参数的动画,则现在可以在修改器堆栈显示中访问它们。
如果要修改球体的参数,请在“操作对象”列表中选择长方体。
现在,堆栈显示中有两个标有“布尔”的项。选择下面一项。“球体”显示在“操作对象”列表中。
从“操作对象”中选择“球体”。在修改器堆栈显示中单击球体的名称,即可查看球体的参数。
可以使用此技术在多个布尔操作中更改参数或设置任意操作对象的动画。
此按钮用于选择用以完成布尔操作的第二个对象。
使用“参考”可使对原始对象所做的修改器产生的更改与操作对象 B 同步,反之则不行。
如果出于其他目的希望在场景中重复使用操作对象 B 几何体,则可使用“复制”。
使用“实例化”可使布尔对象的动画与对原始对象 B 所做的动画更改同步,反之亦然。
如果创建操作对象 B 几何体仅仅为了创建布尔对象,再没有其他用途,则可使用“移动”(默认设置)。
无论采用何种复制方法,对象 B 几何体都将成为布尔对象的一部分。
显示当前的操作对象。
编辑此字段更改操作对象的名称。在“操作对象”列表中选择一个操作对象,该操作对象的名称同时也将显示在“名称”框中。
提取选中操作对象的副本或实例。在列表窗中选择一个操作对象即可启用此按钮。
注意此按钮仅在“修改”面板中可用。如果当前为“创建”面板,则无法提取操作对象。
指定提取操作对象的方式:用作实例或副本。
并集布尔对象包含两个原始对象的体积。将移除几何体的相交部分或重叠部分。
交集布尔对象只包含两个原始对象共用的体积(也就是说,重叠的位置)。
差集(A-B)从操作对象 A 中减去相交的操作对象 B 的体积。布尔对象包含从中减去相交体积的操作对象 A 的体积。
差集(B-A)从操作对象 B 中减去相交的操作对象 A 的体积。布尔对象包含从中减去相交体积的操作对象 B 的体积。
切割使用操作对象 B 切割操作对象 A,但不给操作对象 B 的网格添加任何东西。此操作类似于“切片”修改器,不同的是后者使用平面 Gizmo,而“切割”操作使用操作对象 B 的形状作为切割平面。“切割”操作将布尔对象的几何体作为体积,而不是封闭的实体。此操作不会将操作对象 B 的几何体添加至操作对象 A 中。操作对象 B 相交部分定义了改变操作对象 A 中几何体的剪切区域。
切割有下面四种类型:
优化在操作对象 B 与操作对象 A 面的相交之处,在操作对象 A 上添加新的顶点和边。3ds Max 将采用操作对象 B 相交区域内的面来优化操作对象 A 的结果几何体。由相交部分所切割的面被细分为新的面。可以使用此选项来优化包含文本的长方体,以便为对象指定单独的材质 ID。
分割 类似于“优化”,不过此种剪切还沿着操作对象 B 剪切操作对象 A 的边界添加第二组顶点和边或两组顶点和边。此选项产生属于同一个网格的两个元素。可使用“分割”沿着另一个对象的边界将一个对象分为两个部分。
移除内部删除位于操作对象 B 内部的操作对象 A 的所有面。此选项可修改和删除位于操作对象 B 相交区域内部的操作对象 A 的面。它类似于“差集”操作,不同的是 3ds Max 不添加来自操作对象 B 的面。可使用“移除内部”从几何体中删除特定区域。
移除外部删除位于操作对象 B 外部的操作对象 A 的所有面。此选项可修改和删除位于操作对象 B 相交区域外部的操作对象 A 的面。它类似于“交集”操作,不同的是 3ds Max 不添加来自操作对象 B 的面。可使用“移除外部”从几何体中删除特定区域。
结果 显示布尔操作的结果,即布尔对象。
操作对象 显示操作对象,而不是布尔结果。
提示如果操作对象在视口中难以查看,则可以使用“操作对象”列表选择一个操作对象。单击操作对象 A 或 B 的名称即可选中它。
结果 + 隐藏的操作对象 将“隐藏的”操作对象显示为线框。
尽管复合布尔对象部分不可见或不可渲染,但操作对象几何体仍保留了此部分。在所有视口中,操作对象几何体都显示为线框。
始终 更改操作对象(包括实例化或引用的操作对象 B 的原始对象)时立即更新布尔对象。这是默认设置。
渲染时 仅当渲染场景或单击“更新”时才更新布尔对象。如果采用此选项,则视口中并不始终显示当前的几何体,但在必要时可以强制更新。
手动 仅当点击“更新”时才更新布尔对象。如果采用此选项,则视口和渲染输出中并不始终显示当前的几何体,但在必要时可以强制更新。
更新布尔对象。如果选择了“始终”,则“更新”按钮不可用。
交集
差集(或差)
布尔型对象包含从中减去相交体积的原始对象的体积。
指定两个原始对象为操作对象 A 和 B。
可以采用堆栈显示的方式对布尔操作进行分层,以便在单个对象中包含多个布尔操作。通过在堆栈显示中进行导航,可以重新访问每个布尔操作的组件,并对它们进行更改。
差集:A-B(上);B-A(下)
并集(上);交集(下)
对指定了材质的对象执行布尔操作
大多数基本体的表面都使用多个 材质 ID。例如,长方体在其面上使用材质 ID 1?6。如果指定包含 6 个子材质的“多维/子对象”材质,则 3ds Max 会自动为每一面指定一个子材质。如果指定包含 2 个子材质的“多维/子对象”材质,则 3ds Max 将第一个子材质指定给面 1、3 和 5,将第二个子材质指定给面 2、4 和 6。
如果对指定了材质的对象执行布尔操作,则 3ds Max 按照以下方式组合材质:
有关详细信息,请参见“材质附加选项”对话框。
使用布尔操作时的一些解决方案
在较早的版本中,布尔算法曾造成一些意外的行为。以下讨论了其解决方案。
表面拓扑
布尔操作要求操作对象的表面拓扑是完好无缺的:这意味着,表面要没有缺失或重叠,也没有未焊接的顶点。表面应当是一个连续且封闭的面。
布尔操作会对不满足此要求的操作对象进行修正。不过,自动修正不一定非常精确,因此,在某些情况中手动修正可能更为可靠。
要检查几何体中的洞,请使用 “STL 检查”修改器或测量工具。
要填充洞,请使用“补洞”修改器。
面法线
布尔操作要求表面的面法线一致。翻转的法线可能会产生意外的结果。如果某些面朝向一个方向而相邻面发生翻转,则这样的表面也可能带来问题,这在由 CAD 程序导入的几何体中很常见。布尔操作在最大程度上解决了这些面的问题。尽管如此,手工修改仍然不失为解决此类问题的最佳方式。
可以使用着色视口查找法线问题,同时观察显示为内部外翻或看上去异样的对象。还可以在“可编辑网格 (曲面)”“曲面属性”卷展栏 “法线”组中启用“显示”。在此修复法线,或使用“法线”修改器。
重叠元素
由于布尔操作取决于区分网格的内部与外部,因此,重叠的网格会产生无效的结果。例如,如果在不启用布尔功能的情况下对两个重叠对象使用“折叠”工具,则所获得的对象不会产生好的布尔操作对象。对于自身重叠的茶壶基本体(所有部分均已启用)而言,这也是个问题。
如果必须使用此类对象作为布尔操作对象,则可以将组件分离并使用布尔操作进行组合,以将其重新构造为单个不重叠的网格。
使用反向网格
对于“反向网格”(网格由于法线翻转而变得内部外翻),布尔操作并不能总是产生理想的结果。问题在于翻转网格内部的区域应被正确地视为“外部”,但其外部区域也可能被视为“外部”。要修正此问题,不应反转网格,而是应生成一个非常大的长方体或其他以网格为中心(但不要接触)的基本体,并使用布尔操作从该几何体中减去网格。然后,将其转换为一个可编辑的网格,并删除长方体的面。此操作将产生一个正确反转的网格,对该网格可正确使用布尔操作。
对齐
如果两个布尔操作对象完全对齐但实际上并未相交,则布尔操作可能会产生错误的结果。虽然这种情况极为少见,不过如果确实发生了,那么可以通过使操作对象稍稍重叠来消除错误。
操作对象之间的相对复杂性
当两个操作对象的复杂性比较接近时,布尔操作的效果最佳。如果要在没有任何分段的长方体中减去文本(一种由许多面和顶点构成的复杂对象),则获得的结果是许多很容易产生渲染错误的细长的面。增加长方体分段的数量可使结果变好。应尽量使操作对象的复杂性接近。
共面面/共线边
以前,布尔操作要求对象重叠。如果两个对象不重叠,而仅仅是边与边或面与面接触,则布尔操作将失败。
现在,对不重叠的对象也可以执行布尔操作。重合面/边和顶点不再成为问题。可以使用完全被另一个对象所包围、二者没有相交边的对象来执行布尔操作。
请参见“折叠”工具,以对多个对象执行布尔操作。
过程
要创建布尔对象,请执行以下操作:
示例:要创建和修改包含多个布尔操作的单个对象,请执行以下操作:
假设要创建带有两个洞的长方体。其中一个洞是用球体剪切的,而另一个洞是用圆柱体剪切的。如果稍后要更改球体或圆柱体,则可以执行以下步骤:
还可以通过轨迹视图浏览多个布尔操作。在轨迹视图中单击操作对象,可直接在修改器堆栈显示中访问其项。在具有众多布尔操作的复杂对象中,这种方法比上面介绍的方法更为便捷。
界面
“拾取布尔”卷展栏
选择操作对象 B 时,根据在“拾取布尔”卷展栏中为布尔对象所做的选择,操作对象 B 可指定为引用、移动(对象本身)、复制或实例化。应根据创建布尔对象之后希望如何使用场景几何体来进行选择。
因为通常情况下都是对重叠对象创建布尔对象,因此,如果对象 B 没有移除(假设未使用默认的“移动”选项),则在查看完整的布尔对象时它往往会挡住视角。可以移动布尔对象或 B 对象,以更好地查看结果。
拾取操作对象 B
参考/复制/移动/实例
用于指定将操作对象 B 转换为布尔对象的方式。它可以转换为引用、副本、实例或移动的对象。
“参数”卷展栏
“操作对象”组
[操作对象列表]
名称
提取操作对象
实例/复制
“运算”组
“显示/更新”卷展栏
“显示”组
查看布尔操作的结果比较复杂,尤其是在要修改结果或设置结果的动画时。可使用“布尔参数”卷展栏上的“显示”选项来帮助查看布尔操作的构造方式。
在创建布尔操作之前,以下显示控件是无效的。
显示操作对象
显示结果 (A-B)
显示 A-B 之后隐藏的操作对象
显示 B-A 之后隐藏的操作对象
“更新”组
默认情况下,只要更改操作对象,布尔对象便会更新。如果场景包含一个或多个复杂的活动布尔对象,则性能会受到影响。“更新”选项为提高性能提供了一种选择。
更新