@woosh/meep-engine 3.36.0 → 3.38.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 (169) hide show
  1. package/package.json +1 -1
  2. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  3. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +2 -0
  4. package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.d.ts +11 -0
  5. package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.d.ts.map +1 -0
  6. package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.js +10 -0
  7. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
  8. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +16 -0
  9. package/src/engine/graphics/ecs/water/Water.d.ts +30 -0
  10. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  11. package/src/engine/graphics/ecs/water/Water.js +125 -104
  12. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
  13. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +13 -1
  14. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts +6 -0
  15. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts.map +1 -0
  16. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.js +18 -0
  17. package/src/engine/graphics3/WaterSystem.d.ts +22 -6
  18. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  19. package/src/engine/graphics3/WaterSystem.js +314 -293
  20. package/src/engine/input/devices/XRInputDevice.d.ts +51 -23
  21. package/src/engine/input/devices/XRInputDevice.d.ts.map +1 -1
  22. package/src/engine/input/devices/XRInputDevice.js +145 -52
  23. package/src/engine/input/devices/xr/XRGamepadMapping.d.ts +14 -0
  24. package/src/engine/input/devices/xr/XRGamepadMapping.d.ts.map +1 -0
  25. package/src/engine/input/devices/xr/XRGamepadMapping.js +9 -0
  26. package/src/engine/input/devices/xr/XRHandedness.d.ts +15 -0
  27. package/src/engine/input/devices/xr/XRHandedness.d.ts.map +1 -0
  28. package/src/engine/input/devices/xr/XRHandedness.js +10 -0
  29. package/src/engine/input/devices/xr/XRInputAction.d.ts +24 -11
  30. package/src/engine/input/devices/xr/XRInputAction.d.ts.map +1 -1
  31. package/src/engine/input/devices/xr/XRInputAction.js +55 -24
  32. package/src/engine/input/devices/xr/XRInputButton.d.ts +7 -9
  33. package/src/engine/input/devices/xr/XRInputButton.d.ts.map +1 -1
  34. package/src/engine/input/devices/xr/XRInputButton.js +18 -8
  35. package/src/engine/input/devices/xr/XRInputCoordinates.d.ts +11 -3
  36. package/src/engine/input/devices/xr/XRInputCoordinates.d.ts.map +1 -1
  37. package/src/engine/input/devices/xr/XRInputCoordinates.js +17 -3
  38. package/src/engine/input/devices/xr/XRInputHandle.d.ts +41 -11
  39. package/src/engine/input/devices/xr/XRInputHandle.d.ts.map +1 -1
  40. package/src/engine/input/devices/xr/XRInputHandle.js +129 -32
  41. package/src/engine/input/devices/xr/XRInputPose.d.ts +41 -5
  42. package/src/engine/input/devices/xr/XRInputPose.d.ts.map +1 -1
  43. package/src/engine/input/devices/xr/XRInputPose.js +57 -16
  44. package/src/engine/input/devices/xr/XRInputTypes.d.ts +18 -18
  45. package/src/engine/input/devices/xr/XRInputTypes.js +3 -3
  46. package/src/engine/input/devices/xr/XRTargetRayMode.d.ts +17 -0
  47. package/src/engine/input/devices/xr/XRTargetRayMode.d.ts.map +1 -0
  48. package/src/engine/input/devices/xr/XRTargetRayMode.js +12 -0
  49. package/src/engine/input/devices/xr/XRVisibilityState.d.ts +15 -0
  50. package/src/engine/input/devices/xr/XRVisibilityState.d.ts.map +1 -0
  51. package/src/engine/input/devices/xr/XRVisibilityState.js +10 -0
  52. package/src/engine/input/ecs/ism/coordinate/InputCoordinateDevice.d.ts +3 -1
  53. package/src/engine/input/ecs/ism/coordinate/InputCoordinateDevice.d.ts.map +1 -1
  54. package/src/engine/input/ecs/ism/coordinate/InputCoordinateDevice.js +5 -1
  55. package/src/engine/input/ecs/ism/device/XRInputDeviceAdapter.d.ts +19 -5
  56. package/src/engine/input/ecs/ism/device/XRInputDeviceAdapter.d.ts.map +1 -1
  57. package/src/engine/input/ecs/ism/device/XRInputDeviceAdapter.js +42 -9
  58. package/src/engine/input/ecs/ism/device/XR_INPUT_DEVICE_IDS.d.ts +8 -2
  59. package/src/engine/input/ecs/ism/device/XR_INPUT_DEVICE_IDS.d.ts.map +1 -1
  60. package/src/engine/input/ecs/ism/device/XR_INPUT_DEVICE_IDS.js +19 -9
  61. package/src/engine/input/ecs/ism/trigger/InputTriggerXRButton.d.ts +10 -2
  62. package/src/engine/input/ecs/ism/trigger/InputTriggerXRButton.d.ts.map +1 -1
  63. package/src/engine/input/ecs/ism/trigger/InputTriggerXRButton.js +12 -2
  64. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +13 -14
  65. package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
  66. package/src/engine/physics/cloth/collider/ClothColliderIndex.js +137 -36
  67. package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts +30 -0
  68. package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts.map +1 -1
  69. package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +33 -0
  70. package/src/engine/physics/cloth/ecs/ClothColliderFlags.js +2 -1
  71. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +10 -1
  72. package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
  73. package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +36 -14
  74. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +15 -2
  75. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  76. package/src/engine/physics/cloth/ecs/ClothInstance.js +17 -2
  77. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  78. package/src/engine/physics/cloth/ecs/ClothWorld.js +19 -6
  79. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +18 -20
  80. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
  81. package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +139 -89
  82. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  83. package/src/engine/physics/ecs/PhysicsSystem.js +32 -16
  84. package/src/shade/playground/water_refraction/README.md +149 -0
  85. package/src/shade/playground/water_refraction/index.html +42 -0
  86. package/src/shade/playground/water_refraction/main.d.ts +2 -0
  87. package/src/shade/playground/water_refraction/main.d.ts.map +1 -0
  88. package/src/shade/playground/water_refraction/main.js +201 -0
  89. package/src/shade/playground/water_refraction/world.d.ts +37 -0
  90. package/src/shade/playground/water_refraction/world.d.ts.map +1 -0
  91. package/src/shade/playground/water_refraction/world.js +137 -0
  92. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  93. package/src/shade/renderer/Renderer.js +4 -0
  94. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts +2 -3
  95. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
  96. package/src/shade/renderer/animation/chunk_pose_accumulator.js +14 -24
  97. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  98. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +16 -15
  99. package/src/shade/renderer/deferred/indirect/chunk_lpv_sample_light.js +1 -1
  100. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1123 -1122
  101. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +202 -201
  102. package/src/shade/renderer/light/environment/chunk_roughness_to_mip_ratio.d.ts +8 -0
  103. package/src/shade/renderer/light/environment/chunk_roughness_to_mip_ratio.d.ts.map +1 -0
  104. package/src/shade/renderer/light/environment/chunk_roughness_to_mip_ratio.js +24 -0
  105. package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.d.ts +0 -6
  106. package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.d.ts.map +1 -1
  107. package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.js +2 -25
  108. package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts +2 -2
  109. package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts.map +1 -1
  110. package/src/shade/renderer/light/environment/shader_project_environment_sh.js +50 -19
  111. package/src/shade/renderer/particles/DESIGN.md +1 -1
  112. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts +1 -1
  113. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts.map +1 -1
  114. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +10 -9
  115. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +17 -0
  116. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  117. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +7 -0
  118. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.d.ts +4 -0
  119. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.d.ts.map +1 -0
  120. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.js +11 -0
  121. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.d.ts +4 -0
  122. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.d.ts.map +1 -0
  123. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.js +19 -0
  124. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts.map +1 -1
  125. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +5 -3
  126. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.d.ts +4 -0
  127. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.d.ts.map +1 -0
  128. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.js +8 -0
  129. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +1 -1
  130. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  131. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +21 -2
  132. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -1
  133. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +4 -8
  134. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  135. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +10 -8
  136. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_add_f32_storage.d.ts +12 -0
  137. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_add_f32_storage.d.ts.map +1 -0
  138. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_add_f32_storage.js +25 -0
  139. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.d.ts +12 -0
  140. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.d.ts.map +1 -0
  141. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.js +28 -0
  142. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.d.ts +12 -0
  143. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.d.ts.map +1 -0
  144. package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.js +28 -0
  145. package/src/shade/renderer/shader/chunk/geometry/plane/{plane_ray_raycast.d.ts → chunk_plane_ray_raycast.d.ts} +2 -2
  146. package/src/shade/renderer/shader/chunk/geometry/plane/chunk_plane_ray_raycast.d.ts.map +1 -0
  147. package/src/shade/renderer/shader/chunk/geometry/plane/{plane_ray_raycast.js → chunk_plane_ray_raycast.js} +1 -1
  148. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts +4 -0
  149. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts.map +1 -0
  150. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js +101 -0
  151. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +3 -3
  152. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +62 -29
  153. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  154. package/src/shade/renderer/water/GPUWaterRenderer.js +235 -147
  155. package/src/shade/renderer/water/chunk_water_transport.d.ts +5 -0
  156. package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -0
  157. package/src/shade/renderer/water/chunk_water_transport.js +94 -0
  158. package/src/shade/renderer/water/shader_water.d.ts +9 -26
  159. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  160. package/src/shade/renderer/water/shader_water.js +384 -246
  161. package/src/shade/renderer/water/shader_water_avboit.d.ts +12 -0
  162. package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -0
  163. package/src/shade/renderer/water/shader_water_avboit.js +258 -0
  164. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  165. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +13 -0
  166. package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.d.ts +0 -29
  167. package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.d.ts.map +0 -1
  168. package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.js +0 -59
  169. package/src/shade/renderer/shader/chunk/geometry/plane/plane_ray_raycast.d.ts.map +0 -1
@@ -2,6 +2,6 @@
2
2
  * Ported from meep
3
3
  * @type {CodeChunk}
4
4
  */
5
- export const plane_ray_raycast: CodeChunk;
5
+ export const chunk_plane_ray_raycast: CodeChunk;
6
6
  import { CodeChunk } from "../../../compiler/CodeChunk.js";
7
- //# sourceMappingURL=plane_ray_raycast.d.ts.map
7
+ //# sourceMappingURL=chunk_plane_ray_raycast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_plane_ray_raycast.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/geometry/plane/chunk_plane_ray_raycast.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH,sCAFU,SAAS,CA2Cf;0BA/CsB,gCAAgC"}
@@ -4,7 +4,7 @@ import { CodeChunk } from "../../../compiler/CodeChunk.js";
4
4
  * Ported from meep
5
5
  * @type {CodeChunk}
6
6
  */
7
- export const plane_ray_raycast = CodeChunk.from(
7
+ export const chunk_plane_ray_raycast = CodeChunk.from(
8
8
  //language=WGSL
9
9
  `
10
10
  fn plane_ray_raycast(
@@ -0,0 +1,4 @@
1
+ /** Mayer et al. 2026 tangent-plane refinement. All arithmetic is in matrix view space. */
2
+ export const chunk_screen_space_newton_ray: CodeChunk;
3
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
4
+ //# sourceMappingURL=chunk_screen_space_newton_ray.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_screen_space_newton_ray.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js"],"names":[],"mappings":"AAWA,0FAA0F;AAC1F,sDAwFkF;0BApGxD,6BAA6B"}
@@ -0,0 +1,101 @@
1
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
2
+ import { chunk_is_background } from "../depth/chunk_is_background.js";
3
+ import { chunk_decode_g_buffer_normal } from "../geometry/normal/chunk_decode_g_buffer_normal.js";
4
+ import { chunk_plane_from_normal_and_point } from "../geometry/plane/chunk_plane_from_normal_and_point.js";
5
+ import { chunk_plane_ray_raycast } from "../geometry/plane/chunk_plane_ray_raycast.js";
6
+ import { RAY_STRUCT } from "../geometry/ray/RAY_STRUCT.js";
7
+ import { chunk_ray_at } from "../geometry/ray/chunk_ray_at.js";
8
+ import { chunk_ray_nearest_point } from "../geometry/ray/chunk_ray_nearest_point.js";
9
+ import { chunk_inv_project_position } from "./chunk_inv_project_position.js";
10
+ import { chunk_project_position } from "./chunk_project_position.js";
11
+
12
+ /** Mayer et al. 2026 tangent-plane refinement. All arithmetic is in matrix view space. */
13
+ export const chunk_screen_space_newton_ray = CodeChunk.from(/* language=WGSL */ `
14
+ struct ScreenSpaceRayHit {
15
+ uv: vec2<f32>,
16
+ distance: f32,
17
+ residual: f32,
18
+ iterations: u32,
19
+ // 0 hit, 1 bounds/clip, 2 sky, 3 parallel/invalid, 4 interval, 5 exhausted/residual
20
+ status: u32,
21
+ }
22
+
23
+ fn screen_space_ray_in_bounds(uv: vec2<f32>) -> bool {
24
+ return all(uv >= vec2<f32>(0.0)) && all(uv < vec2<f32>(1.0));
25
+ }
26
+
27
+ fn screen_space_ray_projectable(p: vec3<f32>, projection: mat4x4<f32>) -> bool {
28
+ let clip = projection * vec4<f32>(p, 1.0);
29
+ return clip.w > 1e-6 && all(abs(clip) < vec4<f32>(1e30));
30
+ }
31
+
32
+ // Reconstruct the receiver at the subpixel lookup on its local tangent plane.
33
+ // A texel-center position is a different surface point: projecting its nearest
34
+ // point on the ray can exceed one pixel at grazing angles even for an exact hit.
35
+ fn screen_space_ray_validate(
36
+ ray: Ray, uv: vec2<f32>, depth: texture_2d<f32>, normals: texture_2d<u32>,
37
+ projection: mat4x4<f32>, inverse_projection: mat4x4<f32>, world_to_view: mat4x4<f32>,
38
+ distance_tolerance: f32,
39
+ ) -> ScreenSpaceRayHit {
40
+ var hit = ScreenSpaceRayHit(uv, 0.0, 1e20, 0u, 1u);
41
+ if (!screen_space_ray_in_bounds(uv)) { return hit; }
42
+ let size = textureDimensions(depth, 0);
43
+ let coord = vec2<i32>(uv * vec2<f32>(size));
44
+ let d = textureLoad(depth, coord, 0).r;
45
+ if (is_background(d)) { hit.status = 2u; return hit; }
46
+ let center = (vec2<f32>(coord) + 0.5) / vec2<f32>(size);
47
+ let center_position = inv_project_position(vec3<f32>(center, d), inverse_projection);
48
+ let normal = (world_to_view * vec4f(decode_g_buffer_normal(textureLoad(normals, coord, 0).zw), 0.0)).xyz;
49
+ let lookup_ray = inv_project_position(vec3f(uv, d), inverse_projection);
50
+ let denominator = dot(normal, lookup_ray);
51
+ if (!(abs(denominator) > 1e-6)) { hit.status = 3u; return hit; }
52
+ let scale = dot(normal, center_position) / denominator;
53
+ if (!(scale > 0.0)) { hit.status = 3u; return hit; }
54
+ let p = lookup_ray * scale;
55
+ let travel = dot(p - ray.origin, ray.direction);
56
+ hit.distance = travel;
57
+ if (!(travel > 1e-4 && travel <= ray.tmax)) { hit.status = 4u; return hit; }
58
+ let nearest = ray_nearest_point(ray, p);
59
+ if (!screen_space_ray_projectable(nearest, projection)) { return hit; }
60
+ let pixel_error = length((project_position(nearest, projection).xy - uv) * vec2<f32>(size));
61
+ hit.residual = distance(p, nearest);
62
+ hit.status = 5u;
63
+ if (pixel_error <= 1.0 && hit.residual <= distance_tolerance) { hit.status = 0u; }
64
+ return hit;
65
+ }
66
+
67
+ fn screen_space_newton_ray(
68
+ ray: Ray, seed_uv: vec2<f32>, depth: texture_2d<f32>, normals: texture_2d<u32>,
69
+ projection: mat4x4<f32>, inverse_projection: mat4x4<f32>, world_to_view: mat4x4<f32>,
70
+ max_updates: u32, distance_tolerance: f32,
71
+ ) -> ScreenSpaceRayHit {
72
+ var uv = seed_uv;
73
+ var hit = ScreenSpaceRayHit(uv, 0.0, 1e20, 0u, 5u);
74
+ let size = textureDimensions(depth, 0);
75
+ for (var i = 0u; i < min(max_updates, 16u); i++) {
76
+ hit.iterations = i + 1u;
77
+ if (!screen_space_ray_in_bounds(uv)) { hit.status = 1u; return hit; }
78
+ let coord = vec2<i32>(uv * vec2<f32>(size));
79
+ let d = textureLoad(depth, coord, 0).r;
80
+ if (is_background(d)) { hit.status = 2u; return hit; }
81
+ let center = (vec2<f32>(coord) + 0.5) / vec2<f32>(size);
82
+ let receiver = inv_project_position(vec3<f32>(center, d), inverse_projection);
83
+ // .zw is the geometric face normal; .xy includes material normal mapping.
84
+ let world_normal = decode_g_buffer_normal(textureLoad(normals, coord, 0).zw);
85
+ let normal = (world_to_view * vec4<f32>(world_normal, 0.0)).xyz;
86
+ if (!(abs(dot(ray.direction, normal)) > 1e-4)) { hit.status = 3u; return hit; }
87
+ let plane = plane_from_normal_and_point(normal, receiver);
88
+ let travel = plane_ray_raycast(ray.origin, ray.direction, plane);
89
+ if (!(travel > 1e-4 && travel <= ray.tmax)) { hit.status = 4u; return hit; }
90
+ let next = ray_at(ray.origin, ray.direction, travel);
91
+ if (!screen_space_ray_projectable(next, projection)) { hit.status = 1u; return hit; }
92
+ uv = project_position(next, projection).xy;
93
+ hit = screen_space_ray_validate(ray, uv, depth, normals, projection, inverse_projection, world_to_view, distance_tolerance);
94
+ hit.iterations = i + 1u;
95
+ if (hit.status == 0u || hit.status == 1u || hit.status == 2u) { return hit; }
96
+ }
97
+ return hit;
98
+ }
99
+ `, [RAY_STRUCT.declaration_chunk, chunk_is_background, chunk_decode_g_buffer_normal,
100
+ chunk_plane_from_normal_and_point, chunk_plane_ray_raycast, chunk_ray_at,
101
+ chunk_ray_nearest_point, chunk_inv_project_position, chunk_project_position]);
@@ -6,7 +6,7 @@ import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
6
6
  import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
7
7
  import { ComputeShader } from "../../../../shader/ComputeShader.js";
8
8
  import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
9
- import { chunk_aabb_atomic_f32 } from "../../../../animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.js";
9
+ import { chunk_atomic_min_f32_storage } from "../../../../shader/chunk/atomic/chunk_atomic_min_f32_storage.js";
10
10
  import { LIGHT_DATABASE_SPEC } from "../../../../light/LIGHT_DATABASE_SPEC.js";
11
11
  import { MESHES_TABLE } from "../../../../scene/chunk_scene_database_access.js";
12
12
  import { CSM_CASTER_RANGE_UNKNOWN } from "../CSM_CASTER_RANGE_STRUCT.js";
@@ -124,13 +124,13 @@ fn main(
124
124
 
125
125
  // one atomic per subgroup rather than one per row, and none where no row was inside
126
126
  if lane_id == 0u && near < RANGE_UNKNOWN {
127
- aabb_atomic_min_f32(&ranges[settings.base + c], near);
127
+ atomic_min_f32_storage(&ranges[settings.base + c], near);
128
128
  }
129
129
  }
130
130
  }
131
131
  `, [
132
132
  MESHES_TABLE.chunk_iterate(WG),
133
- chunk_aabb_atomic_f32,
133
+ chunk_atomic_min_f32_storage,
134
134
  ]);
135
135
 
136
136
  accumulate_body.addExtension(WebGPUExtensionType.Subgroups);
@@ -1,33 +1,66 @@
1
- /**
2
- * Draws water surfaces over a lit frame.
3
- *
4
- * **Water is a transparent pass on top of opaque**, which is why it lives here rather than in the
5
- * material system: it is not shaded, it does not write the G-buffer, and it needs the finished
6
- * depth of everything behind it in order to know how much water the view is looking through.
7
- *
8
- * The pass reads scene depth and writes the frame's colour, so it belongs at
9
- * {@link FramePhase.AfterLighting} — opaque surfaces lit and composited, transparency not yet run.
10
- */
1
+ /** Production water channel. Only AVBOIT's shared resolve composites its radiance. */
11
2
  export class GPUWaterRenderer {
12
- /**
13
- * Record the water draws into `graph`, over the colour it is given.
14
- *
15
- * @param {object} args
16
- * @param {FrameGraph} args.graph
17
- * @param {WaterSurface[]} args.surfaces
18
- * @param {number} args.color colour resource handle to draw over
19
- * @param {number} args.depth scene depth — **sampled**, which is why it is not also an
20
- * attachment, and why the shader does its own depth test
21
- * @param {GPUBuffer} args.camera
22
- * @returns {number} the colour handle after the draws
23
- */
24
- graph_draw({ graph, surfaces, color, depth, camera }: {
25
- graph: FrameGraph;
26
- surfaces: WaterSurface[];
27
- color: number;
28
- depth: number;
29
- camera: GPUBuffer;
30
- }): number;
3
+ surfaces: any[];
4
+ settings: {
5
+ enabled: boolean;
6
+ max_distance: number;
7
+ distance_tolerance: number;
8
+ max_updates: number;
9
+ fallback_steps: number;
10
+ mode: number;
11
+ reflections: number;
12
+ debug_view: number;
13
+ };
14
+ avboit_is_empty(): boolean;
15
+ /** Optional single-pixel readback on the next rendered water frame. No per-frame readback. */
16
+ request_probe(uv: any): Promise<any>;
17
+ dispose(): void;
18
+ avboit_prepare({ graph, view_ctx, camera, color_texture, depth_texture, normal_texture, hzb_texture, environment_texture }: {
19
+ graph: any;
20
+ view_ctx: any;
21
+ camera: any;
22
+ color_texture: any;
23
+ depth_texture: any;
24
+ normal_texture: any;
25
+ hzb_texture: any;
26
+ environment_texture: any;
27
+ }): {
28
+ background_color: any;
29
+ };
30
+ avboit_occupancy({ graph, camera, cluster_parameters, occupancy }: {
31
+ graph: any;
32
+ camera: any;
33
+ cluster_parameters: any;
34
+ occupancy: any;
35
+ }): any;
36
+ avboit_splat({ graph, camera, warp, voxel_resolution, volume }: {
37
+ graph: any;
38
+ camera: any;
39
+ warp: any;
40
+ voxel_resolution: any;
41
+ volume: any;
42
+ }): {
43
+ extinction: any;
44
+ overflow: any;
45
+ dummy: any;
46
+ };
47
+ avboit_draw({ graph, view_ctx, camera, warp, integral, volumetrics_lut, volumetrics_metadata, accumulators }: {
48
+ graph: any;
49
+ view_ctx: any;
50
+ camera: any;
51
+ warp: any;
52
+ integral: any;
53
+ volumetrics_lut: any;
54
+ volumetrics_metadata: any;
55
+ accumulators: any;
56
+ }): {
57
+ color: any;
58
+ norm: any;
59
+ extinction: any;
60
+ emission: any;
61
+ };
62
+ /** Debug presentation only: called after shared resolve, never sampled by production optics. */
63
+ inspect(graph: any, view_ctx: any, output_resolution: any): number;
31
64
  #private;
32
65
  }
33
66
  //# sourceMappingURL=GPUWaterRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GPUWaterRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/GPUWaterRenderer.js"],"names":[],"mappings":"AAaA;;;;;;;;;GASG;AACH;IAwBI;;;;;;;;;;;OAWG;IACH;QAR4B,KAAK;QACD,QAAQ,EAA7B,cAAc;QACD,KAAK,EAAlB,MAAM;QACO,KAAK,EAAlB,MAAM;QAEU,MAAM;QACpB,MAAM,CAgBlB;;CA6FJ"}
1
+ {"version":3,"file":"GPUWaterRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/GPUWaterRenderer.js"],"names":[],"mappings":"AAaA,sFAAsF;AACtF;IACI,gBAAc;IACd;;;;;;;;;MACiF;IAOjF,2BAEC;IAED,8FAA8F;IAC9F,qCAgBC;IAED,gBAKC;IAED;;;;;;;;;;;MA4GC;IAQD;;;;;YAMC;IAED;;;;;;;;;;MAOC;IAED;;;;;;;;;;;;;;MAwBC;IAED,gGAAgG;IAChG,mEAYC;;CA4BJ"}