MIT 许可证 NuGet

首页 / 与其他引擎的对比

与其他引擎的对比

最近的邻居是 MonoGame,而不是 Unity。如果你在拿一个基于编辑器的引擎 和本引擎权衡,决定性问题不是特性 — 而是你想在窗口里还是在 类里创作场景。

本页是为了有用而不是为了讨好而写。它包含了你应该选择其他方案 的情形,因为一份不这么做的对比不值得读。

C# 版图

这些都是合理的选择。它们的不同之处在于各自停在哪一层。

项目它给你什么编辑器内置 3D 渲染器
SeasonEngine 渲染器、应用外壳、2D 与 3D 控件、四种图形后端 没有,刻意如此 PBR、阴影、GI、AO、TAA、天空
MonoGame 一个 XNA 形状的框架:设备、内容管线、精灵批处理、输入 没有 你自己写,或采用社区方案
FNA 一个忠实的 XNA 4 重新实现,面向移植现有作品 没有 XNA 时代的效果
Veldrid 一个图形 API 抽象 — 引擎之下的那一层 没有 无;那不是它的职责
Zenith.NET 一个现代 RHI:D3D12、Metal 4 和 Vulkan 1.4 在一个 C# API 之下,带 bindless 句柄和 Slang 着色器 没有 无;那不是它的职责
Prowl 一个类 Unity 的开源引擎:.NET 10 上的纯 C#、仅 OpenGL 的渲染器、完整编辑器、资产管线、物理和音频 有 PBR、CSM 阴影、烘焙光照贴图与光照探针、后处理栈
Silk.NET 到 Direct3D、Vulkan、OpenGL、WebGPU 等的绑定 没有 无;那不是它的职责
Stride 一个带场景编辑器和资产管线的完整 C# 引擎 有 PBR、阴影、后处理
Evergine 范围上最接近的同行;面向工业与 XR 有 PBR、阴影、后处理
Silk.NET 是依赖,不是竞争对手

季节引擎的 Direct3D 12 和 Vulkan 后端构建在 Silk.NET 绑定之上, .csproj 里写得很清楚。任何「C# 中的现代图形 API 访问」形式的功劳都属于 Silk.NET,假装不是如此只会招来最伤人的 纠正 — 由读过源码的人公开做出的纠正。这里提供的是 绑定之上的那四万行。

Veldrid 值得专门提一句:它把抽象问题解决得很好,它的开发已经 基本沉寂了一段时间,而且它从来没有试图成为上面那一层。如果你看过 Veldrid 并且想要本应坐在它上面的那个引擎,那大致就是本引擎 占据的位置。

Zenith.NET 在它所占据的那一层领先本项目

Zenith.NET 是 「Veldrid 如果今天写会长什么样」的答案,而在抽象层本身上,它是 更现代的作品。它的目标基线比本引擎更新 — Vulkan 1.4 和 Metal 4 — 暴露 bindless 资源句柄、用时间线值追踪完成, 并通过 Capabilities.RayTracingSupported 和 Capabilities.MeshShadingSupported 对内联光线追踪和网格着色进行能力门控。 季节引擎那三样一样都没有:没有 bindless 路径、没有光线追踪、 没有网格着色器。

它在着色器编写上也做出了更好的选择。Zenith.NET 用 Slang 写一次 着色器。本项目手写 HLSL、GLSL、MSL 和 WGSL 作为内嵌 C# 字符串, 每个后端一个变体 — 这就是添加一个 compute 特效意味着写四份内核的原因。那是真实的成本,不是设计上的 美德,而 Slang 是今天起步的渲染器应该走的方向。

类别仍然不同,而这是两者都出现在本页的唯一原因。Zenith.NET 停在 RHI:没有场景模型、没有 PBR 材质系统、没有阴影级联、没有 GI、没有 文本渲染器、没有应用外壳。如果你想要的是在一个干净的现代抽象上 写渲染器,它比本项目的内部实现永远是更好的起点,而且如果它 更早存在,本引擎很可能就构建在那一层之上。如果你想要的是 那一层之上已经组装好的那四万行,那就在这里。

对比 MonoGame,那场真正重要的对比

代码优先是共同前提。C# 是共同前提。两者都没有编辑器,而且谁也 不会长出编辑器。所以轴线是:在一个 3D 项目的第一天,框架 递给你什么。

你得自己构建的东西

  • 金属-粗糙度 PBR 着色模型及其 IBL
  • 级联阴影贴图及其滤波
  • 环境光遮蔽以及任何形式的全局光照
  • 时间抗锯齿,以及它所需的速度缓冲
  • 大气天空与空气透视
  • 带蒙皮和动画混合的 glTF 导入
  • 有符号距离场文本渲染

MonoGame 有而本引擎没有的

  • 十五年的教程、书籍和论坛解答
  • 庞大的第三方扩展库
  • 无人可辩驳的已发布作品证明
  • 主机平台,经由其合作伙伴计划
  • 经受住十年使用考验的稳定 API
  • 成熟的 2D 优先工具链及其社区
诚实的张力

MonoGame 的用户群强烈偏向 2D、像素风和复古向游戏 — 那个 谱系产出了该类型最著名的作品。那些受众不需要 DDGI 或 GTAO,而本引擎的头条特性对他们中的大多数人来说无关紧要。这里面向 的群体更窄:想要带现代光照的 3D、并且拒绝以编辑器为中心的 工作流的 C# 开发者。这是一个更小的群体。这也是今天没有任何 维护中选项的群体,这正是它值得被服务的原因。

如果你是带着现有代码从 MonoGame 过来,迁移有自己的一页: 从 MonoGame 迁移 覆盖了面向 2D 精灵、图像和文本 调用点的 SeasonXNA 兼容层、取代内容管线的东西,以及刻意不受支持的清单。

如果你来自 Unity 或 Godot

在你几乎能说出的每一条轴线上,两者都比本引擎更好:生态、工具、 文档、资产商店、招聘、主机支持,以及已经被别人解决掉的问题的 绝对数量。如果这些对你的项目比下面两件事更重要,就用它们。

差别它换来什么
场景是一个 C# 类,不是一个文档 场景在拉取请求中做 diff 和合并。没有导入步骤、没有 GUID 注册表、没有需要保持打开的编辑器。整个项目都是文本。
引擎是你能读的源码 当一个通道看起来不对时,你打开文件、读内核并改掉它 — 而不是提交一个 issue 然后等发布。

一个被反复提及的说法值得纠正而不是重复:基于编辑器的引擎 处理不了大量实体。它们能。Unity 恰恰为此发布 DOTS 和 BatchRendererGroup,大规模作品也确实是靠它们做出来的。 站得住脚的说法关乎成本,而不是能力 — DOTS 是你围绕它重构项目的 第二种范式,而 InstancedModel 是你往里添加的一个列表。 那是可用性的差别,也是本页唯一的主张。

对比 Unreal,特性名称相撞之处

人们要求做这个对比,是因为两边的特性列表押韵。两个引擎都交付动态 全局光照、级联阴影、时间抗锯齿、物理天空和金属-粗糙度 材质模型。列表的重叠远大于实现的重叠,而那个差距是 本节唯一诚实的主题。

同样的词,不同的深度

下面每一行都是两个引擎都名副其实地声称拥有的能力。右栏是 主张变得不可比的地方。

能力Unreal本引擎实际的差距
动态 GI Lumen DDGI 探针体积 Lumen 在一个开放世界里追踪世界 — 屏幕追踪、软件距离场、可选硬件光线、包括反射。这里是一个有界范围的辐照度探针体积:体积之外的几何采样钳制后的边界探针。对场景很好,对大地图不行。
几何规模 Nanite 视锥与逐级联剔除、GPU 实例化 没有对应物,而且不是个小缺口。这个代码库里没有任何形式的网格 LOD 系统 — 没有虚拟化几何,甚至连离散的 LOD 链都没有。你提交的三角形就是你绘制的三角形。
阴影 虚拟阴影贴图 级联阴影贴图 CascadedShadow.MaxCascades 是 3。VSM 在整个世界范围内提供接近像素精度的阴影;三个级联在选定的范围内给你一个好看的场景,并且光照方向被量化以对抗级联抖动。
时间抗锯齿 TSR TAA 加 RCAS 锐化 TSR 是一个有着多年生产环境锤炼的上采样器。这里是一个胜任的历史重投影 TAA。同一类别,不同的成熟度。
天空与大气 Sky Atmosphere、体积云 程序化天空、空气透视 LUT 本页上最接近的真实对等 — 两者都源自同一批大气散射文献。体积云是这里缺失的那一半。
光线追踪 硬件 RT 和一个完整的路径追踪器 无 没有光线追踪、没有网格着色器、没有 bindless 资源。没有任何参考质量模式可以核对你的光照。
动画 Anim Blueprints、Control Rig、IK、MetaHuman glTF 蒙皮、混合、变形目标 片段播放和混合存在。状态机、重定向、程序化绑定或 IK 求解器不存在。
这不是一场对等的对比,也不该被当作对等对比来读

Unreal 大约是一个大型工程组织三十年的工作,有已发布的 AAA 作品、主机认证和建立在其上的电影工业。这里是 232 个文件。 在渲染保真度、规模、工具、生态和实战检验上,Unreal 赢下每一行 可衡量的项目,任何暗示相反的页面都是在兜售什么。两者 出现在一起的原因是,它们没有在做同一份工作。

完全没有对应物的东西

Unreal 有而本引擎没有

  • Chaos 物理 — 刚体、布料、破坏、载具
  • Niagara — 这里没有任何粒子或 VFX 系统
  • MetaSounds 与空间音频;这里的音频是平台播放
  • 网络与复制 — 这里不存在任何这类东西
  • World Partition 与关卡流送
  • 材质图 — 这里的材质是 C# 加手写着色器
  • Blueprint、Sequencer,以及编辑器本身
  • Unreal Insights 与 GPU 剖析器
  • 主机平台与 nDisplay 虚拟制片

本引擎有而 Unreal 没有

  • 从入口点到着色器字符串都是 C#。Unreal 没有 C# 故事可讲。
  • 一个浏览器目标。UE4 的 HTML5 后端被移除了,UE5 从未有过;本引擎跑在 WebGPU 上。
  • 一个 .cs 文件的场景 — 可以在拉取请求中 diff 和合并,没有二进制资产或 GUID 注册表
  • 一个带面板的应用外壳,为把 3D 放进普通桌面软件而不是交付游戏而生
  • 一个设备端 AI 层 — 文本、图像、语音和视觉在同一进程中
  • MIT,没有版税也没有席位费。Unreal 对每款产品超过 100 万美元的终身总营收抽取 5%,非游戏商业用途也改成了按席位付费的许可。
  • 一个小到可以在决定信任它之前从头读到尾的渲染器

不同的适用范围

你的项目形态答案
照片级、开放世界,或以主机发布为目标Unreal。 这里没有可争论的余地。
一支有美术、关卡设计师和技术美术的团队Unreal。 那些角色需要编辑器和节点图,而这两样这里都没有。
过场动画、虚拟制片、建筑可视化Unreal。 Sequencer 和路径追踪器就是这类工作的整套工具链。
一款需要物理、VFX、音频和网络代码的游戏Unreal。 四个在这里缺席而不是薄弱的系统。
必须跑在浏览器里的 3D本引擎。 Unreal 完全无法面向 Web。
一支给桌面软件加 3D 的 .NET 团队 — 工具、数据可视化、工业视图本引擎。 Unreal 对那个问题是个沉重的答案,而且它不会是 C#。
你需要自己修改渲染器内部本引擎。 Unreal 的源码可得但浩瀚;本引擎小到改一个通道只需一个下午。
3D 与本地模型推理在同一进程中本引擎。 今天没有 Unreal 对应物在售。
你不想要版税、席位费,只想要一个小依赖本引擎 — 不过也掂量一下 Godot,它免费、更大且支持好得多。

压缩成一行:Unreal 是团队制作照片级游戏或电影的合适工具, 而这里是一个 C# 库,用来把一个外观现代的 3D 场景放进你正在写的 程序里。用特性清单在两者之间做选择会误导你,因为清单正是 它们看起来最像的地方,而深度才是它们不像的地方。

这些情况下请选别的

你的处境更好的答案
你的工作主要是视觉摆放和迭代Unity、Godot 或 Stride。敲坐标每次都会输给拖坐标。
你在做照片级或开放世界游戏Unreal。两者实际差多远,见上一节。
你需要主机发布Unity、Godot、Unreal 或 MonoGame 的主机计划。这里没有主机后端。
你在做 2D 像素风游戏MonoGame 或 Godot。这里的 2D 层能用,但它不是重心,而且没有 tilemap 或物理方案。
你在移植一款 XNA 作品FNA。保真就是它的全部目的。
你想自己写渲染器原始绑定用 Silk.NET,或者一个 RHI — 想要现代的选 Zenith.NET,想要资历的选 Veldrid。拿一个观点鲜明的引擎再替换掉它的观点,是两头都不讨好。
你需要一支非程序员团队参与贡献任何基于编辑器的引擎。C# 类不是一个面向美术的界面。
你需要物理、导航网格或真正的音频混音器一个拥有它们的引擎。见下文。

真正缺失的东西

不是注意事项 — 是缺席。下面每一项都是你必须自带或 自建的东西。

  • 缺失 任何形式的物理
  • 缺失 导航与寻路
  • 部分 音频 — 经由平台媒体播放器播放音乐和音效,没有混音器或 3D 定位音频
  • 缺失 2D UI 的布局系统
  • 缺失 主机平台
  • 缺失 编辑器、检查器或剖析器 UI
  • 缺失 完整的游戏示例
  • 缺失 光线追踪、网格着色器和 bindless 资源
  • 部分 后端对等 — 一些特效是 Windows 优先
没有游戏示例,这是最大的缺口

随源码发布的两个应用,一个是应用演示,一个是渲染参考。 两者都没有回答「用它做的游戏长什么样」 — 那是「看起来 不错」之后的第一个问题。它是被要求最多却不存在的东西, 这一点是已知的,而且再多的渲染器细节都替代不了它。实际 有什么,参见示例。

关于托管语言性能

垃圾收集器是真实存在的,假装它不存在是愚蠢的。引擎的回答是 架构性的:对象池、环形缓冲、ArrayPool 复用、 帧级节流和零拷贝纹理路径,而且代码库小到一次分配无处藏身。 论点是:成熟的引擎在间接层和抽象层上损失掉的,比 GC 的 代价更多。

以论点呈现,而非测量

上面那段是工程描述,不是证据。帧时间、每帧 Gen0 分配和 GC 停顿分布能一锤定音,而这些还没有发布。在它们发布之前, 请把它当作对代码如何写的描述,而不是对运行多快的 主张。

从源码判断它