Files
solvecraft/docs/render-cpu-celestial.md
selune 068c46cf8b Render: restore saved shots, progressive CPU/GPU images and exports (#6201) (#11087)
* Render: restore saved shots, progressive images and exports

* Render: register existing live and coat command tests

* Render: isolate lens saves and retain bounded previews

Save only lens parameters on existing CPU/GPU jobs while keeping unrelated
draft settings dirty. Retain pinned checkpoints through preview and status,
and release host-only snapshots outside the status lock.

Use the admitted PNG bound for registered-executor checkpoint slots. Preserve
executor work credits, final publication and regrade ownership. Add regression
coverage and align help, translations and capability documentation.

* Render: preserve live feedback and address review regressions

* Preserve saved cameras when applying Render library edits

Keep the saved camera when lighting or maps are applied to an existing shot. Fit and centre the measured Render host using the painted picture. Carry forward the upstream CPU and GPU preset and ZoomTool contracts.
2026-11-06 02:47:52 +00:00

5.2 KiB

CPU finite Sun and gradient Sky

This source change adds the shared finite Sun and gradient Sky intent to CPU ray tracing with explicit Indirect lighting (options.path). It is an opt-in transport extension; selecting a light never enables GI or replaces another environment. Raster remains schematic. The implementation and its renderer, saved/runtime and pointer-UI tests are included in published 00edaf6a/tree 38a7f0af and executed by CI7. Full CI7 remains red, and dedicated native Sun/Sky or Glass image-quality acceptance remains pending; see qualification.

CpuJob.sun uses the existing Sun direction, angular radius in radians (0.001…π/2), and relative linear-sRGB radiance (0…100,000,000 per channel). It is distinct from a hard directional source: a hard source retains angular_radius_rad: None, and the zero-radius/default route keeps its existing producer/RNG/work behavior. The optional Sun shares the eight-directional limit; point/spot and rectangle limits are unchanged.

CpuJob.sky uses the existing portable SkyEnvironment::Sky fields: linear zenith/horizon/ground RGB, world-Z axis, rotation within ±1,000,000 radians and intensity 0…100. Its radiance is the same unchanged f32 gradient at the GPU's 256 row centres. Longitude rotation is retained but this axisymmetric gradient is invariant under it. CPU evaluates a selected row directly; it does not generate an HDR image, quantize to RGBE or allocate an environment plane. CPU uses uniform solid-angle proposals; GPU uses its existing alias-table proposals. This is the same radiance target, not a claim of equal convergence or CPU/GPU pixel identity.

Constant, Sky and HDR illumination are exclusive sources. Finite Sun is additive with any one of them. HDR retains its existing declared-primary policy, intensity limit 64 and direct sample count; Sky takes one NEE proposal per shaded bounce. The built-in HDR library requires explicit replacement consent and refuses an analytic Sun when the selected HDR already owns its solar disk. Generic HDR bytes have no inferred solar ownership. Display backplates remain separate from light.

CPU Path samples the finite Sun uniformly over its cap. Environment and Sun NEE and escaped BSDF contributions each use their own power weight against the same material PDF, with the actual competitor count and depth endpoint. Delta Glass escape receives full emitter weight after the existing physical Beer segments. Nearest geometry/area-emitter endpoints, thin-shadow continuation and certified nested origins retain their existing contracts. Infinite NEE connections through closed Glass are still outside the existing supported connection domain, as in the GPU consumer; this does not add caustic or closed-interface NEE support.

Effects → Maps → Aging still supplies the shared BRDF/PDF and guide material. Sky/Sun add no guide or snapshot plane. Optional Sun/Sky boxes are billed at actual size_of in the retained request and both owned producer option copies. The unchanged 4096-byte task slot must contain the enlarged inline option headers; the static size assertion is retained. The retained Record's optional Sun/Sky headers and inline Volume header are summed once by the shared fixed metadata helper on every captured request, including raytrace=None. Regrade pays the same actual-size sum in its retained request lease, independently of its presentation/ master lease and without duplicating source texture/HDR costs. Thus default pixels/work/buffers stay identical, but its admission metadata estimate honestly includes this sizeof delta; no previous layout is fabricated. Every new Sun stage consumes the existing cumulative work ledger before mutation, and the next bounded host quantum observes cancellation. None skips that stage and allocates no celestial heap state.

The common light editor saves/loads/filters finite Sun on either renderer. CPU Sky is available from the Environment source picker only with explicit Indirect lighting. Numeric load, Undo and environment edits preserve the shot camera. When a Sun/Sky setup switches between CPU and GPU, its exact source values and common rig are converted prospectively. Incompatible domains refuse atomically. For GPU→CPU with no CPU Path, a separate reachable method action explicitly plans Indirect depth, CPU progressive SPP/seed and traced shadows, then validates and persists one Undo transaction. It retains the chosen CPU profile, adaptive policy, presentation, lens and saved scene intent; it never raises a cap or clamps depth. The same transaction includes an authored Atmosphere box, so a combined setup never uses sequential effect writes or an obsolete GPU-only Volume refusal. Atmosphere still refuses incompatible Glass/SSS, noise reduction and transmission strata without clearing their values.

The published suites cover independent per-ordinal/energy cases, HDR addition, complete PNG prefixes, raw FLOAT32 masters, lens/adaptive/certified-Glass routes, map/aging closure, work/cancel and retained capacity, plus saved/common API and pointer-UI fixtures. Native preview/final/export/reopen evidence for each such optical combination remains separate. Results from an earlier binary or source do not qualify a new implementation.