Heavily multithreaded voxel engine with multiplayer networking.
Written in Rust using wgpu
- multithreaded procedural world generation
- procedural structures and block queue
- multithreaded mesh generation
- cubic chunks (32x32x32)
- low-level wgpu renderer (gles3 before the major rewrite)
- frustum culling
- multiplayer networking
- immediate ui system
[1]
- cross platform: windows, linux, osx, android
[2]
- universal input system: supports keyboard, mouse, gamepad and touch input
[3]
- support for semi-transparet blocks
[4]
[1]
- developed out-of-tree here since 2024
[2]
- android support is experimental
[3]
- mouse and gamepad input is not supported on android
[4]
- work in progress, may cause issues
cargo build -p kubi
cargo run -p kubi
#or, build with release mode optimizations:
cargo run -p kubi --release
please note that android support is highly experimental!
gamepad, mouse input is currently borked, as well as srgb, which leads to dark textures.
prerequisites: Android SDK, NDK, command line tools, platform-tools, latest JDK
(make sure that your PATH
, ANDROID_HOME
and ANDROID_NDK_ROOT
variables are configured properly)
Setup:
latest unpublished (git) version of cargo-apk is required
cargo install --git https://github.com/rust-mobile/cargo-apk cargo-apk
rustup target add aarch64-linux-android
Build:
--no-default-features
is required for keyboard input!
(prefer-raw-events
feature must be disabled on android)
Mouse input is not implemented, touch only!
cargo apk build -p kubi --lib --no-default-features
Run on device (using adb):
cargo apk run -p kubi --lib --no-default-features
- Left side: Movement
- Rigth side: Camera controls
- Bottom right corner:
- B (e.g. place blocks)
- A (e.g. break, attack)
to join a multiplayer server, just pass the ip address as the first argument
cargo run -p kubi -- 127.0.0.1:1234
[server]
address = "0.0.0.0:12345" # ip address to bind to
max_clients = 32 # max amount of connected clients
timeout_ms = 10000 # client timeout in ms
[world]
seed = 0xfeb_face_dead_cafe # worldgen seed to use
[query]
name = "Kubi Server" # server name
hui
,hui-glium
,hui-winit
: semi-imm.mode backend-agnostic ui system\kubi-logging
fancy custom formatter forenv-logger
deprecated:
eventually got replaced bykubi-udp
uflow
(https://github.com/lowquark/uflow) in #5decided there's no need to replace rayon for nowkubi-pool