@woosh/meep-engine 3.50.0 → 3.51.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/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/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/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/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/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/chunk_PAPER_WHITE_NITS.js +1 -1
- 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
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { CAMERA_UNIFORM_STRUCT } from "../camera/CAMERA_UNIFORM_STRUCT.js";
|
|
2
|
+
import { AABB3_STRUCT } from "../shader/chunk/geometry/aabb3/AABB3_STRUCT.js";
|
|
3
|
+
import { chunk_aabb3_below_plane } from "../shader/chunk/geometry/aabb3/chunk_aabb3_below_plane.js";
|
|
4
|
+
import {
|
|
5
|
+
chunk_frustum_transform_plane_matrix
|
|
6
|
+
} from "../shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.js";
|
|
7
|
+
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
8
|
+
import { ComputeShader } from "../shader/ComputeShader.js";
|
|
9
|
+
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
10
|
+
import { atomic_u32, u32 } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
11
|
+
import { WebGPUArray } from "../shader/type/WebGPUArray.js";
|
|
12
|
+
import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
|
|
13
|
+
import { chunk_participating_media_volumes_iterate } from "./chunk_participating_media_volumes_iterate.js";
|
|
14
|
+
import { chunk_volumetrics_media_group_list } from "./chunk_volumetrics_media_group_list.js";
|
|
15
|
+
import { VOLUMETRICS_METADATA_STRUCT } from "./VOLUMETRICS_METADATA_STRUCT.js";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Some of the scene's participating-media volumes, as their rows in the scene database: `indices[0,
|
|
19
|
+
* count)`, in no particular order.
|
|
20
|
+
*/
|
|
21
|
+
export const VOLUMETRICS_MEDIA_VOLUME_LIST = WebGPUStruct.from({
|
|
22
|
+
count: u32,
|
|
23
|
+
indices: WebGPUArray.u32,
|
|
24
|
+
}, "VolumetricsMediaVolumeList");
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* {@link VOLUMETRICS_MEDIA_VOLUME_LIST} as the split appends to it, from a count of zero.
|
|
28
|
+
*/
|
|
29
|
+
const VOLUMETRICS_MEDIA_VOLUME_LIST_APPEND = WebGPUStruct.from({
|
|
30
|
+
count: atomic_u32,
|
|
31
|
+
indices: WebGPUArray.u32,
|
|
32
|
+
}, "VolumetricsMediaVolumeListAppend");
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Threads of a split workgroup, each taking one volume.
|
|
36
|
+
* @type {number}
|
|
37
|
+
*/
|
|
38
|
+
export const VOLUMETRICS_MEDIA_SPLIT_LANES = 64;
|
|
39
|
+
|
|
40
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
41
|
+
|
|
42
|
+
resources.createGroup()
|
|
43
|
+
.addUniform("camera", CAMERA_UNIFORM_STRUCT)
|
|
44
|
+
.addUniform("volumetrics_metadata", VOLUMETRICS_METADATA_STRUCT)
|
|
45
|
+
.addStorageBuffer("scene_database", WebGPUArray.u32)
|
|
46
|
+
.addStorageBuffer("near_field", VOLUMETRICS_MEDIA_VOLUME_LIST_APPEND, true)
|
|
47
|
+
.addStorageBuffer("far_field", VOLUMETRICS_MEDIA_VOLUME_LIST_APPEND, true)
|
|
48
|
+
;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Splits the scene's participating-media volumes between the near field, the froxel grid's depths
|
|
52
|
+
* up to `froxel_far`, and the far field beyond it, where the aerial pass reads the volumes
|
|
53
|
+
* themselves. One thread a volume. A volume outside any of the grid's four side planes or its near
|
|
54
|
+
* plane goes to neither. Of the rest, a volume any part of which is nearer than `froxel_far` goes to
|
|
55
|
+
* the near field, and one any part of which is beyond goes to the far field, so a volume across
|
|
56
|
+
* `froxel_far` goes to both.
|
|
57
|
+
*
|
|
58
|
+
* The side planes are the grid's, widened a quarter froxel as the bin widens its groups'. The near
|
|
59
|
+
* plane is the one the bin's first groups start at. With `froxel_far` at its default, the camera's
|
|
60
|
+
* far, the discriminator is where the bin's last groups end, so any volume a group of the bin
|
|
61
|
+
* would keep is in the near field, and the bin reads only the near field. With `froxel_far` pulled
|
|
62
|
+
* nearer, the grid's last slice still reaches the camera's far. A volume wholly between the two then
|
|
63
|
+
* belongs to the far field alone and stops reaching that slice.
|
|
64
|
+
*
|
|
65
|
+
* The lists start at a count of zero; the graph clears them. Budget: one volume a thread.
|
|
66
|
+
*/
|
|
67
|
+
export const shader_volumetrics_split_participating_media = ComputeShader.from({
|
|
68
|
+
label: "Volumetrics / split participating media",
|
|
69
|
+
resources,
|
|
70
|
+
body: CodeChunk.from(
|
|
71
|
+
//language=WGSL
|
|
72
|
+
`
|
|
73
|
+
@compute @workgroup_size(${VOLUMETRICS_MEDIA_SPLIT_LANES})
|
|
74
|
+
fn main(
|
|
75
|
+
@builtin(global_invocation_id) id: vec3<u32>,
|
|
76
|
+
) {
|
|
77
|
+
let v = id.x;
|
|
78
|
+
|
|
79
|
+
if (v >= participating_media_volumes_count(&scene_database)) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
let resolution = vec2<f32>(volumetrics_metadata.resolution.xy);
|
|
84
|
+
let near_far = camera.clip_near_far;
|
|
85
|
+
|
|
86
|
+
let field = volumetrics_froxel_slab_between(
|
|
87
|
+
volumetrics_froxel_planes(volumetrics_metadata.frustum),
|
|
88
|
+
(vec2<f32>(0.0) - 0.25) / resolution,
|
|
89
|
+
(resolution + 0.25) / resolution,
|
|
90
|
+
near_far.x,
|
|
91
|
+
min(near_far.y, volumetrics_metadata.froxel_far),
|
|
92
|
+
near_far,
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
let volume = participating_media_volume_read(&scene_database, v);
|
|
96
|
+
|
|
97
|
+
// into the volume's frame, where it is the unit box, as the bin and the build take their planes
|
|
98
|
+
let local = frustum_transform_plane_matrix(field, transpose(volume.transform));
|
|
99
|
+
|
|
100
|
+
const unit_bounds = ${AABB3_STRUCT.make({
|
|
101
|
+
min: "vec3(-0.5)",
|
|
102
|
+
max: "vec3(0.5)",
|
|
103
|
+
})};
|
|
104
|
+
|
|
105
|
+
// the four side planes and the near plane
|
|
106
|
+
for (var i = 0u; i < 5u; i++) {
|
|
107
|
+
if (aabb3_below_plane(unit_bounds, local[i])) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// froxel_far: some of the volume on its near side, some on its far side, or both
|
|
113
|
+
// A list holds a row for every volume the host counted; a count past it, from a volume added
|
|
114
|
+
// after the lists were sized, loses that volume for the frame.
|
|
115
|
+
if (!aabb3_below_plane(unit_bounds, local[5])) {
|
|
116
|
+
let slot = atomicAdd(&near_field.count, 1u);
|
|
117
|
+
|
|
118
|
+
if (slot < arrayLength(&near_field.indices)) {
|
|
119
|
+
near_field.indices[slot] = v;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
if (!aabb3_below_plane(unit_bounds, -local[5])) {
|
|
124
|
+
let slot = atomicAdd(&far_field.count, 1u);
|
|
125
|
+
|
|
126
|
+
if (slot < arrayLength(&far_field.indices)) {
|
|
127
|
+
far_field.indices[slot] = v;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
`, [
|
|
132
|
+
chunk_participating_media_volumes_iterate,
|
|
133
|
+
chunk_volumetrics_media_group_list,
|
|
134
|
+
chunk_frustum_transform_plane_matrix,
|
|
135
|
+
AABB3_STRUCT.declaration_chunk,
|
|
136
|
+
chunk_aabb3_below_plane,
|
|
137
|
+
]
|
|
138
|
+
),
|
|
139
|
+
});
|