Skip to content

Repository files navigation

unhuman-rs

The Rust rewrite of Unhuman Engine — a real-time engine for robotics simulation, synthetic data generation and games.

The C++ tree is the specification; this repository is the port, and it is a port with opinions: the five structural failures docs/architecture/00-spine.md documents in the C++ (ambient globals, a hollow RHI abstraction, two owners of synchronization, a render graph whose parallelism was thrown away by one shared command buffer) are the reason each subsystem here has the shape it has.

Layout

UHE/src/core/          adam       Engine, App, the plugin registry, the loop
UHE/src/rhi/           chassis    the backend-neutral RHI and the render graph
UHE/src/jobs/          grind      job system and task graph
UHE/src/shaders/       forge      Slang and WGSL in, SPIR-V out
UHE/src/events/        pings      event bus, key and mouse codes
UHE/src/platform/      eyes       window and input (winit)
UHE/src/scene/         meats      ECS, components, hierarchy, .unhuman serialisation
UHE/src/assets/        vault      asset registry, VFS, loaders
UHE/src/renderer/      bifrost    the renderer frontend
UHE/src/audio/         wire       audio
UHE/src/physics/       femur      rigid bodies and colliders
UHE/Stormbreaker/wgpu/    stormglass    the wgpu backend (default)
UHE/Stormbreaker/vulkan/  stormbreaker  the Vulkan backend (opt-in)
UHE/bins/               nocap (headless), sandbox (windowed)
UHE-EDITOR/mirror/      mirror     the editor model
UHE-EDITOR/editor/      editor     the gpui editor binary
UHE-AIMLAB/aimlab/      the UHEGAME demo, as a plugin

docs/architecture/01-crate-map.md is the interface contract every crate is written against: the seams, the dependency direction, the things deliberately not ported, and why. docs/WORK.md is the state of the work and the rules this repository runs by.

Build

cargo build --workspace            # logic crates only; no GPU, no Vulkan SDK needed
./scripts/gate.sh                  # the whole gate: build, clippy -D warnings, tests
./scripts/gate.sh --no-vulkan      # on a machine with no driver
./scripts/parity.sh                # coverage: every C++ file ported or a recorded reason

scripts/gate.sh is the gate: a green run locally means a green run in CI. Two rules it encodes are there because getting them wrong produces a green run that means nothing — validation is enabled only through DeviceOptions::from_env, and the suites run with --test-threads=1 because they share one device and one scratch directory.

scripts/parity.sh is the check behind this README's claim that nothing was left behind: 232 C++ files, each mapped to the Rust file that holds its port or to a recorded reason it does not exist. It exits non-zero on a file it cannot place, and it verifies that every target in its table still exists, so a rename breaks the check instead of the table going stale. Point it at a C++ checkout (scripts/parity.sh ../UNHUMAN, the default) or run it where the tree is absent — it says so and passes.

Backends: wgpu by default, Vulkan opt-in, chosen by --backend, UHE_BACKEND or a backend key in the settings file. That is a stability decision, not a preference: when a frame is wrong the first question is "the backend or the engine".

Not ported

Listed with a reason each in docs/architecture/01-crate-map.md — the C++ render graph's legacy BeginRenderPass, cached graph compilation, the excluded 2D renderer, the vestigial Linux platform layer, basis_universal transcoding, runtime MSDF atlas generation (the runtime path is a coverage atlas; the MSDF path reads a pre-baked one), and Tracy/spdlog.

Status

The whole C++ tree outside Platform/Vulkan has a Rust counterpart, and the tree builds clean: cargo build --workspace (and --all-targets, --release, --locked), clippy -D warnings and rustfmt --check all pass, and the driver-free suite is green. The backend suite runs in CI against lavapipe. The seams are documented and the tests exist; docs/WORK.md is the state of the work.

Contributing

Contributions are accepted under the terms of CLA.md; sign off your commits (git commit -s) or state your agreement on the pull request.

License

Licensed under the Apache License, Version 2.0 — see LICENSE and NOTICE.