limonEngine:基于多平台技术的3D游戏引擎项目

3D FPS game engine with full dynamic lighting and shadows

分支25Tags5
当前项目代码仓暂无内容

LimonEngine

Limon 是一款跨平台 3D 游戏引擎,主要专注于第一人称游戏开发。其开发重点在于易用性和易学习性。

功能概述

  • 可配置的基于节点的渲染管线编辑器
    • 自动扫描着色器,通过反射创建节点
    • 用于阶段设置/帧渲染/清理的 CPU 端扩展端点
    • 基于标签的过滤,可针对特定对象定位特定阶段
    • 多线程 4 阶段过滤,包括每个摄像机的视锥体和遮挡剔除
    • 所有渲染均由同一系统完成
  • 已发布的渲染功能
    • 级联阴影贴图,支持可选交错
    • 点阴影映射
    • SSAO(包括 CPU 端的示例渲染方法)
  • 自定义摄像机扩展,支持透视和正交投影
    • 包含对象附加摄像机、正交玩家摄像机的示例
  • 软件遮挡剔除,同时支持透视和正交摄像机
  • 刚体物理
  • 3D 空间音效、音乐和音频通道
  • 内置编辑器,带有动画序列器
  • 完全可定制的输入系统,支持游戏手柄
  • 材质编辑器
  • 自动导航网格生成和多线程寻路
  • Tracy 分析器集成,包括 GPU 阶段、扩展以及供用户使用的 API
  • 编辑器内置 Tracy 分析器服务器,方便快速查看
  • C++ 和 Python API 用于扩展,支持动态加载扩展

有关详细信息,请查看 项目网站

Windows、Linux 和 MacOS 的预构建二进制文件可在 此处获取

文档托管在 readthedocs

如果您想交流,我们有一个 Discord 频道

如需演示,请查看以下视频:

0.6 Tech Demo

有关功能,请查看功能视频:

0.6 featurette

在 Ubuntu 26.04 上从源代码构建:

步骤 1)打开终端,然后复制并粘贴以下命令

$ sudo apt install cmake git libassimp-dev libbullet-dev libsdl3-dev libsdl3-image-dev libfreetype6-dev libtinyxml2-dev libglew-dev build-essential libglm-dev

步骤 2)由于 GitHub 限制了 LFS 带宽,因此已将其移除。克隆 LimonEngine 仓库时应同时包含所有所需数据:

$ git clone https://github.com/enginmanap/limonEngine.git && cd limonEngine && git submodule update --init

步骤 3) 接下来,我们需要导航到该目录并运行 cmake:

$ mkdir build && cd build && cmake ../ && cd ..

步骤 4) 最后,我们需要导航到 build 目录,编译源代码并将 Data 目录复制到 build 目录:

$ cd build && make && cp -a ../Data .

在 Windows 上从源代码构建

Windows 平台使用 MSYS2 进行编译。像安装任何 Windows 应用程序一样安装 MSYS2 后,打开 msys2-terminal,并安装依赖项:

$ pacman -S cmake mingw-w64-x86_64-make mingw-w64-x86_64-gcc mingw-w64-x86_64-gdb cmake mingw-w64-x86_64-assimp cmake mingw-w64-x86_64-bullet mingw-w64-x86_64-SDL3 mingw-w64-x86_64-SDL3_image mingw-w64-x86_64-tinyxml2 mingw-w64-x86_64-glew mingw-w64-x86_64-glm mingw-w64-x86_64-freetype

之后,你可以在同一个终端中使用 Ubuntu 说明的步骤 2 - 4。

运行

启动:

  • 引擎需要一个参数作为要加载的世界路径
  • 如果未传递参数,则回退到 ./Data/Maps/World001.xml
$ ./LimonEngine ./Data/Maps/World001.xml

在应用程序中:

  • 按下 0 键可切换至调试模式,此时会渲染物理碰撞网格,并使玩家与物理系统分离(可飞行并穿过物体)
  • 按下 F2 键可切换至编辑器模式,该模式允许创建地图
  • 按下 +- 键可调整鼠标灵敏度
  • 按常规操作,使用 wasd 键移动,使用鼠标环顾四周

在编辑器模式中:

  • 所有资源会自动扫描并列出,可通过筛选小部件进一步筛选
  • 3D 对象资源利用世界光照信息提供预览
  • 纹理提供预览
  • 创建对象后,可在编辑器中或运行时通过 API 更改质量;引擎会自动交换碰撞形状(全网格/烘焙网格与凸包)并重新注册到物理系统。这对始终为运动学的动画对象无影响
  • 无生命对象不允许拥有 AI
  • 可在编辑器中为门等物体创建动画。创建动画时,时间步长为每秒 60 帧
  • 当通过动画编辑器创建新动画时,用于创建动画的对象将被假定拥有此动画。可使用“移除动画”按钮将其移除
  • 可创建透视相机,将其附加到使用序列器制作动画的对象上,并激活相机以实现过场动画或类似的相机效果

使用 C++ 和 Python 进行扩展

  • Limon Engine 有 5 种扩展类型:
    • Actions(动作):用于触发器和按钮
    • AI(人工智能):用于角色
    • Player(玩家):用于输入处理
    • Camera Attachment(相机附件):用于自定义相机行为(透视和正交)
    • RenderMethod(渲染方法):用于自定义 GPU 渲染图元,并接入渲染管线编辑器
  • 所有扩展类型均通过相同的统一参数约定进行配置,且可从 C++ 或 Python 中使用
  • 统一参数自动提供序列化和编辑器界面,以及与引擎和其他扩展的通信功能
  • 引擎尝试从以下位置加载自定义 C++ 扩展:Windows 系统为 libcustomTriggers.dll,GNU/Linux 系统为 libcustomTriggers.so,macOS 系统为 libcustomTriggers.dylib。如果在地图中使用了某个自定义扩展而对应的库缺失,则该自定义扩展将无法工作,但地图的其他部分不受影响。Python 扩展可从脚本文件中发现,无需单独的库

详情请参阅 documentation