Skip to content

Rendering

Sektor's renderer is a native DirectX 12 clustered forward pipeline built for credible modern lighting: linear HDR from end to end, resolved once through motion-compensated temporal anti-aliasing, filmic tone mapping, and sRGB output.

Lights

Light Details
Directional The sun. Four stabilized 2048px cascaded shadow maps
Point Color, intensity, range; real clustered contribution
Spot Smooth cone with innerConeDegrees and outerConeDegrees half-angles (0.1 to 89)
Area Rectangular emitter with authored width, height, and sidedness, using four-point Gaussian integration

A 16×9×24 logarithmic cluster grid drives up to 256 local lights with per-view compact light lists and overflow diagnostics, so "too many lights" is a visible budget, not a silent quality cliff.

Local shadows run on a deterministic camera-importance budget: up to four spot lights at 1024px and two point lights with six 1024px faces each, with filtered sampling and AI-visible telemetry about which lights are in or out of budget.

{"op":"scene.light.spot.create","x":4,"y":5,"z":0}
{"op":"component.light.set","id":21,"kind":"spot","color":[1,0.85,0.6],"intensity":14,
 "range":30,"innerConeDegrees":18,"outerConeDegrees":32,"castShadows":true}

Environment and image-based lighting

The scene owns its look: analytic atmosphere (sky, horizon, sun disk), fog, ambient, exposure, and optionally a streamed Radiance HDR environment map that drives both the visible sky and PBR response (cosine-weighted diffuse irradiance plus GGX-prefiltered specular).

Reflection Probes add local IBL: oriented volumes with edge blend and box projection. Worlds can hold arbitrary probe counts; a deterministic BVH picks the four best camera-local contributors each frame. Probes bake in the editor: six overlay-free HDR faces captured across frames, convolved, and assigned as one undoable operation.

{"op":"scene.reflection_probe.create","x":0,"y":2,"z":0}
{"op":"reflection_probe.bake","id":33,"resolution":256}

Camera and post-processing

Physical camera controls live on the Camera component and persist with the scene:

Effect Fields
Motion blur shutterAngleDegrees, maximumMotionBlurPixels
Depth of field Thin-lens model: focusDistance, focalLengthMillimeters, apertureFStop
Tone mapping ACES-fitted filmic curve with exposure control
Anti-aliasing Temporal AA (eight-sample sequence, motion vectors, neighborhood clipping), FXAA, or off

Viewport shading modes (lit, unlit, wireframe, detail_lighting, lighting_only) render through the same final pass as captures and Play, so you are always looking at the truth.

Performance behavior

  • View-frustum culling for the world pass and every shadow cascade, with exact processed/culled/draw counters in diagnostics.
  • Scene geometry streams through a content-hash-aware asynchronous cache; editing stays interactive without full-GPU waits.
  • Selection highlighting uses a depth-respecting stencil and mesh-shell pass, not bounding-box approximations.

Still ahead

GPU instancing for dense scatter, bloom and lens effects, color grading, volumetrics, particles and VFX, terrain LOD and foliage systems, and the global-illumination research gate. The roadmap tracks these honestly.