No description
Find a file
SakulFlee | Lukas a2deef7918
chore(deps): update github artifact actions (major) (#558)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[actions/download-artifact](https://redirect.github.com/actions/download-artifact)
| action | major | `v5` -> `v6` |
|
[actions/upload-artifact](https://redirect.github.com/actions/upload-artifact)
| action | major | `v4` -> `v5` |

---

### Release Notes

<details>
<summary>actions/download-artifact (actions/download-artifact)</summary>

###
[`v6`](https://redirect.github.com/actions/download-artifact/compare/v5...v6)

[Compare
Source](https://redirect.github.com/actions/download-artifact/compare/v5...v6)

</details>

<details>
<summary>actions/upload-artifact (actions/upload-artifact)</summary>

###
[`v5`](https://redirect.github.com/actions/upload-artifact/compare/v4...v5)

[Compare
Source](https://redirect.github.com/actions/upload-artifact/compare/v4...v5)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config
help](https://redirect.github.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/SakulFlee/Orbital).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNTYuMSIsInVwZGF0ZWRJblZlciI6IjQxLjE1Ni4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
2025-12-05 18:23:45 +01:00
.cargo Installing correct GCC and cargo config 2025-07-08 04:24:19 +02:00
.github chore(deps): update github artifact actions (major) (#558) 2025-12-05 18:23:45 +01:00
.vscode Added Camera Rolling support 2025-09-18 00:02:11 +02:00
Android chore(deps): update gradle to v9.2.1 2025-11-18 00:06:20 +00:00
Assets Fixed binding layout 2025-09-24 05:04:56 +02:00
Examples Format 2025-09-25 22:55:01 +02:00
Runtime Formatted project 2025-10-09 17:32:45 +02:00
.gitignore Added InstancingTest files to .gitignore 2025-09-12 22:32:49 +02:00
android-build.sh Material Shader finishing touches 2025-03-31 18:54:59 +02:00
android-install.sh Material Shader finishing touches 2025-03-31 18:54:59 +02:00
Cargo.lock chore(deps): update rust crate log to v0.4.29 2025-12-03 02:56:23 +00:00
Cargo.toml Corrected workspace member import 2025-09-24 03:55:02 +02:00
codebook.toml CC Luma + sRGB 2025-09-06 02:57:34 +02:00
Coordinate Overview.drawio.svg Material Shader finishing touches 2025-03-31 18:54:59 +02:00
LICENSE Material Shader finishing touches 2025-03-31 18:54:59 +02:00
README.md Update README.md 2025-09-27 01:30:56 +02:00
renovate.json Material Shader finishing touches 2025-03-31 18:54:59 +02:00

Orbital Engine Logo

🛰️ Orbital Engine

Orbital is a multi-platform 3D rendering engine built in Rust using WGPU as the graphics backend. The engine provides a flexible framework for creating 3D applications and games with support for modern rendering techniques including PBR (Physically Based Rendering), IBL (Image-Based Lighting), and GLTF asset import.

Project Status

⚠️ PROJECT SUNSET ANNOUNCEMENT ⚠️

This project is currently on ice. After serving its intended purpose, development has been paused. While I may return to it in the future, there are no immediate plans for updates or new features.

However, the engine remains available for use, and community contributions are welcome! If you're interested in extending or updating the engine, I'd be more than happy to review and merge pull requests.

There is a list of issues / future features to be used once I continue working on this project. If wanted, pick one and start implementing it! :) Said list can be found here.

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

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: Should work similarly to Android but cannot be verified

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.

Future Features & Missing Functionality

There are several features that would enhance the engine but are currently missing. These include:

  • Proper Frustum Culling: Currently, the engine effectively realizes all BoundingBoxes/Models without checking if they are actually visible or not. A proper frustum check should be used to determine if models are visible or near the camera.
  • Performance Optimizations: Various optimizations for rendering performance and memory usage
  • Additional Rendering Techniques: Support for more advanced rendering techniques like shadow mapping, volumetric effects, etc.
  • Improved Asset Pipeline: Better tools and workflows for importing and processing assets
  • Animation System: More robust animation support beyond basic GLTF animations
  • Physics Integration: Integration with physics engines for realistic interactions

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!