@woosh/meep-engine 3.50.0 → 3.52.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/graphics3/make_default_environment.d.ts.map +1 -1
- package/src/engine/graphics3/make_default_environment.js +11 -5
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/playground/particle_ecs/moonlit_environment.d.ts.map +1 -1
- package/src/shade/playground/particle_ecs/moonlit_environment.js +11 -5
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts.map +1 -1
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.js +3 -1
- package/src/shade/playground/tonemap_sdr/README.md +5 -3
- package/src/shade/renderer/Renderer.d.ts +1 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +43 -15
- package/src/shade/renderer/ShadeToneMappingMode.d.ts +3 -2
- package/src/shade/renderer/ShadeToneMappingMode.js +15 -4
- package/src/shade/renderer/atmosphere/chunk_sample_environment_color.d.ts +3 -0
- package/src/shade/renderer/atmosphere/chunk_sample_environment_color.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/chunk_sample_environment_color.js +11 -8
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts +6 -0
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +227 -215
- package/src/shade/renderer/deferred/SHADING_LIGHT_RESOURCE_GROUP.d.ts.map +1 -1
- package/src/shade/renderer/deferred/SHADING_LIGHT_RESOURCE_GROUP.js +2 -0
- package/src/shade/renderer/deferred/indirect/chunk_get_ibl_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/deferred/indirect/chunk_get_ibl_irradiance.js +4 -2
- package/src/shade/renderer/deferred/indirect/chunk_get_ibl_radiance.d.ts.map +1 -1
- package/src/shade/renderer/deferred/indirect/chunk_get_ibl_radiance.js +4 -2
- package/src/shade/renderer/deferred/shader_background.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_background.js +4 -2
- package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.d.ts +38 -0
- package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.d.ts.map +1 -0
- package/src/shade/renderer/deferred/tonemap/TonemapAces2Tables.js +97 -0
- package/src/shade/renderer/deferred/{TonemapDisplaySettings.d.ts → tonemap/TonemapDisplaySettings.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/TonemapDisplaySettings.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{TonemapDisplaySettings.js → tonemap/TonemapDisplaySettings.js} +5 -5
- package/src/shade/renderer/deferred/{shader_tonemap_HDR.d.ts → tonemap/shader_tonemap_HDR.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR.js → tonemap/shader_tonemap_HDR.js} +9 -9
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.d.ts +17 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.d.ts.map +1 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_aces.js +101 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_none.d.ts → tonemap/shader_tonemap_HDR_none.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_none.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_none.js → tonemap/shader_tonemap_HDR_none.js} +6 -6
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_pbr_neutral.d.ts → tonemap/shader_tonemap_HDR_pbr_neutral.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_pbr_neutral.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_HDR_pbr_neutral.js → tonemap/shader_tonemap_HDR_pbr_neutral.js} +8 -8
- package/src/shade/renderer/deferred/{shader_tonemap_LDR.d.ts → tonemap/shader_tonemap_LDR.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR.js → tonemap/shader_tonemap_LDR.js} +10 -10
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.d.ts +10 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.d.ts.map +1 -0
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_aces.js +77 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_none.d.ts → tonemap/shader_tonemap_LDR_none.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_none.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_none.js → tonemap/shader_tonemap_LDR_none.js} +7 -7
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_pbr_neutral.d.ts → tonemap/shader_tonemap_LDR_pbr_neutral.d.ts} +1 -1
- package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_pbr_neutral.d.ts.map +1 -0
- package/src/shade/renderer/deferred/{shader_tonemap_LDR_pbr_neutral.js → tonemap/shader_tonemap_LDR_pbr_neutral.js} +8 -8
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +3 -1
- package/src/shade/renderer/global_illumination/ibl/shader_diffuse_IBL.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/ibl/shader_diffuse_IBL.js +3 -1
- package/src/shade/renderer/global_illumination/ibl/shader_specular_IBL.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/ibl/shader_specular_IBL.js +3 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.js +3 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +4 -2
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +44 -0
- package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_RESOURCE.d.ts +2 -1
- package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_RESOURCE.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_RESOURCE.js +3 -2
- package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.d.ts +14 -0
- package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js +25 -0
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/execute_filter_environment_map.js +3 -4
- package/src/shade/renderer/light/environment/octahedral_skirt_matches.d.ts +19 -0
- package/src/shade/renderer/light/environment/octahedral_skirt_matches.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/octahedral_skirt_matches.js +67 -0
- package/src/shade/renderer/light/environment/octahedral_skirt_source_texel.d.ts +16 -0
- package/src/shade/renderer/light/environment/octahedral_skirt_source_texel.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/octahedral_skirt_source_texel.js +35 -0
- package/src/shade/renderer/light/environment/resample_cube_to_octahedral.d.ts +7 -2
- package/src/shade/renderer/light/environment/resample_cube_to_octahedral.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/resample_cube_to_octahedral.js +23 -7
- package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.d.ts +8 -2
- package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.js +24 -7
- package/src/shade/renderer/light/environment/sampler2d_octahedral_skirt_fill.d.ts +12 -0
- package/src/shade/renderer/light/environment/sampler2d_octahedral_skirt_fill.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sampler2d_octahedral_skirt_fill.js +54 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts +2 -2
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js +5 -4
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +13 -9
- package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/shader_project_environment_sh.js +3 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +3 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +3 -1
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +3 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +3 -1
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +3 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +0 -5
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +0 -6
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.js +4 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +3 -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 +3 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +160 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +5 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +15 -5
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.d.ts +41 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/aces2_transform_block.js +692 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces2_output_transform.js +446 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_aces_ue_matrices.js +68 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts +32 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/aces/chunk_tonemap_ue_filmic.js +163 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts +10 -3
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js +12 -4
- package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.js +27 -0
- package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_uv.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_uv.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_uv.js +24 -0
- package/src/shade/renderer/shader/chunk/texture/sample/chunk_sample_environment_map.d.ts +18 -1
- package/src/shade/renderer/shader/chunk/texture/sample/chunk_sample_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/texture/sample/chunk_sample_environment_map.js +45 -27
- package/src/shade/renderer/view/GPUViewSkyContext.js +169 -169
- package/src/shade/renderer/volumetrics/NOTES.md +209 -0
- package/src/shade/renderer/volumetrics/VOLUMETRICS_METADATA_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/VOLUMETRICS_METADATA_STRUCT.js +1 -1
- package/src/shade/renderer/volumetrics/chunk_volumetrics_media_group_list.d.ts +36 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_media_group_list.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_media_group_list.js +129 -0
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +75 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_bin_participating_media.d.ts +26 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_bin_participating_media.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_bin_participating_media.js +110 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +38 -14
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +9 -4
- package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.d.ts +31 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.js +139 -0
- package/src/shade/renderer/deferred/TonemapDisplaySettings.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts.map +0 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts.map +0 -1
|
@@ -3,14 +3,27 @@ import { Sampler2D } from "../../../../engine/graphics/texture/sampler/Sampler2D
|
|
|
3
3
|
import { equirectangular_zenith_first_direction_to_uv } from "./equirectangular_zenith_first_direction_to_uv.js";
|
|
4
4
|
import { SAMPLE_OFFSETS, SAMPLE_WEIGHTS, SUPER_SAMPLE_COUNT } from "./octahedral_resample_kernel.js";
|
|
5
5
|
import { octahedral_z_pole_uv_to_direction } from "./octahedral_z_pole_uv_to_direction.js";
|
|
6
|
+
import { sampler2d_octahedral_skirt_fill } from "./sampler2d_octahedral_skirt_fill.js";
|
|
6
7
|
|
|
7
8
|
/**
|
|
9
|
+
* With `skirt`, the octahedral square is resampled into the interior `output_resolution - 2` texels and
|
|
10
|
+
* a one-texel octahedral skirt is written around it — the layout the renderer requires of an
|
|
11
|
+
* environment map (see `sampler2d_octahedral_skirt_fill`). Without, the square fills the whole output,
|
|
12
|
+
* which is a map the renderer will refuse.
|
|
8
13
|
*
|
|
9
14
|
* @param {Sampler2D} input must be a float format
|
|
10
|
-
* @param {number} output_resolution
|
|
15
|
+
* @param {number} output_resolution side of the output, skirt included
|
|
16
|
+
* @param {boolean} [skirt]
|
|
17
|
+
* @returns {Sampler2D} float32 RGBA
|
|
11
18
|
*/
|
|
12
|
-
export function resample_equirectangular_to_octahedral(input, output_resolution) {
|
|
19
|
+
export function resample_equirectangular_to_octahedral(input, output_resolution, skirt = true) {
|
|
13
20
|
assert.isNonNegativeInteger(output_resolution, "output_resolution");
|
|
21
|
+
assert.isBoolean(skirt, "skirt");
|
|
22
|
+
|
|
23
|
+
const border = skirt ? 1 : 0;
|
|
24
|
+
const interior = output_resolution - 2 * border;
|
|
25
|
+
|
|
26
|
+
assert.greaterThan(interior, 0, "interior resolution");
|
|
14
27
|
|
|
15
28
|
const output = Sampler2D.float32(4, output_resolution, output_resolution);
|
|
16
29
|
|
|
@@ -22,8 +35,8 @@ export function resample_equirectangular_to_octahedral(input, output_resolution)
|
|
|
22
35
|
|
|
23
36
|
const SAMPLE = new Float32Array(SUPER_SAMPLE_COUNT * 3);
|
|
24
37
|
|
|
25
|
-
for (let y = 0; y <
|
|
26
|
-
for (let x = 0; x <
|
|
38
|
+
for (let y = 0; y < interior; y++) {
|
|
39
|
+
for (let x = 0; x < interior; x++) {
|
|
27
40
|
|
|
28
41
|
SAMPLE.fill(0);
|
|
29
42
|
let weight_sum = 0;
|
|
@@ -36,8 +49,8 @@ export function resample_equirectangular_to_octahedral(input, output_resolution)
|
|
|
36
49
|
const sample_x = x + sample_offset_x;
|
|
37
50
|
const sample_y = y + sample_offset_y;
|
|
38
51
|
|
|
39
|
-
const out_u = (sample_x + 0.5) /
|
|
40
|
-
const out_v = (sample_y + 0.5) /
|
|
52
|
+
const out_u = (sample_x + 0.5) / interior;
|
|
53
|
+
const out_v = (sample_y + 0.5) / interior;
|
|
41
54
|
|
|
42
55
|
// The direction the GPU will sample this texel for — MUST be the exact inverse of
|
|
43
56
|
// uv_octahedral_unit_encode (the previous meep Y-pole decode with a negated U
|
|
@@ -69,10 +82,14 @@ export function resample_equirectangular_to_octahedral(input, output_resolution)
|
|
|
69
82
|
for (let i = 0; i < 3; i++) {
|
|
70
83
|
const input_value = Math.max(0, SAMPLE[i] / weight_sum);
|
|
71
84
|
|
|
72
|
-
output.writeChannel(x, y, i, input_value);
|
|
85
|
+
output.writeChannel(x + border, y + border, i, input_value);
|
|
73
86
|
}
|
|
74
87
|
}
|
|
75
88
|
}
|
|
76
89
|
|
|
90
|
+
if (skirt) {
|
|
91
|
+
sampler2d_octahedral_skirt_fill(output);
|
|
92
|
+
}
|
|
93
|
+
|
|
77
94
|
return output;
|
|
78
95
|
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Writes the one-texel octahedral skirt of `sampler` from its interior: every texel of the outer ring
|
|
3
|
+
* becomes a copy, all channels, of the interior texel the octahedral fold puts next to it.
|
|
4
|
+
*
|
|
5
|
+
* Environment maps carry this skirt so the GPU can filter them in hardware (see the WGSL
|
|
6
|
+
* `texture_octahedral_skirt_uv`). A producer computes the interior, `[1, size - 1)` on both axes,
|
|
7
|
+
* then calls this.
|
|
8
|
+
*
|
|
9
|
+
* @param {import("../../../../engine/graphics/texture/sampler/Sampler2D.js").Sampler2D} sampler square, at least 3x3
|
|
10
|
+
*/
|
|
11
|
+
export function sampler2d_octahedral_skirt_fill(sampler: import("../../../../engine/graphics/texture/sampler/Sampler2D.js").Sampler2D): void;
|
|
12
|
+
//# sourceMappingURL=sampler2d_octahedral_skirt_fill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sampler2d_octahedral_skirt_fill.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/sampler2d_octahedral_skirt_fill.js"],"names":[],"mappings":"AAQA;;;;;;;;;GASG;AACH,yDAFW,OAAO,0DAA0D,EAAE,SAAS,QAmBtF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { octahedral_skirt_source_texel } from "./octahedral_skirt_source_texel.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @type {Uint32Array}
|
|
6
|
+
*/
|
|
7
|
+
const SCRATCH_SOURCE = new Uint32Array(2);
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Writes the one-texel octahedral skirt of `sampler` from its interior: every texel of the outer ring
|
|
11
|
+
* becomes a copy, all channels, of the interior texel the octahedral fold puts next to it.
|
|
12
|
+
*
|
|
13
|
+
* Environment maps carry this skirt so the GPU can filter them in hardware (see the WGSL
|
|
14
|
+
* `texture_octahedral_skirt_uv`). A producer computes the interior, `[1, size - 1)` on both axes,
|
|
15
|
+
* then calls this.
|
|
16
|
+
*
|
|
17
|
+
* @param {import("../../../../engine/graphics/texture/sampler/Sampler2D.js").Sampler2D} sampler square, at least 3x3
|
|
18
|
+
*/
|
|
19
|
+
export function sampler2d_octahedral_skirt_fill(sampler) {
|
|
20
|
+
const size = sampler.width;
|
|
21
|
+
|
|
22
|
+
assert.equal(sampler.height, size, 'octahedral map must be square');
|
|
23
|
+
assert.greaterThanOrEqual(size, 3, 'a skirted map needs an interior');
|
|
24
|
+
|
|
25
|
+
const data = sampler.data;
|
|
26
|
+
const item_size = sampler.itemSize;
|
|
27
|
+
const last = size - 1;
|
|
28
|
+
|
|
29
|
+
for (let i = 0; i < size; i++) {
|
|
30
|
+
// the four sides; the corners come round twice and are written the same both times
|
|
31
|
+
copy_from_source(data, item_size, size, i, 0);
|
|
32
|
+
copy_from_source(data, item_size, size, i, last);
|
|
33
|
+
copy_from_source(data, item_size, size, 0, i);
|
|
34
|
+
copy_from_source(data, item_size, size, last, i);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* @param {ArrayLike<number>} data
|
|
40
|
+
* @param {number} item_size
|
|
41
|
+
* @param {number} size
|
|
42
|
+
* @param {number} x
|
|
43
|
+
* @param {number} y
|
|
44
|
+
*/
|
|
45
|
+
function copy_from_source(data, item_size, size, x, y) {
|
|
46
|
+
octahedral_skirt_source_texel(SCRATCH_SOURCE, x, y, size);
|
|
47
|
+
|
|
48
|
+
const target = (y * size + x) * item_size;
|
|
49
|
+
const source = (SCRATCH_SOURCE[1] * size + SCRATCH_SOURCE[0]) * item_size;
|
|
50
|
+
|
|
51
|
+
for (let c = 0; c < item_size; c++) {
|
|
52
|
+
data[target + c] = data[source + c];
|
|
53
|
+
}
|
|
54
|
+
}
|
package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
*/
|
|
11
11
|
export const SH_EXP_MAX_TEXELS_PER_CELL_SIDE: number;
|
|
12
12
|
/**
|
|
13
|
-
* First pass of the SH-exponential encoder: integrates the octahedral environment's level 0
|
|
14
|
-
* coarse octahedral grid of `cell_resolution²` cells, each a direction and its radiance times solid
|
|
13
|
+
* First pass of the SH-exponential encoder: integrates the octahedral environment's level 0 — the
|
|
14
|
+
* square inside its one-texel skirt, so no texel is counted twice — down to a coarse octahedral grid of `cell_resolution²` cells, each a direction and its radiance times solid
|
|
15
15
|
* angle — the quadrature the reference reflectance is integrated over.
|
|
16
16
|
*
|
|
17
17
|
* Writes two `vec4` per cell into `cells`: `(direction, 0)`, then `(radiance * solid_angle, solid_angle)`.
|
package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_sh_exp_environment_cells.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js"],"names":[],"mappings":"AAUA;;;;;;;;;GASG;AACH,8CAFU,MAAM,CAEkC;
|
|
1
|
+
{"version":3,"file":"shader_sh_exp_environment_cells.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js"],"names":[],"mappings":"AAUA;;;;;;;;;GASG;AACH,8CAFU,MAAM,CAEkC;AA2GlD;;;;;;;;;;;;;;;GAeG;AACH,8CAFU,aAAa,CAMpB;8BAhJ2B,kCAAkC"}
|
package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js
CHANGED
|
@@ -59,7 +59,8 @@ fn main(
|
|
|
59
59
|
let cell_x = cell % resolution;
|
|
60
60
|
let cell_y = cell / resolution;
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
// the octahedral square only: the one-texel skirt around it repeats texels already counted
|
|
63
|
+
let source_resolution = textureDimensions(tEnvironment, 0).x - 2u;
|
|
63
64
|
let inverse_source_resolution = 1.0 / f32(source_resolution);
|
|
64
65
|
|
|
65
66
|
// The source texels whose centres fall in this cell. A source coarser than the grid has none in
|
|
@@ -97,7 +98,7 @@ fn main(
|
|
|
97
98
|
let uv = (vec2<f32>(texel) + 0.5) * inverse_source_resolution;
|
|
98
99
|
|
|
99
100
|
let solid_angle = octahedral_solid_angle(uv, inverse_source_resolution) * f32(block_size.x * block_size.y);
|
|
100
|
-
let radiance = textureLoad(tEnvironment, texel, 0).rgb;
|
|
101
|
+
let radiance = textureLoad(tEnvironment, texel + 1u, 0).rgb;
|
|
101
102
|
|
|
102
103
|
accumulated += vec4<f32>(radiance * solid_angle, solid_angle);
|
|
103
104
|
}
|
|
@@ -125,8 +126,8 @@ fn main(
|
|
|
125
126
|
]);
|
|
126
127
|
|
|
127
128
|
/**
|
|
128
|
-
* First pass of the SH-exponential encoder: integrates the octahedral environment's level 0
|
|
129
|
-
* coarse octahedral grid of `cell_resolution²` cells, each a direction and its radiance times solid
|
|
129
|
+
* First pass of the SH-exponential encoder: integrates the octahedral environment's level 0 — the
|
|
130
|
+
* square inside its one-texel skirt, so no texel is counted twice — down to a coarse octahedral grid of `cell_resolution²` cells, each a direction and its radiance times solid
|
|
130
131
|
* angle — the quadrature the reference reflectance is integrated over.
|
|
131
132
|
*
|
|
132
133
|
* Writes two `vec4` per cell into `cells`: `(direction, 0)`, then `(radiance * solid_angle, solid_angle)`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_convolve_reflection_map.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/shader_convolve_reflection_map.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_convolve_reflection_map.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/shader_convolve_reflection_map.js"],"names":[],"mappings":"AAiIA,2DAII;8BAnH0B,+BAA+B"}
|
|
@@ -11,10 +11,10 @@ import {
|
|
|
11
11
|
import { chunk_uniform_sample_cone } from "../../shader/chunk/geometry/ray/chunk_uniform_sample_cone.js";
|
|
12
12
|
import { chunk_safe_rcp } from "../../shader/chunk/math/chunk_safe_rcp.js";
|
|
13
13
|
import { chunk_hammersley_2d } from "../../shader/chunk/noise/chunk_hammersley_2d.js";
|
|
14
|
-
import { chunk_texel_coordinate_to_uv } from "../../shader/chunk/texture/chunk_texel_coordinate_to_uv.js";
|
|
15
14
|
import {
|
|
16
|
-
|
|
17
|
-
} from "../../shader/chunk/texture/octahedral/
|
|
15
|
+
chunk_texture_octahedral_skirt_texel_uv
|
|
16
|
+
} from "../../shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.js";
|
|
17
|
+
import { chunk_texture_octahedral_skirt_uv } from "../../shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_uv.js";
|
|
18
18
|
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
19
19
|
import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
20
20
|
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
@@ -23,6 +23,7 @@ import { chunk_reflection_sample_weight } from "./chunk_reflection_sample_weight
|
|
|
23
23
|
import { chunk_roughness_from_relative_mip } from "./chunk_roughness_from_relative_mip.js";
|
|
24
24
|
import { chunk_sphere_probe_lod_to_roughness } from "./chunk_sphere_probe_lod_to_roughness.js";
|
|
25
25
|
import { BSDF_ROUGHNESS_MINIMUM } from "./DEFINES.js";
|
|
26
|
+
import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "./ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
|
|
26
27
|
|
|
27
28
|
const resources = new ShaderResourceSetDescriptor();
|
|
28
29
|
|
|
@@ -32,8 +33,9 @@ const resources = new ShaderResourceSetDescriptor();
|
|
|
32
33
|
resources.setImmediate("read_lod", "u32");
|
|
33
34
|
|
|
34
35
|
resources.createGroup()
|
|
35
|
-
.addTexture("input")
|
|
36
|
+
.addTexture("input", "float")
|
|
36
37
|
.addStorageTexture("output", "rgba16float")
|
|
38
|
+
.add(ENVIRONMENT_MAP_SAMPLER_RESOURCE)
|
|
37
39
|
;
|
|
38
40
|
|
|
39
41
|
/**
|
|
@@ -78,7 +80,8 @@ fn main(
|
|
|
78
80
|
let mip_roughness_clamped = max(mip_roughness, ${BSDF_ROUGHNESS_MINIMUM});
|
|
79
81
|
let cone_cos = cone_cosine_from_roughness(mip_roughness_clamped);
|
|
80
82
|
|
|
81
|
-
|
|
83
|
+
// the skirt too: a skirt texel takes its interior twin's uv, so it is that texel, computed again
|
|
84
|
+
let out_uv = texture_octahedral_skirt_texel_uv(output_texel_i, output_size.x);
|
|
82
85
|
let out_direction = uv_octahedral_unit_decode( out_uv );
|
|
83
86
|
|
|
84
87
|
let basis = build_orthonormal_matrix_n(out_direction);
|
|
@@ -88,14 +91,15 @@ fn main(
|
|
|
88
91
|
|
|
89
92
|
const sample_count = ${SAMPLE_COUNT};
|
|
90
93
|
|
|
91
|
-
let input_size = textureDimensions(input).
|
|
94
|
+
let input_size = f32(textureDimensions(input).x);
|
|
92
95
|
|
|
93
96
|
for (var i = 0u; i < sample_count; i++) {
|
|
94
97
|
let rand = hammersley_2d(i, sample_count);
|
|
95
98
|
|
|
96
99
|
let in_direction = normalize(basis * uniform_sample_cone(rand, cone_cos));
|
|
97
100
|
|
|
98
|
-
let
|
|
101
|
+
let in_uv = texture_octahedral_skirt_uv(uv_octahedral_unit_encode(in_direction), input_size);
|
|
102
|
+
let radiance = textureSampleLevel(input, sEnvironment, in_uv, 0.0);
|
|
99
103
|
|
|
100
104
|
let weight = reflection_sample_weight(out_direction, in_direction, mip_roughness_clamped);
|
|
101
105
|
|
|
@@ -113,10 +117,10 @@ fn main(
|
|
|
113
117
|
chunk_build_orthonormal_matrix_n,
|
|
114
118
|
chunk_safe_rcp,
|
|
115
119
|
chunk_uniform_sample_cone,
|
|
116
|
-
|
|
120
|
+
chunk_texture_octahedral_skirt_texel_uv,
|
|
121
|
+
chunk_texture_octahedral_skirt_uv,
|
|
117
122
|
chunk_uv_octahedral_unit_decode,
|
|
118
123
|
chunk_uv_octahedral_unit_encode,
|
|
119
|
-
chunk_texture_octahedral_sample_bilinear,
|
|
120
124
|
chunk_reflection_sample_weight,
|
|
121
125
|
chunk_cone_cosine_from_roughness,
|
|
122
126
|
chunk_roughness_from_relative_mip
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_project_environment_sh.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/shader_project_environment_sh.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_project_environment_sh.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/light/environment/shader_project_environment_sh.js"],"names":[],"mappings":"AAYA;;;;;;;;GAQG;AACH,kCAFU,WAAW,CAEyC;AAE9D;;;;;;GAMG;AACH,0CAFU,MAAM,CAE+B;AAwF/C;;;;;;;;;;;;;;GAcG;AACH,4CAFU,aAAa,CAMpB;4BAjIyB,kCAAkC;8BAFhC,+BAA+B"}
|
|
@@ -8,6 +8,7 @@ import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
|
8
8
|
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
9
9
|
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
10
10
|
import { vec4f } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
11
|
+
import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "./ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* The layout {@link shader_project_environment_sh} writes: the environment's radiance as RGB SH2,
|
|
@@ -33,7 +34,8 @@ const resources = new ShaderResourceSetDescriptor();
|
|
|
33
34
|
|
|
34
35
|
resources.createGroup()
|
|
35
36
|
// read texel by texel (texture_octahedral_sample_bilinear), as the forward path reads it
|
|
36
|
-
.addTexture("tEnvironment")
|
|
37
|
+
.addTexture("tEnvironment", "float")
|
|
38
|
+
.add(ENVIRONMENT_MAP_SAMPLER_RESOURCE)
|
|
37
39
|
.addStorageBuffer("output", ENVIRONMENT_SH_TYPE, true);
|
|
38
40
|
|
|
39
41
|
const body = CodeChunk.from(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_lightmap_viz_to_irradiance_flat.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_lightmap_viz_to_irradiance_flat.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js"],"names":[],"mappings":"AA8OA,iEASE;4BA7M0B,6BAA6B"}
|
|
@@ -47,6 +47,7 @@ import { sr_create_group_RTX } from "../../geometry/sr_create_group_RTX.js";
|
|
|
47
47
|
import { PARTICIPATING_MEDIA_NOISE_SAMPLER_DESCRIPTOR } from "../../volumetrics/noise/PARTICIPATING_MEDIA_NOISE.js";
|
|
48
48
|
import { wind_field_add_resources } from "../../wind/wind_field_add_resources.js";
|
|
49
49
|
import { chunk_lightmap_geometry_uv_to_atlas } from "../chunk_lightmap_geometry_uv_to_atlas.js";
|
|
50
|
+
import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "../../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
|
|
50
51
|
|
|
51
52
|
const resources = new ShaderResourceSetDescriptor();
|
|
52
53
|
sr_create_group_RTX(resources);
|
|
@@ -60,7 +61,8 @@ resources.createGroup()
|
|
|
60
61
|
// the scene's wind, which carries the fog volumes' noise: one uniform, one texture, one sampler
|
|
61
62
|
wind_field_add_resources(resources.createGroup()
|
|
62
63
|
.addStorageBuffer("light_data", WebGPUArray.u32)
|
|
63
|
-
.addTexture("tEnvironment", "
|
|
64
|
+
.addTexture("tEnvironment", "float", "2d")
|
|
65
|
+
.add(ENVIRONMENT_MAP_SAMPLER_RESOURCE)
|
|
64
66
|
// the fog volumes' noise, read through participating_media_volume_density_at
|
|
65
67
|
.addTexture("tParticipatingMediaNoise", "float", "3d")
|
|
66
68
|
.addSampler("sParticipatingMediaNoise", "filtering", PARTICIPATING_MEDIA_NOISE_SAMPLER_DESCRIPTOR));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_lightmap_viz_to_sh.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_lightmap_viz_to_sh.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js"],"names":[],"mappings":"AA2OA,oDAOE;4BA1M0B,6BAA6B"}
|
|
@@ -47,6 +47,7 @@ import { LIGHTMAP_SH_COLOR_TARGETS_DESCRIPTOR } from "./LIGHTMAP_SH_COLOR_TARGET
|
|
|
47
47
|
import { LIGHTMAP_SH_FRAGMENT_OUTPUT } from "./LIGHTMAP_SH_FRAGMENT_OUTPUT.js";
|
|
48
48
|
import { PARTICIPATING_MEDIA_NOISE_SAMPLER_DESCRIPTOR } from "../../volumetrics/noise/PARTICIPATING_MEDIA_NOISE.js";
|
|
49
49
|
import { wind_field_add_resources } from "../../wind/wind_field_add_resources.js";
|
|
50
|
+
import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "../../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
|
|
50
51
|
|
|
51
52
|
const resources = new ShaderResourceSetDescriptor();
|
|
52
53
|
sr_create_group_RTX(resources);
|
|
@@ -60,7 +61,8 @@ resources.createGroup()
|
|
|
60
61
|
// the scene's wind, which carries the fog volumes' noise: one uniform, one texture, one sampler
|
|
61
62
|
wind_field_add_resources(resources.createGroup()
|
|
62
63
|
.addStorageBuffer("light_data", WebGPUArray.u32)
|
|
63
|
-
.addTexture("tEnvironment", "
|
|
64
|
+
.addTexture("tEnvironment", "float", "2d")
|
|
65
|
+
.add(ENVIRONMENT_MAP_SAMPLER_RESOURCE)
|
|
64
66
|
// the fog volumes' noise, read through participating_media_volume_density_at
|
|
65
67
|
.addTexture("tParticipatingMediaNoise", "float", "3d")
|
|
66
68
|
.addSampler("sParticipatingMediaNoise", "filtering", PARTICIPATING_MEDIA_NOISE_SAMPLER_DESCRIPTOR));
|
|
@@ -13,7 +13,7 @@ export class TinyGltf {
|
|
|
13
13
|
* @readonly
|
|
14
14
|
* @type {TextureFormat}
|
|
15
15
|
*/
|
|
16
|
-
static readonly "__#
|
|
16
|
+
static readonly "__#287@#UNCOMPRESSED_TARGET": TextureFormat;
|
|
17
17
|
/**
|
|
18
18
|
* @param {AssetManager} assetManager
|
|
19
19
|
* @param {AssetRequestScope} [scope]
|
package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_accumulating_path_tracer.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_accumulating_path_tracer.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js"],"names":[],"mappings":"AAqBA,2DAKG;AAoFH,4DAIG;6BAhH0B,mCAAmC;8BAOlC,+BAA+B"}
|
|
@@ -15,6 +15,7 @@ import { MEDIA_TABLE_STRUCT } from "../../medium/MEDIA_TABLE_STRUCT.js";
|
|
|
15
15
|
import { chunk_render_trace_path } from "../shader/chunk_render_trace_path.js";
|
|
16
16
|
import { PARTICIPATING_MEDIA_NOISE_SAMPLER_DESCRIPTOR } from "../../volumetrics/noise/PARTICIPATING_MEDIA_NOISE.js";
|
|
17
17
|
import { wind_field_add_resources } from "../../wind/wind_field_add_resources.js";
|
|
18
|
+
import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "../../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
|
|
18
19
|
|
|
19
20
|
const resources = new ShaderResourceSetDescriptor();
|
|
20
21
|
|
|
@@ -39,7 +40,8 @@ resources.createGroup()
|
|
|
39
40
|
// the scene's wind, which carries the fog volumes' noise: one uniform, one texture, one sampler
|
|
40
41
|
wind_field_add_resources(resources.createGroup()
|
|
41
42
|
.addStorageBuffer("light_data", WebGPUArray.u32)
|
|
42
|
-
.addTexture("tEnvironment", "
|
|
43
|
+
.addTexture("tEnvironment", "float", "2d")
|
|
44
|
+
.add(ENVIRONMENT_MAP_SAMPLER_RESOURCE)
|
|
43
45
|
// the fog volumes' noise, read through participating_media_volume_density_at
|
|
44
46
|
.addTexture("tParticipatingMediaNoise", "float", "3d")
|
|
45
47
|
.addSampler("sParticipatingMediaNoise", "filtering", PARTICIPATING_MEDIA_NOISE_SAMPLER_DESCRIPTOR));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_path_trace_scene.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/path_tracer/graph_path_trace_scene.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_path_trace_scene.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/path_tracer/graph_path_trace_scene.js"],"names":[],"mappings":"AA0GA;;;;;;GAMG;AACH;IAJ+B,KAAK;IACD,IAAI;IAC1B,MAAM,CAyFlB"}
|
|
@@ -18,6 +18,7 @@ import { MEDIA_TABLE_STRUCT } from "../medium/MEDIA_TABLE_STRUCT.js";
|
|
|
18
18
|
import { chunk_render_trace_path } from "./shader/chunk_render_trace_path.js";
|
|
19
19
|
import { PARTICIPATING_MEDIA_NOISE_SAMPLER_DESCRIPTOR } from "../volumetrics/noise/PARTICIPATING_MEDIA_NOISE.js";
|
|
20
20
|
import { wind_field_add_resources } from "../wind/wind_field_add_resources.js";
|
|
21
|
+
import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
|
|
21
22
|
|
|
22
23
|
const RAY_TRACING_UNIFORMS_STRUCT = WebGPUStruct.from({
|
|
23
24
|
random_seed: u32
|
|
@@ -35,7 +36,8 @@ resources.createGroup()
|
|
|
35
36
|
// the scene's wind, which carries the fog volumes' noise: one uniform, one texture, one sampler
|
|
36
37
|
wind_field_add_resources(resources.createGroup()
|
|
37
38
|
.addStorageBuffer("light_data", WebGPUArray.u32)
|
|
38
|
-
.addTexture("tEnvironment", "
|
|
39
|
+
.addTexture("tEnvironment", "float", "2d")
|
|
40
|
+
.add(ENVIRONMENT_MAP_SAMPLER_RESOURCE)
|
|
39
41
|
// the fog volumes' noise, read through participating_media_volume_density_at
|
|
40
42
|
.addTexture("tParticipatingMediaNoise", "float", "3d")
|
|
41
43
|
.addSampler("sParticipatingMediaNoise", "filtering", PARTICIPATING_MEDIA_NOISE_SAMPLER_DESCRIPTOR));
|
|
@@ -236,7 +236,7 @@ fn render_trace_path(
|
|
|
236
236
|
if(hit.t <= 0.0){
|
|
237
237
|
// didn't hit anything
|
|
238
238
|
|
|
239
|
-
var environment_sample = sample_environment_color(tEnvironment, ray.direction);
|
|
239
|
+
var environment_sample = sample_environment_color(tEnvironment, sEnvironment, ray.direction);
|
|
240
240
|
|
|
241
241
|
let env_luma = rgb_to_luminance(environment_sample);
|
|
242
242
|
|
|
@@ -53,7 +53,7 @@ export class NSS {
|
|
|
53
53
|
* @returns {number}
|
|
54
54
|
*/
|
|
55
55
|
static recommended_jitter_sequence_size(upscale_ratio: number): number;
|
|
56
|
-
static "__#
|
|
56
|
+
static "__#201@#preprocess_tensor_descriptor"(render_w: any, render_h: any): TextureResourceDescriptor;
|
|
57
57
|
/**
|
|
58
58
|
* @param {GraphicsContext} graphics
|
|
59
59
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssr_resolve_shader.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ssr_resolve_shader.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js"],"names":[],"mappings":"AAiWA;;;;;;;GAOG;AACH,iCAFU,WAAW,CAgBlB;4BApWyB,gCAAgC"}
|
|
@@ -31,6 +31,7 @@ import { BLACK_PIXEL_TEXTURE } from "../../../texture/util/BLACK_PIXEL_TEXTURE.j
|
|
|
31
31
|
import { ZERO_UINT_PIXEL_TEXTURE } from "../../../texture/util/ZERO_UINT_PIXEL_TEXTURE.js";
|
|
32
32
|
import { chunk_ssr_add_hit_irradiance } from "./chunk_ssr_add_hit_irradiance.js";
|
|
33
33
|
import { chunk_ssr_sample_radiance } from "./chunk_ssr_sample_radiance.js";
|
|
34
|
+
import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "../../../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
|
|
34
35
|
|
|
35
36
|
const RESOLVE_UNIFORMS = WebGPUStruct.from({
|
|
36
37
|
frame_index: u32,
|
|
@@ -43,7 +44,8 @@ const resources = new ShaderResourceSetDescriptor();
|
|
|
43
44
|
// the noise that jitters them, and the light probe volume. The pass binds only the running mode's, and each
|
|
44
45
|
// mode's source has a default for the others: black textures, transient buffers, a volume of no probes.
|
|
45
46
|
resources.createGroup()
|
|
46
|
-
.addTexture("tEnvironment")
|
|
47
|
+
.addTexture("tEnvironment", "float")
|
|
48
|
+
.add(ENVIRONMENT_MAP_SAMPLER_RESOURCE)
|
|
47
49
|
.addStorageBuffer("brick4", BRICK4_DATA_STRUCT, false, true)
|
|
48
50
|
.addTexture("tSTBN_vec2", "unfilterable-float", "3d")
|
|
49
51
|
.addTexture("lpv_atlas_radiance", "uint", "2d", false, ZERO_UINT_PIXEL_TEXTURE)
|
|
@@ -77,11 +77,6 @@ export const AVBOIT_EXTINCTION_SCALE: number;
|
|
|
77
77
|
* @type {number}
|
|
78
78
|
*/
|
|
79
79
|
export const AVBOIT_FIELD_BITS: number;
|
|
80
|
-
/**
|
|
81
|
-
* Field mask.
|
|
82
|
-
* @type {number}
|
|
83
|
-
*/
|
|
84
|
-
export const AVBOIT_FIELD_MASK: number;
|
|
85
80
|
/**
|
|
86
81
|
* How far toward the camera, in virtual slices, the draw pass samples the integral so that a surface
|
|
87
82
|
* does not occlude itself through its own linear splat. With the exclusive-prefix storage convention
|
|
@@ -1 +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;;;;;;;;;;;;;;;;GAgBG;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;;;;;;;;;;;GAWG;AACH,2CAFU,MAAM,CAEoC;AAEpD;;;;GAIG;AACH,sCAFU,MAAM,CAE2B;AAE3C;;;GAGG;AACH,gCAFU,MAAM,CAEoB;AAEpC
|
|
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;;;;;;;;;;;;;;;;GAgBG;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;;;;;;;;;;;GAWG;AACH,2CAFU,MAAM,CAEoC;AAEpD;;;;GAIG;AACH,sCAFU,MAAM,CAE2B;AAE3C;;;GAGG;AACH,gCAFU,MAAM,CAEoB;AAEpC;;;;;;;;GAQG;AACH,wCAFU,MAAM,CAE6B;AAE7C;;;;;GAKG;AACH,wCAFU,MAAM,CAE2B;AAE3C;;;;GAIG;AACH,sDAAmD;AAEnD;;;GAGG;AACH,8CAFU,MAAM,CAEiC"}
|
|
@@ -87,12 +87,6 @@ export const AVBOIT_EXTINCTION_SCALE = 255;
|
|
|
87
87
|
*/
|
|
88
88
|
export const AVBOIT_FIELD_BITS = 10;
|
|
89
89
|
|
|
90
|
-
/**
|
|
91
|
-
* Field mask.
|
|
92
|
-
* @type {number}
|
|
93
|
-
*/
|
|
94
|
-
export const AVBOIT_FIELD_MASK = (1 << AVBOIT_FIELD_BITS) - 1;
|
|
95
|
-
|
|
96
90
|
/**
|
|
97
91
|
* How far toward the camera, in virtual slices, the draw pass samples the integral so that a surface
|
|
98
92
|
* does not occlude itself through its own linear splat. With the exclusive-prefix storage convention
|
package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_avboit_counts_to_extinction.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_avboit_counts_to_extinction.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.js"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,gDAFU,SAAS,CASjB;0BAnBwB,uCAAuC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
|
|
2
2
|
import { AVBOIT_EXTINCTION_SCALE } from "./AVBOIT_CONSTANTS.js";
|
|
3
3
|
|
|
4
|
+
|
|
5
|
+
const AVBOIT_EXTINCTION_SCALE_INV = 1.0 / AVBOIT_EXTINCTION_SCALE;
|
|
6
|
+
|
|
4
7
|
/**
|
|
5
8
|
* Accumulated counts back to normalized extinction. Not clamped: a field that summed past 255 reads
|
|
6
9
|
* above 1.0 here and saturates in the integration, which is where the running value is kept.
|
|
@@ -11,7 +14,7 @@ export const chunk_avboit_counts_to_extinction = CodeChunk.from(
|
|
|
11
14
|
//language=WGSL
|
|
12
15
|
`
|
|
13
16
|
fn avboit_counts_to_extinction(counts: vec3<u32>) -> vec3<f32> {
|
|
14
|
-
return vec3<f32>(counts)
|
|
17
|
+
return vec3<f32>(counts) * ${AVBOIT_EXTINCTION_SCALE_INV};
|
|
15
18
|
}
|
|
16
19
|
`
|
|
17
20
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_rasterize_meshes_transparent_avboit.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_rasterize_meshes_transparent_avboit.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js"],"names":[],"mappings":"AA4DA;;;;;GAKG;AACH,oDAHW,UAAU,MAAM,CAAC,GACf,MAAM,EAAE,CAOpB;AAED;;;;;;;;;;;;GAYG;AACH;IAT+B,KAAK;IACA,KAAK;IACd,MAAM,EAAtB,MAAM;IACqB,kBAAkB,EAA7C,UAAU,MAAM,CAAC;IACD,kBAAkB,EAAlC,MAAM;IACU,wBAAwB,EAAxC,MAAM;IACW,SAAS,GAA1B,MAAM;IACJ,MAAM,CA4DlB;AAED;;;;;;;;;;GAUG;AACH;IAP+B,KAAK;IACT,SAAS,EAAzB,MAAM;IACY,gBAAgB,EAAlC,MAAM,EAAE;IACmB,kBAAkB,EAA7C,UAAU,MAAM,CAAC;IACQ,MAAM,GAA/B,cAAc;IACZ,MAAM,CAuDlB;AAED;;;;;;;;;;;;;;;GAeG;AACH,6KAFa;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAiJjE;AAED;;;;;;;;;;GAUG;AACH;IAP+B,KAAK;IACT,IAAI,EAApB,MAAM;IACU,UAAU,EAA1B,MAAM;IACU,QAAQ,EAAxB,MAAM;IACY,gBAAgB,EAAlC,MAAM,EAAE;IACN,MAAM,CAoClB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,8TAFa;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CAuM7D;AAED;;;;;;;;GAQG;AACH,+EAHW,UAAU,MAAM,CAAC,GACf;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAe/E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH;IAxB+B,KAAK;IACT,OAAO,EAAvB,MAAM;IACkB,QAAQ;IACd,QAAQ,EAA1B,MAAM,EAAE;IACQ,aAAa,EAA7B,MAAM;IACU,aAAa,EAA7B,MAAM;IACuB,MAAM;IACnB,wBAAwB,EAAxC,MAAM;IACU,oBAAoB,EAApC,MAAM;IACU,kBAAkB,EAAlC,MAAM;IACU,eAAe,EAA/B,MAAM;IACU,eAAe,EAA/B,MAAM;IACU,oBAAoB,EAApC,MAAM;IAC6B,sBAAsB,EAAzD;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC;IAGC,eAAe,GAAzC,eAAe;IAGU,MAAM,GAA/B,cAAc;IACiD,aAAa,GAA5E,OAAO,wBAAwB,EAAE,iBAAiB,EAAE;IAElD,MAAM,CAkTlB;+BA38B8B,qBAAqB;gCAIpB,6CAA6C"}
|
package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js
CHANGED
|
@@ -13,6 +13,7 @@ import { graph_import_texture } from "../../../shader/graph/graph_import_texture
|
|
|
13
13
|
import {
|
|
14
14
|
SHADOWMAP_COMPARE_SAMPLER_DESCRIPTOR
|
|
15
15
|
} from "../../../shadow/map/SHADOWMAP_COMPARE_SAMPLER_DESCRIPTOR.js";
|
|
16
|
+
import { ENVIRONMENT_MAP_SAMPLER_DESCRIPTOR } from "../../../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
|
|
16
17
|
import { STATIC_GRAPHICS_ENGINE_ASSETS } from "../../../STATIC_GRAPHICS_ENGINE_ASSETS.js";
|
|
17
18
|
import { rasterization_material_bucket } from "../../expand/bucket/chunk_rasterization_material_bucket.js";
|
|
18
19
|
import { construct_primitive_state } from "../../bucket/construct_primitive_state.js";
|
|
@@ -518,12 +519,14 @@ export function graph_avboit_draw({
|
|
|
518
519
|
));
|
|
519
520
|
|
|
520
521
|
const sampler_shadowmap = graphics.samplers.obtain(SHADOWMAP_COMPARE_SAMPLER_DESCRIPTOR);
|
|
522
|
+
const sampler_environment = graphics.samplers.obtain(ENVIRONMENT_MAP_SAMPLER_DESCRIPTOR);
|
|
521
523
|
|
|
522
524
|
const light_bindings = bind_manager.obtain(BindGroupDescriptor.from(
|
|
523
525
|
FORWARD_LIGHT_LAYOUT,
|
|
524
526
|
[
|
|
525
527
|
{ buffer: view_ctx.scene.lights.buffer_data },
|
|
526
528
|
view_ctx.scene.lights.environment.obtainView(),
|
|
529
|
+
sampler_environment,
|
|
527
530
|
//
|
|
528
531
|
{ buffer: light_cluster_parameters },
|
|
529
532
|
{ buffer: light_cluster_lookup },
|
package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_rasterize_meshes_transparent_oit.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_rasterize_meshes_transparent_oit.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js"],"names":[],"mappings":"AA0YA;;;;;;;;;;;;;;;;;GAiBG;AACH,gSAFa,MAAM,CAyOlB"}
|
|
@@ -11,6 +11,7 @@ import { graph_import_texture } from "../../../shader/graph/graph_import_texture
|
|
|
11
11
|
import {
|
|
12
12
|
SHADOWMAP_COMPARE_SAMPLER_DESCRIPTOR
|
|
13
13
|
} from "../../../shadow/map/SHADOWMAP_COMPARE_SAMPLER_DESCRIPTOR.js";
|
|
14
|
+
import { ENVIRONMENT_MAP_SAMPLER_DESCRIPTOR } from "../../../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
|
|
14
15
|
import { STATIC_GRAPHICS_ENGINE_ASSETS } from "../../../STATIC_GRAPHICS_ENGINE_ASSETS.js";
|
|
15
16
|
import { rasterization_material_bucket } from "../../expand/bucket/chunk_rasterization_material_bucket.js";
|
|
16
17
|
import { construct_primitive_state } from "../../bucket/construct_primitive_state.js";
|
|
@@ -129,12 +130,14 @@ function graph_oit_resolve_moments({
|
|
|
129
130
|
));
|
|
130
131
|
|
|
131
132
|
const sampler_shadowmap = context.graphics.samplers.obtain(SHADOWMAP_COMPARE_SAMPLER_DESCRIPTOR);
|
|
133
|
+
const sampler_environment = context.graphics.samplers.obtain(ENVIRONMENT_MAP_SAMPLER_DESCRIPTOR);
|
|
132
134
|
|
|
133
135
|
const light_bindings = bind_manager.obtain(BindGroupDescriptor.from(
|
|
134
136
|
FORWARD_LIGHT_LAYOUT,
|
|
135
137
|
[
|
|
136
138
|
{ buffer: view_ctx.scene.lights.buffer_data },
|
|
137
139
|
view_ctx.scene.lights.environment.obtainView(),
|
|
140
|
+
sampler_environment,
|
|
138
141
|
//
|
|
139
142
|
{ buffer: light_cluster_parameters },
|
|
140
143
|
{ buffer: light_cluster_lookup },
|