Skip to content
Jenwein edited this page Feb 11, 2026 · 1 revision

项目概述

**本文档中引用的文件** - [README.md](file://README.md) - [premake5.lua](file://premake5.lua) - [Razel.h](file://Razel/src/Razel.h) - [Application.h](file://Razel/src/Razel/Core/Application.h) - [Scene.h](file://Razel/src/Razel/Scene/Scene.h) - [Renderer.h](file://Razel/src/Razel/Renderer/Renderer.h) - [Entity.h](file://Razel/src/Razel/Scene/Entity.h) - [ScriptEngine.h](file://Razel/src/Razel/Script/ScriptEngine.h) - [Vulkan.h](file://Razel/src/Razel/Platform/Vulkan/Vulkan.h) - [Event.h](file://Razel/src/Razel/Core/Events/Event.h) - [TypeDescriptor.h](file://Razel/src/Razel/Reflection/TypeDescriptor.h) - [RazelLauncherApp.cpp](file://Razel-Launcher/src/Razel/RazelLauncherApp.cpp) - [RuntimeApplication.cpp](file://Razel-Runtime/src/RuntimeApplication.cpp) - [Razelnut.cpp](file://Razelnut/src/Razelnut.cpp) - [Application.cs](file://Razel-ScriptCore/Source/Razel/Core/Application.cs)

目录

  1. 简介
  2. 项目结构
  3. 核心架构设计
  4. 分层架构
  5. 组件系统(ECS)
  6. 技术优势
  7. 子项目关系与职责划分
  8. 版本分支策略
  9. 结论

简介

Razel引擎是一个高性能、模块化的游戏和图形应用开发引擎,旨在为游戏开发者和图形应用开发者提供一个强大而灵活的开发平台。该项目的愿景是通过现代化的C++架构和跨平台支持,实现卓越的性能和可扩展性。Razel引擎的核心定位是作为一个高性能的实时渲染和交互式应用框架,支持复杂的场景管理、物理模拟、音频处理和脚本集成。

根据README文件,Razel引擎的最新发布版本为2024.1,推荐用户在开始新项目时使用最新的发布分支,以确保稳定性和质量保证。对于希望尝试最新功能的用户,可以使用开发分支(dev),但需要注意该分支可能不够稳定。引擎支持多种构建配置,包括调试、发布和分发版本,以满足不同开发阶段的需求。

Section sources

  • README.md
  • premake5.lua

项目结构

Razel引擎的项目结构清晰地划分为多个子项目和模块,体现了其模块化的设计理念。根目录下包含主要的子项目:Razel(核心引擎)、Razelnut(编辑器)、Razel-Launcher(启动器)、Razel-Runtime(运行时)和Razel-ScriptCore(脚本核心)。每个子项目都有独立的源代码目录和构建配置,便于独立开发和维护。

核心引擎Razel包含平台特定的实现(Linux和Windows)、工具(BinaryEmbedder)和主要的源代码。源代码组织在src/Razel目录下,按功能划分为动画、资源、音频、核心、编辑器、数学、物理、平台(Vulkan)、项目、反射、渲染器、场景、脚本、序列化、分层和工具等模块。这种组织方式使得代码结构清晰,易于导航和维护。

Section sources

  • premake5.lua
  • Razel/src/Razel

核心架构设计

Razel引擎的核心架构设计基于分层架构和组件模式(ECS),旨在提供高性能和灵活性。核心组件包括应用程序管理、场景管理、渲染器、实体-组件系统和脚本引擎。应用程序类(Application)是引擎的入口点,负责初始化、运行循环和事件处理。它通过分层堆栈(LayerStack)管理不同的功能层,如渲染层、UI层和游戏逻辑层。

classDiagram
class Application {
+ApplicationSpecification Specification
+Window* Window
+LayerStack LayerStack
+ImGuiLayer* ImGuiLayer
+RenderThread RenderThread
+PerformanceTimers PerformanceTimers
+ApplicationSettings AppSettings
+Init()
+Run()
+Close()
+PushLayer(Layer* layer)
+PushOverlay(Layer* layer)
+OnEvent(Event& event)
+GetWindow() Window&
+Get() Application&
}
class Scene {
+UUID SceneID
+entt : : registry Registry
+EntityMap EntityIDMap
+DirLight Light
+Ref<Environment> Environment
+ScriptStorage ScriptStorage
+OnUpdateRuntime(Timestep ts)
+OnUpdateEditor(Timestep ts)
+OnRenderRuntime(Ref<SceneRenderer> renderer, Timestep ts)
+OnRenderEditor(Ref<SceneRenderer> renderer, Timestep ts, const EditorCamera& editorCamera)
+CreateEntity(const std : : string& name)
+GetEntityWithUUID(UUID id) Entity
+GetAllEntitiesWith() auto
}
class Renderer {
+Ref<RendererContext> Context
+RendererCapabilities& Capabilities
+Ref<ShaderLibrary> ShaderLibrary
+Init()
+Shutdown()
+Submit(FuncT&& func)
+BeginRenderPass(Ref<RenderCommandBuffer> renderCommandBuffer, Ref<RenderPass> renderPass)
+EndRenderPass(Ref<RenderCommandBuffer> renderCommandBuffer)
+RenderStaticMesh(Ref<RenderCommandBuffer> renderCommandBuffer, Ref<Pipeline> pipeline, Ref<StaticMesh> mesh, ...)
}
Application --> Scene : "管理"
Application --> Renderer : "使用"
Scene --> Renderer : "渲染"
Loading

Diagram sources

  • Application.h
  • Scene.h
  • Renderer.h

Section sources

  • Application.h
  • Scene.h
  • Renderer.h

分层架构

Razel引擎采用清晰的分层架构,包括平台层、核心层、编辑器层和运行时层。平台层(Platform)提供操作系统和硬件的抽象,支持Linux和Windows平台,包含文件系统、进程、渲染线程和脚本构建器的实现。核心层(Core)包含引擎的基础功能,如应用程序管理、事件系统、输入处理、时间步进和窗口管理。

编辑器层(Editor)提供完整的开发环境,包括场景层次面板、资源管理器、材质编辑器和物理调试面板。运行时层(Runtime)专注于游戏或应用的执行,提供轻量级的运行环境。这种分层设计使得引擎可以在不同场景下灵活使用,既可以作为完整的开发套件,也可以作为独立的运行时库。

graph TB
subgraph "平台层"
Linux[Linux实现]
Windows[Windows实现]
end
subgraph "核心层"
Application[应用程序]
Events[事件系统]
Input[输入处理]
Window[窗口管理]
end
subgraph "编辑器层"
EditorLayer[编辑器层]
Panels[面板系统]
AssetManager[资源管理]
end
subgraph "运行时层"
RuntimeLayer[运行时层]
RuntimeApplication[运行时应用]
end
Linux --> Core
Windows --> Core
Core --> Editor
Core --> Runtime
Editor --> Runtime
Loading

Diagram sources

  • Razel/Platform
  • Razel/src/Razel/Core
  • Razelnut/src
  • Razel-Runtime/src

Section sources

  • Razel/Platform
  • Razel/src/Razel/Core
  • Razelnut/src
  • Razel-Runtime/src

组件系统(ECS)

Razel引擎采用实体-组件-系统(ECS)模式作为其核心架构,提供高效的数据驱动设计。实体(Entity)是场景中的基本对象,由唯一的UUID标识,并与场景关联。组件(Component)是纯数据结构,附加到实体上以定义其属性和行为。系统(System)处理具有特定组件组合的实体,实现游戏逻辑。

实体类(Entity)提供类型安全的组件操作接口,如AddComponent、GetComponent和HasComponent。组件存储在EnTT实体-组件系统注册表中,实现高性能的数据访问和迭代。这种设计使得引擎能够高效地处理大量游戏对象,并支持灵活的组合式设计。

classDiagram
class Entity {
+entt : : entity EntityHandle
+Scene* Scene
+AddComponent<T>(Args&&... args) T&
+GetComponent<T>() T&
+HasComponent<T>() bool
+RemoveComponent<T>()
+GetParent() Entity
+SetParent(Entity parent)
+Transform() TransformComponent&
}
class TransformComponent {
+glm : : vec3 Translation
+glm : : vec3 Rotation
+glm : : vec3 Scale
+GetTransform() glm : : mat4
}
class TagComponent {
+std : : string Tag
}
class IDComponent {
+UUID ID
}
class RelationshipComponent {
+UUID ParentHandle
+std : : vector<UUID> Children
}
Entity --> TransformComponent : "包含"
Entity --> TagComponent : "包含"
Entity --> IDComponent : "包含"
Entity --> RelationshipComponent : "包含"
Loading

Diagram sources

  • Entity.h
  • Components.h

Section sources

  • Entity.h
  • Components.h

技术优势

Razel引擎具备多项技术优势,使其在高性能应用开发中脱颖而出。首先,引擎支持跨平台开发,通过平台抽象层实现Linux和Windows的无缝兼容。其次,采用Vulkan作为主要渲染API,提供底层的图形硬件访问,实现高性能的实时渲染和多线程优化。

引擎集成了C#脚本支持,通过Coral托管运行时实现高性能的脚本执行和调试。反射系统(Reflection)提供类型描述和元数据查询功能,支持序列化和编辑器集成。此外,引擎包含完整的物理系统(基于JoltPhysics)、音频系统和动画系统,满足复杂应用的需求。

flowchart TD
A[跨平台支持] --> B[Linux]
A --> C[Windows]
D[Vulkan渲染] --> E[高性能图形]
D --> F[多线程优化]
D --> G[现代GPU特性]
H[C#脚本集成] --> I[实时编译]
H --> J[调试支持]
H --> K[热重载]
L[反射系统] --> M[序列化]
L --> N[编辑器集成]
L --> O[类型查询]
style A fill:#f9f,stroke:#333
style D fill:#f9f,stroke:#333
style H fill:#f9f,stroke:#333
style L fill:#f9f,stroke:#333
Loading

Diagram sources

  • Vulkan.h
  • ScriptEngine.h
  • TypeDescriptor.h

Section sources

  • Vulkan.h
  • ScriptEngine.h
  • TypeDescriptor.h

子项目关系与职责划分

Razel引擎由多个子项目组成,每个子项目有明确的职责和相互关系。核心引擎(Razel)提供基础功能和API,是其他所有子项目的基础。编辑器(Razelnut)构建在核心引擎之上,提供完整的开发环境和工具链。启动器(Razel-Launcher)负责启动和管理项目,提供用户友好的界面。

运行时(Razel-Runtime)提供轻量级的执行环境,用于部署最终应用。脚本核心(Razel-ScriptCore)包含C#脚本的公共API,使脚本代码能够访问引擎功能。这些子项目通过清晰的依赖关系组织,确保模块化和可维护性。

graph TD
A[Razel-ScriptCore] --> B[Razel]
B --> C[Razelnut]
B --> D[Razel-Runtime]
E[Razel-Launcher] --> C
E --> D
style A fill:#bbf,stroke:#333
style B fill:#bbf,stroke:#333
style C fill:#bbf,stroke:#333
style D fill:#bbf,stroke:#333
style E fill:#bbf,stroke:#333
subgraph "开发环境"
C
E
end
subgraph "运行环境"
D
end
Loading

Diagram sources

  • premake5.lua
  • Razelnut.cpp
  • RazelLauncherApp.cpp
  • RuntimeApplication.cpp

Section sources

  • premake5.lua
  • Razelnut.cpp
  • RazelLauncherApp.cpp
  • RuntimeApplication.cpp

版本分支策略

Razel引擎采用清晰的版本分支策略,以平衡稳定性和功能开发。发布分支(如2024.1)包含经过质量保证测试的稳定版本,推荐用于生产项目。这些分支会持续接收错误修复,但不会添加新功能。

开发分支(dev)是未来版本的中央开发分支,所有功能和修复分支都会合并到此分支。虽然该分支可能不够稳定,但它包含了最新的功能和改进。这种策略允许开发者在稳定性和前沿功能之间做出选择,满足不同项目的需求。

Section sources

  • README.md

结论

Razel引擎作为一个高性能、模块化的游戏和图形应用开发框架,通过其清晰的分层架构、先进的ECS设计和强大的技术栈,为开发者提供了卓越的开发体验。引擎的模块化设计使得它可以灵活地适应不同的使用场景,从完整的开发套件到轻量级的运行时库。跨平台支持、Vulkan渲染和C#脚本集成等技术优势,使其在竞争激烈的引擎市场中具有独特的地位。对于初学者,引擎提供了高层次的理解视角;对于高级开发者,其开放的架构和清晰的边界定义了系统的集成点,支持深度定制和扩展。