CSG画刷用户指南

概述

BSPHouse.png

本文档对关卡创建中 BSP 的用途进行了细分。

BSP 画刷是虚幻的关卡构建中最为基本的工具。 从理论上说,最好将 BSP 想象为可以在关卡中进行填充并切除空间体积的东西。 很久之前,BSP被用来作为关卡设计中的主要构建模块。 但是现在,这个角色由静态网格物体来承担,相较而言,静态网格物体远为高效。 不过,作为关卡和物体的快速原型化产品的前期应用,以及对于那些无法使用3D建模工具而需要进行关卡构建的人来说,BSP依然很有用。 本文涵盖了如何使用BSP以及如何在您的关卡中使用它。

一般来说,您可以把BSP想象成为在您的关卡设计过程中创建基础形状的方法,既可以作为永久的固定物,也可以作为美术完成最终网格物体创建的临时测试方法。

技术性说明

"BSP"这个术语相比其他术语,使用的频率要高得多。 从技术上讲,BSP(二进制空间划分)是指一个数据结构,它被用于排列空间中的物体,因此从语义上对它的描述是不正确的。 这种类型的几何体的以更加精确的术语描述是 CSG(构造实体几何体),或者是更为常用的 World Geometry (世界几何体)。 然而这几年里,上述三种术语被如此多地互换使用,尽管出于不同的使用意图和目的,但它们实际所表示的意思相同。 请牢记这一点,如果您今后在其它文件,书籍,论坛或谈话中听到以上的任意说法之一,它们表示的意思是一样的。

如果您想要表述地更为准确,您可以说BSP画刷(正如我们在虚幻中对它的称呼一样)使用二进制空间划分(BSP) 算法来创建构造实体几何体(CSG)(CSG一般指的是世界几何体)。 但不要尝试纠正每一个使用错误术语的人; 这种错误传播的范围太广了。

BSP模式

为能使用BSP工具,您必须首先在BSP模式中放置编辑器。 这是通过点击工具面板的BSP模式图标或按下 Shift + 2 来完成的。

BSP_Mode_UI.png

BSP面板UI

BSP模式
BSP_EditBrush.png 进入 Edit Mode (编辑模式),它可以让您以多种方式来编辑画刷的形状。 这类似于简单的建模应用,可被用来创建一系列独特的画刷形状。
BSP_AlignTexture.png 进入 Texture Alignment Mode (贴图对齐模式),这样您就可以通过使用视口的控件来沿着BSP表面移动,旋转和缩放贴图。 这对于BSP形状的自定义贴图位置摆放极为有用。
BSP_Box.png 变更构建器画刷为盒体形状,这样就可以将其在画刷选项面板内进行自定义。 可用选项为:
立方体构建器设置
X X轴的尺寸。
Y Y轴的尺寸。
Z Z轴的尺寸。
Wall Thickness (墙壁厚度) 控制画刷内墙的厚度。 仅在勾选 Hollow (中空)的情况下才相关。
Hollow (中空) 设置画刷是否为固体或在其内部是否有中空空间,这是制作空间的快速方法。 使用 Wall Thickness (墙壁厚度)来控制。
Tessellated (多边形细分) 可控制盒体的边是否不保持为四方形而被细分为三角形。
BSP_Cone.png 变更构建器画刷为锥体形状,这样就可以将其在画刷选项面板内进行自定义。 可用选项为:
立方体构建器设置
Z Z轴的高度。
Cap Z(Z轴上限) Z轴内部上限高度。 仅在勾选 Hollow (中空)的情况下才相关。
Outer Radius (外半径) 锥形底部半径。
Inner Radius (内半径) 锥形内壁半径。 仅在勾选 Hollow (中空)的情况下才相关。
Sides (边) 锥形周围的边数。
Align to Side (与边对齐) 此值控制是否沿X轴来对齐边的旋转,或使得角度之一指向坐标轴下方。
Hollow (中空) 设置画刷是否为固体或在其内部是否有中空空间,这是制作空间的快速方法。 使用 Wall Thickness (墙壁厚度)来控制。
BSP_Sphere.png 变更构建器画刷为球体形状,这样就可以将其在画刷选项面板内进行自定义。 可用选项为:
立方体构建器设置
Radius (半径) 设置球体半径。
Sphere Extrapolation (球体外推) 控制用来制作球体的边数。 由于采用多边形细分的方法,这个值的上限为5。
BSP_Cylinder.png 变更构建器画刷为柱体形状,这样就可以将其在画刷选项面板内进行自定义。 可用选项为:
立方体构建器设置
Z Z轴的高度。
Outer Radius (外部半径) 设置圆筒半径。
Inner Radius (内部半径) 设置圆筒内部的中空空间半径。 仅在勾选 Hollow (中空)的情况下才相关。
Sides (边) 圆筒形周围的边数。
Align to Side (与边对齐) 此值控制是否沿X轴来对齐边的旋转,或使得角度之一指向坐标轴下方。
Hollow (中空) 设置画刷是否为固体或在其内部是否有中空空间,这是制作空间的快速方法。 使用 Inner Radius (内半径)来控制。
BSP_Sheet.png 变更构建器画刷为片体形状,这样就可以将其在画刷选项面板内进行自定义。 可用选项为:
立方体构建器设置
X X轴的尺寸。
Y Y轴的尺寸。
XSegments (X分段) 在片体中沿X轴的分段数。
YSegments (Y分段) 在片体中沿Y轴的分段数。
Axis (轴) 使您可以选择此平面将与哪条轴对齐。
BSP_Volumetric.png 变更构建器画刷为体积形状,这表示绕Z轴转动的一系列双面片形。 这对于塑造具有体积感的形状很有用,之前曾被用在链条,火焰及其它特效中。 此体积形状可以随后在画刷选项面板中进行自定义。 可用选项为:
立方体构建器设置
Z Z轴的尺寸。
Radius (半径) 此体积形状的半径。
NumSheets (片体数量) 组成体积形状的片体数量。

使用BSP体积已经非常过时了。 有可能的情况下,您应该使用粒子系统或静态网格几何体。

BSP_LinStair.png 变更构建器画刷为直线型楼梯形状,这表示它是一个直直的不会弯曲的楼梯。 这个楼梯直接延伸到地面。 此形状可以随后在画刷选项面板中进行自定义。 可用选项为:
立方体构建器设置
Step Length (台阶长度) 从前往后的每级台阶的长度。
Step Height (台阶高度) 从上往下的每级台阶的高度。
Step Width (台阶宽度) 从一侧到另一侧的每级台阶的宽度。
Num Steps (台阶数量) 楼梯的台阶数量。
Add to First Step (添加到首个台阶) 添加给定的高度到首个台阶,有效提升整个楼梯的高度。
BSP_CurvedStair.png 变更构建器画刷为弯曲型楼梯形状,这表示此楼梯以一定角度弯曲,但不会形成包裹起来的弯曲形状 - 如需这种效果,请使用螺旋型楼梯。 弯曲型楼梯直接延伸到地面。 此形状可以随后在画刷选项面板中进行自定义。 可用选项为:
立方体构建器设置
Inner Radius (内半径) 台阶围绕的内柱半径。
Step Height (台阶高度) 从上往下的每级台阶的高度。
Step Width (台阶宽度) 从一侧到另一侧的每级台阶的宽度。
Angle of Curve (曲线角度) 楼梯的旋转角度。
Num Steps (台阶数量) 楼梯的台阶数量。
Add to First Step (添加到首个台阶) 添加给定的高度到首个台阶,有效提升整个楼梯的高度。
Counter Clockwise (逆时针) 如果您希望楼梯向逆时针而非顺时针方向盘曲,请勾选此框。
BSP_SpiralStair.png 变更构建器画刷为螺旋型楼梯形状,这表示此楼梯可以不断地缠绕其本身。 此楼梯不会一直延伸到地面。 此形状可以随后在画刷选项面板中进行自定义。 可用选项为:
立方体构建器设置
Inner Radius (内半径) 台阶围绕的内柱半径。
Step Width (台阶宽度) 从一侧到另一侧的每级台阶的宽度。
Step Height (台阶高度) 从上往下的每级台阶的高度。
Step Thickness (台阶厚度) 增大整个楼梯的厚度。
Num Steps Per 360 (每一圈的台阶数量) 此设置决定了一个完整旋转所需的台阶数量。
Num Steps (台阶数量) 楼梯的台阶数量。 每次该值达到 每一圈的台阶数量 值(或倍数),楼梯将会再次围绕其本身成一圈。
Add to First Step (添加到首个台阶) 添加给定的高度到首个台阶,有效提升整个楼梯的高度。
Sloped Ceiling (倾斜天花板) 该值会造成天花板倾斜而非分层。
Sloped Floor (倾斜楼层) 有效地将楼层转变为螺旋型坡道,而不是传统的楼梯。
Counter Clockwise (逆时针) 如果您希望楼梯向逆时针而非顺时针方向盘曲,请勾选此框。
BSP_BrushOptions.png 在这个区域中,您可以对每种画刷形状的设置进行自定义。 此设置对上下文进行关联,并会基于您当前正在创建的形状进行更新。 请注意此区域是可折叠的 -如果您无法看到它,您可能需要扩展构建器的设置区域。
BSP_Add.png 创建添加型画刷,它可以在世界内添加固体几何体。
BSP_Subtract.png 创建挖空型画刷,它会挖空任何与画刷相交的固体几何体。
BSP_Intersect.png 交集会变更构建器画刷的形状,这样它仅会与构建器画刷及其它画刷之间的交集区域相匹配。
BSP_Deintersect.png 反交集会变更构建器画刷形状,这样它仅会与构建器画刷及其它画刷之间的任意交集之 的区域相匹配。
BSP_Volume.png 打开下拉框,使您可以创建各种各样的不同体积对象。

BSP 画刷的用途

尽管现在主要使用 StaticMeshes(静态网格物体)来组成关卡,但是 BSP 画刷仍然有它们的用途。 下面是其中一些使用 BSP 画刷的示例,通常用于:

粗略画出关卡

开发关卡的标准工作流程是这样的:

  • 设计出关卡草图及关卡路径。

  • 运行关卡测试流程和游戏性。

  • 修改布局并反复测试

  • 起始的网格物体环节

  • 起始的光照环节

  • 对碰撞及性能问题的游戏测试。

  • 润色。

ElementalBSP.png ElementalComplete.png
BSP粗略/大致描绘 最终关卡

第一步首先要粗略画出关卡,在准备花时间使用静态网格物体及使用其他完成的美术资源来填充关卡之前,先决定布局和流程。 通常会使用 BSP 为这个关卡创建一个框架,然后通过测试和迭代,就最终布局达成一致。 BSP非常适合于关卡设计的流程,因为它不需要美术团队花费任何时间或精力。 关卡设计师可以简单使用内置在虚幻编辑器中的工具创建并修改 BSP,直到他们对布局以及关卡游戏方式满意为止。

随着测试步入最终阶段,以及开始进行的网格物体绘制,BSP画刷逐渐地被静态网格物体所取代。 这样就可以进行快速的初始迭代,并提供美术团队很好的参照以供后期的构造。

体积

体积是可以定义特定空间的不可视几何体,通常在玩家位于体积指定的区域内部时启用一些特殊功能。 体积区域由 BSP 画刷进行定义。 它会使设计师轻松地制作出局限于给定地图部分的效果,例如,适合游泳的区域、碰撞、触发器甚至是修改后期特效。

简单过滤器几何体

通常,在关卡设计师制作他们的关卡过程中,他们会突然想出一个情形,其中他们需要一个非常简单的一块几何体来填充空隙或空间。 如果没有静态网格物体填充空间,不需要麻烦美术组负责创建一个自定义网格物体,设计师只需使用 BSP 就可以填充这个空间。 尽管静态网格物体在性能方面更好,但是只要几何体简单,就可在不造成任何严重影响的情况下可以偶尔使用 BSP。

画刷类型

这里有各种各样不同的 BSP画刷类型,您可以在整个关卡创建过程中使用。 每种类型专门适用于特定情况。

以下是在编辑器中的线框视图模式下显示的样子(在每对盒子中,左侧的那个显示了选中它后的样子)。

brush_types.png

  1. 构建器画刷

  2. 添加型画刷

  3. 非固体画刷

  4. 挖空型画刷

构建器画刷

构建器画刷实际上是一个模板,可以对其进行修改,然后用于创建任何其他画刷类型。 可以使用变换工具,使用 Geometry Mode(几何体模式)或使用主要编辑器工具箱 的Primitive(图元)来对这个画刷进行修改。 构建器画刷还可以通过使用关联菜单中的 Polygons(多边形) > To Brush(画刷) 选项采用任何其他现有画刷格式。

添加型

添加型画刷就像实体填充的空间。 对于您想要添加到关卡中的任意 BSP 几何体来说,您都会需要使用此类型画刷。 可视化添加型画刷的好办法是想象房间的四面墙壁、地面和天花板。 其中每部分在您的地图中都会是一个单独的类似于盒体形状的添加型画刷,它们的角落互相匹配构成一个封闭的空间。

挖空型

挖空型画刷是中空的,挖空的空间。 它是您可以用于删除实体空间的画刷类型,例如通过之前创建的添加型画刷制作门窗等等。 挖空型空间是玩家唯一可以在其内部自由移动的区域。

拖拽网格

在使用 BSP 时,可用来对齐世界中对象的拖拽网格非常重要。 如果画刷的边或角没有固定在网格上,那么可能会出现错误,引发渲染失真或其他问题。 在使用画刷的时候,您应该始终确保启用了拖拽网格,并且确保您可以使画刷的顶点总是位于这个网格上。

画刷顺序

画刷放置的顺序非常重要,因为要根据这个顺序执行添加型或挖空型操作。 放置一个挖空型画刷然后再放置一个添加型画刷的效果,与放置一个添加型画刷然后再放置挖空型画刷的效果会有所不同,即使他们的位置完全相同。 举例来说,如果您从空白空间挖空然后在此基础上进行添加操作,则实际上挖空型画刷被忽略,因为您无法从空白的空间中进行挖空操作。 但是,如果您以相反的顺序放置相同的画刷,那么您是在对空白空间进行添加操作,然后对其中的额外空间进行挖空操作。

有时您可能会不按照顺序放置画刷或想要在现有画刷前面添加一个需要进行计算的新画刷。 幸运的是,画刷的顺序可以按照您稍后将从画刷属性 部分中看到的顺序进行修改。

画刷固体性

画刷可以是固体、半固体或非固体。 画刷固体性指的是它是否与世界中的物体发生碰撞,以及在构建几何体的时候,画刷是否会造成在周围画刷中创建BSP分割。

在画刷被创建后,画刷的固体性类型可以在细节面板中进行变更:

BrushSolidity.png

下面介绍了三种类型的画刷固体性。

固体

固体画刷是画刷的默认类型。 这些是您在创建一个新的添加型或挖空型画刷时得到的画刷。 它们具有以下属性:

  • 阻挡游戏中的玩家和射弹。

  • 可以是添加型或挖空型。

  • 在周围画刷中创建 BSP 分割。

半固体

半固体画刷指的是可以放置在关卡中且不会对周围的世界几何体创建 BSP 分割的碰撞画刷。 它们可被用来创建诸如柱子和支撑梁这样的物体,虽然此类对象通常应使用静态网格物体来进行创建。 它们具有以下属性:

  • 阻挡玩家和射弹,就像固体画刷一样。

  • 只可以是添加型,绝对不可以是挖空型。

  • 不会在周围画刷中创建 BSP 分割。

非固体

非固体画刷指的是在周围世界几何体中也不会创建 BSP 分割的非碰撞画刷。 它们具有可视化的效果,但是使用任何方式都无法与它们互动。 它们具有以下属性:

  • 不会阻挡玩家或射弹。

  • 只可以是添加型,绝对不可以是挖空型。

  • 不会在周围画刷中创建 BSP 分割。

画刷操作

反交集

反交集工具可以删除当前位于实体几何体的构建器画刷的所有部分,例如,一个添加型画刷,只留下在实体空间外的画刷部分。 现有几何体不会受到任何影响。 这是一个在构建器画刷上执行的操作,为创建一个添加型画刷做准备。

交集

交集工具可以删除当前不在实体几何体内的构建器画刷的所有部分,例如,一个添加型画刷,只留下在实体空间内的画刷部分。 现有几何体不会受到任何影响。 这只是一个在构建器画刷上执行的操作,为创建一个挖空型画刷做准备。

创建BSP画刷

BoxBrush.png

您可以通过选中您的图元创建 BSP 画刷,右击该按钮并在弹出的窗口中输入值来设置其大小。

然后使用 CSG 按钮来添加 BSP_Add_button.png 或挖空 BSP_Subtract_button.png 该画刷几何体。 对一个已经存在的BSP几何体进行挖空或添加操作时一定要小心。 为了确保安全,您通常应该在挖空操作前进行 取交集 操作,在添加操作前进行 反交集 操作。 这将可以确保不会有重叠的 BSP 几何体使其无法被引擎识别。

修改BSP画刷

您可以使用几种方法修改 BSP 画刷,其中每个对应特定情况以及您希望编辑画刷的方式。

几何体模式

最好的方式是使用几何体模式来改变画刷的实际形状。 编辑器模式可以直接控制画刷的顶点、边和面。 它与非常简单的 3D 建模应用程序中的工作方式极为相似。

要了解有关 Geometry Mode(几何体模式)以及如何使用它修改画刷的信息,请参阅几何体模式入门指南 页面。

变换控件

还可以使用各种不同的编辑器变换窗体控件修改您的画刷。 这样就可以进行交互性的平移、旋转和缩放,您可通过视口工具栏中的窗体控件按钮来访问:

TransformWidgets.png

如需获得更多变换控件及如何使用它们的信息,请参阅 变换Actor

画刷属性

您可通过选择画刷(使用Ctrl + Shift + 鼠标左键来选中画刷而非表面)以及在细节面板中的外观来对现存画刷进行编辑。 如您选中了整个画刷,您将可以看到画刷分类:

BrushDetails.png

多边形

多边形的下拉框提供以下选项:

PolygonsDropdown.png

多边形下拉框
To Builder Brush (转换到构建器画刷) 转换构建器画刷到与当前选中的画刷同样的形状-并保存在同样的位置。
From Builder Brush (从构建器画刷中转换) 转换当前选中的画刷到与构建器画刷同样的形状-并保存在同样的位置。
Merge (融合) 融合单一画刷上的任意平面。
Separate (分割) 此效果与上述的融合相反。

固体性

固体性下拉框包括下述属性:

请确认阅读画刷固体性章节 以获得更多细节。

SolidityDropdown.png

固体性下拉框
Solid (固体) 设置画刷固体性为固体。
Semi Solid (半固体) 设置画刷固体性为半固体。
Non Solid (非固体) 设置画刷固体性为非固体。

顺序

顺序下拉框包括下述属性:

请确认阅读画刷顺序 章节以获得更多细节:

OderDropdown.png

顺序下拉框
To First (移动到首位) 移动选定画刷到首个被计算的位置。
To Last (移动到末位) 移动选定画刷到最后一个被计算的位置。

画刷的类型

画刷类型下拉框包括下述属性:

画刷类型下拉框
Brush_Default (默认) 设置画刷为其默认状态,也就是Add(添加)状态。
Brush_Add (添加) 设置画刷为添加型。
Brush_Subtract (挖空) 设置画刷为挖空型。

对齐及静态网格物体按钮

如果您在画刷分类下展开属性,将出现以下按钮:

画刷类型下拉框
Align Brush Vertices (对齐画刷顶点) 将画刷顶点与网格对齐。
Create Static Mesh (创建静态网格物体) 转换当前画刷为静态网格物体actor, 保存在指定位置。

BSP表面

如果您选择BSP表面(不是整个画刷),您将在细节面板中看到以下分类:

BSPSurfaceDetails.png

BSP分类

BSP分类包含了能帮助您在BSP表面管理材质应用的一些工具。

BSP分类按钮
Select Button (选择按钮) 基于不同情况的帮助您选择BSP表面的不同命令。
Alignment (对齐) 对基于您所需要设置表面的贴图坐标的重新对齐。 这在您需要沿着地面来使复杂设置的画刷进行对齐,并使之看起来为单一表面时很有用。
Apply Material (应用材质 将内容浏览器中当前选中的材质应用到BSP表面。
Clean BSP Surfaces (清理BSP表面) 如您的BSP表面在任何操作中丢失了材质,该操作将会修复该问题。

表面属性

表面属性区域包含了一系列工具,可以帮助您控制如何把贴图在您的表面上进行放置,并控制光照贴图分辨率。

表面属性分类
Pan (平移) 此部分的该按钮可以让您对材质的贴图进行水平或垂直方向的给定数量的平移。
Rotate (旋转) 对BSP表面的材质进行给定角度的旋转。
Flip (翻转) 使您能够在BSP表面对贴图进行水平或垂直方向的翻转。
Scale (缩放) 对BSP表面的贴图进行给定尺寸的大小调整。

光照

光照部分的设置可以让您对BSP表面不同的以光照为中心的重要属性进行变更。

光照属性
Lightmap Resolution (光照贴图分辨率) 可让您对此整个表面的阴影进行调整。 此值越低,阴影越紧密

Lightmass设置

Use Two Sided Lighting (使用两侧光照) 如此值为 true ,此表面将从每个多边形的正负两侧处接受光照。
Shadow Indirect Only (仅间接阴影) 如此值为 true ,此表面将仅从间接光照中创建阴影。
Diffuse Boost (漫反射改进) 对间接光照上的受影响漫反射颜色数量进行调整。
Fully Occluded Samples Fraction (完全被遮挡的样本片段) 沿此表面的样本片段必须在其被从间接光照计算中遮挡前进行遮挡。