Kubi
Heavily multithreaded voxel engine with multiplayer networking.
Written in Rust using wgpu
features
- 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
download
Latest nightly release
build for windows/linux
```bash
cargo build -p kubi
cargo run -p kubi
#or, build with release mode optimizations:
cargo run -p kubi --release
```
build for android
please note that android support is highly experimental!\
gamepad and mouse input is currently not supported
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
```bash
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!
```bash
cargo apk build -p kubi --lib --no-default-features
```
**Run on device (using adb):**
```bash
cargo apk run -p kubi --lib --no-default-features
```
touch controls
- Left side: **Movement**
- Rigth side: **Camera controls**
- Bottom right corner:
- **B** (e.g. place blocks)
- **A** (e.g. break, attack)
mutiplayer
to join a multiplayer server, just pass the ip address as the first argument
```sh
cargo run -p kubi -- 127.0.0.1:1234
```
server configuration
```toml
[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
```
"In-house" libraries
- [`hui`, `hui-glium`, `hui-winit`](https://github.com/griffi-gh/hui): semi-imm.mode backend-agnostic ui system\
- [`kubi-logging`](kubi-logging) fancy custom formatter for `env-logger`
deprecated:
- ~~`kubi-udp`~~ eventually got replaced by `uflow` (https://github.com/lowquark/uflow) in #5
- ~~`kubi-pool`~~ decided there's no need to replace rayon for now
~ uwu