草庐IT

Godot Engine 4.0横空出世,Vulkan大怪兽加持,画质提升简直亮瞎眼

开发游戏的老王 2023-04-04 原文

【CSDN 编者按】经历了漫长的等待,万众瞩目的 Godot Engine 4.0 正式版在其 3.0 版本发布 5 年以后,终于带着海量令人兴奋的新功能横空出世!

整理 | 开发游戏的老王 责编 | 王子彧
出品 | CSDN(ID:CSDNnews)

什么是Godot Engine?

它是一款完全免费的轻量级、开源、跨平台、2D/3D游戏引擎。Godot Engine 最初由它的创始人阿根廷资深游戏开发者 Juan Linietsky 在 2014 年开源,历经近十年的打磨,在其 2.0、3.0 版本问世以后逐渐广为人知,近几年 Godot Engine 更是成为了游戏开发界的“网红”产品,在国内外技术媒体的游戏引擎评测专题中,Godot 经常成为 Unreal Engine 以及 Unity 等重量级游戏引擎的比较对象。

笔者近几年也先后为 Godot Engine 撰写了一系列的开发教程,并且还曾基于 Godot Engine 复刻过「羊了个羊」。

近几年由 Godot Engine 开发的商业游戏作品更是不断涌现:

Primal Light - Fat Gem

Fist of the Forgotten - Lone Wulf Studio

Pingo Adventure - Orb Square Studio

您可能很好奇:为什么一个由小团队开发的游戏引擎能够在今天这个强手如林的游戏引擎战场被人们如此津津乐道?作为 Godot Engine 的小迷弟,老王很自豪地告诉您:Godot 是资深游戏匠人为游戏开发者量身定制的一款简约而不简单的匠心之作!它的核心理念就是“专治游戏开发中的各种痛点”,简单地说就是“友好”。单论“友好”二字,如果 Godot 在引擎界排第二,那么绝没有哪个引擎敢自称第一。

Godot 很“友好”

Godot 的友好性主要体现在如下几个方面:

  • 免费:而且是绝对的免费,正如 Godot 在 2015 年声明免费时提出的口号 “Your game is all yours”。

  • 轻量:不足百兆的体积里包含着真正意义上的 All-in-One 游戏引擎(引擎编辑器以及代码编辑器),并且它是无需安装的绿色软件,开箱即用,对初学者友好至极。

  • 开源:Godot Engine的Github地址

  • 跨平台:支持 Windows、macOS、Linux,还拥有基于浏览器的版本。Godot 甚至在苹果刚发布 M1 芯片不久就第一时间提供支持该芯片的引擎版本。

  • 简单易用的脚本语言:Godot 内置了一种名为 GDScript 的自研脚本语言,完全针对 Godot Engine 并且极其简单易用,即便对于编程零基础的小白也非常容易上手。(附《GDScript官方文档》)

  • 基于节点(Node)的开发模式:Godot 的工作逻辑也非常简单清晰,概括成一句话,那就是:“开发节点、使用节点”,只要理解了节点,Godot 的工作逻辑也就掌握得八九不离十了。因为在 Godot 中,万事万物皆为节点。

Godot 的节点模式几乎可以等价转换成 Unity 中的游戏体-组件模式,所以有 Unity 使用经验的游戏开发者几乎可以无缝过渡到 Godot 引擎。

  • 高度可扩展性:Godot Engine 不仅拥有完善的插件扩展系统,它的语言扩展系统也是非常优秀的,除了上文提到的内置 GDScript 以及原生的 C++ 和可视化编程的支持。社区开发者还为 Godot 提供了诸如 C#、JS、TS、Rust、Lua 等第三方开发语言的支持。

综上所述,Godot Engine 的体贴友好会让每一个游戏开发者爱不释手,即使它尚未成为您的主要开发工具,这个引擎的发展也绝对值得您的关注。

全新升级版本惊喜不断

Godot Engine 在它的 3.0 时代可以说已经赚足了开发者们的眼球,但作为一个“小作坊”开发的游戏引擎,必须诚实地讲,它的渲染性能、精度以及高级游戏内容制作能力方面还有很大的提升空间。这也是为什么截至目前,市面上的 3A 级游戏鲜有使用 Godot 开发的原因。然而,Godot Engine 4.0 作为近 5 年来体量最大的一次版本升级,可以说再次为开发者带来了巨大的惊喜。接下来,本文就为大家简单介绍一下 4.0 版本中有哪些值得大家瞩目的亮点。

以下内容参考了Godot官方文章《Godot 4.0 sets sail: All aboard for new horizons 》

3D 游戏及渲染方面的提升

基于 Vulkan 的渲染模块

Godot Engine 4.0 最大亮点无疑是重新构建了自身的渲染模块。面向高性能终端设备 Godot 加入了号称性能怪兽的 Vulkan 渲染库,Vulkan 的引入让Godot 的渲染效果有了前所未有的巨大提升,更加高质量的光照以及更加干净通透的阴影效果,让人简直不敢相信这是曾经的 Godot。

而面向低性能终端及移动设备,Godot 也重构了底层的 OpenGL 封装,并且在未来还会增加阴影及反射探头等功能的支持。专门面向 Windows 和 XBox 的 DirectX 12 支持,也将在下一个版本更新中于大家见面。

全新的全局光照系统(SDFGI – Signed Distance Field Global Illumination)

Godot 4.0 从零开始构建了新的基于有向距离场(SDF 即 Signed Distance Field)的实时全局光照系统,该系统主要面向大型开放场景的全局光照。笔者曾经在 2020 年翻译过 Godot 关于 SDF 的官方文档,有兴趣的朋友欢迎进一步阅读(详见《Godot 4.0 中的基于有向距离场 SDF(Signed Distance Field)的实时全局光照技术》)

基于体素的全局光照(Voxel Based Global Illumination)

面向中小型场景全新的基于体素的实时全局光照系统代替了原有的 GIProbe,这使得诸如室内这样的场景中,实时全局光照的细节有了巨大的提升,即使你依然使用烘焙光照贴图的传统方式,4.0 版本采用的 GPU 烘焙方式,也可以大大提升你的处理速度。

新的渲染优化技术

新的遮挡剔除(Occlusion Culling)技术可以动态检测被其它物体遮挡的模型并从渲染队列里将其移除,从而提升 CPU 和 GPU 的效率。

在大型开放场景中由于只有少数对象互相重叠,遮挡剔除的效果并不明显,此时我们可以选择使用新的自动网格 LOD 或手动 HLOD 以达到对可视范围的全面掌控。

中期及后期处理能力的提升

面向高性能终端,Godot 4.0提供 SSIL(Screen Space Indirect Lighting)即:屏幕空间间接光照技术,该技术可以通过对屏幕空间的采样提升可视范围内的暗部以及间接光照的效果。另外,通过强大的 SSAO(Screen Space Ambient Occlusion) 即屏幕空间环境光遮蔽技术,开发者可以访问诸如光效(即:受直射光影响的程度)等设置,并通过环境光遮蔽贴图来忽略指定对象,从而达到优化的目的。

对于摄影向的用户,可以通过 Godot 4.0 提供的拟真光照单位(Realistic Light Units)来调节光照强度,并使用标准照相机设置(诸如:光圈、快门和 ISO)等参数场景的最终亮度。在默认情况下,物理光照单位(Physical Light Units)是被关闭的,但你可以在项目设置中将它开启。

2D 游戏及渲染方面的提升

Godot 4.0 对 2D 游戏开发的提升主要体现在工作流的显著改善。

新的关卡编辑器

综合了广大用户的诸多反馈和建议以后,Godot 新版本中重新设计了瓦块地图编辑器,在新的编辑器中开发者可以更加自由地编辑地图以及为瓦块添加元数据和动画,并且可以更加高效地调整碰撞盒、导航、锚点等属性。

新的编辑器还拥有一个自动地形生成系统,用以提高大型场景绘制效率。还有一个随机绘制系统用以随机摆放诸如植物、石头这类东西。我们还可以把选择的对象以图章的形式保存并复用。瓦块的贴图还可以自动延展以避免缝隙。这个全新的地图编辑器虽然可能会带来一点学习上的门槛,但真的很值得!

2D 光照和阴影的提升

在着色器中使用有向距离场,可以使我们获得很多诸如长阴影、光晕、清晰描边等高级效果。我们还可以使用法线贴图让画面更具立体感。

着色器和特效方面的提升

新的大气效果

体积雾 (Volumetric fog )在 Godot 4.0 中第一次亮相。通过 FogVolume 节点,我们可以定义全局体积雾效果或者指定区域的体积雾效果,甚至还可以通过编写 FogVolume 节点上的着色器创造更复杂的动态体积雾效果。

Godot4.0 中还引入了天空着色器(Sky Shader),通过它我们可以创建可以实时更新的动态天空效果。

纹理和材质投影(贴花)

Godot 也有动态贴花了,为模型增加一些表面细节,甚至做一些涂鸦以及血迹效果,太方便了!


脚本语言方面的提升

GDScript

依然是在接受了众多用户反馈的基础上,Godot 4.0 中的 GDScript 语言增加了很多大家期待已久的功能。提升了静态类型系统的稳定性,并且消除了循环依赖的问题,而且可以定义静态数组类型了。增加了属性(Property)句法,以及 await 和 super 关键字等等。

虽然功能增强了,但运行效率和稳定性反而大大提升。

C#

Godot 4.0 对 C# 的支持也进一步提升,.Net 的版本升级到了 .Net 6,同时 C# 10 也成为默认的 C# 版本。
GDExtension(实验性功能)

GDExtension

GDExtension 是 Godot 4.0 推出的一个新系统,旨在创建 GDNative 扩展以及使用 C、C++、Rust 等高性能语言自定义引擎模块。需要注意的是,该系统目前处于实验性阶段,其 API 有可能变更。

物理方面的提升

自研的游戏专用物理引擎

Godot 4.0 中抛弃了原先使用的 Bullet 物理引擎,重新自研了一套暂定名为Godot Physics 的游戏专用物理引擎。说实话这一点颇让笔者意外,这个决定无疑是大胆且充满野心的。但是我还是相信 Godot 团队的思路,正如他们最初放弃市面上所有现成的编程语言,为自己的引擎量身定制了 GDScript 一样。相信游戏专用物理引擎会带来更大的灵活性。目前这个物理引擎正在逐一实现Bullet 的原有功能。

物理方面其它的提升

  • 多线程支持及性能优化;
  • 更好的 API 接口;
  • 更好的物理模拟稳定性。

动画方面的提升

  • 动画编辑器现在支持混合形变轨道,以及提升了贝塞尔曲线的工作流可以选择并编辑多个曲线;
  • 改进了 3D 动画的工作流;
  • 实现了动画库以及重定向系统;
  • 提供了对混合复杂动画的支持;
  • 重写了 Tween 动画系统,API 更加简洁易用,甚至无需再创建 Tween 节点了。

其它方面的提升

这次 Godot Engine 4.0 带来的惊喜实在太多了,上面仅仅列举了一部分,还有诸如:UI、Editor、XR、Networking、Audio、Platform Support 等方面的更新和提升笔者就不一一列举了。意犹未尽的朋友敬请移步到 Godot官方文档,了解更加详细的内容。

Godot:只是开始,未来可期

看完上述令人兴奋的新功能,各位看官意下如何?笔者真是迫不及待地想用 Godot 4.0 开发一个新项目了。然而,开发团队在其官网中说虽然 4.0 是漫长的三年等待的结束,但对于 Godot 来讲它只是一个开始,未来他们将继续打磨引擎并且更加快速地迭代。来,大家一起喊:“ Godot,Yes!不负众望,未来可期!”

参考链接:

  1. Godot 4.0 sets sail: All aboard for new horizons:https://godotengine.org/article/godot-4-0-sets-sail/
  2. 【手把手带你Godot游戏开发 第一弹】零基础入门案例:FlappyBird(教程目录及源代码)https://orzgame.blog.csdn.net/article/details/105266192
  3. 【手把手带你Godot游戏开发 第二弹】名场面临摹https://orzgame.blog.csdn.net/article/details/105342392
  4. Godot 4.0中的基于有向距离场SDF(Signed Distance Field)的实时全局光照技术:https://orzgame.blog.csdn.net/article/details/107008958

有关Godot Engine 4.0横空出世,Vulkan大怪兽加持,画质提升简直亮瞎眼的更多相关文章

  1. python - 为 Windows 构建 Vulkan 工具 - 2

    我正在尝试构建适用于Windows的Vulkan工具。对于我使用的构建:Windows7x64VisualStudio2012cmake3.6.1python3.5我在windowsbat文件中从命令提示符设置的那个参数,在CMake工作期间我在CMakeError.log中有以下错误:LINK:fatalerrorLNK1104:cannotopenfile'MSVCRTD.lib'.当我打开创建的CompilerIdCXX.vcxproj并尝试构建它时,如果我将路径添加到它正常构建的所需库,我会遇到类似的问题。在CMake文件中,我尝试使用命令link_directories添加库

  2. windows - Vulkan 在 Linux 上找不到物理设备 - 2

    我一直想使用新的图形APIVulkan,并且已经在Windows7上顺利启动并运行它。但是我无法让Vulkan在Linux上工作。当我尝试运行任何LunarG示例,甚至是我自己的代码时,vkEnumeratePhysicalDevices总是说没有物理设备。这是我的设置:OS:Ubuntu16.04(LTS)[x64]GPU:NvidiaGeforceGT7302GBGDDR5Driver:NVIDIABinarydriver-version364.19fromnvidia-364(opensource)VulkanSDK:LunarGv1.0.17.0[latestversion]我

  3. D3D11和Vulkan共享资源 (一) - 2

    很久以前研究过用NV_DX_interop扩展让D3D和OpenGL共享资源,OpenGL在当初设计的时候电脑和操作系统还是个相对比较简单的东西,因此OpenGLAPI设计没有考虑到现在计算机架构的一些特性,比如多核编程和多显卡并发。最近几年出来个Vulkan来接OpenGL的班,所以继续走起研究下D3D11和Vulkan的共享。Vulkan主程序用了vulkantutorial下面的一个教程Combinedimagesampler,这段代码演示了把一个纹理vkImage贴到一个3D的四边形面上.接下来是尝试打通一个D3D11Texture2D和这个vkImage存放图像数据的buffer,这

  4. 模糊视频画质修复方法 - 2

    当我们找到的一些视频是几十年前的,画质特别差,有什么方法可以修复画质呢。我们知道一些传统的视频画质修复方法,比如:调整视频的对比度和亮度:通过增加对比度和亮度,可以使图像更加清晰,细节更加明显。使用滤镜:使用一些滤镜可以帮助去除视频中的噪点和模糊感。例如,可以使用去噪滤镜和锐化滤镜。调整视频分辨率:将视频的分辨率调整为更高的分辨率,可以使图像更加清晰。使用视频修复软件:有一些专门的视频修复软件可以帮助修复模糊的视频画质,例如AdobePremiere、FinalCutPro等。纠正视频的色彩:通过调整视频的色彩平衡和色温,可以使图像更加清晰。使用插值技术:插值技术可以增加视频的帧数,从而改善视

  5. c++ - Vulkan:转储当前分配的对象? - 2

    每当Vulkan中的一个对象被销毁,启用VK_LAYER_LUNARG_object_tracker层,并安装调试报告时,它会报告销毁调用并通过回调给出剩余对象的总数。例如:INFO:[OBJTRACK]:OBJ_STATDestroyVK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXTobj0xcf43130(217totalobjsremain&1VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXTobjs).有没有什么方法可以获取有关仍在分配的对象的信息?编辑:检查object_tracker层(https:

  6. c++ - 如何解决 vulkan 黑屏问题? - 2

    我刚刚浏览了LunarG“drawcube”示例并将代码合并到我的引擎中。当我运行时,我得到一个黑屏,因为黑色是清晰的颜色。我可以将透明颜色更改为不同的颜色并查看。但是,我的几何图形根本不渲染。不会生成错误或警告。我的问题是,如何解决此类问题? 最佳答案 RenderDoc与VulkanSDK(至少在Windows上)一起安装,并且是一个框架调试器,类似于PIX/Diagnostics、CodeXL和Nsight。它可以让您了解图形管道如何处理您的数据。您还应该启用validationlayers(特别是VK_LAYER_LUNAR

  7. c++ - 在 C++ (Vulkan) 中处理 C 代码 - 2

    我正在尝试使用基于Vulkan的C++编写渲染引擎。Vulkan是用C语言编写的,因此它有一些有趣的约定。我在Vulkan应用程序的教程/代码片段中看到的一个反复出现的模式是,大多数代码都在一个非常大的类中。(现在我的vulkan类也已经有大约2000行)。但是为了制作一个合适的渲染引擎,我需要将我的代码划分到一定程度。前面提到的一个有趣的地方是它有一个叫做逻辑设备的东西,它是对显卡的抽象引用。它无处不在,以下列方式创建和分配事物:使用创建信息创建结构创建代码将输出到的变量调用实际的vkCreateSomething或vkAllocateSomething函数,传入逻辑设备,创建信息和

  8. c++ - Vulkan - 我应该什么时候创建新管道? - 2

    所以我想在Vulkan中渲染两个独立的网格。我正在涉足纹理,第一个网格使用其中的4个,而第二个使用5个。我正在做索引绘制。为简单起见,每个网格都有自己的统一缓冲区和采样器数组,打包到单独的描述符集中,每个都有一个UBO绑定(bind)和另一个采样器绑定(bind)。为每个网格运行以下代码,其中descriptorSet是与单个网格关联的描述符集。filepaths是特定用途的图像路径vector。std::vectordescriptorWrites;descriptorWrites.resize(2);VkDescriptorBufferInfobufferInfo={};buffe

  9. c++ - 有没有办法在不覆盖实际分配的情况下使用 vulkan 内部分配回调? - 2

    当为vkCreate*函数指定一个VkAllocationCallbacks结构时,我想只使用vulkan通知而不覆盖真正的分配器,但我找不到如何做。来自https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/VkAllocationCallbacks.htmlpfnAllocation必须是指向有效用户定义的PFN_vkAllocationFunction的有效指针pfnReallocation必须是指向有效用户定义的PFN_vkReallocationFunction的有效指针pfnFree必须是指

  10. c++ - 无法使用 vkCreateWin32SurfaceKHR 创建 vulkan 表面 - 2

    我想将vulkan与SDL2一起使用,但我停留在表面创建阶段,我无法使用vkCreateWin32SurfaceKHR扩展函数以及VkWin32SurfaceCreateInfoKHR扩展结构,因为它们未定义,虽然我在使用其他扩展元素(如(vkGetPhysicalDeviceSurfaceSupportKHR等..))时没有任何问题,但表面扩展是否需要单独的头文件?我怎样才能让它工作?我使用的预处理器指令如下#include#include#include#include#include#include#defineVK_USE_PLATFORM_WIN32_KHR请注意,我在没有任

随机推荐