@woosh/meep-engine 3.11.3 → 3.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (401) 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/graph_build_decal_clusters.d.ts.map +1 -1
  168. package/src/engine/graphics3/decal/graph_build_decal_clusters.js +6 -8
  169. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts +0 -7
  170. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
  171. package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +1 -1
  172. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts +0 -4
  173. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
  174. package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +1 -1
  175. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
  176. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
  177. package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
  178. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
  179. package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
  180. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
  181. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
  182. package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
  183. package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
  184. package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
  185. package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
  186. package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
  187. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  188. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +0 -1
  189. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  190. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +0 -1
  191. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  192. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +133 -134
  193. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
  194. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
  195. package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
  196. package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
  197. package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
  198. package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
  199. package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
  200. package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
  201. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
  202. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
  203. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  204. package/src/shade/renderer/animation/shader_animation_tick.js +125 -126
  205. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  206. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +98 -99
  207. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  208. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +212 -213
  209. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  210. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +120 -121
  211. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  212. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +75 -76
  213. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  214. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +371 -372
  215. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
  216. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +104 -105
  217. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
  218. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +0 -1
  219. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +136 -136
  220. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  221. package/src/shade/renderer/buffer/table/GPUDatabase.js +2 -3
  222. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +319 -319
  223. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  224. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +41 -42
  225. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
  226. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
  227. package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
  228. package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
  229. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
  230. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +4 -4
  231. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  232. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +121 -122
  233. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +774 -774
  234. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
  235. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  236. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +69 -70
  237. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
  238. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +184 -184
  239. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
  240. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
  241. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  242. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +142 -143
  243. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  244. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +0 -1
  245. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  246. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +140 -141
  247. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  248. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +0 -1
  249. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  250. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +0 -1
  251. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
  252. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
  253. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
  254. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
  255. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
  256. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
  257. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
  258. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
  259. package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
  260. package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +4 -7
  261. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
  262. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
  263. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +1 -1
  264. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
  265. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
  266. package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
  267. package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
  268. package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
  269. package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
  270. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
  271. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
  272. package/src/shade/renderer/particles/prototypeParticleSystem.js +2 -3
  273. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  274. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +117 -118
  275. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  276. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +77 -79
  277. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
  278. package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
  279. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  280. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +99 -100
  281. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  282. package/src/shade/renderer/particles/sort/shader_particle_sort.js +158 -161
  283. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
  284. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +119 -119
  285. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +3 -4
  286. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  287. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +266 -267
  288. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  289. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +270 -271
  290. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  291. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +68 -69
  292. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
  293. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
  294. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
  295. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
  296. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  297. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
  298. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
  299. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
  300. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
  301. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
  302. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
  303. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +2 -2
  304. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
  305. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +68 -69
  306. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
  307. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
  308. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  309. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +0 -1
  310. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
  311. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +64 -65
  312. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
  313. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
  314. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
  315. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
  316. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  317. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +109 -110
  318. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  319. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +115 -116
  320. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
  321. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
  322. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
  323. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
  324. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
  325. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +88 -89
  326. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
  327. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +90 -91
  328. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  329. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +65 -66
  330. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
  331. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +89 -90
  332. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
  333. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
  334. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
  335. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +89 -90
  336. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
  337. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
  338. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
  339. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +153 -154
  340. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
  341. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
  342. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
  343. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
  344. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
  345. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
  346. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
  347. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  348. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +136 -137
  349. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  350. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +129 -130
  351. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  352. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +99 -100
  353. package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
  354. package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
  355. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +383 -383
  356. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
  357. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
  358. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
  359. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
  360. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
  361. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
  362. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
  363. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  364. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +0 -1
  365. package/src/shade/renderer/shader/ComputeShader.d.ts +24 -3
  366. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  367. package/src/shade/renderer/shader/ComputeShader.js +350 -296
  368. package/src/shade/renderer/shader/ImageShader.js +217 -217
  369. package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
  370. package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
  371. package/src/shade/renderer/shader/ShaderDescriptor.js +20 -0
  372. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
  373. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
  374. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
  375. package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
  376. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +3 -3
  377. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +2 -2
  378. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +4 -4
  379. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  380. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +231 -232
  381. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
  382. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  383. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +12 -15
  384. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +3 -2
  385. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  386. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +3 -2
  387. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
  388. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
  389. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
  390. package/src/shade/renderer/water/shader_water.js +246 -246
  391. package/src/shade/vitest.setup.mjs +1 -1
  392. package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
  393. package/src/view/minimap/Minimap.d.ts +2 -2
  394. package/src/view/minimap/Minimap.d.ts.map +1 -1
  395. package/src/view/minimap/Minimap.js +225 -225
  396. package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
  397. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  398. package/src/view/minimap/dom/MinimapCameraView.js +206 -206
  399. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
  400. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
  401. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
@@ -1,69 +1,68 @@
1
- import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
3
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
4
- import { ComputeShader } from "../../shader/ComputeShader.js";
5
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
6
- import { NSS_WORKGROUP_SIZE } from "./NSS_CONSTANTS.js";
7
-
8
- /**
9
- * Concatenate two 3D tensors along the channel-group (z) axis.
10
- *
11
- * For an output coord (x, y, z):
12
- * - if z < `split_groups`, copy from `tA` at (x, y, z)
13
- * - otherwise, copy from `tB` at (x, y, z - split_groups)
14
- *
15
- * `split_groups` is `tA`'s channel-group count (channels / 4) and is
16
- * also the z-offset where `tB` starts in the output.
17
- *
18
- * Used by NSS's U-Net to merge a decoder activation with its
19
- * symmetric encoder skip (e.g. conv8_out (16ch) + conv4_out (32ch) ->
20
- * 48ch concat input for conv9).
21
- */
22
- const CONCAT_SETTINGS = WebGPUStruct.from({
23
- split_groups: u32,
24
- }, "NSSConcatSettings").pack();
25
-
26
- const resources = new ShaderResourceSetDescriptor();
27
- resources.createGroup()
28
- .addTexture("tA", "float", "3d")
29
- .addTexture("tB", "float", "3d")
30
- .addStorageTexture("tOutput", "rgba16float", "3d", "write-only")
31
- .addUniform("settings", CONCAT_SETTINGS)
32
- ;
33
-
34
- const body = CodeChunk.from(
35
- //language=WGSL
36
- `
37
- @compute @workgroup_size(${NSS_WORKGROUP_SIZE}, ${NSS_WORKGROUP_SIZE}, 1)
38
- fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
39
- let dim = textureDimensions(tOutput);
40
-
41
- if (any(gid >= dim)) {
42
- return;
43
- }
44
-
45
- let st = vec2<i32>(gid.xy);
46
- let z = gid.z;
47
-
48
- var v: vec4<f32>;
49
- if (z < settings.split_groups) {
50
- v = textureLoad(tA, vec3<i32>(st, i32(z)), 0);
51
- } else {
52
- v = textureLoad(tB, vec3<i32>(st, i32(z - settings.split_groups)), 0);
53
- }
54
-
55
- textureStore(tOutput, vec3<i32>(st, i32(z)), v);
56
- }
57
- `, [
58
- CONCAT_SETTINGS.declaration_chunk,
59
- ]
60
- );
61
-
62
- export const shader_nss_concat = ComputeShader.from({
63
- label: "NSS / concat",
64
- body,
65
- resources,
66
- group_size: [NSS_WORKGROUP_SIZE, NSS_WORKGROUP_SIZE, 1],
67
- });
68
-
69
- export { CONCAT_SETTINGS as NSS_CONCAT_SETTINGS_STRUCT };
1
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
3
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
4
+ import { ComputeShader } from "../../shader/ComputeShader.js";
5
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
6
+ import { NSS_WORKGROUP_SIZE } from "./NSS_CONSTANTS.js";
7
+
8
+ /**
9
+ * Concatenate two 3D tensors along the channel-group (z) axis.
10
+ *
11
+ * For an output coord (x, y, z):
12
+ * - if z < `split_groups`, copy from `tA` at (x, y, z)
13
+ * - otherwise, copy from `tB` at (x, y, z - split_groups)
14
+ *
15
+ * `split_groups` is `tA`'s channel-group count (channels / 4) and is
16
+ * also the z-offset where `tB` starts in the output.
17
+ *
18
+ * Used by NSS's U-Net to merge a decoder activation with its
19
+ * symmetric encoder skip (e.g. conv8_out (16ch) + conv4_out (32ch) ->
20
+ * 48ch concat input for conv9).
21
+ */
22
+ const CONCAT_SETTINGS = WebGPUStruct.from({
23
+ split_groups: u32,
24
+ }, "NSSConcatSettings").pack();
25
+
26
+ const resources = new ShaderResourceSetDescriptor();
27
+ resources.createGroup()
28
+ .addTexture("tA", "float", "3d")
29
+ .addTexture("tB", "float", "3d")
30
+ .addStorageTexture("tOutput", "rgba16float", "3d", "write-only")
31
+ .addUniform("settings", CONCAT_SETTINGS)
32
+ ;
33
+
34
+ const body = CodeChunk.from(
35
+ //language=WGSL
36
+ `
37
+ @compute @workgroup_size(${NSS_WORKGROUP_SIZE}, ${NSS_WORKGROUP_SIZE}, 1)
38
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
39
+ let dim = textureDimensions(tOutput);
40
+
41
+ if (any(gid >= dim)) {
42
+ return;
43
+ }
44
+
45
+ let st = vec2<i32>(gid.xy);
46
+ let z = gid.z;
47
+
48
+ var v: vec4<f32>;
49
+ if (z < settings.split_groups) {
50
+ v = textureLoad(tA, vec3<i32>(st, i32(z)), 0);
51
+ } else {
52
+ v = textureLoad(tB, vec3<i32>(st, i32(z - settings.split_groups)), 0);
53
+ }
54
+
55
+ textureStore(tOutput, vec3<i32>(st, i32(z)), v);
56
+ }
57
+ `, [
58
+ CONCAT_SETTINGS.declaration_chunk,
59
+ ]
60
+ );
61
+
62
+ export const shader_nss_concat = ComputeShader.from({
63
+ label: "NSS / concat",
64
+ body,
65
+ resources,
66
+ });
67
+
68
+ export { CONCAT_SETTINGS as NSS_CONCAT_SETTINGS_STRUCT };
@@ -1 +1 @@
1
- {"version":3,"file":"shader_nss_conv_layer.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js"],"names":[],"mappings":"AA4NA,kDAKG;8BA9N2B,+BAA+B"}
1
+ {"version":3,"file":"shader_nss_conv_layer.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js"],"names":[],"mappings":"AA4NA,kDAIG;8BA7N2B,+BAA+B"}
@@ -1,226 +1,225 @@
1
- import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
3
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
4
- import { ComputeShader } from "../../shader/ComputeShader.js";
5
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
6
- import { NSS_WORKGROUP_SIZE } from "./NSS_CONSTANTS.js";
7
- import { NSS_LAYER_CONFIG_STRUCT } from "./NSS_LAYER_CONFIG_STRUCT.js";
8
- import { NSS_SETTINGS_STRUCT } from "./NSS_SETTINGS_STRUCT.js";
9
-
10
- /**
11
- * One 3x3 (or 1x1) convolution layer of the NSS network — int8 weights,
12
- * f32 biases, per-channel TOSA RESCALE applied before activation.
13
- *
14
- * Pipeline per output channel:
15
- * acc = sum(input * unpack4x8snorm(weight)) (over ic, ky, kx)
16
- * acc += bias (when has_bias)
17
- * acc *= rescale (per-channel, from ARM's RESCALE multipliers/shifts)
18
- * acc = saturate to [-1, 1] (mirrors int8 saturation)
19
- * acc = activation(acc) (ReLU clamps to [0, 1]; identity passes through)
20
- * textureStore(...)
21
- *
22
- * The TOSA RESCALE half is what keeps intermediate activations bounded —
23
- * without it the encoder's 64-channel layers blow up by 4-5 orders of
24
- * magnitude and downstream layers degenerate.
25
- *
26
- * Weights live in a shared packed-int8 storage buffer (`array<u32>`,
27
- * 4 int8 weights per u32 along the in_channels dimension). Biases and
28
- * rescales live in separate f32 storage buffers. `output_layer_offset`
29
- * lets multiple parallel output heads share one destination texture.
30
- *
31
- * Edge handling: clamp-to-edge.
32
- */
33
- const resources = new ShaderResourceSetDescriptor();
34
- resources.createGroup()
35
- .addTexture("tInput", "float", "3d")
36
- .addStorageTexture("tOutput", "rgba16float", "3d", "write-only")
37
- .addStorageBuffer("weights", WebGPUArray.from(u32))
38
- .addStorageBuffer("biases", WebGPUArray.from(f32))
39
- .addStorageBuffer("rescales", WebGPUArray.from(f32))
40
- // Per-head transfer LUTs (TOSA TABLE op). 256 int8 entries packed
41
- // 4-per-u32. Only output heads (layers with `has_lut == 1`) read
42
- // from this; body layers ignore the binding and use the inline
43
- // ReLU activation_kind path.
44
- .addStorageBuffer("luts", WebGPUArray.from(u32))
45
- .addUniform("layer_config", NSS_LAYER_CONFIG_STRUCT)
46
- // Shared per-frame settings — currently only network_acc_scale is read,
47
- // but binding the whole struct keeps it consistent with the other passes.
48
- .addUniform("settings", NSS_SETTINGS_STRUCT)
49
- ;
50
-
51
-
52
- const body = CodeChunk.from(
53
- //language=WGSL
54
- `
55
- fn nss_activation(x: vec4<f32>, kind: u32) -> vec4<f32> {
56
- if (kind == 1u) {
57
- // ReLU on top of the rescaled+saturated input. The input is
58
- // already in [-1, 1], so this gives [0, 1].
59
- return max(vec4<f32>(0.0), x);
60
- } else if (kind == 2u) {
61
- // Leaky ReLU, alpha = 0.1
62
- return select(x, 0.1 * x, x < vec4<f32>(0.0));
63
- }
64
- // identity — used by the output heads
65
- return x;
66
- }
67
-
68
- fn nss_load_input_pixel(coord: vec2<i32>, group_z: u32) -> vec4<f32> {
69
- let dim = textureDimensions(tInput);
70
- let clamped = clamp(coord, vec2<i32>(0, 0), vec2<i32>(dim.xy) - vec2<i32>(1, 1));
71
- return textureLoad(tInput, vec3<i32>(clamped, i32(group_z)), 0);
72
- }
73
-
74
- // Look up one entry in a layer's per-head LUT (TOSA TABLE op).
75
- //
76
- // value_fp is the un-rescaled fp accumulator scaled by the per-channel
77
- // rescale_factor (= 127 * mult / 2^shift) - i.e. the int8 RESCALE
78
- // result without the output_zp bias yet applied. output_zp is the
79
- // per-head signed int8 bias from TOSA RESCALE; adding it before
80
- // clamp+shift puts the LUT INDEX in the trained transition zone (each
81
- // head's LUT has almost all of its dynamic range concentrated in a
82
- // window centred on uint8 = output_zp + 128 - without applying it,
83
- // the index lands in the flat tail and the network output collapses
84
- // to a constant).
85
- //
86
- // LUT indexing: int8 input shifted to [0, 255]; LUT is 256 int8s
87
- // packed 4-per-u32. ARM uses this to encode the trained activation
88
- // function for the heads (sigmoid for ThetaAlpha, tanh-like S-curves
89
- // for the KPN columns and FB).
90
- //
91
- // Output dequantisation matches ARM's Dequantize: clamp the int8 to
92
- // [-127, 127] (folding -128 into -127 to dodge an off-by-one when the
93
- // LUT table happens to store it), then map to fp via (x + 127) / 255
94
- // - giving fp in [0, 1] (NOT [-1, 1] as a naive /127 would suggest).
95
- fn nss_apply_lut(value_fp: f32, lut_off_u32: u32, output_zp: i32) -> f32 {
96
- let int8_unbiased = i32(round(value_fp * 127.0));
97
- let int8_in = clamp(int8_unbiased + output_zp, -128, 127);
98
- let idx = u32(int8_in + 128); // shift to [0, 255]
99
- let u32_idx = idx / 4u;
100
- let lane = idx % 4u;
101
- // unpack4xI8 returns vec4<i32> with sign-extended int8 values.
102
- let four = unpack4xI8(luts[lut_off_u32 + u32_idx]);
103
- let int8_out = max(four[lane], -127);
104
- return f32(int8_out + 127) / 255.0;
105
- }
106
-
107
- @compute @workgroup_size(${NSS_WORKGROUP_SIZE}, ${NSS_WORKGROUP_SIZE}, 1)
108
- fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
109
- let out_dim = textureDimensions(tOutput);
110
- let layer_out_groups = layer_config.out_channels / 4u;
111
-
112
- if (any(gid.xy >= out_dim.xy) || gid.z >= layer_out_groups) {
113
- return;
114
- }
115
-
116
- let in_channels = layer_config.in_channels;
117
- let k = layer_config.kernel_size;
118
- let weights_off = layer_config.weights_offset;
119
- let bias_off = layer_config.bias_offset;
120
- let rescale_off = layer_config.rescale_offset;
121
- let lut_off = layer_config.lut_offset;
122
- let activation = layer_config.activation_kind;
123
- let has_bias = layer_config.has_bias;
124
- let has_lut = layer_config.has_lut;
125
- let out_layer_off = layer_config.output_layer_offset;
126
- let output_zp = layer_config.output_zp;
127
-
128
- let in_groups = in_channels / 4u;
129
-
130
- let pixel = vec2<i32>(gid.xy);
131
- let out_group = gid.z;
132
- let out_base_channel = out_group * 4u;
133
-
134
- // Bias seeds the accumulator (already dequantized at conversion time).
135
- var acc = vec4<f32>(0.0);
136
- if (has_bias != 0u) {
137
- let b0 = biases[bias_off + out_base_channel + 0u];
138
- let b1 = biases[bias_off + out_base_channel + 1u];
139
- let b2 = biases[bias_off + out_base_channel + 2u];
140
- let b3 = biases[bias_off + out_base_channel + 3u];
141
- acc = vec4<f32>(b0, b1, b2, b3);
142
- }
143
-
144
- let half_k = i32(k) / 2;
145
-
146
- // Weights: (out_channels, ky, kx, in_channels) row-major, packed int8
147
- // along the innermost dim.
148
- let row_stride_u32 = in_channels / 4u;
149
- let kxy_stride_u32 = k * row_stride_u32;
150
- let oc_stride_u32 = k * kxy_stride_u32;
151
-
152
- for (var ky = 0u; ky < k; ky = ky + 1u) {
153
- for (var kx = 0u; kx < k; kx = kx + 1u) {
154
- let tap = pixel + vec2<i32>(i32(kx) - half_k, i32(ky) - half_k);
155
-
156
- for (var ig = 0u; ig < in_groups; ig = ig + 1u) {
157
- let v = nss_load_input_pixel(tap, ig);
158
-
159
- // 4 output lanes: 1 u32 = 4 int8 weights for this lane's
160
- // (ky, kx, ic_group of 4 ic lanes).
161
- let base_off = weights_off
162
- + ky * kxy_stride_u32
163
- + kx * row_stride_u32
164
- + ig;
165
-
166
- let w0 = unpack4x8snorm(weights[base_off + (out_base_channel + 0u) * oc_stride_u32]);
167
- let w1 = unpack4x8snorm(weights[base_off + (out_base_channel + 1u) * oc_stride_u32]);
168
- let w2 = unpack4x8snorm(weights[base_off + (out_base_channel + 2u) * oc_stride_u32]);
169
- let w3 = unpack4x8snorm(weights[base_off + (out_base_channel + 3u) * oc_stride_u32]);
170
-
171
- acc.x += dot(v, w0);
172
- acc.y += dot(v, w1);
173
- acc.z += dot(v, w2);
174
- acc.w += dot(v, w3);
175
- }
176
- }
177
- }
178
-
179
- // Per-channel TOSA RESCALE (= 127 * mult / 2^shift, baked at
180
- // conversion time). Then saturate to [-1, 1] (the int8 saturation
181
- // that ARM's RESCALE applies implicitly).
182
- //
183
- // network_acc_scale (default 1.0) is a global multiplier on the
184
- // accumulator — debug knob to compensate for the fp/int scale mismatch
185
- // between our pipeline and ARM's training distribution. With it at 1
186
- // the head LUTs return their centre values (≈0.498) on most pixels
187
- // because the conv accumulators land too close to 0 to push the LUT
188
- // out of its transition zone.
189
- let r0 = rescales[rescale_off + out_base_channel + 0u];
190
- let r1 = rescales[rescale_off + out_base_channel + 1u];
191
- let r2 = rescales[rescale_off + out_base_channel + 2u];
192
- let r3 = rescales[rescale_off + out_base_channel + 3u];
193
-
194
- let rescaled = clamp(
195
- acc * vec4<f32>(r0, r1, r2, r3) * settings.network_acc_scale,
196
- vec4<f32>(-1.0),
197
- vec4<f32>( 1.0),
198
- );
199
-
200
- var out_v: vec4<f32>;
201
- if (has_lut != 0u) {
202
- // Output heads: per-head transfer LUT replaces the activation.
203
- out_v = vec4<f32>(
204
- nss_apply_lut(rescaled.x, lut_off, output_zp),
205
- nss_apply_lut(rescaled.y, lut_off, output_zp),
206
- nss_apply_lut(rescaled.z, lut_off, output_zp),
207
- nss_apply_lut(rescaled.w, lut_off, output_zp),
208
- );
209
- } else {
210
- out_v = nss_activation(rescaled, activation);
211
- }
212
-
213
- textureStore(tOutput, vec3<i32>(pixel, i32(out_layer_off + out_group)), out_v);
214
- }
215
- `, [
216
- NSS_LAYER_CONFIG_STRUCT.declaration_chunk,
217
- NSS_SETTINGS_STRUCT.declaration_chunk,
218
- ]
219
- );
220
-
221
- export const shader_nss_conv_layer = ComputeShader.from({
222
- label: "NSS / conv layer",
223
- body,
224
- resources,
225
- group_size: [NSS_WORKGROUP_SIZE, NSS_WORKGROUP_SIZE, 1],
226
- });
1
+ import { f32, u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
3
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
4
+ import { ComputeShader } from "../../shader/ComputeShader.js";
5
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
6
+ import { NSS_WORKGROUP_SIZE } from "./NSS_CONSTANTS.js";
7
+ import { NSS_LAYER_CONFIG_STRUCT } from "./NSS_LAYER_CONFIG_STRUCT.js";
8
+ import { NSS_SETTINGS_STRUCT } from "./NSS_SETTINGS_STRUCT.js";
9
+
10
+ /**
11
+ * One 3x3 (or 1x1) convolution layer of the NSS network — int8 weights,
12
+ * f32 biases, per-channel TOSA RESCALE applied before activation.
13
+ *
14
+ * Pipeline per output channel:
15
+ * acc = sum(input * unpack4x8snorm(weight)) (over ic, ky, kx)
16
+ * acc += bias (when has_bias)
17
+ * acc *= rescale (per-channel, from ARM's RESCALE multipliers/shifts)
18
+ * acc = saturate to [-1, 1] (mirrors int8 saturation)
19
+ * acc = activation(acc) (ReLU clamps to [0, 1]; identity passes through)
20
+ * textureStore(...)
21
+ *
22
+ * The TOSA RESCALE half is what keeps intermediate activations bounded —
23
+ * without it the encoder's 64-channel layers blow up by 4-5 orders of
24
+ * magnitude and downstream layers degenerate.
25
+ *
26
+ * Weights live in a shared packed-int8 storage buffer (`array<u32>`,
27
+ * 4 int8 weights per u32 along the in_channels dimension). Biases and
28
+ * rescales live in separate f32 storage buffers. `output_layer_offset`
29
+ * lets multiple parallel output heads share one destination texture.
30
+ *
31
+ * Edge handling: clamp-to-edge.
32
+ */
33
+ const resources = new ShaderResourceSetDescriptor();
34
+ resources.createGroup()
35
+ .addTexture("tInput", "float", "3d")
36
+ .addStorageTexture("tOutput", "rgba16float", "3d", "write-only")
37
+ .addStorageBuffer("weights", WebGPUArray.from(u32))
38
+ .addStorageBuffer("biases", WebGPUArray.from(f32))
39
+ .addStorageBuffer("rescales", WebGPUArray.from(f32))
40
+ // Per-head transfer LUTs (TOSA TABLE op). 256 int8 entries packed
41
+ // 4-per-u32. Only output heads (layers with `has_lut == 1`) read
42
+ // from this; body layers ignore the binding and use the inline
43
+ // ReLU activation_kind path.
44
+ .addStorageBuffer("luts", WebGPUArray.from(u32))
45
+ .addUniform("layer_config", NSS_LAYER_CONFIG_STRUCT)
46
+ // Shared per-frame settings — currently only network_acc_scale is read,
47
+ // but binding the whole struct keeps it consistent with the other passes.
48
+ .addUniform("settings", NSS_SETTINGS_STRUCT)
49
+ ;
50
+
51
+
52
+ const body = CodeChunk.from(
53
+ //language=WGSL
54
+ `
55
+ fn nss_activation(x: vec4<f32>, kind: u32) -> vec4<f32> {
56
+ if (kind == 1u) {
57
+ // ReLU on top of the rescaled+saturated input. The input is
58
+ // already in [-1, 1], so this gives [0, 1].
59
+ return max(vec4<f32>(0.0), x);
60
+ } else if (kind == 2u) {
61
+ // Leaky ReLU, alpha = 0.1
62
+ return select(x, 0.1 * x, x < vec4<f32>(0.0));
63
+ }
64
+ // identity — used by the output heads
65
+ return x;
66
+ }
67
+
68
+ fn nss_load_input_pixel(coord: vec2<i32>, group_z: u32) -> vec4<f32> {
69
+ let dim = textureDimensions(tInput);
70
+ let clamped = clamp(coord, vec2<i32>(0, 0), vec2<i32>(dim.xy) - vec2<i32>(1, 1));
71
+ return textureLoad(tInput, vec3<i32>(clamped, i32(group_z)), 0);
72
+ }
73
+
74
+ // Look up one entry in a layer's per-head LUT (TOSA TABLE op).
75
+ //
76
+ // value_fp is the un-rescaled fp accumulator scaled by the per-channel
77
+ // rescale_factor (= 127 * mult / 2^shift) - i.e. the int8 RESCALE
78
+ // result without the output_zp bias yet applied. output_zp is the
79
+ // per-head signed int8 bias from TOSA RESCALE; adding it before
80
+ // clamp+shift puts the LUT INDEX in the trained transition zone (each
81
+ // head's LUT has almost all of its dynamic range concentrated in a
82
+ // window centred on uint8 = output_zp + 128 - without applying it,
83
+ // the index lands in the flat tail and the network output collapses
84
+ // to a constant).
85
+ //
86
+ // LUT indexing: int8 input shifted to [0, 255]; LUT is 256 int8s
87
+ // packed 4-per-u32. ARM uses this to encode the trained activation
88
+ // function for the heads (sigmoid for ThetaAlpha, tanh-like S-curves
89
+ // for the KPN columns and FB).
90
+ //
91
+ // Output dequantisation matches ARM's Dequantize: clamp the int8 to
92
+ // [-127, 127] (folding -128 into -127 to dodge an off-by-one when the
93
+ // LUT table happens to store it), then map to fp via (x + 127) / 255
94
+ // - giving fp in [0, 1] (NOT [-1, 1] as a naive /127 would suggest).
95
+ fn nss_apply_lut(value_fp: f32, lut_off_u32: u32, output_zp: i32) -> f32 {
96
+ let int8_unbiased = i32(round(value_fp * 127.0));
97
+ let int8_in = clamp(int8_unbiased + output_zp, -128, 127);
98
+ let idx = u32(int8_in + 128); // shift to [0, 255]
99
+ let u32_idx = idx / 4u;
100
+ let lane = idx % 4u;
101
+ // unpack4xI8 returns vec4<i32> with sign-extended int8 values.
102
+ let four = unpack4xI8(luts[lut_off_u32 + u32_idx]);
103
+ let int8_out = max(four[lane], -127);
104
+ return f32(int8_out + 127) / 255.0;
105
+ }
106
+
107
+ @compute @workgroup_size(${NSS_WORKGROUP_SIZE}, ${NSS_WORKGROUP_SIZE}, 1)
108
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
109
+ let out_dim = textureDimensions(tOutput);
110
+ let layer_out_groups = layer_config.out_channels / 4u;
111
+
112
+ if (any(gid.xy >= out_dim.xy) || gid.z >= layer_out_groups) {
113
+ return;
114
+ }
115
+
116
+ let in_channels = layer_config.in_channels;
117
+ let k = layer_config.kernel_size;
118
+ let weights_off = layer_config.weights_offset;
119
+ let bias_off = layer_config.bias_offset;
120
+ let rescale_off = layer_config.rescale_offset;
121
+ let lut_off = layer_config.lut_offset;
122
+ let activation = layer_config.activation_kind;
123
+ let has_bias = layer_config.has_bias;
124
+ let has_lut = layer_config.has_lut;
125
+ let out_layer_off = layer_config.output_layer_offset;
126
+ let output_zp = layer_config.output_zp;
127
+
128
+ let in_groups = in_channels / 4u;
129
+
130
+ let pixel = vec2<i32>(gid.xy);
131
+ let out_group = gid.z;
132
+ let out_base_channel = out_group * 4u;
133
+
134
+ // Bias seeds the accumulator (already dequantized at conversion time).
135
+ var acc = vec4<f32>(0.0);
136
+ if (has_bias != 0u) {
137
+ let b0 = biases[bias_off + out_base_channel + 0u];
138
+ let b1 = biases[bias_off + out_base_channel + 1u];
139
+ let b2 = biases[bias_off + out_base_channel + 2u];
140
+ let b3 = biases[bias_off + out_base_channel + 3u];
141
+ acc = vec4<f32>(b0, b1, b2, b3);
142
+ }
143
+
144
+ let half_k = i32(k) / 2;
145
+
146
+ // Weights: (out_channels, ky, kx, in_channels) row-major, packed int8
147
+ // along the innermost dim.
148
+ let row_stride_u32 = in_channels / 4u;
149
+ let kxy_stride_u32 = k * row_stride_u32;
150
+ let oc_stride_u32 = k * kxy_stride_u32;
151
+
152
+ for (var ky = 0u; ky < k; ky = ky + 1u) {
153
+ for (var kx = 0u; kx < k; kx = kx + 1u) {
154
+ let tap = pixel + vec2<i32>(i32(kx) - half_k, i32(ky) - half_k);
155
+
156
+ for (var ig = 0u; ig < in_groups; ig = ig + 1u) {
157
+ let v = nss_load_input_pixel(tap, ig);
158
+
159
+ // 4 output lanes: 1 u32 = 4 int8 weights for this lane's
160
+ // (ky, kx, ic_group of 4 ic lanes).
161
+ let base_off = weights_off
162
+ + ky * kxy_stride_u32
163
+ + kx * row_stride_u32
164
+ + ig;
165
+
166
+ let w0 = unpack4x8snorm(weights[base_off + (out_base_channel + 0u) * oc_stride_u32]);
167
+ let w1 = unpack4x8snorm(weights[base_off + (out_base_channel + 1u) * oc_stride_u32]);
168
+ let w2 = unpack4x8snorm(weights[base_off + (out_base_channel + 2u) * oc_stride_u32]);
169
+ let w3 = unpack4x8snorm(weights[base_off + (out_base_channel + 3u) * oc_stride_u32]);
170
+
171
+ acc.x += dot(v, w0);
172
+ acc.y += dot(v, w1);
173
+ acc.z += dot(v, w2);
174
+ acc.w += dot(v, w3);
175
+ }
176
+ }
177
+ }
178
+
179
+ // Per-channel TOSA RESCALE (= 127 * mult / 2^shift, baked at
180
+ // conversion time). Then saturate to [-1, 1] (the int8 saturation
181
+ // that ARM's RESCALE applies implicitly).
182
+ //
183
+ // network_acc_scale (default 1.0) is a global multiplier on the
184
+ // accumulator — debug knob to compensate for the fp/int scale mismatch
185
+ // between our pipeline and ARM's training distribution. With it at 1
186
+ // the head LUTs return their centre values (≈0.498) on most pixels
187
+ // because the conv accumulators land too close to 0 to push the LUT
188
+ // out of its transition zone.
189
+ let r0 = rescales[rescale_off + out_base_channel + 0u];
190
+ let r1 = rescales[rescale_off + out_base_channel + 1u];
191
+ let r2 = rescales[rescale_off + out_base_channel + 2u];
192
+ let r3 = rescales[rescale_off + out_base_channel + 3u];
193
+
194
+ let rescaled = clamp(
195
+ acc * vec4<f32>(r0, r1, r2, r3) * settings.network_acc_scale,
196
+ vec4<f32>(-1.0),
197
+ vec4<f32>( 1.0),
198
+ );
199
+
200
+ var out_v: vec4<f32>;
201
+ if (has_lut != 0u) {
202
+ // Output heads: per-head transfer LUT replaces the activation.
203
+ out_v = vec4<f32>(
204
+ nss_apply_lut(rescaled.x, lut_off, output_zp),
205
+ nss_apply_lut(rescaled.y, lut_off, output_zp),
206
+ nss_apply_lut(rescaled.z, lut_off, output_zp),
207
+ nss_apply_lut(rescaled.w, lut_off, output_zp),
208
+ );
209
+ } else {
210
+ out_v = nss_activation(rescaled, activation);
211
+ }
212
+
213
+ textureStore(tOutput, vec3<i32>(pixel, i32(out_layer_off + out_group)), out_v);
214
+ }
215
+ `, [
216
+ NSS_LAYER_CONFIG_STRUCT.declaration_chunk,
217
+ NSS_SETTINGS_STRUCT.declaration_chunk,
218
+ ]
219
+ );
220
+
221
+ export const shader_nss_conv_layer = ComputeShader.from({
222
+ label: "NSS / conv layer",
223
+ body,
224
+ resources,
225
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"shader_nss_extract_feedback.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js"],"names":[],"mappings":"AA4CA,wDAKG;8BAhD2B,+BAA+B"}
1
+ {"version":3,"file":"shader_nss_extract_feedback.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js"],"names":[],"mappings":"AA4CA,wDAIG;8BA/C2B,+BAA+B"}