@woosh/meep-engine 3.11.3 → 3.13.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 (596) hide show
  1. package/README.md +14 -18
  2. package/editor/SelectionVisualizer.js +127 -127
  3. package/editor/entity_world_bounds.js +27 -27
  4. package/editor/particles/rebuildParticleEmitter.js +31 -31
  5. package/editor/process/SymbolicDisplayProcess.js +1 -1
  6. package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
  7. package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
  8. package/editor/prototypeEditorShell.js +156 -156
  9. package/editor/selection/editor_pick.js +130 -130
  10. package/editor/selection/screen_rect_frustum.js +119 -119
  11. package/editor/tools/v2/TransformControls.js +971 -971
  12. package/package.json +1 -1
  13. package/src/engine/Engine.d.ts +3 -3
  14. package/src/engine/Engine.d.ts.map +1 -1
  15. package/src/engine/Engine.js +726 -726
  16. package/src/engine/EngineHarness.d.ts +1 -1
  17. package/src/engine/EngineHarness.js +590 -590
  18. package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
  19. package/src/engine/ecs/terrain/ecs/BuildLightTexture.d.ts +1 -1
  20. package/src/engine/ecs/terrain/ecs/BuildLightTexture.js +27 -27
  21. package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -5
  22. package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
  23. package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
  24. package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
  25. package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +1 -1
  26. package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
  27. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +1 -1
  28. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
  29. package/src/engine/graphics/ecs/water/Water.d.ts +1 -1
  30. package/src/engine/graphics/ecs/water/Water.js +104 -104
  31. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +1 -1
  32. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
  33. package/src/engine/graphics3/AnimationGraphSystem.d.ts +65 -0
  34. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -0
  35. package/src/engine/graphics3/AnimationGraphSystem.js +329 -0
  36. package/src/engine/graphics3/AnimationGraphSystem3.d.ts +6 -61
  37. package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +1 -1
  38. package/src/engine/graphics3/AnimationGraphSystem3.js +6 -325
  39. package/src/engine/graphics3/AnimationSystem.d.ts +76 -0
  40. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -0
  41. package/src/engine/graphics3/AnimationSystem.js +352 -0
  42. package/src/engine/graphics3/AnimationSystem3.d.ts +6 -72
  43. package/src/engine/graphics3/AnimationSystem3.d.ts.map +1 -1
  44. package/src/engine/graphics3/AnimationSystem3.js +6 -348
  45. package/src/engine/graphics3/CameraSystem.d.ts +49 -0
  46. package/src/engine/graphics3/CameraSystem.d.ts.map +1 -0
  47. package/src/engine/graphics3/CameraSystem.js +170 -0
  48. package/src/engine/graphics3/CameraSystem3.d.ts +6 -45
  49. package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
  50. package/src/engine/graphics3/CameraSystem3.js +6 -166
  51. package/src/engine/graphics3/DebugDrawSystem.d.ts +72 -0
  52. package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -0
  53. package/src/engine/graphics3/DebugDrawSystem.js +205 -0
  54. package/src/engine/graphics3/DebugDrawSystem3.d.ts +6 -68
  55. package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +1 -1
  56. package/src/engine/graphics3/DebugDrawSystem3.js +6 -201
  57. package/src/engine/graphics3/DecalSystem.d.ts +81 -0
  58. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -0
  59. package/src/engine/graphics3/DecalSystem.js +441 -0
  60. package/src/engine/graphics3/DecalSystem3.d.ts +6 -77
  61. package/src/engine/graphics3/DecalSystem3.d.ts.map +1 -1
  62. package/src/engine/graphics3/DecalSystem3.js +6 -437
  63. package/src/engine/graphics3/FogOfWarSystem.d.ts +74 -0
  64. package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -0
  65. package/src/engine/graphics3/FogOfWarSystem.js +265 -0
  66. package/src/engine/graphics3/FogOfWarSystem3.d.ts +6 -70
  67. package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +1 -1
  68. package/src/engine/graphics3/FogOfWarSystem3.js +6 -261
  69. package/src/engine/graphics3/GraphicsEngine.d.ts +340 -0
  70. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -0
  71. package/src/engine/graphics3/GraphicsEngine.js +790 -0
  72. package/src/engine/graphics3/GraphicsEngine3.d.ts +6 -336
  73. package/src/engine/graphics3/GraphicsEngine3.d.ts.map +1 -1
  74. package/src/engine/graphics3/GraphicsEngine3.js +6 -786
  75. package/src/engine/graphics3/HighlightSystem.d.ts +82 -0
  76. package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -0
  77. package/src/engine/graphics3/HighlightSystem.js +241 -0
  78. package/src/engine/graphics3/HighlightSystem3.d.ts +6 -78
  79. package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
  80. package/src/engine/graphics3/HighlightSystem3.js +6 -237
  81. package/src/engine/graphics3/LightSystem.d.ts +40 -0
  82. package/src/engine/graphics3/LightSystem.d.ts.map +1 -0
  83. package/src/engine/graphics3/LightSystem.js +211 -0
  84. package/src/engine/graphics3/LightSystem3.d.ts +6 -36
  85. package/src/engine/graphics3/LightSystem3.d.ts.map +1 -1
  86. package/src/engine/graphics3/LightSystem3.js +6 -207
  87. package/src/engine/graphics3/MeshSystem.d.ts +106 -0
  88. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -0
  89. package/src/engine/graphics3/MeshSystem.js +647 -0
  90. package/src/engine/graphics3/MeshSystem3.d.ts +6 -102
  91. package/src/engine/graphics3/MeshSystem3.d.ts.map +1 -1
  92. package/src/engine/graphics3/MeshSystem3.js +6 -642
  93. package/src/engine/graphics3/ParticipatingMedia.d.ts +2 -2
  94. package/src/engine/graphics3/ParticipatingMedia.js +203 -203
  95. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +87 -0
  96. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -0
  97. package/src/engine/graphics3/ParticipatingMediaSystem.js +184 -0
  98. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +6 -83
  99. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -1
  100. package/src/engine/graphics3/ParticipatingMediaSystem3.js +6 -180
  101. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +76 -0
  102. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -0
  103. package/src/engine/graphics3/ParticleEmitterSystem.js +289 -0
  104. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +6 -72
  105. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
  106. package/src/engine/graphics3/ParticleEmitterSystem3.js +6 -285
  107. package/src/engine/graphics3/PathDisplaySystem.d.ts +70 -0
  108. package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -0
  109. package/src/engine/graphics3/PathDisplaySystem.js +309 -0
  110. package/src/engine/graphics3/PathDisplaySystem3.d.ts +6 -66
  111. package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +1 -1
  112. package/src/engine/graphics3/PathDisplaySystem3.js +6 -305
  113. package/src/engine/graphics3/Pickable.d.ts +1 -1
  114. package/src/engine/graphics3/Pickable.js +65 -65
  115. package/src/engine/graphics3/PickingQuery.d.ts +1 -1
  116. package/src/engine/graphics3/PickingQuery.js +48 -48
  117. package/src/engine/graphics3/PickingSystem.d.ts +67 -0
  118. package/src/engine/graphics3/PickingSystem.d.ts.map +1 -0
  119. package/src/engine/graphics3/PickingSystem.js +273 -0
  120. package/src/engine/graphics3/PickingSystem3.d.ts +6 -63
  121. package/src/engine/graphics3/PickingSystem3.d.ts.map +1 -1
  122. package/src/engine/graphics3/PickingSystem3.js +6 -269
  123. package/src/engine/graphics3/ShadedGeometrySystem.d.ts +47 -0
  124. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -0
  125. package/src/engine/graphics3/ShadedGeometrySystem.js +169 -0
  126. package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +6 -43
  127. package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +1 -1
  128. package/src/engine/graphics3/ShadedGeometrySystem3.js +6 -165
  129. package/src/engine/graphics3/TerrainSystem.d.ts +80 -0
  130. package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -0
  131. package/src/engine/graphics3/TerrainSystem.js +566 -0
  132. package/src/engine/graphics3/TerrainSystem3.d.ts +6 -76
  133. package/src/engine/graphics3/TerrainSystem3.d.ts.map +1 -1
  134. package/src/engine/graphics3/TerrainSystem3.js +6 -562
  135. package/src/engine/graphics3/TooltipComponentSystem.d.ts +65 -0
  136. package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -0
  137. package/src/engine/graphics3/TooltipComponentSystem.js +328 -0
  138. package/src/engine/graphics3/TooltipComponentSystem3.d.ts +6 -61
  139. package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +1 -1
  140. package/src/engine/graphics3/TooltipComponentSystem3.js +6 -324
  141. package/src/engine/graphics3/Trail3DSystem.d.ts +73 -0
  142. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -0
  143. package/src/engine/graphics3/Trail3DSystem.js +221 -0
  144. package/src/engine/graphics3/Trail3DSystem3.d.ts +6 -69
  145. package/src/engine/graphics3/Trail3DSystem3.d.ts.map +1 -1
  146. package/src/engine/graphics3/Trail3DSystem3.js +6 -217
  147. package/src/engine/graphics3/VolumetricLightMap.d.ts +2 -2
  148. package/src/engine/graphics3/VolumetricLightMap.js +2 -2
  149. package/src/engine/graphics3/VolumetricLightMapSystem.d.ts +98 -0
  150. package/src/engine/graphics3/VolumetricLightMapSystem.d.ts.map +1 -0
  151. package/src/engine/graphics3/VolumetricLightMapSystem.js +261 -0
  152. package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +6 -94
  153. package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +1 -1
  154. package/src/engine/graphics3/VolumetricLightMapSystem3.js +10 -261
  155. package/src/engine/graphics3/WaterSystem.d.ts +59 -0
  156. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -0
  157. package/src/engine/graphics3/WaterSystem.js +293 -0
  158. package/src/engine/graphics3/WaterSystem3.d.ts +6 -55
  159. package/src/engine/graphics3/WaterSystem3.d.ts.map +1 -1
  160. package/src/engine/graphics3/WaterSystem3.js +6 -289
  161. package/src/engine/graphics3/animation/AnimationGraphController.d.ts +1 -1
  162. package/src/engine/graphics3/animation/AnimationGraphController.js +518 -518
  163. package/src/engine/graphics3/animation/ClipListPlayer.d.ts +1 -1
  164. package/src/engine/graphics3/animation/ClipListPlayer.js +263 -263
  165. package/src/engine/graphics3/animation/ClipPlayback.d.ts +2 -2
  166. package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
  167. package/src/engine/graphics3/decal/GPUDecalRenderer.js +3 -3
  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/decal/shader_decal_composite.d.ts.map +1 -1
  177. package/src/engine/graphics3/decal/shader_decal_composite.js +4 -2
  178. package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
  179. package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +2 -3
  180. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
  181. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
  182. package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
  183. package/src/engine/graphics3/highlight/shader_highlight_outline.js +150 -150
  184. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
  185. package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
  186. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
  187. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
  188. package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
  189. package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
  190. package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
  191. package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
  192. package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
  193. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  194. package/src/shade/RENDERER_CONTRACT.md +2 -1
  195. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -0
  196. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  197. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +73 -0
  198. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +750 -0
  199. package/src/shade/device/ShadeGPUCommandContext.d.ts +10 -16
  200. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  201. package/src/shade/device/ShadeGPUCommandContext.js +801 -994
  202. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +107 -0
  203. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -0
  204. package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +222 -0
  205. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +168 -0
  206. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -0
  207. package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +317 -0
  208. package/src/shade/device/timing/GPUTimerArray.d.ts +4 -9
  209. package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
  210. package/src/shade/device/timing/GPUTimerArray.js +261 -289
  211. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +20 -2
  212. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts +59 -0
  213. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts.map +1 -0
  214. package/src/shade/device/timing/ShadeGPUContextProfiler.js +182 -0
  215. package/src/shade/device/timing/profile/GPUProfileSession.d.ts +4 -4
  216. package/src/shade/device/timing/profile/GPUProfileSession.js +4 -4
  217. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  218. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +3 -2
  219. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  220. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +3 -2
  221. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  222. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +135 -134
  223. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
  224. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
  225. package/src/shade/renderer/Renderer.d.ts +0 -6
  226. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  227. package/src/shade/renderer/Renderer.js +0 -29
  228. package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
  229. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  230. package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
  231. package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
  232. package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
  233. package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
  234. package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
  235. package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
  236. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
  237. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
  238. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  239. package/src/shade/renderer/animation/shader_animation_tick.js +4 -2
  240. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  241. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +8 -18
  242. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  243. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +3 -2
  244. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  245. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +4 -2
  246. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts +1 -1
  247. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  248. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +24 -10
  249. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  250. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +3 -2
  251. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  252. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +5 -2
  253. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
  254. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +104 -105
  255. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
  256. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +0 -1
  257. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
  258. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +136 -136
  259. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  260. package/src/shade/renderer/buffer/table/GPUDatabase.js +16 -22
  261. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.d.ts.map +1 -1
  262. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.js +7 -2
  263. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  264. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +11 -5
  265. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  266. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +43 -42
  267. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
  268. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
  269. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
  270. package/src/shade/renderer/deferred/shader_tonemap_HDR.js +4 -1
  271. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +2 -2
  272. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
  273. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
  274. package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
  275. package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
  276. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
  277. package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +3 -3
  278. package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
  279. package/src/shade/renderer/fow/shader_fog_of_war.js +3 -1
  280. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -102
  281. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  282. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +5 -2
  283. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  284. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +3 -11
  285. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
  286. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  287. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +6 -4
  288. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  289. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -10
  290. package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +129 -129
  291. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  292. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +5 -3
  293. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  294. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -1
  295. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.d.ts.map +1 -1
  296. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js +3 -1
  297. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.d.ts.map +1 -1
  298. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js +114 -112
  299. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
  300. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts.map +1 -1
  301. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +4 -1
  302. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
  303. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +9 -6
  304. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
  305. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +4 -1
  306. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
  307. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +6 -8
  308. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  309. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -1
  310. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.d.ts.map +1 -1
  311. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +3 -1
  312. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
  313. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
  314. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +10 -10
  315. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  316. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +4 -2
  317. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  318. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +87 -83
  319. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  320. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +4 -2
  321. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +2 -2
  322. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -1
  323. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +43 -8
  324. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  325. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +4 -5
  326. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  327. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +88 -85
  328. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  329. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +194 -192
  330. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  331. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +33 -69
  332. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  333. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +6 -1
  334. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  335. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +23 -7
  336. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
  337. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
  338. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
  339. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
  340. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
  341. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
  342. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
  343. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
  344. package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
  345. package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +4 -7
  346. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
  347. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
  348. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +1 -1
  349. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  350. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +1 -2
  351. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
  352. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +6 -1
  353. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
  354. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +234 -219
  355. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
  356. package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +191 -191
  357. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.d.ts.map +1 -1
  358. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js +85 -82
  359. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
  360. package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
  361. package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
  362. package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
  363. package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
  364. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
  365. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
  366. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  367. package/src/shade/renderer/particles/graph_particles.js +5 -3
  368. package/src/shade/renderer/particles/prototypeParticleSystem.js +5 -7
  369. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  370. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +27 -13
  371. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  372. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +4 -4
  373. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
  374. package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
  375. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  376. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +18 -7
  377. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  378. package/src/shade/renderer/particles/sort/shader_particle_sort.js +47 -21
  379. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  380. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +7 -10
  381. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  382. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +4 -1
  383. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
  384. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.d.ts.map +1 -1
  385. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.js +3 -1
  386. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.d.ts.map +1 -1
  387. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +4 -2
  388. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +147 -147
  389. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
  390. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +19 -17
  391. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.d.ts.map +1 -1
  392. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +1 -2
  393. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.d.ts.map +1 -1
  394. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +4 -1
  395. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.d.ts.map +1 -1
  396. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +4 -1
  397. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
  398. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +4 -1
  399. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.d.ts.map +1 -1
  400. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +4 -1
  401. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.d.ts.map +1 -1
  402. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +5 -8
  403. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.d.ts.map +1 -1
  404. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +4 -1
  405. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.d.ts.map +1 -1
  406. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +4 -1
  407. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.d.ts.map +1 -1
  408. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.js +4 -1
  409. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  410. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +4 -2
  411. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  412. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +4 -2
  413. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.d.ts.map +1 -1
  414. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +4 -1
  415. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  416. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -11
  417. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
  418. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +5 -1
  419. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  420. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +11 -8
  421. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  422. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +7 -8
  423. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
  424. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +3 -1
  425. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  426. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  427. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +3 -2
  428. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
  429. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
  430. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
  431. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
  432. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  433. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
  434. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
  435. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
  436. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
  437. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +70 -68
  438. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
  439. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
  440. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
  441. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
  442. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +3 -1
  443. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
  444. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +4 -1
  445. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +1 -1
  446. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +103 -101
  447. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  448. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
  449. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
  450. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +3 -1
  451. package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
  452. package/src/shade/renderer/postprocess/taa/shader_taa.js +4 -1
  453. package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +5 -5
  454. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  455. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +339 -341
  456. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
  457. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +68 -69
  458. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
  459. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
  460. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  461. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +0 -1
  462. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
  463. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +64 -65
  464. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
  465. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
  466. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
  467. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
  468. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  469. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +6 -2
  470. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  471. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +4 -2
  472. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
  473. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
  474. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
  475. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
  476. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
  477. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +88 -89
  478. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
  479. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +90 -91
  480. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  481. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +5 -2
  482. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
  483. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +89 -90
  484. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
  485. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
  486. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
  487. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +89 -90
  488. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
  489. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
  490. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
  491. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +153 -154
  492. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
  493. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
  494. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +722 -722
  495. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
  496. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
  497. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
  498. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
  499. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
  500. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  501. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +1 -9
  502. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  503. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +1 -6
  504. package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
  505. package/src/shade/renderer/restir/di/graph_restir_di.js +2 -3
  506. package/src/shade/renderer/restir/di/graph_restir_di_denoise.d.ts.map +1 -1
  507. package/src/shade/renderer/restir/di/graph_restir_di_denoise.js +1 -2
  508. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  509. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +5 -3
  510. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  511. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +4 -3
  512. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  513. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +4 -3
  514. package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
  515. package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
  516. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  517. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +3 -7
  518. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
  519. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
  520. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
  521. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
  522. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
  523. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
  524. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
  525. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  526. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +147 -145
  527. package/src/shade/renderer/shader/ComputeShader.d.ts +26 -5
  528. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  529. package/src/shade/renderer/shader/ComputeShader.js +347 -296
  530. package/src/shade/renderer/shader/ImageShader.js +217 -217
  531. package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
  532. package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
  533. package/src/shade/renderer/shader/ShaderDescriptor.js +20 -0
  534. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +2 -2
  535. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  536. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +189 -189
  537. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  538. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +3 -1
  539. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
  540. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
  541. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
  542. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  543. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +14 -18
  544. package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
  545. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.d.ts.map +1 -1
  546. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.js +5 -1
  547. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.d.ts.map +1 -1
  548. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +3 -1
  549. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +73 -73
  550. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
  551. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +151 -148
  552. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
  553. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +6 -4
  554. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.d.ts.map +1 -1
  555. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.js +18 -4
  556. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
  557. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +11 -12
  558. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.d.ts.map +1 -1
  559. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.js +6 -2
  560. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.d.ts.map +1 -1
  561. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.js +129 -127
  562. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  563. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +5 -3
  564. package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
  565. package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +2 -5
  566. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  567. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +3 -2
  568. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
  569. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  570. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +14 -19
  571. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +3 -2
  572. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  573. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +3 -2
  574. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
  575. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
  576. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
  577. package/src/shade/renderer/water/shader_water.js +246 -246
  578. package/src/shade/vitest.setup.mjs +1 -1
  579. package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
  580. package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
  581. package/src/shade/wgsl/validate_wgsl_source.js +8 -3
  582. package/src/view/minimap/Minimap.d.ts +2 -2
  583. package/src/view/minimap/Minimap.d.ts.map +1 -1
  584. package/src/view/minimap/Minimap.js +225 -225
  585. package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
  586. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  587. package/src/view/minimap/dom/MinimapCameraView.js +206 -206
  588. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts +0 -21
  589. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts.map +0 -1
  590. package/src/shade/device/timing/profile/make_profiling_pass_encoder.js +0 -114
  591. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts +0 -20
  592. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts.map +0 -1
  593. package/src/shade/device/timing/profile/parse_workgroup_size.js +0 -43
  594. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
  595. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
  596. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
@@ -1,5 +1,4 @@
1
1
  import { TextureResourceDescriptor } from "../../../device/graph/TextureResourceDescriptor.js";
2
- import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
3
2
  import { shader_restir_di_denoise } from "./shader_restir_di_denoise.js";
4
3
 
5
4
  /**
@@ -51,7 +50,7 @@ export function graph_restir_di_denoise({
51
50
  gBufferNormal: resources.get(data.normal).obtainView(),
52
51
  output: resources.get(data.output).obtainView(),
53
52
  camera: view.camera.buffer,
54
- step_size: context.encoder.allocateTransientValueBuffer(u32, step_size),
53
+ step_size: step_size,
55
54
  }
56
55
  });
57
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shader_restir_di_denoise.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/restir/di/shader_restir_di_denoise.js"],"names":[],"mappings":"AAmIA,qDAKG;8BAhI2B,+BAA+B"}
1
+ {"version":3,"file":"shader_restir_di_denoise.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/restir/di/shader_restir_di_denoise.js"],"names":[],"mappings":"AAsIA,qDAIG;8BAlI2B,+BAA+B"}
@@ -35,13 +35,16 @@ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourc
35
35
 
36
36
  const resources = new ShaderResourceSetDescriptor();
37
37
 
38
+ // per-dispatch, four bytes, read-only: immediate data rather than a uniform buffer. The a-trous
39
+ // denoise runs one dispatch per step, so the buffer was allocated per iteration.
40
+ resources.setImmediate("step_size", u32);
41
+
38
42
  resources.createGroup()
39
43
  .addTexture("tInput")
40
44
  .addTexture("gBufferDepth")
41
45
  .addTexture("gBufferNormal", "uint")
42
46
  .addStorageTexture("output", "rgba16float", "2d", "write-only")
43
- .addUniform("camera", CAMERA_UNIFORM_STRUCT)
44
- .addUniform("step_size", u32);
47
+ .addUniform("camera", CAMERA_UNIFORM_STRUCT);
45
48
 
46
49
  const body = CodeChunk.from(
47
50
  //language=WGSL
@@ -133,5 +136,4 @@ export const shader_restir_di_denoise = ComputeShader.from({
133
136
  label: "ReSTIR DI Denoise",
134
137
  resources,
135
138
  body,
136
- group_size: [8, 8, 1],
137
139
  });
@@ -1 +1 @@
1
- {"version":3,"file":"shader_restir_di_resample.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/restir/di/shader_restir_di_resample.js"],"names":[],"mappings":"AA4HA,sDAKG;8BAtH2B,+BAA+B"}
1
+ {"version":3,"file":"shader_restir_di_resample.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/restir/di/shader_restir_di_resample.js"],"names":[],"mappings":"AA8HA,sDAIG;8BAvH2B,+BAA+B"}
@@ -36,6 +36,9 @@ import { chunk_restir_temporal_reuse } from "./chunk_restir_temporal_reuse.js";
36
36
 
37
37
  const resources = new ShaderResourceSetDescriptor();
38
38
 
39
+ // per-dispatch, four bytes, read-only: immediate data rather than a uniform buffer
40
+ resources.setImmediate("m_initial", u32);
41
+
39
42
  // G-buffer + reprojection inputs + uniforms (no storage buffers in this group).
40
43
  resources.createGroup()
41
44
  .addTexture("gBufferDepth")
@@ -47,8 +50,7 @@ resources.createGroup()
47
50
  .addTexture("tOcclusionClip")
48
51
  .addTexture("tSTBN_vec2", "unfilterable-float", "3d")
49
52
  .addUniform("camera", CAMERA_UNIFORM_STRUCT)
50
- .addUniform("view", VIEW_UNIFORM_STRUCT)
51
- .addUniform("m_initial", u32);
53
+ .addUniform("view", VIEW_UNIFORM_STRUCT);
52
54
 
53
55
  // Local lights + froxel clusters (the screen-space tile candidate set).
54
56
  const RESTIR_DI_LIGHT_GROUP = new ShaderResourceGroupDescriptor();
@@ -126,5 +128,4 @@ export const shader_restir_di_resample = ComputeShader.from({
126
128
  label: "ReSTIR DI Resample",
127
129
  resources,
128
130
  body,
129
- group_size: [8, 8, 1],
130
131
  });
@@ -1 +1 @@
1
- {"version":3,"file":"shader_restir_di_resolve.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/restir/di/shader_restir_di_resolve.js"],"names":[],"mappings":"AA8FA,qDAKG;8BA7F2B,+BAA+B"}
1
+ {"version":3,"file":"shader_restir_di_resolve.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/restir/di/shader_restir_di_resolve.js"],"names":[],"mappings":"AAgGA,qDAIG;8BA9F2B,+BAA+B"}
@@ -28,6 +28,9 @@ import { chunk_restir_resolve } from "./chunk_restir_resolve.js";
28
28
 
29
29
  const resources = new ShaderResourceSetDescriptor();
30
30
 
31
+ // per-dispatch, four bytes, read-only: immediate data rather than a uniform buffer
32
+ resources.setImmediate("use_screen_space_shadow", u32);
33
+
31
34
  // G-buffer + radiance output + uniforms.
32
35
  resources.createGroup()
33
36
  .addTexture("gBufferDepth")
@@ -40,8 +43,7 @@ resources.createGroup()
40
43
  .addTexture("tHZB")
41
44
  .addStorageTexture("output", "rgba16float", "2d", "write-only")
42
45
  .addUniform("camera", CAMERA_UNIFORM_STRUCT)
43
- .addUniform("view", VIEW_UNIFORM_STRUCT)
44
- .addUniform("use_screen_space_shadow", u32);
46
+ .addUniform("view", VIEW_UNIFORM_STRUCT);
45
47
 
46
48
  // Local light tables (resolve re-evaluates the selected light; no clusters needed).
47
49
  const RESTIR_DI_RESOLVE_LIGHT_GROUP = new ShaderResourceGroupDescriptor();
@@ -96,5 +98,4 @@ export const shader_restir_di_resolve = ComputeShader.from({
96
98
  label: "ReSTIR DI Resolve",
97
99
  resources,
98
100
  body,
99
- group_size: [8, 8, 1],
100
101
  });
@@ -1 +1 @@
1
- {"version":3,"file":"shader_restir_di_spatial.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/restir/di/shader_restir_di_spatial.js"],"names":[],"mappings":"AA+GA,qDAKG;8BA3G2B,+BAA+B"}
1
+ {"version":3,"file":"shader_restir_di_spatial.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/restir/di/shader_restir_di_spatial.js"],"names":[],"mappings":"AA+GA,qDAIG;8BA1G2B,+BAA+B"}
@@ -1,117 +1,116 @@
1
- import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
2
- import { chunk_rtxdi_pack_reservoir } from "../reservoir/chunk_rtxdi_pack_reservoir.js";
3
- import { chunk_rtxdi_unpack_reservoir } from "../reservoir/chunk_rtxdi_unpack_reservoir.js";
4
- import { RTXDI_PackedReservoir } from "../reservoir/RTXDI_PackedReservoir.js";
5
- import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
6
- import { chunk_stbn_sample_vec2 } from "../../shader/chunk/noise/chunk_stbn_sample_vec2.js";
7
- import { chunk_random } from "../../shader/chunk/random/chunk_random.js";
8
- import { chunk_random_initialize } from "../../shader/chunk/random/chunk_random_initialize.js";
9
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
10
- import { ComputeShader } from "../../shader/ComputeShader.js";
11
- import { ShaderResourceGroupDescriptor } from "../../shader/resource/ShaderResourceGroupDescriptor.js";
12
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
13
- import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
14
- import { chunk_restir_reconstruct_surface } from "./chunk_restir_reconstruct_surface.js";
15
- import { chunk_restir_reservoir_address } from "./chunk_restir_reservoir_address.js";
16
- import { chunk_restir_spatial_reuse } from "./chunk_restir_spatial_reuse.js";
17
-
18
- /**
19
- * ReSTIR DI — spatial pass (between resample and resolve).
20
- *
21
- * Reads the resample pass's reservoir for the pixel and its neighbours
22
- * (`reservoir_input`), combines them with geometric rejection, and writes the
23
- * spatiotemporal result to `reservoir_output` — which the resolve pass shades and
24
- * which becomes next frame's temporal history.
25
- *
26
- * Holds light_data + the two reservoir buffers = 3 storage buffers (no ray
27
- * tracing, no clusters), well within maxStorageBuffersPerShaderStage.
28
- *
29
- * @type {ComputeShader}
30
- */
31
-
32
- const resources = new ShaderResourceSetDescriptor();
33
-
34
- // G-buffer (surface reconstruct + neighbour rejection) + uniforms.
35
- resources.createGroup()
36
- .addTexture("gBufferDepth")
37
- .addTexture("gBufferPBR")
38
- .addTexture("gBufferNormal", "uint")
39
- .addTexture("gBufferAlbedo")
40
- .addTexture("gBufferEmissive", "uint")
41
- .addTexture("tSTBN_vec2", "unfilterable-float", "3d")
42
- .addUniform("camera", CAMERA_UNIFORM_STRUCT)
43
- .addUniform("view", VIEW_UNIFORM_STRUCT);
44
-
45
- // Local light tables (recompute neighbour target functions; no clusters needed).
46
- const RESTIR_DI_SPATIAL_LIGHT_GROUP = new ShaderResourceGroupDescriptor();
47
- RESTIR_DI_SPATIAL_LIGHT_GROUP.label = "restir-di/spatial-lights";
48
- RESTIR_DI_SPATIAL_LIGHT_GROUP.addStorageBuffer("light_data", WebGPUArray.u32);
49
- resources.addGroup(RESTIR_DI_SPATIAL_LIGHT_GROUP);
50
-
51
- // Input = resample output (read, incl. neighbours), output = spatiotemporal final.
52
- const RESTIR_DI_SPATIAL_RESERVOIR_GROUP = new ShaderResourceGroupDescriptor();
53
- RESTIR_DI_SPATIAL_RESERVOIR_GROUP.label = "restir-di/spatial-reservoirs";
54
- RESTIR_DI_SPATIAL_RESERVOIR_GROUP
55
- .addStorageBuffer("reservoir_input", WebGPUArray.from(RTXDI_PackedReservoir), false)
56
- .addStorageBuffer("reservoir_output", WebGPUArray.from(RTXDI_PackedReservoir), true);
57
- resources.addGroup(RESTIR_DI_SPATIAL_RESERVOIR_GROUP);
58
-
59
- const body = CodeChunk.from(
60
- //language=WGSL
61
- `
62
- @compute @workgroup_size(8, 8, 1)
63
- fn main(
64
- @builtin(global_invocation_id) global_invocation_id: vec3<u32>,
65
- ) {
66
- let i_coord = global_invocation_id.xy;
67
- let texture_size = textureDimensions(gBufferDepth);
68
-
69
- if (!all(i_coord < texture_size)) {
70
- return;
71
- }
72
-
73
- // Distinct seed from the resample pass so the tap rotation decorrelates.
74
- random_initialize(vec3<u32>(i_coord, view.frame_index), vec3<u32>(0x68E31DA4u, 0xB5297A4Du, 0x1B56C4E9u));
75
-
76
- let address = restir_reservoir_address(i_coord, texture_size.x);
77
- let self_reservoir = rtxdi_unpack_reservoir(reservoir_input[address]);
78
-
79
- var result = self_reservoir;
80
-
81
- let surface = restir_reconstruct_surface(i_coord, texture_size);
82
- if (surface.is_valid) {
83
- // Blue-noise rotation for the neighbour tap pattern. Offset the STBN
84
- // temporal slice so it decorrelates from the resample pass's STBN use.
85
- let rotation_random = stbn_sample_vec2(vec3<u32>(i_coord, view.frame_index + 32u)).x;
86
-
87
- result = restir_spatial_reuse(
88
- self_reservoir,
89
- surface.geometry,
90
- surface.material,
91
- surface.view_depth,
92
- i_coord,
93
- texture_size,
94
- rotation_random,
95
- );
96
- }
97
-
98
- reservoir_output[address] = rtxdi_pack_reservoir(result);
99
- }
100
- `, [
101
- chunk_restir_reconstruct_surface,
102
- chunk_restir_spatial_reuse,
103
- chunk_stbn_sample_vec2,
104
- chunk_rtxdi_unpack_reservoir,
105
- chunk_rtxdi_pack_reservoir,
106
- chunk_restir_reservoir_address,
107
- chunk_random,
108
- chunk_random_initialize,
109
- ]
110
- );
111
-
112
- export const shader_restir_di_spatial = ComputeShader.from({
113
- label: "ReSTIR DI Spatial",
114
- resources,
115
- body,
116
- group_size: [8, 8, 1],
117
- });
1
+ import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
2
+ import { chunk_rtxdi_pack_reservoir } from "../reservoir/chunk_rtxdi_pack_reservoir.js";
3
+ import { chunk_rtxdi_unpack_reservoir } from "../reservoir/chunk_rtxdi_unpack_reservoir.js";
4
+ import { RTXDI_PackedReservoir } from "../reservoir/RTXDI_PackedReservoir.js";
5
+ import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
6
+ import { chunk_stbn_sample_vec2 } from "../../shader/chunk/noise/chunk_stbn_sample_vec2.js";
7
+ import { chunk_random } from "../../shader/chunk/random/chunk_random.js";
8
+ import { chunk_random_initialize } from "../../shader/chunk/random/chunk_random_initialize.js";
9
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
10
+ import { ComputeShader } from "../../shader/ComputeShader.js";
11
+ import { ShaderResourceGroupDescriptor } from "../../shader/resource/ShaderResourceGroupDescriptor.js";
12
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
13
+ import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
14
+ import { chunk_restir_reconstruct_surface } from "./chunk_restir_reconstruct_surface.js";
15
+ import { chunk_restir_reservoir_address } from "./chunk_restir_reservoir_address.js";
16
+ import { chunk_restir_spatial_reuse } from "./chunk_restir_spatial_reuse.js";
17
+
18
+ /**
19
+ * ReSTIR DI — spatial pass (between resample and resolve).
20
+ *
21
+ * Reads the resample pass's reservoir for the pixel and its neighbours
22
+ * (`reservoir_input`), combines them with geometric rejection, and writes the
23
+ * spatiotemporal result to `reservoir_output` — which the resolve pass shades and
24
+ * which becomes next frame's temporal history.
25
+ *
26
+ * Holds light_data + the two reservoir buffers = 3 storage buffers (no ray
27
+ * tracing, no clusters), well within maxStorageBuffersPerShaderStage.
28
+ *
29
+ * @type {ComputeShader}
30
+ */
31
+
32
+ const resources = new ShaderResourceSetDescriptor();
33
+
34
+ // G-buffer (surface reconstruct + neighbour rejection) + uniforms.
35
+ resources.createGroup()
36
+ .addTexture("gBufferDepth")
37
+ .addTexture("gBufferPBR")
38
+ .addTexture("gBufferNormal", "uint")
39
+ .addTexture("gBufferAlbedo")
40
+ .addTexture("gBufferEmissive", "uint")
41
+ .addTexture("tSTBN_vec2", "unfilterable-float", "3d")
42
+ .addUniform("camera", CAMERA_UNIFORM_STRUCT)
43
+ .addUniform("view", VIEW_UNIFORM_STRUCT);
44
+
45
+ // Local light tables (recompute neighbour target functions; no clusters needed).
46
+ const RESTIR_DI_SPATIAL_LIGHT_GROUP = new ShaderResourceGroupDescriptor();
47
+ RESTIR_DI_SPATIAL_LIGHT_GROUP.label = "restir-di/spatial-lights";
48
+ RESTIR_DI_SPATIAL_LIGHT_GROUP.addStorageBuffer("light_data", WebGPUArray.u32);
49
+ resources.addGroup(RESTIR_DI_SPATIAL_LIGHT_GROUP);
50
+
51
+ // Input = resample output (read, incl. neighbours), output = spatiotemporal final.
52
+ const RESTIR_DI_SPATIAL_RESERVOIR_GROUP = new ShaderResourceGroupDescriptor();
53
+ RESTIR_DI_SPATIAL_RESERVOIR_GROUP.label = "restir-di/spatial-reservoirs";
54
+ RESTIR_DI_SPATIAL_RESERVOIR_GROUP
55
+ .addStorageBuffer("reservoir_input", WebGPUArray.from(RTXDI_PackedReservoir), false)
56
+ .addStorageBuffer("reservoir_output", WebGPUArray.from(RTXDI_PackedReservoir), true);
57
+ resources.addGroup(RESTIR_DI_SPATIAL_RESERVOIR_GROUP);
58
+
59
+ const body = CodeChunk.from(
60
+ //language=WGSL
61
+ `
62
+ @compute @workgroup_size(8, 8, 1)
63
+ fn main(
64
+ @builtin(global_invocation_id) global_invocation_id: vec3<u32>,
65
+ ) {
66
+ let i_coord = global_invocation_id.xy;
67
+ let texture_size = textureDimensions(gBufferDepth);
68
+
69
+ if (!all(i_coord < texture_size)) {
70
+ return;
71
+ }
72
+
73
+ // Distinct seed from the resample pass so the tap rotation decorrelates.
74
+ random_initialize(vec3<u32>(i_coord, view.frame_index), vec3<u32>(0x68E31DA4u, 0xB5297A4Du, 0x1B56C4E9u));
75
+
76
+ let address = restir_reservoir_address(i_coord, texture_size.x);
77
+ let self_reservoir = rtxdi_unpack_reservoir(reservoir_input[address]);
78
+
79
+ var result = self_reservoir;
80
+
81
+ let surface = restir_reconstruct_surface(i_coord, texture_size);
82
+ if (surface.is_valid) {
83
+ // Blue-noise rotation for the neighbour tap pattern. Offset the STBN
84
+ // temporal slice so it decorrelates from the resample pass's STBN use.
85
+ let rotation_random = stbn_sample_vec2(vec3<u32>(i_coord, view.frame_index + 32u)).x;
86
+
87
+ result = restir_spatial_reuse(
88
+ self_reservoir,
89
+ surface.geometry,
90
+ surface.material,
91
+ surface.view_depth,
92
+ i_coord,
93
+ texture_size,
94
+ rotation_random,
95
+ );
96
+ }
97
+
98
+ reservoir_output[address] = rtxdi_pack_reservoir(result);
99
+ }
100
+ `, [
101
+ chunk_restir_reconstruct_surface,
102
+ chunk_restir_spatial_reuse,
103
+ chunk_stbn_sample_vec2,
104
+ chunk_rtxdi_unpack_reservoir,
105
+ chunk_rtxdi_pack_reservoir,
106
+ chunk_restir_reservoir_address,
107
+ chunk_random,
108
+ chunk_random_initialize,
109
+ ]
110
+ );
111
+
112
+ export const shader_restir_di_spatial = ComputeShader.from({
113
+ label: "ReSTIR DI Spatial",
114
+ resources,
115
+ body,
116
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"GPUInstancesAccelerationStructure.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUInstancesAccelerationStructure.js"],"names":[],"mappings":"AAgCA;;GAEG;AACH;IA2EI;;;OAGG;IACH,uCAcC;IA/ED;;;;;OAKG;IACH,eAEC;IAED,cAKC;IAOD;;;OAGG;IACH,wBAEC;IA2DD;;;;OAIG;IACH,oBAHW,MAAM,wBAmBhB;IAED;;;;;;OAMG;IACH,uBAFW,MAAM,QAkBhB;IAED;;;;OAIG;IACH,uBAHW,MAAM,wBAYhB;IAuID;;OAEG;IACH,oDAIC;IAED;;OAEG;IACH,+CAMC;;CACJ;oBA/VmB,gCAAgC"}
1
+ {"version":3,"file":"GPUInstancesAccelerationStructure.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUInstancesAccelerationStructure.js"],"names":[],"mappings":"AA+BA;;GAEG;AACH;IA2EI;;;OAGG;IACH,uCAcC;IA/ED;;;;;OAKG;IACH,eAEC;IAED,cAKC;IAOD;;;OAGG;IACH,wBAEC;IA2DD;;;;OAIG;IACH,oBAHW,MAAM,wBAmBhB;IAED;;;;;;OAMG;IACH,uBAFW,MAAM,QAkBhB;IAED;;;;OAIG;IACH,uBAHW,MAAM,wBAYhB;IAuID;;OAEG;IACH,oDAIC;IAED;;OAEG;IACH,+CAMC;;CACJ;oBA9VmB,gCAAgC"}
@@ -4,7 +4,6 @@ import { FrameGraph } from "../../../engine/graphics/render/frame_graph/FrameGra
4
4
  import { BufferResourceDescriptor } from "../../device/graph/BufferResourceDescriptor.js";
5
5
  import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
6
6
  import { ensure_buffer_capacity } from "../geometry/make_temp_gpu_buffer.js";
7
- import { BVH_BUILD_SETTINGS_STRUCT } from "../gpu_primitive/bvh/BVH_BUILD_SETTINGS_STRUCT.js";
8
7
  import { bvh_buffer_size } from "../gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js";
9
8
  import { graph_bvh_build_lbvh } from "../gpu_primitive/bvh/graph_bvh_build_lbvh.js";
10
9
  import { shader_bvh_extract_instance_leaves } from "./shader_bvh_extract_instance_leaves.js";
@@ -365,14 +364,11 @@ function extract_execute(pass_data, resources, context) {
365
364
  // Seeded rather than cleared: the merge is a min/max, and zero is not an identity for either.
366
365
  encoder.writeBuffer(scene_bounds, 0, SCENE_BOUNDS_SEED.buffer, 0, SCENE_BOUNDS_SEED.byteLength);
367
366
 
368
- shader_bvh_extract_instance_leaves.dispatchLinear({
367
+ shader_bvh_extract_instance_leaves.dispatchThreads({
369
368
  encoder,
370
- element_count: pass_data.element_count,
369
+ thread_count_x: pass_data.element_count,
371
370
  bindings: {
372
- settings: encoder.allocateTransientValueBuffer(
373
- BVH_BUILD_SETTINGS_STRUCT,
374
- { element_count: pass_data.element_count }
375
- ),
371
+ settings: { element_count: pass_data.element_count },
376
372
  rows: resources.get(pass_data.rows),
377
373
  scene_database: resources.get(pass_data.scene_database),
378
374
  leaf_bounds: resources.get(pass_data.leaf_bounds),
@@ -1,123 +1,123 @@
1
- import { assert } from "../../../../core/assert.js";
2
- import { round_up } from "../../../../core/math/round_up.js";
3
- import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
4
- import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
5
- import { graph_import_buffer } from "../../shader/graph/graph_import_buffer.js";
6
- import {
7
- shader_nodes_update_transform_hierarchy_naive
8
- } from "./shader_nodes_update_transform_hierarchy_naive.js";
9
-
10
- /**
11
- * High-level wrapper for the brute-force transform-hierarchy update.
12
- *
13
- * Drop-in alternative to {@link graph_scene_update_transform_hierarchy}
14
- * that drives the simple "every thread walks its own parent chain"
15
- * shader instead of the CSDLDF lookback variant. Same input shape
16
- * (full `[0, node_count)` sweep), same output (writes `node.global`),
17
- * same return contract — swap the import in the caller and nothing
18
- * else changes.
19
- *
20
- * Useful as a known-correct reference: when the CSDLDF variant
21
- * misbehaves, run the naive one in its place and see if the symptom
22
- * persists. If it does, the bug is upstream of the propagation
23
- * (apply pass, build, scene_database upload). If it doesn't, the
24
- * bug is in CSDLDF's lookback / fallback / spine logic.
25
- *
26
- * @param {object} args
27
- * @param {FrameGraph} args.graph
28
- * @param {GPUSceneContext} args.scene
29
- * @param {number} [args.scene_database] optional graph
30
- * resource handle to chain off if the database was already
31
- * written by an earlier pass this frame. Omit for a standalone
32
- * import.
33
- *
34
- * @returns {{ scene_database: number }}
35
- */
36
- export function graph_scene_update_transform_hierarchy_naive({
37
- graph,
38
- scene,
39
- scene_database,
40
- }) {
41
- assert.defined(graph, 'graph');
42
- assert.defined(scene, 'scene');
43
- assert.equal(scene.isGPUSceneContext, true, 'scene must be a GPUSceneContext');
44
-
45
- // Live rows, which is not the same as the highest row in use: removal frees a row and leaves a
46
- // hole, so the ids are taken from the table's occupancy below rather than counted up.
47
- const transforms_table = scene.scene_database.get('transforms');
48
- const node_count = transforms_table.count;
49
-
50
- const gr_scene_database = scene_database !== undefined
51
- ? scene_database
52
- : graph_import_buffer(graph, scene.scene_database_buffer, "scene_database");
53
-
54
- if (node_count === 0) {
55
- return { scene_database: gr_scene_database };
56
- }
57
-
58
- // ── Pass 1: assemble the input buffer ───────────────────────────
59
- // Same layout as the CSDLDF wrapper: u32 count + 12 bytes of
60
- // alignment padding + `array<u32>` of node ids.
61
-
62
- const HEADER_BYTES = 16;
63
- const HEADER_U32S = HEADER_BYTES / u32.size;
64
- const buffer_byte_size = round_up(HEADER_BYTES + node_count * u32.size, 16);
65
-
66
- const build_data = {};
67
-
68
- function build_execute(data, resources, context) {
69
- const buffer = resources.get(data.buffer);
70
- const encoder = context.encoder;
71
-
72
- const flat = new Uint32Array(HEADER_U32S + node_count);
73
- flat[0] = transforms_table.write_occupied_element_ids(flat, HEADER_U32S);
74
-
75
- encoder.writeBuffer(
76
- buffer, 0,
77
- flat.buffer, flat.byteOffset,
78
- flat.byteLength,
79
- );
80
- }
81
-
82
- const build_pass = graph.add(
83
- "scene-graph naive / build node id list",
84
- build_data,
85
- build_execute,
86
- );
87
- build_data.buffer = build_pass.create(
88
- "node id list (naive)",
89
- BufferResourceDescriptor.from(
90
- buffer_byte_size,
91
- GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
92
- ),
93
- );
94
-
95
- // ── Pass 2: dispatch the brute-force update ────────────────────
96
-
97
- const update_data = {};
98
-
99
- function update_execute(data, resources, context) {
100
- shader_nodes_update_transform_hierarchy_naive.dispatchLinear({
101
- encoder: context.encoder,
102
- element_count: node_count,
103
- bindings: {
104
- input: resources.get(data.input),
105
- scene_database: resources.get(data.scene_database),
106
- },
107
- });
108
- }
109
-
110
- const update_pass = graph.add(
111
- "scene-graph naive / propagate",
112
- update_data,
113
- update_execute,
114
- );
115
- update_data.input = update_pass.read(build_data.buffer);
116
- update_data.scene_database = update_pass.write(
117
- update_pass.read(gr_scene_database)
118
- );
119
-
120
- return {
121
- scene_database: update_data.scene_database,
122
- };
123
- }
1
+ import { assert } from "../../../../core/assert.js";
2
+ import { round_up } from "../../../../core/math/round_up.js";
3
+ import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
4
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
5
+ import { graph_import_buffer } from "../../shader/graph/graph_import_buffer.js";
6
+ import {
7
+ shader_nodes_update_transform_hierarchy_naive
8
+ } from "./shader_nodes_update_transform_hierarchy_naive.js";
9
+
10
+ /**
11
+ * High-level wrapper for the brute-force transform-hierarchy update.
12
+ *
13
+ * Drop-in alternative to {@link graph_scene_update_transform_hierarchy}
14
+ * that drives the simple "every thread walks its own parent chain"
15
+ * shader instead of the CSDLDF lookback variant. Same input shape
16
+ * (full `[0, node_count)` sweep), same output (writes `node.global`),
17
+ * same return contract — swap the import in the caller and nothing
18
+ * else changes.
19
+ *
20
+ * Useful as a known-correct reference: when the CSDLDF variant
21
+ * misbehaves, run the naive one in its place and see if the symptom
22
+ * persists. If it does, the bug is upstream of the propagation
23
+ * (apply pass, build, scene_database upload). If it doesn't, the
24
+ * bug is in CSDLDF's lookback / fallback / spine logic.
25
+ *
26
+ * @param {object} args
27
+ * @param {FrameGraph} args.graph
28
+ * @param {GPUSceneContext} args.scene
29
+ * @param {number} [args.scene_database] optional graph
30
+ * resource handle to chain off if the database was already
31
+ * written by an earlier pass this frame. Omit for a standalone
32
+ * import.
33
+ *
34
+ * @returns {{ scene_database: number }}
35
+ */
36
+ export function graph_scene_update_transform_hierarchy_naive({
37
+ graph,
38
+ scene,
39
+ scene_database,
40
+ }) {
41
+ assert.defined(graph, 'graph');
42
+ assert.defined(scene, 'scene');
43
+ assert.equal(scene.isGPUSceneContext, true, 'scene must be a GPUSceneContext');
44
+
45
+ // Live rows, which is not the same as the highest row in use: removal frees a row and leaves a
46
+ // hole, so the ids are taken from the table's occupancy below rather than counted up.
47
+ const transforms_table = scene.scene_database.get('transforms');
48
+ const node_count = transforms_table.count;
49
+
50
+ const gr_scene_database = scene_database !== undefined
51
+ ? scene_database
52
+ : graph_import_buffer(graph, scene.scene_database_buffer, "scene_database");
53
+
54
+ if (node_count === 0) {
55
+ return { scene_database: gr_scene_database };
56
+ }
57
+
58
+ // ── Pass 1: assemble the input buffer ───────────────────────────
59
+ // Same layout as the CSDLDF wrapper: u32 count + 12 bytes of
60
+ // alignment padding + `array<u32>` of node ids.
61
+
62
+ const HEADER_BYTES = 16;
63
+ const HEADER_U32S = HEADER_BYTES / u32.size;
64
+ const buffer_byte_size = round_up(HEADER_BYTES + node_count * u32.size, 16);
65
+
66
+ const build_data = {};
67
+
68
+ function build_execute(data, resources, context) {
69
+ const buffer = resources.get(data.buffer);
70
+ const encoder = context.encoder;
71
+
72
+ const flat = new Uint32Array(HEADER_U32S + node_count);
73
+ flat[0] = transforms_table.write_occupied_element_ids(flat, HEADER_U32S);
74
+
75
+ encoder.writeBuffer(
76
+ buffer, 0,
77
+ flat.buffer, flat.byteOffset,
78
+ flat.byteLength,
79
+ );
80
+ }
81
+
82
+ const build_pass = graph.add(
83
+ "scene-graph naive / build node id list",
84
+ build_data,
85
+ build_execute,
86
+ );
87
+ build_data.buffer = build_pass.create(
88
+ "node id list (naive)",
89
+ BufferResourceDescriptor.from(
90
+ buffer_byte_size,
91
+ GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
92
+ ),
93
+ );
94
+
95
+ // ── Pass 2: dispatch the brute-force update ────────────────────
96
+
97
+ const update_data = {};
98
+
99
+ function update_execute(data, resources, context) {
100
+ shader_nodes_update_transform_hierarchy_naive.dispatchThreads({
101
+ encoder: context.encoder,
102
+ thread_count_x: node_count,
103
+ bindings: {
104
+ input: resources.get(data.input),
105
+ scene_database: resources.get(data.scene_database),
106
+ },
107
+ });
108
+ }
109
+
110
+ const update_pass = graph.add(
111
+ "scene-graph naive / propagate",
112
+ update_data,
113
+ update_execute,
114
+ );
115
+ update_data.input = update_pass.read(build_data.buffer);
116
+ update_data.scene_database = update_pass.write(
117
+ update_pass.read(gr_scene_database)
118
+ );
119
+
120
+ return {
121
+ scene_database: update_data.scene_database,
122
+ };
123
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"shader_nodes_record_input_positions.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js"],"names":[],"mappings":"AAwDA;;GAEG;AACH,kDAFU,aAAa,CAOpB;8BA5D2B,+BAA+B"}
1
+ {"version":3,"file":"shader_nodes_record_input_positions.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js"],"names":[],"mappings":"AAwDA;;GAEG;AACH,kDAFU,aAAa,CAMpB;8BA3D2B,+BAA+B"}