@woosh/meep-engine 3.11.2 → 3.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (551) hide show
  1. package/README.md +14 -18
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/editor/SelectionVisualizer.js +127 -127
  4. package/editor/entity_world_bounds.js +27 -27
  5. package/editor/particles/rebuildParticleEmitter.js +31 -31
  6. package/editor/process/SymbolicDisplayProcess.js +1 -1
  7. package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
  8. package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
  9. package/editor/prototypeEditorShell.js +156 -156
  10. package/editor/selection/editor_pick.js +130 -130
  11. package/editor/selection/screen_rect_frustum.js +119 -119
  12. package/editor/tools/v2/TransformControls.js +971 -971
  13. package/package.json +1 -1
  14. package/src/engine/Engine.d.ts +3 -3
  15. package/src/engine/Engine.d.ts.map +1 -1
  16. package/src/engine/Engine.js +726 -726
  17. package/src/engine/EngineHarness.d.ts +1 -1
  18. package/src/engine/EngineHarness.js +590 -590
  19. package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
  20. package/src/engine/ecs/terrain/ecs/BuildLightTexture.d.ts +1 -1
  21. package/src/engine/ecs/terrain/ecs/BuildLightTexture.js +27 -27
  22. package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -5
  23. package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
  24. package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
  25. package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
  26. package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +1 -1
  27. package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
  28. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +1 -1
  29. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
  30. package/src/engine/graphics/ecs/water/Water.d.ts +1 -1
  31. package/src/engine/graphics/ecs/water/Water.js +104 -104
  32. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +1 -1
  33. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
  34. package/src/engine/graphics3/AnimationGraphSystem.d.ts +65 -0
  35. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -0
  36. package/src/engine/graphics3/AnimationGraphSystem.js +329 -0
  37. package/src/engine/graphics3/AnimationGraphSystem3.d.ts +6 -61
  38. package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +1 -1
  39. package/src/engine/graphics3/AnimationGraphSystem3.js +6 -325
  40. package/src/engine/graphics3/AnimationSystem.d.ts +76 -0
  41. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -0
  42. package/src/engine/graphics3/AnimationSystem.js +352 -0
  43. package/src/engine/graphics3/AnimationSystem3.d.ts +6 -72
  44. package/src/engine/graphics3/AnimationSystem3.d.ts.map +1 -1
  45. package/src/engine/graphics3/AnimationSystem3.js +6 -348
  46. package/src/engine/graphics3/CameraSystem.d.ts +49 -0
  47. package/src/engine/graphics3/CameraSystem.d.ts.map +1 -0
  48. package/src/engine/graphics3/CameraSystem.js +170 -0
  49. package/src/engine/graphics3/CameraSystem3.d.ts +6 -45
  50. package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
  51. package/src/engine/graphics3/CameraSystem3.js +6 -166
  52. package/src/engine/graphics3/DebugDrawSystem.d.ts +72 -0
  53. package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -0
  54. package/src/engine/graphics3/DebugDrawSystem.js +205 -0
  55. package/src/engine/graphics3/DebugDrawSystem3.d.ts +6 -68
  56. package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +1 -1
  57. package/src/engine/graphics3/DebugDrawSystem3.js +6 -201
  58. package/src/engine/graphics3/DecalSystem.d.ts +81 -0
  59. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -0
  60. package/src/engine/graphics3/DecalSystem.js +441 -0
  61. package/src/engine/graphics3/DecalSystem3.d.ts +6 -77
  62. package/src/engine/graphics3/DecalSystem3.d.ts.map +1 -1
  63. package/src/engine/graphics3/DecalSystem3.js +6 -437
  64. package/src/engine/graphics3/FogOfWarSystem.d.ts +74 -0
  65. package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -0
  66. package/src/engine/graphics3/FogOfWarSystem.js +265 -0
  67. package/src/engine/graphics3/FogOfWarSystem3.d.ts +6 -70
  68. package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +1 -1
  69. package/src/engine/graphics3/FogOfWarSystem3.js +6 -261
  70. package/src/engine/graphics3/GraphicsEngine.d.ts +340 -0
  71. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -0
  72. package/src/engine/graphics3/GraphicsEngine.js +790 -0
  73. package/src/engine/graphics3/GraphicsEngine3.d.ts +6 -336
  74. package/src/engine/graphics3/GraphicsEngine3.d.ts.map +1 -1
  75. package/src/engine/graphics3/GraphicsEngine3.js +6 -786
  76. package/src/engine/graphics3/HighlightSystem.d.ts +82 -0
  77. package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -0
  78. package/src/engine/graphics3/HighlightSystem.js +241 -0
  79. package/src/engine/graphics3/HighlightSystem3.d.ts +6 -78
  80. package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
  81. package/src/engine/graphics3/HighlightSystem3.js +6 -237
  82. package/src/engine/graphics3/LightSystem.d.ts +40 -0
  83. package/src/engine/graphics3/LightSystem.d.ts.map +1 -0
  84. package/src/engine/graphics3/LightSystem.js +211 -0
  85. package/src/engine/graphics3/LightSystem3.d.ts +6 -36
  86. package/src/engine/graphics3/LightSystem3.d.ts.map +1 -1
  87. package/src/engine/graphics3/LightSystem3.js +6 -207
  88. package/src/engine/graphics3/MeshSystem.d.ts +106 -0
  89. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -0
  90. package/src/engine/graphics3/MeshSystem.js +647 -0
  91. package/src/engine/graphics3/MeshSystem3.d.ts +6 -102
  92. package/src/engine/graphics3/MeshSystem3.d.ts.map +1 -1
  93. package/src/engine/graphics3/MeshSystem3.js +6 -642
  94. package/src/engine/graphics3/ParticipatingMedia.d.ts +2 -2
  95. package/src/engine/graphics3/ParticipatingMedia.js +203 -203
  96. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +87 -0
  97. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -0
  98. package/src/engine/graphics3/ParticipatingMediaSystem.js +184 -0
  99. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +6 -83
  100. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -1
  101. package/src/engine/graphics3/ParticipatingMediaSystem3.js +6 -180
  102. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +76 -0
  103. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -0
  104. package/src/engine/graphics3/ParticleEmitterSystem.js +289 -0
  105. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +6 -72
  106. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
  107. package/src/engine/graphics3/ParticleEmitterSystem3.js +6 -285
  108. package/src/engine/graphics3/PathDisplaySystem.d.ts +70 -0
  109. package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -0
  110. package/src/engine/graphics3/PathDisplaySystem.js +309 -0
  111. package/src/engine/graphics3/PathDisplaySystem3.d.ts +6 -66
  112. package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +1 -1
  113. package/src/engine/graphics3/PathDisplaySystem3.js +6 -305
  114. package/src/engine/graphics3/Pickable.d.ts +1 -1
  115. package/src/engine/graphics3/Pickable.js +65 -65
  116. package/src/engine/graphics3/PickingQuery.d.ts +1 -1
  117. package/src/engine/graphics3/PickingQuery.js +48 -48
  118. package/src/engine/graphics3/PickingSystem.d.ts +67 -0
  119. package/src/engine/graphics3/PickingSystem.d.ts.map +1 -0
  120. package/src/engine/graphics3/PickingSystem.js +273 -0
  121. package/src/engine/graphics3/PickingSystem3.d.ts +6 -63
  122. package/src/engine/graphics3/PickingSystem3.d.ts.map +1 -1
  123. package/src/engine/graphics3/PickingSystem3.js +6 -269
  124. package/src/engine/graphics3/ShadedGeometrySystem.d.ts +47 -0
  125. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -0
  126. package/src/engine/graphics3/ShadedGeometrySystem.js +169 -0
  127. package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +6 -43
  128. package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +1 -1
  129. package/src/engine/graphics3/ShadedGeometrySystem3.js +6 -165
  130. package/src/engine/graphics3/TerrainSystem.d.ts +80 -0
  131. package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -0
  132. package/src/engine/graphics3/TerrainSystem.js +566 -0
  133. package/src/engine/graphics3/TerrainSystem3.d.ts +6 -76
  134. package/src/engine/graphics3/TerrainSystem3.d.ts.map +1 -1
  135. package/src/engine/graphics3/TerrainSystem3.js +6 -562
  136. package/src/engine/graphics3/TooltipComponentSystem.d.ts +65 -0
  137. package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -0
  138. package/src/engine/graphics3/TooltipComponentSystem.js +328 -0
  139. package/src/engine/graphics3/TooltipComponentSystem3.d.ts +6 -61
  140. package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +1 -1
  141. package/src/engine/graphics3/TooltipComponentSystem3.js +6 -324
  142. package/src/engine/graphics3/Trail3DSystem.d.ts +73 -0
  143. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -0
  144. package/src/engine/graphics3/Trail3DSystem.js +221 -0
  145. package/src/engine/graphics3/Trail3DSystem3.d.ts +6 -69
  146. package/src/engine/graphics3/Trail3DSystem3.d.ts.map +1 -1
  147. package/src/engine/graphics3/Trail3DSystem3.js +6 -217
  148. package/src/engine/graphics3/VolumetricLightMap.d.ts +2 -2
  149. package/src/engine/graphics3/VolumetricLightMap.js +2 -2
  150. package/src/engine/graphics3/VolumetricLightMapSystem.d.ts +98 -0
  151. package/src/engine/graphics3/VolumetricLightMapSystem.d.ts.map +1 -0
  152. package/src/engine/graphics3/VolumetricLightMapSystem.js +261 -0
  153. package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +6 -94
  154. package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +1 -1
  155. package/src/engine/graphics3/VolumetricLightMapSystem3.js +10 -261
  156. package/src/engine/graphics3/WaterSystem.d.ts +59 -0
  157. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -0
  158. package/src/engine/graphics3/WaterSystem.js +293 -0
  159. package/src/engine/graphics3/WaterSystem3.d.ts +6 -55
  160. package/src/engine/graphics3/WaterSystem3.d.ts.map +1 -1
  161. package/src/engine/graphics3/WaterSystem3.js +6 -289
  162. package/src/engine/graphics3/animation/AnimationGraphController.d.ts +1 -1
  163. package/src/engine/graphics3/animation/AnimationGraphController.js +518 -518
  164. package/src/engine/graphics3/animation/ClipListPlayer.d.ts +1 -1
  165. package/src/engine/graphics3/animation/ClipListPlayer.js +263 -263
  166. package/src/engine/graphics3/animation/ClipPlayback.d.ts +2 -2
  167. package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
  168. package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
  169. package/src/engine/graphics3/decal/graph_build_decal_clusters.js +6 -8
  170. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts +0 -7
  171. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
  172. package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +1 -1
  173. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts +0 -4
  174. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
  175. package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +1 -1
  176. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
  177. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
  178. package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
  179. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
  180. package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
  181. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
  182. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
  183. package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
  184. package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
  185. package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
  186. package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
  187. package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
  188. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts +16 -2
  189. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts.map +1 -1
  190. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +28 -4
  191. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +1 -1
  192. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  193. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +5 -2
  194. package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +564 -451
  195. package/src/shade/device/ShadeGPUCommandContext.d.ts +18 -2
  196. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  197. package/src/shade/device/ShadeGPUCommandContext.js +994 -940
  198. package/src/shade/device/immediate_data_supported.d.ts +33 -0
  199. package/src/shade/device/immediate_data_supported.d.ts.map +1 -0
  200. package/src/shade/device/immediate_data_supported.js +53 -0
  201. package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts +18 -0
  202. package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts.map +1 -1
  203. package/src/shade/device/mock/SoftwareGPUCommandEncoder.js +24 -0
  204. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts +7 -0
  205. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts.map +1 -1
  206. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.js +49 -1
  207. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  208. package/src/shade/device/mock/SoftwareGPUDevice.js +20 -2
  209. package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts +65 -0
  210. package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts.map +1 -0
  211. package/src/shade/device/mock/SoftwareGPUImmediateData.js +160 -0
  212. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts +7 -0
  213. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts.map +1 -1
  214. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.js +50 -0
  215. package/src/shade/device/mock/pipeline_immediate_size.d.ts +11 -0
  216. package/src/shade/device/mock/pipeline_immediate_size.d.ts.map +1 -0
  217. package/src/shade/device/mock/pipeline_immediate_size.js +18 -0
  218. package/src/shade/device/pipeline/PipelineLayoutManager.d.ts.map +1 -1
  219. package/src/shade/device/pipeline/PipelineLayoutManager.js +1 -0
  220. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  221. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +0 -1
  222. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  223. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +0 -1
  224. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  225. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +133 -134
  226. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
  227. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
  228. package/src/shade/renderer/GraphicsContext.d.ts +9 -2
  229. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  230. package/src/shade/renderer/GraphicsContext.js +13 -1
  231. package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
  232. package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
  233. package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
  234. package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
  235. package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
  236. package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
  237. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
  238. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
  239. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  240. package/src/shade/renderer/animation/shader_animation_tick.js +125 -126
  241. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  242. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +98 -99
  243. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  244. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +212 -213
  245. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  246. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +120 -121
  247. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  248. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +75 -76
  249. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  250. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +371 -372
  251. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
  252. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +104 -105
  253. package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
  254. package/src/shade/renderer/atmosphere/GPUSky.js +145 -142
  255. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts +34 -0
  256. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts.map +1 -0
  257. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.js +36 -0
  258. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts +20 -0
  259. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts.map +1 -0
  260. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.js +25 -0
  261. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +14 -1
  262. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
  263. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +163 -177
  264. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts +20 -0
  265. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts.map +1 -0
  266. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.js +46 -0
  267. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts +11 -1
  268. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts.map +1 -1
  269. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.js +57 -27
  270. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts +19 -1
  271. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts.map +1 -1
  272. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.js +69 -33
  273. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts +13 -0
  274. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts.map +1 -1
  275. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js +35 -35
  276. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts +13 -0
  277. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts.map +1 -0
  278. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.js +38 -0
  279. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts +17 -0
  280. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts.map +1 -0
  281. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.js +29 -0
  282. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts +21 -0
  283. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts.map +1 -0
  284. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.js +42 -0
  285. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts +2 -2
  286. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
  287. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +164 -84
  288. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
  289. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +215 -204
  290. package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts.map +1 -1
  291. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +79 -67
  292. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +136 -136
  293. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  294. package/src/shade/renderer/buffer/table/GPUDatabase.js +2 -3
  295. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +319 -319
  296. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  297. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +41 -42
  298. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
  299. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
  300. package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
  301. package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
  302. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
  303. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +4 -4
  304. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  305. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +121 -122
  306. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +774 -774
  307. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
  308. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  309. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +69 -70
  310. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
  311. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +184 -184
  312. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
  313. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
  314. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  315. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +142 -143
  316. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  317. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +0 -1
  318. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  319. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +140 -141
  320. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  321. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +0 -1
  322. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  323. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +0 -1
  324. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
  325. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
  326. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
  327. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
  328. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
  329. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
  330. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
  331. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
  332. package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
  333. package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +10 -9
  334. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
  335. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
  336. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +1 -1
  337. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
  338. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
  339. package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
  340. package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
  341. package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
  342. package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
  343. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
  344. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
  345. package/src/shade/renderer/particles/prototypeParticleSystem.js +2 -3
  346. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  347. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +117 -118
  348. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  349. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +77 -79
  350. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
  351. package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
  352. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  353. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +99 -100
  354. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  355. package/src/shade/renderer/particles/sort/shader_particle_sort.js +158 -161
  356. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
  357. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +119 -119
  358. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +3 -4
  359. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  360. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +266 -267
  361. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  362. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +270 -271
  363. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  364. package/src/shade/renderer/postprocess/gtao/GTAO.js +4 -0
  365. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  366. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +68 -69
  367. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
  368. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
  369. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
  370. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
  371. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  372. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
  373. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
  374. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
  375. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
  376. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
  377. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
  378. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  379. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +341 -345
  380. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
  381. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +68 -69
  382. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
  383. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
  384. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +0 -2
  385. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  386. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +57 -57
  387. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
  388. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +64 -65
  389. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
  390. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
  391. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
  392. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
  393. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  394. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +109 -110
  395. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  396. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +115 -116
  397. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
  398. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
  399. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
  400. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
  401. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
  402. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +88 -89
  403. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
  404. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +90 -91
  405. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  406. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +65 -66
  407. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
  408. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +89 -90
  409. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
  410. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
  411. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
  412. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +7 -3
  413. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
  414. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +89 -90
  415. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
  416. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
  417. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
  418. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +153 -154
  419. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
  420. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +77 -81
  421. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
  422. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
  423. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
  424. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
  425. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
  426. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
  427. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
  428. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
  429. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +5 -1
  430. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  431. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +136 -137
  432. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  433. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +129 -130
  434. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  435. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +99 -100
  436. package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
  437. package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
  438. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +383 -383
  439. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
  440. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
  441. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
  442. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
  443. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
  444. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
  445. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
  446. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  447. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +0 -1
  448. package/src/shade/renderer/shader/ComputeShader.d.ts +24 -3
  449. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  450. package/src/shade/renderer/shader/ComputeShader.js +350 -292
  451. package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
  452. package/src/shade/renderer/shader/ImageShader.js +217 -214
  453. package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
  454. package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
  455. package/src/shade/renderer/shader/ShaderDescriptor.js +46 -0
  456. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts +18 -0
  457. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts.map +1 -0
  458. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js +32 -0
  459. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts +7 -0
  460. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts.map +1 -1
  461. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.js +17 -6
  462. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts +21 -0
  463. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts.map +1 -0
  464. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js +69 -0
  465. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts +9 -0
  466. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts.map +1 -0
  467. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.js +22 -0
  468. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts +16 -0
  469. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts.map +1 -0
  470. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.js +41 -0
  471. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts +11 -0
  472. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts.map +1 -1
  473. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.js +15 -19
  474. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts +23 -0
  475. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts.map +1 -0
  476. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.js +44 -0
  477. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.d.ts.map +1 -1
  478. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js +1 -4
  479. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +7 -1
  480. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts.map +1 -1
  481. package/src/shade/renderer/shader/compiler/CodeChunk.js +37 -2
  482. package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.d.ts.map +1 -1
  483. package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.js +6 -0
  484. package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.js +1 -1
  485. package/src/shade/renderer/shader/graph/compute/graph_compute_pass.js +1 -1
  486. package/src/shade/renderer/shader/graph/graph_image_pass.js +1 -1
  487. package/src/shade/renderer/shader/graph/graph_prepare_bindings.d.ts.map +1 -1
  488. package/src/shade/renderer/shader/graph/graph_prepare_bindings.js +7 -0
  489. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts +3 -1
  490. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts.map +1 -1
  491. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.js +12 -1
  492. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  493. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +1 -0
  494. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts +21 -0
  495. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts.map +1 -0
  496. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.js +21 -0
  497. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts +59 -1
  498. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  499. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +195 -2
  500. package/src/shade/renderer/shader/type/type_has_arrays.d.ts +14 -0
  501. package/src/shade/renderer/shader/type/type_has_arrays.d.ts.map +1 -0
  502. package/src/shade/renderer/shader/type/type_has_arrays.js +33 -0
  503. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
  504. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
  505. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
  506. package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
  507. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +3 -3
  508. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +2 -2
  509. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +4 -4
  510. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  511. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +231 -232
  512. package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +1 -1
  513. package/src/shade/renderer/view/GPUViewSkyContext.js +169 -173
  514. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
  515. package/src/shade/renderer/volumetrics/NOTES.md +238 -0
  516. package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.js +145 -145
  517. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.d.ts.map +1 -1
  518. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.js +38 -15
  519. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +14 -2
  520. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  521. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +591 -577
  522. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +17 -0
  523. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  524. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +20 -2
  525. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
  526. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +29 -18
  527. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +260 -260
  528. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts +53 -3
  529. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -1
  530. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +175 -59
  531. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
  532. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
  533. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
  534. package/src/shade/renderer/water/shader_water.js +246 -246
  535. package/src/shade/vitest.setup.mjs +1 -1
  536. package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
  537. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +8 -1
  538. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  539. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +1325 -1297
  540. package/src/view/minimap/Minimap.d.ts +2 -2
  541. package/src/view/minimap/Minimap.d.ts.map +1 -1
  542. package/src/view/minimap/Minimap.js +225 -225
  543. package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
  544. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  545. package/src/view/minimap/dom/MinimapCameraView.js +206 -206
  546. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
  547. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
  548. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
  549. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts +0 -2
  550. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts.map +0 -1
  551. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.js +0 -1
@@ -1,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"}