@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,261 @@
1
+ import { assert } from "../../core/assert.js";
2
+ import {
3
+ brick4_empty_gpu_structure
4
+ } from "../../shade/renderer/global_illumination/brick4/cpu/brick4_empty_gpu_structure.js";
5
+ import { System } from "../ecs/System.js";
6
+ import { VolumetricLightMap } from "./VolumetricLightMap.js";
7
+
8
+ /**
9
+ * Feeds the scene's baked volumetric lightmap to the GPU, and takes it away again.
10
+ *
11
+ * **The whole system is one buffer's worth of state.** Shade keeps a single `Brick4LightMap` on the
12
+ * scene's GPU context; a `VolumetricLightMap` component is a claim on it. So unlike the systems
13
+ * around it there is no per-entity object to build and place — there is one upload, and the work is
14
+ * deciding when it has to happen.
15
+ *
16
+ * **A scene has one lightmap, so a second claim waits rather than wins.** {@link active} is the
17
+ * *first* component to link and stays that way until it unlinks, at which point the next in line
18
+ * takes over. The alternative — last writer wins — makes the scene's lighting depend on the order
19
+ * entities happened to be built in, which is not a thing a level author controls. Swapping one map
20
+ * for another is therefore: remove the old component, add the new one.
21
+ *
22
+ * **The upload is decided in {@link update}, not in {@link link}.** A lightmap arrives whenever its
23
+ * level does, including before the renderer has a device — `scene_context` answers `null` until one
24
+ * exists, and answers with a *different* context after a restart, whose buffer is empty again. Both
25
+ * are the same question asked once a frame: is what the GPU holds still what the components say. A
26
+ * link is therefore eventually consistent, by at most one frame.
27
+ *
28
+ * **Unlinking uploads an empty map rather than leaving the last one there.** There is no way to
29
+ * un-upload — the shader reads the buffer unconditionally in Brick4 mode — so a component that
30
+ * removed itself and left the scene lit exactly as before would make the lifetime a fiction. A
31
+ * claim carrying nothing usable resolves the same way; see {@link volumetric_light_map_payload}.
32
+ *
33
+ * **What this does not do is turn Brick4 on.** Which indirect-lighting technique a frame uses is the
34
+ * renderer's setting, and a scene in IBL or LPV mode never reads this buffer no matter what is in
35
+ * it. Uploading a lightmap is necessary for Brick4 lighting and not sufficient for it.
36
+ *
37
+ * @see VolumetricLightMap
38
+ */
39
+ export class VolumetricLightMapSystem extends System {
40
+
41
+ dependencies = [VolumetricLightMap];
42
+
43
+ /**
44
+ * @type {GraphicsEngine}
45
+ */
46
+ #graphics;
47
+
48
+ /**
49
+ * @type {Scene}
50
+ */
51
+ #scene;
52
+
53
+ /**
54
+ * Every entity claiming the scene's lightmap, oldest first.
55
+ *
56
+ * @type {{entity: number, component: VolumetricLightMap}[]}
57
+ */
58
+ #entries = [];
59
+
60
+ /**
61
+ * The context the buffer currently holding {@link #uploaded} belongs to.
62
+ *
63
+ * @type {GPUSceneContext|null}
64
+ */
65
+ #context = null;
66
+
67
+ /**
68
+ * Whose bytes the GPU is holding, `null` when it is holding none.
69
+ *
70
+ * @type {VolumetricLightMap|null}
71
+ */
72
+ #uploaded = null;
73
+
74
+ /**
75
+ * {@link VolumetricLightMap.version} as of that upload. A component can replace its bytes
76
+ * without ever leaving the scene, and this is how that is noticed.
77
+ *
78
+ * @type {number}
79
+ */
80
+ #uploaded_version = -1;
81
+
82
+ /**
83
+ * The component the scene is lit from, or `null` when nothing claims it.
84
+ *
85
+ * Read-only — it follows the entities. What the GPU holds catches up with this on the next
86
+ * {@link update}.
87
+ *
88
+ * @returns {VolumetricLightMap|null}
89
+ */
90
+ get active() {
91
+ const entries = this.#entries;
92
+
93
+ return entries.length === 0 ? null : entries[0].component;
94
+ }
95
+
96
+ /**
97
+ * @param {GraphicsEngine} graphics
98
+ * @param {Scene} scene
99
+ */
100
+ constructor(graphics, scene) {
101
+ super();
102
+
103
+ assert.defined(graphics, 'graphics');
104
+ assert.defined(scene, 'scene');
105
+
106
+ this.#graphics = graphics;
107
+ this.#scene = scene;
108
+ }
109
+
110
+ async startup(entityManager) {
111
+ this.entityManager = entityManager;
112
+ }
113
+
114
+ async shutdown(entityManager) {
115
+ this.#entries.length = 0;
116
+
117
+ if (this.#uploaded !== null) {
118
+ // the renderer outlives the entity manager, so the scene is left unlit rather than lit
119
+ // by a level that is no longer loaded
120
+ this.#sync();
121
+ }
122
+
123
+ this.#forget();
124
+ }
125
+
126
+ /**
127
+ * @param {VolumetricLightMap} map
128
+ * @param {number} entity
129
+ */
130
+ link(map, entity) {
131
+ this.#entries.push({ entity, component: map });
132
+ }
133
+
134
+ /**
135
+ * @param {VolumetricLightMap} map
136
+ * @param {number} entity
137
+ */
138
+ unlink(map, entity) {
139
+ const entries = this.#entries;
140
+
141
+ const index = entries.findIndex(entry => entry.entity === entity);
142
+
143
+ if (index === -1) {
144
+ return;
145
+ }
146
+
147
+ entries.splice(index, 1);
148
+ }
149
+
150
+ /**
151
+ * @param {number} time_delta_seconds
152
+ */
153
+ update(time_delta_seconds) {
154
+ this.#sync();
155
+ }
156
+
157
+ /**
158
+ * Bring the scene's lightmap buffer in line with what the components say.
159
+ *
160
+ * Does nothing at all in the common case, which is every frame after the one that uploaded.
161
+ */
162
+ #sync() {
163
+ const context = this.#graphics.scene_context(this.#scene);
164
+
165
+ if (context === null) {
166
+ /*
167
+ No device — before the first start, or after a stop. Nothing can be uploaded while this
168
+ holds, and nothing has to be undone: the buffer that held the last upload was destroyed
169
+ with the context that owned it.
170
+ */
171
+ this.#forget();
172
+
173
+ return;
174
+ }
175
+
176
+ if (context !== this.#context) {
177
+ /*
178
+ A restart, which is the same event seen from the other side. The new context's buffer
179
+ has never been written to, so a claim that survived the restart uploads again below and
180
+ a scene with no claim is left alone rather than being cleared to a state it is already
181
+ in.
182
+ */
183
+ this.#forget();
184
+
185
+ this.#context = context;
186
+ }
187
+
188
+ const active = this.active;
189
+
190
+ if (volumetric_light_map_is_current(active, this.#uploaded, this.#uploaded_version)) {
191
+ return;
192
+ }
193
+
194
+ context.volumetric_light_map.upload(volumetric_light_map_payload(active));
195
+
196
+ this.#uploaded = active;
197
+ this.#uploaded_version = active === null ? -1 : active.version;
198
+ }
199
+
200
+ /**
201
+ * Drop the record of what the GPU is holding, without touching the GPU.
202
+ *
203
+ * Also drops this system's last reference to a component that has left the scene, which for a
204
+ * lightmap is megabytes.
205
+ */
206
+ #forget() {
207
+ this.#context = null;
208
+ this.#uploaded = null;
209
+ this.#uploaded_version = -1;
210
+ }
211
+ }
212
+
213
+ /**
214
+ * The bytes the scene's lightmap buffer should hold for a given claim.
215
+ *
216
+ * **A claim with nothing usable in it is still a claim.** A component whose bake has not finished
217
+ * loading holds `null`, and one whose file turned out to be empty holds a zero-length buffer —
218
+ * neither is a structure the shader can traverse, and neither can simply be handed to
219
+ * `Brick4LightMap.upload`: it copies what it is given and no more, so a zero-length upload writes
220
+ * nothing at all and leaves the previous level's lighting exactly where it was. Both therefore
221
+ * resolve to an empty map, which is a real structure that lights nothing.
222
+ *
223
+ * @param {VolumetricLightMap|null} map `null` when nothing claims the scene
224
+ * @returns {ArrayBuffer}
225
+ */
226
+ export function volumetric_light_map_payload(map) {
227
+ const data = map === null ? null : map.data;
228
+
229
+ if (data === null || data.byteLength === 0) {
230
+ return brick4_empty_gpu_structure();
231
+ }
232
+
233
+ return data;
234
+ }
235
+
236
+ /**
237
+ * Whether the scene's lightmap buffer is already holding what the claim says it should.
238
+ *
239
+ * The whole of what {@link VolumetricLightMapSystem.update} decides, and true on all but a handful
240
+ * of frames in a session — an upload is a state change, and there are only so many of those.
241
+ *
242
+ * **A claim is identified by the component, not by its bytes.** Comparing the buffers would answer
243
+ * the same question and cost a full read of a megabyte-scale map to do it; the version is what makes
244
+ * a component that swapped its bytes distinguishable from one that did not.
245
+ *
246
+ * **No claim and nothing uploaded is current; no claim after an upload is not.** That asymmetry is
247
+ * the unlink: a buffer nobody has written to holds nothing, and a buffer holding the last level's
248
+ * lighting has to be given an empty map before it holds nothing too.
249
+ *
250
+ * @param {VolumetricLightMap|null} active what claims the scene now
251
+ * @param {VolumetricLightMap|null} uploaded what the buffer was last given, `null` for none
252
+ * @param {number} uploaded_version {@link VolumetricLightMap.version} as of that upload
253
+ * @returns {boolean}
254
+ */
255
+ export function volumetric_light_map_is_current(active, uploaded, uploaded_version) {
256
+ if (active === null) {
257
+ return uploaded === null;
258
+ }
259
+
260
+ return active === uploaded && active.version === uploaded_version;
261
+ }
@@ -1,98 +1,10 @@
1
1
  /**
2
- * The bytes the scene's lightmap buffer should hold for a given claim.
2
+ * @deprecated Renamed to {@link VolumetricLightMapSystem}. 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
- * **A claim with nothing usable in it is still a claim.** A component whose bake has not finished
5
- * loading holds `null`, and one whose file turned out to be empty holds a zero-length buffer —
6
- * neither is a structure the shader can traverse, and neither can simply be handed to
7
- * `Brick4LightMap.upload`: it copies what it is given and no more, so a zero-length upload writes
8
- * nothing at all and leaves the previous level's lighting exactly where it was. Both therefore
9
- * resolve to an empty map, which is a real structure that lights nothing.
10
- *
11
- * @param {VolumetricLightMap|null} map `null` when nothing claims the scene
12
- * @returns {ArrayBuffer}
13
- */
14
- export function volumetric_light_map_payload(map: VolumetricLightMap | null): ArrayBuffer;
15
- /**
16
- * Whether the scene's lightmap buffer is already holding what the claim says it should.
17
- *
18
- * The whole of what {@link VolumetricLightMapSystem3.update} decides, and true on all but a handful
19
- * of frames in a session — an upload is a state change, and there are only so many of those.
20
- *
21
- * **A claim is identified by the component, not by its bytes.** Comparing the buffers would answer
22
- * the same question and cost a full read of a megabyte-scale map to do it; the version is what makes
23
- * a component that swapped its bytes distinguishable from one that did not.
24
- *
25
- * **No claim and nothing uploaded is current; no claim after an upload is not.** That asymmetry is
26
- * the unlink: a buffer nobody has written to holds nothing, and a buffer holding the last level's
27
- * lighting has to be given an empty map before it holds nothing too.
28
- *
29
- * @param {VolumetricLightMap|null} active what claims the scene now
30
- * @param {VolumetricLightMap|null} uploaded what the buffer was last given, `null` for none
31
- * @param {number} uploaded_version {@link VolumetricLightMap.version} as of that upload
32
- * @returns {boolean}
33
- */
34
- export function volumetric_light_map_is_current(active: VolumetricLightMap | null, uploaded: VolumetricLightMap | null, uploaded_version: number): boolean;
35
- /**
36
- * Feeds the scene's baked volumetric lightmap to the GPU, and takes it away again.
37
- *
38
- * **The whole system is one buffer's worth of state.** Shade keeps a single `Brick4LightMap` on the
39
- * scene's GPU context; a `VolumetricLightMap` component is a claim on it. So unlike the systems
40
- * around it there is no per-entity object to build and place — there is one upload, and the work is
41
- * deciding when it has to happen.
42
- *
43
- * **A scene has one lightmap, so a second claim waits rather than wins.** {@link active} is the
44
- * *first* component to link and stays that way until it unlinks, at which point the next in line
45
- * takes over. The alternative — last writer wins — makes the scene's lighting depend on the order
46
- * entities happened to be built in, which is not a thing a level author controls. Swapping one map
47
- * for another is therefore: remove the old component, add the new one.
48
- *
49
- * **The upload is decided in {@link update}, not in {@link link}.** A lightmap arrives whenever its
50
- * level does, including before the renderer has a device — `scene_context` answers `null` until one
51
- * exists, and answers with a *different* context after a restart, whose buffer is empty again. Both
52
- * are the same question asked once a frame: is what the GPU holds still what the components say. A
53
- * link is therefore eventually consistent, by at most one frame.
54
- *
55
- * **Unlinking uploads an empty map rather than leaving the last one there.** There is no way to
56
- * un-upload — the shader reads the buffer unconditionally in Brick4 mode — so a component that
57
- * removed itself and left the scene lit exactly as before would make the lifetime a fiction. A
58
- * claim carrying nothing usable resolves the same way; see {@link volumetric_light_map_payload}.
59
- *
60
- * **What this does not do is turn Brick4 on.** Which indirect-lighting technique a frame uses is the
61
- * renderer's setting, and a scene in IBL or LPV mode never reads this buffer no matter what is in
62
- * it. Uploading a lightmap is necessary for Brick4 lighting and not sufficient for it.
63
- *
64
- * @see VolumetricLightMap
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.
65
7
  */
66
- export class VolumetricLightMapSystem3 extends System<any> {
67
- /**
68
- * @param {GraphicsEngine3} graphics
69
- * @param {Scene} scene
70
- */
71
- constructor(graphics: GraphicsEngine3, scene: Scene);
72
- dependencies: (typeof VolumetricLightMap)[];
73
- /**
74
- * The component the scene is lit from, or `null` when nothing claims it.
75
- *
76
- * Read-only — it follows the entities. What the GPU holds catches up with this on the next
77
- * {@link update}.
78
- *
79
- * @returns {VolumetricLightMap|null}
80
- */
81
- get active(): VolumetricLightMap;
82
- startup(entityManager: any): Promise<void>;
83
- shutdown(entityManager: any): Promise<void>;
84
- /**
85
- * @param {VolumetricLightMap} map
86
- * @param {number} entity
87
- */
88
- link(map: VolumetricLightMap, entity: number): void;
89
- /**
90
- * @param {VolumetricLightMap} map
91
- * @param {number} entity
92
- */
93
- unlink(map: VolumetricLightMap, entity: number): void;
94
- #private;
95
- }
96
- import { VolumetricLightMap } from "./VolumetricLightMap.js";
97
- import { System } from "../ecs/System.js";
8
+ export const VolumetricLightMapSystem3: typeof VolumetricLightMapSystem;
9
+ import { VolumetricLightMapSystem } from "./VolumetricLightMapSystem.js";
98
10
  //# sourceMappingURL=VolumetricLightMapSystem3.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VolumetricLightMapSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/VolumetricLightMapSystem3.js"],"names":[],"mappings":"AAoNA;;;;;;;;;;;;GAYG;AACH,kDAHW,kBAAkB,GAAC,IAAI,GACrB,WAAW,CAUvB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wDALW,kBAAkB,GAAC,IAAI,YACvB,kBAAkB,GAAC,IAAI,oBACvB,MAAM,GACJ,OAAO,CAQnB;AA7PD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH;IAyDI;;;OAGG;IACH,qDAQC;IAnED,4CAAoC;IAyCpC;;;;;;;OAOG;IACH,iCAIC;IAgBD,2CAEC;IAED,4CAUC;IAED;;;OAGG;IACH,UAHW,kBAAkB,UAClB,MAAM,QAIhB;IAED;;;OAGG;IACH,YAHW,kBAAkB,UAClB,MAAM,QAYhB;;CA+DJ;mCA7MkC,yBAAyB;uBADrC,kBAAkB"}
1
+ {"version":3,"file":"VolumetricLightMapSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/VolumetricLightMapSystem3.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,wEAAkE;yCATzB,+BAA+B"}
@@ -1,261 +1,10 @@
1
- import { assert } from "../../core/assert.js";
2
- import {
3
- brick4_empty_gpu_structure
4
- } from "../../shade/renderer/global_illumination/brick4/cpu/brick4_empty_gpu_structure.js";
5
- import { System } from "../ecs/System.js";
6
- import { VolumetricLightMap } from "./VolumetricLightMap.js";
7
-
8
- /**
9
- * Feeds the scene's baked volumetric lightmap to the GPU, and takes it away again.
10
- *
11
- * **The whole system is one buffer's worth of state.** Shade keeps a single `Brick4LightMap` on the
12
- * scene's GPU context; a `VolumetricLightMap` component is a claim on it. So unlike the systems
13
- * around it there is no per-entity object to build and place — there is one upload, and the work is
14
- * deciding when it has to happen.
15
- *
16
- * **A scene has one lightmap, so a second claim waits rather than wins.** {@link active} is the
17
- * *first* component to link and stays that way until it unlinks, at which point the next in line
18
- * takes over. The alternative — last writer wins — makes the scene's lighting depend on the order
19
- * entities happened to be built in, which is not a thing a level author controls. Swapping one map
20
- * for another is therefore: remove the old component, add the new one.
21
- *
22
- * **The upload is decided in {@link update}, not in {@link link}.** A lightmap arrives whenever its
23
- * level does, including before the renderer has a device — `scene_context` answers `null` until one
24
- * exists, and answers with a *different* context after a restart, whose buffer is empty again. Both
25
- * are the same question asked once a frame: is what the GPU holds still what the components say. A
26
- * link is therefore eventually consistent, by at most one frame.
27
- *
28
- * **Unlinking uploads an empty map rather than leaving the last one there.** There is no way to
29
- * un-upload — the shader reads the buffer unconditionally in Brick4 mode — so a component that
30
- * removed itself and left the scene lit exactly as before would make the lifetime a fiction. A
31
- * claim carrying nothing usable resolves the same way; see {@link volumetric_light_map_payload}.
32
- *
33
- * **What this does not do is turn Brick4 on.** Which indirect-lighting technique a frame uses is the
34
- * renderer's setting, and a scene in IBL or LPV mode never reads this buffer no matter what is in
35
- * it. Uploading a lightmap is necessary for Brick4 lighting and not sufficient for it.
36
- *
37
- * @see VolumetricLightMap
38
- */
39
- export class VolumetricLightMapSystem3 extends System {
40
-
41
- dependencies = [VolumetricLightMap];
42
-
43
- /**
44
- * @type {GraphicsEngine3}
45
- */
46
- #graphics;
47
-
48
- /**
49
- * @type {Scene}
50
- */
51
- #scene;
52
-
53
- /**
54
- * Every entity claiming the scene's lightmap, oldest first.
55
- *
56
- * @type {{entity: number, component: VolumetricLightMap}[]}
57
- */
58
- #entries = [];
59
-
60
- /**
61
- * The context the buffer currently holding {@link #uploaded} belongs to.
62
- *
63
- * @type {GPUSceneContext|null}
64
- */
65
- #context = null;
66
-
67
- /**
68
- * Whose bytes the GPU is holding, `null` when it is holding none.
69
- *
70
- * @type {VolumetricLightMap|null}
71
- */
72
- #uploaded = null;
73
-
74
- /**
75
- * {@link VolumetricLightMap.version} as of that upload. A component can replace its bytes
76
- * without ever leaving the scene, and this is how that is noticed.
77
- *
78
- * @type {number}
79
- */
80
- #uploaded_version = -1;
81
-
82
- /**
83
- * The component the scene is lit from, or `null` when nothing claims it.
84
- *
85
- * Read-only — it follows the entities. What the GPU holds catches up with this on the next
86
- * {@link update}.
87
- *
88
- * @returns {VolumetricLightMap|null}
89
- */
90
- get active() {
91
- const entries = this.#entries;
92
-
93
- return entries.length === 0 ? null : entries[0].component;
94
- }
95
-
96
- /**
97
- * @param {GraphicsEngine3} graphics
98
- * @param {Scene} scene
99
- */
100
- constructor(graphics, scene) {
101
- super();
102
-
103
- assert.defined(graphics, 'graphics');
104
- assert.defined(scene, 'scene');
105
-
106
- this.#graphics = graphics;
107
- this.#scene = scene;
108
- }
109
-
110
- async startup(entityManager) {
111
- this.entityManager = entityManager;
112
- }
113
-
114
- async shutdown(entityManager) {
115
- this.#entries.length = 0;
116
-
117
- if (this.#uploaded !== null) {
118
- // the renderer outlives the entity manager, so the scene is left unlit rather than lit
119
- // by a level that is no longer loaded
120
- this.#sync();
121
- }
122
-
123
- this.#forget();
124
- }
125
-
126
- /**
127
- * @param {VolumetricLightMap} map
128
- * @param {number} entity
129
- */
130
- link(map, entity) {
131
- this.#entries.push({ entity, component: map });
132
- }
133
-
134
- /**
135
- * @param {VolumetricLightMap} map
136
- * @param {number} entity
137
- */
138
- unlink(map, entity) {
139
- const entries = this.#entries;
140
-
141
- const index = entries.findIndex(entry => entry.entity === entity);
142
-
143
- if (index === -1) {
144
- return;
145
- }
146
-
147
- entries.splice(index, 1);
148
- }
149
-
150
- /**
151
- * @param {number} time_delta_seconds
152
- */
153
- update(time_delta_seconds) {
154
- this.#sync();
155
- }
156
-
157
- /**
158
- * Bring the scene's lightmap buffer in line with what the components say.
159
- *
160
- * Does nothing at all in the common case, which is every frame after the one that uploaded.
161
- */
162
- #sync() {
163
- const context = this.#graphics.scene_context(this.#scene);
164
-
165
- if (context === null) {
166
- /*
167
- No device — before the first start, or after a stop. Nothing can be uploaded while this
168
- holds, and nothing has to be undone: the buffer that held the last upload was destroyed
169
- with the context that owned it.
170
- */
171
- this.#forget();
172
-
173
- return;
174
- }
175
-
176
- if (context !== this.#context) {
177
- /*
178
- A restart, which is the same event seen from the other side. The new context's buffer
179
- has never been written to, so a claim that survived the restart uploads again below and
180
- a scene with no claim is left alone rather than being cleared to a state it is already
181
- in.
182
- */
183
- this.#forget();
184
-
185
- this.#context = context;
186
- }
187
-
188
- const active = this.active;
189
-
190
- if (volumetric_light_map_is_current(active, this.#uploaded, this.#uploaded_version)) {
191
- return;
192
- }
193
-
194
- context.volumetric_light_map.upload(volumetric_light_map_payload(active));
195
-
196
- this.#uploaded = active;
197
- this.#uploaded_version = active === null ? -1 : active.version;
198
- }
199
-
200
- /**
201
- * Drop the record of what the GPU is holding, without touching the GPU.
202
- *
203
- * Also drops this system's last reference to a component that has left the scene, which for a
204
- * lightmap is megabytes.
205
- */
206
- #forget() {
207
- this.#context = null;
208
- this.#uploaded = null;
209
- this.#uploaded_version = -1;
210
- }
211
- }
212
-
213
- /**
214
- * The bytes the scene's lightmap buffer should hold for a given claim.
215
- *
216
- * **A claim with nothing usable in it is still a claim.** A component whose bake has not finished
217
- * loading holds `null`, and one whose file turned out to be empty holds a zero-length buffer —
218
- * neither is a structure the shader can traverse, and neither can simply be handed to
219
- * `Brick4LightMap.upload`: it copies what it is given and no more, so a zero-length upload writes
220
- * nothing at all and leaves the previous level's lighting exactly where it was. Both therefore
221
- * resolve to an empty map, which is a real structure that lights nothing.
222
- *
223
- * @param {VolumetricLightMap|null} map `null` when nothing claims the scene
224
- * @returns {ArrayBuffer}
225
- */
226
- export function volumetric_light_map_payload(map) {
227
- const data = map === null ? null : map.data;
228
-
229
- if (data === null || data.byteLength === 0) {
230
- return brick4_empty_gpu_structure();
231
- }
232
-
233
- return data;
234
- }
235
-
236
- /**
237
- * Whether the scene's lightmap buffer is already holding what the claim says it should.
238
- *
239
- * The whole of what {@link VolumetricLightMapSystem3.update} decides, and true on all but a handful
240
- * of frames in a session — an upload is a state change, and there are only so many of those.
241
- *
242
- * **A claim is identified by the component, not by its bytes.** Comparing the buffers would answer
243
- * the same question and cost a full read of a megabyte-scale map to do it; the version is what makes
244
- * a component that swapped its bytes distinguishable from one that did not.
245
- *
246
- * **No claim and nothing uploaded is current; no claim after an upload is not.** That asymmetry is
247
- * the unlink: a buffer nobody has written to holds nothing, and a buffer holding the last level's
248
- * lighting has to be given an empty map before it holds nothing too.
249
- *
250
- * @param {VolumetricLightMap|null} active what claims the scene now
251
- * @param {VolumetricLightMap|null} uploaded what the buffer was last given, `null` for none
252
- * @param {number} uploaded_version {@link VolumetricLightMap.version} as of that upload
253
- * @returns {boolean}
254
- */
255
- export function volumetric_light_map_is_current(active, uploaded, uploaded_version) {
256
- if (active === null) {
257
- return uploaded === null;
258
- }
259
-
260
- return active === uploaded && active.version === uploaded_version;
261
- }
1
+ import { VolumetricLightMapSystem } from "./VolumetricLightMapSystem.js";
2
+
3
+ /**
4
+ * @deprecated Renamed to {@link VolumetricLightMapSystem}. 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.
6
+ *
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.
9
+ */
10
+ export const VolumetricLightMapSystem3 = VolumetricLightMapSystem;