Interface: RenderableBody
Minimal rendering contract consumed by the scene-level <Body> component.
Any object that produces a Three.js group + a per-frame tick + the deterministic variation handle can be rendered, independently of how it was produced (solar-system pipeline, standalone useBody() call, an editor, a unit test scene, …). This interface deliberately excludes every consumer-specific concern (overlays, application-level callbacks) so that <Body> remains reusable in any runtime that speaks the same rendering contract.
A full handle returned by useBody() (see Body) satisfies this contract structurally — the scene components read the subset they need.
Properties
group
group: Group;Root THREE group — meshes and shells attach under it.
config
config: BodyConfig;Physical + display parameters (radius, atmosphere, axial tilt, …).
variation
variation: BodyVariation;Deterministic visual variation (ring config, shader params).
palette?
optional palette?: TerrainLevel[];Effective terrain palette used by this body — forwarded by useBody so consumers of the rendering contract (shell anchors, overlay shaders) can read the same palette the internal meshes use.
tick
tick: (dt) => void;Per-frame tick driven by the scene's render loop.
Parameters
| Parameter | Type |
|---|---|
dt | number |
Returns
void
shadowUniforms?
optional shadowUniforms?: ShadowUniforms;Optional shadow uniforms — when present, a child body can cast an eclipse shadow on this body via ShadowUpdater.
hoverChannel?
optional hoverChannel?: HoverChannel;Optional per-body hover/pin channel. Forwarded by useBody; surfaced here so <Body> can wire the projectors without leaking the underlying handle.
graphicsUniforms?
optional graphicsUniforms?: GraphicsUniforms;Optional per-body graphics uniform bag. Forwarded by useBody; surfaced here so <Body> can pass it down to the cloud shell.
interactive?
optional interactive?: BodyInteractive;Interactive mode + raycast queries. Optional so lightweight consumers (editors, tests) can satisfy the interface without mounting a tile-picking mesh.
hover?
optional hover?: BodyHover;Controlled tile hover / pin / body-hover setters (scene-controller driven).
liquid?
optional liquid?: BodyLiquid;Surface liquid controls. Absent on dry bodies and stars.
view?
optional view?: BodyView;View toggle ('surface' vs 'atmosphere'). Absent on stars.
getCoreRadius?
optional getCoreRadius?: () => number;Returns the world radius of the opaque inner core sphere. Present on all non-stellar bodies.
Returns
number
getSurfaceRadius?
optional getSurfaceRadius?: () => number;Returns the world radius of the outer surface (= config.radius). Present on all non-stellar bodies; kept symmetric with getCoreRadius.
Returns
number