游戏引擎Flax Engine源码分析(一)综述

 2021SC@SDUSC


 一、概述

        第一篇综述主要介绍我们分析的项目和一些暂定的分工。这个过程将通过项目网站和项目部署的过程进行。 

        Flax Engine是一款开源的轻量级游戏引擎,跨平台支持(Windows、Linux、Android、PS4.Switch、Xbox One、Xbox Series X/S、UWP...),是由游戏开发者为游戏开发者制作的一整套游戏开发工具。

        网站地址:

 Flax - Flax Engine

        Flax Engine前身是由波兰的Wojtek Figat作为首席开发人员开发的Celelej,目前已更新到Flax1.2版本。Flax1.0于2020年底推出同时开放源代码,有关引擎开发过程的更多内容可到官方网站上自行查看开发博客。


 二、软件

         因下载安装Flax Launcher的过程较为简单,不再赘述,以下是安装好后的软件截图:

        仅下载Launcher App是无法进行游戏开发的,需要在客户端的Engine界面下载对应版本的Flax Engine。 

 编辑器Editor:


三、项目部署

        接下来将介绍项目源码部署过程 。

        首先登陆Flax官网,点击GET STARTED NOW:

 

         进入下载页面,该页面最底部即该项目源码地址,也可点击此处进入GitHub

         下图是项目所在,我们现在主要关注源代码部分:

        点击FlaxEngine进入:  

         我们首先看它的README部分,它一般会介绍项目部署的方法和一些注意事项。因此,我们在其中看到了Windows系统下部署该项目的方法:

用于 Visual Studio 的 Flax 插件

Flax Visual Studio 扩展提供更好的编程工作流、C# 脚本调试功能,并允许附加到正在运行的引擎实例以调试 C# 源代码。我们可以直接使用Visual Studio搜索该插件安装。

Windows

  • 安装 Visual Studio 2015 或更新版本
  • 安装 Windows 8.1 SDK 或更新版本
  • 安装 Microsoft Visual C++ 2015 v140 工具集或更新版本(下载安装Visual Studio的过程不在该博客阐述)
  • 克隆源码(使用 LFS)
  • 运行GenerateProjectFiles.bat
  • 打开Flax.sln并将解决方案配置设置为Editor.Development和解决方案平台为Win64
  • 将 Flax (C++) 或 FlaxEngine (C#) 设置为启动项目
  • 编译 Flax 项目(按 F7 或 CTRL+Shift+B)
  • 运行Flax(按 F5 键)

下载安装VS的过程不在该博客阐述,请读者自行搜索其他博客。我将直接从克隆源码仓库开始:

 (1)Clone repo

点击右上角的Code,复制URL:

         这里我们注意到上面项目的README.md中Clone repo(with LFS)也就是说,这里我们需要用到Git的大项目管理工具LFS(提到LFS,全称Git Large File Storage,GitHub 限制了存储库中允许的文件大小。要跟踪超出此限制的文件,需要使用 Git Large File Storage),也就是说Flax Engine的源代码大小超过了100MB,Git LFS 具体使用方法可到GitHub文档的存储库/处理文件/管理大文件查看,这里我们不需要管理,仅需要下载编译,使用更简单的方式。

        下载GitHub Desktop,新版本的GitHub Desktop自带LFS,我们将上面复制的源代码下载URL粘贴到此处,接下来就等待项目下载完毕:

 下载完毕: 

 (2)运行GenerateProjectFiles.bat

 (3)使用VS进行项目编译 

        在解决方案处找到Flax.sln:

         

点击后项目结构变更为(请忽略此处的已忽略标志,因为我更改分支后未重新编译):

         

        按步骤将解决方案配置设置为Editor.Development和解决方案平台为Win64 ,将 Flax (C++) 或 FlaxEngine (C#) 设置为启动项目:

        点击编译( F7 or CTRL+Shift+B): 

         编译完成:

         运行FlaxEngine(C#),因为运行Flax(c++)需要打开具体Flax项目,这里不做演示:

         至此,项目部署完毕。

四、项目结构

        我们首先看看官方文档给出的项目结构:

如下: 

工作区目录

  • Binaries/ - 可执行文件
    • Editor/ -Flax Editor二进制文件
    • Tools/ - 工具二进制文件
  • Cache/ - 引擎和工具使用的本地数据缓存文件夹
    • Intermediate/ - 引擎构建的中间文件和缓存
      • ProjectName / - 每个项目的构建缓存数据
      • Deps/ - Flax.Build 依赖项构建缓存
    • Projects/ - 项目文件位置
  • Content/ - 引擎和编辑器使用的资产和二进制文件
  • Development/ - 引擎开发文件
    • Scripts/ - 实用程序脚本
  • packages/ - Nuget 包缓存位置
  • Source/ - 源代码涂层
    • Editor/ - Flax 编辑器源代码
    • Engine/ - Flax 引擎源代码
    • Platforms/ - 每个平台的源和依赖文件
      • DotNet/ - C# 依赖项
      • Editor/ -亚麻编辑器二进制文件
      • PlatformName / - 每个平台的文件
        • Binaries/ - 每个平台的二进制文件
          • Game/ - 亚麻游戏二进制文件
          • Mono/ - Mono 运行时文件和数据
          • ThirdParty/ - 预构建第三方二进制文件
    • Shaders/ - 着色器源代码
    • ThirdParty/ - 第三方源代码
    • Tools/ - 开发工具源代码

         再来看一下我们编译之后的目录:

        

        

         这里将c++代码和c#代码分离了,具体原因和区别我暂时不清楚,不过也能明显看到一些第三方工具和平台支持是使用c++。

        接下来是引擎的目录结构:

         接下来我的工作是分析引擎渲染部分的代码,也就是Renderer和Render2D的部分,但后续是否会增加其他部分的分析需要根据后续分析的情况而定。

        和我同组的其他组员将分析引擎其他一些部分的代码。

        以上是这次项目的综述,了解并部署了项目,后续将进行源码的分析阶段,也是学习的过程。

        

Flax is a popular deep learning library built on top of JAX, a high-performance scientific computing library for Python. It provides an easy-to-use API for defining and training neural network models, while leveraging the speed and efficiency of JAX's Just-In-Time (JIT) compilation and automatic differentiation. In the context of Flax, a model typically refers to a class or a set of functions that define the architecture of a neural network. It includes layers, activation functions, and parameters that are learned during training. Flax supports various types of models, such as feedforward networks, convolutional neural networks (CNNs), recurrent neural networks (RNNs), transformers, and more. Here are some key aspects of the Flax Model: 1. **Structured State**: Flax uses a structured state format, where all learnable parameters are stored in a single object, making it easier to manage and apply weight updates. 2. **Functional API**: The library encourages functional programming style, allowing users to create complex models using compositions of simple functions, which makes code more modular and testable. 3. **Module System**: Flax uses a hierarchical module system that allows you to create and reuse sub-modules, enabling code reusability and organization. 4. **Modularity**: Models are composed of individual modules, each with their own forward pass function, making it simple to experiment with different architectures. 5. **Dynamic Shapes**: Flax handles variable-size inputs and dynamic shapes efficiently, which is crucial for sequence modeling tasks.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值