0.1.0-alpha04
First release with the engine split into modules and the harmonics degree chosen per frame.
What changed since alpha03
- Spherical harmonics degree per frame. A quality preset now sets
shDegree, the degree drawn, and it takes effect on the next frame; switching presets never reloads the world.maxShDegreestays as the memory cap applied at load. Measured on the 2.6M bicycle: degree 3 costs 9 percent of GPU time over degree 0 in portrait, 30 percent in landscape. - Cull margin that scales with the frame time. The margin kept drawn around the view grows with the turn rate and the time a cull takes to reach the screen, so a fast flick on a slow scene no longer shows an empty edge.
- Engine modules (ADR 0013).
splat-coregains a file mapper, a world loader, the visibility policy and timing summaries, each with unit tests that run without a GPU; the Android side gains a surface renderer, a benchmark and a stats publisher, and the engine runs the frame in under 300 lines. - Hardened loading. Truncated or corrupt files, and failed swapchain rebuilds, report through the listener instead of crashing.
clang-formatandclang-tidyfrom the pinned NDK run on every pull request.ply2spz, an offline converter from Gaussian splat PLY to SPZ, with--drop-overto leave out oversized splats.- Image quality checked against the PlayCanvas renderer (the engine behind superspl.at) at the same pose, field of view and resolution: within 7 percent on an edge sharpness metric with the same data; the numbers are in
docs/BENCHMARKS.md.
Numbers, Xiaomi Mi 9 (Adreno 640), release build, 1080x2261
| Scene | Preset | GPU ms mean / p50 / p95 |
|---|---|---|
| Pool, 1.79M splats | MEDIUM | 20.8 / 18.1 / 31.1, 55 fps |
| Bicycle, 2.6M splats, harmonics degree 3 | HIGH | 18.9 / 13.7 / 45.2 |
| Bicycle, 2.6M splats, harmonics degree 0 | HIGH | 17.2 / 13.8 / 39.0 |
Install
implementation("io.github.xget7:splatkit-android:0.1.0-alpha04")minSdk 29, arm64-v8a only.
See it
splatkit-pool-mi9.mp4 below: a 1.79M splat pool scene at the MEDIUM preset on the Mi 9, recorded with screenrecord, which takes GPU time from the frame (55 fps without the recorder, 33 to 36 with it).
Known limits
- Tested on one GPU, Adreno 640. Mali (Samsung, Pixel) is unvalidated: if you have one, running the dev app and attaching
adb logcat -s SplatKitto an issue is the most useful report right now. - SPZ only at runtime; PLY goes through
ply2spz. - Alpha API.
maxShDegreein the presets becameshDegreein this release. - Android only. The React Native binding (react-native-splatkit) compiles on iOS but has no engine behind it yet.