MIT 许可证 NuGet

为可理解性而生的图形引擎

季节引擎是一个面向实时 2D 与 3D 应用的跨平台 C# 图形引擎与应用框架。 PBR 材质、glTF 动画、级联阴影与全局光照是默认基线——而不是升级路径。

第一次来?它为什么存在 · 与 MonoGame、Godot 和 Stride 的对比 · 两个示例应用

运行参考应用:

Microsoft Store Windows 计划中 计划中
季节引擎渲染效果

纯 C# 的次世代渲染器。无编辑器、无回退路径。

引擎从设计上就是代码优先、无编辑器的。没有需要学习的场景编辑器,也没有需要接手的项目格式: 你在普通 C# 中声明 Sprite2DModelInstancedModel, 而 AddControl / AddPanel 统一定义 2D 与 3D 的加载顺序与分层。

集成本身就是产品

绑定止步于 API 边界。PBR、glTF 蒙皮、阴影、DDGI、GTAO、TAA、动态昼夜天空、MSDF 文本与 2D 精灵 都在这里装配完成,让它们在四个图形 API 上、通过同一套 API 表面协同工作。

每个领域只有一种实现

动画只用 glTF。文本只用 MSDF。每个平台一种图形 API——没有 OpenGL 或 WebGL 回退。 平台差异被限制在 DeviceServices 之内。

声明式批量实例化

声明一个 InstancedModel 即可同时绑定多个对象, 支持逐实例蒙皮与变形目标。普通 C#,无需采用第二种范式, 而且你永远不需要手写 Draw 调用。

完整 PBR

金属度-粗糙度材质、法线、遮蔽与自发光贴图,直接从 glTF 导入。

DDGI 全局光照

SDF 体素化动态 GI,配备探针辐照度图集与 Chebyshev 遮蔽。

本地 AI 层

ONNX 与 GGML 后端,一套 API:文本、图像、视频、音乐、语音与视觉。

四个后端

Direct3D 12、Vulkan、Metal 与 WebGPU,每个后端都有自己手写的着色器集。

glTF 2.0 动画

蒙皮、变形目标、动画剪辑与逐实例骨骼调色板——唯一的动画格式。

级联阴影

三张太阳级联加一个点光源槽位共用一张图集,并支持逐级联光源空间剔除。

程序化天空

基于 LUT 的大气散射、昼夜循环、空气透视与程序化云层。

MSDF 文本

与分辨率无关的字形图集,由引擎在每个后端上完成排版与实例化。

代码与结果并排

一个面板、两个模型和一个质量开关。没有绘制调用,也没有渲染通道接线。

using Season.Basic;
using Season.Controls;
using Season.Panels;
using Season.Rendering;

internal class Island : Panel
{
    internal Island()
    {
        AddControl(new Model
        {
            Name = "Assets/island.glb",
            PosY = 0f,
            Width = 60f, Height = 12f, Depth = 60f
        });

        AddControl(new Model
        {
            Name = "Assets/robot.glb",
            Highlight = { Style = HighlightStyle.Wireframe },
            PosX = 6f, PosY = 1f, PosZ = 4f,
            Rotation = MathF.PI / 2f
        });
    }
}

internal class IslandApp : BaseApp
{
    internal IslandApp()
    {
        Title = "Island";
        BasicResolution = new Vector2(1920f, 1080f);
        RenderQuality.DefaultGlobalIllumination = GiMode.Ddgi;
    }

    public override void Create()
    {
        base.Create();
        AddPanel(new Island());
    }
}
动态全局光照照亮的室内 DDGI · GTAO · TAA · Direct3D 12
光照、阴影与间接弹射都来自管线默认值——上面的场景代码从未提及它们。

跨平台靠隔离,不靠抽象

面向应用的模型是共享的。每个平台保留自己的渲染器与自己的着色器, 平台专属能力隐藏在 DeviceServices 之后。

平台

Windows Linux macOS iOS Android

后端

Direct3D 12 Metal Vulkan WebGPU
平台目标框架入口点后端
Windowsnet10.0-windows10.0.19041.0WindowsApp.Run(app)Direct3D 12
Linuxnet10.0LinuxApp.Run(app)Vulkan
Androidnet10.0-androidAndroidApp.Run(app)Vulkan
iOSnet10.0-iosiOSApp.Run(app)Metal
Mac Catalystnet10.0-maccatalystMacCatalystApp.Run(app)Metal
Webnet10.0-browserWebApp.Run(app, ...)WebGPU 路径

固定 Pass 调度,而非帧图

帧的形状在引擎代码中一目了然。它牺牲了一些调度通用性, 换来一条可阅读、可调试、可在四个后端间对齐的管线。

FrameStart Compute Shadow Scene AfterScene Compute Post FinalBlit Overlay

Compute 特效注册进两个 compute 阶段,当后端无法运行它们时不留任何残留, 因此 bloom、GTAO、TAA、DDGI 与天空 LUT 无需触碰场景模型即可扩展管线。

BaseApp
  -> Panel tree
     -> Controls (Sprite2D, Texts, Shape, Mesh3D, Model, InstancedModel, ...)
        -> IGraphics backend
           -> Direct3D 12 / Vulkan / Metal / WebGPU

实际实现了什么

对照源码审计,而非对照营销文案。列出缺失项与列出已交付项是同一个原因。

能力状态实现位置
带 compute 阶段的固定 Pass 调度已发布Rendering/RenderPass.cs
Bloom、GTAO、TAA、深度调试视图已发布Rendering/Effects/
DDGI 动态全局光照已发布Effects/Ddgi.cs
天空大气、昼夜循环、云层已发布Effects/SkyAtmosphere.cs
级联阴影贴图(3 太阳级联 + 1 点光源)已发布Rendering/CascadedShadow.cs
支持蒙皮与变形目标的 GPU 实例化已发布Controls/InstancedModel.cs
逐实例拾取与高亮模式已发布Panels/ObjectPicker.cs
参考应用中的属性编辑部分固定字段,暂无属性网格
场景序列化、保存与加载缺失暂无场景格式
间接绘制、纹理压缩、遮挡剔除缺失已排入路线 A

阅读完整的审计基线与路线图 →

参考应用

Apps/Engine 不是一个极简演示。它是所有系统同时运行时 用来验证渲染器的应用——同时兼任回归测试目标。

岛屿场景上空的程序化天空 天空大气
基于物理的散射,而非天空盒纹理。
显示中间渲染目标的调试模式 调试模式
深度、速度、AO、GI 探针与后处理阶段,实时可见。
岛屿场景中的对象拾取与高亮 拾取 · 高亮
逐实例表面拾取,支持线框与描边样式。

AI 层

本地推理是一套独立的技术栈,位于引擎旁,而非渲染器内部。 它的贡献不是另一个后端——而是让依赖繁重的本地模型在真实应用中变得实用: 一套 API 同时覆盖 ONNX RuntimeGGML、 版本一致的本地运行时,以及打包好的 CUDA / cuDNN 依赖,而不是一份手工安装指南。

今日的库

文本与翻译、图像生成与编辑、视频、音乐、带声音克隆的文本转语音、语音转文本、视觉与 OCR。

文本翻译图像 视频音乐TTS STT视觉

后端选择覆盖 CPU、DirectML 与 CUDA。模型权重从不捆绑:每个面板 都链接到它的源仓库。

未来方向

  • 生成的资产作为引擎资源流回场景。
  • 在本地后端之外,可选的外部云端 API。
  • C# 代码生成,让智能体可以从一句提示组装出图形应用。

引擎核心与基础 AI 库均为 MIT。SeasonAI, 这个产品化的应用层,是商业部分——正是这种拆分资助了开源工作。

参考应用内的本地图像生成
本地图像生成与渲染器运行在同一个应用中。

完整的本地 AI 层 →  — 包括每项能力背后的运行时, 以及生成图像与引擎资产之间仍然存在的鸿沟。

开始使用

添加库

dotnet add package SeasonEngine

或者直接从仓库克隆中项目引用。

<ProjectReference Include="..\Season\Season.csproj" />

运行参考应用

git clone https://github.com/SeasonRealms/SeasonEngine.git
cd SeasonEngine
dotnet run --project Apps/Engine/Engine.csproj -f net10.0-windows10.0.19041.0

在 Linux 上使用 -f net10.0。 需求与各平台说明见 入门指南