Skip to content

Rendering and Lighting

Yahasi edited this page Jul 6, 2026 · 1 revision

🌐 English · Русский

← Home · GPU Renderer →

Rendering & Lighting

Rendering

  • 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.

Lighting

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).

Light kinds

  • 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.

Per-light extras

  • Colored lighting — each light emits an RGB color (taken from its ConsoleColor). A SurfaceTint / 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).

Terminal resize robustness

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.

Clone this wiki locally