mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-06 20:02:16 +00:00
77 lines
5.2 KiB
Markdown
77 lines
5.2 KiB
Markdown
# 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](render-parity.md#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.
|