@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,129 +1,128 @@
1
- import { atomic_u32, u32 } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUArray } from "../shader/type/WebGPUArray.js";
3
- import { MATERIAL_METADATA_STRUCT } from "../material/MATERIAL_METADATA_STRUCT.js";
4
- import { chunk_write_object_property } from "../object_property/chunk_write_object_property.js";
5
- import { CodeChunk } from "../shader/compiler/CodeChunk.js";
6
- import { ComputeShader } from "../shader/ComputeShader.js";
7
- import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
8
- import { ANIMATION_DATABASE_SPEC } from "./ANIMATION_DATABASE_SPEC.js";
9
- import { chunk_animation_track_evaluate } from "./animation_track_evaluate.js";
10
-
11
- const GROUP_TABLE = ANIMATION_DATABASE_SPEC.get('animation_bound_track_groups');
12
- const CLIP_TABLE = ANIMATION_DATABASE_SPEC.get('animation_clips');
13
- const TRACK_TABLE = ANIMATION_DATABASE_SPEC.get('animation_tracks');
14
-
15
- /**
16
- * Workgroup size for the apply pass. Exported so dispatchers can pair it
17
- * with `animation_bound_track_groups.dispatch_group_count(WORKGROUP_SIZE)` —
18
- * the page iterator's slot-to-workgroup mapping is computed against this
19
- * value, so the two must agree.
20
- */
21
- export const WORKGROUP_SIZE = 64;
22
-
23
- const PG_PREFIX = GROUP_TABLE.page_iterator_symbol_prefix(WORKGROUP_SIZE);
24
-
25
- // `materials` and `pose_accumulator` are referenced by name from the
26
- // property-write chunks rather than passed as pointers — the chunks
27
- // rely on these bindings being declared in the importing shader.
28
- //
29
- // `pose_accumulator` is the per-Node3D contribution scratch (one slot per
30
- // transforms-table row, `POSE_ACCUMULATOR_STRIDE` u32s each). Apply
31
- // atomic-adds weighted values into it; the downstream resolve pass
32
- // drains it into `transforms_table.local_*`.
33
- const resources = new ShaderResourceSetDescriptor();
34
- resources.createGroup()
35
- .addStorageBuffer('animation_database', WebGPUArray.from(u32), false)
36
- .addStorageBuffer('pose_accumulator', WebGPUArray.from(atomic_u32), true)
37
- .addStorageBuffer('materials', WebGPUArray.from(MATERIAL_METADATA_STRUCT), true);
38
-
39
- // Strict 1:1 page-iterator dispatch: one thread per group-node slot.
40
- // A page is covered by GROUPS_PER_PAGE workgroups in parallel; setup
41
- // derives (page_index, page_group) from workgroup_id.x, the in-page
42
- // slot from page_group + local_id, and lanes past ELEMENTS_PER_PAGE
43
- // (only possible in the last page_group) are tail-masked.
44
- const body = CodeChunk.from(
45
- //language=WGSL
46
- `
47
- @compute @workgroup_size(${WORKGROUP_SIZE},1,1)
48
- fn main(
49
- @builtin(workgroup_id) wg_id: vec3<u32>,
50
- @builtin(local_invocation_index) local_id: u32,
51
- ) {
52
- // page_address is uniform across the workgroup → unallocated-page
53
- // bail is uniform-control-flow safe.
54
- if !${PG_PREFIX}_setup(&animation_database, wg_id.x, local_id) {
55
- return;
56
- }
57
-
58
- let slot_in_page = ${PG_PREFIX}_slot_in_page(local_id);
59
-
60
- if slot_in_page >= ${PG_PREFIX}_ELEMENTS_PER_PAGE {
61
- return;
62
- }
63
- if !${PG_PREFIX}_is_occupied(slot_in_page) {
64
- return;
65
- }
66
-
67
- // Per-thread group node: load it, resolve the back-referenced clip,
68
- // and apply every inline binding under that clip's effective time.
69
- // The chain's next field is for the host (linking new nodes onto
70
- // existing chains); the apply pass touches only the current node.
71
- let group = ${PG_PREFIX}_read(&animation_database, slot_in_page);
72
- let clip = ${CLIP_TABLE.marshalling_method_read}(&animation_database, group.clip);
73
-
74
- // Playback time 0 sits at clip.time_start on the curves' clock.
75
- // Curves clamp the result to their own [time_min, time_max], so a
76
- // track whose authored range falls outside the clip window just
77
- // holds at its endpoint over the gap.
78
- let effective_time = clip.time + clip.time_start;
79
-
80
- // Pre-multiply every contribution by this clip's weight so the
81
- // accumulator can just add. Translation/scale: scalar*vec3
82
- // componentwise; rotation: scalar*vec4, which is the standard
83
- // weighted-quaternion blend term — the resolve pass normalizes
84
- // the accumulated quat sum back to unit length.
85
- let weight = clip.playback_weight;
86
-
87
- for(var i = 0u; i < group.count; i++){
88
- let binding = group.bindings[i];
89
- let track = ${TRACK_TABLE.marshalling_method_read}(&animation_database, binding.track);
90
-
91
- let value = animation_track_evaluate(effective_time, track, &animation_database) * weight;
92
-
93
- write_object_property(binding.instance, binding.property, track.mask, value);
94
- }
95
- }
96
- `, [
97
- GROUP_TABLE.chunk_iterate(WORKGROUP_SIZE),
98
- CLIP_TABLE.chunk_read,
99
- TRACK_TABLE.chunk_read,
100
- chunk_animation_track_evaluate,
101
- chunk_write_object_property,
102
- ]
103
- );
104
-
105
- /**
106
- * Compute shader that walks the `animation_bound_track_groups` table —
107
- * one thread per group-node slot via the page iterator — evaluating
108
- * every inline binding under its owning clip's `time + time_start` and
109
- * atomic-adding the (weight-multiplied) result into the pose
110
- * accumulator (Node3D properties) or directly into the material
111
- * metadata table (Material properties).
112
- *
113
- * Node3D writes land in `pose_accumulator` rather than directly in
114
- * `transforms_table.local_*` so multi-clip blending is just additive;
115
- * `shader_animation_pose_resolve` walks the accumulator next, drains
116
- * each dirty row into the transforms table, normalizes rotation, and
117
- * zeros the slot for the next frame.
118
- *
119
- * Dispatch via
120
- * `shader_animation_apply.dispatch({ group_count_x: animation_bound_track_groups.dispatch_group_count(WORKGROUP_SIZE), ... })` —
121
- * the iterator covers every allocated page in parallel and skips
122
- * unallocated/unoccupied slots in-shader.
123
- */
124
- export const shader_animation_apply = ComputeShader.from({
125
- label: "Animation/Apply",
126
- body,
127
- resources,
128
- group_size: [WORKGROUP_SIZE, 1, 1],
129
- });
1
+ import { atomic_u32, u32 } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUArray } from "../shader/type/WebGPUArray.js";
3
+ import { MATERIAL_METADATA_STRUCT } from "../material/MATERIAL_METADATA_STRUCT.js";
4
+ import { chunk_write_object_property } from "../object_property/chunk_write_object_property.js";
5
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
6
+ import { ComputeShader } from "../shader/ComputeShader.js";
7
+ import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
8
+ import { ANIMATION_DATABASE_SPEC } from "./ANIMATION_DATABASE_SPEC.js";
9
+ import { chunk_animation_track_evaluate } from "./animation_track_evaluate.js";
10
+
11
+ const GROUP_TABLE = ANIMATION_DATABASE_SPEC.get('animation_bound_track_groups');
12
+ const CLIP_TABLE = ANIMATION_DATABASE_SPEC.get('animation_clips');
13
+ const TRACK_TABLE = ANIMATION_DATABASE_SPEC.get('animation_tracks');
14
+
15
+ /**
16
+ * Workgroup size for the apply pass. Exported so dispatchers can pair it
17
+ * with `animation_bound_track_groups.dispatch_group_count(WORKGROUP_SIZE)` —
18
+ * the page iterator's slot-to-workgroup mapping is computed against this
19
+ * value, so the two must agree.
20
+ */
21
+ export const WORKGROUP_SIZE = 64;
22
+
23
+ const PG_PREFIX = GROUP_TABLE.page_iterator_symbol_prefix(WORKGROUP_SIZE);
24
+
25
+ // `materials` and `pose_accumulator` are referenced by name from the
26
+ // property-write chunks rather than passed as pointers — the chunks
27
+ // rely on these bindings being declared in the importing shader.
28
+ //
29
+ // `pose_accumulator` is the per-Node3D contribution scratch (one slot per
30
+ // transforms-table row, `POSE_ACCUMULATOR_STRIDE` u32s each). Apply
31
+ // atomic-adds weighted values into it; the downstream resolve pass
32
+ // drains it into `transforms_table.local_*`.
33
+ const resources = new ShaderResourceSetDescriptor();
34
+ resources.createGroup()
35
+ .addStorageBuffer('animation_database', WebGPUArray.from(u32), false)
36
+ .addStorageBuffer('pose_accumulator', WebGPUArray.from(atomic_u32), true)
37
+ .addStorageBuffer('materials', WebGPUArray.from(MATERIAL_METADATA_STRUCT), true);
38
+
39
+ // Strict 1:1 page-iterator dispatch: one thread per group-node slot.
40
+ // A page is covered by GROUPS_PER_PAGE workgroups in parallel; setup
41
+ // derives (page_index, page_group) from workgroup_id.x, the in-page
42
+ // slot from page_group + local_id, and lanes past ELEMENTS_PER_PAGE
43
+ // (only possible in the last page_group) are tail-masked.
44
+ const body = CodeChunk.from(
45
+ //language=WGSL
46
+ `
47
+ @compute @workgroup_size(${WORKGROUP_SIZE},1,1)
48
+ fn main(
49
+ @builtin(workgroup_id) wg_id: vec3<u32>,
50
+ @builtin(local_invocation_index) local_id: u32,
51
+ ) {
52
+ // page_address is uniform across the workgroup → unallocated-page
53
+ // bail is uniform-control-flow safe.
54
+ if !${PG_PREFIX}_setup(&animation_database, wg_id.x, local_id) {
55
+ return;
56
+ }
57
+
58
+ let slot_in_page = ${PG_PREFIX}_slot_in_page(local_id);
59
+
60
+ if slot_in_page >= ${PG_PREFIX}_ELEMENTS_PER_PAGE {
61
+ return;
62
+ }
63
+ if !${PG_PREFIX}_is_occupied(slot_in_page) {
64
+ return;
65
+ }
66
+
67
+ // Per-thread group node: load it, resolve the back-referenced clip,
68
+ // and apply every inline binding under that clip's effective time.
69
+ // The chain's next field is for the host (linking new nodes onto
70
+ // existing chains); the apply pass touches only the current node.
71
+ let group = ${PG_PREFIX}_read(&animation_database, slot_in_page);
72
+ let clip = ${CLIP_TABLE.marshalling_method_read}(&animation_database, group.clip);
73
+
74
+ // Playback time 0 sits at clip.time_start on the curves' clock.
75
+ // Curves clamp the result to their own [time_min, time_max], so a
76
+ // track whose authored range falls outside the clip window just
77
+ // holds at its endpoint over the gap.
78
+ let effective_time = clip.time + clip.time_start;
79
+
80
+ // Pre-multiply every contribution by this clip's weight so the
81
+ // accumulator can just add. Translation/scale: scalar*vec3
82
+ // componentwise; rotation: scalar*vec4, which is the standard
83
+ // weighted-quaternion blend term — the resolve pass normalizes
84
+ // the accumulated quat sum back to unit length.
85
+ let weight = clip.playback_weight;
86
+
87
+ for(var i = 0u; i < group.count; i++){
88
+ let binding = group.bindings[i];
89
+ let track = ${TRACK_TABLE.marshalling_method_read}(&animation_database, binding.track);
90
+
91
+ let value = animation_track_evaluate(effective_time, track, &animation_database) * weight;
92
+
93
+ write_object_property(binding.instance, binding.property, track.mask, value);
94
+ }
95
+ }
96
+ `, [
97
+ GROUP_TABLE.chunk_iterate(WORKGROUP_SIZE),
98
+ CLIP_TABLE.chunk_read,
99
+ TRACK_TABLE.chunk_read,
100
+ chunk_animation_track_evaluate,
101
+ chunk_write_object_property,
102
+ ]
103
+ );
104
+
105
+ /**
106
+ * Compute shader that walks the `animation_bound_track_groups` table —
107
+ * one thread per group-node slot via the page iterator — evaluating
108
+ * every inline binding under its owning clip's `time + time_start` and
109
+ * atomic-adding the (weight-multiplied) result into the pose
110
+ * accumulator (Node3D properties) or directly into the material
111
+ * metadata table (Material properties).
112
+ *
113
+ * Node3D writes land in `pose_accumulator` rather than directly in
114
+ * `transforms_table.local_*` so multi-clip blending is just additive;
115
+ * `shader_animation_pose_resolve` walks the accumulator next, drains
116
+ * each dirty row into the transforms table, normalizes rotation, and
117
+ * zeros the slot for the next frame.
118
+ *
119
+ * Dispatch via
120
+ * `shader_animation_apply.dispatch({ group_count_x: animation_bound_track_groups.dispatch_group_count(WORKGROUP_SIZE), ... })` —
121
+ * the iterator covers every allocated page in parallel and skips
122
+ * unallocated/unoccupied slots in-shader.
123
+ */
124
+ export const shader_animation_apply = ComputeShader.from({
125
+ label: "Animation/Apply",
126
+ body,
127
+ resources,
128
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"shader_animation_pose_resolve.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/animation/shader_animation_pose_resolve.js"],"names":[],"mappings":"AAWA;;;GAGG;AACH,gCAAiC;AAyIjC;;;;;;;;;;;;;;;;;;GAkBG;AACH,0DAKG;8BA3K2B,4BAA4B"}
1
+ {"version":3,"file":"shader_animation_pose_resolve.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/animation/shader_animation_pose_resolve.js"],"names":[],"mappings":"AAWA;;;GAGG;AACH,gCAAiC;AAyIjC;;;;;;;;;;;;;;;;;;GAkBG;AACH,0DAIG;8BA1K2B,4BAA4B"}
@@ -1,177 +1,176 @@
1
- import { atomic_u32, u32 } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUArray } from "../shader/type/WebGPUArray.js";
3
- import { chunk_scene_database_access_rw } from "../scene/chunk_scene_database_access.js";
4
- import { SCENE_DATABASE_SPEC } from "../scene/SCENE_DATABASE_SPEC.js";
5
- import { CodeChunk } from "../shader/compiler/CodeChunk.js";
6
- import { ComputeShader } from "../shader/ComputeShader.js";
7
- import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
8
- import { chunk_pose_accumulator } from "./chunk_pose_accumulator.js";
9
-
10
- const TRANSFORMS_TABLE = SCENE_DATABASE_SPEC.get('transforms');
11
-
12
- /**
13
- * Workgroup size for the resolve pass. Exported so dispatchers can pair
14
- * it with `transforms.dispatch_group_count(WORKGROUP_SIZE)`.
15
- */
16
- export const WORKGROUP_SIZE = 64;
17
-
18
- const PG_PREFIX = TRANSFORMS_TABLE.page_iterator_symbol_prefix(WORKGROUP_SIZE, true);
19
-
20
- const resources = new ShaderResourceSetDescriptor();
21
- resources.createGroup()
22
- .addStorageBuffer('scene_database', WebGPUArray.from(u32), true)
23
- .addStorageBuffer('pose_accumulator', WebGPUArray.from(atomic_u32), true);
24
-
25
- const body = CodeChunk.from(
26
- //language=WGSL
27
- `
28
- @compute @workgroup_size(${WORKGROUP_SIZE},1,1)
29
- fn main(
30
- @builtin(workgroup_id) wg_id: vec3<u32>,
31
- @builtin(local_invocation_index) local_id: u32,
32
- ) {
33
- if !${PG_PREFIX}_setup(&scene_database, wg_id.x, local_id) {
34
- return;
35
- }
36
-
37
- let slot_in_page = ${PG_PREFIX}_slot_in_page(local_id);
38
-
39
- if slot_in_page >= ${PG_PREFIX}_ELEMENTS_PER_PAGE {
40
- return;
41
- }
42
- if !${PG_PREFIX}_is_occupied(slot_in_page) {
43
- return;
44
- }
45
-
46
- // Absolute transforms-table row index. The accumulator is laid out
47
- // one slot per row at the same index, so this is also the
48
- // accumulator slot.
49
- let row = ${PG_PREFIX}_slot_to_index(slot_in_page);
50
-
51
- let slot_base = pose_accumulator_slot_base(row);
52
- let dirty_word = slot_base + POSE_OFFSET_DIRTY;
53
-
54
- // Single load of the dirty mask gates the whole resolve. If
55
- // nothing was contributed to this row this frame, leave local_*
56
- // alone (and the accumulator slot is already zero because the
57
- // previous resolve drained it).
58
- let dirty = atomicLoad(&pose_accumulator[dirty_word]);
59
- if dirty == 0u {
60
- return;
61
- }
62
-
63
- // ── Translation ───────────────────────────────────────────────
64
- if (dirty & POSE_DIRTY_T_MASK) != 0u {
65
- let t_base = slot_base + POSE_OFFSET_TRANSLATION;
66
- // Per-axis: only overwrite the channels that actually had a
67
- // contribution. Read the current local_translation through
68
- // the rw helper and patch the dirty channels in-place — the
69
- // sibling-axis race that the old direct writer already
70
- // tolerated still applies (two threads writing different
71
- // axes of the same node), but we now have at most one resolve
72
- // thread per row, so it never triggers here.
73
- var t = scene_read_node_rw(&scene_database, row).local_translation;
74
- if (dirty & POSE_DIRTY_TX) != 0u {
75
- t.x = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 0u]));
76
- atomicStore(&pose_accumulator[t_base + 0u], 0u);
77
- }
78
- if (dirty & POSE_DIRTY_TY) != 0u {
79
- t.y = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 1u]));
80
- atomicStore(&pose_accumulator[t_base + 1u], 0u);
81
- }
82
- if (dirty & POSE_DIRTY_TZ) != 0u {
83
- t.z = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 2u]));
84
- atomicStore(&pose_accumulator[t_base + 2u], 0u);
85
- }
86
- scene_write_node_local_translation(&scene_database, row, t);
87
- }
88
-
89
- // ── Rotation ──────────────────────────────────────────────────
90
- if (dirty & POSE_DIRTY_R) != 0u {
91
- let r_base = slot_base + POSE_OFFSET_ROTATION;
92
- let r = vec4<f32>(
93
- bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 0u])),
94
- bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 1u])),
95
- bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 2u])),
96
- bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 3u])),
97
- );
98
- atomicStore(&pose_accumulator[r_base + 0u], 0u);
99
- atomicStore(&pose_accumulator[r_base + 1u], 0u);
100
- atomicStore(&pose_accumulator[r_base + 2u], 0u);
101
- atomicStore(&pose_accumulator[r_base + 3u], 0u);
102
- // A sum of length zero carries no orientation to recover: every
103
- // clip that writes this rotation is playing at weight zero, and
104
- // the apply pass contributes to a bound clip whatever its
105
- // weight. \`normalize\` answers NaN there, and one NaN local
106
- // rotation reaches every skin matrix naming the joint, so the
107
- // meshes it drives stop rasterising altogether — a rig loses a
108
- // limb because a clip nobody is playing happens to be the only
109
- // one that rotates it. Leaving the row alone is the rest pose,
110
- // which is the answer the CPU twin gives (\`pose_evaluate_local\`)
111
- // and the value the row still holds.
112
- //
113
- // Otherwise: the weighted-quaternion sum (\`w_i * q_i\`) is the
114
- // standard nlerp blend numerator; normalise here, once, after
115
- // every contributor has been folded in. The apply pass
116
- // canonicalised signs at GLTF load so we don't hit the antipode
117
- // case for imported clips.
118
- if length(r) > 0.0 {
119
- scene_write_node_local_rotation(&scene_database, row, normalize(r));
120
- }
121
- }
122
-
123
- // ── Scale ─────────────────────────────────────────────────────
124
- if (dirty & POSE_DIRTY_S_MASK) != 0u {
125
- let s_base = slot_base + POSE_OFFSET_SCALE;
126
- var s = scene_read_node_rw(&scene_database, row).local_scale;
127
- if (dirty & POSE_DIRTY_SX) != 0u {
128
- s.x = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 0u]));
129
- atomicStore(&pose_accumulator[s_base + 0u], 0u);
130
- }
131
- if (dirty & POSE_DIRTY_SY) != 0u {
132
- s.y = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 1u]));
133
- atomicStore(&pose_accumulator[s_base + 1u], 0u);
134
- }
135
- if (dirty & POSE_DIRTY_SZ) != 0u {
136
- s.z = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 2u]));
137
- atomicStore(&pose_accumulator[s_base + 2u], 0u);
138
- }
139
- scene_write_node_local_scale(&scene_database, row, s);
140
- }
141
-
142
- // Clear the dirty mask itself last, so an interrupted resolve
143
- // (theoretical — these passes don't yield) would still leave the
144
- // dirty bits intact to be redone.
145
- atomicStore(&pose_accumulator[dirty_word], 0u);
146
- }
147
- `, [
148
- TRANSFORMS_TABLE.chunk_iterate(WORKGROUP_SIZE, true),
149
- chunk_scene_database_access_rw,
150
- chunk_pose_accumulator,
151
- ]);
152
-
153
- /**
154
- * Compute shader that drains the pose accumulator into
155
- * `transforms_table.local_{translation,rotation,scale}`.
156
- *
157
- * Walks the transforms table via the read+write page iterator — one
158
- * thread per slot. For each occupied row whose accumulator slot has
159
- * any dirty bits set, reads the contributed components (atomic
160
- * loads, bitcast back to f32), writes them through the per-field
161
- * scene helpers, normalises rotation, and zeros the slot for next
162
- * frame.
163
- *
164
- * The accumulator buffer must be sized to at least
165
- * `transforms.dispatch_page_count * elements_per_page` rows —
166
- * {@link GPUAnimationManager#ensure_pose_accumulator_capacity}
167
- * handles that.
168
- *
169
- * Dispatch via
170
- * `shader_animation_pose_resolve.dispatch({ group_count_x: transforms.dispatch_group_count(WORKGROUP_SIZE), ... })`.
171
- */
172
- export const shader_animation_pose_resolve = ComputeShader.from({
173
- label: "Animation/PoseResolve",
174
- body,
175
- resources,
176
- group_size: [WORKGROUP_SIZE, 1, 1],
177
- });
1
+ import { atomic_u32, u32 } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUArray } from "../shader/type/WebGPUArray.js";
3
+ import { chunk_scene_database_access_rw } from "../scene/chunk_scene_database_access.js";
4
+ import { SCENE_DATABASE_SPEC } from "../scene/SCENE_DATABASE_SPEC.js";
5
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
6
+ import { ComputeShader } from "../shader/ComputeShader.js";
7
+ import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
8
+ import { chunk_pose_accumulator } from "./chunk_pose_accumulator.js";
9
+
10
+ const TRANSFORMS_TABLE = SCENE_DATABASE_SPEC.get('transforms');
11
+
12
+ /**
13
+ * Workgroup size for the resolve pass. Exported so dispatchers can pair
14
+ * it with `transforms.dispatch_group_count(WORKGROUP_SIZE)`.
15
+ */
16
+ export const WORKGROUP_SIZE = 64;
17
+
18
+ const PG_PREFIX = TRANSFORMS_TABLE.page_iterator_symbol_prefix(WORKGROUP_SIZE, true);
19
+
20
+ const resources = new ShaderResourceSetDescriptor();
21
+ resources.createGroup()
22
+ .addStorageBuffer('scene_database', WebGPUArray.from(u32), true)
23
+ .addStorageBuffer('pose_accumulator', WebGPUArray.from(atomic_u32), true);
24
+
25
+ const body = CodeChunk.from(
26
+ //language=WGSL
27
+ `
28
+ @compute @workgroup_size(${WORKGROUP_SIZE},1,1)
29
+ fn main(
30
+ @builtin(workgroup_id) wg_id: vec3<u32>,
31
+ @builtin(local_invocation_index) local_id: u32,
32
+ ) {
33
+ if !${PG_PREFIX}_setup(&scene_database, wg_id.x, local_id) {
34
+ return;
35
+ }
36
+
37
+ let slot_in_page = ${PG_PREFIX}_slot_in_page(local_id);
38
+
39
+ if slot_in_page >= ${PG_PREFIX}_ELEMENTS_PER_PAGE {
40
+ return;
41
+ }
42
+ if !${PG_PREFIX}_is_occupied(slot_in_page) {
43
+ return;
44
+ }
45
+
46
+ // Absolute transforms-table row index. The accumulator is laid out
47
+ // one slot per row at the same index, so this is also the
48
+ // accumulator slot.
49
+ let row = ${PG_PREFIX}_slot_to_index(slot_in_page);
50
+
51
+ let slot_base = pose_accumulator_slot_base(row);
52
+ let dirty_word = slot_base + POSE_OFFSET_DIRTY;
53
+
54
+ // Single load of the dirty mask gates the whole resolve. If
55
+ // nothing was contributed to this row this frame, leave local_*
56
+ // alone (and the accumulator slot is already zero because the
57
+ // previous resolve drained it).
58
+ let dirty = atomicLoad(&pose_accumulator[dirty_word]);
59
+ if dirty == 0u {
60
+ return;
61
+ }
62
+
63
+ // ── Translation ───────────────────────────────────────────────
64
+ if (dirty & POSE_DIRTY_T_MASK) != 0u {
65
+ let t_base = slot_base + POSE_OFFSET_TRANSLATION;
66
+ // Per-axis: only overwrite the channels that actually had a
67
+ // contribution. Read the current local_translation through
68
+ // the rw helper and patch the dirty channels in-place — the
69
+ // sibling-axis race that the old direct writer already
70
+ // tolerated still applies (two threads writing different
71
+ // axes of the same node), but we now have at most one resolve
72
+ // thread per row, so it never triggers here.
73
+ var t = scene_read_node_rw(&scene_database, row).local_translation;
74
+ if (dirty & POSE_DIRTY_TX) != 0u {
75
+ t.x = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 0u]));
76
+ atomicStore(&pose_accumulator[t_base + 0u], 0u);
77
+ }
78
+ if (dirty & POSE_DIRTY_TY) != 0u {
79
+ t.y = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 1u]));
80
+ atomicStore(&pose_accumulator[t_base + 1u], 0u);
81
+ }
82
+ if (dirty & POSE_DIRTY_TZ) != 0u {
83
+ t.z = bitcast<f32>(atomicLoad(&pose_accumulator[t_base + 2u]));
84
+ atomicStore(&pose_accumulator[t_base + 2u], 0u);
85
+ }
86
+ scene_write_node_local_translation(&scene_database, row, t);
87
+ }
88
+
89
+ // ── Rotation ──────────────────────────────────────────────────
90
+ if (dirty & POSE_DIRTY_R) != 0u {
91
+ let r_base = slot_base + POSE_OFFSET_ROTATION;
92
+ let r = vec4<f32>(
93
+ bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 0u])),
94
+ bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 1u])),
95
+ bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 2u])),
96
+ bitcast<f32>(atomicLoad(&pose_accumulator[r_base + 3u])),
97
+ );
98
+ atomicStore(&pose_accumulator[r_base + 0u], 0u);
99
+ atomicStore(&pose_accumulator[r_base + 1u], 0u);
100
+ atomicStore(&pose_accumulator[r_base + 2u], 0u);
101
+ atomicStore(&pose_accumulator[r_base + 3u], 0u);
102
+ // A sum of length zero carries no orientation to recover: every
103
+ // clip that writes this rotation is playing at weight zero, and
104
+ // the apply pass contributes to a bound clip whatever its
105
+ // weight. \`normalize\` answers NaN there, and one NaN local
106
+ // rotation reaches every skin matrix naming the joint, so the
107
+ // meshes it drives stop rasterising altogether — a rig loses a
108
+ // limb because a clip nobody is playing happens to be the only
109
+ // one that rotates it. Leaving the row alone is the rest pose,
110
+ // which is the answer the CPU twin gives (\`pose_evaluate_local\`)
111
+ // and the value the row still holds.
112
+ //
113
+ // Otherwise: the weighted-quaternion sum (\`w_i * q_i\`) is the
114
+ // standard nlerp blend numerator; normalise here, once, after
115
+ // every contributor has been folded in. The apply pass
116
+ // canonicalised signs at GLTF load so we don't hit the antipode
117
+ // case for imported clips.
118
+ if length(r) > 0.0 {
119
+ scene_write_node_local_rotation(&scene_database, row, normalize(r));
120
+ }
121
+ }
122
+
123
+ // ── Scale ─────────────────────────────────────────────────────
124
+ if (dirty & POSE_DIRTY_S_MASK) != 0u {
125
+ let s_base = slot_base + POSE_OFFSET_SCALE;
126
+ var s = scene_read_node_rw(&scene_database, row).local_scale;
127
+ if (dirty & POSE_DIRTY_SX) != 0u {
128
+ s.x = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 0u]));
129
+ atomicStore(&pose_accumulator[s_base + 0u], 0u);
130
+ }
131
+ if (dirty & POSE_DIRTY_SY) != 0u {
132
+ s.y = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 1u]));
133
+ atomicStore(&pose_accumulator[s_base + 1u], 0u);
134
+ }
135
+ if (dirty & POSE_DIRTY_SZ) != 0u {
136
+ s.z = bitcast<f32>(atomicLoad(&pose_accumulator[s_base + 2u]));
137
+ atomicStore(&pose_accumulator[s_base + 2u], 0u);
138
+ }
139
+ scene_write_node_local_scale(&scene_database, row, s);
140
+ }
141
+
142
+ // Clear the dirty mask itself last, so an interrupted resolve
143
+ // (theoretical — these passes don't yield) would still leave the
144
+ // dirty bits intact to be redone.
145
+ atomicStore(&pose_accumulator[dirty_word], 0u);
146
+ }
147
+ `, [
148
+ TRANSFORMS_TABLE.chunk_iterate(WORKGROUP_SIZE, true),
149
+ chunk_scene_database_access_rw,
150
+ chunk_pose_accumulator,
151
+ ]);
152
+
153
+ /**
154
+ * Compute shader that drains the pose accumulator into
155
+ * `transforms_table.local_{translation,rotation,scale}`.
156
+ *
157
+ * Walks the transforms table via the read+write page iterator — one
158
+ * thread per slot. For each occupied row whose accumulator slot has
159
+ * any dirty bits set, reads the contributed components (atomic
160
+ * loads, bitcast back to f32), writes them through the per-field
161
+ * scene helpers, normalises rotation, and zeros the slot for next
162
+ * frame.
163
+ *
164
+ * The accumulator buffer must be sized to at least
165
+ * `transforms.dispatch_page_count * elements_per_page` rows —
166
+ * {@link GPUAnimationManager#ensure_pose_accumulator_capacity}
167
+ * handles that.
168
+ *
169
+ * Dispatch via
170
+ * `shader_animation_pose_resolve.dispatch({ group_count_x: transforms.dispatch_group_count(WORKGROUP_SIZE), ... })`.
171
+ */
172
+ export const shader_animation_pose_resolve = ComputeShader.from({
173
+ label: "Animation/PoseResolve",
174
+ body,
175
+ resources,
176
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"shader_animation_tick.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/animation/shader_animation_tick.js"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH,gCAAiC;AAuFjC;;;;;;;;;;;;;;;;GAgBG;AACH,kDAKG;8BA1H2B,4BAA4B"}
1
+ {"version":3,"file":"shader_animation_tick.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/animation/shader_animation_tick.js"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH,gCAAiC;AA0FjC;;;;;;;;;;;;;;;;GAgBG;AACH,kDAIG;8BA5H2B,4BAA4B"}
@@ -25,8 +25,11 @@ const PG_PREFIX = CLIP_TABLE.page_iterator_symbol_prefix(WORKGROUP_SIZE, true);
25
25
  // `animation_database` is read_write because the tick advances the
26
26
  // `time` field of each playing clip in place.
27
27
  const resources = new ShaderResourceSetDescriptor();
28
+
29
+ // per-frame, four bytes, read-only: immediate data rather than a uniform buffer holding one f32
30
+ resources.setImmediate("dt", f32);
31
+
28
32
  resources.createGroup()
29
- .addUniform('dt', f32)
30
33
  .addStorageBuffer('animation_database', WebGPUArray.from(u32), true);
31
34
 
32
35
  const body = CodeChunk.from(
@@ -122,5 +125,4 @@ export const shader_animation_tick = ComputeShader.from({
122
125
  label: "Animation/Tick",
123
126
  body,
124
127
  resources,
125
- group_size: [WORKGROUP_SIZE, 1, 1],
126
128
  });