3D简介

创造一个3D游戏很有挑战性。 多余的Z坐标使许多有助于使2D游戏变得简单的常用技术不再起作用。 为了帮助实现这一转变,值得一提的是,Godot在2D和3D上使用了类似的API。 大多数节点是相同的,并且以2D和3D版本存在。 事实上,看看3D平台游戏教程或3D运动学角色教程是值得的,这些教程大部分与2D游戏相同。

在3D中,数学比2D更复杂一些,所以看看wiki 向量数学 (特别是为游戏开发者,而不是数学家或项目师创建的)将有助于为有效开发3D游戏铺平道路。

空间节点

Node2D 是2D的基本节点。 Control 是所有GUI的基本节点。 按照这个推理,3D引擎中的所有3D物体使用 Spatial 节点。

../../_images/tuto_3d1.png

Spatial nodes have a local transform, which is relative to the parent node (as long as the parent node is also of or inherits from the type Spatial). This transform can be accessed as a 4x3 Transform, or as 3 Vector3 members representing location, Euler rotation (x,y and z angles) and scale.

../../_images/tuto_3d2.png

3D内容

与2D不同,2D加载图像内容和绘图非常简单,但3D更难一些。 内容需要使用特殊的3D工具(通常称为DCC)创造,并导出为交换文件格式以导入Godot(3D格式不像图像那样标准化)。

DCC 创建的模型

There are two pipelines to import 3D models in Godot. The first and most common one is by 导入3D场景, which allows you to import entire scenes (just as they look in the DCC), including animation, skeletal rigs, blend shapes, etc.

The second pipeline is by importing simple .OBJ files as mesh resources, which can be then put inside a MeshInstance node for display.

生成的几何体

It is possible to create custom geometry by using the ArrayMesh resource directly. Simply create your arrays and use the ArrayMesh.add_surface_from_arrays() function. A helper class is also available, SurfaceTool, which provides a more straightforward API and helpers for indexing, generating normals, tangents, etc.

在任何情况下,这种方法都是为了用于生成静态几何体(不会经常更新的模型),因为创建顶点数组并将它们提交给3D API具有显著的性能开销。

立即几何体

相反,如果需要生成会经常更新的简单几何体,Godot会提供一个特殊节点 ImmediateGeometry ,它会提供OpenGL 1.x风格的即时模式API来创建点,线 ,三角形等。

3D环境下的2D

虽然Godot包装了强大的2D引擎,但许多类型的游戏会使用在3D环境中的2D效果。 通过使用不旋转的固定相机(正交或透视),可以使用诸如 Sprite3DAnimatedSprite3D 等节点来创建混合了具有3D背景,更逼真的视差,灯光/阴影效果等的2D游戏。

当然,缺点在于与普通2D相比增加了复杂性并降低了与普通2D 相比的性能,以及缺乏使用像素作业的参考。

环境

除了编辑场景之外,编辑环境通常也很常见。 Godot提供了一个 WorldEnvironment 节点,该节点允许更改背景颜色,模式(例如放置天空盒)以及应用多种内置后处理效果。 相机中也可以覆盖环境。

3D 视区

编辑3D场景可以在3D选项卡中完成。 该选项卡可以手动选择,但在选择Spatial节点时将自动启用。

../../_images/tuto_3d3.png

默认的3D场景导航控件类似于Blender(旨在在自由软件管线中具有某种一致性),但含有用于自定义鼠标按钮和行为的选项,它也与编辑器设置中的其他工具类似:

../../_images/tuto_3d4.png

坐标系统

Godot使用`metric <http://en.wikipedia.org/wiki/Metric_system>`__系统来处理所有事情。 3D物理和其他领域都在为此而调整,所以试图使用不同的缩放比例通常是一个坏主意(除非您知道您在做什么)。

在使用3D资源时,最好以正确的比例工作(将您的DCC设置为度量标准)。 Godot允许缩放后导入,尽管这在大多数情况下都适用,但在极少数情况下,它可能会在诸如渲染或物理等敏感区域引入浮点精度问题(并因此引入毛刺或失真)。 所以,确保您的艺术家总是在正确的缩放比例下工作!

Y坐标用于``向上``,但对于大多数需要对齐的物体(如灯光,摄像机,胶囊碰撞体,载具等),Z轴用作``指向``方向。 这个约定大致意味着:

  • ** X **是两边
  • ** Y **是上/下
  • ** Z **是前/后

空间和可操纵的小控件

在3D视图中移动对象是通过操纵器小控件完成的。 每个轴用颜色表示:红色,绿色,蓝色分别代表X,Y,Z。 这个约定也适用于格子和其他小控件(也涉及着色器语言,Vector3,Color等组件的排序)。

../../_images/tuto_3d5.png

一些有用的键盘绑定:

  • To snap placement or rotation, press the “Ctrl” key while moving, scaling or rotating.
  • 要将视图居中在所选对象上,请按``f``键。

视图菜单

视图选项由视区工具栏中的“视图”菜单控制。

../../_images/tuto_3d6.png

您可以通过以下菜单在编辑器的3D视图中隐藏小玩意:

../../_images/tuto_3d6_1.png

要隐藏特定类型的小玩意,您可以在“视图”菜单中将其关闭。

../../_images/tuto_3d6_2.png

默认环境

从项目管理器中创建时,3D环境具有默认的天空。

../../_images/tuto_3d8.png

鉴于基于物理的渲染工作流程,建议始终使用默认环境,以便为对象提供间接和反射光。

相机

无论在3D空间中放置多少物体,除非在场景中添加了 相机 ,否则不会显示任何内容。 相机可以在正交或透视投影中工作:

../../_images/tuto_3d10.png

摄像机与父视图或祖父母视区相关联,仅显示。 由于场景树的根是一个视区,默认情况下会在其上显示摄像机,但如果需要子视区(渲染目标或画中画),则需要自己的子摄像头才能显示。

../../_images/tuto_3d11.png

处理多台摄像机时,每个视区都遵循以下规则:

  • 如果场景树中没有摄像机,则第一个摄像机将成为活动摄像机。 进入场景的其他摄像机将被忽略(除非它们被设置为 当前 )。
  • 如果相机具有`` 当前 ``属性设置,则无论场景中是否有其他相机,都会使用它。 如果该属性已设置,它将变为活动状态,取代之前的摄像头。
  • 如果活动摄像机离开场景树,则按树形顺序排列的第一台摄像机将取代它。

灯光

Godot的灯光数量和灯光类型没有限制。 想加多少都可以(只要性能允许)。