The Relativistic Engine is an ISO C++23 simulation and visualization framework for relativistic mechanics and raytracing. The system is structured into four functional layers:
LinearMemoryArena, include/relativistic/core/memory_arena.hpp) aligned to 64-byte and 128-byte cache boundaries (Technical Manual).SpacetimeMetric, include/relativistic/metrics/spacetime_concept.hpp) and template specializations.SimdVec<T, Width>, SimdMask<T, Width>, include/relativistic/core/simd.hpp, and GeodesicBundle<T, Width>, include/relativistic/core/geodesic_bundle.hpp) processing multiple geodesic rays and phase states concurrently across AVX2, AVX-512, and ARM Neon architectures (Section 4.3).PCG64Engine, include/relativistic/core/pcg64.hpp) and fixed-step temporal scheduling (Section 3.1).The system architecture is organized into modular subsystems operating across decoupled boundaries:
Tensor<T, Rank, Dim> (include/relativistic/core/tensor.hpp) defines cache-aligned multidimensional tensor storage with compile-time rank, dimension, and flat index resolution (Technical Manual).inverse_metric_4x4 and determinant_4x4 perform analytical cofactor inversions for 4D spacetime metrics; contract and contract_tensors (include/relativistic/core/tensor_ops.hpp) execute general Einstein summation contractions.compute_christoffel (include/relativistic/core/christoffel.hpp) dynamically dispatches to exact analytical formulations when provided by the metric or evaluates numerical derivatives via 8th-order centered finite difference stencils (compute_christoffel_numerical; see Mathematical Formulation).RiemannComputer (include/relativistic/core/riemann.hpp) computes the Riemann tensor $R^\rho_{\phantom{\rho}\sigma\mu\nu}$, Ricci tensor $R_{\mu\nu}$, Ricci scalar $R$, and Kretschmann invariant $K_1 = R^{\alpha\beta\gamma\delta} R_{\alpha\beta\gamma\delta}$ (Mathematical Formulation).Every spacetime implementation satisfies the SpacetimeMetric concept (include/relativistic/metrics/spacetime_concept.hpp), requiring metric_tensor, inverse_metric, christoffel_symbols, and speed_of_light:
FlatMinkowskiMetric (MATHEMATICAL_FORMULATION.md Section 1.1), SchwarzschildMetric (Section 1.2), and KerrMetric (Section 1.3).SchwarzschildIsotropicMetric, PainleveGullstrandMetric, EddingtonFinkelsteinMetric, and Cartesian KerrSchildMetric (Section 1.3).ReissnerNordstromMetric (Section 1.4), KerrNewmanMetric (Section 1.5), SchwarzschildDeSitterMetric (Section 1.6), and FLRWMetric (Section 1.7).MorrisThorneWormholeMetric (Section 1.8) and AlcubierreWarpMetric (Section 1.9).BssnGrid (include/relativistic/metrics/bssn_grid.hpp) manages 3D spatial field representations ($\phi, K, \tilde{\gamma}{ij}, \tilde{A}{ij}, \tilde{\Gamma}^i, \alpha, \beta^i$), BssnEvolution (include/relativistic/metrics/bssn_evolution.hpp) implements 4th-order spatial finite differencing with RK4 time stepping, BssnConstraints (include/relativistic/metrics/bssn_constraints.hpp) evaluates Hamiltonian constraint residuals, and TricubicInterpolator / QuinticHermiteTimeInterpolator (include/relativistic/metrics/bssn_interpolation.hpp) provide spatial and temporal metric field evaluations (Description).RK45AdaptiveIntegrator (Dormand-Prince 5(4), include/relativistic/integrators/rk45_adaptive.hpp) and CashKarpIntegrator (include/relativistic/integrators/cash_karp.hpp) provide step-size regulation with constraint projection ensuring $u_\mu u^\mu = \text{const}$.Vernier9Integrator (include/relativistic/integrators/vernier9.hpp) implements a 16-stage 9(8) embedded Runge-Kutta scheme for high-precision orbit tracking.GaussLegendreIntegrator (include/relativistic/integrators/symplectic_gauss_legendre.hpp) provides implicit Runge-Kutta schemes (orders 4 and 6) guaranteeing preservation of phase-space symplectic 2-forms and Killing invariants.Hermite4AarsethIntegrator (include/relativistic/integrators/hermite4_aarseth.hpp) evaluates analytical jerk terms $\dot{\mathbf{a}}$ and higher derivatives for gravitational multi-body interactions.HorizonDetector (include/relativistic/integrators/horizon_manager.hpp) monitors trajectory progression and executes absorption or interior continuation based on configured boundary modes (Description).PostNewtonianSolver (include/relativistic/dynamics/pn_acceleration.hpp) and PostNewtonianSystem (include/relativistic/dynamics/pn_nbody_system.hpp) evaluate multi-body equations of motion from Newtonian up to 3.5PN order, including 2.5PN radiation damping, spin-orbit, spin-spin, and self-spin interactions (Mathematical Formulation).GravitationalWaveCalculator (include/relativistic/dynamics/pn_gravitational_waves.hpp) extracts trace-free quadrupole moments and evaluates radiation reaction power $P_{\text{GW}}$ and waveform strain polarizations $(h_+, h_\times)$ (MATHEMATICAL_FORMULATION.md Section 3.4).SphericalHarmonicsGravityModel (include/relativistic/gravimetry/spherical_harmonics.hpp) and AssociatedLegendreTable (include/relativistic/gravimetry/legendre_table.hpp) execute fully normalized spherical harmonic potential and acceleration evaluations up to degree and order 32, coupled with TidalPerturbationModel (include/relativistic/gravimetry/tidal_perturbations.hpp) Love number modifications (Description).OrbitalPrecessionAnalytic (include/relativistic/gravimetry/orbital_precession.hpp) computes secular nodal and apsidal drift rates ($J_2, J_4$).NFWProfile, EinastoProfile, BurkertProfile, and HernquistProfile (include/relativistic/dark_matter/dark_matter_profiles.hpp) compute enclosed mass, potential, and rotation curves (Description).BarnesHutOctree (include/relativistic/dark_matter/barnes_hut.hpp) executes hierarchical octree spatial partitioning with quadrupole multipole expansions and symplectic leapfrog advancement.MondFramework (include/relativistic/modified_gravity/mond.hpp) implements non-linear MOND interpolation functions ($\mu, \nu$), TeVeSSpacetimeMetric (include/relativistic/modified_gravity/teves.hpp) solves the covariant Tensor-Vector-Scalar metric, and FRChameleonModel (include/relativistic/modified_gravity/f_r_gravity.hpp) computes scalar-tensor field screening.PrimitiveVariables, ConservedVariables, and FluxVariables (include/relativistic/hydro/hydro_types.hpp) encapsulate fluid states and magnetic vectors (Mathematical Formulation).WENO5Reconstructor (JS and Z variants), MP5Reconstructor, and TVDReconstructor (include/relativistic/hydro/reconstruction.hpp) compute cell interface states; HLLRiemannSolver, HLLCRiemannSolver, and HLLDRiemannSolver (include/relativistic/hydro/riemann_solvers.hpp) resolve interface fluxes (Description).Con2PrimSolver (include/relativistic/hydro/con2prim.hpp) executes 1D/2D root-finding inversions from conserved to primitive variables, and ConstrainedTransport2D (include/relativistic/hydro/constrained_transport.hpp) enforces the solenoidal magnetic constraint $\nabla \cdot \mathbf{B} = 0$.IdealGasEOS, SyngeEOS, MathewsEOS, RelativisticFermiGasEOS, PolytropicEOS, PiecewisePolytropicEOS, and TabulatedNuclearEOS (include/relativistic/hydro/eos.hpp) model fluid thermodynamics (MATHEMATICAL_FORMULATION.md Section 4.3); RelativisticHydroSolver1D (include/relativistic/hydro/grhd_solver.hpp) integrates 1D relativistic fluids using SSP-RK3 time stepping; TOVSolver (include/relativistic/hydro/tov_solver.hpp) integrates the Tolman-Oppenheimer-Volkoff equations; NovikovThorneDisk (include/relativistic/hydro/novikov_thorne.hpp, MATHEMATICAL_FORMULATION.md Section 5.1) and FishboneMoncriefTorus (include/relativistic/hydro/fishbone_moncrief.hpp) model thin and thick accretion systems.StokesVector (include/relativistic/optics/stokes_vector.hpp), StokesEmissivity, and StokesTransferMatrix represent full-Stokes polarized transport (Mathematical Formulation).RadiativeProcessEngine (include/relativistic/optics/radiative_processes.hpp) computes non-thermal synchrotron emission/absorption, thermal synchrotron with Faraday rotation ($\rho_V$) and conversion ($\rho_Q$), and relativistic Bremsstrahlung (Description).PolarizedRadiativeTransfer (include/relativistic/optics/polarized_radiative_transfer.hpp) executes exact analytical matrix exponential integration along ray segments via Delano’s method.MaxwellJuttnerDistribution (include/relativistic/optics/maxwell_juttner.hpp) samples thermal relativistic electron distributions; InverseComptonEngine (include/relativistic/optics/inverse_compton.hpp) performs Monte Carlo photon packet scatterings via the Klein-Nishina cross section.ContinuousSpectrum (include/relativistic/optics/spectrum.hpp) manages multi-wavelength discretized radiances; CIE1931Observer (include/relativistic/optics/cie_observer.hpp) convolves radiances to XYZ and linear sRGB (MATHEMATICAL_FORMULATION.md Section 8.2); Tonemapper (include/relativistic/optics/tonemapping.hpp) applies ACES and logarithmic HDR tonemapping curves (MATHEMATICAL_FORMULATION.md Section 8.3).Interval<Scalar> (include/relativistic/uncertainty/interval.hpp) implements IEEE 1788 interval arithmetic operations, transcendental functions, and inclusion checks (MATHEMATICAL_FORMULATION.md Section 7.1).Zonotope<Scalar, Dim> (include/relativistic/uncertainty/zonotope.hpp) manages multidimensional generator sets with Girard order reduction to eliminate wrapping effects (Section 7.2).CovarianceMatrix<Scalar, Dim> (include/relativistic/uncertainty/covariance.hpp) implements continuous Jacobi-Lyapunov differential propagation, eigensystem decompositions, and confidence hypervolume calculations (Section 7.3).VariationalGeodesicIntegrator (include/relativistic/uncertainty/variational_geodesic.hpp) propagates 8D phase states $(\mathbf{x}, \mathbf{p})$ along with variational transition matrices and covariance envelopes.PolynomialChaosExpansion (include/relativistic/uncertainty/polynomial_chaos.hpp) executes spectral stochastic projections on orthogonal Hermite and Legendre bases via Gauss-Hermite and Gauss-Legendre quadratures (Section 7.4); PceGeodesicPropagator (include/relativistic/uncertainty/pce_geodesic.hpp) integrates stochastic geodesic ensembles.MetrologyVisualizer (include/relativistic/uncertainty/metrology.hpp) constructs 3D covariance ellipsoid meshes, generates 2D probability heatmaps, and extracts quantile confidence envelopes (Description).GeodesicComputePipeline (include/relativistic/render/geodesic_compute_pipeline.hpp) owns a front and a back framebuffer of GpuPixelOutput. In windowed mode a worker thread renders the most recent pending request (GpuCameraPushConstants and body list); a request arriving while a frame is rendering raises a cancellation flag, so superseded frames are abandoned. In headless mode dispatch renders synchronously. After each frame the pipeline classifies pixels (horizon absorbed, celestial escape, accretion disk hit, step saturated), computes iteration statistics and records tile statistics of the adaptive sky prepass.
Path selection. The Vulkan path is attempted when GPU compute is enabled and the executor is ready, and all of the following hold:
SoftwareComputeEngine::requires_exact_metric_path).Otherwise SoftwareComputeEngine::dispatch_fp64 or dispatch_double_single renders on the CPU thread pool, with the precision taken from the custom parameter precision_mode. Capture rendering uses the same selection through render_capture and render_capture_band.
Vulkan execution (include/relativistic/render/vulkan_context.hpp, include/relativistic/render/vulkan_compute_executor.hpp).
scalarBlockLayout, and shaderFloat64 when FP64 is requested. The score favors discrete GPUs, vendor identifier 0x10DE and FP64 support. When no device qualifies, the context stays initialized without a compute device and the CPU path is used.shaders/geodesic_tracer_fp64.comp.spv is searched in shaders, ../shaders, ./shaders and ../../shaders. CMake compiles it with glslangValidator when available.GpuBodyGpuLayout), 3 panorama combined image sampler, 4 persistent counter storage buffer.sky_background_source is not zero, the selected panorama (SkyPanoramaLoader) is uploaded as an R8G8B8A8_SRGB image.Viewport frame logic (ViewportPrimaryWindow, include/relativistic/ui/viewport_primary_window.hpp).
RGBA32F texture.Coordinator. CaptureCoordinator (include/relativistic/capture/capture_coordinator.hpp) manages one capture session at a time. update(dt) is called once per UI frame and prepares frames; a worker thread executes the queued tasks (frame rendering, file writing, ffmpeg assembly). The capture constants are derived from the last constants dispatched by the viewport, with the current camera, exposure and mass parameters substituted (ViewportPrimaryWindow::build_capture_constants).
Frame rendering.
clamp(2^21 / (width * k^2), 1, height) rows, where k is the supersampling factor. Each band is traced at $k$ times the output resolution through GeodesicComputePipeline::render_capture_band and streamed to an ImageStreamWriter, so memory use does not depend on the output height.step_size_factor, min_step_size and max_step_size by the step refinement factor.Deterministic mode. For each frame the coordinator processes script events, then for each of the temporal_samples sub-frame times: advances the simulation (ticks_per_frame multiplied by the script simulation rate and divided by the sample count, accumulated as a fractional tick count), applies the script pose, and stores constants and bodies. The shutter offsets are centered on the frame time and span shutter_fraction of the frame interval. At most two frames are queued at once. World advance modes: frozen, fixed ticks per frame, or simulation seconds per video second (ticks per frame = s / (fps * tick_dt)). With the trigger PathDuration, the frame index is mapped linearly onto the script duration. Pause and resume events freeze and release the world. Manual stepping renders one frame per request (at most 64 pending). The live viewport render is suppressed unless preview_in_viewport is set.
Real-time mode. The front framebuffer is copied at the frame interval. Pacing either drops late frames or duplicates the last frame to fill gaps; frames waiting for disk writing are limited by the queue depth. The viewport resolution multiplier is locked, and frames whose size changes are resampled by nearest neighbor to the first frame size.
Session end. The recorder is finalized, the camera, field of view, exposure, camera mode, warp factor and pause state are restored (the camera only when restore_camera_after_capture is set or a script was used), sequence_info.txt is written, and ffmpeg is invoked through std::system when assembly is enabled and the session completed. Frames are deleted after a successful assembly when requested. Output files are described in FILE_FORMATS.md.
Motion script (include/relativistic/capture/motion_script.hpp). A script is an ordered list of segments with a global easing and an end behavior (clamp, loop, ping-pong).
kEventParameters (include/relativistic/capture/script_events.hpp).Expression language (include/relativistic/capture/expression.hpp). Expressions compile to a stack program. Variables: t (segment time), u (progress), d (duration), g (script time), a, b, c, k (parameters), r (radius), x, y, z (position), v (speed), m (driven measurement), p (script progress), s (segment index). Constants: pi, tau, e. Operators: + - * / % ^, < > <= >= == !=. Functions: sin cos tan asin acos atan sinh cosh tanh exp log ln log2 log10 sqrt cbrt abs floor ceil round fract sign rad deg saturate smooth noise tri saw square atan2 min max hypot step pow mod clamp mix if smoothstep. Division by zero evaluates to 0 and non-finite results are replaced by 0.
Recording and preview. PhysicsRecorder derives kinematic and relativistic channels from the live camera pose and the orchestrator state for each frame (FILE_FORMATS.md). build_path_preview (include/relativistic/capture/path_preview_builder.hpp) samples the script into a PathPreview (vertices, reference path without shake and transitions, markers, camera frustum) drawn by the schematic renderer.
PerformanceProfiler (include/relativistic/orchestrator/performance_profiler.hpp) keeps a ring of FrameSample records (default capacity 3600, minimum 16). Stage durations are accumulated through ScopedStageTimer and attached to the next recorded frame. The stages are FrameTotal, RenderDispatch, TextureUpload, HudOverlay, CameraUpdate, SchematicOverlay, PostProcessing, FramebufferReadback, GpuDispatchExecution, CpuDispatchExecution, AdaptiveTilePrepassSky, PixelClassification and CameraConstantsBuild.
StatisticalSummary provides mean, median, minimum, maximum, population standard deviation and the 95th and 99th percentiles (linear interpolation).analyze_bottleneck selects the dominant stage among all stages except FrameTotal and the five render sub-stages, reports ray step saturation when the mean saturated ray fraction exceeds 0.35, and flags a window without any GPU frame.EngineSignature::compute (include/relativistic/core/engine_signature.hpp) is the first 8 bytes (16 hexadecimal characters) of the SHA-256 digest of the build tag relativistic-engine-perf-abi, the structural revision, and sizeof(GpuCameraPushConstants) and sizeof(GpuPixelOutput). Runs with a different signature are marked as not directly comparable.Logging. EngineLog (include/relativistic/core/engine_log.hpp) keeps the last 4096 entries with a timestamp and severity (info, warning, error) and mirrors them to standard output or standard error.
Settings. UserSettings and CaptureStudioSettings are loaded at startup and saved by UiManager::export_runtime_settings. The crash guard and load policy are described in FILE_FORMATS.md.
SchematicViewRenderer (include/relativistic/ui/schematic_view_renderer.hpp) draws bodies, the central object, background grid, field lines, trails, orbit predictions, vectors and the capture path preview as a projected overlay, using the camera tetrad and the selected projection (pinhole when human_perspective_mode is set). Objects are depth-sorted and path segments are split at occlusion boundaries so that spheres cover the segments behind them. Orbit predictions integrate a two-body orbit around the central mass with a velocity Verlet scheme. Spacetime source bodies are drawn with a horizon disc, ISCO and disk outer rings and a spin axis. The overlay can be shown on top of the ray-traced image, optionally applying a first-order deflection $4M/b$ (limited to 0.35 rad) to body positions.
The HUD (HudLayoutConfig, include/relativistic/ui/hud_layout_config.hpp) consists of 25 elements with anchor, offset, scale, color, background, display mode (compact, standard, extended), horizontal layout, draw priority, decimal precision and warning and critical color rules. Automatic arrangement stacks elements per anchor without gaps. Frame time readouts use a rolling average over rolling_average_frame_count samples (2 to 120).
ConstantsEngine (include/relativistic/core/physical_constants_engine.hpp) stores the simulation values of $c$, $G$, $h$, $k_B$, $N_A$, $K_e$ and $K_{cd}$. It is constructed with the Planck preset ($c = G = k_B = K_e = K_{cd} = 1$, $h = 2\pi$, $N_A$ unchanged); UiManager then applies the preset stored in the user settings (SI by default). Setting any constant switches the preset to Custom. Each value is clamped to at least $10^{-300}$. The post-Newtonian solver uses the engine values of $c$ and $G$.
The scale factors between simulation units and SI units are:
\[T_0 = \sqrt{\frac{G_{SI}}{G}\frac{h_{SI}}{h}\left(\frac{c}{c_{SI}}\right)^5}, \quad L_0 = \frac{c_{SI} T_0}{c}, \quad M_0 = \frac{G}{G_{SI}}\frac{L_0^3}{T_0^2}\] \[Q_0 = \sqrt{\frac{K_e}{K_{e,SI}}\frac{M_0 L_0^3}{T_0^2}}, \quad K_0 = \frac{k_B}{k_{B,SI}}\frac{M_0 L_0^2}{T_0^2}, \quad N_0 = \frac{N_A}{N_{A,SI}}, \quad I_0 = K_{cd}, \quad A_0 = \frac{Q_0}{T_0}\]Derived simulation quantities include the reduced Planck constant $h / 2\pi$, the Stefan-Boltzmann constant $2\pi^5 k_B^4 / (15 h^3 c^2)$, the vacuum permittivity $1 / (4\pi K_e)$, the vacuum permeability $4\pi K_e / c^2$, the magnetic coupling $K_e / c^2$ and astronomical quantities (solar mass, astronomical unit, Earth and Jupiter masses, parsec, light year, particle masses, solar Schwarzschild radius, Thomson cross section, Wien constant) divided by the corresponding scale. The Constants window accepts unit-aware expressions checked against the expected dimension (Units::ExpressionEvaluator::evaluate_expect_dimension).
The system employs a multi-threaded execution model designed to eliminate synchronization stalls & lock contention:
The execution flow is governed by Scheduler, maintaining a fixed logical clock frequency (10 to 1000 Hz) decoupled from visual presentation refresh rates:
request_steps), & continuous time dilation scaling (warp_factor).Communication between the master terminal/UI & the simulation core is mediated by SpscQueue (Single-Producer Single-Consumer lock-free ring buffer):
std::memory_order_acquire, std::memory_order_release) with cache-line-isolated pointers (64-byte padding) to eliminate false sharing.ThreadPool manages a static pool of std::jthread workers synchronized via condition variables, executing chunked parallel loops (parallel_for).SimulationOrchestrator::advance_simulation(dt) (include/relativistic/orchestrator/simulation_orchestrator.hpp) performs the following steps:
Central Object of mass $M$, radius $2M$ and spin $(0, 0, aM)$ is registered as the spacetime source, unless an enabled body of mass above $0.5M$ already sits at the origin.Symplectic or Gauss, and the fourth-order Runge-Kutta post-Newtonian integrator otherwise, followed by the interaction step and the horizon absorption step. Bodies disabled before the step keep their state.Horizon absorption (handle_horizon_absorption) operates on the central mass with spin clamped to $\pm 0.999M$ and the outer horizon radius $r_h = M + \sqrt{M^2 - a^2}$:
Command application, including the Reset semantics, is described in CLI_REFERENCE.md. Changes to $c$ and $G$ in the constants engine are copied to the N-body configuration.
ScenarioLocator (include/relativistic/io/scenario_locator.hpp) resolves files and the scenario directory relative to the working directory and up to four parent levels (kMaxAncestorDepth). A requested path is tried as given, then prefixed by up to four .. components, then, when its parent directory is named scenarios, against the located scenario directory. portable_path stores paths inside the scenario directory in the form scenarios/<file>.
At startup UiManager::queue_startup_scenario loads the configured default_scenario_path when load_scenario_on_startup is set. If the file cannot be resolved, parsed or validated, the built-in scenarios/schwarzschild_accretion.yaml is loaded instead and becomes the stored startup path; when it is also unavailable, the simulation starts empty. The Scenario Manager scans the directory for .yaml and .yml files, marks files that fail parsing or validation as incompatible, protects the built-in startup file from deletion, and saves new presets under collision-free file and scenario names (<stem>_<n>.yaml and <name> (<n>)).
The engine provides multi-tiered precision configurations to balance numerical accuracy & throughput:
double) across all tensor algebra, Christoffel derivations, variational mechanics, & geodesic integration loops.DoubleSingle (include/relativistic/render/double_single.hpp) emulates extended precision (approx. 48 bits of mantissa, matching $\approx 14$ decimal digits) using pairs of IEEE 754 single-precision floats (hi, lo). The functions ds_sin, ds_cos and ds_atan2 evaluate in double and split the result.two_sum, Dekker’s two_diff, and Veltkamp-Dekker two_prod (using hardware fma).SoftwareComputeEngine::dispatch_double_single on the CPU (Technical Manual). The Vulkan compute path requires native FP64 and is skipped when double-single precision is selected (see Section 2.9).SimdVec<T, Width> and SimdMask<T, Width> (include/relativistic/core/simd.hpp) map to native SIMD registers across AVX2, AVX-512, and ARM Neon (Technical Manual).GeodesicBundle (include/relativistic/core/geodesic_bundle.hpp) formats ray coordinates and four-momenta in Structure-of-Arrays (SoA) layout, executing vectorized RK4 updates across concurrent ray lanes (GeodesicBundle4d and GeodesicBundle8f; see TECHNICAL_MANUAL.md Section 2.9).The platform provides decoupled interfaces for interactive exploration & batch execution:
MasterTerminalRepl provides an asynchronous, non-blocking command-line interface.CommandParser) translates text commands into strongly-typed Command structures dispatched to the simulation orchestrator without graphical dependencies. A line is rejected when the queue (capacity 1024) is full; applied commands report their outcome through the result queue. Command processing rules are listed in CLI_REFERENCE.md.When executing in interactive mode, UiManager coordinates GLFW windowing, OpenGL 3.3+ rendering contexts, & ImGui/ImPlot multi-viewport docking:
ViewportPrimaryWindow): High-resolution display of the raytraced image stream with interactive HUD telemetry overlays & camera transport toolbars.ControlPanelWindow): Tabbed configuration interfaces for spacetime parameters, camera optics, skybox environments, integrators, & 6-DOF relativistic rocket propulsion.ScenarioSelectorWindow): Scenario browser supporting preset loading & YAML file serialization.TelemetryWindow, VisualDiagnosticsWindow): Real-time numerical display & temporal history graphs of Ricci scalar curvature $R$, Kretschmann invariant $K_1$, metric tensor components $g_{\mu\nu}$, & horizon radii.SpectrographWindow): Real-time plotting of spectral radiance curves $I(\lambda)$ with $1\sigma$ confidence bands & perceived CIE sRGB color swatches.PerformanceSettingsWindow): Profiles, internal render scale adjustment, ray budget limits, & arithmetic precision toggling.InteractiveCameraController): Manages navigation modes (Free-Fly 6-DOF, Orbit Center, Spherical Boyer-Lindquist, and Rocket Thrust) with mouse-look, hotkey shortcuts, and 8 projection modes (Pinhole, AutoZoom, FisheyeStereographic, Equirectangular360, FisheyeEquidistant, FisheyeOrthographic, PaniniCylindrical, HammerAitoff). Mode behaviors are listed in CLI_REFERENCE.md.BodyManagerWindow (N-body catalog & interaction configuration), HudManagerWindow (on-screen telemetry layout), ConstantsWindow (physical constants presets), KeybindSettingsWindow (input rebinding), LogConsoleWindow (engine log viewer with severity filters and, on Windows, a system console toggle), PerformanceAnalysisWindow (benchmark capture & bottleneck analysis), SecondaryViewportManager (auxiliary observer viewports), and CaptureStudioWindow (screenshots, sequences, motion scripts, data recording and video encoding settings, described in Section 2.10).UiManager provides the presets MultiWindowDetached, DockedWorkspace, ViewportFocused and DeepAnalysis, applied on the next frame; global hotkeys are processed only when no text widget captures the keyboard.The engine interfaces with standard astronomical data formats & ephemeris services:
HorizonsInterface: Formulates REST queries & parses NASA JPL Horizons CSV vector tables, converting barycentric state vectors to SI units.SpkKernel & SpkChebyshevSegment: Evaluates Type 2 (position-only) and Type 3 (position/velocity) Chebyshev segments via polynomial recurrence relations. parse_daf_spk_bytes validates the file header only; segment loading from DAF records is not implemented (see FILE_FORMATS.md).FrameTransformer: Converts state vectors & four-vectors between ICRF J2000, Heliocentric Ecliptic, Geocentric Equatorial, & comobile boosted reference frames.ScenarioSerializer: Reads & writes declarative YAML scenario files (.yaml).FitsExporter: Generates 2D radiance images & 3D spectral data cubes $(X, Y, \lambda)$ adhering to the FITS Standard 4.0 with WCS astrometric headers & big-endian IEEE 754 formatting.Hdf5Container: Serializes hierarchical binary datasets including worldlines, metric series, covariance matrices, & tabulated nuclear equations of state.VtkExporter: Generates VTK XML PolyData files (.vtp) for polyline trajectories & event horizon surface meshes.ImageCodecs, ImageStreamWriter and ScreenshotExporter: Encode and stream ten image formats (FILE_FORMATS.md).TelemetryTable and write_telemetry_table: Store and serialize recorded channels in seven formats (FILE_FORMATS.md).UserSettings, CaptureStudioSettings and PerformanceProfiler persistence: Key-value configuration files under config/ (FILE_FORMATS.md).