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