-
Notifications
You must be signed in to change notification settings - Fork 0
Rendering and Lighting
🌐 English · Русский
- CPU or GPU renderer, chosen per world. The default is the multithreaded CPU raytracer. A world can instead select the GPU renderer (NVIDIA, via ILGPU → CUDA — also runs on any OpenCL device), which casts every primary, shadow and lighting ray on the graphics card at full feature parity with the CPU path. If a world asks for GPU but no usable GPU is present, it transparently falls back to the CPU renderer. Pick it in the Create world dialog (Renderer: CPU / GPU). See the GPU Renderer page.
- CPU raytracing to ASCII via a brightness gradient.
-
Truecolor output — each cell carries a 24-bit RGB color (
Rgb24) emitted as ANSI escape codes, so the picture is no longer limited to the 16 console colors. On terminals without truecolor the nearest console color is used. -
Two kinds of transparency — every object has both:
- Object transparency — the color's alpha channel, which makes it see-through. Overlapping transparent surfaces composite front-to-back via depth peeling, and a transparent object casts a correspondingly lighter shadow.
- Color paleness (the Pale value) — a separate knob that washes the surface's own color toward white while the object stays fully solid and casts a full shadow.
- PNG textures + UV — any object can wear a PNG image, mapped by per-corner UVs, with tiling / per-face / filtering options. See the dedicated Textures page.
- Floating-point lighting with per-channel Reinhard tone mapping, an ambient term, and an adjustable exposure.
- Smooth (per-vertex-normal) shading, with a Blender-friendly OBJ loader (n-gon fan triangulation, negative/relative indices, geometric-normal fallback).
- BVH acceleration for high-poly meshes, built once in local space and traversed with the ray transformed per frame, so it works even with animated/spinning models. Toggle it live with F3.
- Per-object bounding-sphere culling for both primary and shadow rays.
- Optional shadows (toggle per world, or live with F2).
- Adjustable render detail (1–4): trade resolution for speed live with P.
- Diff rendering — each frame only the console cells that actually changed are rewritten (with ANSI cursor jumps), instead of repainting the whole screen. A still camera writes almost nothing, which removes top-to-bottom "tearing" and raises the frame rate.
Nova has a full multi-light system. Every light is shadow-tested independently and contributes additively, so a surface shadowed from one light is still lit by another (no single dominant shadow). Shadows are alpha-correct: an opaque object casts a full shadow, while a transparent one casts a correspondingly lighter shadow (the shadow ray accumulates each transparent occluder's alpha).
- Point — omnidirectional, with inverse-square falloff.
- Directional — a parallel "sun" with a constant mild attenuation.
- Spot — a cone aimed along a direction, with extra shaping (below).
- Area — a square emitter sampled on a grid for area falloff + soft shadows.
-
Colored lighting — each light emits an RGB color (taken from its
ConsoleColor). ASurfaceTint/ Influence term lets a colored light read on any surface, not only same-colored ones. - Spin — sweeps a light's direction over time (rad/s) for animated lighting.
-
Multi-directional spot beams — a spot can throw 1–8 cones at once (
Beams), fanned evenly around its aim; the spot lights whichever beam reaches a point. - Spot cone shape — the cone cross-section can be Circle, Square, or Triangle.
All of these render identically on the CPU and GPU (validated pixel-for-pixel by the gputest self-test).
The renderer adapts live: if the console size changes (a window stretch or a Ctrl+scroll font zoom), the buffers are re-allocated and the frame is redrawn cleanly — in single-view, split-screen, and the docked layout alike. The startup splash re-centres too. See Cameras & HUD for how the HUD reflows.