使用 CSG 设计关卡原型
Constructive Solid Geometry [构造实体几何]的缩写, 是一种将基本形状或自定义网格组合起来以创建更复杂形状的工具. 在三维建模软件中,CSG多被称为 “布尔运算符” . CSG在Godot中的目的是将其用于关卡原型设计. 该技术允许用户通过组合基元来创建最常见形状的简单版本. 可以使用反转基元创建室内环境. 注解 Godot中的CSG节点主要用于原型设计. 没有内置的对UV贴图或编辑3D多边形的支持(尽管挤出的2D多边形可以用CSGPolygon节点来使用). Qodot 来代替. 它可以让你使用 TrenchBroom 设计关卡, 并在Godot中导入它们.
CSG节点简介
与Godot的其他功能一样,CSG以节点的形式存在, 这些是CSG节点:
- CSGBox
- CSGCylinder (也支持锥体)
- CSGSphere
- CSGTorus
- CSGPolygon
- CSGMesh
- CSGCombiner
CSG工具功能
每个CSG节点都支持3种布尔运算: - 并集(Union): 合并两个基元的几何, 删除交叉几何.
- 交集(Intersection): 只保留相交的几何体, 其余的被删除.
- 差集(Subtraction): 第二种形状从第一种形状中减去, 留下一个凹陷的形状.
CSGPolygon
CSGPolygon 节点以下列方式沿着以2D(X,Y坐标)绘制的多边形挤出: - Depth: [深度]挤出一定量.
- Spin: [旋转]围绕原点旋转时挤出.
- 路径(Path): 沿路径节点挤出. 此操作通常称为放样.
注解
Path 模式需要一个 Path 节点来运行. 在
Path节点中, 绘制路径,CSGPolygon中的多边形将沿给定路径挤出.自定义网格
CSGMesh, 网格可以在其他软件中建模并导入Godot. 支持多种材质, 对几何体有一些限制: - 它必须被关闭,
- 它不能自我相交,
- 它不能包含内部面,
- 每条边都必须连接到另外两个面.
CSGCombiner
CSGCombiner 节点是一个用于组织的空形状, 它只会合并子节点.处理顺序
每个CSG节点将首先按树顺序处理其子节点及其操作: 并集, 交集或减法, 并将它们逐一应用于自身. 注解 为了保证性能, 确保CSG几何体保持相对简单, 因为复杂的网格可能需要一段时间来处理. 如果将对象添加在一起(如桌子和房间对象), 请将它们创建为单独的CSG树. 强制在一棵树中添加太多对象最终会影响性能. 仅在实际需要的地方使用二进制操作.原型设计
我们将对房间进行原型设计以练习使用CSG工具. 小技巧 Orthogonal [正交]视角下工作, 在组合CSG形状时可以得到更好的视图. 我们的关卡将包含以下对象: - 一个房间,
- 一张床,
- 一盏灯,
- 一张桌子,
- 一个书架.
使用Spatial节点作为根节点创建场景.
小技巧
Display Overdraw [显示透视]改变显示模式, 或者添加一个DirectionalLight[直射光]节点来帮助你清楚看到.
room, 启用 Invert Faces [反转面]并改变你的房间的大小.desk. 桌子有一个表面和四条腿: - Union 模式下为曲面创建1个CSGBox子节点, 并调整大小.
- Union 模式下为腿部创建4个CSGBox子节点并调整大小.
调整它们的摆放位置, 就像一张办公桌.
注解
CSG组合内的CSG节点只会在组合内处理它们的操作. 因此,CSGCombiners[CSG组合]是用来组织CSG节点的.
bed. 我们的床由三部分组成: 床, 床垫和枕头. 创建一个CSGBox并调整床的尺寸. 再创建一个CSGBox, 并调整床垫的尺寸.pillow的CSGCombiner作为bed的子节点. 场景树应如下所示: Union 模式下组合3个CSGSphere节点, 形成一个枕头. 缩放球体的Y轴并启用 Smooth Faces [平滑面].pillow[枕头]节点, 并将模式切换到 减法 ;组合后的球体将在床垫上开一个洞.pillow[枕头]节点重设你代到根Spatial节点;这个洞会消失. 注解 这是为了说明CSG处理顺序的效果. 由于根节点不是CSG节点, 所以CSGCombiner节点是操作的结束;这显示了使用CSGCombiner来组织CSG场景. 观察效果后, 撤消重新选择父节点. 您搭建的床应如下所示:lamp. Cone 选项并将其作为支架. 再创建一个CSGCylinder, 并调整尺寸, 将其作为灯杆使用. Spin 模式, 在 Front View (数字键盘1)下绘制一个 trapezoid [梯形], 这个形状将围绕原点挤出, 形成灯罩. 调整3个部分的位置, 使其看起来像一盏灯.bookshelf. 我们将为书架使用3个CSGBox节点. 创建一个CSGBox并调整其大小, 这将是书架的尺寸. Subtraction [减法]. 你几乎已经建立了一个架子. 再创建一个CSGBox, 把架子分成两层. 根据您的喜好将您的家具放在房间里, 您的场景应该是这样的: 你已经成功地用Godot中的CSG工具制作了一个房间关卡的原型.CSG工具可以用于设计各种类型的关卡, 如迷宫或城市;在设计游戏时探究它的局限性.使用原型纹理
空间材质 支持triplanar mapping, 它可以用来自动将纹理应用到任意对象上, 而不会发生变形. 这在使用CSG时很方便, 因为Godot还不支持在CSG节点上编辑UV贴图. 三面贴图的速度相对较慢, 这通常限制了它的使用, 比如地形等有机表面. 不过, 在原型设计时, 还是可以用它来快速将纹理应用到基于CSG的关卡上. (CSG: 构造实体几何(Constructive Solid Geometry)的简写). 注解 CC0授权的原型图片. 有两种方法可以将材质应用到CSG节点: - Geometry > Material Override ). 这将自动影响它的子节点, 但能改变单个子节点的材质.
- 材质 在(属性)检查器中). 这样, 每个CSG节点都可以有自己的外观. 减去CSG节点将把它们的材质应用到 “digging” 到的节点上. 材料重写 旁边的 [空] 文本(或针对单个CSG节点的 材质 ). 选择 新建空间材质 . 单击新创建的材质的图标, 对其进行编辑. 展开 Albedo 部分, 将纹理加载到 Texture 属性中. 现在, 展开 Uv1 部分并选中 Triplanar . 您可以通过上面的 Scale 和 Offset 属性来改变每个轴上的纹理偏移和比例. 在 Scale 属性中, 较高的值将导致纹理更频繁地重复. 小技巧 复制 . 要粘贴它, 请选择您要应用该材质的节点, 单击其材质属性旁边的下拉箭头, 然后选择 粘贴 .
