A next-gen work-in-progress 2D and 3D graphical rendering engine written in Rust utilizing WGPU
  • Rust 94.5%
  • WGSL 4.9%
  • Nix 0.3%
  • Python 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-30 15:52:52 +00:00
.cargo Cargo updated config.toml 2026-08-28 23:44:33 +02:00
.forgejo Merge pull request 'chore(deps): update https://code.forgejo.org/forgejo/upload-artifact action to v5' (#779) from renovate/https-code.forgejo.org-forgejo-upload-artifact-5.x into main 2026-09-30 01:36:42 +00:00
.github Merge remote-tracking branch 'origin/main' into fix/ci-release-test 2026-09-22 00:28:27 +02:00
.teamcity teamcity: fix aarch64 pkg-config for debian trixie 2026-07-09 05:41:04 +02:00
Assets Merge origin/main into shader-rework 2026-09-06 18:12:27 +02:00
Crates Migrate iced_beacon to the bincode 2 API 2026-09-30 05:45:04 +02:00
CTestMod Fix: separate cube_index counter for point light cube maps (was sharing layer_index with 2D array), fix max cubes limit 2026-07-20 15:09:54 +02:00
Examples refactor(bootstrap): replace make_* macros with #[orbital::main] 2026-09-30 04:35:36 +02:00
Images Fix: separate cube_index counter for point light cube maps (was sharing layer_index with 2D array), fix max cubes limit 2026-07-20 15:09:54 +02:00
wit Fix: separate cube_index counter for point light cube maps (was sharing layer_index with 2D array), fix max cubes limit 2026-07-20 15:09:54 +02:00
.envrc Added .envrc 2026-06-20 03:17:54 +02:00
.gitignore Fix .gitignore pattern and add cargo-ndk check 2026-08-07 01:46:53 +02:00
.gitmodules fix: drop the stale lowercase orbital-iced submodule entry, track master 2026-09-29 01:55:35 +02:00
.opencodeignore added .opencodeignore as a test 2026-07-18 23:01:49 +02:00
ARCHITECTURE.md Merge pull request 'ECS: Low priority and scheduled tasks' (#812) from feat/ecs_schedule into main 2026-09-30 03:08:02 +00:00
Cargo.lock Merge pull request 'chore(deps): update rust crate syn to v3' (#848) from renovate/syn-3.x into main 2026-09-30 15:52:52 +00:00
Cargo.toml Merge pull request 'chore(deps): update rust crate syn to v3' (#848) from renovate/syn-3.x into main 2026-09-30 15:52:52 +00:00
flake.lock Fixed issue with flake.nix causing gLibC not finding GCC 2026-06-20 03:37:15 +02:00
flake.nix woodpecker: added windows build 2026-07-10 21:58:57 +02:00
LICENSE Fix: separate cube_index counter for point light cube maps (was sharing layer_index with 2D array), fix max cubes limit 2026-07-20 15:09:54 +02:00
NOTE-for-WASM.md Add systems layer with snapshot-merge parallelism 2026-06-22 00:32:11 +02:00
Orbital.toml docs: add signing configuration to Orbital.toml 2026-09-22 03:49:28 +02:00
README.md docs(ios): update README platform compatibility for iOS 2026-09-21 01:17:57 +02:00
renovate.json fix(deps): keep smol_str on 0.2 until the winit pin moves to 0.3 2026-09-30 05:13:05 +02:00
shell.nix Added shell and flake.nix 2026-06-20 03:03:03 +02:00

Orbital Engine Logo

🛰️ Orbital Engine & Framework

Orbital is a cross-platform real-time graphical rendering engine & framework written in Rust. The goal of this project is to bridge well established industry-standard techniques with upcoming (next-gen) and experimental techniques to form a robust new foundation for next-gen visual computing.

Showcase

glTF demo: Damaged Helmet
A
PBR Grid: Spheres PBR Grid: Cubes
A A

Core Features

Feature Description
PBR Rendering Physically Based Rendering with realistic material properties and lighting
Image-Based Lighting Advanced lighting using HDR environment maps for realistic reflections
GLTF 2.0 Support Full import capabilities for complex 3D scenes, materials, and animations
Cross-Platform Unified rendering across desktop platforms via WGPU abstraction
Modular Architecture Flexible element system with message-based communication
Modern Shaders WGSL-based shaders for cross-platform compatibility

Experiments

Experimental Concept Description
HJAA (Halton-Jitter Anti-Aliasing) Advanced spatial smoothing utilizing the Halton Sequence
IVXGI (Incremental Voxel-based Global Illumination) A evolution of Nvidia's VXGI for high performance dynamic lighting.

Important

Documentation for experimental features will be released once they have been fully validated in practical, non-theoretical environments.

Platform Compatibility

  • ✅ Windows: Full support
  • ✅ Linux: Full support
  • ✅ macOS: Full support
  • ⚠️ Web: Theoretically possible but not currently supported
  • ⚠️ Android: Works but requires frequent updates to keep compatible
  • ⚠️ iOS: Compiles but untested — boilerplate provided, community testing welcome

Getting Started

To explore the capabilities of the Orbital Engine, check out the examples in the Examples/ directory. These examples demonstrate various features of the engine including:

  • GLTF PBR Damaged Helmet: Example showcasing PBR rendering with a damaged helmet model
  • Instancing: Example demonstrating instanced rendering
  • PBR Grid: Example showing the PBR material system
  • Roll Camera: Example with camera controls
  • Skybox: Example showing environment mapping

To run an example, use:

cargo run --bin <example_name>

To use the engine in your own project, add the following to your Cargo.toml:

orbital = { path = "./Runtime" }

Engine Concepts

Elements

The primary way to add interactive objects to your world is through Elements. Elements are the core game objects that exist in the world and handle their own behavior. Each element can register itself with the world to define what resources it needs (models, cameras, etc.), and can respond to various events during the application lifecycle such as updates and messages from other elements.

Messaging System

Elements communicate with each other and the world through a message-passing system rather than shared memory. This ensures loose coupling between elements and enables flexible, modular game design. Rather than sharing memory or directly accessing other elements, elements send messages to communicate. This approach is easily scalable - tags can be used multiple times, so messages will be automatically sent to all elements with a matching tag.

World Architecture

The world manages resource stores (models, cameras, environments, lights), handles the asset import system, and creates the global bind group used by shaders. Resources follow a specific lifecycle involving creation, realization, caching, and cleanup.

History

The Orbital engine has a rich history spanning multiple iterations and rewrites. The project originally started as "Akimo" and was written in Java as a pure CPU renderer for 2D graphics. Over the years, it evolved through multiple iterations:

  • Akimo (Java): Started as a CPU-based 2D renderer, then upgraded to use LWJGL for OpenGL and Vulkan support
  • Akimo (C++): A complete rewrite in C++ with Vulkan bindings, still under the "Akimo" name
  • Orbital (Rust/Vulkan): A rewrite in Rust but still using Vulkan bindings
  • Orbital (Rust/WGPU/WGSL): The current iteration using Rust with WGPU and WGSL, moving away from GLSL to a more modern shader language

Each version learned from the previous ones, with the current implementation built in Rust leveraging the WGPU graphics API abstraction layer for cross-platform support.

License

This project is dual licensed in Rust's fashion:

For your own project you can chose whichever fits you better. For templates/examples we recommend to also dual-licensing.

We highly encourage everyone to share their sub-crates with the community so that others can benefit from it too!