Optional Effekseer Backend
Effekseer is a graphical VFX editor and runtime. Nebulon supports it as an optional authoring choice for developers who prefer an editor over writing shaders — it never replaces Nebulon's native renderer or material API.
Nebulon core contains no Effekseer runtime or native binaries. It only publishes the immutable EffekseerEffect description and the client-side EffekseerBackend provider contract, so a separate companion mod can opt in.
Using Effekseer effects
A consuming mod checks availability first; clients without a provider simply have no renderer for EffekseerEffect, and all native Nebulon effects continue to work:
if (NebulonEffekseer.isAvailable()) {
EffekseerEffect effect = NebulonEffekseer.effect(
Identifier.of("my_mod", "effects/fireball.efkefc"))
.at(position)
.rotation(new Quaternionf())
.scale(1.25f)
.speed(1.0f)
.loop(false)
.dynamicInput(0, charge) // 4 dynamic input slots (0–3)
.cullingRadius(12)
.maxRenderDistance(128)
.build();
NebulonRendering.effects().spawn(world, effect, 80);
}
Effekseer effects are ordinary world effects: they use the same handles, lifetimes, culling, and (with a codec) synchronization.
Relevant formats:
| Format | Purpose |
|---|---|
.efkefc | Editable effect format and runtime input |
.efk | Play-only exported binary |
.efkpkg | Package containing effects and referenced resources |
Providing a backend
A provider mod registers its renderer during client initialization:
NebulonEffekseer.registerBackend(new MyEffekseerBackend());
The provider owns everything native: per-OS/architecture artifacts, safe extraction and loading, resource resolution, camera and framebuffer translation, OpenGL state restoration, device/context shutdown order, and feature reporting. This boundary also allows a future pure-Java importer to implement the same effect type.
Roadmap position
The longer-term plan keeps effect authoring portable rather than binding Nebulon to one runtime: expand native presets and deterministic timelines first, define a versioned intermediate effect model, then import the Effekseer subset that maps cleanly (sprites, rings, ribbons/tracks, transforms, spawn, lifetime, color/scale curves, textures) — reporting unsupported features instead of silently changing an effect.