settings¶
The renderer’s feature toggles: the storage behind SETTINGS.raytracing.
Renderer switches stored here use the same names exposed by
SETTINGS.raytracing. Some have environment-variable defaults; others have
ordinary Python defaults. Additional fields live in the storage modules listed
by algan.settings.raytracing_settings. The validated settings facade exposes
all of those modules together; the switches that
change what the image looks like are exposed on it directly, and the kernel and
performance switches through SETTINGS.raytracing.experimental.
One name, deliberately. These used to be UPPER_CASE here and lowercase there,
joined by a hand-maintained table in algan/settings/raytracing_settings.py,
and nine switches reached the engine with no way to set them because nobody
added their row. The field set is derived from this module now, so a switch
declared here is reachable by construction. The corollary is that a helper
function may not share a name with a field – the later def would take the
name over and the field would vanish silently (see _shadowed_fields).
Read these live – rt_settings.x at call time, not from ... import X
at module import. Importing by value freezes a toggle at its import-time state,
before user code has had a chance to set it. That bug has shipped before.
set_unsupported_feature_policy() and report_unsupported_features()
decide what happens when a Scene asks for something the selected tracer cannot
do: raise (the default), warn, or ignore.
Functions
- analytic_aa_bez_active()[source]¶
Live effective value of circuit analytic coverage.
Read at call time, never imported by value: settings are module globals with env-var defaults and user code flips them after import.
- analytic_aa_bez_mode()[source]¶
Circuit coverage as the kernels’
aa_beztemplate value.0 off, 1 the box filter, 2 the exact angle-aware area (
analytic_aa_exact), 3 that plus the two-segment boundary model (analytic_aa_bez_wedge, default on since 2026-08-13). The distinction rides in the template value so the two forms cannot share an offline-cache entry; everything downstream that only asks whether circuit coverage is on keeps testing it for truth.
- analytic_aa_sliver_mode()[source]¶
Index of the live sample-less-triangle policy in the mode tuple.
Read at call time (never imported by value) and returned as an int, because it reaches the kernels as part of the
aatemplate value: the geometry kernels see1 + mode, so each policy compiles its own variant and the offline cache cannot serve one policy’s kernel for another.
- effective_analytic_aa_secondary_samples()[source]¶
Live continuation-ray tap count; 1 (off) unless analytic AA is on.
Clamped to
[1, _AA_SEC_MAX]and otherwise returned unchanged: every count in that range has real sub-pixel positions (hand-written for 1/2/4/8, generated for the rest), so there is no supported set left to snap to. N still reaches the resolve as a template value, which is why a value above the ceiling is clamped with a warning rather than honoured – the position mask is an i32 bitfield, and each extra distinct tap count also pays a kernel compile of its own (see the warning text).
- glossy_blur_sigma_px(roughness, d_reflected, d_primary, theta_px)[source]¶
The prefilter’s blur radius in pixels, in pure Python.
The kernels compute this inline (
sheet_resolve_taichiproduces the per-pixel scale,glossy_prefilter_taichi.gloss_scatterapplies the cone factor); this is the same arithmetic in one place, for tests and for anything on the host that needs to predict it. SeeDESIGN_glossy_prefilter.md§3 for where each term comes from.d_reflectedis how far past the primary hit the reflected content sits;inf(a ray that escaped) is a reflection of the sky and blurs by the full lobe angle, and 0 (a reflection in contact with its reflector) does not blur at all.
- glossy_reflection_mode()[source]¶
Live glossy-lobe mode: 0 off, 1 fan only, 2 fan + per-pixel rotation, 3 split-sum prefilter (
glossy_prefilter, the default when glossy reflections are on at all).Read at call time (never imported by value) and returned as an int, because it reaches the resolve as a TEMPLATE value: each mode compiles its own kernel variant with its own cache key, so the offline cache cannot serve one mode’s kernel for another. A module-level constant read at import would instead freeze the first value for the process, which no cache could fix.
- hdr_frame_dtype()[source]¶
dtype of the linear-HDR frame buffer used under post-process tonemapping: float32, or float16 when
hdr_buffer_f16is on.
- kernel_compiled_in_values()[source]¶
What a kernel compiled right now would fold in.
Read through
SETTINGS.raytracingrather than off this module’s globals, because two of the five are stored beside the kernels that bake them (raytrace_kernels_taichi) and the facade resolves a field wherever its storage module keeps it.
- merge_on_gpu_active()[source]¶
True when the scene merge + STBVH build should run on the render device.
Requires
merge_on_gpuand a CUDA render device – the offload only pays off on a real accelerator, and the transient-peak accounting uses thetorch.cudamemory-stats API. A CPU (or MPS) render device keeps the merge on the CPU, byte-identically to the pre-toggle path.
- nested_ior_mode()[source]¶
Live nested-IOR mode: 0 off, 1 media stack maintained.
Read at call time (never imported by value) and returned as an int, because it reaches the shade/resolve kernels as a TEMPLATE value: each mode compiles its own kernel variant, so the offline cache cannot serve one mode’s kernel for another (see
glossy_reflection_mode).
- note_sparse_discovery_footprint(arena_bytes, num_frames)[source]¶
Record the arena footprint of one sparse-coverage discovery pass so the render-chunk preflight can reserve for the next one (see
_SPARSE_DISCOVERY_BYTES_PER_FRAME).
- pn_criterion_kernel_active()[source]¶
True when the level searches should use their fused Taichi kernels.
Two arrangements put the criterion’s tensors on Taichi’s arch device, which is the whole requirement (see
taichi_runtime.taichi_launch_is_local):projection ran on a CUDA render device, so the geometry is already there;
the arch is the CPU, so the host tensors never had to go anywhere.
The second was excluded until 2026-08-26 for a reason that only covered the first: launching against CPU tensors stages every argument through VRAM. That is true when the arch is CUDA and false when it is x64, so the rule as written turned the kernels off in the one case where they are free. The remaining tensor-by-tensor device check lives in the input builders.
- project_on_gpu_active()[source]¶
True when
project_to_screenshould run on the render device.Requires
project_on_gpuand a CUDA render device (seemerge_on_gpu_activefor why CUDA specifically).
- raster_write_compact_active()[source]¶
True when the write pass should be launched over the live pairs only.
Off on MPS, where it corrupts the fragment stream. Measured on the Mac runner, both arms in one session with everything else identical (
benchmarks/performance/reports/mac_2026_09): with the compaction the emitted keys carry scattered pixel ordinals the write kernel cannot have produced – it guards0 <= lp < tile_pixels– and the values are stale arena bytes, i.e. slots the write pass never visited. The same emission without it is clean, and so is every later one, including the whole 4K render that the compaction had never let finish.The selection is not what breaks:
_check_write_compactioncompares the pairs withcounts > 0, the pairs withaccepts != 0, and whatnonzeroreturns, and on the failing run all three agree. What is left is the gathered argument tensors the compacted launch passes instead of the originals, and that is a torch-MPS / Taichi-Metal interaction this gate does not attempt to fix – it declines to depend on it.ALGAN_RASTER_WRITE_COMPACT=0still turns it off everywhere, and setting it to 1 does not force it back on for MPS: a wrong picture is not a thing to opt into by accident. Useset_raster_write_compactfor the A/B.
- report_unsupported_features(message)[source]¶
Apply the configured policy to an unsupported render combination.
- set_analytic_aa(enabled, *, bezier=None, triangles=None, seam=None, sliver=None, secondary=None, exact=None, wedge=None, run=None, run_rule=None, run_full=None, one_mesh=None)[source]¶
Toggle analytic anti-aliasing (see
analytic_aa).
- set_bez_bvh_split(enabled)[source]¶
Toggle median-split ordering for the bezier STBVH (see
bez_bvh_split).Takes effect on the next scene build.
- set_bvh_defer(enabled)[source]¶
Toggle deferred (on-demand) STBVH builds for batches that provably do not traverse them (see
bvh_defer). Takes effect at the next batch’s scene merge.
- set_bvh_refit(enabled)[source]¶
Toggle the shared-topology binned-SAH refit BVH (see
bvh_refit). Takes effect at the next batch’s scene merge.
- set_denoise_precision(value)[source]¶
Select the denoiser’s arithmetic precision (see
denoise_precision).One of
"auto","fp16"or"fp32". Takes effect at the next render; the loaded network is re-cast when the choice changes.
- set_frag_pid_gate(enabled)[source]¶
Toggle compile-time material-pipeline gating of the shade kernels (see
frag_pid_gate). Takes effect at the next render batch.
- set_fragment_shading(enabled)[source]¶
Toggle per-fragment shading of the deterministic ray tracer.
When enabled, triangle/PN hits whose material is one of the core lit shaders (the legacy diffuse default,
MeshBasicMaterial,MeshLambertMaterial,MeshPhongMaterial,MeshStandardMaterial,MeshPhysicalMaterial,MeshToonMaterial,MeshNormalMaterial,MeshMatcapMaterialandMeshDepthMaterial) are shaded per fragment in-kernel from the raw albedo, a per-primitive material block and the scene’s lights – crisper specular highlights and smooth shading on coarse meshes. Other materials keep vertex shading. Only the deterministic renderer (set_samples_per_pixel(1), non-physical) is affected. Set before rendering.
- set_glossy_reflection(enabled, *, interleave=None, prefilter=None)[source]¶
Toggle roughness-driven glossy reflections (see
glossy_reflection).prefilterselects the split-sum route (default) over the tap fan;interleaveonly means anything to the fan.
- set_hdr_buffer_f16(enabled)[source]¶
Toggle the float16 linear-HDR frame buffer (see
hdr_buffer_f16).Takes effect at the next render batch’s buffer allocation.
- set_hybrid_raster(enabled)[source]¶
Toggle the hybrid raster primary-visibility front-end (see
hybrid_raster).
- set_linear_color_space(enabled)[source]¶
Enable or disable the linear working color space.
On by default. Authored color is decoded from sRGB to linear light at the render boundary, every shading and compositing operation happens in linear, and the sRGB transfer function is applied once at the byte write. This is the arrangement three.js uses, and it is what makes lights add: sRGB encoding is concave, so adding encoded values overshoots the encoded sum – two lights that should put a white surface on byte 188 put it on 255.
Unlit flat 2-D content is unaffected either way, because decoding and then encoding with no arithmetic in between is the identity. What moves is anything the renderer actually computes: lit surfaces (mid-tones lift, a surface at half illumination going from byte 128 to 188), antialiased edges, alpha compositing and the supersample downsample.
Turning it off restores the previous display-referred pipeline exactly, including the illumination-budget normalisation that had to exist to stop gamma-space light sums running away. It is there for A/B comparison and for reproducing pre-change output;
agent_guidance/rendering.mdhas the measurements.Both arms are correct in one process, but not free: the shading kernels fold this gate in when they compile (
KERNEL_COMPILED_IN_FIELDS), so the first render after a change rebuilds the Taichi program and pays a kernel-preparation pass. Set it once at the top of a script rather than per frame.
- set_merge_dedup_geometry(enabled)[source]¶
Toggle the merge-time collapse of temporally-constant geometry tables (see
merge_dedup_geometry). Takes effect at the next batch’s merge.
- set_merge_dedup_time(enabled)[source]¶
Toggle the merge-time collapse of temporally-constant tables (see
merge_dedup_time). Takes effect at the next batch’s scene merge.
- set_mesh_id(enabled)[source]¶
Toggle mob-declared surface identity (see
mesh_id). Takes effect at the next batch’s primitive build.
- set_opaque_bvh_skip_dead(enabled)[source]¶
Toggle skipping the dedicated opaque-only STBVH builds while no rollout consumes them (see
opaque_bvh_skip_dead). Takes effect at the next batch’s scene merge.
- set_per_mob_shadow_flags(enabled)[source]¶
Toggle the per-mob shadow flags (see
per_mob_shadow_flags). Takes effect at the next batch’s scene merge.
- set_pn_criterion_kernel(enabled)[source]¶
Toggle the fused subdivision-level criterion kernels (see
pn_criterion_kernel).
- set_polyhedron_winding(enabled)[source]¶
Toggle outward face orientation for closed polyhedra (see
polyhedron_winding). Takes effect for the nextPolyhedronbuilt.
- set_post_process_tonemap(enabled)[source]¶
Enable or disable post-process tonemapping instead of in-kernel tonemapping.
Disabling it makes the composite write uint8, which clamps every channel – including the glow lane – to 0-255 before bloom runs. A mob with
glow > 1therefore saturates and its halo comes out markedly dimmer and less saturated than on the default HDR path. Turn this off only for an A/B against the legacy in-kernel tonemap; to get linear output, useset_tonemapping()alone, which keeps the HDR buffer.
- set_post_tonemap_kernel(enabled)[source]¶
Toggle the standalone Taichi post-process tonemap kernel (vs the torch tonemap pipeline). The kernel reuses the in-composite tonemap ti.funcs and computes in f32, recovering most of the cost the move to post-process tonemapping added (the torch tonemap ran ~20 ops/pixel over every frame). Kill-switch / A-B hook.
- set_pt_authored_light_sampling(value)[source]¶
Select how the path tracer lights authored-appearance materials.
One of
"off","auto"(the default) or"always"; seept_authored_light_sampling. Host-side, read at the start of each render call, so both arms run in one process.
- set_raster_bez_precompute(enabled)[source]¶
Toggle the batched circuit screen-bounds precompute in the hybrid raster front-end (see
raster_bez_precompute).
- set_raster_covered_shade(enabled)[source]¶
Toggle the covered-pixel-compacted raster resolve (see
raster_covered_shade).
- set_raster_empty_skip(enabled)[source]¶
Toggle the empty-pixel fast path of the hybrid raster resolve (see
raster_empty_skip).
- set_raster_fused_gather(enabled)[source]¶
Toggle the fused six-array fragment gather (see
raster_fused_gather). Takes effect at the next batch’s emission.
- set_raster_opaque_trunc_kernel(enabled)[source]¶
Toggle the kernel opaque-prefix truncation mask (see
raster_opaque_trunc_kernel). Takes effect at the next batch’s emission.
- set_raster_pair_expand_kernel(enabled)[source]¶
Toggle the kernel pair-row expansion (see
raster_pair_expand_kernel). Takes effect at the next batch’s emission.
- set_raster_pair_flags(enabled)[source]¶
Toggle the host-side per-frame candidate-class flags used to skip empty per-tile pair emission (see
raster_pair_flags).
- set_raster_span_candidates(enabled)[source]¶
Toggle row-span pair candidates (see
raster_span_candidates). Takes effect at the next batch’s emission.
- set_raster_sparse_coverage(enabled)[source]¶
Toggle the exact covered-pixel lifecycle of the hybrid raster path.
- set_raster_ss(enabled)[source]¶
Toggle screen-space rasterization in the hybrid raster front-end (see
raster_ss).
- set_raster_straddle_clip(enabled)[source]¶
Toggle the camera-plane clip of hybrid-raster candidate bboxes (see
raster_straddle_clip).
- set_raster_tri_precompute(enabled)[source]¶
Toggle the batched triangle screen-bounds precompute in the hybrid raster front-end (see
raster_tri_precompute).
- set_raster_write_compact(enabled)[source]¶
Toggle the write-pass pair compaction (see
raster_write_compact). Takes effect at the next render batch.
- set_rgb_shadow_tint(enabled)[source]¶
Toggle colored shadow tinting/absorption (see
rgb_shadow_tint).Because the gate compiles into the kernels, this takes effect for kernels compiled AFTER the call – existing variants are reused. For a guaranteed switch, set
ALGAN_RGB_SHADOW_TINTbefore importing algan or run the other arm in its own process.
- set_samples_per_pixel(samples)[source]¶
Set how many rays are averaged per pixel. 1 (the default) uses the exact deterministic renderer; larger values enable Monte Carlo path tracing with that many samples.
- set_shadow_adaptive_taps(enabled)[source]¶
Toggle the adaptive sub-pixel shadow fan (see
shadow_adaptive_taps). Takes effect at the next render batch.
- set_shadow_anyhit(enabled)[source]¶
Select the shadow-query early-out mode (see
shadow_anyhit).Trueenables the opaque any-hit walks, the string"gather"the kbuf gather-march,Falsethe classic ordered march. Takes effect at the next render batch.
- set_shadow_eps_relative(value)[source]¶
Set the shadow acceptance floor as a fraction of scene scale (see
shadow_eps_relative). Takes effect at the next render batch.
- set_shadow_identity_reject(enabled)[source]¶
Toggle self-shadow rejection by identity (see
shadow_identity_reject). Takes effect at the next render batch.
- set_shadow_near_fraction(value)[source]¶
Set the same-mesh share of the shadow acceptance floor (see
shadow_near_fraction). Takes effect at the next render batch.
- set_shadow_sided_cull(enabled)[source]¶
Toggle the one-sided back-face shadow cull (see
shadow_sided_cull). Takes effect at the next render batch.
- set_shadow_terminator(enabled)[source]¶
Toggle the shadow-terminator offset (see
shadow_terminator).True/Falseswitch it on/off; the string"relax"(or a value equal to2) selects mode 2, the diagnostic guard-relaxation-only arm. Anything else is read for truth:Noneand0are off, other numbers are on. Takes effect at the next render batch.Selecting mode 2 needs an EXACT 2, and that is deliberate. It is the arm whose images are knowingly wrong, so nothing should land on it by rounding: an earlier version truncated with
int(enabled) == 2and quietly put2.5there, while routingnp.int32(2)andnp.float64(2.0)– the same number in two dtypes – to different arms, because only the latter passesisinstance(x, float). Comparing by value fixes both.
- set_shadows(enabled)[source]¶
Toggle hard shadows in the deterministic ray tracer.
When enabled, every shaded triangle/PN fragment traces one shadow ray per scene point light. Every partially opaque surface between the fragment and light attenuates its direct diffuse/specular term by
1 - opacity; stacked surfaces multiply, while a fully opaque surface blocks it. Ambient and emissive terms remain unchanged. Shadows are evaluated inside the wavefront shade kernel’s per-fragment lighting model, so this impliesset_fragment_shading()for the render. Lights with a non-zeroshadow_radius/shadow_angleget soft shadows via a deterministic fan ofSOFT_SHADOW_SAMPLESrays; a RectAreaLight’s rows do too – each integrating visibility over its own cell of the emitter grid – whenarea_light_soft_shadowsis on (the default). Refractive glass transport still needs the physical path tracer (set_samples_per_pixel(n)withn > 1). Only the deterministic renderer (set_samples_per_pixel(1), non-physical) is affected. Set before rendering.
- set_sheet_band_stats_kernel(enabled)[source]¶
Toggle the fused per-band order stats / dominant fragment scan (see
sheet_band_stats_kernel). Takes effect at the next batch’s compaction.
- set_sheet_mask_kernel(enabled)[source]¶
Toggle the kernel sample-mask reductions in sheet compaction (see
sheet_mask_kernel). Takes effect at the next batch’s emission.
- set_sheet_one_mesh_kernel(enabled)[source]¶
Toggle the kernel one-mesh reduction in the sparse emission (see
sheet_one_mesh_kernel). Takes effect at the next batch’s emission.
- set_sheet_positioned_depth(enabled)[source]¶
Toggle positioned-fragment sheet ordering (see
sheet_positioned_depth). Takes effect at the next batch’s emission.
- set_sheet_rank_kernel(enabled)[source]¶
Toggle the kernel conflict-rank scan in sheet compaction (see
sheet_rank_kernel). Takes effect at the next batch’s emission.
- set_sheet_resolve_memo(enabled)[source]¶
Toggle the shadowed resolve’s cross-pass material memo (see
sheet_resolve_memo). Takes effect at the next resolve launch.
- set_sheet_sample_depth(enabled)[source]¶
Toggle per-sample depth gating of interpenetrating sheets (see
sheet_sample_depth). Takes effect at the next batch’s compaction.
- set_sheet_sample_depth_kernel(enabled)[source]¶
Toggle the kernel lane-owner scan of sheet_sample_depth (see
sheet_sample_depth_kernel). Takes effect at the next batch’s emission.
- set_sheet_shade_split(enabled)[source]¶
Toggle the crease shading-class split in sheet compaction (see
sheet_shade_split). Takes effect at the next batch’s emission.
- set_sheet_shell_ceiling_kernel(enabled)[source]¶
Toggle the kernel solid-shell ceiling application (see
sheet_shell_ceiling_kernel). Takes effect at the next batch’s compaction.
- set_sliver_split(max_pieces=None, aspect=None, min_piece=None)[source]¶
Configure the sliver leaf split (see
sliver_split_max_pieces). Arguments leftNonekeep their value. Takes effect at the next batch’s BVH build.
- set_texture_content_dedup(enabled)[source]¶
Toggle texture-bank content dedup (see
texture_content_dedup). Takes effect at the next batch’s scene merge.
- set_texture_opacity_in_kernel(enabled)[source]¶
Toggle the in-sampler texture opacity multiply (see
texture_opacity_in_kernel). Takes effect at the next primitive build.
- set_texture_time_flat(enabled)[source]¶
Toggle per-map texture time lengths (see
texture_time_flat). Takes effect at the next batch’s scene merge.
- set_texture_time_lerp(enabled)[source]¶
Toggle in-kernel texture time interpolation (see
texture_time_lerp). Takes effect at the next frame batch.
- set_texture_u8_storage(enabled)[source]¶
Toggle u8 color-map storage (see
texture_u8_storage). Takes effect at the next batch’s scene merge.
- set_texture_window_collapse(enabled)[source]¶
Toggle the static color-texture window collapse (see
texture_window_collapse). Takes effect at the next primitive build.
- set_tonemap_exposure(exposure)[source]¶
Set the exposure multiplier applied to the frame before it is encoded.
The color is multiplied by this before the tonemap curve runs, and – since tonemapping is off by default – before the plain clamp too, so it brightens or darkens the whole render either way. Defaults to
1.0, which is exact: it moves no pixel.This is the right control for “the whole scene is too dark”. Reach for it before raising every light’s intensity.
- set_tonemapping(enabled)[source]¶
Enable or disable tonemapping of the rendered frame.
Off by default, which makes output linear: an authored color lands on the pixel it names, white renders as 255, and a primary stays primary.
Enabling it applies the curve selected by
set_tonemap_method()(“neutral”, the Khronos PBR Neutral mapper, or “agx”) – not ACES, whatever the old docstring said. That buys highlight roll-off, so values above 1.0 stay distinguishable instead of clipping flat, and it costs a shift on every value: the curve is not the identity anywhere except at 0, an authored 255 renders as 222, and saturated colors desaturate. The two are not separable – a curve that is the identity on[0, 1]must clamp above it – so this is a choice about which you would rather have.TONEMAP_FINDINGS.mdhas the measurements.This flag is honoured wherever the tonemap actually runs, so it works on its own – with
post_process_tonemapon (the default) the composite writes linear HDR and the post stage simply clamps instead of applying a curve. There is no need to also disablepost_process_tonemap, and doing so costs HDR headroom (seeset_post_process_tonemap()).
- set_unsupported_feature_policy(policy)[source]¶
Set unsupported-feature handling to
error,warn, orignore.
- set_watertight_tri(enabled)[source]¶
Toggle the watertight ray/triangle intersection (see
watertight_tri).The gate compiles into the kernels, so a variant that already exists bakes the previous value and no write reaches it. That is what
KERNEL_COMPILED_IN_FIELDSis for: the next render job rebuilds the Taichi program instead of reusing those variants, so both arms are right in one process and the switch costs a kernel-preparation pass rather than a wrong picture. SetALGAN_WATERTIGHT_TRIbefore importing algan to choose an arm without paying for the switch. (The Taichi offline cache is not a hazard here: it keys on the compiled IR, so each arm has its own entry.)
- set_wavefront_tile_auto(enabled)[source]¶
Toggle adaptive (pool-sized) wavefront tile sizing (see
wavefront_tile_auto). Off falls back to the fixedwavefront_tile_rays.
- set_weld_surface_seams(enabled)[source]¶
Toggle surface seam/pole welding (see
weld_surface_seams).Takes effect on the next primitive build.
- set_wf_deferred_shadows(enabled)[source]¶
Toggle the bounce loop’s deferred shadow events (see
wf_deferred_shadows). Takes effect at the next render batch.
- set_wf_gen_fused(mode)[source]¶
Set fused primary-ray generation on the deterministic wavefront:
True/Falseforce it on/off;"auto"(default) starts unfused for fast startup and enables it mid-render when the forecasted remaining render time justifies compiling the fused kernel variants. All modes are byte-identical (seewf_gen_fused).
- set_wf_ray_sort(enabled)[source]¶
Toggle the drain’s spatial ray ordering (see
wf_ray_sort). Takes effect at the next render batch.
- set_wf_ray_sort_min(count)[source]¶
Smallest active-ray count the drain bothers to sort (see
wf_ray_sort). Takes effect at the next render batch.
- set_wf_shadow_event_sort(enabled)[source]¶
Toggle the Morton ordering of deferred shadow events (see
wf_shadow_event_sort). Takes effect at the next render batch.
- shadow_terminator_mode()[source]¶
Live shadow-terminator mode as an int: 0 off, 1 Hanika offset + the relaxed guard (the default), 2 the diagnostic relax-only arm.
Read at call time (never imported by value) and returned as an int, because it reaches the resolve/shade kernels as a TEMPLATE value: each mode compiles its own kernel variant, so the offline cache cannot serve one mode’s kernel for another (see
glossy_reflection_mode).
- sparse_discovery_bytes_for_frames(num_frames)[source]¶
Reserved arena bytes for the sparse-coverage discovery over
num_framesframes (0 until the first discovery of the job establishes a density).
- texture_opacity_in_kernel_active()[source]¶
Whether primitive builds should hand opacity to the sampler.
One predicate for every decision point (Surface / TriangleMesh builds, the estimators) so a build cannot half-flip. The merge itself keys off the PRIMITIVE (
texture_opacity is not None), so a setting change between a build and its merge stays coherent. Requires texture_time_flat (the opacity region rides the flattened bank’s row addressing).
- texture_time_lerp_active()[source]¶
Whether frame batches may describe texture windows as segments.
One predicate for the timeline gate and the estimators. The primitive build and the merge key off the DESCRIPTION instead (a stashed segment window /
texture_lerpon the primitive), so a setting change mid-batch stays coherent: the batch finishes in whichever mode its materialization ran. Requires the in-kernel opacity multiply – the legacy host premultiply folds the animated opacity into the texels, which endpoint maps cannot represent.