@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
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "description": "Advanced 3D game engine",
7
7
  "type": "module",
8
8
  "author": "Alexander Goldring",
9
- "version": "3.36.0",
9
+ "version": "3.38.0",
10
10
  "exports": {
11
11
  "./build/*": "./build/*",
12
12
  "./src/*": "./src/*",
@@ -1 +1 @@
1
- {"version":3,"file":"populateEngineSerializationRegistry.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/storage/populateEngineSerializationRegistry.js"],"names":[],"mappings":"AA+KA;;;;;;;;GAQG;AACH,iGAyGC"}
1
+ {"version":3,"file":"populateEngineSerializationRegistry.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/storage/populateEngineSerializationRegistry.js"],"names":[],"mappings":"AAgLA;;;;;;;;GAQG;AACH,iGA0GC"}
@@ -87,6 +87,7 @@ import {
87
87
  import Water from "../../graphics/ecs/water/Water.js";
88
88
  import { WaterSerializationAdapter } from "../../graphics/ecs/water/WaterSerializationAdapter.js";
89
89
  import { WaterSerializationUpgrader_0_1 } from "../../graphics/ecs/water/WaterSerializationUpgrader_0_1.js";
90
+ import { WaterSerializationUpgrader_1_2 } from "../../graphics/ecs/water/WaterSerializationUpgrader_1_2.js";
90
91
  import { GridPosition2Transform } from "../../grid/grid2transform/GridPosition2Transform.js";
91
92
  import {
92
93
  GridPosition2TransformSerializationAdapter
@@ -280,6 +281,7 @@ export function populateEngineSerializationRegistry(registry) {
280
281
  registry.registerUpgrader(Terrain.typeName, new TerrainSerializationUpgrader_1_2());
281
282
  registry.registerUpgrader(Highlight.typeName, new HighlightSerializationUpgrader_0_1());
282
283
  registry.registerUpgrader(Water.typeName, new WaterSerializationUpgrader_0_1());
284
+ registry.registerUpgrader(Water.typeName, new WaterSerializationUpgrader_1_2());
283
285
 
284
286
  registry.registerUpgrader(SoundEmitter.typeName, new SoundEmitterSerializationUpgrader_0_1());
285
287
  registry.registerUpgrader(SoundEmitter.typeName, new SoundEmitterSerializationUpgrader_1_2());
@@ -0,0 +1,11 @@
1
+ /**
2
+ * An explicit placement/teleport, after the new world pose has been published
3
+ * with TRANSFORM64_EVENT_CHANGE. Motion consumers must reset their previous
4
+ * pose instead of sweeping from the old location. TransformAttachmentSystem
5
+ * forwards this event down the spatial hierarchy, including GPU-owned links.
6
+ *
7
+ * No payload; listeners read the transform on the entity they subscribed to.
8
+ * @type {string}
9
+ */
10
+ export const TRANSFORM64_EVENT_PLACED: string;
11
+ //# sourceMappingURL=TRANSFORM64_EVENT_PLACED.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TRANSFORM64_EVENT_PLACED.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.js"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,uCAFU,MAAM,CAE8C"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * An explicit placement/teleport, after the new world pose has been published
3
+ * with TRANSFORM64_EVENT_CHANGE. Motion consumers must reset their previous
4
+ * pose instead of sweeping from the old location. TransformAttachmentSystem
5
+ * forwards this event down the spatial hierarchy, including GPU-owned links.
6
+ *
7
+ * No payload; listeners read the transform on the entity they subscribed to.
8
+ * @type {string}
9
+ */
10
+ export const TRANSFORM64_EVENT_PLACED = "@transform64/placed";
@@ -1 +1 @@
1
- {"version":3,"file":"TransformAttachmentSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform-attachment/TransformAttachmentSystem.js"],"names":[],"mappings":"AAiMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH;;IAEI;;;;OAIG;IACH,mBAAgB;IAEhB;;;;;OAKG;IACH,mBAAoC;IAEpC;;;;OAIG;IACH,gBAAa;IACb,qBAAiB;IACjB,uBAAmB;IAEnB,kEAAkD;IAClD,+HAGE;IAEF;;;;OAIG;IACH,wBAsBC;IAED;;;;OAIG;IACH,kBAEC;IAED;;;;;OAKG;IACH,yBAYC;IAED;;;;;;;;OAQG;IACH,uBALW,MAAM,EAAE,iBACR,MAAM,UACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;OAMG;IACH,wBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;OAKG;IACH,iBAJW,mBAAmB,aACnB,WAAW,UACX,MAAM,QAsBhB;IAED;;;;;OAKG;IACH,mBAJW,mBAAmB,aACnB,WAAW,UACX,MAAM,QAkBhB;IAED,6BAoBC;CACJ;uBAvZsB,cAAc;4BAET,6BAA6B;oCAEK,0BAA0B;4CAX5C,oDAAoD"}
1
+ {"version":3,"file":"TransformAttachmentSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform-attachment/TransformAttachmentSystem.js"],"names":[],"mappings":"AAiNA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH;;IAEI;;;;OAIG;IACH,mBAAgB;IAEhB;;;;;OAKG;IACH,mBAAoC;IAEpC;;;;OAIG;IACH,gBAAa;IACb,qBAAiB;IACjB,uBAAmB;IAEnB,kEAAkD;IAClD,+HAGE;IAEF;;;;OAIG;IACH,wBAsBC;IAED;;;;OAIG;IACH,kBAEC;IAED;;;;;OAKG;IACH,yBAYC;IAED;;;;;;;;OAQG;IACH,uBALW,MAAM,EAAE,iBACR,MAAM,UACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;OAMG;IACH,wBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;OAKG;IACH,iBAJW,mBAAmB,aACnB,WAAW,UACX,MAAM,QAsBhB;IAED;;;;;OAKG;IACH,mBAJW,mBAAmB,aACnB,WAAW,UACX,MAAM,QAkBhB;IAED,6BAoBC;CACJ;uBAvasB,cAAc;4BAGT,6BAA6B;oCAEK,0BAA0B;4CAZ5C,oDAAoD"}
@@ -9,6 +9,7 @@ import { gpu_authority_has } from "../gpu/gpu_authority_has.js";
9
9
  import { EntityChildIndex } from "../hierarchy/EntityChildIndex.js";
10
10
  import { System } from "../System.js";
11
11
  import { TRANSFORM64_EVENT_CHANGE } from "../transform/TRANSFORM64_EVENT_CHANGE.js";
12
+ import { TRANSFORM64_EVENT_PLACED } from "../transform/TRANSFORM64_EVENT_PLACED.js";
12
13
  import { Transform64 } from "../transform/Transform64.js";
13
14
  import { TRANSFORM_ATTACHMENT_EVENT_CHANGE } from "./TRANSFORM_ATTACHMENT_EVENT_CHANGE.js";
14
15
  import { TransformAttachment, TransformAttachmentFlags } from "./TransformAttachment.js";
@@ -128,7 +129,18 @@ class UpdateContext {
128
129
  this.ecd.removeComponentFromEntity(this.entity, TransformAttachment);
129
130
  }
130
131
 
132
+ handle_parent_placement() {
133
+ if (this.#linked) {
134
+ // The preceding change announcement already composed CPU worlds.
135
+ // Forward intent even through links whose worlds belong to the GPU.
136
+ this.ecd.sendEvent(this.entity, TRANSFORM64_EVENT_PLACED);
137
+ }
138
+ }
139
+
131
140
  link() {
141
+ this.ecd.addEntityEventListener(
142
+ this.attachment.parent, TRANSFORM64_EVENT_PLACED, this.handle_parent_placement, this
143
+ );
132
144
  // Neither transform carries signals any more, so both announcements come through the
133
145
  // dataset, on the channel belonging to the thing that moved. The parent's pose arrives as
134
146
  // TRANSFORM64_EVENT_CHANGE on the parent - whether it is a root somebody moved or a link
@@ -168,6 +180,10 @@ class UpdateContext {
168
180
 
169
181
  this.#linked = false;
170
182
 
183
+ this.ecd.removeEntityEventListener(
184
+ this.attachment.parent, TRANSFORM64_EVENT_PLACED, this.handle_parent_placement, this
185
+ );
186
+
171
187
  this.ecd.removeEntityEventListener(
172
188
  this.attachment.parent,
173
189
  TRANSFORM64_EVENT_CHANGE,
@@ -43,6 +43,12 @@ declare class Water {
43
43
  * @type {Vector1}
44
44
  */
45
45
  scattering: Vector1;
46
+ /** Air-to-water optical properties; scattering scales the authored RGB extinction. */
47
+ ior: Vector1;
48
+ opticalNormalStrength: Vector1;
49
+ opticalNormalScale: Vector1;
50
+ extinction: Vector3;
51
+ reflectionRoughness: Vector1;
46
52
  bvh: BvhClient;
47
53
  updateBounds(): void;
48
54
  fromJSON(json: any): void;
@@ -54,6 +60,29 @@ declare class Water {
54
60
  b: number;
55
61
  a: number;
56
62
  };
63
+ shoreColor: {
64
+ r: number;
65
+ g: number;
66
+ b: number;
67
+ a: number;
68
+ };
69
+ shoreDepthTransition: {
70
+ min: number;
71
+ max: number;
72
+ };
73
+ waveSpeed: number;
74
+ waveAmplitude: number;
75
+ waveFrequency: number;
76
+ scattering: number;
77
+ ior: number;
78
+ opticalNormalStrength: number;
79
+ opticalNormalScale: number;
80
+ extinction: {
81
+ x: number;
82
+ y: number;
83
+ z: number;
84
+ };
85
+ reflectionRoughness: number;
57
86
  };
58
87
  }
59
88
  declare namespace Water {
@@ -62,5 +91,6 @@ declare namespace Water {
62
91
  import Vector1 from "../../../../core/geom/Vector1.js";
63
92
  import { Color } from "../../../../core/color/Color.js";
64
93
  import { NumericInterval } from "../../../../core/math/interval/NumericInterval.js";
94
+ import Vector3 from "../../../../core/geom/Vector3.js";
65
95
  import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
66
96
  //# sourceMappingURL=Water.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Water.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/water/Water.js"],"names":[],"mappings":";AAMA;;;;;GAKG;AACH;IAgDI,0BAMC;IArDD,eAAuB;IACvB;;;OAGG;IACH,OAFU,KAAK,CAEgB;IAG/B;;;OAGG;IACH,sBAFU,eAAe,CAE0B;IAGnD;;;OAGG;IACH,YAFU,KAAK,CAE6B;IAE5C;;;OAGG;IACH,WAFU,OAAO,CAEY;IAE7B;;;OAGG;IACH,eAFU,OAAO,CAEgB;IAEjC;;;OAGG;IACH,eAFU,OAAO,CAEc;IAE/B;;;OAGG;IACH,YAFU,OAAO,CAEa;IAE9B,eAAsB;IAUtB,qBAcC;IAED,0BAOC;IAED;;;;;;;;MAKC;CACJ;;;;oBAjGmB,kCAAkC;sBADhC,iCAAiC;gCAEvB,mDAAmD;0BAHzD,yCAAyC"}
1
+ {"version":3,"file":"Water.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/water/Water.js"],"names":[],"mappings":";AAOA;;;;;GAKG;AACH;IAuDI,0BAMC;IA5DD,eAAuB;IACvB;;;OAGG;IACH,OAFU,KAAK,CAEgB;IAG/B;;;OAGG;IACH,sBAFU,eAAe,CAE0B;IAGnD;;;OAGG;IACH,YAFU,KAAK,CAE6B;IAE5C;;;OAGG;IACH,WAFU,OAAO,CAEY;IAE7B;;;OAGG;IACH,eAFU,OAAO,CAEgB;IAEjC;;;OAGG;IACH,eAFU,OAAO,CAEc;IAE/B;;;OAGG;IACH,YAFU,OAAO,CAEa;IAE9B,sFAAsF;IACtF,aAAwB;IACxB,+BAA0C;IAC1C,4BAAoC;IACpC,oBAA4C;IAC5C,6BAAwC;IAExC,eAAsB;IAUtB,qBAcC;IAED,0BAcC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAWC;CACJ;;;;oBAtHmB,kCAAkC;sBADhC,iCAAiC;gCAGvB,mDAAmD;oBAD/D,kCAAkC;0BAH5B,yCAAyC"}
@@ -1,104 +1,125 @@
1
- import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
2
- import { Color } from "../../../../core/color/Color.js";
3
- import Vector1 from "../../../../core/geom/Vector1.js";
4
- import { NumericInterval } from "../../../../core/math/interval/NumericInterval.js";
5
- import { WATER_SIZE } from "./WATER_SIZE.js";
6
-
7
- /**
8
- * A body of water flooding the level, as authored data and nothing else.
9
- *
10
- * The component holds no renderer state: `WaterSystem` reads these values every frame onto the
11
- * surface its pass draws, which is why an edit needs no notification to be picked up.
12
- */
13
- class Water {
14
- level = new Vector1(0);
15
- /**
16
- *
17
- * @type {Color}
18
- */
19
- color = new Color(0, 0.3, 0.5);
20
-
21
-
22
- /**
23
- * Defines what is considered as shore as well as how long is the transition between shore and deep water
24
- * @type {NumericInterval}
25
- */
26
- shoreDepthTransition = new NumericInterval(0.7, 2);
27
-
28
-
29
- /**
30
- * Color of the water at the shore
31
- * @type {Color}
32
- */
33
- shoreColor = new Color(0.584, 0.792, 0.850);
34
-
35
- /**
36
- *
37
- * @type {Vector1}
38
- */
39
- waveSpeed = new Vector1(1.8);
40
-
41
- /**
42
- *
43
- * @type {Vector1}
44
- */
45
- waveAmplitude = new Vector1(0.3);
46
-
47
- /**
48
- *
49
- * @type {Vector1}
50
- */
51
- waveFrequency = new Vector1(1);
52
-
53
- /**
54
- * Scattering of light, the higher this value is - the more opaque water will become
55
- * @type {Vector1}
56
- */
57
- scattering = new Vector1(1.2);
58
-
59
- bvh = new BvhClient();
60
-
61
- constructor(options) {
62
-
63
- if (options !== undefined) {
64
- console.error('Constructor options are deprecated');
65
- this.fromJSON(options);
66
- }
67
- }
68
-
69
- updateBounds() {
70
- const width = WATER_SIZE;
71
- const height = WATER_SIZE;
72
-
73
- const level = this.level.getValue();
74
-
75
- this.bvh.resize(
76
- -width / 4,
77
- level,
78
- -height / 4,
79
- width * (3 / 4),
80
- level,
81
- height * (3 / 4)
82
- );
83
- }
84
-
85
- fromJSON(json) {
86
- if (typeof json.level === 'number') {
87
- this.level.fromJSON(json.level);
88
- }
89
- if (typeof json.color === 'object') {
90
- this.color.fromJSON(json.color);
91
- }
92
- }
93
-
94
- toJSON() {
95
- return {
96
- level: this.level.toJSON(),
97
- color: this.color.toJSON()
98
- };
99
- }
100
- }
101
-
102
- Water.typeName = "Water";
103
-
104
- export default Water;
1
+ import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
2
+ import { Color } from "../../../../core/color/Color.js";
3
+ import Vector1 from "../../../../core/geom/Vector1.js";
4
+ import Vector3 from "../../../../core/geom/Vector3.js";
5
+ import { NumericInterval } from "../../../../core/math/interval/NumericInterval.js";
6
+ import { WATER_SIZE } from "./WATER_SIZE.js";
7
+
8
+ /**
9
+ * A body of water flooding the level, as authored data and nothing else.
10
+ *
11
+ * The component holds no renderer state: `WaterSystem` reads these values every frame onto the
12
+ * surface its pass draws, which is why an edit needs no notification to be picked up.
13
+ */
14
+ class Water {
15
+ level = new Vector1(0);
16
+ /**
17
+ *
18
+ * @type {Color}
19
+ */
20
+ color = new Color(0, 0.3, 0.5);
21
+
22
+
23
+ /**
24
+ * Defines what is considered as shore as well as how long is the transition between shore and deep water
25
+ * @type {NumericInterval}
26
+ */
27
+ shoreDepthTransition = new NumericInterval(0.7, 2);
28
+
29
+
30
+ /**
31
+ * Color of the water at the shore
32
+ * @type {Color}
33
+ */
34
+ shoreColor = new Color(0.584, 0.792, 0.850);
35
+
36
+ /**
37
+ *
38
+ * @type {Vector1}
39
+ */
40
+ waveSpeed = new Vector1(1.8);
41
+
42
+ /**
43
+ *
44
+ * @type {Vector1}
45
+ */
46
+ waveAmplitude = new Vector1(0.3);
47
+
48
+ /**
49
+ *
50
+ * @type {Vector1}
51
+ */
52
+ waveFrequency = new Vector1(1);
53
+
54
+ /**
55
+ * Scattering of light, the higher this value is - the more opaque water will become
56
+ * @type {Vector1}
57
+ */
58
+ scattering = new Vector1(1.2);
59
+
60
+ /** Air-to-water optical properties; scattering scales the authored RGB extinction. */
61
+ ior = new Vector1(1.33);
62
+ opticalNormalStrength = new Vector1(0.08);
63
+ opticalNormalScale = new Vector1(3);
64
+ extinction = new Vector3(0.12, 0.035, 0.02);
65
+ reflectionRoughness = new Vector1(0.08);
66
+
67
+ bvh = new BvhClient();
68
+
69
+ constructor(options) {
70
+
71
+ if (options !== undefined) {
72
+ console.error('Constructor options are deprecated');
73
+ this.fromJSON(options);
74
+ }
75
+ }
76
+
77
+ updateBounds() {
78
+ const width = WATER_SIZE;
79
+ const height = WATER_SIZE;
80
+
81
+ const level = this.level.getValue();
82
+
83
+ this.bvh.resize(
84
+ -width / 4,
85
+ level,
86
+ -height / 4,
87
+ width * (3 / 4),
88
+ level,
89
+ height * (3 / 4)
90
+ );
91
+ }
92
+
93
+ fromJSON(json) {
94
+ if (typeof json.level === 'number') {
95
+ this.level.fromJSON(json.level);
96
+ }
97
+ if (typeof json.color === 'object') {
98
+ this.color.fromJSON(json.color);
99
+ }
100
+ for (const key of ['waveSpeed', 'waveAmplitude', 'waveFrequency', 'scattering', 'ior',
101
+ 'opticalNormalStrength', 'opticalNormalScale', 'reflectionRoughness']) {
102
+ if (typeof json[key] === 'number') { this[key].fromJSON(json[key]); }
103
+ }
104
+ for (const key of ['shoreColor', 'shoreDepthTransition', 'extinction']) {
105
+ if (json[key] !== null && typeof json[key] === 'object') { this[key].fromJSON(json[key]); }
106
+ }
107
+ }
108
+
109
+ toJSON() {
110
+ return {
111
+ level: this.level.toJSON(),
112
+ color: this.color.toJSON(),
113
+ shoreColor: this.shoreColor.toJSON(), shoreDepthTransition: this.shoreDepthTransition.toJSON(),
114
+ waveSpeed: this.waveSpeed.toJSON(), waveAmplitude: this.waveAmplitude.toJSON(),
115
+ waveFrequency: this.waveFrequency.toJSON(), scattering: this.scattering.toJSON(),
116
+ ior: this.ior.toJSON(), opticalNormalStrength: this.opticalNormalStrength.toJSON(),
117
+ opticalNormalScale: this.opticalNormalScale.toJSON(), extinction: this.extinction.toJSON(),
118
+ reflectionRoughness: this.reflectionRoughness.toJSON(),
119
+ };
120
+ }
121
+ }
122
+
123
+ Water.typeName = "Water";
124
+
125
+ export default Water;
@@ -1 +1 @@
1
- {"version":3,"file":"WaterSerializationAdapter.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/water/WaterSerializationAdapter.js"],"names":[],"mappings":"AAGA;;IAEI,oBAAc;IAGd;;;;OAIG;IACH,uCAFW,KAAK,QAmBf;IAED;;;;OAIG;IACH,yCAFW,KAAK,QAyBf;CACJ;gDA7D+C,gEAAgE;kBAC9F,YAAY"}
1
+ {"version":3,"file":"WaterSerializationAdapter.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/water/WaterSerializationAdapter.js"],"names":[],"mappings":"AAGA;;IAEI,oBAAc;IAGd;;;;OAIG;IACH,uCAFW,KAAK,QA0Bf;IAED;;;;OAIG;IACH,yCAFW,KAAK,QA8Bf;CACJ;gDAzE+C,gEAAgE;kBAC9F,YAAY"}
@@ -4,7 +4,7 @@ import Water from "./Water.js";
4
4
  export class WaterSerializationAdapter extends BinaryClassSerializationAdapter {
5
5
 
6
6
  klass = Water;
7
- version = 1;
7
+ version = 2;
8
8
 
9
9
  /**
10
10
  *
@@ -28,6 +28,13 @@ export class WaterSerializationAdapter extends BinaryClassSerializationAdapter {
28
28
  buffer.writeFloat32(value.waveFrequency.getValue());
29
29
 
30
30
  buffer.writeFloat32(value.scattering.getValue());
31
+ buffer.writeFloat32(value.ior.getValue());
32
+ buffer.writeFloat32(value.opticalNormalStrength.getValue());
33
+ buffer.writeFloat32(value.opticalNormalScale.getValue());
34
+ buffer.writeFloat32(value.reflectionRoughness.getValue());
35
+ buffer.writeFloat32(value.extinction.x);
36
+ buffer.writeFloat32(value.extinction.y);
37
+ buffer.writeFloat32(value.extinction.z);
31
38
  }
32
39
 
33
40
  /**
@@ -58,5 +65,10 @@ export class WaterSerializationAdapter extends BinaryClassSerializationAdapter {
58
65
  value.waveAmplitude.set(waveAmplitude);
59
66
  value.waveFrequency.set(waveFrequency);
60
67
  value.scattering.set(scattering);
68
+ value.ior.set(buffer.readFloat32());
69
+ value.opticalNormalStrength.set(buffer.readFloat32());
70
+ value.opticalNormalScale.set(buffer.readFloat32());
71
+ value.reflectionRoughness.set(buffer.readFloat32());
72
+ value.extinction.set(buffer.readFloat32(), buffer.readFloat32(), buffer.readFloat32());
61
73
  }
62
74
  }
@@ -0,0 +1,6 @@
1
+ /** Preserve the version-1 appearance record and append the new component defaults. */
2
+ export class WaterSerializationUpgrader_1_2 extends BinaryClassUpgrader {
3
+ upgrade(source: any, target: any): void;
4
+ }
5
+ import { BinaryClassUpgrader } from "../../../ecs/storage/binary/BinaryClassUpgrader.js";
6
+ //# sourceMappingURL=WaterSerializationUpgrader_1_2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WaterSerializationUpgrader_1_2.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.js"],"names":[],"mappings":"AAGA,sFAAsF;AACtF;IAII,wCAQC;CACJ;oCAjBmC,oDAAoD"}
@@ -0,0 +1,18 @@
1
+ import { BinaryClassUpgrader } from "../../../ecs/storage/binary/BinaryClassUpgrader.js";
2
+ import Water from "./Water.js";
3
+
4
+ /** Preserve the version-1 appearance record and append the new component defaults. */
5
+ export class WaterSerializationUpgrader_1_2 extends BinaryClassUpgrader {
6
+ __startVersion = 1;
7
+ __targetVersion = 2;
8
+
9
+ upgrade(source, target) {
10
+ const old = new Uint8Array(38);
11
+ source.readBytes(old, 0, old.length);
12
+ target.writeBytes(old, 0, old.length);
13
+ const defaults = new Water();
14
+ for (const value of [defaults.ior.getValue(), defaults.opticalNormalStrength.getValue(),
15
+ defaults.opticalNormalScale.getValue(), defaults.reflectionRoughness.getValue(),
16
+ defaults.extinction.x, defaults.extinction.y, defaults.extinction.z]) { target.writeFloat32(value); }
17
+ }
18
+ }
@@ -1,9 +1,8 @@
1
1
  /**
2
2
  * Draws the level's water under Shade.
3
3
  *
4
- * **Water is a transparent pass on top of opaque**, so this system owns an extension rather than putting
5
- * anything in the scene: it registers once at startup against {@link FramePhase.AfterLighting} —
6
- * opaque lit and composited, transparency not yet run — and keeps a list of surfaces the pass draws.
4
+ * Water is a shared AVBOIT side channel. The extension is debug presentation only; normal frames
5
+ * composite water exactly once alongside particles, meshlets and trails in AVBOIT's resolve.
7
6
  *
8
7
  * Registration does not wait for a device. `GraphicsEngine` holds extensions and applies them
9
8
  * to the renderer when one exists and again after a restart (E9, §4.8).
@@ -14,6 +13,23 @@ export class WaterSystem extends System<any> {
14
13
  */
15
14
  constructor(graphics: GraphicsEngine);
16
15
  dependencies: (typeof Water)[];
16
+ get settings(): {
17
+ enabled: boolean;
18
+ max_distance: number;
19
+ distance_tolerance: number;
20
+ max_updates: number;
21
+ fallback_steps: number;
22
+ mode: number; /**
23
+ * @type {GPUWaterRenderer}
24
+ */
25
+ reflections: number;
26
+ debug_view: number;
27
+ };
28
+ /** The registered channel, for diagnostics such as testing registration order. */
29
+ get transparency_channel(): GPUWaterRenderer;
30
+ request_probe(uv: any): Promise<any>;
31
+ set time(seconds: number);
32
+ get time(): number;
17
33
  /**
18
34
  * What the pass draws. Read-only — the surfaces follow the entities, and a harness that wants
19
35
  * one gone takes its component off.
@@ -41,9 +57,8 @@ export class WaterSystem extends System<any> {
41
57
  #private;
42
58
  }
43
59
  /**
44
- * Water is a transparent surface over the lit opaque scene, so it draws at
45
- * {@link FramePhase.AfterLighting} — opaque lit and composited, transparency not yet run, so what
46
- * transparency draws afterwards blends over the water rather than under it.
60
+ * Opt-in water inspection after temporal processing. Kept under the exported name
61
+ * for compatibility; this never records a water color overlay in normal rendering.
47
62
  */
48
63
  export class WaterExtension extends RenderExtension {
49
64
  /**
@@ -55,5 +70,6 @@ export class WaterExtension extends RenderExtension {
55
70
  }
56
71
  import { System } from "../ecs/System.js";
57
72
  import Water from "../graphics/ecs/water/Water.js";
73
+ import { GPUWaterRenderer } from "../../shade/renderer/water/GPUWaterRenderer.js";
58
74
  import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.js";
59
75
  //# sourceMappingURL=WaterSystem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WaterSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/WaterSystem.js"],"names":[],"mappings":"AAYA;;;;;;;;;GASG;AACH;IA+CI;;OAEG;IACH,sCAMC;IAvDD,+BAAuB;IAoCvB;;;;;OAKG;IACH,+BAEC;IAaD,2CAIC;IAED,4CASC;IAED;;OAEG;IACH,kCAeC;IAED;;;OAGG;IACH,YAHW,KAAK,UACL,MAAM,QA6BhB;IAED;;;OAGG;IACH,cAHW,KAAK,UACL,MAAM,QAgBhB;IAED,6BAaC;;CAgFJ;AAED;;;;GAIG;AACH;IAUI;;OAEG;IACH,oBAFW,WAAW,EAMrB;IAED,yBAEC;;CACJ;uBAhSsB,kBAAkB;kBAHvB,gCAAgC;gCAOlB,mDAAmD"}
1
+ {"version":3,"file":"WaterSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/WaterSystem.js"],"names":[],"mappings":"AAWA;;;;;;;;GAQG;AACH;IA6DI;;OAEG;IACH,sCAMC;IArED,+BAAuB;IA6BvB;;;;;;sBAtBA;;WAEG;;;MAoB+C;IAElD,kFAAkF;IAClF,6CAAqD;IAErD,qCAA8D;IAG9D,0BAIC;IALD,mBAAiC;IAcjC;;;;;OAKG;IACH,+BAEC;IAaD,2CAMC;IAED,4CAWC;IAED;;OAEG;IACH,kCAGC;IAED;;;OAGG;IACH,YAHW,KAAK,UACL,MAAM,QA+BhB;IAED;;;OAGG;IACH,cAHW,KAAK,UACL,MAAM,QAgBhB;IAED,6BAgBC;;CA4FJ;AAED;;;GAGG;AACH;IAWI;;OAEG;IACH,oBAFW,WAAW,EAMrB;IAED,yBAEC;;CACJ;uBArTsB,kBAAkB;kBAHvB,gCAAgC;iCAIjB,gDAAgD;gCAGjD,mDAAmD"}