特性列表

这个页面旨在罗列所有的现在被 Godot 支持的功能特性。

备注

这个页面列出了当前稳定版本的 Godot(3.5)所支持的特性。最新的开发版本(4.0)提供更多特性

特性

平台

可以运行编辑器以及导出项目的:

  • Windows 7 以及更新的系统版本(64 位和 32 位)。

  • macOS 10.12 以及更新的系统版本(64 位,x86 和 ARM)。

  • Linux(64 位和 32 位,x86 和 ARM)。

    • 二进制文件是静态链接的,并且如果在足够旧的基本发行版上进行编译,则可以在任何发行版上运行。

    • 官方二进制文件是在 Ubuntu 14.04 上编译的。

  • 通过 WebAssembly(Firefox、Chrome、Edge、Opera)的 HTML5。

运行导出的项目:

Godot 的目标是尽可能地独立于平台,并且可以相对轻松地移植到新平台。

编辑器

特性:

  • 场景树编辑器。

  • 内置脚本编辑器。

  • 支持 Visual Studio Code、VIM 等外部文本编辑器

  • GDScript 调试器

    • 尚不支持在线程中调试。

  • 性能监控工具。

  • 脚本热重载。

  • 场景热编辑。

    • 更改会在编辑器中生效并且会在关闭当前项目后保留。

  • 远程检查器。

    • 在关闭正在运行的项目后,更改不会被反映在编辑器中,也不会被保留。

  • 实时摄像机复制。

    • 移动编辑器中的摄像头,并在正在运行的项目中查看结果。

  • 内置离线类参考文档。

  • 使用由社区贡献的支持数十种语言的编辑器。

插件:

2D 图形

有两个渲染器可用:

  • OpenGL ES 3.0 渲染器(在桌面平台上使用 OpenGL 3.3)。

    • 高端的视觉效果. 推荐在桌面平台上使用.

  • OpenGL ES 2.0 渲染器(在桌面平台上使用 OpenGL 2.1)。

    • 推荐在移动和 Web 平台上使用。

特性:

  • 精灵、多边形和线条渲染。

    • 绘制线和多边形的高级工具,例如 Polygon2D 和 Line2D。

  • AnimatedSprite 辅助制作动画精灵。

  • 视差层。

    • 伪 3D 支持,可在编辑器中进行预览。

  • 带法线贴图的 2D 光照。

    • 硬阴影或软阴影。

  • 使用位图(BitmapFont)的字体渲染或使用 FreeType(DynamicFont)进行栅格化。

    • 位图字体可以通过例如 BMFont 的工具被导出。

    • DynamicFont 支持单色字体以及彩色字体(例如用于表情符号)。支持的格式有 TTF、OTF、WOFF1 和 WOFF2。

    • DynamicFont 支持具有可调整宽度和颜色的可选字体轮廓。

    • 支持字体超采样, 以在更高的分辨率下保持字体的清晰度.

  • 基于 GPU 的粒子,支持自定义粒子着色器。

  • 基于 CPU 的粒子。

2D 工具

  • 内置平滑和拖动边距的2D相机.

  • 用于代表 2D 空间中的一条路径的 Path2D 节点。

    • 可以在编辑器中绘制或者通过程序生成。

    • 用于使节点跟随一条Path2D的PathFollow2D 节点.

  • 2D 几何辅助器类.

  • 可用于绘制带纹理的2D线条的Line2D节点.

2D物理

物理实体:

  • 静态实体.

  • 刚体.

  • 动力学实体.

  • 关节(Joints).

  • 用以检测实体进入或离开的区域.

碰撞检测:

  • 内置形状: 线条, 框体, 圆圈, 胶囊.

  • 碰撞多边形(可以人工绘制,或者在编辑器中根据精灵生成)。

3D 图形

有两个渲染器可用:

  • OpenGL ES 3.0 渲染器(在桌面平台上使用 OpenGL 3.3)。

    • 高端的视觉效果. 推荐在桌面平台上使用.

    • 可选的 HDR 渲染,使用 sRGB(默认启用)。

    • 使用可选的深度预处理(默认启用),减少重复绘制的消耗,加速复杂场景的渲染。

  • OpenGL ES 2.0 渲染器(在桌面平台上使用 OpenGL 2.1)。

    • 推荐在移动和 Web 平台上使用。

    • 兼容性更高的 LDR 渲染。

    • 并不是所有特性都可用。仅在使用 OpenGL ES 3.0 渲染器时可用的特性会在下文中标注 GLES3

摄像机:

  • 透视、正交以及视锥偏移摄像机。

基于物理的渲染(内置材质特性):

  • 遵循迪士尼 PBR 模型。

  • 支持 Lambert、Lambert Wrap(半 Lambert)、Oren-Nayar、Toon 漫反射着色模式。

  • 支持 Schlick-GGX、Blinn、Phong、Toon、Disabled 镜面反射着色模式。

  • 使用粗糙度金属度工作流,支持 ORM 纹理。

  • 使用地平线镜面反射遮蔽(Filament 模型)提升材质外观

  • 法线贴图。

  • 反照率及法线贴图的细节贴图。

  • 可以使用 alpha 混合或抖动避免距离衰减通过透明管道。

  • 抖动可以根据每个像素或每个对象来确定。

  • GLES3:基于距离的拥有自动层级细节的视差/浮雕透视。

  • GLES3:次表面散射和透射率。

  • GLES3: Screen-space refraction with support for material roughness (resulting in blurry refraction). On GLES2, refraction is still functional but lacks support for material roughness.

  • GLES3:近距离衰减(软粒子)。

实时光照:

  • 全向光(日光/月光)。每个场景最多 4 个。

  • 全向光。

  • 可调整锥角和衰减的聚光。

  • 可以单独调整各个光源的镜面反射能量。

  • GLES3:光照使用单遍向前的做法。默认情况下,每个网格资源最多可显示 32 个全向光源和 32 个聚光光源。需要时可以放宽这个限制,但会增加着色器编译时长、降低性能。GLES2 的光照使用多遍向前的做法,对光源的数量没有限制,但在数量较多时会比较慢。

阴影贴图:

  • DirectionLight:正交(最快)、二分和四分 PSSM。支持在分割之间做混合。

  • OmniLight:双抛物面(快速)或立方映射(较慢但更精确)。支持全景形式的彩色投影纹理。

  • SpotLight:单个材质。

具有间接照明的全局照明:

  • 烘焙光照贴图(快速,但无法在运行时更新)。

    • 支持仅烘焙间接光照,或者同时烘焙直接和间接光照。可以给各个光源单独设置烘焙模式,从而实现混合光照烘焙。

    • 使用自动的基于八叉树系统对动态对象的光照进行支持。无需手动布置探针。

    • 光照贴图在 CPU 上烘焙。

  • GLES3:GI 探针(较慢,半实时)。支持反射。

反射:

  • 使用 ReflectionProbe 实现较快的烘焙反射或较慢的实时反射。可以选择启用视差盒校正。

  • 反射技术可以混合在一起,以获得更高的准确性或可扩展性。

  • GLES3:基于体素的反射(当使用 GI 探针时)。

  • GLES3: 屏幕空间反射.

天空:

  • 全景天空(使用HDRI).

  • 程序式天空。

雾:

  • 具有可调衰减曲线的深度雾.

  • 高度雾(floor 或 ceiling), 衰减可调.

  • 支持基于相机角度的自动深度雾颜色(依据日光的颜色).

  • 可选透射率,可以使灯光在雾中更清晰可见。

粒子:

  • 基于 CPU 的粒子。

  • GLES3:支持自定义粒子着色器的 GPU 粒子。

后期处理:

  • 色调映射(线性, Reinhard, Filmic, ACES).

  • 辉光/泛光,可以使用可选的双三次放大和多种混合模式:滤色(Screen)、柔光(Soft Light)、添加(Add)、替换(Replace)。

  • 使用一维渐变进行颜色校正.

  • 亮度, 对比度和饱和度调整.

  • GLES3:根据视口亮度自动调整曝光。

  • GLES3:近景深和远景深。

  • GLES3:屏幕空间环境光遮蔽(SSAO)。

  • GLES3:可选的去色带,避免产生色带(在启用 HDR 渲染时有效)。

纹理过滤:

  • 最近邻、双线性、三线性、各向异性过滤。

纹理压缩:

  • 无损或有损 WebP(不会节省 VRAM;仅减少存储大小)。

  • S3TC(仅支持桌面平台)。

  • ETC1(建议在使用 GLES2 渲染器时使用)。

  • GLES3:用于高质量压缩的 BPTC(macOS 不支持)。

  • GLES3:ETC2(macOS 不支持)。

抗锯齿:

  • 多采样抗锯齿(MSAA)。

  • 快速近似抗锯齿(FXAA)。

性能:

  • 使用房间与入口实现遮挡剔除。支持游戏通知,根据主次两级可见性来禁用不需要的节点的 AI/物理处理。

  • 实时遮挡形状(球体及多边形)。效率不及房间与入口(也不支持游戏通知),但更易使用。

备注

上述效果中的大多数都可以进行调整,从而提升性能、提高质量。这在使用 Godot 进行脱机渲染时非常有用。

3D 工具

  • 内置网格:立方体、圆柱体/圆锥体、(半)球体、棱柱体、平面、四边形。

  • 程序式几何体生成工具。

  • 构造实体几何(用于原型制作)。

  • Path3D 节点表示 3D 空间中的路径。

    • 可以在编辑器中绘制或者通过程序生成。

    • PathFollow3D 节点使节点沿 Path3D 运动。

  • 3D 几何体辅助类。

  • 支持在编辑器中将当前场景导出为 glTF 2.0 文件。

3D 物理学

物理实体:

  • 静态实体.

  • 刚体.

  • 动力学实体.

  • 车身(用于街机物理,而非模拟)。

  • 关节(Joints).

  • 柔体。

  • 布娃娃。

  • 用以检测实体进入或离开的区域.

碰撞检测:

  • 内置形状:立方体、球体、胶囊体、圆柱体。

  • 从编辑器中为任何网格生成三角形碰撞形状。

  • 从编辑器中为任何网格生成一个或多个凸碰撞形状。

着色器

  • 2D:自定义顶点、片段和灯光着色器。

  • 3D:自定义顶点、片段、灯光和天空着色器。

  • 基于文本的着色器,使用由 GLSL 启发的着色器语言

  • 可视化着色器编辑器。

    • 支持可视化着色器插件。

编写脚本

常规:

  • 具有脚本扩展节点的面向对象设计模式.

  • 用于脚本之间通信的信号和组.

  • 支持跨语言脚本编程

  • 多种二维和三维线性代数数据类型, 如向量和变换.

GDScript:

C#:

  • 打包成一个单独的二进制文件,以保持文件大小和依赖关系。

  • 使用Mono 6.x.

    • 完全支持C#7.0语法和功能.

  • 支持所有平台.

  • 建议使用外部编辑器以从IDE功能中获益.

VisualScript:

GDNative(C、C++、Rust、D……):

  • 在需要时, 可以链接到本机库以获得更高的性能和第三方集成.

    • 对于脚本游戏逻辑, 如果性能足够, 建议使用 GDScript 或 C#.

  • C和C++的官方绑定.

    • 使用任何你想要的构建系统和语言功能.

  • 维护社区提供的 D、Kotlin、Python、Nim、Rust 绑定。

警告

Godot 4.0 将会把 VisualScript 从核心中完全移除。因此,不推荐在新的 Godot 项目中使用可视化脚本。后续的 Godot 4.x 版本可能会将 VisualScript 重新实现为扩展。

Godot 3.x 仍会支持 VisualScript,我们建议你先试一试 GDScript,尤其是你想要把项目移植到 Godot 4 的话。

音频

特性:

  • 单声道、立体声、5.1 和 7.1 输出。

  • 2D 和 3D 的非定位和定位播放。

    • 选择 2D 或 3D 的多普勒效应。

  • 支持重路由 音频总线 以及大量其它效果.

  • Listener2D 和 Listener3D 节点从不同于摄像机的位置进行侦听。

  • 使用AudioEffectCapture类实时访问记录麦克风的音频输入。

  • MIDI 输入.

    • 尚不支持MIDI输出.

使用的 API:

  • Windows: WASAPI。

  • macOS: CoreAudio。

  • Linux: PulseAudio 或 ALSA。

导入

格式:

  • 图片: 请参阅 导入图像

  • 音频:

    • WAV,可选 IMA-ADPCM 压缩。

    • Ogg Vorbis。

    • MP3。

  • 3D 场景:

    • glTF 2.0 (推荐)

    • ESCN (直接从 Blender 导出)。

    • FBX(实验性,仅支持静态网格)。

    • Collada(.dae)。

    • Wavefront OBJ(仅静态场景,可直接被加载为网格)。

  • 在导入时使用 Mikktspace 为 3D 网格生成切线,保证与 Blender 等其他 3D 应用的一致性。

输入

  • 该输入映射系统使用硬编码的输入事件, 也可以使用可重定向的输入动作.

    • 坐标轴参数可以映射到两个不同的操作上, 这些操作可以配置死区.

    • 使用相同的代码支持键盘和手柄操作.

  • 键盘输入.

    • 按键可以被映射到“物理”模式,该模式下按键行为和键盘布局无关。

  • 鼠标输入.

    • 鼠标箭头可以配置为可见, 隐藏, 捕获, 或者限制在窗口范围内.

    • 当捕获了鼠标的原始输入时, 将会绕过windows或者linux操作系统的鼠标加速设置.

  • 手柄输入(最多同时支持 8 个控制器)。

  • 支持带压感的绘图笔和平板输入.

  • Android 系统也支持游戏手柄、键盘和鼠标输入。

网络

  • 使用StreamPeer和TCP_Server开发底层TCP网络通信.

  • 使用PacketPeer和UDPServer 开发底层UDP网络通信.

  • 使用HTTPClient开发底层HTTP请求.

  • 使用HTTPRequest 开发上层HTTP请求.

    • 使用打包的证书相关工具, 支持开箱即用的HTTPS功能.

  • 使用UDP和ENet的高级联机API.

    • 使用远程过程调用(RPCS)实现的自动同步复制功能.

    • 支持不可靠, 可靠和有序传输模型.

  • 全平台可用的WebSocket客户端和服务器实现.

  • 全平台可用的WebRTC 客户端和服务器实现.

  • 当在NAT后部署服务器时, 支持使用UPnP来避免对转发端口的需求.

国际化

  • 对包含emoji的Unicode完整支持.

  • 使用 CSVgettext 存储本地化字符串.

  • 在你的项目中自动在GUI元素中或通过使用 tr() 函数使用本地化的字符串.

  • 预计在Godot 4.0中加入对从右向左排版与文字塑形的支持.

窗口功能与操作系统整合

  • 移动, 调整大小, 最小化和最大化项目产生的窗口.

  • 更改窗口标题和图标.

  • 吸引注意(在大多数平台上表现为标题栏闪烁)。

  • 全屏模式。

    • 不使用全屏独占模式,不会更改屏幕分辨率。可使用不同分辨率的 Viewport 来代替。

  • 无边框窗口(全屏或非全屏).

  • 窗口置顶功能.

  • 具有每个像素透明度的透明窗口.

  • macOS上的全局菜单整合.

  • 阻塞或非阻塞的命令执行方式.

  • 使用默认或自定义(已注册在系统中的)协议处理器打开文件路径或URL.

  • 解析自定义命令行参数.

  • 可以下载 Linux 的无头/服务器二进制文件,也可以为 macOS 编译。任何二进制文件都可以使用 --no-window 命令行参数关闭窗口使用。

移动端

  • Android 与iOS 的应用内购买.

  • 支持第三方广告组件.

  • 支持Android上的子视图嵌入。

XR 支持(AR 和 VR)

  • 开箱即用的iOS ARKit支持.

  • 支持 OpenXR API。

    • 包含对 Meta Quest、Valve Index 等流行头戴式设备的支持。

  • 支持 OpenVR API。

GUI 系统

Godot 的 GUI 也是使用 Control 节点搭建的,和制作游戏时所使用的节点一致。编辑器 UI 可以通过插件轻松地进行各种扩展。

节点:

  • 按钮。

  • 复选框、复选按钮、单选按钮。

  • 使用 LineEdit(单行文本框)和 TextEdit(多行文本框)进行文本输入。

  • 使用 PopupMenu 和 OptionButton 实现下拉菜单。

  • 滚动条。

  • 标签。

  • 使用 RichTextLabel 显示 使用 BBCode 的格式化文本

  • 树状图(也可用于显示表格)。

  • 支持 RGB 及 HSV 模式的取色器。

  • 容器(水平、垂直、网格、流式、居中、边距、比例、可拖拽分割器……)。

  • 控件可以旋转和缩放。

调整大小:

  • 锚点可将固定GUI元素在特定的角落, 边缘, 或者居中.

  • 容器可根据特定规则自动放置UI元素.

  • 使用 2dviewport 拉伸模式缩放至多种分辨率。

  • 使用锚点和 expand 等比例缩放,支持任意纵横比。

主题:

  • 内置主题编辑器。

    • 根据当前的编辑器主题设置生成主题。

  • 使用 StyleBoxFlat 进行基于向量的程序式主题设计。

    • 支持圆角/斜角、阴影、每边框宽度、抗锯齿。

  • 使用 StyleBoxTexture 进行基于纹理的主题设计。

Godot的发行软件包较小, 使其适合替代Electron或Qt之类的框架.

动画

  • 正向运动学与反向运动学.

  • 使用 Tween 节点通过代码轻松执行程序式动画。

  • 支持为任何属性制作动画, 可自定义插值.

  • 支持在动画轨道中调用方法.

  • 支持在动画轨道中播放声音.

  • 支持在动画中使用贝塞尔曲线.

文件格式

  • 场景和资源可保存为 文本 或二进制格式.

    • 基于文本的格式易于阅读, 并且对版本控制更友好.

    • 二进制格式保存/加载大型场景/资源的速度更快.

  • 使用 File 读写文本或二进制文件.

    • 可选择使用压缩或加密.

  • 读写 JSON 文件.

  • 使用 ConfigFile 读写 INI 样式的配置文件.

    • 可以(反)序列化任何 Godot 数据类型,包括 Vector2/3、Color 等。

  • 使用 XMLParser 读取 XML 文件。

  • 将游戏数据打包到 PCK 文件(针对快速搜索优化的自定义格式),ZIP 存档或直接打包到可执行文件中以进行单文件分发。

  • 导出额外的 PCK 文件,引擎可以读取这些文件以支持 mod 和 DLC。

杂项

  • 对服务器的低级别访问,能够在必要时绕过场景树的开销。

  • 使用命令行接口进行自动化。

    • 使用持续集成平台导出和部署项目.

    • 适用于 Bash、zsh 和 fish 的 Shell 补全脚本

  • 支持将 C++ 模块 静态链接到引擎二进制文件中.

  • 引擎和编辑器以 C++03 编写。

    • 可使用 GCC、Clang、MSVC 进行编译。同时支持 MinGW。

    • 对打包者友好。通常情况下,可以使用系统库代替 Godot 提供的库。构建系统不会下载任何东西。构建完全可重现。

    • Godot 4.0 将使用 C++17 编写。

  • 使用宽松的 MIT 许可。

参见

Godot 建议库 列出了社区要求的、可能在未来 Godot 版本中实现的功能。