@woosh/meep-engine 3.67.0 → 3.69.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 (498) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +2 -17
  3. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -1
  4. package/editor/ecs/component/editors/ecs/Trail3DEditor.js +3 -18
  5. package/package.json +1 -1
  6. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +33 -65
  7. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
  8. package/src/engine/graphics/ecs/trail3d/Trail3D.js +37 -245
  9. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.d.ts +0 -4
  10. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.js +4 -10
  11. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts +13 -10
  12. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts.map +1 -1
  13. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +28 -37
  14. package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts +10 -0
  15. package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts.map +1 -0
  16. package/src/engine/graphics/ecs/trail3d/trail_knot_count.js +27 -0
  17. package/src/engine/graphics/trail/TrailKnots.d.ts +62 -0
  18. package/src/engine/graphics/trail/TrailKnots.d.ts.map +1 -0
  19. package/src/engine/graphics/trail/TrailKnots.js +137 -0
  20. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.d.ts +1 -1
  21. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.js +1 -1
  22. package/src/engine/graphics3/EntityRowHold.d.ts +48 -0
  23. package/src/engine/graphics3/EntityRowHold.d.ts.map +1 -0
  24. package/src/engine/graphics3/EntityRowHold.js +128 -0
  25. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +6 -2
  26. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  27. package/src/engine/graphics3/GPUParticleEmitterSystem.js +11 -44
  28. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
  29. package/src/engine/graphics3/GraphicsEngine.js +4 -9
  30. package/src/engine/graphics3/Trail3DSystem.d.ts +69 -35
  31. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
  32. package/src/engine/graphics3/Trail3DSystem.js +380 -81
  33. package/src/engine/graphics3/load_cube_environment.js +3 -3
  34. package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts +17 -0
  35. package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts.map +1 -1
  36. package/src/engine/physics/fluid/ecs/FluidObstacle.js +22 -2
  37. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +6 -5
  38. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
  39. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +14 -3
  40. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts +9 -1
  41. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts.map +1 -1
  42. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.js +11 -1
  43. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts +5 -0
  44. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts.map +1 -1
  45. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.js +2 -0
  46. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts +4 -3
  47. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts.map +1 -1
  48. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.js +11 -3
  49. package/src/shade/playground/probe_clipmap/index.html +43 -0
  50. package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
  51. package/src/shade/playground/probe_clipmap/main.js +29 -0
  52. package/src/shade/playground/trails/index.html +50 -0
  53. package/src/shade/playground/trails/main.d.ts +2 -0
  54. package/src/shade/playground/trails/main.d.ts.map +1 -0
  55. package/src/shade/playground/trails/main.js +258 -0
  56. package/src/shade/renderer/Renderer.d.ts +7 -0
  57. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  58. package/src/shade/renderer/Renderer.js +213 -15
  59. package/src/shade/renderer/ShadeIndirectLightingMode.d.ts +1 -0
  60. package/src/shade/renderer/ShadeIndirectLightingMode.js +9 -0
  61. package/src/shade/renderer/animation/animation_curve_write_keys.d.ts +18 -0
  62. package/src/shade/renderer/animation/animation_curve_write_keys.d.ts.map +1 -0
  63. package/src/shade/renderer/animation/animation_curve_write_keys.js +34 -0
  64. package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.d.ts +22 -0
  65. package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.d.ts.map +1 -0
  66. package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.js +160 -0
  67. package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.d.ts +45 -0
  68. package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.d.ts.map +1 -0
  69. package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.js +57 -0
  70. package/src/shade/renderer/atmosphere/GPUSky.d.ts +23 -8
  71. package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
  72. package/src/shade/renderer/atmosphere/GPUSky.js +91 -34
  73. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts +17 -0
  74. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts.map +1 -1
  75. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.js +55 -25
  76. package/src/shade/renderer/atmosphere/SceneAtmosphere.d.ts +164 -0
  77. package/src/shade/renderer/atmosphere/SceneAtmosphere.d.ts.map +1 -0
  78. package/src/shade/renderer/atmosphere/SceneAtmosphere.js +308 -0
  79. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +3 -12
  80. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
  81. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +52 -89
  82. package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.d.ts +14 -0
  83. package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.d.ts.map +1 -0
  84. package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.js +103 -0
  85. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts +10 -4
  86. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts.map +1 -1
  87. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.js +95 -57
  88. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts +10 -14
  89. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts.map +1 -1
  90. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.js +97 -69
  91. package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.d.ts +17 -0
  92. package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.d.ts.map +1 -1
  93. package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.js +117 -48
  94. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts +8 -0
  95. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts.map +1 -1
  96. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js +65 -35
  97. package/src/shade/renderer/atmosphere/compute_mie_absorption.d.ts +2 -1
  98. package/src/shade/renderer/atmosphere/compute_mie_absorption.d.ts.map +1 -1
  99. package/src/shade/renderer/atmosphere/compute_mie_absorption.js +6 -6
  100. package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.d.ts +41 -0
  101. package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.d.ts.map +1 -0
  102. package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.js +123 -0
  103. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
  104. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +21 -64
  105. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts +6 -2
  106. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
  107. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +55 -179
  108. package/src/shade/renderer/atmosphere/shader_sky_view_lut.d.ts +7 -0
  109. package/src/shade/renderer/atmosphere/shader_sky_view_lut.d.ts.map +1 -0
  110. package/src/shade/renderer/atmosphere/shader_sky_view_lut.js +111 -0
  111. package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts +0 -1
  112. package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts.map +1 -1
  113. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +68 -79
  114. package/src/shade/renderer/deferred/shader_background.js +1 -1
  115. package/src/shade/renderer/deferred/shader_background_sky.d.ts +5 -0
  116. package/src/shade/renderer/deferred/shader_background_sky.d.ts.map +1 -0
  117. package/src/shade/renderer/deferred/shader_background_sky.js +130 -0
  118. package/src/shade/renderer/deferred/tonemap/ColorGrade.d.ts.map +1 -1
  119. package/src/shade/renderer/deferred/tonemap/ColorGrade.js +13 -36
  120. package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.d.ts +2 -1
  121. package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.d.ts.map +1 -1
  122. package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.js +6 -2
  123. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +2 -2
  124. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts +2 -13
  125. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts.map +1 -1
  126. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.js +6 -21
  127. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts +17 -6
  128. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts.map +1 -1
  129. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.js +38 -178
  130. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts +7 -9
  131. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
  132. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +17 -106
  133. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts +7 -17
  134. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts.map +1 -1
  135. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +18 -118
  136. package/src/shade/renderer/extension/ViewTextures.d.ts +3 -2
  137. package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
  138. package/src/shade/renderer/extension/ViewTextures.js +3 -2
  139. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  140. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  141. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts +14 -0
  142. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts.map +1 -1
  143. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.js +18 -0
  144. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts +3 -1
  145. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts.map +1 -1
  146. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.js +4 -1
  147. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +15 -6
  148. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts.map +1 -1
  149. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.js +20 -4
  150. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts +11 -2
  151. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts.map +1 -1
  152. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.js +59 -2
  153. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts +4 -1
  154. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts.map +1 -1
  155. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.js +367 -341
  156. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts +6 -2
  157. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
  158. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +339 -282
  159. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  160. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  161. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +1 -1
  162. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +20 -1
  163. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  164. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +29 -0
  165. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.d.ts +47 -0
  166. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.d.ts.map +1 -0
  167. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.js +246 -0
  168. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +4 -15
  169. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -1
  170. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +8 -148
  171. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +4 -9
  172. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
  173. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +9 -58
  174. package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.d.ts +142 -0
  175. package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.d.ts.map +1 -0
  176. package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.js +938 -0
  177. package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.d.ts +192 -0
  178. package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.d.ts.map +1 -0
  179. package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.js +231 -0
  180. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.d.ts +11 -0
  181. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.d.ts.map +1 -0
  182. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.js +25 -0
  183. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.d.ts +110 -0
  184. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.d.ts.map +1 -0
  185. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.js +197 -0
  186. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.d.ts +150 -0
  187. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.d.ts.map +1 -0
  188. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.js +408 -0
  189. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.d.ts +23 -0
  190. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.d.ts.map +1 -0
  191. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.js +63 -0
  192. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.d.ts +24 -0
  193. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.d.ts.map +1 -0
  194. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.js +61 -0
  195. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.d.ts +39 -0
  196. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.d.ts.map +1 -0
  197. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.js +126 -0
  198. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.d.ts +21 -0
  199. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.d.ts.map +1 -0
  200. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.js +74 -0
  201. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.d.ts +20 -0
  202. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.d.ts.map +1 -0
  203. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.js +26 -0
  204. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.d.ts +24 -0
  205. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.d.ts.map +1 -0
  206. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.js +57 -0
  207. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.d.ts +22 -0
  208. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.d.ts.map +1 -0
  209. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.js +53 -0
  210. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.d.ts +62 -0
  211. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.d.ts.map +1 -0
  212. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.js +156 -0
  213. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.d.ts +18 -0
  214. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.d.ts.map +1 -0
  215. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.js +50 -0
  216. package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.d.ts +21 -0
  217. package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.d.ts.map +1 -0
  218. package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.js +54 -0
  219. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.d.ts +67 -0
  220. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.d.ts.map +1 -0
  221. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.js +509 -0
  222. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.d.ts +20 -0
  223. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.d.ts.map +1 -0
  224. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.js +128 -0
  225. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.d.ts +62 -0
  226. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.d.ts.map +1 -0
  227. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.js +478 -0
  228. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.d.ts +69 -0
  229. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.d.ts.map +1 -0
  230. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.js +457 -0
  231. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.d.ts +27 -0
  232. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.d.ts.map +1 -0
  233. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.js +219 -0
  234. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.d.ts +22 -0
  235. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.d.ts.map +1 -0
  236. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.js +151 -0
  237. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.d.ts +66 -0
  238. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.d.ts.map +1 -0
  239. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.js +301 -0
  240. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.d.ts +59 -0
  241. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.d.ts.map +1 -0
  242. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.js +364 -0
  243. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.d.ts +40 -0
  244. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.d.ts.map +1 -0
  245. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.js +275 -0
  246. package/src/shade/renderer/grass/blade/GPUGrassBlades.d.ts.map +1 -1
  247. package/src/shade/renderer/grass/blade/GPUGrassBlades.js +17 -2
  248. package/src/shade/renderer/grass/blade/grass_blade_resolve.d.ts +18 -8
  249. package/src/shade/renderer/grass/blade/grass_blade_resolve.d.ts.map +1 -1
  250. package/src/shade/renderer/grass/blade/grass_blade_resolve.js +114 -32
  251. package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts +3 -2
  252. package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts.map +1 -1
  253. package/src/shade/renderer/grass/press/shader_grass_press_mark.js +5 -3
  254. package/src/shade/renderer/light/GPULightCollection.d.ts +1 -1
  255. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  256. package/src/shade/renderer/light/GPULightCollection.js +213 -80
  257. package/src/shade/renderer/{atmosphere → light/environment}/chunk_sample_environment_color.d.ts +1 -2
  258. package/src/shade/renderer/light/environment/chunk_sample_environment_color.d.ts.map +1 -0
  259. package/src/shade/renderer/{atmosphere → light/environment}/chunk_sample_environment_color.js +3 -4
  260. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  261. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -1
  262. package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +1 -1
  263. package/src/shade/renderer/postprocess/motion_blur/MotionBlur.d.ts +1 -1
  264. package/src/shade/renderer/postprocess/motion_blur/MotionBlur.js +1 -1
  265. package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.d.ts +1 -1
  266. package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.js +1 -1
  267. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +1 -1
  268. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  269. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +2 -0
  270. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.js +2 -0
  271. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts +6 -0
  272. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts.map +1 -1
  273. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.js +9 -1
  274. package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.d.ts.map +1 -1
  275. package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.js +4 -3
  276. package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.d.ts +17 -0
  277. package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.d.ts.map +1 -0
  278. package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.js +16 -0
  279. package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.d.ts +21 -0
  280. package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.d.ts.map +1 -0
  281. package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.js +30 -0
  282. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts +7 -5
  283. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
  284. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +19 -17
  285. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.js +2 -0
  286. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts +49 -0
  287. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts.map +1 -0
  288. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.js +144 -0
  289. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts +71 -0
  290. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts.map +1 -0
  291. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.js +152 -0
  292. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts +21 -0
  293. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts.map +1 -0
  294. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.js +30 -0
  295. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts +101 -0
  296. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts.map +1 -0
  297. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.js +306 -0
  298. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +9 -0
  299. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
  300. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +11 -4
  301. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  302. package/src/shade/renderer/scene/GPUSceneContext.js +2 -1
  303. package/src/shade/renderer/scene/Scene.d.ts +9 -2
  304. package/src/shade/renderer/scene/Scene.d.ts.map +1 -1
  305. package/src/shade/renderer/scene/Scene.js +10 -2
  306. package/src/shade/renderer/shader/ImageShader.d.ts +24 -12
  307. package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
  308. package/src/shade/renderer/shader/ImageShader.js +11 -8
  309. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.d.ts +3 -1
  310. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.d.ts.map +1 -1
  311. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.js +11 -3
  312. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts +2 -11
  313. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts.map +1 -1
  314. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js +23 -32
  315. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.d.ts +6 -0
  316. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.d.ts.map +1 -1
  317. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.js +14 -2
  318. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_height.d.ts.map +1 -1
  319. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_height.js +4 -2
  320. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_intersection.d.ts.map +1 -1
  321. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_intersection.js +11 -3
  322. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts.map +1 -1
  323. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js +68 -69
  324. package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.d.ts +4 -1
  325. package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.d.ts.map +1 -1
  326. package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.js +46 -39
  327. package/src/shade/renderer/shader/chunk/atmosphere/chunk_position_relative_to_planet_center.d.ts.map +1 -1
  328. package/src/shade/renderer/shader/chunk/atmosphere/chunk_position_relative_to_planet_center.js +5 -3
  329. package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.d.ts +18 -10
  330. package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.d.ts.map +1 -1
  331. package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.js +30 -27
  332. package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.d.ts +14 -0
  333. package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.d.ts.map +1 -0
  334. package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.js +30 -0
  335. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.d.ts +21 -0
  336. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.d.ts.map +1 -0
  337. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.js +60 -0
  338. package/src/shade/renderer/shader/chunk/light/{sky/chunk_sample_sky_color.d.ts → io/chunk_light_get_sun.d.ts} +3 -6
  339. package/src/shade/renderer/shader/chunk/light/io/chunk_light_get_sun.d.ts.map +1 -0
  340. package/src/shade/renderer/shader/chunk/light/{sky/chunk_sample_sky_color.js → io/chunk_light_get_sun.js} +6 -26
  341. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_soft_shadows.js +1 -1
  342. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts +69 -0
  343. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts.map +1 -0
  344. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.js +129 -0
  345. package/src/shade/renderer/trails/GPUTrailSystem.d.ts +164 -0
  346. package/src/shade/renderer/trails/GPUTrailSystem.d.ts.map +1 -0
  347. package/src/shade/renderer/trails/GPUTrailSystem.js +725 -0
  348. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts +14 -0
  349. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts.map +1 -0
  350. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.js +38 -0
  351. package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts +66 -0
  352. package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts.map +1 -0
  353. package/src/shade/renderer/trails/data/TRAIL_KNOT.js +154 -0
  354. package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts +19 -0
  355. package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts.map +1 -0
  356. package/src/shade/renderer/trails/data/TRAIL_RECORD.js +68 -0
  357. package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts +18 -0
  358. package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts.map +1 -0
  359. package/src/shade/renderer/trails/data/TRAIL_STATE.js +43 -0
  360. package/src/shade/renderer/trails/graph_trails.d.ts +58 -0
  361. package/src/shade/renderer/trails/graph_trails.d.ts.map +1 -0
  362. package/src/shade/renderer/trails/graph_trails.js +155 -0
  363. package/src/shade/renderer/trails/graph_trails_avboit.d.ts +126 -0
  364. package/src/shade/renderer/trails/graph_trails_avboit.d.ts.map +1 -0
  365. package/src/shade/renderer/trails/graph_trails_avboit.js +300 -0
  366. package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts +56 -0
  367. package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts.map +1 -0
  368. package/src/shade/renderer/trails/runtime/TrailFadeCurves.js +220 -0
  369. package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts +49 -0
  370. package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts.map +1 -0
  371. package/src/shade/renderer/trails/runtime/TrailKnotPool.js +162 -0
  372. package/src/shade/renderer/trails/runtime/TrailParameters.d.ts +52 -0
  373. package/src/shade/renderer/trails/runtime/TrailParameters.d.ts.map +1 -0
  374. package/src/shade/renderer/trails/runtime/TrailParameters.js +126 -0
  375. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts +23 -0
  376. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts.map +1 -0
  377. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.js +57 -0
  378. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts +14 -0
  379. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts.map +1 -0
  380. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.js +40 -0
  381. package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts +18 -0
  382. package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts.map +1 -0
  383. package/src/shade/renderer/trails/shaders/chunk_trail_seed.js +64 -0
  384. package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts +14 -0
  385. package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts.map +1 -0
  386. package/src/shade/renderer/trails/shaders/chunk_trail_segment.js +51 -0
  387. package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts +48 -0
  388. package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts.map +1 -0
  389. package/src/shade/renderer/trails/shaders/chunk_trail_update.js +197 -0
  390. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts +34 -0
  391. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts.map +1 -0
  392. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.js +111 -0
  393. package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts +24 -0
  394. package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts.map +1 -0
  395. package/src/shade/renderer/trails/shaders/shader_trail_avboit.js +78 -0
  396. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts +23 -0
  397. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts.map +1 -0
  398. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.js +130 -0
  399. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts +29 -0
  400. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts.map +1 -0
  401. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.js +78 -0
  402. package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts +18 -0
  403. package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts.map +1 -0
  404. package/src/shade/renderer/trails/shaders/shader_trail_seed.js +79 -0
  405. package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts +20 -0
  406. package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts.map +1 -0
  407. package/src/shade/renderer/trails/shaders/shader_trail_update.js +101 -0
  408. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +3 -1
  409. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  410. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +4 -2
  411. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  412. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +743 -739
  413. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +2 -0
  414. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  415. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +19 -17
  416. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.d.ts.map +1 -1
  417. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +5 -3
  418. package/src/shade/renderer/water/chunk_water_gi.js +2 -0
  419. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  420. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  421. package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts +0 -18
  422. package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts.map +0 -1
  423. package/src/engine/graphics/ecs/trail3d/advance_trail.js +0 -42
  424. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts +0 -14
  425. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts.map +0 -1
  426. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +0 -75
  427. package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts +0 -17
  428. package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts.map +0 -1
  429. package/src/engine/graphics/ecs/trail3d/trail_head_position.js +0 -19
  430. package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.d.ts +0 -2
  431. package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.d.ts.map +0 -1
  432. package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.js +0 -45
  433. package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.d.ts +0 -2
  434. package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.d.ts.map +0 -1
  435. package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.js +0 -17
  436. package/src/engine/graphics/sh3/sky/hosek/README.md +0 -4
  437. package/src/engine/graphics/sh3/sky/hosek/data.d.ts +0 -17
  438. package/src/engine/graphics/sh3/sky/hosek/data.d.ts.map +0 -1
  439. package/src/engine/graphics/sh3/sky/hosek/data.js +0 -3744
  440. package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.d.ts +0 -2
  441. package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.d.ts.map +0 -1
  442. package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.js +0 -71
  443. package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.d.ts +0 -26
  444. package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.d.ts.map +0 -1
  445. package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.js +0 -70
  446. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.d.ts +0 -22
  447. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.d.ts.map +0 -1
  448. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js +0 -388
  449. package/src/engine/graphics/trail/tube/TubeX.d.ts +0 -186
  450. package/src/engine/graphics/trail/tube/TubeX.d.ts.map +0 -1
  451. package/src/engine/graphics/trail/tube/TubeX.js +0 -575
  452. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts +0 -16
  453. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts.map +0 -1
  454. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +0 -34
  455. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +0 -27
  456. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +0 -1
  457. package/src/engine/graphics/trail/tube/tube_attributes_spec.js +0 -70
  458. package/src/engine/graphics3/make_default_environment.d.ts +0 -15
  459. package/src/engine/graphics3/make_default_environment.d.ts.map +0 -1
  460. package/src/engine/graphics3/make_default_environment.js +0 -111
  461. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +0 -38
  462. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +0 -1
  463. package/src/engine/graphics3/trail/trail_tube_write_geometry.js +0 -119
  464. package/src/shade/renderer/atmosphere/MIE_G.d.ts +0 -6
  465. package/src/shade/renderer/atmosphere/MIE_G.d.ts.map +0 -1
  466. package/src/shade/renderer/atmosphere/MIE_G.js +0 -5
  467. package/src/shade/renderer/atmosphere/chunk_sample_environment_color.d.ts.map +0 -1
  468. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.d.ts +0 -4
  469. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.d.ts.map +0 -1
  470. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.js +0 -44
  471. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.d.ts +0 -2
  472. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.d.ts.map +0 -1
  473. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.js +0 -43
  474. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.d.ts +0 -3
  475. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.d.ts.map +0 -1
  476. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.js +0 -6
  477. package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.d.ts +0 -3
  478. package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.d.ts.map +0 -1
  479. package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.js +0 -18
  480. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.d.ts +0 -14
  481. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.d.ts.map +0 -1
  482. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.js +0 -86
  483. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.d.ts +0 -8
  484. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.d.ts.map +0 -1
  485. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.js +0 -125
  486. package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.d.ts +0 -3
  487. package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.d.ts.map +0 -1
  488. package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.js +0 -17
  489. package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.d.ts +0 -3
  490. package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.d.ts.map +0 -1
  491. package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.js +0 -38
  492. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.d.ts +0 -16
  493. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.d.ts.map +0 -1
  494. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.js +0 -28
  495. package/src/shade/renderer/shader/chunk/light/sky/chunk_sample_sky_color.d.ts.map +0 -1
  496. package/src/shade/renderer/view/GPUViewSkyContext.d.ts +0 -26
  497. package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +0 -1
  498. package/src/shade/renderer/view/GPUViewSkyContext.js +0 -170
@@ -1,282 +1,339 @@
1
- import { WebGPUExtensionType } from "../../../descriptor/WebGPUExtensionType.js";
2
- import { GRID_TILE_SIZE } from "../../shader/chunk/grid/chunk_grid_tile_window.js";
3
- import { chunk_texture3d_trilinear_interpolate } from "../../shader/chunk/texture/sample/chunk_texture3d_trilinear_corners.js";
4
- import { ComputeShader } from "../../shader/ComputeShader.js";
5
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
6
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
7
- import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
8
- import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
9
- import { chunk_grid3d_to_index } from "../../shader/chunk/grid/chunk_grid3d_to_index.js";
10
- import { FLUID_CASCADE_PARENT_STRUCT } from "../coupling/FLUID_CASCADE_PARENT_STRUCT.js";
11
- import { chunk_fluid_forcing_flags } from "../forcing/FLUID_FORCING.js";
12
- import { chunk_fluid_cascade_epilogue } from "../coupling/chunk_fluid_cascade_epilogue.js";
13
- import { chunk_v3_mac_clip_trace } from "./chunk_v3_mac_clip_trace.js";
14
- import { chunk_v3_mac_face_pinned } from "./chunk_v3_mac_face_pinned.js";
15
- import { chunk_v3_mac_limit } from "./chunk_v3_mac_lattice_corners.js";
16
- import {
17
- chunk_fluid_mac_seam_forward,
18
- chunk_fluid_mac_seam_solid,
19
- chunk_fluid_mac_seam_source
20
- } from "./chunk_fluid_mac_seams.js";
21
- import { FLUID_MAC_STEP_STRUCT } from "./FLUID_MAC_STEP_STRUCT.js";
22
-
23
- const resources = new ShaderResourceSetDescriptor();
24
-
25
- resources.createGroup()
26
- .addUniform("step", FLUID_MAC_STEP_STRUCT)
27
- .addUniform("parent", FLUID_CASCADE_PARENT_STRUCT)
28
- .addTexture("source_u", "unfilterable-float", "3d")
29
- .addTexture("source_v", "unfilterable-float", "3d")
30
- .addTexture("source_w", "unfilterable-float", "3d")
31
- .addTexture("forward_u", "unfilterable-float", "3d")
32
- .addTexture("forward_v", "unfilterable-float", "3d")
33
- .addTexture("forward_w", "unfilterable-float", "3d")
34
- .addTexture("parent_u", "unfilterable-float", "3d")
35
- .addTexture("parent_v", "unfilterable-float", "3d")
36
- .addTexture("parent_w", "unfilterable-float", "3d")
37
- .addTexture("ghost_u", "unfilterable-float", "3d")
38
- .addTexture("ghost_v", "unfilterable-float", "3d")
39
- .addTexture("ghost_w", "unfilterable-float", "3d")
40
- .addStorageBuffer("solid", WebGPUArray.from(u32), false)
41
- .addStorageBuffer("forcing", WebGPUArray.from(f32), false)
42
- // the step's confinement force per cell (shader_fluid_mac_curl); read only with step.confinement_dt
43
- .addStorageBuffer("confinement", WebGPUArray.from(f32), false)
44
- .addStorageTexture("out_u", "r32float", "3d", "write-only")
45
- .addStorageTexture("out_v", "r32float", "3d", "write-only")
46
- .addStorageTexture("out_w", "r32float", "3d", "write-only");
47
-
48
- /*
49
- Each component's store is where a face's value is final. The per-face terms that follow the limiter
50
- (§8 pass 3) go between the correction and the store, in these three functions: the atmosphere
51
- identity, the vorticity confinement, the relaxation band and the deviation clamp
52
- (chunk_fluid_cascade_epilogue), then the tick's forcing, on every face that is not pinned; a pinned
53
- face keeps the wall's velocity, which the forcing wrote into the persistent faces before the step.
54
-
55
- The confinement of a face is half of each of its two cells' force, which the curl pass wrote
56
- (shader_fluid_mac_curl) with the half already taken: the CPU's scatter of a cell's force to its six
57
- faces, gathered. Without confinement step.confinement_dt is 0, no curl pass ran, and the uniform
58
- branch reads nothing.
59
-
60
- The forcing (shader_fluid_forcing_apply) is dense over the face lattices and written only on the
61
- bricks it ran: a face reads it only under FLUID_FORCED_FLAG of the cell that owns it, its own cell,
62
- or the window's last cell for a +boundary face.
63
- */
64
- const body = CodeChunk.from(
65
- //language=WGSL
66
- `
67
- // whether the forcing was written for the faces of a window-local cell
68
- fn fluid_mac_cell_forced(cell: vec3<i32>) -> bool {
69
- let owner = min(cell, vec3<i32>(step.cells.size) - vec3<i32>(1));
70
-
71
- return (solid[grid3d_to_index(vec3<u32>(owner), step.cells.size.xy)] & FLUID_FORCED_FLAG) != 0u;
72
- }
73
-
74
- fn fluid_mac_forcing_u(face: vec3<i32>) -> f32 {
75
- if (!fluid_mac_cell_forced(face)) {
76
- return 0.0;
77
- }
78
-
79
- return forcing[grid3d_to_index(vec3<u32>(face), step.faces_u.size.xy)];
80
- }
81
-
82
- fn fluid_mac_forcing_v(face: vec3<i32>) -> f32 {
83
- if (!fluid_mac_cell_forced(face)) {
84
- return 0.0;
85
- }
86
-
87
- let offset = step.faces_u.size.x * step.faces_u.size.y * step.faces_u.size.z;
88
-
89
- return forcing[offset + grid3d_to_index(vec3<u32>(face), step.faces_v.size.xy)];
90
- }
91
-
92
- fn fluid_mac_forcing_w(face: vec3<i32>) -> f32 {
93
- if (!fluid_mac_cell_forced(face)) {
94
- return 0.0;
95
- }
96
-
97
- let offset = step.faces_u.size.x * step.faces_u.size.y * step.faces_u.size.z
98
- + step.faces_v.size.x * step.faces_v.size.y * step.faces_v.size.z;
99
-
100
- return forcing[offset + grid3d_to_index(vec3<u32>(face), step.faces_w.size.xy)];
101
- }
102
-
103
- // a window-local cell's confinement force along one axis, 0 beyond the window
104
- fn fluid_mac_cell_confinement(cell: vec3<i32>, component: u32) -> f32 {
105
- let size = step.cells.size;
106
-
107
- if (any(cell < vec3<i32>(0)) || any(cell >= vec3<i32>(size))) {
108
- return 0.0;
109
- }
110
-
111
- return confinement[component * size.x * size.y * size.z + grid3d_to_index(vec3<u32>(cell), size.xy)];
112
- }
113
-
114
- fn fluid_mac_confinement_u(face: vec3<i32>) -> f32 {
115
- if (step.confinement_dt == 0.0) {
116
- return 0.0;
117
- }
118
-
119
- return fluid_mac_cell_confinement(face - vec3<i32>(1, 0, 0), 0u) + fluid_mac_cell_confinement(face, 0u);
120
- }
121
-
122
- fn fluid_mac_confinement_v(face: vec3<i32>) -> f32 {
123
- if (step.confinement_dt == 0.0) {
124
- return 0.0;
125
- }
126
-
127
- return fluid_mac_cell_confinement(face - vec3<i32>(0, 1, 0), 1u) + fluid_mac_cell_confinement(face, 1u);
128
- }
129
-
130
- fn fluid_mac_confinement_w(face: vec3<i32>) -> f32 {
131
- if (step.confinement_dt == 0.0) {
132
- return 0.0;
133
- }
134
-
135
- return fluid_mac_cell_confinement(face - vec3<i32>(0, 0, 1), 2u) + fluid_mac_cell_confinement(face, 2u);
136
- }
137
-
138
- fn fluid_mac_correct_store_u(face: vec3<i32>) {
139
- let source = textureLoad(source_u, grid_tile_window_storage(face, step.faces_u.corner_storage, step.faces_u.period), 0).r;
140
-
141
- if (v3_mac_face_pinned_u(face)) {
142
- textureStore(out_u, vec3<u32>(face), vec4<f32>(source, 0.0, 0.0, 0.0));
143
- return;
144
- }
145
-
146
- let start = vec3<f32>(face) - vec3<f32>(0.5, 0.0, 0.0);
147
- let travel = fluid_mac_face_carrier_u(face, source) * step.dt_over_h;
148
- let back = v3_mac_clip_trace(start, start - travel);
149
- let ahead = v3_mac_clip_trace(start, start + travel);
150
-
151
- let backward = texture3d_trilinear_interpolate(fluid_mac_forward_corners_u(ahead + vec3<f32>(0.5, 0.0, 0.0)));
152
- let corrected = textureLoad(forward_u, vec3<u32>(face), 0).r + 0.5 * (source - backward);
153
- let limited = v3_mac_limit(corrected, fluid_mac_source_corners_u(back + vec3<f32>(0.5, 0.0, 0.0)));
154
- let value = fluid_mac_epilogue_u(face, limited, fluid_mac_confinement_u(face)) + fluid_mac_forcing_u(face);
155
-
156
- textureStore(out_u, vec3<u32>(face), vec4<f32>(value, 0.0, 0.0, 0.0));
157
- }
158
-
159
- fn fluid_mac_correct_store_v(face: vec3<i32>) {
160
- let source = textureLoad(source_v, grid_tile_window_storage(face, step.faces_v.corner_storage, step.faces_v.period), 0).r;
161
-
162
- if (v3_mac_face_pinned_v(face)) {
163
- textureStore(out_v, vec3<u32>(face), vec4<f32>(source, 0.0, 0.0, 0.0));
164
- return;
165
- }
166
-
167
- let start = vec3<f32>(face) - vec3<f32>(0.0, 0.5, 0.0);
168
- let travel = fluid_mac_face_carrier_v(face, source) * step.dt_over_h;
169
- let back = v3_mac_clip_trace(start, start - travel);
170
- let ahead = v3_mac_clip_trace(start, start + travel);
171
-
172
- let backward = texture3d_trilinear_interpolate(fluid_mac_forward_corners_v(ahead + vec3<f32>(0.0, 0.5, 0.0)));
173
- let corrected = textureLoad(forward_v, vec3<u32>(face), 0).r + 0.5 * (source - backward);
174
- let limited = v3_mac_limit(corrected, fluid_mac_source_corners_v(back + vec3<f32>(0.0, 0.5, 0.0)));
175
- let value = fluid_mac_epilogue_v(face, limited, fluid_mac_confinement_v(face)) + fluid_mac_forcing_v(face);
176
-
177
- textureStore(out_v, vec3<u32>(face), vec4<f32>(value, 0.0, 0.0, 0.0));
178
- }
179
-
180
- fn fluid_mac_correct_store_w(face: vec3<i32>) {
181
- let source = textureLoad(source_w, grid_tile_window_storage(face, step.faces_w.corner_storage, step.faces_w.period), 0).r;
182
-
183
- if (v3_mac_face_pinned_w(face)) {
184
- textureStore(out_w, vec3<u32>(face), vec4<f32>(source, 0.0, 0.0, 0.0));
185
- return;
186
- }
187
-
188
- let start = vec3<f32>(face) - vec3<f32>(0.0, 0.0, 0.5);
189
- let travel = fluid_mac_face_carrier_w(face, source) * step.dt_over_h;
190
- let back = v3_mac_clip_trace(start, start - travel);
191
- let ahead = v3_mac_clip_trace(start, start + travel);
192
-
193
- let backward = texture3d_trilinear_interpolate(fluid_mac_forward_corners_w(ahead + vec3<f32>(0.0, 0.0, 0.5)));
194
- let corrected = textureLoad(forward_w, vec3<u32>(face), 0).r + 0.5 * (source - backward);
195
- let limited = v3_mac_limit(corrected, fluid_mac_source_corners_w(back + vec3<f32>(0.0, 0.0, 0.5)));
196
- let value = fluid_mac_epilogue_w(face, limited, fluid_mac_confinement_w(face)) + fluid_mac_forcing_w(face);
197
-
198
- textureStore(out_w, vec3<u32>(face), vec4<f32>(value, 0.0, 0.0, 0.0));
199
- }
200
-
201
- @compute @workgroup_size(${GRID_TILE_SIZE.join(', ')})
202
- fn main(@builtin(global_invocation_id) id: vec3<u32>) {
203
- let cell = vec3<i32>(id);
204
- let last = vec3<i32>(step.cells.size) - vec3<i32>(1);
205
-
206
- // each cell's -x, -y and -z faces
207
- fluid_mac_correct_store_u(cell);
208
- fluid_mac_correct_store_v(cell);
209
- fluid_mac_correct_store_w(cell);
210
-
211
- // the +boundary face planes, owned by the last tile along each axis
212
- if (cell.x == last.x) {
213
- fluid_mac_correct_store_u(cell + vec3<i32>(1, 0, 0));
214
- }
215
- if (cell.y == last.y) {
216
- fluid_mac_correct_store_v(cell + vec3<i32>(0, 1, 0));
217
- }
218
- if (cell.z == last.z) {
219
- fluid_mac_correct_store_w(cell + vec3<i32>(0, 0, 1));
220
- }
221
- }
222
- `, [
223
- chunk_fluid_mac_seam_source,
224
- chunk_fluid_mac_seam_forward,
225
- chunk_fluid_mac_seam_solid,
226
- chunk_v3_mac_face_pinned,
227
- chunk_v3_mac_clip_trace,
228
- chunk_v3_mac_limit,
229
- chunk_texture3d_trilinear_interpolate,
230
- chunk_fluid_cascade_epilogue,
231
- chunk_grid3d_to_index,
232
- chunk_fluid_forcing_flags,
233
- ]
234
- );
235
-
236
- body.addExtension(WebGPUExtensionType.Subgroups);
237
-
238
- /**
239
- * MacCormack's correct pass over one cascade window (GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md §8,
240
- * pass 3): every face takes the predicted value corrected by half the round trip's error, limited to
241
- * the source's corners around its back-trace end, into the transient set the projection works on.
242
- * Then, on a face that is not pinned, the epilogue (`chunk_fluid_cascade_epilogue`): the atmosphere
243
- * identity from the step's start to its end, the vorticity confinement when `step.confinement_dt` is
244
- * not 0 (half of each of the face's two cells' force from `shader_fluid_mac_curl`), the relaxation band
245
- * toward the parent on rows 2..5 with `step.band`, and the deviation clamp about `v_far` at the step's
246
- * end; then the tick's forcing (§8
247
- * pass 4: the divergence is of `velocity_mid + forcing`), on a face whose owning cell carries
248
- * `FLUID_FORCED_FLAG`. A pinned face is the persistent face, the wall's velocity the forcing wrote.
249
- *
250
- * Dispatch and face ownership as {@link shader_fluid_mac_advect_predict}: `(nx / 8, ny / 8, nz / 4)`
251
- * groups of 8 × 8 × 4, a cell's −x, −y and −z faces, and the +boundary planes from the last tile.
252
- *
253
- * Bindings:
254
- * - `step`: {@link FLUID_MAC_STEP_STRUCT};
255
- * - `parent`: {@link FLUID_CASCADE_PARENT_STRUCT}, and `parent_u`, `parent_v`, `parent_w` the parent's
256
- * persistent faces: beyond the window both the source and the predicted field are the parent's
257
- * identity read at the step's start, as the step's ghosts `ghost_u`, `ghost_v`, `ghost_w` hold it;
258
- * the band reads the parent itself;
259
- * - `source_u`, `source_v`, `source_w`: the persistent velocity the predict pass read, toroidal
260
- * through `step.faces_*`;
261
- * - `forward_u`, `forward_v`, `forward_w`: what the predict pass wrote, window-local;
262
- * - `solid`: the window-local solid flags, `array<u32>`, `FLUID_SOLID_FLAG` and `FLUID_FORCED_FLAG`;
263
- * - `forcing`: the tick's forcing, `array<f32>`, the u faces' lattice, then v's, then w's, each x
264
- * fastest; read only under `FLUID_FORCED_FLAG`, so a step with no forcing binds anything;
265
- * - `confinement`: the curl pass's force, `array<f32>` of 3·N, x of every cell, then y, then z, each
266
- * window-local x fastest; read only when `step.confinement_dt` is not 0, so a step without
267
- * confinement binds anything;
268
- * - `out_u`, `out_v`, `out_w`: written, `r32float` 3-D storage textures, window-local.
269
- *
270
- * Reads a face: 9 carrier and 9 source texels, 9 predicted, 2 solid flags, 2 for the two trace ends
271
- * and up to 8 for clips, 2 more flags for the epilogue, 1 more and a forcing word for the forcing, 2
272
- * confinement words with confinement, and 8 parent texels on a band row. A cell: ~81 texels, ~21
273
- * flags, 6 confinement words with confinement, ~24 parent texels on the band's four
274
- * rows.
275
- *
276
- * @type {ComputeShader}
277
- */
278
- export const shader_fluid_mac_advect_correct = ComputeShader.from({
279
- label: "Fluid / MAC advect correct",
280
- body,
281
- resources,
282
- });
1
+ import { WebGPUExtensionType } from "../../../descriptor/WebGPUExtensionType.js";
2
+ import { GRID_TILE_SIZE } from "../../shader/chunk/grid/chunk_grid_tile_window.js";
3
+ import { chunk_texture3d_trilinear_interpolate } from "../../shader/chunk/texture/sample/chunk_texture3d_trilinear_corners.js";
4
+ import { ComputeShader } from "../../shader/ComputeShader.js";
5
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
6
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
7
+ import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
8
+ import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
9
+ import { chunk_grid3d_to_index } from "../../shader/chunk/grid/chunk_grid3d_to_index.js";
10
+ import { FLUID_CASCADE_PARENT_STRUCT } from "../coupling/FLUID_CASCADE_PARENT_STRUCT.js";
11
+ import { chunk_fluid_forcing_flags } from "../forcing/FLUID_FORCING.js";
12
+ import { chunk_fluid_cascade_epilogue } from "../coupling/chunk_fluid_cascade_epilogue.js";
13
+ import { chunk_v3_mac_clip_trace } from "./chunk_v3_mac_clip_trace.js";
14
+ import { chunk_v3_mac_face_pinned } from "./chunk_v3_mac_face_pinned.js";
15
+ import { chunk_v3_mac_limit } from "./chunk_v3_mac_lattice_corners.js";
16
+ import {
17
+ chunk_fluid_mac_seam_forward,
18
+ chunk_fluid_mac_seam_solid,
19
+ chunk_fluid_mac_seam_source
20
+ } from "./chunk_fluid_mac_seams.js";
21
+ import { FLUID_MAC_STEP_STRUCT } from "./FLUID_MAC_STEP_STRUCT.js";
22
+
23
+ const resources = new ShaderResourceSetDescriptor();
24
+
25
+ resources.createGroup()
26
+ .addUniform("step", FLUID_MAC_STEP_STRUCT)
27
+ .addUniform("parent", FLUID_CASCADE_PARENT_STRUCT)
28
+ .addTexture("source_u", "unfilterable-float", "3d")
29
+ .addTexture("source_v", "unfilterable-float", "3d")
30
+ .addTexture("source_w", "unfilterable-float", "3d")
31
+ .addTexture("forward_u", "unfilterable-float", "3d")
32
+ .addTexture("forward_v", "unfilterable-float", "3d")
33
+ .addTexture("forward_w", "unfilterable-float", "3d")
34
+ .addTexture("parent_u", "unfilterable-float", "3d")
35
+ .addTexture("parent_v", "unfilterable-float", "3d")
36
+ .addTexture("parent_w", "unfilterable-float", "3d")
37
+ .addTexture("ghost_u", "unfilterable-float", "3d")
38
+ .addTexture("ghost_v", "unfilterable-float", "3d")
39
+ .addTexture("ghost_w", "unfilterable-float", "3d")
40
+ .addStorageBuffer("solid", WebGPUArray.from(u32), false)
41
+ .addStorageBuffer("forcing", WebGPUArray.from(f32), false)
42
+ // the step's confinement force per cell (shader_fluid_mac_curl); read only with step.confinement_dt
43
+ .addStorageBuffer("confinement", WebGPUArray.from(f32), false)
44
+ .addStorageTexture("out_u", "r32float", "3d", "write-only")
45
+ .addStorageTexture("out_v", "r32float", "3d", "write-only")
46
+ .addStorageTexture("out_w", "r32float", "3d", "write-only");
47
+
48
+ /*
49
+ Each component's store is where a face's value is final. The per-face terms that follow the limiter
50
+ (§8 pass 3) go between the correction and the store, in these three functions: the atmosphere
51
+ identity, the vorticity confinement, the relaxation band and the deviation clamp
52
+ (chunk_fluid_cascade_epilogue), then the tick's forcing, then the porous obstacles' drag, on every
53
+ face that is not pinned; a pinned face keeps the wall's velocity, which the forcing wrote into the
54
+ persistent faces before the step.
55
+
56
+ The drag of a face is the mean of its two cells' drag over the step, k·dt, a cell without
57
+ FLUID_POROUS_FLAG giving none, toward the velocity of what drags on it, the two cells' weighed by
58
+ their drag. It is taken implicitly, with the face's velocity relative to that, |u − v|, at the step's
59
+ start (the carrier): u ← v + (u − v) / (1 + k·dt·|u − v|), which slows the air toward v and never
60
+ past it, however strong the drag.
61
+
62
+ The confinement of a face is half of each of its two cells' force, which the curl pass wrote
63
+ (shader_fluid_mac_curl) with the half already taken: the CPU's scatter of a cell's force to its six
64
+ faces, gathered. Without confinement step.confinement_dt is 0, no curl pass ran, and the uniform
65
+ branch reads nothing.
66
+
67
+ The forcing (shader_fluid_forcing_apply) is dense over the face lattices and written only on the
68
+ bricks it ran: a face reads it only under FLUID_FORCED_FLAG of the cell that owns it, its own cell,
69
+ or the window's last cell for a +boundary face.
70
+ */
71
+ const body = CodeChunk.from(
72
+ //language=WGSL
73
+ `
74
+ // whether the forcing was written for the faces of a window-local cell
75
+ fn fluid_mac_cell_forced(cell: vec3<i32>) -> bool {
76
+ let owner = min(cell, vec3<i32>(step.cells.size) - vec3<i32>(1));
77
+
78
+ return (solid[grid3d_to_index(vec3<u32>(owner), step.cells.size.xy)] & FLUID_FORCED_FLAG) != 0u;
79
+ }
80
+
81
+ fn fluid_mac_forcing_u(face: vec3<i32>) -> f32 {
82
+ if (!fluid_mac_cell_forced(face)) {
83
+ return 0.0;
84
+ }
85
+
86
+ return forcing[grid3d_to_index(vec3<u32>(face), step.faces_u.size.xy)];
87
+ }
88
+
89
+ fn fluid_mac_forcing_v(face: vec3<i32>) -> f32 {
90
+ if (!fluid_mac_cell_forced(face)) {
91
+ return 0.0;
92
+ }
93
+
94
+ let offset = step.faces_u.size.x * step.faces_u.size.y * step.faces_u.size.z;
95
+
96
+ return forcing[offset + grid3d_to_index(vec3<u32>(face), step.faces_v.size.xy)];
97
+ }
98
+
99
+ fn fluid_mac_forcing_w(face: vec3<i32>) -> f32 {
100
+ if (!fluid_mac_cell_forced(face)) {
101
+ return 0.0;
102
+ }
103
+
104
+ let offset = step.faces_u.size.x * step.faces_u.size.y * step.faces_u.size.z
105
+ + step.faces_v.size.x * step.faces_v.size.y * step.faces_v.size.z;
106
+
107
+ return forcing[offset + grid3d_to_index(vec3<u32>(face), step.faces_w.size.xy)];
108
+ }
109
+
110
+ // a window-local cell's drag over the step and the velocity it drags toward, none beyond the window
111
+ // or where the forcing wrote none
112
+ fn fluid_mac_cell_porous(cell: vec3<i32>) -> vec4<f32> {
113
+ if (any(cell < vec3<i32>(0)) || any(cell >= vec3<i32>(step.cells.size))) {
114
+ return vec4<f32>(0.0);
115
+ }
116
+
117
+ let index = grid3d_to_index(vec3<u32>(cell), step.cells.size.xy);
118
+
119
+ if ((solid[index] & FLUID_POROUS_FLAG) == 0u) {
120
+ return vec4<f32>(0.0);
121
+ }
122
+
123
+ // after the three face lattices
124
+ let at = step.faces_u.size.x * step.faces_u.size.y * step.faces_u.size.z
125
+ + step.faces_v.size.x * step.faces_v.size.y * step.faces_v.size.z
126
+ + step.faces_w.size.x * step.faces_w.size.y * step.faces_w.size.z
127
+ + index * FLUID_FORCING_POROUS_WORDS;
128
+
129
+ return vec4<f32>(forcing[at], forcing[at + 1u], forcing[at + 2u], forcing[at + 3u]);
130
+ }
131
+
132
+ // a face's value slowed by the drag of its two cells, the face's direction axis, its velocity at the
133
+ // step's start carrier
134
+ fn fluid_mac_porous(minus: vec3<i32>, plus: vec3<i32>, axis: vec3<f32>, value: f32, carrier: vec3<f32>) -> f32 {
135
+ let a = fluid_mac_cell_porous(minus);
136
+ let b = fluid_mac_cell_porous(plus);
137
+
138
+ let total = a.x + b.x;
139
+
140
+ if (total <= 0.0) {
141
+ return value;
142
+ }
143
+
144
+ let wall = (a.yzw * a.x + b.yzw * b.x) * (1.0 / total);
145
+ let along = dot(wall, axis);
146
+
147
+ return along + (value - along) / (1.0 + 0.5 * total * length(carrier - wall));
148
+ }
149
+
150
+ // a window-local cell's confinement force along one axis, 0 beyond the window
151
+ fn fluid_mac_cell_confinement(cell: vec3<i32>, component: u32) -> f32 {
152
+ let size = step.cells.size;
153
+
154
+ if (any(cell < vec3<i32>(0)) || any(cell >= vec3<i32>(size))) {
155
+ return 0.0;
156
+ }
157
+
158
+ return confinement[component * size.x * size.y * size.z + grid3d_to_index(vec3<u32>(cell), size.xy)];
159
+ }
160
+
161
+ fn fluid_mac_confinement_u(face: vec3<i32>) -> f32 {
162
+ if (step.confinement_dt == 0.0) {
163
+ return 0.0;
164
+ }
165
+
166
+ return fluid_mac_cell_confinement(face - vec3<i32>(1, 0, 0), 0u) + fluid_mac_cell_confinement(face, 0u);
167
+ }
168
+
169
+ fn fluid_mac_confinement_v(face: vec3<i32>) -> f32 {
170
+ if (step.confinement_dt == 0.0) {
171
+ return 0.0;
172
+ }
173
+
174
+ return fluid_mac_cell_confinement(face - vec3<i32>(0, 1, 0), 1u) + fluid_mac_cell_confinement(face, 1u);
175
+ }
176
+
177
+ fn fluid_mac_confinement_w(face: vec3<i32>) -> f32 {
178
+ if (step.confinement_dt == 0.0) {
179
+ return 0.0;
180
+ }
181
+
182
+ return fluid_mac_cell_confinement(face - vec3<i32>(0, 0, 1), 2u) + fluid_mac_cell_confinement(face, 2u);
183
+ }
184
+
185
+ fn fluid_mac_correct_store_u(face: vec3<i32>) {
186
+ let source = textureLoad(source_u, grid_tile_window_storage(face, step.faces_u.corner_storage, step.faces_u.period), 0).r;
187
+
188
+ if (v3_mac_face_pinned_u(face)) {
189
+ textureStore(out_u, vec3<u32>(face), vec4<f32>(source, 0.0, 0.0, 0.0));
190
+ return;
191
+ }
192
+
193
+ let start = vec3<f32>(face) - vec3<f32>(0.5, 0.0, 0.0);
194
+ let carrier = fluid_mac_face_carrier_u(face, source);
195
+ let travel = carrier * step.dt_over_h;
196
+ let back = v3_mac_clip_trace(start, start - travel);
197
+ let ahead = v3_mac_clip_trace(start, start + travel);
198
+
199
+ let backward = texture3d_trilinear_interpolate(fluid_mac_forward_corners_u(ahead + vec3<f32>(0.5, 0.0, 0.0)));
200
+ let corrected = textureLoad(forward_u, vec3<u32>(face), 0).r + 0.5 * (source - backward);
201
+ let limited = v3_mac_limit(corrected, fluid_mac_source_corners_u(back + vec3<f32>(0.5, 0.0, 0.0)));
202
+ let forced = fluid_mac_epilogue_u(face, limited, fluid_mac_confinement_u(face)) + fluid_mac_forcing_u(face);
203
+ let value = fluid_mac_porous(face - vec3<i32>(1, 0, 0), face, vec3<f32>(1.0, 0.0, 0.0), forced, carrier);
204
+
205
+ textureStore(out_u, vec3<u32>(face), vec4<f32>(value, 0.0, 0.0, 0.0));
206
+ }
207
+
208
+ fn fluid_mac_correct_store_v(face: vec3<i32>) {
209
+ let source = textureLoad(source_v, grid_tile_window_storage(face, step.faces_v.corner_storage, step.faces_v.period), 0).r;
210
+
211
+ if (v3_mac_face_pinned_v(face)) {
212
+ textureStore(out_v, vec3<u32>(face), vec4<f32>(source, 0.0, 0.0, 0.0));
213
+ return;
214
+ }
215
+
216
+ let start = vec3<f32>(face) - vec3<f32>(0.0, 0.5, 0.0);
217
+ let carrier = fluid_mac_face_carrier_v(face, source);
218
+ let travel = carrier * step.dt_over_h;
219
+ let back = v3_mac_clip_trace(start, start - travel);
220
+ let ahead = v3_mac_clip_trace(start, start + travel);
221
+
222
+ let backward = texture3d_trilinear_interpolate(fluid_mac_forward_corners_v(ahead + vec3<f32>(0.0, 0.5, 0.0)));
223
+ let corrected = textureLoad(forward_v, vec3<u32>(face), 0).r + 0.5 * (source - backward);
224
+ let limited = v3_mac_limit(corrected, fluid_mac_source_corners_v(back + vec3<f32>(0.0, 0.5, 0.0)));
225
+ let forced = fluid_mac_epilogue_v(face, limited, fluid_mac_confinement_v(face)) + fluid_mac_forcing_v(face);
226
+ let value = fluid_mac_porous(face - vec3<i32>(0, 1, 0), face, vec3<f32>(0.0, 1.0, 0.0), forced, carrier);
227
+
228
+ textureStore(out_v, vec3<u32>(face), vec4<f32>(value, 0.0, 0.0, 0.0));
229
+ }
230
+
231
+ fn fluid_mac_correct_store_w(face: vec3<i32>) {
232
+ let source = textureLoad(source_w, grid_tile_window_storage(face, step.faces_w.corner_storage, step.faces_w.period), 0).r;
233
+
234
+ if (v3_mac_face_pinned_w(face)) {
235
+ textureStore(out_w, vec3<u32>(face), vec4<f32>(source, 0.0, 0.0, 0.0));
236
+ return;
237
+ }
238
+
239
+ let start = vec3<f32>(face) - vec3<f32>(0.0, 0.0, 0.5);
240
+ let carrier = fluid_mac_face_carrier_w(face, source);
241
+ let travel = carrier * step.dt_over_h;
242
+ let back = v3_mac_clip_trace(start, start - travel);
243
+ let ahead = v3_mac_clip_trace(start, start + travel);
244
+
245
+ let backward = texture3d_trilinear_interpolate(fluid_mac_forward_corners_w(ahead + vec3<f32>(0.0, 0.0, 0.5)));
246
+ let corrected = textureLoad(forward_w, vec3<u32>(face), 0).r + 0.5 * (source - backward);
247
+ let limited = v3_mac_limit(corrected, fluid_mac_source_corners_w(back + vec3<f32>(0.0, 0.0, 0.5)));
248
+ let forced = fluid_mac_epilogue_w(face, limited, fluid_mac_confinement_w(face)) + fluid_mac_forcing_w(face);
249
+ let value = fluid_mac_porous(face - vec3<i32>(0, 0, 1), face, vec3<f32>(0.0, 0.0, 1.0), forced, carrier);
250
+
251
+ textureStore(out_w, vec3<u32>(face), vec4<f32>(value, 0.0, 0.0, 0.0));
252
+ }
253
+
254
+ @compute @workgroup_size(${GRID_TILE_SIZE.join(', ')})
255
+ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
256
+ let cell = vec3<i32>(id);
257
+ let last = vec3<i32>(step.cells.size) - vec3<i32>(1);
258
+
259
+ // each cell's -x, -y and -z faces
260
+ fluid_mac_correct_store_u(cell);
261
+ fluid_mac_correct_store_v(cell);
262
+ fluid_mac_correct_store_w(cell);
263
+
264
+ // the +boundary face planes, owned by the last tile along each axis
265
+ if (cell.x == last.x) {
266
+ fluid_mac_correct_store_u(cell + vec3<i32>(1, 0, 0));
267
+ }
268
+ if (cell.y == last.y) {
269
+ fluid_mac_correct_store_v(cell + vec3<i32>(0, 1, 0));
270
+ }
271
+ if (cell.z == last.z) {
272
+ fluid_mac_correct_store_w(cell + vec3<i32>(0, 0, 1));
273
+ }
274
+ }
275
+ `, [
276
+ chunk_fluid_mac_seam_source,
277
+ chunk_fluid_mac_seam_forward,
278
+ chunk_fluid_mac_seam_solid,
279
+ chunk_v3_mac_face_pinned,
280
+ chunk_v3_mac_clip_trace,
281
+ chunk_v3_mac_limit,
282
+ chunk_texture3d_trilinear_interpolate,
283
+ chunk_fluid_cascade_epilogue,
284
+ chunk_grid3d_to_index,
285
+ chunk_fluid_forcing_flags,
286
+ ]
287
+ );
288
+
289
+ body.addExtension(WebGPUExtensionType.Subgroups);
290
+
291
+ /**
292
+ * MacCormack's correct pass over one cascade window (GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md §8,
293
+ * pass 3): every face takes the predicted value corrected by half the round trip's error, limited to
294
+ * the source's corners around its back-trace end, into the transient set the projection works on.
295
+ * Then, on a face that is not pinned, the epilogue (`chunk_fluid_cascade_epilogue`): the atmosphere
296
+ * identity from the step's start to its end, the vorticity confinement when `step.confinement_dt` is
297
+ * not 0 (half of each of the face's two cells' force from `shader_fluid_mac_curl`), the relaxation band
298
+ * toward the parent on rows 2..5 with `step.band`, and the deviation clamp about `v_far` at the step's
299
+ * end; then the tick's forcing (§8
300
+ * pass 4: the divergence is of `velocity_mid + forcing`), on a face whose owning cell carries
301
+ * `FLUID_FORCED_FLAG`; then the drag of the porous obstacles in the face's two cells, under
302
+ * `FLUID_POROUS_FLAG`, taken implicitly. A pinned face is the persistent face, the wall's velocity the
303
+ * forcing wrote.
304
+ *
305
+ * Dispatch and face ownership as {@link shader_fluid_mac_advect_predict}: `(nx / 8, ny / 8, nz / 4)`
306
+ * groups of 8 × 8 × 4, a cell's −x, −y and −z faces, and the +boundary planes from the last tile.
307
+ *
308
+ * Bindings:
309
+ * - `step`: {@link FLUID_MAC_STEP_STRUCT};
310
+ * - `parent`: {@link FLUID_CASCADE_PARENT_STRUCT}, and `parent_u`, `parent_v`, `parent_w` the parent's
311
+ * persistent faces: beyond the window both the source and the predicted field are the parent's
312
+ * identity read at the step's start, as the step's ghosts `ghost_u`, `ghost_v`, `ghost_w` hold it;
313
+ * the band reads the parent itself;
314
+ * - `source_u`, `source_v`, `source_w`: the persistent velocity the predict pass read, toroidal
315
+ * through `step.faces_*`;
316
+ * - `forward_u`, `forward_v`, `forward_w`: what the predict pass wrote, window-local;
317
+ * - `solid`: the window-local solid flags, `array<u32>`, `FLUID_SOLID_FLAG` and `FLUID_FORCED_FLAG`;
318
+ * - `forcing`: the tick's forcing, `array<f32>`, the u faces' lattice, then v's, then w's, each x
319
+ * fastest, then the cells' drag, `FLUID_FORCING_POROUS_WORDS` a cell; a face read only under
320
+ * `FLUID_FORCED_FLAG` and a cell's drag only under `FLUID_POROUS_FLAG`, so a step with no forcing
321
+ * binds anything;
322
+ * - `confinement`: the curl pass's force, `array<f32>` of 3·N, x of every cell, then y, then z, each
323
+ * window-local x fastest; read only when `step.confinement_dt` is not 0, so a step without
324
+ * confinement binds anything;
325
+ * - `out_u`, `out_v`, `out_w`: written, `r32float` 3-D storage textures, window-local.
326
+ *
327
+ * Reads a face: 9 carrier and 9 source texels, 9 predicted, 2 solid flags, 2 for the two trace ends
328
+ * and up to 8 for clips, 2 more flags for the epilogue, 1 more and a forcing word for the forcing, 2
329
+ * confinement words with confinement, and 8 parent texels on a band row. A cell: ~81 texels, ~21
330
+ * flags, 6 confinement words with confinement, ~24 parent texels on the band's four
331
+ * rows.
332
+ *
333
+ * @type {ComputeShader}
334
+ */
335
+ export const shader_fluid_mac_advect_correct = ComputeShader.from({
336
+ label: "Fluid / MAC advect correct",
337
+ body,
338
+ resources,
339
+ });