@woosh/meep-engine 3.14.6 → 3.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +48 -0
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +246 -3
- package/src/shade/RENDERER_CONTRACT.md +584 -580
- package/src/shade/playground/avboit/README.md +117 -0
- package/src/shade/playground/avboit/index.html +215 -0
- package/src/shade/playground/avboit/main.d.ts +2 -0
- package/src/shade/playground/avboit/main.d.ts.map +1 -0
- package/src/shade/playground/avboit/main.js +875 -0
- package/src/shade/renderer/Renderer.d.ts +16 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +29 -28
- package/src/shade/renderer/ShadeTransparencyMode.d.ts +13 -0
- package/src/shade/renderer/ShadeTransparencyMode.d.ts.map +1 -0
- package/src/shade/renderer/ShadeTransparencyMode.js +30 -0
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts +9 -0
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +26 -0
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts +7 -2
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +12 -1
- package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.js +1 -1
- package/src/shade/renderer/rasterize/forward/FORWARD_VERTEX_SHADER_STRUCT.d.ts +3 -0
- package/src/shade/renderer/rasterize/forward/FORWARD_VERTEX_SHADER_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/FORWARD_VERTEX_SHADER_STRUCT.js +4 -4
- package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts +3 -0
- package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.js +17 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_brick4.d.ts +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_brick4.js +16 -16
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_ibl.d.ts +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_ibl.js +17 -17
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_material_side_should_draw.d.ts +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_material_side_should_draw.js +2 -2
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts +3 -0
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/vertex_shader_chunk.js +4 -4
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts +27 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.js +27 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +107 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +120 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +463 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +509 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.d.ts +15 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.js +33 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.d.ts +20 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.js +38 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts +38 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +130 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.d.ts +37 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.js +73 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.js +17 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.d.ts +11 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.js +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.js +17 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.js +17 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts +15 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.js +25 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts +17 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.js +35 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.d.ts +11 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.js +21 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.js +26 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.d.ts +11 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.js +22 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.js +21 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.js +32 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.d.ts +20 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.js +27 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.js +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.js +21 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.js +23 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.d.ts +13 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.js +27 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.d.ts +22 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.js +38 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +117 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +935 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts +8 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.js +135 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts +3 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.js +101 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts +3 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.js +96 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts +3 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.js +83 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.js +119 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts +3 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +81 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +15 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +237 -0
- package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts +22 -0
- package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/material_draw_indirect.js +69 -0
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +665 -722
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +3 -3
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +4 -4
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +4 -4
- package/src/shade/renderer/rasterize/native/oit/FORWARD_VERTEX_SHADER_STRUCT.d.ts +0 -3
- package/src/shade/renderer/rasterize/native/oit/FORWARD_VERTEX_SHADER_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.d.ts +0 -3
- package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.js +0 -17
- package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_brick4.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_ibl.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/chunk_material_side_should_draw.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/vertex_shader_chunk.d.ts +0 -3
- package/src/shade/renderer/rasterize/native/oit/vertex_shader_chunk.d.ts.map +0 -1
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tunables of the adaptive voxel-based OIT path. See `AVBOIT_PLAN_2026_09_03.md` §3 for what each one
|
|
3
|
+
* trades against; none of them is exposed on `Renderer` yet (plan §7).
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Physical depth slices of the extinction volume — what is actually allocated and integrated.
|
|
7
|
+
* The deck ships 128.
|
|
8
|
+
* @type {number}
|
|
9
|
+
*/
|
|
10
|
+
export const AVBOIT_PHYSICAL_SLICES: number;
|
|
11
|
+
/**
|
|
12
|
+
* Virtual depth slices at which occupancy is measured before adaptation. Must be a power of two
|
|
13
|
+
* multiple of {@link AVBOIT_PHYSICAL_SLICES} and a multiple of 32 (one occupancy bit per slice,
|
|
14
|
+
* packed in `u32` words). Halved until the occupied count fits the physical budget.
|
|
15
|
+
*
|
|
16
|
+
* This sets the slice floor — the finest depth separation two surfaces can have and still occlude
|
|
17
|
+
* each other — when the volume is sparse enough not to halve. The curve is pure log from
|
|
18
|
+
* `near + AVBOIT_DEPTH_CURVE_NEAR_OFFSET` (see `avboit_build_depth_curve`), so virtual slice
|
|
19
|
+
* thickness at view depth `z` is `z · ln(far / offset) / (V - 1)`. With `near = 0.1`, `far = 200` and
|
|
20
|
+
* this value: 1.6 cm at 10 m, 3.2 cm at 20 m, 8 cm at 50 m. The draw's two-slice bias means two
|
|
21
|
+
* surfaces need more than two slices between them, so 5 cm of separation resolves out to roughly
|
|
22
|
+
* 15 m. At 1024 the same numbers were four times coarser and 5 cm at 10 m already blended (ledger
|
|
23
|
+
* entry 15). The costs of going up are 128 occupancy words instead of 32, a 16 KB LUT, and a longer
|
|
24
|
+
* single-lane loop in the warp build — none of which registers.
|
|
25
|
+
* @type {number}
|
|
26
|
+
*/
|
|
27
|
+
export const AVBOIT_VIRTUAL_SLICES_MAX: number;
|
|
28
|
+
/**
|
|
29
|
+
* Occupancy words: one bit per virtual slice.
|
|
30
|
+
* @type {number}
|
|
31
|
+
*/
|
|
32
|
+
export const AVBOIT_OCCUPANCY_WORDS: number;
|
|
33
|
+
/**
|
|
34
|
+
* The extinction volume's XY resolution is the internal resolution divided by this, rounded up. The
|
|
35
|
+
* deck uses 1/8 at every target resolution it reports.
|
|
36
|
+
* @type {number}
|
|
37
|
+
*/
|
|
38
|
+
export const AVBOIT_VOXEL_DOWNSCALE: number;
|
|
39
|
+
/**
|
|
40
|
+
* Where the depth curve starts, in world units past the camera's near plane. The curve is the
|
|
41
|
+
* engine's log slicing (`build_light_cluster_parameters`, `cluster_depth_to_z_slice`) from
|
|
42
|
+
* `near + offset` to `far`; the offset keeps the first slices from being spent on the few
|
|
43
|
+
* centimetres in front of the lens. The engine's own default for its light clusters.
|
|
44
|
+
* @type {number}
|
|
45
|
+
*/
|
|
46
|
+
export const AVBOIT_DEPTH_CURVE_NEAR_OFFSET: number;
|
|
47
|
+
/**
|
|
48
|
+
* Extinction that the normalized fixed-point unit `1.0` stands for. `ln 256` puts full saturation at a
|
|
49
|
+
* transmittance of `1/256`, which the integration treats as zero. The 8-bit splat unit is therefore
|
|
50
|
+
* `ln 256 / 255 ≈ 0.0217` of extinction, i.e. the finest single-event occlusion that registers in the
|
|
51
|
+
* volume is about 2.2 %.
|
|
52
|
+
* @type {number}
|
|
53
|
+
*/
|
|
54
|
+
export const AVBOIT_EXTINCTION_MAX: number;
|
|
55
|
+
/**
|
|
56
|
+
* Transmittance below which a fragment is fully occluded as far as the volume can tell: the integral
|
|
57
|
+
* saturates at `1.0`, which is `exp(-AVBOIT_EXTINCTION_MAX) = 1/256`. The draw discards a fragment
|
|
58
|
+
* whose sampled transmittance is at or below this in every channel before shading it. What that
|
|
59
|
+
* costs in correctness is bounded: the fragment's own extinction no longer joins the total, so the
|
|
60
|
+
* background is weighted by at most `1/256` instead of something smaller — below what the 8-bit
|
|
61
|
+
* volume resolves anyway.
|
|
62
|
+
* @type {number}
|
|
63
|
+
*/
|
|
64
|
+
export const AVBOIT_EXTINCT_TRANSMITTANCE: number;
|
|
65
|
+
/**
|
|
66
|
+
* Counts per unit of normalized extinction at the splat: values are stored 8-bit in 10-bit fields, so
|
|
67
|
+
* the field holds up to four saturating events before a carry reaches the next channel.
|
|
68
|
+
* @type {number}
|
|
69
|
+
*/
|
|
70
|
+
export const AVBOIT_EXTINCTION_SCALE: number;
|
|
71
|
+
/**
|
|
72
|
+
* Bits per packed channel field.
|
|
73
|
+
* @type {number}
|
|
74
|
+
*/
|
|
75
|
+
export const AVBOIT_FIELD_BITS: number;
|
|
76
|
+
/**
|
|
77
|
+
* Field mask.
|
|
78
|
+
* @type {number}
|
|
79
|
+
*/
|
|
80
|
+
export const AVBOIT_FIELD_MASK: number;
|
|
81
|
+
/**
|
|
82
|
+
* How far toward the camera, in virtual slices, the draw pass samples the integral so that a surface
|
|
83
|
+
* does not occlude itself through its own linear splat. With the exclusive-prefix storage convention
|
|
84
|
+
* the analytic minimum is 1.5; the deck uses 2. Events closer together than this do not occlude each
|
|
85
|
+
* other and degrade to weighted blending.
|
|
86
|
+
* @type {number}
|
|
87
|
+
*/
|
|
88
|
+
export const AVBOIT_SAMPLE_BIAS_SLICES: number;
|
|
89
|
+
/**
|
|
90
|
+
* Slices of dilation applied to each meshlet's depth range at the occupancy prepass, at the finest
|
|
91
|
+
* virtual resolution. The warp build dilates again by one slice at whatever resolution it settles on
|
|
92
|
+
* (plan §3.4), so this only has to be non-zero.
|
|
93
|
+
* @type {number}
|
|
94
|
+
*/
|
|
95
|
+
export const AVBOIT_OCCUPANCY_DILATION: number;
|
|
96
|
+
/**
|
|
97
|
+
* Format of the integrated extinction texture. `rgba8unorm` matches the splat quantization and the
|
|
98
|
+
* deck; `rgba16float` doubles the memory and is the switch to flip if a long smooth gradient bands.
|
|
99
|
+
* @type {GPUTextureFormat}
|
|
100
|
+
*/
|
|
101
|
+
export const AVBOIT_INTEGRAL_FORMAT: GPUTextureFormat;
|
|
102
|
+
/**
|
|
103
|
+
* Workgroup edge of the integration pass, one thread per voxel column.
|
|
104
|
+
* @type {number}
|
|
105
|
+
*/
|
|
106
|
+
export const AVBOIT_INTEGRATE_WORKGROUP_SIZE: number;
|
|
107
|
+
//# sourceMappingURL=AVBOIT_CONSTANTS.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AVBOIT_CONSTANTS.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AACH,qCAFU,MAAM,CAE0B;AAE1C;;;;;;;;;;;;;;;GAeG;AACH,wCAFU,MAAM,CAE8B;AAE9C;;;GAGG;AACH,qCAFU,MAAM,CAEqD;AAErE;;;;GAIG;AACH,qCAFU,MAAM,CAEwB;AAExC;;;;;;GAMG;AACH,6CAFU,MAAM,CAEkC;AAElD;;;;;;GAMG;AACH,oCAFU,MAAM,CAEmC;AAEnD;;;;;;;;GAQG;AACH,2CAFU,MAAM,CAEoC;AAEpD;;;;GAIG;AACH,sCAFU,MAAM,CAE2B;AAE3C;;;GAGG;AACH,gCAFU,MAAM,CAEoB;AAEpC;;;GAGG;AACH,gCAFU,MAAM,CAE8C;AAE9D;;;;;;GAMG;AACH,wCAFU,MAAM,CAE6B;AAE7C;;;;;GAKG;AACH,wCAFU,MAAM,CAE2B;AAE3C;;;;GAIG;AACH,sDAAmD;AAEnD;;;GAGG;AACH,8CAFU,MAAM,CAEiC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tunables of the adaptive voxel-based OIT path. See `AVBOIT_PLAN_2026_09_03.md` §3 for what each one
|
|
3
|
+
* trades against; none of them is exposed on `Renderer` yet (plan §7).
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Physical depth slices of the extinction volume — what is actually allocated and integrated.
|
|
8
|
+
* The deck ships 128.
|
|
9
|
+
* @type {number}
|
|
10
|
+
*/
|
|
11
|
+
export const AVBOIT_PHYSICAL_SLICES = 128;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Virtual depth slices at which occupancy is measured before adaptation. Must be a power of two
|
|
15
|
+
* multiple of {@link AVBOIT_PHYSICAL_SLICES} and a multiple of 32 (one occupancy bit per slice,
|
|
16
|
+
* packed in `u32` words). Halved until the occupied count fits the physical budget.
|
|
17
|
+
*
|
|
18
|
+
* This sets the slice floor — the finest depth separation two surfaces can have and still occlude
|
|
19
|
+
* each other — when the volume is sparse enough not to halve. The curve is pure log from
|
|
20
|
+
* `near + AVBOIT_DEPTH_CURVE_NEAR_OFFSET` (see `avboit_build_depth_curve`), so virtual slice
|
|
21
|
+
* thickness at view depth `z` is `z · ln(far / offset) / (V - 1)`. With `near = 0.1`, `far = 200` and
|
|
22
|
+
* this value: 1.6 cm at 10 m, 3.2 cm at 20 m, 8 cm at 50 m. The draw's two-slice bias means two
|
|
23
|
+
* surfaces need more than two slices between them, so 5 cm of separation resolves out to roughly
|
|
24
|
+
* 15 m. At 1024 the same numbers were four times coarser and 5 cm at 10 m already blended (ledger
|
|
25
|
+
* entry 15). The costs of going up are 128 occupancy words instead of 32, a 16 KB LUT, and a longer
|
|
26
|
+
* single-lane loop in the warp build — none of which registers.
|
|
27
|
+
* @type {number}
|
|
28
|
+
*/
|
|
29
|
+
export const AVBOIT_VIRTUAL_SLICES_MAX = 4096;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Occupancy words: one bit per virtual slice.
|
|
33
|
+
* @type {number}
|
|
34
|
+
*/
|
|
35
|
+
export const AVBOIT_OCCUPANCY_WORDS = AVBOIT_VIRTUAL_SLICES_MAX / 32;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The extinction volume's XY resolution is the internal resolution divided by this, rounded up. The
|
|
39
|
+
* deck uses 1/8 at every target resolution it reports.
|
|
40
|
+
* @type {number}
|
|
41
|
+
*/
|
|
42
|
+
export const AVBOIT_VOXEL_DOWNSCALE = 8;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Where the depth curve starts, in world units past the camera's near plane. The curve is the
|
|
46
|
+
* engine's log slicing (`build_light_cluster_parameters`, `cluster_depth_to_z_slice`) from
|
|
47
|
+
* `near + offset` to `far`; the offset keeps the first slices from being spent on the few
|
|
48
|
+
* centimetres in front of the lens. The engine's own default for its light clusters.
|
|
49
|
+
* @type {number}
|
|
50
|
+
*/
|
|
51
|
+
export const AVBOIT_DEPTH_CURVE_NEAR_OFFSET = 0.2;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Extinction that the normalized fixed-point unit `1.0` stands for. `ln 256` puts full saturation at a
|
|
55
|
+
* transmittance of `1/256`, which the integration treats as zero. The 8-bit splat unit is therefore
|
|
56
|
+
* `ln 256 / 255 ≈ 0.0217` of extinction, i.e. the finest single-event occlusion that registers in the
|
|
57
|
+
* volume is about 2.2 %.
|
|
58
|
+
* @type {number}
|
|
59
|
+
*/
|
|
60
|
+
export const AVBOIT_EXTINCTION_MAX = Math.log(256);
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Transmittance below which a fragment is fully occluded as far as the volume can tell: the integral
|
|
64
|
+
* saturates at `1.0`, which is `exp(-AVBOIT_EXTINCTION_MAX) = 1/256`. The draw discards a fragment
|
|
65
|
+
* whose sampled transmittance is at or below this in every channel before shading it. What that
|
|
66
|
+
* costs in correctness is bounded: the fragment's own extinction no longer joins the total, so the
|
|
67
|
+
* background is weighted by at most `1/256` instead of something smaller — below what the 8-bit
|
|
68
|
+
* volume resolves anyway.
|
|
69
|
+
* @type {number}
|
|
70
|
+
*/
|
|
71
|
+
export const AVBOIT_EXTINCT_TRANSMITTANCE = 1 / 256;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Counts per unit of normalized extinction at the splat: values are stored 8-bit in 10-bit fields, so
|
|
75
|
+
* the field holds up to four saturating events before a carry reaches the next channel.
|
|
76
|
+
* @type {number}
|
|
77
|
+
*/
|
|
78
|
+
export const AVBOIT_EXTINCTION_SCALE = 255;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Bits per packed channel field.
|
|
82
|
+
* @type {number}
|
|
83
|
+
*/
|
|
84
|
+
export const AVBOIT_FIELD_BITS = 10;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Field mask.
|
|
88
|
+
* @type {number}
|
|
89
|
+
*/
|
|
90
|
+
export const AVBOIT_FIELD_MASK = (1 << AVBOIT_FIELD_BITS) - 1;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* How far toward the camera, in virtual slices, the draw pass samples the integral so that a surface
|
|
94
|
+
* does not occlude itself through its own linear splat. With the exclusive-prefix storage convention
|
|
95
|
+
* the analytic minimum is 1.5; the deck uses 2. Events closer together than this do not occlude each
|
|
96
|
+
* other and degrade to weighted blending.
|
|
97
|
+
* @type {number}
|
|
98
|
+
*/
|
|
99
|
+
export const AVBOIT_SAMPLE_BIAS_SLICES = 2.0;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Slices of dilation applied to each meshlet's depth range at the occupancy prepass, at the finest
|
|
103
|
+
* virtual resolution. The warp build dilates again by one slice at whatever resolution it settles on
|
|
104
|
+
* (plan §3.4), so this only has to be non-zero.
|
|
105
|
+
* @type {number}
|
|
106
|
+
*/
|
|
107
|
+
export const AVBOIT_OCCUPANCY_DILATION = 1;
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Format of the integrated extinction texture. `rgba8unorm` matches the splat quantization and the
|
|
111
|
+
* deck; `rgba16float` doubles the memory and is the switch to flip if a long smooth gradient bands.
|
|
112
|
+
* @type {GPUTextureFormat}
|
|
113
|
+
*/
|
|
114
|
+
export const AVBOIT_INTEGRAL_FORMAT = "rgba8unorm";
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Workgroup edge of the integration pass, one thread per voxel column.
|
|
118
|
+
* @type {number}
|
|
119
|
+
*/
|
|
120
|
+
export const AVBOIT_INTEGRATE_WORKGROUP_SIZE = 8;
|