创建一个3D游戏将是个挑战,额外增加的Z坐标将使许多用于2D游戏的通用技术不再有用。为了帮助变换(transition),值得一提的是Godot将使用十分相似的API用于2D和3D。
目前许多节点是公用的在2D与3D版本中。值得查阅3D平台教程或者3D运动学角色教程几乎是与2D是相对应的。
在3D世界中,数学相较2D有一些复杂,所以在wiki查阅相关的向量数学(Vector math)将是对开发3D游戏非常有用的。
空间节点 Spatial node
2D节点(Node2D)是2d基础节点.控件( Control)是GUI中所有一切的基础节点. 如此,在3D引擎中将把空间(Spatial)做为所有3D物件的节点。
![../../_images/tuto_3d1.png](https://i-blog.csdnimg.cn/blog_migrate/7e3b3421fcb8af8665f96723977a4e9f.png)
空间节点(Spatial nodes)相对于父节点(既有父节点也是继承与空间(Spatial)类型)是有自己的局部变换。这种变换(transform)近似于一个4x3 Transform,或者使用3个三维向量( Vector3)代表空间位置,欧拉旋转 (x,y与z 角度)和缩放大小.
![../../_images/tuto_3d2.png](https://i-blog.csdnimg.cn/blog_migrate/4c70305c1e337c140dba82d862489fbe.png)
3D内容 3D content
不像2D那样直接加载图片内容再直接绘制出来,3D将有一些难. 这些内容必须用空间三维工具(通常是DCCs)进行创建并且导出为一些指定文件格式才能导入进Godot中(3D格式并不类似于标准的图片)。
DCC 创建模型 DCC-created models
这儿有2种把3D模型导入Godot渠道。第一种通常是直接导入3D场景(Importing 3D Scenes),这种方式允许导入所有场景物件 (就像在DCC中看到的那样),包括动画,骨架,各种模型等等.
第二种是使用文档3D网格模型doc_importing_3d_meshes导入.这种方式可以使用简单的 .OBJ 文件做为网格模型的资源,可以把资源放入一个网格模型实例(MeshInstance)节点 就可以显示出来。
基本几何形状 Generated geometry
可以直接使用网格模型(Mesh)来创建自定义的几何形状,使用Mesh.add_surface()函数来创建你自己的数组。你可以找到SurfaceTool帮助类,它提供了帮助索引,生成法线,切线等一系列API。
如此,把这个可用于生成静态几何形状(不经常更新的),创建顶点数组的方法加入3D API是有益处的。
立即几何形状 Immediate geometry
为了应付经常变化的基本几何形状需求,Godot提供了一个特别的节点立即几何形状(ImmediateGeometry),它提供了一个基于OpenGL 1.x 立即模式(immediate-mode)的 API 来创建点,线,三角形等。
2D在3D 2D in 3D
Godot中包含一个强有力的2D引擎,有许多的游戏在3D环境中使用了2D。使用了固定并且不旋转的摄像机(camera) (不管是正交或者透视) ,像Sprite3D 与 AnimatedSprite3D这样的节点在创造以3D为背景的2D游戏中将有许多的优势,比如真实的视角,光阴 特效等等。
当然,缺点也是显而易见的,与普通2d相比,增加了复杂性和性能同时也下降了,并且不像在以像素为单位那样容易上手。
环境 Environment
除了可以编辑场景,环境编辑通常也是必须的。Godot提供了一个世界环境(WorldEnvironment)节点,可以改变背景颜色,模式(如天空盒),并且提供了一系列的内置的后处理特效类型。 环境同样可以在摄像机(Camera)中重写。
3D视图 3D viewport
3D场景编辑在3D选项卡。这个选项卡可以手动选择,也会在你选择空间节点(Spatial node)的时候自动的切换。
![../../_images/tuto_3d3.png](https://i-blog.csdnimg.cn/blog_migrate/44788c252024ef5c8f53586b38fe27d5.png)
默认的3D场景导航界面样式类似于Blender(斑斓3D软件),在编辑器设置中,像其他设置一样,这些定制鼠标按钮等行为都是可以自定义的:
![../../_images/tuto_3d4.png](https://i-blog.csdnimg.cn/blog_migrate/25c2c9ef13d9f90544d130d6f7bc6e51.png)
坐标系 Coordinate system
Godot 使用的是公制(metric) 系统来衡量一切。3D物理与其他领域对此都进行了调整,所以尝试不同的比例通常是不明智的(除非你知道你在做什么)。
当使用3D资源时,最好以正确的比例(将DCC设置为公制)开发。 Godot允许缩放后导入,而这种方法在大多数情况下有效,在少数的情况下,它可能在诸如渲染或物理等精细区域导致浮点精度问题(诸如毛发) 所以,你要确保你的美术使用了正确的比例绘制 !
Y坐标用于表示“上”,尽管许多对象需要对齐(像 灯光,摄像机,胶囊碰撞体,车辆等),Z坐标用于表示“朝向”方位。粗略的定义为如下:
- X 表示 左右
- Y 表示 上下
- Z 表示 前后
空间和操作装置 Space and manipulation gizmos
通过操纵小方块可以在3D视图中移动对象。每个坐标都用一种颜色代表:红,绿,蓝分别代表着 X,Y,Z 。这个同样也约束这网格和其他小方块 (同样用于语言着色器,排列三维向量组件,颜色,等待)。
![../../_images/tuto_3d5.png](https://i-blog.csdnimg.cn/blog_migrate/184208a9b5e7327a2f6b5e07152d9d17.png)
一些有用的快捷键:
- 在移动和缩放,旋转中按S键截断运动和旋转。
- 按F建可以转到选择物体的中心。
默认环境 Default environment
从项目管理界面创建新项目时,3D环境有一个默认的天空盒。
![../../_images/tuto_3d8.png](https://i-blog.csdnimg.cn/blog_migrate/b4cdc1e1d850d59f85aae641e06097e3.png)
考虑到物理是基于渲染工作。为了提供对象的间接反射光照,我们建议使用默认环境来开发。
摄像机 Cameras
除非场景中放置了摄像机(Camera),否则无论在三维空间中有多少物体都将不会显示出来。摄像机机可以设置为正交投影或者透视投影:
![../../_images/tuto_3d10.png](https://i-blog.csdnimg.cn/blog_migrate/85e9cc1b0da24d686818dd3329f944a3.png)
摄像机是互相关联的并且仅显示在父视图或者父父级视图。从场景树中root节点一下有一个视图,其下摄像机将被设置为默认摄像机除非还有添加了其他子视图 (无论做为渲染对象或者画中画) ,这些视图需要自己下面有子摄像机才能显示。
![../../_images/tuto_3d11.png](https://i-blog.csdnimg.cn/blog_migrate/01722e2f861c3c0c3784462aaadde43e.png)
在处理多个摄像机时,每个视图遵循以下规则:
- 如果场景数中暂时没有摄像机,那么第一个添加的摄像机将会是激活状态。 其他被加入场景中的摄像机将被忽视(除非被设置为当前摄像机)。
- 如果摄像机设置了“current” 属性,不管场景中有多少其他摄像机只有它会被使用。如果这个属性设置了,它就会处于激活状态,替代之前的摄像机。
- 如果在场景树中移除了激活状态的摄像机,树形下排在第一的摄像机将替代之前被移除的摄像机。
光照 Lights
在Godot中没有限制光照的数量和类型。想添加多少就添加多少(只要性能允许)。