T.TAO
Back to Works
2026/engineering / engineering

MetalCaster

一个专为 Apple 平台打造的游戏引擎,生成式 AI 在其中是一等公民。

GameEngineRenderingMetal
MetalCaster

Metal Caster 是我尝试从第一性原理出发,为 Apple 生态系统重新思考游戏引擎设计的产物。

Metal Caster 并非要构建一个适用于所有平台和所有工作流的通用引擎,而是刻意保持了鲜明的观点:Swift + SwiftUI + Metal + ECS,仅限 Apple 平台,并将 AI 作为引擎的一等公民交互接口。

该引擎是开源的,可以通过 GitHub 访问。

为什么我开始这个项目

大多数引擎都在为灵活性和跨平台规模进行优化。
而 Metal Caster 优化的是其他方面:

  • 更优的默认设置胜过无休止的配置
  • 深度的 Apple Silicon 优化胜过可移植性
  • AI 原生创建工作流胜过手动样板代码
  • 视觉清晰度和工具优雅感胜过功能堆砌

核心理念很简单:

描述你的需求 -> AI 通过引擎工具进行构建 -> 在编辑器中进行视觉微调。

我希望这个引擎给人的感觉像是一件精密仪器:专注、极简且快速。

引擎架构

Metal Caster 以 Swift Package 组织,包含十个库模块和两个可执行程序——引擎、编辑器与工具链合计约 6.3 万行 Swift 代码

模块职责
MetalCasterMath向量、矩阵、四元数、AABB/OBB/视锥体、光线与图元求交(Möller-Trumbore、slab 测试、SAT)、样条
MetalCasterCoreECS 世界、引擎循环、事件总线、性能分析器
MetalCasterRendererMetal 抽象、渲染图、着色器编译与缓存、PBR 材质、后处理
MetalCasterScene场景图、USD 导入、相机/灯光/网格系统、光照与反射探针
MetalCasterAsset资产管线、MSL → .metallib 预编译、纹理压缩、.mcbundle
MetalCasterAI多供应商 LLM 层、9 个专业智能体、编排器、引擎快照
MetalCasterPhysics刚体、sort-and-sweep broadphase、针对碰撞体的 CPU 射线检测
MetalCasterAudio / Input空间音频、跨平台输入抽象

渲染技术栈

这是我近期投入最多的部分。渲染器围绕一个**渲染图(render graph)**构建,可以顺序调度混合的渲染与计算 Pass,并提供两条可选渲染路径:

  • Forward 路径 —— Shadow → Skybox → Mesh + Lighting → 后处理 → Blit
  • Deferred 路径 —— Shadow → G-Buffer(MRT) → 屏幕空间延迟 PBR 光照 → Skybox → 后处理

G-Buffer 打包了 albedo+metallic(RGBA8 sRGB)、normal+roughness(RGBA16F)、世界坐标(RGBA32F)以及 Depth32F 深度目标。

基于物理的着色

核心材质模型是 Cook-Torrance:GGX 法线分布、Smith 几何项、Fresnel-Schlick,由 metallic/roughness 材质属性和贴图驱动。同一套 BRDF 同时运行在 forward 多光源着色器和 deferred 光照 Pass 中。

MSLfloat3 F0 = mix(float3(0.04), albedo, metallic);
float  D  = distributionGGX(NdotH, roughness);   // GGX NDF
float  G  = geometrySmith(NdotV, NdotL, roughness);
float3 kD = (1.0 - F) * (1.0 - metallic);

光照与全局光照基础设施

  • 阴影贴图:专用 depth-only Pass(正面剔除 + 深度偏移)
  • 光照探针:存储 L2 球谐系数,在着色器中求值用于漫反射 GI
  • 反射探针:box/sphere 形状,支持视差校正的 cubemap 投影
  • 程序化大气:Rayleigh + Mie 散射;以及顶点位移驱动的动态水面

后处理栈

基于 Volume 的后处理链,运行在 ping-pong HDR 目标上:

SSAO → 高度雾 → Bloom(mip 链降采样/升采样) → 景深 → 运动模糊 → Panini 投影 → 调色 → 暗角 / 色差 / 胶片颗粒 → FXAA

编辑器级 GPU 特性

  • GPU 对象拾取:每个实体将自己的 ID 渲染到 r32Uint 目标,实现像素级精确选择;同一个缓冲还驱动基于边缘检测的轮廓描边后处理。
  • GPU 性能分析:通过 MTLCounterSampleBuffer 采集逐 Pass 时间戳,展示在编辑器中并供 Optimize 智能体使用。
  • 运行时 MSL 编译 + 管线缓存:用户和智能体编写的着色器可以热重载,无需重启引擎。
  • Compute Pass 驱动 Scene Composer 的地形工具:高度图生成、水力侵蚀、法线推导、雕刻笔刷全部以 Metal compute kernel 运行。

AI 作为引擎接口

AI 系统不是一个聊天侧边栏——它是一个控制层,通过与编辑器相同的 API 操作引擎。

  • 9 个专业智能体:Scene、Render、Shader、Asset、Optimize、Analyze、Art、Audio、Composer——每个都有限定范围的工具集(合计 30+ 工具,如 createEntityaddPostProcessmodifyShaderprofileFramegenerateColorPalette)。
  • 多智能体编排器:规划 LLM 将请求分解为按优先级排列的委派("创建 12 个建筑实体" → Scene;"霓虹发光材质" → Shader;"彩色点光源" → Render),并依次执行。
  • 快照驱动的上下文:每次调用前,引擎序列化一份 EngineSnapshot——实体层级、组件、渲染状态、draw call、帧时序——让智能体基于真实的世界状态推理,而不是凭空臆想。
  • 工具而非代码倾倒:智能体通过类型化、故障安全的工具调用改变世界,返回结构化结果,保证每个 AI 操作都可检查、可回滚。
  • PromptScript:将自然语言行为描述编译为 Swift ECS 组件和系统的编译器,附带预览运行器。
  • 多供应商:OpenAI、Anthropic、Gemini 后端统一在同一接口之下。

工具链:Shader Canvas 与 SDF Canvas

两个配套工具从引擎中生长出来,逐渐成为独立项目:

  • Metal Shader Canvas —— 独立的实时 MSL 工作台,支持图层式着色器编写和智能体编辑闭环(详见其专属页面)。
  • SDF Canvas —— 基于节点的有符号距离场编辑器,可生成 sphere tracing MSL:生成的片段着色器对 SDF 场景做 ray marching,支持软阴影(64 步 shadow marching)和 ray marching 环境光遮蔽。编辑器内还嵌入了 "Pro" 版本。

当前状态与坦诚的差距

Metal Caster 正处于活跃的 pre-alpha / 架构强化阶段,所有核心系统都已实现可运行的垂直切片:ECS 运行时、双路径渲染器、macOS 编辑器(多面板工作区、构建与运行工作流)、资产/构建管线,以及智能体系统。

仍在路线图上、如实陈述的部分:

  • 硬件光线追踪(MTLAccelerationStructure)以及探针之外的完整 GI 方案
  • 专用的粒子/VFX 系统
  • 将 Composer 智能体的地形工具和视口空间查询接入智能体管线
  • 更广的测试覆盖和大规模场景的生产强化

愿景

Metal Caster 并不打算成为下一个"全能引擎"。
它的野心更加具体:

  1. 成为 Apple 平台上最佳的原生引擎体验
    iOS、macOS、tvOS 和 visionOS —— 具备 Metal 优先的性能和 Swift 原生的易用性。

  2. 让 AI 成为主要的创作接口
    不是一个聊天侧边栏,而是一个真正的引擎控制层,能够检查状态、调用工具,并安全地构建场景/材质/系统。

  3. 构建 USD 原生的协作工作流
    将场景数据作为可组合、版本友好的资产,用于真实的团队工作流。

  4. 保持开放、可检查且性能透明
    清晰的包边界、可测量的运行时行为,以及人类和智能体都能理解的 API。

如果成功,Metal Caster 应该感觉像是游戏引擎中的"徕卡":专注、深思熟虑,且在其领域内绝不妥协。