AnvilKitAnvilKit

架构概览

AnvilKit 引擎的整体架构设计

三大支柱

引擎围绕三大支柱构建:

  • 渲染 — Canvas2D (2D)、Canvas3D (3D)、帧捕获,以及完整的 PBR 管线
  • AI 接口 — MCP 服务器提供 17 个工具(视觉/控制/状态/场景),让代理能看到并操作游戏
  • 运行时GameCallbacks 生命周期 + bevy_app 调度系统

Crate 结构

引擎(总括):      anvilkit
运行时:           anvilkit-app (GameCallbacks, 调度, 状态, 插件)
渲染:             anvilkit-render (Canvas2D, Canvas3D, PBR 管线, 帧捕获, transform)
核心:             anvilkit-core (数学, 时间, 错误, 持久化)
资产:             anvilkit-assets
输入:             anvilkit-input
音频:             anvilkit-audio
AI Describe:     anvilkit-describe + anvilkit-describe-derive
AI MCP:          anvilkit-mcp (17 个工具: spawn_object, press_key, capture, save_scene 等)

游戏级(不在总括中):
  anvilkit-camera, anvilkit-gameplay, anvilkit-data

注意: anvilkit-ecs 已不存在。其调度、插件系统和状态机已迁移至 anvilkit-app

分层架构

AnvilKit 采用分层模块化设计,每层只依赖下层:

Scroll to zoom · Drag to pan · Click ⛶ for fullscreen

Crate 依赖图

Scroll to zoom · Drag to pan · Click ⛶ for fullscreen

每帧生命周期

Scroll to zoom · Drag to pan · Click ⛶ for fullscreen

ECS Schedule 阶段

阶段时机典型系统
Startup初始化时运行一次资源设置,初始生成
Main每帧最先执行(预留,用于全局逻辑)
PreUpdate每帧 Update 之前DeltaTime 同步、父子层级同步
FixedUpdate每帧 0-N 次(累加器)确定性物理、固定速率游戏逻辑
Update每帧主逻辑输入、物理、游戏逻辑、相机
PostUpdate每帧 Update 之后Transform 传播、渲染提取
Cleanup每帧最后(预留)

Feature Flags

CrateFeature启用功能
anvilkit-coreserdeTransform, GlobalTransform 的序列化
anvilkit-corepersistenceSaveManager, Settings, WorldStorage
anvilkit-corebevy_ecs数学类型的 Component derive
anvilkit-appserdeECS 组件序列化
anvilkit-assetshot-reloadnotify 文件监视热重载
anvilkit-assetsbevy_ecsSkeleton, AnimationPlayer 的 Component derive
anvilkit-gameplaystatsStats、Health、DamageEvent、health_system
anvilkit-gameplayinventorySlotInventory、StackInventory、ItemStack
anvilkit-gameplaycooldownCooldown、cooldown_tick_system
anvilkit-gameplaystatus-effectStatusEffect、StatusEffectList、StackPolicy
anvilkit-gameplayentity-poolEntityPool 实体回收

模块概览

anvilkit-core

基础类型库:数学工具 (Vec3, Mat4, Transform, GlobalTransform, 插值)、时间系统 (Time, Timer)、错误类型 (AnvilKitError,with_context 保留原始错误类别)、持久化系统 (SaveManager, Settings, WorldStorage — 均返回 Result<_, AnvilKitError>)。Aabb 轴对齐包围盒、Frustum 和射线投射工具 (screen_to_ray, ray_plane_intersection, ray_sphere_intersection) — 在 v0.3 中从 render crate 迁移而来。持久化错误类别 (AnvilKitError::Persistence),支持 category-preserving 的 with_context。

anvilkit-render

统一 2D/3D 渲染,提供代理友好的入口:

  • Canvas2D:即时模式 2D 绘图(矩形、文本、精灵)
  • Canvas3D:场景图 3D API,支持 PBR 材质和相机控制
  • 帧捕获capture_frame() 返回渲染像素 — 让 AI 代理能看到游戏
  • PBR 材质系统 (Cook-Torrance BRDF, 5 种纹理贴图)
  • HDR 渲染 (Rgba16Float) + ACES Filmic 色调映射
  • Bloom (13-tap 降采样 + 9-tap tent 上采样, 5 级 mip)
  • SSAO (半球采样, 半分辨率, 深度重建法线)
  • 级联阴影贴图 (3 级级联, D2Array, PCF)
  • IBL (BRDF LUT + 环境辐照度)
  • MSAA 4x 抗锯齿
  • GPU 骨骼动画 (线性混合蒙皮, 128 关节)
  • 视锥剔除 + GPU 实例化 + 批次排序
  • Sprite、Line、Particle、Text、UI 渲染器
  • StandardMaterial 组件 (PBR builder 模式)
  • PostProcessSettings (SSAO/DOF/运动模糊/Bloom/色彩分级)
  • 正交/透视投影枚举, 多相机优先级
  • PipelineCache/BindGroupCache
  • 点光/聚光阴影系统 (ShadowAtlas)
  • events.rs 拆分为 6 个文件 (events/ 目录), draw.rs 拆分为 5 个文件 (draw/ 目录)
  • CachedBuffer 共享工具替代 5 处重复的 cached_vb 模式
  • ProjectionUniform 共享类型替代 5 处重复的 ortho 结构体
  • DebugRenderer 合并至 LineRenderer

anvilkit-assets

资产管线:glTF 模型加载(网格、材质、骨骼、动画)、AssetServer(同步+异步加载,去重)、AssetHandle (Arc 引用计数)、程序化网格生成、文件监视热重载。DependencyGraph 用于资产依赖追踪(基于 AssetId)。AssetCache 集成(内容哈希去重)。通过依赖图实现级联卸载。insert_parsed/get_parsed 用于类型化资产存储。

anvilkit-audio

基于 rodio 的音频系统:AudioSource ECS 组件、AudioBus(master/music/sfx/voice 音量混合)、空间音频(通过 AudioListener 距离衰减)、循环播放和变调控制。NonSend 资源模式确保 macOS CoreAudio 的线程安全。通过 listener right 向量实现立体声平移。通过 AudioSource.asset_id 集成资产系统。

anvilkit-input

输入抽象:InputState(键盘/鼠标 pressed/just_pressed/released、mouse_delta、scroll_delta)、GamepadState(16 个按钮、6 个轴)、ActionMap(逻辑动作 -> 物理绑定)、ActionId(零分配查询)、AxisBinding(键盘/手柄模拟轴)。InputPlugin 用于自动资源初始化。ActionMap 支持 apply_overrides 按键重绑定。手柄事件转发。

anvilkit-camera

生产级相机系统,5 种模式 (FirstPerson/ThirdPerson/Orbit/Free/Rail)。OrbitState 组件、CameraRig 实体跟随、SpringArm 碰撞避免、Trauma+Perlin 噪声抖动、CameraTransition 过渡混合 (5 种缓动)、LookAtTarget 软约束、CameraRail 推轨 (Catmull-Rom)、InputCurve 死区+响应曲线。8 系统管线,帧率无关平滑。

anvilkit-app

游戏应用运行器,消除样板代码。AnvilKitApp::run() 管理 winit 事件循环、输入转发、DeltaTime 和帧生命周期。游戏实现 GameCallbacks(init、post_update、render、on_resize、on_window_event)并传入 GameConfig(标题、窗口尺寸、垂直同步)。通过 GameContext 提供对 ECS AppRenderApp 的访问。重构后,anvilkit-app 还包含调度、ECS 插件系统和状态机(之前在已删除的 anvilkit-ecs 中)。

anvilkit-describe

AI 优先的内省机制:Describe trait 及其 derive 宏,允许引擎类型输出可被 AI 代理消费的结构化描述。配套的 anvilkit-describe-derive crate 提供 proc macro。

anvilkit-mcp

MCP(Model Context Protocol)服务器,提供 17 个工具,向 AI 代理暴露引擎状态和控制接口。工具类别:视觉(capture_frame、describe_scene)、控制(press_key、move_mouse、spawn_object)、状态(get_component、set_component)、场景(save_scene、load_scene)。让代理能看到并交互运行中的游戏。

anvilkit-gameplay

可选的、按 feature 门控的游戏性构建模块:stats(通用属性系统,支持加法/乘法/覆盖修饰器)、health(Health 组件,含自动回血、DamageEvent、HealEvent、DeathEvent、health_system)、inventory(基于槽位的可堆叠物品栏)、cooldown(技能/动作冷却计时器)、status-effect(基于持续时间的状态效果,支持堆叠策略)、entity-pool(实体回收对象池)。

anvilkit-data

数据驱动配置与本地化:DataTable(从 RON/JSON 加载的类型化键值表)、Locale(带回退链的翻译查找)、DataTablePlugin ECS 集成。

坐标系

AnvilKit 使用左手坐标系

  • +X 向右
  • +Y 向上
  • +Z 向屏幕内(前方)

投影使用 perspective_lhlook_at_lh

目录