@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
@@ -1,143 +1,142 @@
1
- import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
3
- import { BVH_NULL_NODE_DEFINITION } from "../../shader/chunk/bvh/BVH_NULL_NODE_DEFINITION.js";
4
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
5
- import { ComputeShader } from "../../shader/ComputeShader.js";
6
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
7
- import {
8
- BVH_NODE_BOUNDS_WORD,
9
- BVH_NODE_CHILD_1_WORD,
10
- BVH_NODE_CHILD_2_WORD,
11
- BVH_NODE_STRIDE_WORDS
12
- } from "./BVH_BUFFER_LAYOUT.js";
13
- import { BVH_BUILD_SETTINGS_STRUCT, BVH_NO_ROOT_WORD } from "./BVH_BUILD_SETTINGS_STRUCT.js";
14
- import { chunk_bvh_determine_range } from "./chunk_bvh_determine_range.js";
15
- import { chunk_bvh_find_split } from "./chunk_bvh_find_split.js";
16
-
17
- export const BVH_EMIT_WORKGROUP_SIZE = 64;
18
-
19
- const resources = new ShaderResourceSetDescriptor();
20
- resources.createGroup()
21
- .addUniform("settings", BVH_BUILD_SETTINGS_STRUCT)
22
- // sorted Morton codes, and the leaf index each one came from
23
- .addStorageBuffer("keys", WebGPUArray.from(u32), false)
24
- .addStorageBuffer("values", WebGPUArray.from(u32), false)
25
- .addStorageBuffer("leaf_bounds", WebGPUArray.from(f32), false)
26
- .addStorageBuffer("leaf_payload", WebGPUArray.from(u32), false)
27
- // `{root: u32, nodes: array<BVH2_NODE_STRUCT>}`, written flat
28
- .addStorageBuffer("nodes", WebGPUArray.from(u32), true)
29
- // parent of every node, indexed the same way the node buffer is
30
- .addStorageBuffer("parents", WebGPUArray.from(u32), true)
31
- // which node each leaf ordinal lives at — see the shader's note on why this is written out
32
- .addStorageBuffer("leaf_nodes", WebGPUArray.from(u32), true);
33
-
34
- const body = CodeChunk.from(
35
- //language=WGSL
36
- `
37
- const NODE_STRIDE = ${BVH_NODE_STRIDE_WORDS}u;
38
- const NODE_BOUNDS = ${BVH_NODE_BOUNDS_WORD}u;
39
- const NODE_CHILD_1 = ${BVH_NODE_CHILD_1_WORD}u;
40
- const NODE_CHILD_2 = ${BVH_NODE_CHILD_2_WORD}u;
41
- const NO_ROOT_WORD = ${BVH_NO_ROOT_WORD}u;
42
-
43
- fn bvh_node_word(node: u32) -> u32 {
44
- return settings.node_word_offset + node * NODE_STRIDE;
45
- }
46
-
47
- @compute @workgroup_size(${BVH_EMIT_WORKGROUP_SIZE}, 1, 1)
48
- fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
49
- let i = gid.x;
50
- let n = settings.element_count;
51
-
52
- if (i >= n) {
53
- return;
54
- }
55
-
56
- // Leaf j lives at node (n-1)+j, internal node k at node k. Root is internal node 0 by Karras's
57
- // construction — it is the node whose range is the whole array.
58
- let leaf_source = values[i];
59
- let leaf_node = (n - 1u) + i;
60
-
61
- let bounds_source = leaf_source * 6u;
62
- let leaf_word = bvh_node_word(leaf_node);
63
-
64
- for (var k = 0u; k < 6u; k += 1u) {
65
- nodes[leaf_word + NODE_BOUNDS + k] = bitcast<u32>(leaf_bounds[bounds_source + k]);
66
- }
67
-
68
- nodes[leaf_word + NODE_CHILD_1] = BVH_NULL_NODE;
69
- nodes[leaf_word + NODE_CHILD_2] = leaf_payload[leaf_source];
70
-
71
- // Where the leaves are is an output of construction, not a convention two kernels have to
72
- // share. For this layout it is (n-1)+i and the refit could work it out — but a tree that was
73
- // copied rather than built has its leaves wherever its builder put them, and the refit reads
74
- // this the same way for both.
75
- leaf_nodes[i] = leaf_node;
76
-
77
- // n leaves, n-1 internal nodes — the tail thread has only a leaf to write.
78
- if (i < n - 1u) {
79
- let range = bvh_determine_range(&keys, n, i);
80
-
81
- let first = range.x;
82
- let last = range.y;
83
-
84
- let split = bvh_find_split(&keys, n, first, last);
85
-
86
- // A subrange of one element is a leaf; otherwise it is owned by the internal node whose
87
- // left boundary sits at that code index.
88
- let child_1 = select(split, (n - 1u) + split, split == first);
89
- let child_2 = select(split + 1u, (n - 1u) + split + 1u, split + 1u == last);
90
-
91
- let node_word = bvh_node_word(i);
92
-
93
- nodes[node_word + NODE_CHILD_1] = child_1;
94
- nodes[node_word + NODE_CHILD_2] = child_2;
95
-
96
- // The refit climbs these; internal-node bounds are its business, not this pass's.
97
- parents[child_1] = i;
98
- parents[child_2] = i;
99
- }
100
-
101
- if (i == 0u) {
102
- // Constant by construction, but a tree whose format has a root word has consumers that read
103
- // it. A BLAS has none — its root is node 0 by convention — and says so with NO_ROOT_WORD.
104
- if (settings.root_word_offset != NO_ROOT_WORD) {
105
- nodes[settings.root_word_offset] = 0u;
106
- }
107
-
108
- // Where the refit's climb stops.
109
- parents[0] = BVH_NULL_NODE;
110
- }
111
- }
112
- `, [
113
- BVH_NULL_NODE_DEFINITION,
114
- chunk_bvh_determine_range,
115
- chunk_bvh_find_split,
116
- ]);
117
-
118
- /**
119
- * Karras hierarchy emission — pass 3 of {@link graph_bvh_build_lbvh}, and a transliteration of
120
- * {@link ebvh_build_hierarchy_radix} with the DXR Fallback's index layout: internal node `k` at node
121
- * `k` (root = 0), leaf `j` at node `(n-1)+j`, `2n-1` nodes in total.
122
- *
123
- * Node indices are local to the tree; where node 0 actually lands is `settings.node_word_offset`,
124
- * so the same kernel writes a TLAS that owns its buffer and a BLAS that is a tenant in a shared
125
- * arena. Root-at-node-0 is what both conventions want, which is why one kernel can serve them.
126
- *
127
- * One dispatch of `n` threads with a tail `if`, which is the canonical LBVH formulation: thread `i`
128
- * always writes leaf `(n-1)+i`, and threads below `n-1` additionally derive internal node `i`'s
129
- * range and split and wire its two children.
130
- *
131
- * Barrier-free, atomic-free, subgroup-free, and a pure function of the sorted keys — deliberately,
132
- * because that is what lets the WGSL emulator execute this kernel point-wise in vitest against the
133
- * in-repo CPU oracle, duplicate-code runs and all. Internal-node bounds are left to
134
- * {@link shader_bvh_refit}.
135
- *
136
- * @type {ComputeShader}
137
- */
138
- export const shader_bvh_emit_hierarchy = ComputeShader.from({
139
- label: "BVHBuild/EmitHierarchy",
140
- resources,
141
- body,
142
- group_size: [BVH_EMIT_WORKGROUP_SIZE, 1, 1],
143
- });
1
+ import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
3
+ import { BVH_NULL_NODE_DEFINITION } from "../../shader/chunk/bvh/BVH_NULL_NODE_DEFINITION.js";
4
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
5
+ import { ComputeShader } from "../../shader/ComputeShader.js";
6
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
7
+ import {
8
+ BVH_NODE_BOUNDS_WORD,
9
+ BVH_NODE_CHILD_1_WORD,
10
+ BVH_NODE_CHILD_2_WORD,
11
+ BVH_NODE_STRIDE_WORDS
12
+ } from "./BVH_BUFFER_LAYOUT.js";
13
+ import { BVH_BUILD_SETTINGS_STRUCT, BVH_NO_ROOT_WORD } from "./BVH_BUILD_SETTINGS_STRUCT.js";
14
+ import { chunk_bvh_determine_range } from "./chunk_bvh_determine_range.js";
15
+ import { chunk_bvh_find_split } from "./chunk_bvh_find_split.js";
16
+
17
+ export const BVH_EMIT_WORKGROUP_SIZE = 64;
18
+
19
+ const resources = new ShaderResourceSetDescriptor();
20
+ resources.createGroup()
21
+ .addUniform("settings", BVH_BUILD_SETTINGS_STRUCT)
22
+ // sorted Morton codes, and the leaf index each one came from
23
+ .addStorageBuffer("keys", WebGPUArray.from(u32), false)
24
+ .addStorageBuffer("values", WebGPUArray.from(u32), false)
25
+ .addStorageBuffer("leaf_bounds", WebGPUArray.from(f32), false)
26
+ .addStorageBuffer("leaf_payload", WebGPUArray.from(u32), false)
27
+ // `{root: u32, nodes: array<BVH2_NODE_STRUCT>}`, written flat
28
+ .addStorageBuffer("nodes", WebGPUArray.from(u32), true)
29
+ // parent of every node, indexed the same way the node buffer is
30
+ .addStorageBuffer("parents", WebGPUArray.from(u32), true)
31
+ // which node each leaf ordinal lives at — see the shader's note on why this is written out
32
+ .addStorageBuffer("leaf_nodes", WebGPUArray.from(u32), true);
33
+
34
+ const body = CodeChunk.from(
35
+ //language=WGSL
36
+ `
37
+ const NODE_STRIDE = ${BVH_NODE_STRIDE_WORDS}u;
38
+ const NODE_BOUNDS = ${BVH_NODE_BOUNDS_WORD}u;
39
+ const NODE_CHILD_1 = ${BVH_NODE_CHILD_1_WORD}u;
40
+ const NODE_CHILD_2 = ${BVH_NODE_CHILD_2_WORD}u;
41
+ const NO_ROOT_WORD = ${BVH_NO_ROOT_WORD}u;
42
+
43
+ fn bvh_node_word(node: u32) -> u32 {
44
+ return settings.node_word_offset + node * NODE_STRIDE;
45
+ }
46
+
47
+ @compute @workgroup_size(${BVH_EMIT_WORKGROUP_SIZE}, 1, 1)
48
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
49
+ let i = gid.x;
50
+ let n = settings.element_count;
51
+
52
+ if (i >= n) {
53
+ return;
54
+ }
55
+
56
+ // Leaf j lives at node (n-1)+j, internal node k at node k. Root is internal node 0 by Karras's
57
+ // construction — it is the node whose range is the whole array.
58
+ let leaf_source = values[i];
59
+ let leaf_node = (n - 1u) + i;
60
+
61
+ let bounds_source = leaf_source * 6u;
62
+ let leaf_word = bvh_node_word(leaf_node);
63
+
64
+ for (var k = 0u; k < 6u; k += 1u) {
65
+ nodes[leaf_word + NODE_BOUNDS + k] = bitcast<u32>(leaf_bounds[bounds_source + k]);
66
+ }
67
+
68
+ nodes[leaf_word + NODE_CHILD_1] = BVH_NULL_NODE;
69
+ nodes[leaf_word + NODE_CHILD_2] = leaf_payload[leaf_source];
70
+
71
+ // Where the leaves are is an output of construction, not a convention two kernels have to
72
+ // share. For this layout it is (n-1)+i and the refit could work it out — but a tree that was
73
+ // copied rather than built has its leaves wherever its builder put them, and the refit reads
74
+ // this the same way for both.
75
+ leaf_nodes[i] = leaf_node;
76
+
77
+ // n leaves, n-1 internal nodes — the tail thread has only a leaf to write.
78
+ if (i < n - 1u) {
79
+ let range = bvh_determine_range(&keys, n, i);
80
+
81
+ let first = range.x;
82
+ let last = range.y;
83
+
84
+ let split = bvh_find_split(&keys, n, first, last);
85
+
86
+ // A subrange of one element is a leaf; otherwise it is owned by the internal node whose
87
+ // left boundary sits at that code index.
88
+ let child_1 = select(split, (n - 1u) + split, split == first);
89
+ let child_2 = select(split + 1u, (n - 1u) + split + 1u, split + 1u == last);
90
+
91
+ let node_word = bvh_node_word(i);
92
+
93
+ nodes[node_word + NODE_CHILD_1] = child_1;
94
+ nodes[node_word + NODE_CHILD_2] = child_2;
95
+
96
+ // The refit climbs these; internal-node bounds are its business, not this pass's.
97
+ parents[child_1] = i;
98
+ parents[child_2] = i;
99
+ }
100
+
101
+ if (i == 0u) {
102
+ // Constant by construction, but a tree whose format has a root word has consumers that read
103
+ // it. A BLAS has none — its root is node 0 by convention — and says so with NO_ROOT_WORD.
104
+ if (settings.root_word_offset != NO_ROOT_WORD) {
105
+ nodes[settings.root_word_offset] = 0u;
106
+ }
107
+
108
+ // Where the refit's climb stops.
109
+ parents[0] = BVH_NULL_NODE;
110
+ }
111
+ }
112
+ `, [
113
+ BVH_NULL_NODE_DEFINITION,
114
+ chunk_bvh_determine_range,
115
+ chunk_bvh_find_split,
116
+ ]);
117
+
118
+ /**
119
+ * Karras hierarchy emission — pass 3 of {@link graph_bvh_build_lbvh}, and a transliteration of
120
+ * {@link ebvh_build_hierarchy_radix} with the DXR Fallback's index layout: internal node `k` at node
121
+ * `k` (root = 0), leaf `j` at node `(n-1)+j`, `2n-1` nodes in total.
122
+ *
123
+ * Node indices are local to the tree; where node 0 actually lands is `settings.node_word_offset`,
124
+ * so the same kernel writes a TLAS that owns its buffer and a BLAS that is a tenant in a shared
125
+ * arena. Root-at-node-0 is what both conventions want, which is why one kernel can serve them.
126
+ *
127
+ * One dispatch of `n` threads with a tail `if`, which is the canonical LBVH formulation: thread `i`
128
+ * always writes leaf `(n-1)+i`, and threads below `n-1` additionally derive internal node `i`'s
129
+ * range and split and wire its two children.
130
+ *
131
+ * Barrier-free, atomic-free, subgroup-free, and a pure function of the sorted keys — deliberately,
132
+ * because that is what lets the WGSL emulator execute this kernel point-wise in vitest against the
133
+ * in-repo CPU oracle, duplicate-code runs and all. Internal-node bounds are left to
134
+ * {@link shader_bvh_refit}.
135
+ *
136
+ * @type {ComputeShader}
137
+ */
138
+ export const shader_bvh_emit_hierarchy = ComputeShader.from({
139
+ label: "BVHBuild/EmitHierarchy",
140
+ resources,
141
+ body,
142
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"shader_bvh_morton.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js"],"names":[],"mappings":"AAQA,2CAA4C;AAwD5C;;;;;;;;;;;;GAYG;AACH,gCAFU,aAAa,CAOpB;8BA9E2B,+BAA+B"}
1
+ {"version":3,"file":"shader_bvh_morton.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js"],"names":[],"mappings":"AAQA,2CAA4C;AAwD5C;;;;;;;;;;;;GAYG;AACH,gCAFU,aAAa,CAMpB;8BA7E2B,+BAA+B"}
@@ -79,5 +79,4 @@ export const shader_bvh_morton = ComputeShader.from({
79
79
  label: "BVHBuild/Morton",
80
80
  resources,
81
81
  body,
82
- group_size: [BVH_MORTON_WORKGROUP_SIZE, 1, 1],
83
82
  });
@@ -1 +1 @@
1
- {"version":3,"file":"shader_bvh_refit.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js"],"names":[],"mappings":"AAcA,0CAA2C;AAqG3C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,+BAFU,aAAa,CAOpB;8BAxI2B,+BAA+B"}
1
+ {"version":3,"file":"shader_bvh_refit.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js"],"names":[],"mappings":"AAcA,0CAA2C;AAqG3C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,+BAFU,aAAa,CAMpB;8BAvI2B,+BAA+B"}
@@ -1,141 +1,140 @@
1
- import { atomic_u32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
3
- import { BVH_NULL_NODE_DEFINITION } from "../../shader/chunk/bvh/BVH_NULL_NODE_DEFINITION.js";
4
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
5
- import { ComputeShader } from "../../shader/ComputeShader.js";
6
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
7
- import {
8
- BVH_NODE_BOUNDS_WORD,
9
- BVH_NODE_CHILD_1_WORD,
10
- BVH_NODE_CHILD_2_WORD,
11
- BVH_NODE_STRIDE_WORDS
12
- } from "./BVH_BUFFER_LAYOUT.js";
13
- import { BVH_BUILD_SETTINGS_STRUCT } from "./BVH_BUILD_SETTINGS_STRUCT.js";
14
-
15
- export const BVH_REFIT_WORKGROUP_SIZE = 64;
16
-
17
- const resources = new ShaderResourceSetDescriptor();
18
- resources.createGroup()
19
- .addUniform("settings", BVH_BUILD_SETTINGS_STRUCT)
20
- .addStorageBuffer("parents", WebGPUArray.from(u32), false)
21
- // node index of each leaf ordinal; the only thing this pass knows about the tree's layout
22
- .addStorageBuffer("leaf_nodes", WebGPUArray.from(u32), false)
23
- // one arrival counter per internal node; must be zero at the start of every build
24
- .addStorageBuffer("counters", WebGPUArray.from(atomic_u32), true)
25
- // The same buffer the emission pass wrote as typed nodes, bound flat and atomic here. Every
26
- // word this pass touches is communicated between workgroups, so every access to it is an
27
- // atomic one — the strictest formulation WGSL offers, and the discipline the plan's R1 rests on.
28
- .addStorageBuffer("nodes", WebGPUArray.from(atomic_u32), true);
29
-
30
- const body = CodeChunk.from(
31
- //language=WGSL
32
- `
33
- const NODE_STRIDE = ${BVH_NODE_STRIDE_WORDS}u;
34
- const NODE_BOUNDS = ${BVH_NODE_BOUNDS_WORD}u;
35
- const NODE_CHILD_1 = ${BVH_NODE_CHILD_1_WORD}u;
36
- const NODE_CHILD_2 = ${BVH_NODE_CHILD_2_WORD}u;
37
-
38
- fn bvh_node_word(node: u32) -> u32 {
39
- return settings.node_word_offset + node * NODE_STRIDE;
40
- }
41
-
42
- fn bvh_parent(node: u32) -> u32 {
43
- return parents[settings.parents_offset + node];
44
- }
45
-
46
- fn bvh_read_bounds_low(node_word: u32) -> vec3<f32> {
47
- return vec3<f32>(
48
- bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS])),
49
- bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 1u])),
50
- bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 2u])),
51
- );
52
- }
53
-
54
- fn bvh_read_bounds_high(node_word: u32) -> vec3<f32> {
55
- return vec3<f32>(
56
- bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 3u])),
57
- bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 4u])),
58
- bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 5u])),
59
- );
60
- }
61
-
62
- @compute @workgroup_size(${BVH_REFIT_WORKGROUP_SIZE}, 1, 1)
63
- fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
64
- let i = gid.x;
65
- let n = settings.element_count;
66
-
67
- if (i >= n) {
68
- return;
69
- }
70
-
71
- // Start above leaf i and climb. Which node that leaf is comes from the tree rather than from a
72
- // layout this kernel assumes, so a tree that was built and a tree that was copied refit alike.
73
- var node = bvh_parent(leaf_nodes[settings.leaf_nodes_offset + i]);
74
-
75
- loop {
76
- if (node == BVH_NULL_NODE) {
77
- // climbed past the root
78
- break;
79
- }
80
-
81
- // An internal node has exactly two children, so exactly two climbs pass through it. The
82
- // first arrival exits — its sibling's subtree is still being fitted, and it has nothing to
83
- // wait ON: no spin, no assumption about anyone else's forward progress. The second arrival
84
- // finds both children written and owns the node from here up.
85
- let arrivals = atomicAdd(&counters[node], 1u);
86
-
87
- if (arrivals == 0u) {
88
- break;
89
- }
90
-
91
- let node_word = bvh_node_word(node);
92
-
93
- let child_1 = atomicLoad(&nodes[node_word + NODE_CHILD_1]);
94
- let child_2 = atomicLoad(&nodes[node_word + NODE_CHILD_2]);
95
-
96
- let word_1 = bvh_node_word(child_1);
97
- let word_2 = bvh_node_word(child_2);
98
-
99
- let low = min(bvh_read_bounds_low(word_1), bvh_read_bounds_low(word_2));
100
- let high = max(bvh_read_bounds_high(word_1), bvh_read_bounds_high(word_2));
101
-
102
- atomicStore(&nodes[node_word + NODE_BOUNDS], bitcast<u32>(low.x));
103
- atomicStore(&nodes[node_word + NODE_BOUNDS + 1u], bitcast<u32>(low.y));
104
- atomicStore(&nodes[node_word + NODE_BOUNDS + 2u], bitcast<u32>(low.z));
105
- atomicStore(&nodes[node_word + NODE_BOUNDS + 3u], bitcast<u32>(high.x));
106
- atomicStore(&nodes[node_word + NODE_BOUNDS + 4u], bitcast<u32>(high.y));
107
- atomicStore(&nodes[node_word + NODE_BOUNDS + 5u], bitcast<u32>(high.z));
108
-
109
- node = bvh_parent(node);
110
- }
111
- }
112
- `, [
113
- BVH_NULL_NODE_DEFINITION,
114
- ]);
115
-
116
- /**
117
- * Bottom-up AABB refit — pass 4 of {@link graph_bvh_build_lbvh}, and the last thing a build does.
118
- *
119
- * One thread per leaf climbs the `parents` chain from the node `leaf_nodes` says that leaf occupies,
120
- * taking an arrival counter at each internal node on the way. Nothing waits: the thread that arrives first at a node simply
121
- * dies, and the one that arrives second is guaranteed both children are complete, because the only
122
- * way to arrive is to have finished a child. That is the whole synchronisation, and it assumes
123
- * atomic-word visibility rather than any scheduling fairness — which is why it sits on the accepted
124
- * side of the engine's line on cross-workgroup communication.
125
- *
126
- * The counters must be zero when the pass starts; the graph declares them with a clear range so a
127
- * pool-reused buffer is cleared and a fresh one arrives zeroed already.
128
- *
129
- * The same pass serves refit-only updates (topology frozen, leaf bounds rewritten) — which is what
130
- * per-frame skinned BLAS needs — so it exists as a standalone dispatch rather than fused into
131
- * emission. Node indices are local to the tree and `settings.node_word_offset` says where node 0
132
- * lands, so a BLAS living inside the shared geometry arena refits through this same kernel.
133
- *
134
- * @type {ComputeShader}
135
- */
136
- export const shader_bvh_refit = ComputeShader.from({
137
- label: "BVHBuild/Refit",
138
- resources,
139
- body,
140
- group_size: [BVH_REFIT_WORKGROUP_SIZE, 1, 1],
141
- });
1
+ import { atomic_u32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
3
+ import { BVH_NULL_NODE_DEFINITION } from "../../shader/chunk/bvh/BVH_NULL_NODE_DEFINITION.js";
4
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
5
+ import { ComputeShader } from "../../shader/ComputeShader.js";
6
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
7
+ import {
8
+ BVH_NODE_BOUNDS_WORD,
9
+ BVH_NODE_CHILD_1_WORD,
10
+ BVH_NODE_CHILD_2_WORD,
11
+ BVH_NODE_STRIDE_WORDS
12
+ } from "./BVH_BUFFER_LAYOUT.js";
13
+ import { BVH_BUILD_SETTINGS_STRUCT } from "./BVH_BUILD_SETTINGS_STRUCT.js";
14
+
15
+ export const BVH_REFIT_WORKGROUP_SIZE = 64;
16
+
17
+ const resources = new ShaderResourceSetDescriptor();
18
+ resources.createGroup()
19
+ .addUniform("settings", BVH_BUILD_SETTINGS_STRUCT)
20
+ .addStorageBuffer("parents", WebGPUArray.from(u32), false)
21
+ // node index of each leaf ordinal; the only thing this pass knows about the tree's layout
22
+ .addStorageBuffer("leaf_nodes", WebGPUArray.from(u32), false)
23
+ // one arrival counter per internal node; must be zero at the start of every build
24
+ .addStorageBuffer("counters", WebGPUArray.from(atomic_u32), true)
25
+ // The same buffer the emission pass wrote as typed nodes, bound flat and atomic here. Every
26
+ // word this pass touches is communicated between workgroups, so every access to it is an
27
+ // atomic one — the strictest formulation WGSL offers, and the discipline the plan's R1 rests on.
28
+ .addStorageBuffer("nodes", WebGPUArray.from(atomic_u32), true);
29
+
30
+ const body = CodeChunk.from(
31
+ //language=WGSL
32
+ `
33
+ const NODE_STRIDE = ${BVH_NODE_STRIDE_WORDS}u;
34
+ const NODE_BOUNDS = ${BVH_NODE_BOUNDS_WORD}u;
35
+ const NODE_CHILD_1 = ${BVH_NODE_CHILD_1_WORD}u;
36
+ const NODE_CHILD_2 = ${BVH_NODE_CHILD_2_WORD}u;
37
+
38
+ fn bvh_node_word(node: u32) -> u32 {
39
+ return settings.node_word_offset + node * NODE_STRIDE;
40
+ }
41
+
42
+ fn bvh_parent(node: u32) -> u32 {
43
+ return parents[settings.parents_offset + node];
44
+ }
45
+
46
+ fn bvh_read_bounds_low(node_word: u32) -> vec3<f32> {
47
+ return vec3<f32>(
48
+ bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS])),
49
+ bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 1u])),
50
+ bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 2u])),
51
+ );
52
+ }
53
+
54
+ fn bvh_read_bounds_high(node_word: u32) -> vec3<f32> {
55
+ return vec3<f32>(
56
+ bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 3u])),
57
+ bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 4u])),
58
+ bitcast<f32>(atomicLoad(&nodes[node_word + NODE_BOUNDS + 5u])),
59
+ );
60
+ }
61
+
62
+ @compute @workgroup_size(${BVH_REFIT_WORKGROUP_SIZE}, 1, 1)
63
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
64
+ let i = gid.x;
65
+ let n = settings.element_count;
66
+
67
+ if (i >= n) {
68
+ return;
69
+ }
70
+
71
+ // Start above leaf i and climb. Which node that leaf is comes from the tree rather than from a
72
+ // layout this kernel assumes, so a tree that was built and a tree that was copied refit alike.
73
+ var node = bvh_parent(leaf_nodes[settings.leaf_nodes_offset + i]);
74
+
75
+ loop {
76
+ if (node == BVH_NULL_NODE) {
77
+ // climbed past the root
78
+ break;
79
+ }
80
+
81
+ // An internal node has exactly two children, so exactly two climbs pass through it. The
82
+ // first arrival exits — its sibling's subtree is still being fitted, and it has nothing to
83
+ // wait ON: no spin, no assumption about anyone else's forward progress. The second arrival
84
+ // finds both children written and owns the node from here up.
85
+ let arrivals = atomicAdd(&counters[node], 1u);
86
+
87
+ if (arrivals == 0u) {
88
+ break;
89
+ }
90
+
91
+ let node_word = bvh_node_word(node);
92
+
93
+ let child_1 = atomicLoad(&nodes[node_word + NODE_CHILD_1]);
94
+ let child_2 = atomicLoad(&nodes[node_word + NODE_CHILD_2]);
95
+
96
+ let word_1 = bvh_node_word(child_1);
97
+ let word_2 = bvh_node_word(child_2);
98
+
99
+ let low = min(bvh_read_bounds_low(word_1), bvh_read_bounds_low(word_2));
100
+ let high = max(bvh_read_bounds_high(word_1), bvh_read_bounds_high(word_2));
101
+
102
+ atomicStore(&nodes[node_word + NODE_BOUNDS], bitcast<u32>(low.x));
103
+ atomicStore(&nodes[node_word + NODE_BOUNDS + 1u], bitcast<u32>(low.y));
104
+ atomicStore(&nodes[node_word + NODE_BOUNDS + 2u], bitcast<u32>(low.z));
105
+ atomicStore(&nodes[node_word + NODE_BOUNDS + 3u], bitcast<u32>(high.x));
106
+ atomicStore(&nodes[node_word + NODE_BOUNDS + 4u], bitcast<u32>(high.y));
107
+ atomicStore(&nodes[node_word + NODE_BOUNDS + 5u], bitcast<u32>(high.z));
108
+
109
+ node = bvh_parent(node);
110
+ }
111
+ }
112
+ `, [
113
+ BVH_NULL_NODE_DEFINITION,
114
+ ]);
115
+
116
+ /**
117
+ * Bottom-up AABB refit — pass 4 of {@link graph_bvh_build_lbvh}, and the last thing a build does.
118
+ *
119
+ * One thread per leaf climbs the `parents` chain from the node `leaf_nodes` says that leaf occupies,
120
+ * taking an arrival counter at each internal node on the way. Nothing waits: the thread that arrives first at a node simply
121
+ * dies, and the one that arrives second is guaranteed both children are complete, because the only
122
+ * way to arrive is to have finished a child. That is the whole synchronisation, and it assumes
123
+ * atomic-word visibility rather than any scheduling fairness — which is why it sits on the accepted
124
+ * side of the engine's line on cross-workgroup communication.
125
+ *
126
+ * The counters must be zero when the pass starts; the graph declares them with a clear range so a
127
+ * pool-reused buffer is cleared and a fresh one arrives zeroed already.
128
+ *
129
+ * The same pass serves refit-only updates (topology frozen, leaf bounds rewritten) — which is what
130
+ * per-frame skinned BLAS needs — so it exists as a standalone dispatch rather than fused into
131
+ * emission. Node indices are local to the tree and `settings.node_word_offset` says where node 0
132
+ * lands, so a BLAS living inside the shared geometry arena refits through this same kernel.
133
+ *
134
+ * @type {ComputeShader}
135
+ */
136
+ export const shader_bvh_refit = ComputeShader.from({
137
+ label: "BVHBuild/Refit",
138
+ resources,
139
+ body,
140
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"shader_radix_sort_histogram.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js"],"names":[],"mappings":"AAkEA;;;;;;;;;;;;GAYG;AACH,0CAFU,aAAa,CAOpB;8BAjF2B,+BAA+B"}
1
+ {"version":3,"file":"shader_radix_sort_histogram.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js"],"names":[],"mappings":"AAkEA;;;;;;;;;;;;GAYG;AACH,0CAFU,aAAa,CAMpB;8BAhF2B,+BAA+B"}
@@ -81,5 +81,4 @@ export const shader_radix_sort_histogram = ComputeShader.from({
81
81
  label: "RadixSort/Histogram",
82
82
  resources,
83
83
  body,
84
- group_size: [SORT_WORKGROUP_SIZE, 1, 1],
85
84
  });
@@ -1 +1 @@
1
- {"version":3,"file":"shader_radix_sort_scatter.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js"],"names":[],"mappings":"AA8KA;;;;;;;;;;;GAWG;AACH,wCAFU,aAAa,CAOpB;8BA3L2B,+BAA+B"}
1
+ {"version":3,"file":"shader_radix_sort_scatter.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js"],"names":[],"mappings":"AA8KA;;;;;;;;;;;GAWG;AACH,wCAFU,aAAa,CAMpB;8BA1L2B,+BAA+B"}
@@ -188,5 +188,4 @@ export const shader_radix_sort_scatter = ComputeShader.from({
188
188
  label: "RadixSort/Scatter",
189
189
  resources,
190
190
  body,
191
- group_size: [SORT_WORKGROUP_SIZE, 1, 1],
192
191
  });
@@ -1 +1 @@
1
- {"version":3,"file":"graph_cull_lights.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/light/cluster/cull/graph_cull_lights.js"],"names":[],"mappings":"AA4KA;;;;;;GAMG;AACH,uFAkBC"}
1
+ {"version":3,"file":"graph_cull_lights.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/light/cluster/cull/graph_cull_lights.js"],"names":[],"mappings":"AAqKA;;;;;;GAMG;AACH,uFAkBC"}