Skip to content

0.1.0-alpha04

Choose a tag to compare

@Xget7 Xget7 released this 09 Sep 08:48
· 145 commits to main since this release

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. maxShDegree stays 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-core gains 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-format and clang-tidy from the pinned NDK run on every pull request.
  • ply2spz, an offline converter from Gaussian splat PLY to SPZ, with --drop-over to 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 SplatKit to an issue is the most useful report right now.
  • SPZ only at runtime; PLY goes through ply2spz.
  • Alpha API. maxShDegree in the presets became shDegree in this release.
  • Android only. The React Native binding (react-native-splatkit) compiles on iOS but has no engine behind it yet.