CSG

CSG代表 构造实体几何 ,是一个组合基本形状或自定义网格以创建更复杂形状的工具。在三维建模软件中,CSG通常被称为“布尔运算符”。

级原型是CSG在Godot中的主要应用之一。此技术允许用户通过组合基本体来创建最常见形状的简单版本。内部环境可以通过使用反转原语来创建。

../../_images/csg.gif

CSG节点介绍

与godot的其他特性一样,CSG以节点的形式得到支持。这些是CSG节点:

../../_images/csg_nodes.png ../../_images/csg_mesh.png

CSG工具功能

每个CSG节点支持3种布尔运算:

  • 工会: 合并两个基本体的几何体,删除相交的几何体。

  • 交叉: 只保留相交的几何图形,其余的将被删除。

  • 减法: 第二个形状从第一个形状中减去,留下一个凹痕。

../../_images/csg_operation_menu.png ../../_images/csg_operation.png

CSGPolygon

这个 CSGPolygon 节点沿以二维(x,y坐标)绘制的多边形拉伸,方法如下:

  • 深度: 挤出一定量。

  • 旋转: 围绕其原点旋转时挤压。

  • 路径: 沿路径节点拉伸。此操作通常称为放样。

../../_images/csg_poly_mode.png ../../_images/csg_poly.png

注解

这个 Path 模式必须提供 Path 要工作的节点。在路径节点中,绘制路径,CSGPolygon中的多边形将沿给定路径挤出。

自定义网格

任何网格都可以用于 CSGMesh ;网格可以在其他软件中建模并导入godot。支持多种材质。几何图形有一些限制:

  • 它必须关闭,

  • 它不能自相交,

  • 它不能包含内部面,

  • 每个边只能连接到另外两个面。

../../_images/csg_custom_mesh.png

CSGCombiner

这个 CSGCombiner 节点是用于组织的空形状。它将只合并子节点。

处理订单

每个CSG节点将首先按照树的顺序处理其子节点及其操作:并集、交集或相减,并将它们依次应用于自身。

注解

为了提高性能,请确保CSG几何体相对简单,因为复杂的网格可能需要一段时间来处理。如果将对象添加到一起(如表对象和房间对象),请将它们创建为单独的CSG树。在一个树中强制过多的对象最终将开始影响性能。只在实际需要的地方使用二进制操作。

原型化一个层次

我们将建立一个房间的原型来练习使用CSG工具。

小技巧

在…工作 正交 在组合CSG形状时,投影可以提供更好的视图。

我们的级别将包含这些对象:

  • 一个房间,

  • 一张床,

  • 一盏灯,

  • 一张桌子,

  • 书架。

创建一个以空间节点作为根节点的场景。

小技巧

环境的默认照明在某些角度上不提供清晰的阴影。使用更改显示模式 显示透支 在“三维视区”菜单中,或添加一个定向光节点以帮助您清楚地看到。

../../_images/csg_overdraw.png

创建一个CSGBox并命名它 room 使能 反转面 改变你房间的尺寸。

../../_images/csg_room.png ../../_images/csg_room_invert.png

接下来,创建一个CSGCombiner并命名它 desk .

一张桌子有一个表面和四条腿:

  • 在中创建1个CSGBox子节点 联合 表面模式并调整尺寸。

  • 在中创建4个CSGBox子节点 联合 支腿模式并调整尺寸。

调整它们的位置,使之像桌子。

../../_images/csg_desk.png

注解

CSGCombiner中的CSG节点将只在合并器中处理其操作。因此,使用csgcombiner来组织csg节点。

创建一个CSGCombiner并命名它 bed .

我们的床由三部分组成:床、床垫和枕头。创建一个CSGBox并调整其床的尺寸。创建另一个CSGBox并调整其床垫尺寸。

../../_images/csg_bed_mat.png

我们将创建另一个名为 pillow 作为的孩子 bed . 场景树应该如下所示:

../../_images/csg_bed_tree.png

我们将在 联合 形成枕头的模式。缩放球体的Y轴并启用 平滑面 .

../../_images/csg_pillow_smooth.png

选择 pillow 节点并将模式切换到 减法 合并后的球体会在床垫上开一个洞。

../../_images/csg_pillow_hole.png

尝试重新设置父级 pillow 节点到根 Spatial 节点;孔将消失。

注解

这是为了说明CSG处理顺序的效果。因为根节点不是CSG节点,所以CSGCombiner节点是操作的结束;这显示了使用CSGCombiner组织CSG场景。

观察效果后,松开重新父级。你造的床应该是这样的:

../../_images/csg_bed.png

创建一个CSGCombiner并命名它 lamp .

灯由三部分组成:支架、灯杆和灯罩。创建csgcylinder,启用 Cone 让它成为看台。创建另一个CSG气缸并调整尺寸以将其用作电极。

../../_images/csg_lamp_pole_stand.png

我们将使用一个CSG聚合物作为灯罩。使用 Spin csgpolygon的模式并绘制 trapezoid前视图 (数字键盘1);此形状将围绕原点拉伸并形成灯罩。

../../_images/csg_lamp_spin.png ../../_images/csg_lamp_polygon.png ../../_images/csg_lamp_extrude.png

调整3个部件的位置,使其看起来像一盏灯。

../../_images/csg_lamp.png

创建一个CSGCombiner并命名它 bookshelf .

我们将使用3个CSGBox节点作为书架。创建一个CSGBox并调整其尺寸;这将是书架的大小。

../../_images/csg_shelf_big.png

复制CSGBox并缩短每个轴的尺寸并将模式更改为 减法 .

../../_images/csg_shelf_subtract.png ../../_images/csg_shelf_subtract_menu.png

你几乎已经建造了一个架子。再创建一个CSGBox,将搁板分为两层。

../../_images/csg_shelf.png

把你的家具放在你喜欢的房间里,你的场景看起来应该是这样的:

../../_images/csg_room_result.png

您已经使用godot中的CSG工具成功地构建了一个房间级别的原型。CSG工具可用于设计各种级别,如迷宫或城市;在设计游戏时探索其局限性。