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.