MIT License NuGet

Home / How it compares

How it compares

The nearest neighbour is MonoGame, not Unity. If you are weighing an editor-based engine against this one, the deciding question is not features — it is whether you want to author a scene in a window or in a class.

This page is written to be useful rather than flattering. It contains the cases where you should pick something else, because a comparison that does not is not worth reading.

The C# landscape

All of these are reasonable choices. They differ in which layer they stop at.

ProjectWhat it gives youEditorBuilt-in 3D renderer
SeasonEngine Renderer, application shell, 2D and 3D controls, four graphics backends No, by design PBR, shadows, GI, AO, TAA, sky
MonoGame An XNA-shaped framework: device, content pipeline, sprite batching, input No You write it, or adopt a community one
FNA A faithful XNA 4 reimplementation, aimed at porting existing titles No XNA-era effects
Veldrid A graphics API abstraction — the layer below an engine No None; that is not its job
Zenith.NET A modern RHI: D3D12, Metal 4 and Vulkan 1.4 behind one C# API, with bindless handles and Slang shaders No None; that is not its job
Prowl A Unity-like open-source engine: pure C# on .NET 10, OpenGL-only renderer, full editor, asset pipeline, physics and audio Yes PBR, CSM shadows, baked lightmaps and light probes, post stack
Silk.NET Bindings to Direct3D, Vulkan, OpenGL, WebGPU and more No None; that is not its job
Stride A full C# engine with a scene editor and asset pipeline Yes PBR, shadows, post
Evergine The closest peer in scope; industrial and XR oriented Yes PBR, shadows, post
Silk.NET is a dependency, not a competitor

SeasonEngine's Direct3D 12 and Vulkan backends are built on Silk.NET bindings, and the .csproj says so. Any claim of the form "modern graphics API access in C#" belongs to Silk.NET, and pretending otherwise would invite the most damaging possible correction — made publicly, by someone who read the source. What is on offer here is the forty thousand lines above the bindings.

Veldrid deserves a specific note: it solved the abstraction problem well, its development has been largely dormant for some time, and it was never trying to be the layer above. If you looked at Veldrid and wanted the engine that should have sat on top of it, that is roughly the space this occupies.

Zenith.NET is ahead of this project at the layer it occupies

Zenith.NET is the answer to "what would Veldrid look like if it were written today", and on the abstraction layer itself it is the more modern piece of work. It targets newer baselines than this does — Vulkan 1.4 and Metal 4 — exposes bindless resource handles, tracks completion with timeline values, and capability-gates inline ray tracing and mesh shading through Capabilities.RayTracingSupported and Capabilities.MeshShadingSupported. SeasonEngine has none of those three things: no bindless path, no ray tracing, no mesh shaders.

It also made the better call on shader authoring. Zenith.NET writes shaders once in Slang. This project hand-writes HLSL, GLSL, MSL and WGSL as embedded C# strings, one variant per backend — which is why adding a compute effect means writing four kernels. That is a real cost, not a design virtue, and Slang is the direction a renderer started today should go.

The categories still differ, and that is the only reason both are on this page. Zenith.NET stops at the RHI: no scene model, no PBR material system, no shadow cascades, no GI, no text renderer, no application shell. If what you want is to write a renderer on a clean modern abstraction, it is a better starting point than this project's internals will ever be, and it is the layer this engine would plausibly have been built on had it existed earlier. If what you want is the forty thousand lines that sit above that layer already assembled, that is what is here.

Against MonoGame, the comparison that matters

Code-first is the shared premise. C# is the shared premise. Neither has an editor and neither is going to grow one. So the axis is what the framework hands you on the first day of a 3D project.

What you would build yourself

  • A metallic-roughness PBR shading model and its IBL
  • Cascaded shadow maps and their filtering
  • Ambient occlusion and any form of global illumination
  • Temporal anti-aliasing, and the velocity buffer it needs
  • An atmospheric sky and aerial perspective
  • glTF import with skinning and animation blending
  • Signed-distance text rendering

What MonoGame has and this does not

  • Fifteen years of tutorials, books and forum answers
  • A large library of third-party extensions
  • Shipped-title proof at a scale nobody can argue with
  • Console platforms, through its partner programme
  • A stable API that has survived a decade of use
  • A mature 2D-first toolchain and community around it
The honest tension

MonoGame's population skews strongly toward 2D, pixel-art and retro-leaning games — the lineage that produced the genre's best-known titles. That audience does not need DDGI or GTAO, and this engine's headline feature is irrelevant to most of it. The segment being addressed is narrower: C# developers who want 3D with modern lighting and refuse an editor-centric workflow. It is a smaller group. It is also the group with no maintained option today, which is why it is worth serving.

If you are coming from Unity or Godot

Both are better engines than this one on almost every axis you can name: ecosystem, tooling, documentation, asset stores, hiring, console support, and the sheer number of problems already solved by someone else. If those matter to your project more than the two things below, use them.

The differenceWhat it buys
A scene is a C# class, not a document Scenes diff and merge in a pull request. No import step, no GUID registry, no editor to keep open. The whole project is text.
The engine is source you read When a pass looks wrong you open the file, read the kernel and change it — rather than filing an issue and waiting for a release.

One frequently repeated claim is worth correcting rather than repeating: that editor-based engines cannot handle large entity counts. They can. Unity ships DOTS and BatchRendererGroup for exactly this, and large-scale titles have been built with them. The defensible statement is about cost, not capability — DOTS is a second paradigm you restructure a project around, and InstancedModel is a list you add to. That is a usability difference, and it is the only one being claimed.

Against Unreal, where the feature names collide

This comparison gets requested because the feature lists rhyme. Both engines ship dynamic global illumination, cascaded shadows, temporal anti-aliasing, a physically-based sky and a metallic-roughness material model. The lists overlap far more than the implementations do, and that gap is the only honest subject of this section.

The same words, different depth

Every row below is a capability both engines legitimately claim. The right-hand column is where the claim stops being comparable.

CapabilityUnrealHereThe actual distance
Dynamic GI Lumen DDGI probe volume Lumen traces the world — screen traces, software distance fields, optional hardware rays, reflections included — across an open world. This is an irradiance probe volume with a bounded extent: geometry outside the volume samples clamped boundary probes. Fine for a scene, not a landscape.
Geometry scaling Nanite Frustum and per-cascade culling, GPU instancing No counterpart, and not a small one. There is no mesh LOD system of any kind in this codebase — not virtualised geometry, not even discrete LOD chains. Triangles you submit are triangles you draw.
Shadows Virtual Shadow Maps Cascaded shadow maps CascadedShadow.MaxCascades is 3. VSMs give near-pixel-accurate shadows over a whole world; three cascades give you a good-looking scene at a chosen range, and the light direction is quantised to fight cascade breathing.
Temporal AA TSR TAA plus RCAS sharpening TSR is an upscaler with years of production hardening behind it. This is a competent history-reprojection TAA. Same category, not the same maturity.
Sky and atmosphere Sky Atmosphere, volumetric clouds Procedural sky, aerial perspective LUT The closest genuine parity on the page — both descend from the same atmospheric scattering literature. Volumetric clouds are the missing half here.
Ray tracing Hardware RT and a full path tracer None No ray tracing, no mesh shaders, no bindless resources. There is no reference-quality mode to check your lighting against.
Animation Anim Blueprints, Control Rig, IK, MetaHuman glTF skinning, blending, morph targets Clip playback and blending exist. A state machine, retargeting, procedural rig or IK solver does not.
This is not a peer comparison and should not be read as one

Unreal is roughly three decades of work by a large engineering organisation, with shipped AAA titles, console certification and a film industry built on top of it. This is 232 files. On rendering fidelity, scale, tooling, ecosystem and battle-testing, Unreal wins every row that can be measured, and any page suggesting otherwise is selling something. The reason the two appear together is that they are not trying to do the same job.

What has no counterpart at all

Unreal has, this does not

  • Chaos physics — rigid bodies, cloth, destruction, vehicles
  • Niagara — there is no particle or VFX system here
  • MetaSounds and spatial audio; audio here is platform playback
  • Networking and replication — nothing of the kind exists here
  • World Partition and level streaming
  • A material graph — materials here are C# plus hand-written shaders
  • Blueprint, Sequencer, and the editor itself
  • Unreal Insights and a GPU profiler
  • Console platforms and nDisplay virtual production

This has, Unreal does not

  • C# from the entry point to the shader string. Unreal has no C# story.
  • A browser target. UE4's HTML5 backend was removed and UE5 never had one; this runs on WebGPU.
  • A scene that is a .cs file — diffable and mergeable in a pull request, with no binary asset or GUID registry
  • An application shell with panels, made for putting 3D inside ordinary desktop software rather than shipping a game
  • An on-device AI layer — text, image, speech and vision in the same process
  • MIT, with no royalty and no seat fee. Unreal takes 5% of lifetime gross revenue above $1M per product, and non-game commercial use moved to a paid per-seat licence.
  • A renderer small enough to read end to end before deciding to trust it

Different ranges of fit

The shape of your projectThe answer
Photoreal, open-world, or aiming at a console releaseUnreal. There is no argument to make here.
A team with artists, level designers and tech artistsUnreal. Those roles need an editor and a node graph, and neither exists here.
Cinematics, virtual production, archvizUnreal. Sequencer and the path tracer are the entire toolchain for this work.
A game needing physics, VFX, audio and netcodeUnreal. Four systems that are absent here, not thin here.
3D that must run in a browserHere. Unreal cannot target the web at all.
A .NET team adding 3D to desktop software — tools, data visualisation, industrial viewsHere. Unreal is a heavy answer to that question, and it will not be C#.
You need to modify renderer internals yourselfHere. Unreal's source is available and vast; this one is small enough that changing a pass is an afternoon.
3D and local model inference in one processHere. No Unreal equivalent ships today.
You want no royalty, no seat fee, and a small dependencyHere — though weigh Godot too, which is free, larger and far better supported.

Compressed to one line: Unreal is the right tool for making a photoreal game or film with a team, and this is a C# library for putting a modern-looking 3D scene inside a program you are writing yourself. Choosing between them on a feature checklist will mislead you, because the checklist is where they look most alike and the depth is where they do not.

Pick something else if

Your situationBetter answer
Your work is mostly visual arrangement and iterationUnity, Godot or Stride. Typing coordinates will lose to dragging them, every time.
You are making a photoreal or open-world gameUnreal. See the section above for how far apart the two actually are.
You need a console releaseUnity, Godot, Unreal or MonoGame's console programme. There is no console backend here.
You are making a 2D pixel-art gameMonoGame or Godot. The 2D layer here is capable but it is not the centre of gravity, and there is no tilemap or physics story.
You are porting an XNA titleFNA. Fidelity is its entire purpose.
You want to write the renderer yourselfSilk.NET for raw bindings, or an RHI — Zenith.NET if you want a modern one, Veldrid if you want the established one. Taking an opinionated engine and replacing its opinions is the worst of both.
You need a team of non-programmers to contributeAny editor-based engine. A C# class is not an artist-facing interface.
You need physics, navmesh or a real audio mixerAn engine that has them. See below.

What is genuinely missing

Not caveats — absences. Each of these is a thing you would have to bring or build.

  • Absent Physics of any kind
  • Absent Navigation and pathfinding
  • Partial Audio — music and effect playback through the platform media player, no mixer or 3D positional audio
  • Absent A layout system for 2D UI
  • Absent Console platforms
  • Absent An editor, inspector or profiler UI
  • Absent A complete game sample
  • Absent Ray tracing, mesh shaders and bindless resources
  • Partial Backend parity — some effects are Windows-first
There is no game sample, and that is the biggest gap

The two applications that ship are an application demo and a rendering reference. Neither answers "what does a game look like in this," which is the first question after "looks nice." It is the most-requested thing that does not exist, it is known, and no amount of renderer detail substitutes for it. See Samples for what is actually there.

On managed-language performance

The garbage collector is real and pretending otherwise would be silly. The engine's answer is architectural: object pools, ring buffers, ArrayPool reuse, frame-level throttling and zero-copy texture paths, in a codebase small enough that an allocation has nowhere to hide. The argument is that mature engines lose more to indirection and abstraction layers than a GC costs.

Presented as an argument, not a measurement

That paragraph is engineering, not evidence. Frame times, per-frame Gen0 allocation and GC pause distribution would settle it, and they are not published yet. Until they are, take it as a description of how the code is written rather than a claim about how fast it runs.

Judge it from the source