@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.
Files changed (112) hide show
  1. package/package.json +1 -1
  2. package/src/engine/graphics3/make_default_environment.d.ts.map +1 -1
  3. package/src/engine/graphics3/make_default_environment.js +11 -5
  4. package/src/shade/playground/particle_ecs/moonlit_environment.d.ts.map +1 -1
  5. package/src/shade/playground/particle_ecs/moonlit_environment.js +11 -5
  6. package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts.map +1 -1
  7. package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.js +3 -1
  8. package/src/shade/renderer/atmosphere/chunk_sample_environment_color.d.ts +3 -0
  9. package/src/shade/renderer/atmosphere/chunk_sample_environment_color.d.ts.map +1 -1
  10. package/src/shade/renderer/atmosphere/chunk_sample_environment_color.js +11 -8
  11. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts +6 -0
  12. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
  13. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +227 -215
  14. package/src/shade/renderer/deferred/SHADING_LIGHT_RESOURCE_GROUP.d.ts.map +1 -1
  15. package/src/shade/renderer/deferred/SHADING_LIGHT_RESOURCE_GROUP.js +2 -0
  16. package/src/shade/renderer/deferred/indirect/chunk_get_ibl_irradiance.d.ts.map +1 -1
  17. package/src/shade/renderer/deferred/indirect/chunk_get_ibl_irradiance.js +4 -2
  18. package/src/shade/renderer/deferred/indirect/chunk_get_ibl_radiance.d.ts.map +1 -1
  19. package/src/shade/renderer/deferred/indirect/chunk_get_ibl_radiance.js +4 -2
  20. package/src/shade/renderer/deferred/shader_background.d.ts.map +1 -1
  21. package/src/shade/renderer/deferred/shader_background.js +4 -2
  22. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  23. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +3 -1
  24. package/src/shade/renderer/global_illumination/ibl/shader_diffuse_IBL.d.ts.map +1 -1
  25. package/src/shade/renderer/global_illumination/ibl/shader_diffuse_IBL.js +3 -1
  26. package/src/shade/renderer/global_illumination/ibl/shader_specular_IBL.d.ts.map +1 -1
  27. package/src/shade/renderer/global_illumination/ibl/shader_specular_IBL.js +3 -1
  28. package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.d.ts.map +1 -1
  29. package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.js +3 -1
  30. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.d.ts.map +1 -1
  31. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +4 -2
  32. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  33. package/src/shade/renderer/light/GPULightCollection.js +44 -0
  34. package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_RESOURCE.d.ts +2 -1
  35. package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_RESOURCE.d.ts.map +1 -1
  36. package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_RESOURCE.js +3 -2
  37. package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.d.ts +14 -0
  38. package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.d.ts.map +1 -0
  39. package/src/shade/renderer/light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js +25 -0
  40. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  41. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +3 -4
  42. package/src/shade/renderer/light/environment/octahedral_skirt_matches.d.ts +19 -0
  43. package/src/shade/renderer/light/environment/octahedral_skirt_matches.d.ts.map +1 -0
  44. package/src/shade/renderer/light/environment/octahedral_skirt_matches.js +67 -0
  45. package/src/shade/renderer/light/environment/octahedral_skirt_source_texel.d.ts +16 -0
  46. package/src/shade/renderer/light/environment/octahedral_skirt_source_texel.d.ts.map +1 -0
  47. package/src/shade/renderer/light/environment/octahedral_skirt_source_texel.js +35 -0
  48. package/src/shade/renderer/light/environment/resample_cube_to_octahedral.d.ts +7 -2
  49. package/src/shade/renderer/light/environment/resample_cube_to_octahedral.d.ts.map +1 -1
  50. package/src/shade/renderer/light/environment/resample_cube_to_octahedral.js +23 -7
  51. package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.d.ts +8 -2
  52. package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.d.ts.map +1 -1
  53. package/src/shade/renderer/light/environment/resample_equirectangular_to_octahedral.js +24 -7
  54. package/src/shade/renderer/light/environment/sampler2d_octahedral_skirt_fill.d.ts +12 -0
  55. package/src/shade/renderer/light/environment/sampler2d_octahedral_skirt_fill.d.ts.map +1 -0
  56. package/src/shade/renderer/light/environment/sampler2d_octahedral_skirt_fill.js +54 -0
  57. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts +2 -2
  58. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts.map +1 -1
  59. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js +5 -4
  60. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
  61. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +13 -9
  62. package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts.map +1 -1
  63. package/src/shade/renderer/light/environment/shader_project_environment_sh.js +3 -1
  64. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.d.ts.map +1 -1
  65. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +3 -1
  66. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.d.ts.map +1 -1
  67. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +3 -1
  68. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  69. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +3 -1
  70. package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
  71. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +3 -1
  72. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -1
  73. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
  74. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +3 -1
  75. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +0 -5
  76. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -1
  77. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +0 -6
  78. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts.map +1 -1
  79. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.js +4 -1
  80. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  81. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +3 -0
  82. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
  83. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +3 -0
  84. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js +1 -1
  85. package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.d.ts +15 -0
  86. package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.d.ts.map +1 -0
  87. package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_texel_uv.js +27 -0
  88. package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_uv.d.ts +18 -0
  89. package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_uv.d.ts.map +1 -0
  90. package/src/shade/renderer/shader/chunk/texture/octahedral/chunk_texture_octahedral_skirt_uv.js +24 -0
  91. package/src/shade/renderer/shader/chunk/texture/sample/chunk_sample_environment_map.d.ts +18 -1
  92. package/src/shade/renderer/shader/chunk/texture/sample/chunk_sample_environment_map.d.ts.map +1 -1
  93. package/src/shade/renderer/shader/chunk/texture/sample/chunk_sample_environment_map.js +45 -27
  94. package/src/shade/renderer/view/GPUViewSkyContext.js +169 -169
  95. package/src/shade/renderer/volumetrics/NOTES.md +209 -0
  96. package/src/shade/renderer/volumetrics/VOLUMETRICS_METADATA_STRUCT.d.ts.map +1 -1
  97. package/src/shade/renderer/volumetrics/VOLUMETRICS_METADATA_STRUCT.js +1 -1
  98. package/src/shade/renderer/volumetrics/chunk_volumetrics_media_group_list.d.ts +36 -0
  99. package/src/shade/renderer/volumetrics/chunk_volumetrics_media_group_list.d.ts.map +1 -0
  100. package/src/shade/renderer/volumetrics/chunk_volumetrics_media_group_list.js +129 -0
  101. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  102. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +75 -0
  103. package/src/shade/renderer/volumetrics/shader_volumetrics_bin_participating_media.d.ts +26 -0
  104. package/src/shade/renderer/volumetrics/shader_volumetrics_bin_participating_media.d.ts.map +1 -0
  105. package/src/shade/renderer/volumetrics/shader_volumetrics_bin_participating_media.js +110 -0
  106. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
  107. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +38 -14
  108. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.d.ts.map +1 -1
  109. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +9 -4
  110. package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.d.ts +31 -0
  111. package/src/shade/renderer/volumetrics/shader_volumetrics_split_participating_media.d.ts.map +1 -0
  112. 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
+ });