@woosh/meep-engine 3.11.2 → 3.12.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 (551) hide show
  1. package/README.md +14 -18
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/editor/SelectionVisualizer.js +127 -127
  4. package/editor/entity_world_bounds.js +27 -27
  5. package/editor/particles/rebuildParticleEmitter.js +31 -31
  6. package/editor/process/SymbolicDisplayProcess.js +1 -1
  7. package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
  8. package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
  9. package/editor/prototypeEditorShell.js +156 -156
  10. package/editor/selection/editor_pick.js +130 -130
  11. package/editor/selection/screen_rect_frustum.js +119 -119
  12. package/editor/tools/v2/TransformControls.js +971 -971
  13. package/package.json +1 -1
  14. package/src/engine/Engine.d.ts +3 -3
  15. package/src/engine/Engine.d.ts.map +1 -1
  16. package/src/engine/Engine.js +726 -726
  17. package/src/engine/EngineHarness.d.ts +1 -1
  18. package/src/engine/EngineHarness.js +590 -590
  19. package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
  20. package/src/engine/ecs/terrain/ecs/BuildLightTexture.d.ts +1 -1
  21. package/src/engine/ecs/terrain/ecs/BuildLightTexture.js +27 -27
  22. package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -5
  23. package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
  24. package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
  25. package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
  26. package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +1 -1
  27. package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
  28. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +1 -1
  29. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
  30. package/src/engine/graphics/ecs/water/Water.d.ts +1 -1
  31. package/src/engine/graphics/ecs/water/Water.js +104 -104
  32. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +1 -1
  33. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
  34. package/src/engine/graphics3/AnimationGraphSystem.d.ts +65 -0
  35. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -0
  36. package/src/engine/graphics3/AnimationGraphSystem.js +329 -0
  37. package/src/engine/graphics3/AnimationGraphSystem3.d.ts +6 -61
  38. package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +1 -1
  39. package/src/engine/graphics3/AnimationGraphSystem3.js +6 -325
  40. package/src/engine/graphics3/AnimationSystem.d.ts +76 -0
  41. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -0
  42. package/src/engine/graphics3/AnimationSystem.js +352 -0
  43. package/src/engine/graphics3/AnimationSystem3.d.ts +6 -72
  44. package/src/engine/graphics3/AnimationSystem3.d.ts.map +1 -1
  45. package/src/engine/graphics3/AnimationSystem3.js +6 -348
  46. package/src/engine/graphics3/CameraSystem.d.ts +49 -0
  47. package/src/engine/graphics3/CameraSystem.d.ts.map +1 -0
  48. package/src/engine/graphics3/CameraSystem.js +170 -0
  49. package/src/engine/graphics3/CameraSystem3.d.ts +6 -45
  50. package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
  51. package/src/engine/graphics3/CameraSystem3.js +6 -166
  52. package/src/engine/graphics3/DebugDrawSystem.d.ts +72 -0
  53. package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -0
  54. package/src/engine/graphics3/DebugDrawSystem.js +205 -0
  55. package/src/engine/graphics3/DebugDrawSystem3.d.ts +6 -68
  56. package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +1 -1
  57. package/src/engine/graphics3/DebugDrawSystem3.js +6 -201
  58. package/src/engine/graphics3/DecalSystem.d.ts +81 -0
  59. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -0
  60. package/src/engine/graphics3/DecalSystem.js +441 -0
  61. package/src/engine/graphics3/DecalSystem3.d.ts +6 -77
  62. package/src/engine/graphics3/DecalSystem3.d.ts.map +1 -1
  63. package/src/engine/graphics3/DecalSystem3.js +6 -437
  64. package/src/engine/graphics3/FogOfWarSystem.d.ts +74 -0
  65. package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -0
  66. package/src/engine/graphics3/FogOfWarSystem.js +265 -0
  67. package/src/engine/graphics3/FogOfWarSystem3.d.ts +6 -70
  68. package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +1 -1
  69. package/src/engine/graphics3/FogOfWarSystem3.js +6 -261
  70. package/src/engine/graphics3/GraphicsEngine.d.ts +340 -0
  71. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -0
  72. package/src/engine/graphics3/GraphicsEngine.js +790 -0
  73. package/src/engine/graphics3/GraphicsEngine3.d.ts +6 -336
  74. package/src/engine/graphics3/GraphicsEngine3.d.ts.map +1 -1
  75. package/src/engine/graphics3/GraphicsEngine3.js +6 -786
  76. package/src/engine/graphics3/HighlightSystem.d.ts +82 -0
  77. package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -0
  78. package/src/engine/graphics3/HighlightSystem.js +241 -0
  79. package/src/engine/graphics3/HighlightSystem3.d.ts +6 -78
  80. package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
  81. package/src/engine/graphics3/HighlightSystem3.js +6 -237
  82. package/src/engine/graphics3/LightSystem.d.ts +40 -0
  83. package/src/engine/graphics3/LightSystem.d.ts.map +1 -0
  84. package/src/engine/graphics3/LightSystem.js +211 -0
  85. package/src/engine/graphics3/LightSystem3.d.ts +6 -36
  86. package/src/engine/graphics3/LightSystem3.d.ts.map +1 -1
  87. package/src/engine/graphics3/LightSystem3.js +6 -207
  88. package/src/engine/graphics3/MeshSystem.d.ts +106 -0
  89. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -0
  90. package/src/engine/graphics3/MeshSystem.js +647 -0
  91. package/src/engine/graphics3/MeshSystem3.d.ts +6 -102
  92. package/src/engine/graphics3/MeshSystem3.d.ts.map +1 -1
  93. package/src/engine/graphics3/MeshSystem3.js +6 -642
  94. package/src/engine/graphics3/ParticipatingMedia.d.ts +2 -2
  95. package/src/engine/graphics3/ParticipatingMedia.js +203 -203
  96. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +87 -0
  97. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -0
  98. package/src/engine/graphics3/ParticipatingMediaSystem.js +184 -0
  99. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +6 -83
  100. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -1
  101. package/src/engine/graphics3/ParticipatingMediaSystem3.js +6 -180
  102. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +76 -0
  103. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -0
  104. package/src/engine/graphics3/ParticleEmitterSystem.js +289 -0
  105. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +6 -72
  106. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
  107. package/src/engine/graphics3/ParticleEmitterSystem3.js +6 -285
  108. package/src/engine/graphics3/PathDisplaySystem.d.ts +70 -0
  109. package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -0
  110. package/src/engine/graphics3/PathDisplaySystem.js +309 -0
  111. package/src/engine/graphics3/PathDisplaySystem3.d.ts +6 -66
  112. package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +1 -1
  113. package/src/engine/graphics3/PathDisplaySystem3.js +6 -305
  114. package/src/engine/graphics3/Pickable.d.ts +1 -1
  115. package/src/engine/graphics3/Pickable.js +65 -65
  116. package/src/engine/graphics3/PickingQuery.d.ts +1 -1
  117. package/src/engine/graphics3/PickingQuery.js +48 -48
  118. package/src/engine/graphics3/PickingSystem.d.ts +67 -0
  119. package/src/engine/graphics3/PickingSystem.d.ts.map +1 -0
  120. package/src/engine/graphics3/PickingSystem.js +273 -0
  121. package/src/engine/graphics3/PickingSystem3.d.ts +6 -63
  122. package/src/engine/graphics3/PickingSystem3.d.ts.map +1 -1
  123. package/src/engine/graphics3/PickingSystem3.js +6 -269
  124. package/src/engine/graphics3/ShadedGeometrySystem.d.ts +47 -0
  125. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -0
  126. package/src/engine/graphics3/ShadedGeometrySystem.js +169 -0
  127. package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +6 -43
  128. package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +1 -1
  129. package/src/engine/graphics3/ShadedGeometrySystem3.js +6 -165
  130. package/src/engine/graphics3/TerrainSystem.d.ts +80 -0
  131. package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -0
  132. package/src/engine/graphics3/TerrainSystem.js +566 -0
  133. package/src/engine/graphics3/TerrainSystem3.d.ts +6 -76
  134. package/src/engine/graphics3/TerrainSystem3.d.ts.map +1 -1
  135. package/src/engine/graphics3/TerrainSystem3.js +6 -562
  136. package/src/engine/graphics3/TooltipComponentSystem.d.ts +65 -0
  137. package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -0
  138. package/src/engine/graphics3/TooltipComponentSystem.js +328 -0
  139. package/src/engine/graphics3/TooltipComponentSystem3.d.ts +6 -61
  140. package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +1 -1
  141. package/src/engine/graphics3/TooltipComponentSystem3.js +6 -324
  142. package/src/engine/graphics3/Trail3DSystem.d.ts +73 -0
  143. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -0
  144. package/src/engine/graphics3/Trail3DSystem.js +221 -0
  145. package/src/engine/graphics3/Trail3DSystem3.d.ts +6 -69
  146. package/src/engine/graphics3/Trail3DSystem3.d.ts.map +1 -1
  147. package/src/engine/graphics3/Trail3DSystem3.js +6 -217
  148. package/src/engine/graphics3/VolumetricLightMap.d.ts +2 -2
  149. package/src/engine/graphics3/VolumetricLightMap.js +2 -2
  150. package/src/engine/graphics3/VolumetricLightMapSystem.d.ts +98 -0
  151. package/src/engine/graphics3/VolumetricLightMapSystem.d.ts.map +1 -0
  152. package/src/engine/graphics3/VolumetricLightMapSystem.js +261 -0
  153. package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +6 -94
  154. package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +1 -1
  155. package/src/engine/graphics3/VolumetricLightMapSystem3.js +10 -261
  156. package/src/engine/graphics3/WaterSystem.d.ts +59 -0
  157. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -0
  158. package/src/engine/graphics3/WaterSystem.js +293 -0
  159. package/src/engine/graphics3/WaterSystem3.d.ts +6 -55
  160. package/src/engine/graphics3/WaterSystem3.d.ts.map +1 -1
  161. package/src/engine/graphics3/WaterSystem3.js +6 -289
  162. package/src/engine/graphics3/animation/AnimationGraphController.d.ts +1 -1
  163. package/src/engine/graphics3/animation/AnimationGraphController.js +518 -518
  164. package/src/engine/graphics3/animation/ClipListPlayer.d.ts +1 -1
  165. package/src/engine/graphics3/animation/ClipListPlayer.js +263 -263
  166. package/src/engine/graphics3/animation/ClipPlayback.d.ts +2 -2
  167. package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
  168. package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
  169. package/src/engine/graphics3/decal/graph_build_decal_clusters.js +6 -8
  170. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts +0 -7
  171. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
  172. package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +1 -1
  173. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts +0 -4
  174. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
  175. package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +1 -1
  176. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
  177. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
  178. package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
  179. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
  180. package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
  181. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
  182. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
  183. package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
  184. package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
  185. package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
  186. package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
  187. package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
  188. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts +16 -2
  189. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts.map +1 -1
  190. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +28 -4
  191. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +1 -1
  192. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  193. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +5 -2
  194. package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +564 -451
  195. package/src/shade/device/ShadeGPUCommandContext.d.ts +18 -2
  196. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  197. package/src/shade/device/ShadeGPUCommandContext.js +994 -940
  198. package/src/shade/device/immediate_data_supported.d.ts +33 -0
  199. package/src/shade/device/immediate_data_supported.d.ts.map +1 -0
  200. package/src/shade/device/immediate_data_supported.js +53 -0
  201. package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts +18 -0
  202. package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts.map +1 -1
  203. package/src/shade/device/mock/SoftwareGPUCommandEncoder.js +24 -0
  204. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts +7 -0
  205. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts.map +1 -1
  206. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.js +49 -1
  207. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  208. package/src/shade/device/mock/SoftwareGPUDevice.js +20 -2
  209. package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts +65 -0
  210. package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts.map +1 -0
  211. package/src/shade/device/mock/SoftwareGPUImmediateData.js +160 -0
  212. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts +7 -0
  213. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts.map +1 -1
  214. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.js +50 -0
  215. package/src/shade/device/mock/pipeline_immediate_size.d.ts +11 -0
  216. package/src/shade/device/mock/pipeline_immediate_size.d.ts.map +1 -0
  217. package/src/shade/device/mock/pipeline_immediate_size.js +18 -0
  218. package/src/shade/device/pipeline/PipelineLayoutManager.d.ts.map +1 -1
  219. package/src/shade/device/pipeline/PipelineLayoutManager.js +1 -0
  220. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  221. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +0 -1
  222. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  223. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +0 -1
  224. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  225. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +133 -134
  226. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
  227. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
  228. package/src/shade/renderer/GraphicsContext.d.ts +9 -2
  229. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  230. package/src/shade/renderer/GraphicsContext.js +13 -1
  231. package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
  232. package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
  233. package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
  234. package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
  235. package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
  236. package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
  237. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
  238. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
  239. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  240. package/src/shade/renderer/animation/shader_animation_tick.js +125 -126
  241. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  242. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +98 -99
  243. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  244. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +212 -213
  245. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  246. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +120 -121
  247. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  248. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +75 -76
  249. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  250. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +371 -372
  251. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
  252. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +104 -105
  253. package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
  254. package/src/shade/renderer/atmosphere/GPUSky.js +145 -142
  255. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts +34 -0
  256. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts.map +1 -0
  257. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.js +36 -0
  258. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts +20 -0
  259. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts.map +1 -0
  260. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.js +25 -0
  261. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +14 -1
  262. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
  263. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +163 -177
  264. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts +20 -0
  265. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts.map +1 -0
  266. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.js +46 -0
  267. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts +11 -1
  268. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts.map +1 -1
  269. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.js +57 -27
  270. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts +19 -1
  271. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts.map +1 -1
  272. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.js +69 -33
  273. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts +13 -0
  274. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts.map +1 -1
  275. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js +35 -35
  276. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts +13 -0
  277. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts.map +1 -0
  278. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.js +38 -0
  279. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts +17 -0
  280. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts.map +1 -0
  281. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.js +29 -0
  282. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts +21 -0
  283. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts.map +1 -0
  284. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.js +42 -0
  285. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts +2 -2
  286. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
  287. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +164 -84
  288. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
  289. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +215 -204
  290. package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts.map +1 -1
  291. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +79 -67
  292. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +136 -136
  293. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  294. package/src/shade/renderer/buffer/table/GPUDatabase.js +2 -3
  295. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +319 -319
  296. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  297. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +41 -42
  298. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
  299. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
  300. package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
  301. package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
  302. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
  303. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +4 -4
  304. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  305. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +121 -122
  306. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +774 -774
  307. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
  308. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  309. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +69 -70
  310. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
  311. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +184 -184
  312. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
  313. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
  314. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  315. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +142 -143
  316. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  317. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +0 -1
  318. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  319. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +140 -141
  320. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  321. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +0 -1
  322. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  323. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +0 -1
  324. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
  325. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
  326. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
  327. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
  328. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
  329. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
  330. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
  331. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
  332. package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
  333. package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +10 -9
  334. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
  335. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
  336. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +1 -1
  337. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
  338. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
  339. package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
  340. package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
  341. package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
  342. package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
  343. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
  344. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
  345. package/src/shade/renderer/particles/prototypeParticleSystem.js +2 -3
  346. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  347. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +117 -118
  348. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  349. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +77 -79
  350. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
  351. package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
  352. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  353. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +99 -100
  354. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  355. package/src/shade/renderer/particles/sort/shader_particle_sort.js +158 -161
  356. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
  357. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +119 -119
  358. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +3 -4
  359. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  360. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +266 -267
  361. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  362. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +270 -271
  363. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  364. package/src/shade/renderer/postprocess/gtao/GTAO.js +4 -0
  365. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  366. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +68 -69
  367. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
  368. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
  369. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
  370. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
  371. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  372. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
  373. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
  374. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
  375. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
  376. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
  377. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
  378. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  379. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +341 -345
  380. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
  381. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +68 -69
  382. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
  383. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
  384. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +0 -2
  385. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  386. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +57 -57
  387. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
  388. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +64 -65
  389. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
  390. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
  391. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
  392. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
  393. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  394. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +109 -110
  395. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  396. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +115 -116
  397. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
  398. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
  399. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
  400. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
  401. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
  402. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +88 -89
  403. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
  404. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +90 -91
  405. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  406. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +65 -66
  407. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
  408. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +89 -90
  409. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
  410. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
  411. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
  412. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +7 -3
  413. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
  414. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +89 -90
  415. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
  416. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
  417. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
  418. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +153 -154
  419. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
  420. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +77 -81
  421. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
  422. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
  423. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
  424. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
  425. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
  426. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
  427. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
  428. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
  429. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +5 -1
  430. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  431. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +136 -137
  432. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  433. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +129 -130
  434. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  435. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +99 -100
  436. package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
  437. package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
  438. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +383 -383
  439. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
  440. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
  441. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
  442. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
  443. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
  444. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
  445. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
  446. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  447. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +0 -1
  448. package/src/shade/renderer/shader/ComputeShader.d.ts +24 -3
  449. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  450. package/src/shade/renderer/shader/ComputeShader.js +350 -292
  451. package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
  452. package/src/shade/renderer/shader/ImageShader.js +217 -214
  453. package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
  454. package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
  455. package/src/shade/renderer/shader/ShaderDescriptor.js +46 -0
  456. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts +18 -0
  457. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts.map +1 -0
  458. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js +32 -0
  459. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts +7 -0
  460. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts.map +1 -1
  461. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.js +17 -6
  462. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts +21 -0
  463. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts.map +1 -0
  464. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js +69 -0
  465. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts +9 -0
  466. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts.map +1 -0
  467. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.js +22 -0
  468. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts +16 -0
  469. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts.map +1 -0
  470. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.js +41 -0
  471. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts +11 -0
  472. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts.map +1 -1
  473. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.js +15 -19
  474. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts +23 -0
  475. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts.map +1 -0
  476. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.js +44 -0
  477. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.d.ts.map +1 -1
  478. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js +1 -4
  479. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +7 -1
  480. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts.map +1 -1
  481. package/src/shade/renderer/shader/compiler/CodeChunk.js +37 -2
  482. package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.d.ts.map +1 -1
  483. package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.js +6 -0
  484. package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.js +1 -1
  485. package/src/shade/renderer/shader/graph/compute/graph_compute_pass.js +1 -1
  486. package/src/shade/renderer/shader/graph/graph_image_pass.js +1 -1
  487. package/src/shade/renderer/shader/graph/graph_prepare_bindings.d.ts.map +1 -1
  488. package/src/shade/renderer/shader/graph/graph_prepare_bindings.js +7 -0
  489. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts +3 -1
  490. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts.map +1 -1
  491. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.js +12 -1
  492. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  493. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +1 -0
  494. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts +21 -0
  495. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts.map +1 -0
  496. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.js +21 -0
  497. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts +59 -1
  498. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  499. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +195 -2
  500. package/src/shade/renderer/shader/type/type_has_arrays.d.ts +14 -0
  501. package/src/shade/renderer/shader/type/type_has_arrays.d.ts.map +1 -0
  502. package/src/shade/renderer/shader/type/type_has_arrays.js +33 -0
  503. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
  504. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
  505. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
  506. package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
  507. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +3 -3
  508. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +2 -2
  509. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +4 -4
  510. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  511. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +231 -232
  512. package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +1 -1
  513. package/src/shade/renderer/view/GPUViewSkyContext.js +169 -173
  514. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
  515. package/src/shade/renderer/volumetrics/NOTES.md +238 -0
  516. package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.js +145 -145
  517. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.d.ts.map +1 -1
  518. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.js +38 -15
  519. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +14 -2
  520. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  521. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +591 -577
  522. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +17 -0
  523. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  524. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +20 -2
  525. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
  526. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +29 -18
  527. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +260 -260
  528. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts +53 -3
  529. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -1
  530. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +175 -59
  531. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
  532. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
  533. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
  534. package/src/shade/renderer/water/shader_water.js +246 -246
  535. package/src/shade/vitest.setup.mjs +1 -1
  536. package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
  537. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +8 -1
  538. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  539. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +1325 -1297
  540. package/src/view/minimap/Minimap.d.ts +2 -2
  541. package/src/view/minimap/Minimap.d.ts.map +1 -1
  542. package/src/view/minimap/Minimap.js +225 -225
  543. package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
  544. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  545. package/src/view/minimap/dom/MinimapCameraView.js +206 -206
  546. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
  547. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
  548. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
  549. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts +0 -2
  550. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts.map +0 -1
  551. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.js +0 -1
@@ -0,0 +1,289 @@
1
+ import { assert } from "../../core/assert.js";
2
+ import { FramePhase } from "../../shade/renderer/extension/FramePhase.js";
3
+ import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.js";
4
+ import { SceneColor } from "../../shade/renderer/extension/SceneColor.js";
5
+ import { ViewTextures } from "../../shade/renderer/extension/ViewTextures.js";
6
+ import { ImageRGBADataLoader } from "../asset/loaders/image/ImageRGBADataLoader.js";
7
+ import { System } from "../ecs/System.js";
8
+ import { Transform } from "../ecs/transform/Transform.js";
9
+ import { ParticleEmitter } from "../graphics/particles/particular/engine/emitter/ParticleEmitter.js";
10
+ import { ParticleEmitterFlag } from "../graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js";
11
+ import { ParticularEngine } from "../graphics/particles/particular/engine/ParticularEngine.js";
12
+ import { GPUParticularRenderer } from "./particles/GPUParticularRenderer.js";
13
+
14
+ /**
15
+ * Draws the game's particle effects under Shade.
16
+ *
17
+ * **The simulation does not move.** `particular` emits, ages, integrates and colours particles on
18
+ * the CPU, and that is where it stays: the plan makes Shade's GPU particle system a later, opt-in
19
+ * upgrade rather than this port. What changes is only what happens to the state it produces each
20
+ * frame — instead of a three `Points` object per emitter, it is packed into the layout Shade's own
21
+ * billboard renderer reads.
22
+ *
23
+ * **No visibility layer comes across.** The legacy system drives a render layer backed by a BVH and
24
+ * puts emitters to sleep when they leave the visible set; §4.5 retires CPU render culling, so every
25
+ * linked emitter simulates and the GPU decides what is on screen. An emitter that should not
26
+ * simulate says so itself, through {@link ParticleEmitterFlag.Emitting}.
27
+ */
28
+ export class ParticleEmitterSystem extends System {
29
+ dependencies = [ParticleEmitter, Transform];
30
+
31
+ /**
32
+ * @type {GraphicsEngine}
33
+ */
34
+ #graphics;
35
+
36
+ /**
37
+ * @type {AssetManager}
38
+ */
39
+ #assets;
40
+
41
+ /**
42
+ * @type {ParticularEngine}
43
+ */
44
+ #engine;
45
+
46
+ /**
47
+ * @type {GPUParticularRenderer}
48
+ */
49
+ #renderer = new GPUParticularRenderer();
50
+
51
+ /**
52
+ * The emitters to simulate and draw, in link order.
53
+ *
54
+ * @type {ParticleEmitter[]}
55
+ */
56
+ #emitters = [];
57
+
58
+ /**
59
+ * @type {Map<number, {emitter: ParticleEmitter, position: Function, rotation: Function, scale: Function}>}
60
+ */
61
+ #entries = new Map();
62
+
63
+ /**
64
+ * @type {RenderExtension|null}
65
+ */
66
+ #extension = null;
67
+
68
+ /**
69
+ * What the pass draws. Read-only — the emitters follow the entities.
70
+ *
71
+ * @returns {ParticleEmitter[]}
72
+ */
73
+ get emitters() {
74
+ return this.#emitters;
75
+ }
76
+
77
+ /**
78
+ * @param {GraphicsEngine} graphics
79
+ * @param {AssetManager} assets
80
+ */
81
+ constructor(graphics, assets) {
82
+ super();
83
+
84
+ assert.defined(graphics, 'graphics');
85
+ assert.defined(assets, 'assets');
86
+
87
+ this.#graphics = graphics;
88
+ this.#assets = assets;
89
+
90
+ this.#engine = new ParticularEngine(assets);
91
+ }
92
+
93
+ async startup(entityManager) {
94
+ this.entityManager = entityManager;
95
+
96
+ this.#extension = this.#graphics.add_extension(new ParticleExtension(this));
97
+
98
+ const assets = this.#assets;
99
+
100
+ if (!assets.hasLoaderForType('image')) {
101
+ await assets.registerLoader('image', new ImageRGBADataLoader());
102
+ }
103
+ }
104
+
105
+ async shutdown(entityManager) {
106
+ if (this.#extension !== null) {
107
+ this.#graphics.remove_extension(this.#extension);
108
+
109
+ this.#extension = null;
110
+ }
111
+
112
+ this.#renderer.destroy();
113
+
114
+ // every emitter has been unlinked by this point — both teardown paths detach the dataset or
115
+ // remove the system observer first — so what is left is the shared sprite atlas
116
+ this.#engine.dispose();
117
+
118
+ this.#emitters.length = 0;
119
+ this.#entries.clear();
120
+ }
121
+
122
+ /**
123
+ * @param {ParticleEmitter} emitter
124
+ * @param {Transform} transform
125
+ * @param {number} entity
126
+ */
127
+ link(emitter, transform, entity) {
128
+ const position = (x, y, z) => emitter.position.set(x, y, z);
129
+ const rotation = (x, y, z, w) => emitter.rotation.set(x, y, z, w);
130
+ const scale = (x, y, z) => emitter.scale.set(x, y, z);
131
+
132
+ transform.position.process(position);
133
+ transform.rotation.process(rotation);
134
+ transform.scale.process(scale);
135
+
136
+ this.#entries.set(entity, { emitter, position, rotation, scale });
137
+
138
+ emitter.id = entity;
139
+
140
+ /*
141
+ Awake from the start. The legacy system links emitters asleep and lets its visibility layer
142
+ wake them; there is no such layer here, and an emitter that never wakes never emits.
143
+ */
144
+ emitter.clearFlag(ParticleEmitterFlag.Sleeping);
145
+
146
+ this.#engine.add(emitter);
147
+
148
+ this.#emitters.push(emitter);
149
+ }
150
+
151
+ /**
152
+ * Rebuild an emitter that has been edited structurally — layers added or removed, a sprite
153
+ * changed, a parameter curve redrawn.
154
+ *
155
+ * The pool, the parameter tracks and the atlas references are all built from the emitter's
156
+ * description, so an edit to that description is only visible once they are built again. Sleep
157
+ * state is preserved because it is the editor's, not the emitter's.
158
+ *
159
+ * @param {ParticleEmitter} emitter one this system has linked
160
+ */
161
+ rebuild(emitter) {
162
+ assert.ok(this.#emitters.includes(emitter), 'emitter is not linked to this system');
163
+
164
+ const engine = this.#engine;
165
+
166
+ const sleeping = emitter.getFlag(ParticleEmitterFlag.Sleeping);
167
+
168
+ engine.remove(emitter);
169
+
170
+ emitter.clearFlag(ParticleEmitterFlag.Built | ParticleEmitterFlag.Initialized);
171
+
172
+ emitter.registerLayerParameters();
173
+ emitter.build();
174
+ emitter.initialize();
175
+ emitter.computeBoundingBox();
176
+
177
+ engine.add(emitter);
178
+
179
+ emitter.writeFlag(ParticleEmitterFlag.Sleeping, sleeping);
180
+ }
181
+
182
+ /**
183
+ * @param {ParticleEmitter} emitter
184
+ * @param {Transform} transform
185
+ * @param {number} entity
186
+ */
187
+ unlink(emitter, transform, entity) {
188
+ const entry = this.#entries.get(entity);
189
+
190
+ if (entry === undefined) {
191
+ return;
192
+ }
193
+
194
+ transform.position.onChanged.remove(entry.position);
195
+ transform.rotation.onChanged.remove(entry.rotation);
196
+ transform.scale.onChanged.remove(entry.scale);
197
+
198
+ this.#entries.delete(entity);
199
+
200
+ const index = this.#emitters.indexOf(emitter);
201
+
202
+ if (index !== -1) {
203
+ this.#emitters.splice(index, 1);
204
+ }
205
+
206
+ this.#engine.remove(emitter);
207
+
208
+ emitter.dispose();
209
+ }
210
+
211
+ update(timeDelta) {
212
+ this.#engine.advance(timeDelta);
213
+
214
+ const emitters = this.#emitters;
215
+
216
+ for (let i = 0; i < emitters.length; i++) {
217
+ // retires dead particles and compacts the pool, which is what makes the live ones a
218
+ // contiguous run for the packer
219
+ emitters[i].update();
220
+ }
221
+
222
+ // repacks the sprite atlas when an effect has brought a new sprite in
223
+ this.#engine.shaderManager.spriteAtlas.atlas.update();
224
+ }
225
+
226
+ /**
227
+ * @param {FrameContext} frame
228
+ */
229
+ record(frame) {
230
+ const emitters = this.#emitters;
231
+
232
+ if (emitters.length === 0) {
233
+ return;
234
+ }
235
+
236
+ const camera_context = frame.view.camera;
237
+
238
+ // the camera's world transform, whose first two columns are the axes a billboard is built on
239
+ const m = camera_context.camera.transform.matrix;
240
+
241
+ /*
242
+ The particles are packed and uploaded inside the pass rather than here: that needs a
243
+ `GraphicsContext`, which the frame graph hands out at execution time and the frame does not
244
+ carry. So the pass is recorded whether or not anything is alive, and draws nothing when
245
+ nothing is — which leaves the frame's colour exactly as it was either way.
246
+ */
247
+ const scene = frame.get(SceneColor);
248
+
249
+ scene.color = this.#renderer.graph_draw({
250
+ graph: frame.graph,
251
+ color: scene.color,
252
+ depth: frame.get(ViewTextures).depth,
253
+ camera: camera_context.buffer,
254
+ emitters,
255
+ atlas: this.#engine.shaderManager.spriteAtlas.atlas.sampler,
256
+ camera_position: [m[12], m[13], m[14]],
257
+ camera_right: [m[0], m[1], m[2]],
258
+ camera_up: [m[4], m[5], m[6]]
259
+ });
260
+ }
261
+ }
262
+
263
+ /**
264
+ * Emitters draw into the scene, so they are subject to the fog of war that conceals it — which is
265
+ * a declaration on the fog rather than a placement here.
266
+ */
267
+ export class ParticleExtension extends RenderExtension {
268
+ name = "particles";
269
+
270
+ phase = FramePhase.AfterTransparency;
271
+
272
+ /**
273
+ * @type {ParticleEmitterSystem}
274
+ */
275
+ #system;
276
+
277
+ /**
278
+ * @param {ParticleEmitterSystem} system
279
+ */
280
+ constructor(system) {
281
+ super();
282
+
283
+ this.#system = system;
284
+ }
285
+
286
+ record(frame) {
287
+ this.#system.record(frame);
288
+ }
289
+ }
@@ -1,76 +1,10 @@
1
1
  /**
2
- * Draws the game's particle effects under Shade.
2
+ * @deprecated Renamed to {@link ParticleEmitterSystem}. The trailing `3` marked the 2.x 3.x renderer transition;
3
+ * the 2.x name it disambiguated against is gone, so the suffix no longer distinguishes anything.
3
4
  *
4
- * **The simulation does not move.** `particular` emits, ages, integrates and colours particles on
5
- * the CPU, and that is where it stays: the plan makes Shade's GPU particle system a later, opt-in
6
- * upgrade rather than this port. What changes is only what happens to the state it produces each
7
- * frame — instead of a three `Points` object per emitter, it is packed into the layout Shade's own
8
- * billboard renderer reads.
9
- *
10
- * **No visibility layer comes across.** The legacy system drives a render layer backed by a BVH and
11
- * puts emitters to sleep when they leave the visible set; §4.5 retires CPU render culling, so every
12
- * linked emitter simulates and the GPU decides what is on screen. An emitter that should not
13
- * simulate says so itself, through {@link ParticleEmitterFlag.Emitting}.
14
- */
15
- export class ParticleEmitterSystem3 extends System<any> {
16
- /**
17
- * @param {GraphicsEngine3} graphics
18
- * @param {AssetManager} assets
19
- */
20
- constructor(graphics: GraphicsEngine3, assets: AssetManager);
21
- dependencies: (typeof Transform | typeof ParticleEmitter)[];
22
- /**
23
- * What the pass draws. Read-only — the emitters follow the entities.
24
- *
25
- * @returns {ParticleEmitter[]}
26
- */
27
- get emitters(): ParticleEmitter[];
28
- startup(entityManager: any): Promise<void>;
29
- shutdown(entityManager: any): Promise<void>;
30
- /**
31
- * @param {ParticleEmitter} emitter
32
- * @param {Transform} transform
33
- * @param {number} entity
34
- */
35
- link(emitter: ParticleEmitter, transform: Transform, entity: number): void;
36
- /**
37
- * Rebuild an emitter that has been edited structurally — layers added or removed, a sprite
38
- * changed, a parameter curve redrawn.
39
- *
40
- * The pool, the parameter tracks and the atlas references are all built from the emitter's
41
- * description, so an edit to that description is only visible once they are built again. Sleep
42
- * state is preserved because it is the editor's, not the emitter's.
43
- *
44
- * @param {ParticleEmitter} emitter one this system has linked
45
- */
46
- rebuild(emitter: ParticleEmitter): void;
47
- /**
48
- * @param {ParticleEmitter} emitter
49
- * @param {Transform} transform
50
- * @param {number} entity
51
- */
52
- unlink(emitter: ParticleEmitter, transform: Transform, entity: number): void;
53
- update(timeDelta: any): void;
54
- /**
55
- * @param {FrameContext} frame
56
- */
57
- record(frame: FrameContext): void;
58
- #private;
59
- }
60
- /**
61
- * Emitters draw into the scene, so they are subject to the fog of war that conceals it — which is
62
- * a declaration on the fog rather than a placement here.
5
+ * Kept as a re-export rather than removed: this is a library, and an import path is as much a
6
+ * published interface as a class name.
63
7
  */
64
- export class ParticleExtension extends RenderExtension {
65
- /**
66
- * @param {ParticleEmitterSystem3} system
67
- */
68
- constructor(system: ParticleEmitterSystem3);
69
- record(frame: any): void;
70
- #private;
71
- }
72
- import { System } from "../ecs/System.js";
73
- import { Transform } from "../ecs/transform/Transform.js";
74
- import { ParticleEmitter } from "../graphics/particles/particular/engine/emitter/ParticleEmitter.js";
75
- import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.js";
8
+ export const ParticleEmitterSystem3: typeof ParticleEmitterSystem;
9
+ import { ParticleEmitterSystem } from "./ParticleEmitterSystem.js";
76
10
  //# sourceMappingURL=ParticleEmitterSystem3.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ParticleEmitterSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/ParticleEmitterSystem3.js"],"names":[],"mappings":"AAaA;;;;;;;;;;;;;GAaG;AACH;IAiDI;;;OAGG;IACH,6DAUC;IA9DD,4DAA4C;IAuC5C;;;;OAIG;IACH,kCAEC;IAkBD,2CAUC;IAED,4CAeC;IAED;;;;OAIG;IACH,cAJW,eAAe,aACf,SAAS,UACT,MAAM,QAwBhB;IAED;;;;;;;;;OASG;IACH,iBAFW,eAAe,QAqBzB;IAED;;;;OAIG;IACH,gBAJW,eAAe,aACf,SAAS,UACT,MAAM,QAwBhB;IAED,6BAaC;IAED;;OAEG;IACH,kCA+BC;;CACJ;AAED;;;GAGG;AACH;IAUI;;OAEG;IACH,oBAFW,sBAAsB,EAMhC;IAED,yBAEC;;CACJ;uBA1RsB,kBAAkB;0BACf,+BAA+B;gCACzB,oEAAoE;gCANpE,mDAAmD"}
1
+ {"version":3,"file":"ParticleEmitterSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/ParticleEmitterSystem3.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,kEAA4D;sCATtB,4BAA4B"}
@@ -1,289 +1,10 @@
1
- import { assert } from "../../core/assert.js";
2
- import { FramePhase } from "../../shade/renderer/extension/FramePhase.js";
3
- import { RenderExtension } from "../../shade/renderer/extension/RenderExtension.js";
4
- import { SceneColor } from "../../shade/renderer/extension/SceneColor.js";
5
- import { ViewTextures } from "../../shade/renderer/extension/ViewTextures.js";
6
- import { ImageRGBADataLoader } from "../asset/loaders/image/ImageRGBADataLoader.js";
7
- import { System } from "../ecs/System.js";
8
- import { Transform } from "../ecs/transform/Transform.js";
9
- import { ParticleEmitter } from "../graphics/particles/particular/engine/emitter/ParticleEmitter.js";
10
- import { ParticleEmitterFlag } from "../graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js";
11
- import { ParticularEngine } from "../graphics/particles/particular/engine/ParticularEngine.js";
12
- import { GPUParticularRenderer } from "./particles/GPUParticularRenderer.js";
1
+ import { ParticleEmitterSystem } from "./ParticleEmitterSystem.js";
13
2
 
14
3
  /**
15
- * Draws the game's particle effects under Shade.
4
+ * @deprecated Renamed to {@link ParticleEmitterSystem}. The trailing `3` marked the 2.x 3.x renderer transition;
5
+ * the 2.x name it disambiguated against is gone, so the suffix no longer distinguishes anything.
16
6
  *
17
- * **The simulation does not move.** `particular` emits, ages, integrates and colours particles on
18
- * the CPU, and that is where it stays: the plan makes Shade's GPU particle system a later, opt-in
19
- * upgrade rather than this port. What changes is only what happens to the state it produces each
20
- * frame — instead of a three `Points` object per emitter, it is packed into the layout Shade's own
21
- * billboard renderer reads.
22
- *
23
- * **No visibility layer comes across.** The legacy system drives a render layer backed by a BVH and
24
- * puts emitters to sleep when they leave the visible set; §4.5 retires CPU render culling, so every
25
- * linked emitter simulates and the GPU decides what is on screen. An emitter that should not
26
- * simulate says so itself, through {@link ParticleEmitterFlag.Emitting}.
7
+ * Kept as a re-export rather than removed: this is a library, and an import path is as much a
8
+ * published interface as a class name.
27
9
  */
28
- export class ParticleEmitterSystem3 extends System {
29
- dependencies = [ParticleEmitter, Transform];
30
-
31
- /**
32
- * @type {GraphicsEngine3}
33
- */
34
- #graphics;
35
-
36
- /**
37
- * @type {AssetManager}
38
- */
39
- #assets;
40
-
41
- /**
42
- * @type {ParticularEngine}
43
- */
44
- #engine;
45
-
46
- /**
47
- * @type {GPUParticularRenderer}
48
- */
49
- #renderer = new GPUParticularRenderer();
50
-
51
- /**
52
- * The emitters to simulate and draw, in link order.
53
- *
54
- * @type {ParticleEmitter[]}
55
- */
56
- #emitters = [];
57
-
58
- /**
59
- * @type {Map<number, {emitter: ParticleEmitter, position: Function, rotation: Function, scale: Function}>}
60
- */
61
- #entries = new Map();
62
-
63
- /**
64
- * @type {RenderExtension|null}
65
- */
66
- #extension = null;
67
-
68
- /**
69
- * What the pass draws. Read-only — the emitters follow the entities.
70
- *
71
- * @returns {ParticleEmitter[]}
72
- */
73
- get emitters() {
74
- return this.#emitters;
75
- }
76
-
77
- /**
78
- * @param {GraphicsEngine3} graphics
79
- * @param {AssetManager} assets
80
- */
81
- constructor(graphics, assets) {
82
- super();
83
-
84
- assert.defined(graphics, 'graphics');
85
- assert.defined(assets, 'assets');
86
-
87
- this.#graphics = graphics;
88
- this.#assets = assets;
89
-
90
- this.#engine = new ParticularEngine(assets);
91
- }
92
-
93
- async startup(entityManager) {
94
- this.entityManager = entityManager;
95
-
96
- this.#extension = this.#graphics.add_extension(new ParticleExtension(this));
97
-
98
- const assets = this.#assets;
99
-
100
- if (!assets.hasLoaderForType('image')) {
101
- await assets.registerLoader('image', new ImageRGBADataLoader());
102
- }
103
- }
104
-
105
- async shutdown(entityManager) {
106
- if (this.#extension !== null) {
107
- this.#graphics.remove_extension(this.#extension);
108
-
109
- this.#extension = null;
110
- }
111
-
112
- this.#renderer.destroy();
113
-
114
- // every emitter has been unlinked by this point — both teardown paths detach the dataset or
115
- // remove the system observer first — so what is left is the shared sprite atlas
116
- this.#engine.dispose();
117
-
118
- this.#emitters.length = 0;
119
- this.#entries.clear();
120
- }
121
-
122
- /**
123
- * @param {ParticleEmitter} emitter
124
- * @param {Transform} transform
125
- * @param {number} entity
126
- */
127
- link(emitter, transform, entity) {
128
- const position = (x, y, z) => emitter.position.set(x, y, z);
129
- const rotation = (x, y, z, w) => emitter.rotation.set(x, y, z, w);
130
- const scale = (x, y, z) => emitter.scale.set(x, y, z);
131
-
132
- transform.position.process(position);
133
- transform.rotation.process(rotation);
134
- transform.scale.process(scale);
135
-
136
- this.#entries.set(entity, { emitter, position, rotation, scale });
137
-
138
- emitter.id = entity;
139
-
140
- /*
141
- Awake from the start. The legacy system links emitters asleep and lets its visibility layer
142
- wake them; there is no such layer here, and an emitter that never wakes never emits.
143
- */
144
- emitter.clearFlag(ParticleEmitterFlag.Sleeping);
145
-
146
- this.#engine.add(emitter);
147
-
148
- this.#emitters.push(emitter);
149
- }
150
-
151
- /**
152
- * Rebuild an emitter that has been edited structurally — layers added or removed, a sprite
153
- * changed, a parameter curve redrawn.
154
- *
155
- * The pool, the parameter tracks and the atlas references are all built from the emitter's
156
- * description, so an edit to that description is only visible once they are built again. Sleep
157
- * state is preserved because it is the editor's, not the emitter's.
158
- *
159
- * @param {ParticleEmitter} emitter one this system has linked
160
- */
161
- rebuild(emitter) {
162
- assert.ok(this.#emitters.includes(emitter), 'emitter is not linked to this system');
163
-
164
- const engine = this.#engine;
165
-
166
- const sleeping = emitter.getFlag(ParticleEmitterFlag.Sleeping);
167
-
168
- engine.remove(emitter);
169
-
170
- emitter.clearFlag(ParticleEmitterFlag.Built | ParticleEmitterFlag.Initialized);
171
-
172
- emitter.registerLayerParameters();
173
- emitter.build();
174
- emitter.initialize();
175
- emitter.computeBoundingBox();
176
-
177
- engine.add(emitter);
178
-
179
- emitter.writeFlag(ParticleEmitterFlag.Sleeping, sleeping);
180
- }
181
-
182
- /**
183
- * @param {ParticleEmitter} emitter
184
- * @param {Transform} transform
185
- * @param {number} entity
186
- */
187
- unlink(emitter, transform, entity) {
188
- const entry = this.#entries.get(entity);
189
-
190
- if (entry === undefined) {
191
- return;
192
- }
193
-
194
- transform.position.onChanged.remove(entry.position);
195
- transform.rotation.onChanged.remove(entry.rotation);
196
- transform.scale.onChanged.remove(entry.scale);
197
-
198
- this.#entries.delete(entity);
199
-
200
- const index = this.#emitters.indexOf(emitter);
201
-
202
- if (index !== -1) {
203
- this.#emitters.splice(index, 1);
204
- }
205
-
206
- this.#engine.remove(emitter);
207
-
208
- emitter.dispose();
209
- }
210
-
211
- update(timeDelta) {
212
- this.#engine.advance(timeDelta);
213
-
214
- const emitters = this.#emitters;
215
-
216
- for (let i = 0; i < emitters.length; i++) {
217
- // retires dead particles and compacts the pool, which is what makes the live ones a
218
- // contiguous run for the packer
219
- emitters[i].update();
220
- }
221
-
222
- // repacks the sprite atlas when an effect has brought a new sprite in
223
- this.#engine.shaderManager.spriteAtlas.atlas.update();
224
- }
225
-
226
- /**
227
- * @param {FrameContext} frame
228
- */
229
- record(frame) {
230
- const emitters = this.#emitters;
231
-
232
- if (emitters.length === 0) {
233
- return;
234
- }
235
-
236
- const camera_context = frame.view.camera;
237
-
238
- // the camera's world transform, whose first two columns are the axes a billboard is built on
239
- const m = camera_context.camera.transform.matrix;
240
-
241
- /*
242
- The particles are packed and uploaded inside the pass rather than here: that needs a
243
- `GraphicsContext`, which the frame graph hands out at execution time and the frame does not
244
- carry. So the pass is recorded whether or not anything is alive, and draws nothing when
245
- nothing is — which leaves the frame's colour exactly as it was either way.
246
- */
247
- const scene = frame.get(SceneColor);
248
-
249
- scene.color = this.#renderer.graph_draw({
250
- graph: frame.graph,
251
- color: scene.color,
252
- depth: frame.get(ViewTextures).depth,
253
- camera: camera_context.buffer,
254
- emitters,
255
- atlas: this.#engine.shaderManager.spriteAtlas.atlas.sampler,
256
- camera_position: [m[12], m[13], m[14]],
257
- camera_right: [m[0], m[1], m[2]],
258
- camera_up: [m[4], m[5], m[6]]
259
- });
260
- }
261
- }
262
-
263
- /**
264
- * Emitters draw into the scene, so they are subject to the fog of war that conceals it — which is
265
- * a declaration on the fog rather than a placement here.
266
- */
267
- export class ParticleExtension extends RenderExtension {
268
- name = "particles";
269
-
270
- phase = FramePhase.AfterTransparency;
271
-
272
- /**
273
- * @type {ParticleEmitterSystem3}
274
- */
275
- #system;
276
-
277
- /**
278
- * @param {ParticleEmitterSystem3} system
279
- */
280
- constructor(system) {
281
- super();
282
-
283
- this.#system = system;
284
- }
285
-
286
- record(frame) {
287
- this.#system.record(frame);
288
- }
289
- }
10
+ export const ParticleEmitterSystem3 = ParticleEmitterSystem;