@woosh/meep-engine 3.11.3 → 3.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (596) hide show
  1. package/README.md +14 -18
  2. package/editor/SelectionVisualizer.js +127 -127
  3. package/editor/entity_world_bounds.js +27 -27
  4. package/editor/particles/rebuildParticleEmitter.js +31 -31
  5. package/editor/process/SymbolicDisplayProcess.js +1 -1
  6. package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
  7. package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
  8. package/editor/prototypeEditorShell.js +156 -156
  9. package/editor/selection/editor_pick.js +130 -130
  10. package/editor/selection/screen_rect_frustum.js +119 -119
  11. package/editor/tools/v2/TransformControls.js +971 -971
  12. package/package.json +1 -1
  13. package/src/engine/Engine.d.ts +3 -3
  14. package/src/engine/Engine.d.ts.map +1 -1
  15. package/src/engine/Engine.js +726 -726
  16. package/src/engine/EngineHarness.d.ts +1 -1
  17. package/src/engine/EngineHarness.js +590 -590
  18. package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
  19. package/src/engine/ecs/terrain/ecs/BuildLightTexture.d.ts +1 -1
  20. package/src/engine/ecs/terrain/ecs/BuildLightTexture.js +27 -27
  21. package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -5
  22. package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
  23. package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
  24. package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
  25. package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +1 -1
  26. package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
  27. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +1 -1
  28. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
  29. package/src/engine/graphics/ecs/water/Water.d.ts +1 -1
  30. package/src/engine/graphics/ecs/water/Water.js +104 -104
  31. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +1 -1
  32. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
  33. package/src/engine/graphics3/AnimationGraphSystem.d.ts +65 -0
  34. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -0
  35. package/src/engine/graphics3/AnimationGraphSystem.js +329 -0
  36. package/src/engine/graphics3/AnimationGraphSystem3.d.ts +6 -61
  37. package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +1 -1
  38. package/src/engine/graphics3/AnimationGraphSystem3.js +6 -325
  39. package/src/engine/graphics3/AnimationSystem.d.ts +76 -0
  40. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -0
  41. package/src/engine/graphics3/AnimationSystem.js +352 -0
  42. package/src/engine/graphics3/AnimationSystem3.d.ts +6 -72
  43. package/src/engine/graphics3/AnimationSystem3.d.ts.map +1 -1
  44. package/src/engine/graphics3/AnimationSystem3.js +6 -348
  45. package/src/engine/graphics3/CameraSystem.d.ts +49 -0
  46. package/src/engine/graphics3/CameraSystem.d.ts.map +1 -0
  47. package/src/engine/graphics3/CameraSystem.js +170 -0
  48. package/src/engine/graphics3/CameraSystem3.d.ts +6 -45
  49. package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
  50. package/src/engine/graphics3/CameraSystem3.js +6 -166
  51. package/src/engine/graphics3/DebugDrawSystem.d.ts +72 -0
  52. package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -0
  53. package/src/engine/graphics3/DebugDrawSystem.js +205 -0
  54. package/src/engine/graphics3/DebugDrawSystem3.d.ts +6 -68
  55. package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +1 -1
  56. package/src/engine/graphics3/DebugDrawSystem3.js +6 -201
  57. package/src/engine/graphics3/DecalSystem.d.ts +81 -0
  58. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -0
  59. package/src/engine/graphics3/DecalSystem.js +441 -0
  60. package/src/engine/graphics3/DecalSystem3.d.ts +6 -77
  61. package/src/engine/graphics3/DecalSystem3.d.ts.map +1 -1
  62. package/src/engine/graphics3/DecalSystem3.js +6 -437
  63. package/src/engine/graphics3/FogOfWarSystem.d.ts +74 -0
  64. package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -0
  65. package/src/engine/graphics3/FogOfWarSystem.js +265 -0
  66. package/src/engine/graphics3/FogOfWarSystem3.d.ts +6 -70
  67. package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +1 -1
  68. package/src/engine/graphics3/FogOfWarSystem3.js +6 -261
  69. package/src/engine/graphics3/GraphicsEngine.d.ts +340 -0
  70. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -0
  71. package/src/engine/graphics3/GraphicsEngine.js +790 -0
  72. package/src/engine/graphics3/GraphicsEngine3.d.ts +6 -336
  73. package/src/engine/graphics3/GraphicsEngine3.d.ts.map +1 -1
  74. package/src/engine/graphics3/GraphicsEngine3.js +6 -786
  75. package/src/engine/graphics3/HighlightSystem.d.ts +82 -0
  76. package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -0
  77. package/src/engine/graphics3/HighlightSystem.js +241 -0
  78. package/src/engine/graphics3/HighlightSystem3.d.ts +6 -78
  79. package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
  80. package/src/engine/graphics3/HighlightSystem3.js +6 -237
  81. package/src/engine/graphics3/LightSystem.d.ts +40 -0
  82. package/src/engine/graphics3/LightSystem.d.ts.map +1 -0
  83. package/src/engine/graphics3/LightSystem.js +211 -0
  84. package/src/engine/graphics3/LightSystem3.d.ts +6 -36
  85. package/src/engine/graphics3/LightSystem3.d.ts.map +1 -1
  86. package/src/engine/graphics3/LightSystem3.js +6 -207
  87. package/src/engine/graphics3/MeshSystem.d.ts +106 -0
  88. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -0
  89. package/src/engine/graphics3/MeshSystem.js +647 -0
  90. package/src/engine/graphics3/MeshSystem3.d.ts +6 -102
  91. package/src/engine/graphics3/MeshSystem3.d.ts.map +1 -1
  92. package/src/engine/graphics3/MeshSystem3.js +6 -642
  93. package/src/engine/graphics3/ParticipatingMedia.d.ts +2 -2
  94. package/src/engine/graphics3/ParticipatingMedia.js +203 -203
  95. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +87 -0
  96. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -0
  97. package/src/engine/graphics3/ParticipatingMediaSystem.js +184 -0
  98. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +6 -83
  99. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -1
  100. package/src/engine/graphics3/ParticipatingMediaSystem3.js +6 -180
  101. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +76 -0
  102. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -0
  103. package/src/engine/graphics3/ParticleEmitterSystem.js +289 -0
  104. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +6 -72
  105. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
  106. package/src/engine/graphics3/ParticleEmitterSystem3.js +6 -285
  107. package/src/engine/graphics3/PathDisplaySystem.d.ts +70 -0
  108. package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -0
  109. package/src/engine/graphics3/PathDisplaySystem.js +309 -0
  110. package/src/engine/graphics3/PathDisplaySystem3.d.ts +6 -66
  111. package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +1 -1
  112. package/src/engine/graphics3/PathDisplaySystem3.js +6 -305
  113. package/src/engine/graphics3/Pickable.d.ts +1 -1
  114. package/src/engine/graphics3/Pickable.js +65 -65
  115. package/src/engine/graphics3/PickingQuery.d.ts +1 -1
  116. package/src/engine/graphics3/PickingQuery.js +48 -48
  117. package/src/engine/graphics3/PickingSystem.d.ts +67 -0
  118. package/src/engine/graphics3/PickingSystem.d.ts.map +1 -0
  119. package/src/engine/graphics3/PickingSystem.js +273 -0
  120. package/src/engine/graphics3/PickingSystem3.d.ts +6 -63
  121. package/src/engine/graphics3/PickingSystem3.d.ts.map +1 -1
  122. package/src/engine/graphics3/PickingSystem3.js +6 -269
  123. package/src/engine/graphics3/ShadedGeometrySystem.d.ts +47 -0
  124. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -0
  125. package/src/engine/graphics3/ShadedGeometrySystem.js +169 -0
  126. package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +6 -43
  127. package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +1 -1
  128. package/src/engine/graphics3/ShadedGeometrySystem3.js +6 -165
  129. package/src/engine/graphics3/TerrainSystem.d.ts +80 -0
  130. package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -0
  131. package/src/engine/graphics3/TerrainSystem.js +566 -0
  132. package/src/engine/graphics3/TerrainSystem3.d.ts +6 -76
  133. package/src/engine/graphics3/TerrainSystem3.d.ts.map +1 -1
  134. package/src/engine/graphics3/TerrainSystem3.js +6 -562
  135. package/src/engine/graphics3/TooltipComponentSystem.d.ts +65 -0
  136. package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -0
  137. package/src/engine/graphics3/TooltipComponentSystem.js +328 -0
  138. package/src/engine/graphics3/TooltipComponentSystem3.d.ts +6 -61
  139. package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +1 -1
  140. package/src/engine/graphics3/TooltipComponentSystem3.js +6 -324
  141. package/src/engine/graphics3/Trail3DSystem.d.ts +73 -0
  142. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -0
  143. package/src/engine/graphics3/Trail3DSystem.js +221 -0
  144. package/src/engine/graphics3/Trail3DSystem3.d.ts +6 -69
  145. package/src/engine/graphics3/Trail3DSystem3.d.ts.map +1 -1
  146. package/src/engine/graphics3/Trail3DSystem3.js +6 -217
  147. package/src/engine/graphics3/VolumetricLightMap.d.ts +2 -2
  148. package/src/engine/graphics3/VolumetricLightMap.js +2 -2
  149. package/src/engine/graphics3/VolumetricLightMapSystem.d.ts +98 -0
  150. package/src/engine/graphics3/VolumetricLightMapSystem.d.ts.map +1 -0
  151. package/src/engine/graphics3/VolumetricLightMapSystem.js +261 -0
  152. package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +6 -94
  153. package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +1 -1
  154. package/src/engine/graphics3/VolumetricLightMapSystem3.js +10 -261
  155. package/src/engine/graphics3/WaterSystem.d.ts +59 -0
  156. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -0
  157. package/src/engine/graphics3/WaterSystem.js +293 -0
  158. package/src/engine/graphics3/WaterSystem3.d.ts +6 -55
  159. package/src/engine/graphics3/WaterSystem3.d.ts.map +1 -1
  160. package/src/engine/graphics3/WaterSystem3.js +6 -289
  161. package/src/engine/graphics3/animation/AnimationGraphController.d.ts +1 -1
  162. package/src/engine/graphics3/animation/AnimationGraphController.js +518 -518
  163. package/src/engine/graphics3/animation/ClipListPlayer.d.ts +1 -1
  164. package/src/engine/graphics3/animation/ClipListPlayer.js +263 -263
  165. package/src/engine/graphics3/animation/ClipPlayback.d.ts +2 -2
  166. package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
  167. package/src/engine/graphics3/decal/GPUDecalRenderer.js +3 -3
  168. package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
  169. package/src/engine/graphics3/decal/graph_build_decal_clusters.js +6 -8
  170. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts +0 -7
  171. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
  172. package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +1 -1
  173. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts +0 -4
  174. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
  175. package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +1 -1
  176. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  177. package/src/engine/graphics3/decal/shader_decal_composite.js +4 -2
  178. package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
  179. package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +2 -3
  180. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
  181. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
  182. package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
  183. package/src/engine/graphics3/highlight/shader_highlight_outline.js +150 -150
  184. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
  185. package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
  186. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
  187. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
  188. package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
  189. package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
  190. package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
  191. package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
  192. package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
  193. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  194. package/src/shade/RENDERER_CONTRACT.md +2 -1
  195. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -0
  196. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  197. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +73 -0
  198. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +750 -0
  199. package/src/shade/device/ShadeGPUCommandContext.d.ts +10 -16
  200. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  201. package/src/shade/device/ShadeGPUCommandContext.js +801 -994
  202. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +107 -0
  203. package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -0
  204. package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +222 -0
  205. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +168 -0
  206. package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -0
  207. package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +317 -0
  208. package/src/shade/device/timing/GPUTimerArray.d.ts +4 -9
  209. package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
  210. package/src/shade/device/timing/GPUTimerArray.js +261 -289
  211. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +20 -2
  212. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts +59 -0
  213. package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts.map +1 -0
  214. package/src/shade/device/timing/ShadeGPUContextProfiler.js +182 -0
  215. package/src/shade/device/timing/profile/GPUProfileSession.d.ts +4 -4
  216. package/src/shade/device/timing/profile/GPUProfileSession.js +4 -4
  217. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  218. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +3 -2
  219. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  220. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +3 -2
  221. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  222. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +135 -134
  223. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
  224. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
  225. package/src/shade/renderer/Renderer.d.ts +0 -6
  226. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  227. package/src/shade/renderer/Renderer.js +0 -29
  228. package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
  229. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  230. package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
  231. package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
  232. package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
  233. package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
  234. package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
  235. package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
  236. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
  237. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
  238. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  239. package/src/shade/renderer/animation/shader_animation_tick.js +4 -2
  240. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  241. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +8 -18
  242. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  243. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +3 -2
  244. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  245. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +4 -2
  246. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts +1 -1
  247. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  248. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +24 -10
  249. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  250. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +3 -2
  251. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  252. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +5 -2
  253. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
  254. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +104 -105
  255. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
  256. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +0 -1
  257. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
  258. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +136 -136
  259. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  260. package/src/shade/renderer/buffer/table/GPUDatabase.js +16 -22
  261. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.d.ts.map +1 -1
  262. package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.js +7 -2
  263. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  264. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +11 -5
  265. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  266. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +43 -42
  267. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
  268. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
  269. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
  270. package/src/shade/renderer/deferred/shader_tonemap_HDR.js +4 -1
  271. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +2 -2
  272. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
  273. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
  274. package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
  275. package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
  276. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
  277. package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +3 -3
  278. package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
  279. package/src/shade/renderer/fow/shader_fog_of_war.js +3 -1
  280. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -102
  281. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  282. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +5 -2
  283. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  284. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +3 -11
  285. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
  286. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  287. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +6 -4
  288. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  289. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -10
  290. package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +129 -129
  291. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
  292. package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +5 -3
  293. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  294. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -1
  295. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.d.ts.map +1 -1
  296. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js +3 -1
  297. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.d.ts.map +1 -1
  298. package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js +114 -112
  299. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
  300. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts.map +1 -1
  301. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +4 -1
  302. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
  303. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +9 -6
  304. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
  305. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +4 -1
  306. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
  307. package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +6 -8
  308. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
  309. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -1
  310. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.d.ts.map +1 -1
  311. package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +3 -1
  312. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
  313. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
  314. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +10 -10
  315. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  316. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +4 -2
  317. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  318. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +87 -83
  319. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  320. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +4 -2
  321. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +2 -2
  322. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -1
  323. package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +43 -8
  324. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  325. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +4 -5
  326. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  327. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +88 -85
  328. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  329. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +194 -192
  330. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  331. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +33 -69
  332. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  333. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +6 -1
  334. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  335. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +23 -7
  336. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
  337. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
  338. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
  339. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
  340. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
  341. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
  342. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
  343. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
  344. package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
  345. package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +4 -7
  346. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
  347. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
  348. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +1 -1
  349. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  350. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +1 -2
  351. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
  352. package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +6 -1
  353. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
  354. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +234 -219
  355. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
  356. package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +191 -191
  357. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.d.ts.map +1 -1
  358. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js +85 -82
  359. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
  360. package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
  361. package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
  362. package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
  363. package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
  364. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
  365. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
  366. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  367. package/src/shade/renderer/particles/graph_particles.js +5 -3
  368. package/src/shade/renderer/particles/prototypeParticleSystem.js +5 -7
  369. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  370. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +27 -13
  371. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  372. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +4 -4
  373. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
  374. package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
  375. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  376. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +18 -7
  377. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  378. package/src/shade/renderer/particles/sort/shader_particle_sort.js +47 -21
  379. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  380. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +7 -10
  381. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  382. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +4 -1
  383. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
  384. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.d.ts.map +1 -1
  385. package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.js +3 -1
  386. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.d.ts.map +1 -1
  387. package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +4 -2
  388. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +147 -147
  389. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
  390. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +19 -17
  391. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.d.ts.map +1 -1
  392. package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +1 -2
  393. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.d.ts.map +1 -1
  394. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +4 -1
  395. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.d.ts.map +1 -1
  396. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +4 -1
  397. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
  398. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +4 -1
  399. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.d.ts.map +1 -1
  400. package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +4 -1
  401. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.d.ts.map +1 -1
  402. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +5 -8
  403. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.d.ts.map +1 -1
  404. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +4 -1
  405. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.d.ts.map +1 -1
  406. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +4 -1
  407. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.d.ts.map +1 -1
  408. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.js +4 -1
  409. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  410. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +4 -2
  411. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  412. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +4 -2
  413. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.d.ts.map +1 -1
  414. package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +4 -1
  415. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  416. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -11
  417. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
  418. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +5 -1
  419. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  420. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +11 -8
  421. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  422. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +7 -8
  423. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
  424. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +3 -1
  425. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  426. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  427. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +3 -2
  428. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
  429. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
  430. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
  431. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
  432. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  433. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
  434. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
  435. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
  436. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
  437. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +70 -68
  438. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
  439. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
  440. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
  441. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
  442. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +3 -1
  443. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
  444. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +4 -1
  445. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +1 -1
  446. package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +103 -101
  447. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  448. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
  449. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
  450. package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +3 -1
  451. package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
  452. package/src/shade/renderer/postprocess/taa/shader_taa.js +4 -1
  453. package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +5 -5
  454. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  455. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +339 -341
  456. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
  457. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +68 -69
  458. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
  459. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
  460. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  461. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +0 -1
  462. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
  463. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +64 -65
  464. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
  465. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
  466. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
  467. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
  468. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  469. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +6 -2
  470. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  471. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +4 -2
  472. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
  473. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
  474. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
  475. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
  476. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
  477. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +88 -89
  478. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
  479. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +90 -91
  480. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  481. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +5 -2
  482. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
  483. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +89 -90
  484. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
  485. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
  486. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
  487. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +89 -90
  488. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
  489. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
  490. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
  491. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +153 -154
  492. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
  493. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
  494. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +722 -722
  495. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
  496. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
  497. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
  498. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
  499. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
  500. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  501. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +1 -9
  502. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  503. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +1 -6
  504. package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
  505. package/src/shade/renderer/restir/di/graph_restir_di.js +2 -3
  506. package/src/shade/renderer/restir/di/graph_restir_di_denoise.d.ts.map +1 -1
  507. package/src/shade/renderer/restir/di/graph_restir_di_denoise.js +1 -2
  508. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  509. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +5 -3
  510. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  511. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +4 -3
  512. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  513. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +4 -3
  514. package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
  515. package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
  516. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  517. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +3 -7
  518. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
  519. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
  520. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
  521. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
  522. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
  523. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
  524. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
  525. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  526. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +147 -145
  527. package/src/shade/renderer/shader/ComputeShader.d.ts +26 -5
  528. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  529. package/src/shade/renderer/shader/ComputeShader.js +347 -296
  530. package/src/shade/renderer/shader/ImageShader.js +217 -217
  531. package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
  532. package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
  533. package/src/shade/renderer/shader/ShaderDescriptor.js +20 -0
  534. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +2 -2
  535. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  536. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +189 -189
  537. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  538. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +3 -1
  539. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
  540. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
  541. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
  542. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  543. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +14 -18
  544. package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
  545. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.d.ts.map +1 -1
  546. package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.js +5 -1
  547. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.d.ts.map +1 -1
  548. package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +3 -1
  549. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +73 -73
  550. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
  551. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +151 -148
  552. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
  553. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +6 -4
  554. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.d.ts.map +1 -1
  555. package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.js +18 -4
  556. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
  557. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +11 -12
  558. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.d.ts.map +1 -1
  559. package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.js +6 -2
  560. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.d.ts.map +1 -1
  561. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.js +129 -127
  562. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
  563. package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +5 -3
  564. package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
  565. package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +2 -5
  566. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  567. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +3 -2
  568. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
  569. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  570. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +14 -19
  571. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +3 -2
  572. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  573. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +3 -2
  574. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
  575. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
  576. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
  577. package/src/shade/renderer/water/shader_water.js +246 -246
  578. package/src/shade/vitest.setup.mjs +1 -1
  579. package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
  580. package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
  581. package/src/shade/wgsl/validate_wgsl_source.js +8 -3
  582. package/src/view/minimap/Minimap.d.ts +2 -2
  583. package/src/view/minimap/Minimap.d.ts.map +1 -1
  584. package/src/view/minimap/Minimap.js +225 -225
  585. package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
  586. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  587. package/src/view/minimap/dom/MinimapCameraView.js +206 -206
  588. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts +0 -21
  589. package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts.map +0 -1
  590. package/src/shade/device/timing/profile/make_profiling_pass_encoder.js +0 -114
  591. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts +0 -20
  592. package/src/shade/device/timing/profile/parse_workgroup_size.d.ts.map +0 -1
  593. package/src/shade/device/timing/profile/parse_workgroup_size.js +0 -43
  594. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
  595. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
  596. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
@@ -1,231 +1,230 @@
1
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
2
- import { ComputeShader } from "../../shader/ComputeShader.js";
3
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
4
- import { SAMPLER_LINEAR_UPSCALE } from "../../texture/SAMPLER_LINEAR_UPSCALE.js";
5
- import { chunk_nss_find_nearest_depth } from "./chunk_nss_find_nearest_depth.js";
6
- import { chunk_nss_luma_derivative } from "./chunk_nss_luma_derivative.js";
7
- import { NSS_WORKGROUP_SIZE } from "./NSS_CONSTANTS.js";
8
- import { NSS_SETTINGS_STRUCT } from "./NSS_SETTINGS_STRUCT.js";
9
-
10
- /**
11
- * NSS preprocess pass. Runs at render-resolution (one thread per render-res
12
- * pixel) and produces:
13
- * 1. The 12-channel network input tensor, packed into a single rgba16f
14
- * 3D storage texture with depth=3 (channels 0..3, 4..7, 8..11).
15
- * 2. The encoded "nearest depth offset" used by postprocess to dilate
16
- * velocity at output-res (`tNearestOffset` — components in [0, 1]
17
- * decode to {-1, 0, 1}² via `(x*2 - 1)`).
18
- *
19
- * Per-pixel logic (matches the algorithm in ARM's `Preprocess()`):
20
- * 1. Dilate depth over a 3×3 neighbourhood, remember the offset of the
21
- * nearest sample.
22
- * 2. Sample velocity at the dilated coord.
23
- * 3. Project to the previous frame, sample warped history (bilinear).
24
- * 4. Read the FSR2 depth-clip confidence from the upstream pass and
25
- * invert it into the network's "high = disocclusion" convention.
26
- * 5. Sample the warped feedback tensor (bilinear).
27
- * 6. Compute the luma derivative between current and warped history.
28
- * 7. Pack everything into the output tensor — colours
29
- * tonemapped via `Tonemap(EXPOSURE * raw)` to match ARM's training
30
- * distribution.
31
- *
32
- * @see ARM NSS reference: `Preprocess` in
33
- * `Source/NG-SDK/sdk/include/FidelityFX/gpu/nss/ffx_nss_preprocess.h`
34
- */
35
- const resources = new ShaderResourceSetDescriptor();
36
- resources.createGroup()
37
- .addSampler("sLinear", "filtering", SAMPLER_LINEAR_UPSCALE)
38
- // ── inputs at render-res ──
39
- .addTexture("tColour", "float") // jittered scene colour, render-res
40
- // depth32float can't be bound as 'float' (filterable) — WebGPU only
41
- // accepts depth textures via 'unfilterable-float' in this context.
42
- // We only ever read this via textureLoad inside the depth dilation.
43
- .addTexture("tDepthCurrent", "unfilterable-float")
44
- .addTexture("tVelocity", "float") // pixel-space motion vectors, render-res
45
- // FSR2 depth-clip confidence (1 = trust history, 0 = disocclusion)
46
- // produced by the engine's shared shader_depth_occlusion_clip pass.
47
- // We invert it into ARM's "high = disocclusion" network input.
48
- .addTexture("tDisocclusionConfidence", "float")
49
- // ── inputs at output-res / feedback at render-res ──
50
- .addTexture("tHistory", "float") // previous frame upscaled colour, output-res
51
- .addTexture("tFeedbackIn", "float") // 4-ch feedback tensor from previous frame, render-res
52
- // ── settings ──
53
- .addUniform("settings", NSS_SETTINGS_STRUCT)
54
- // ── outputs ──
55
- // Single rgba16f 3D storage texture holds the 12-channel input tensor
56
- // packed across depth=3 layers (4 channels each). rgba16f gives the
57
- // network ~10 bits of mantissa per channel, which is plenty for
58
- // normalized [0, 1] inputs after the network's first BN/scale.
59
- .addStorageTexture("tTensor", "rgba16float", "3d", "write-only")
60
- // Nearest-depth offset packed as (dx+1, dy+1) / 2 -> [0, 1]. Postprocess
61
- // uses this to fetch the velocity at the dilated coordinate when warping
62
- // the history at output-resolution.
63
- .addStorageTexture("tNearestOffset", "rg8unorm", "2d", "write-only")
64
- ;
65
-
66
-
67
- const body = CodeChunk.from(
68
- //language=WGSL
69
- `
70
- const NSS_EXPOSURE: f32 = 7.38905609893; // e^2 — matches ARM's NSSCommon.ush
71
-
72
- // Karis tonemap (max-of-channels), applied to EXPOSURE-scaled colour.
73
- // ARM's training distribution: Tonemap(EXPOSURE * raw) -> network input.
74
- fn nss_tonemap_exposure(rgb: vec3<f32>) -> vec3<f32> {
75
- let scaled = rgb * NSS_EXPOSURE;
76
- let m = max(max(scaled.r, scaled.g), scaled.b);
77
- return scaled / (1.0 + m);
78
- }
79
-
80
- // ARM's network was trained against inputs that go through their Quantize
81
- // formula: int8 = round(fp * 255 - 128). The conv then sees (uint8 - 128)
82
- // = signed int8 in [-128, 127] - i.e. fp 0 -> -128, fp 0.5 -> 0, fp 1 -> 127.
83
- // Our pipeline naively feeds fp [0, 1] which has DC offset +0.5 vs ARM's
84
- // expected DC of 0. The trained head biases were calibrated against that
85
- // near-zero DC, so feeding +0.5 puts every conv accumulator off by
86
- // (sum_of_weights * 0.5 * 255) - way outside the trained operating range.
87
- //
88
- // We use the SMOOTH (no-round) version of ARM's transform: a linear
89
- // remap [0, 1] -> approx [-1.008, 1.008] clamped to [-1, 1]. Matches
90
- // ARM's DC shift but without the round() discontinuities that caused
91
- // feature-dependent flickering when small jitter-driven input changes
92
- // pushed pixels across quantization boundaries. Network sensitivity to
93
- // near-boundary inputs would otherwise flip int8 outputs by 1/127 per
94
- // frame and propagate through every layer.
95
- //
96
- // Per-multiply lands at ~(ARM signed * int8_w) / 127^2, so our acc is
97
- // approx (ARM int32_acc / 127^2). Our rescale_factor (= 127 * mult /
98
- // 2^shift) then produces value_fp ~ int8_in / 127 going into the LUT -
99
- // the shape ARM's network was trained to produce.
100
- fn nss_arm_quantize(fp: f32) -> f32 {
101
- return clamp(fp * (255.0 / 127.0) - (128.0 / 127.0), -1.0, 1.0);
102
- }
103
-
104
- fn nss_arm_quantize_v3(rgb: vec3<f32>) -> vec3<f32> {
105
- return vec3<f32>(nss_arm_quantize(rgb.r), nss_arm_quantize(rgb.g), nss_arm_quantize(rgb.b));
106
- }
107
-
108
- fn nss_arm_quantize_v4(v: vec4<f32>) -> vec4<f32> {
109
- return vec4<f32>(nss_arm_quantize(v.x), nss_arm_quantize(v.y), nss_arm_quantize(v.z), nss_arm_quantize(v.w));
110
- }
111
-
112
- fn nss_warp_history_sample(prev_uv: vec2<f32>) -> vec3<f32> {
113
- let on_screen = all(prev_uv >= vec2<f32>(0.0)) && all(prev_uv <= vec2<f32>(1.0));
114
- if (!on_screen) {
115
- return vec3<f32>(0.0);
116
- }
117
- // ARM uses bilinear (LoadHistory in ffx_nss_callbacks_glsl.h:471);
118
- // Catmull-Rom is opt-in via HISTORY_CATMULL define.
119
- return max(vec3<f32>(0.0), textureSampleLevel(tHistory, sLinear, prev_uv, 0.0).rgb);
120
- }
121
-
122
- fn nss_warp_feedback_sample(prev_uv_render: vec2<f32>) -> vec4<f32> {
123
- let on_screen = all(prev_uv_render >= vec2<f32>(0.0)) && all(prev_uv_render <= vec2<f32>(1.0));
124
- if (!on_screen) {
125
- return vec4<f32>(0.0);
126
- }
127
- return textureSampleLevel(tFeedbackIn, sLinear, prev_uv_render, 0.0);
128
- }
129
-
130
- @compute @workgroup_size(${NSS_WORKGROUP_SIZE}, ${NSS_WORKGROUP_SIZE}, 1)
131
- fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
132
- let render_res_u = settings.render_resolution;
133
- let render_res = vec2<i32>(render_res_u);
134
-
135
- if (any(gid.xy >= render_res_u)) {
136
- return;
137
- }
138
-
139
- let st = vec2<i32>(gid.xy);
140
-
141
- // 1. Depth dilation
142
- var nearest_off = vec2<i32>(0, 0);
143
- let _dilated_depth = nss_find_nearest_depth(tDepthCurrent, st, render_res, &nearest_off);
144
-
145
- // 2. Velocity at the depth-nearest tap (FSR2 strategy — sharpens
146
- // silhouettes at disocclusion vs picking velocity at the centre).
147
- let velocity = textureLoad(tVelocity, st + nearest_off, 0).rg;
148
-
149
- // 3. Reproject to previous frame
150
- let st_centre = vec2<f32>(st) + 0.5;
151
- let prev_st_render = st_centre - velocity;
152
- let prev_uv_render = prev_st_render / vec2<f32>(render_res);
153
-
154
- // History lives at output resolution but the UV is the same in [0, 1].
155
- let history_rgb = nss_warp_history_sample(prev_uv_render);
156
-
157
- // 4. Disocclusion mask. The shared depth-clip pass returns FSR2
158
- // confidence (1 = trust history, 0 = disocclusion); ARM's network
159
- // input expects the inverse (high = disocclusion). Multiply by
160
- // history_validity so a hard reset zeros the mask too.
161
- let confidence = textureLoad(tDisocclusionConfidence, st, 0).r;
162
- let disocclusion_mask = (1.0 - saturate(confidence)) * saturate(settings.history_validity);
163
-
164
- // 5. Warped feedback. Multiplied by history_validity so the very first
165
- // frame (or any reset) feeds neutral (0.5 raw -> 0 post-quant)
166
- // feedback to the network instead of garbage from an uninitialised
167
- // texture.
168
- //
169
- // feedback_scale (debug knob, default 1.0) blends between actual FB
170
- // and the neutral value 0.5. At 0 the network sees raw 0.5 across
171
- // all FB channels, which post-quantize is ≈0 — the trained
172
- // "no signal" point, NOT a strong negative signal.
173
- let feedback_actual = nss_warp_feedback_sample(prev_uv_render);
174
- let feedback_neutral = vec4<f32>(0.5);
175
- let feedback = mix(
176
- feedback_neutral,
177
- feedback_actual,
178
- saturate(settings.history_validity) * saturate(settings.feedback_scale),
179
- );
180
-
181
- // 6. Current colour (load, no filtering — already at render-res)
182
- let current_rgb = max(vec3<f32>(0.0), textureLoad(tColour, st, 0).rgb);
183
-
184
- // 7. Luma derivative — uses raw colours; the chunk handles its own scaling.
185
- let luma_deriv = nss_luma_derivative(current_rgb, history_rgb);
186
-
187
- // Tonemap with EXPOSURE applied first — matches ARM's
188
- // Tonemap(EXPOSURE * raw) training distribution. Raw [0, 1] tonemap
189
- // (without exposure) lands values 2-5x below the network's trained
190
- // operating point.
191
- let history_t = nss_tonemap_exposure(history_rgb);
192
- let current_t = nss_tonemap_exposure(current_rgb);
193
-
194
- // Apply ARM's Quantize transformation in fp — converts our [0, 1] inputs
195
- // into the [-1, 1] signed-int8 / 127 distribution the trained network
196
- // expects (DC at 0, not +0.5). See nss_arm_quantize header for derivation.
197
- // settings.quantize_inputs (default 1.0) blends between this transform
198
- // and the raw [0, 1] tonemap (0.0). Useful as an A/B test knob.
199
- let q = saturate(settings.quantize_inputs);
200
- let history_q = mix(history_t, nss_arm_quantize_v3(history_t), q);
201
- let current_q = mix(current_t, nss_arm_quantize_v3(current_t), q);
202
- let disocclusion_q = mix(disocclusion_mask, nss_arm_quantize(disocclusion_mask), q);
203
- let feedback_q = mix(feedback, nss_arm_quantize_v4(feedback), q);
204
- let luma_deriv_q = mix(luma_deriv, nss_arm_quantize(luma_deriv), q);
205
-
206
- // ── Pack into 12-channel tensor ──
207
- // Layout (4ch × depth=3):
208
- // z=0 : history.rgb, current.r
209
- // z=1 : current.gb, disocclusion_mask, feedback.r
210
- // z=2 : feedback.gba, luma_derivative
211
- textureStore(tTensor, vec3<i32>(st, 0), vec4<f32>(history_q, current_q.r));
212
- textureStore(tTensor, vec3<i32>(st, 1), vec4<f32>(current_q.g, current_q.b, disocclusion_q, feedback_q.r));
213
- textureStore(tTensor, vec3<i32>(st, 2), vec4<f32>(feedback_q.gba, luma_deriv_q));
214
-
215
- // Pack nearest offset for postprocess: (-1, 0, 1) in each axis -> [0, 1]
216
- let nearest_packed = (vec2<f32>(nearest_off) + 1.0) * 0.5;
217
- textureStore(tNearestOffset, st, vec4<f32>(nearest_packed, 0.0, 0.0));
218
- }
219
- `, [
220
- chunk_nss_find_nearest_depth,
221
- chunk_nss_luma_derivative,
222
- NSS_SETTINGS_STRUCT.declaration_chunk,
223
- ]
224
- );
225
-
226
- export const shader_nss_preprocess = ComputeShader.from({
227
- label: "NSS / preprocess",
228
- body,
229
- resources,
230
- group_size: [NSS_WORKGROUP_SIZE, NSS_WORKGROUP_SIZE, 1],
231
- });
1
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
2
+ import { ComputeShader } from "../../shader/ComputeShader.js";
3
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
4
+ import { SAMPLER_LINEAR_UPSCALE } from "../../texture/SAMPLER_LINEAR_UPSCALE.js";
5
+ import { chunk_nss_find_nearest_depth } from "./chunk_nss_find_nearest_depth.js";
6
+ import { chunk_nss_luma_derivative } from "./chunk_nss_luma_derivative.js";
7
+ import { NSS_WORKGROUP_SIZE } from "./NSS_CONSTANTS.js";
8
+ import { NSS_SETTINGS_STRUCT } from "./NSS_SETTINGS_STRUCT.js";
9
+
10
+ /**
11
+ * NSS preprocess pass. Runs at render-resolution (one thread per render-res
12
+ * pixel) and produces:
13
+ * 1. The 12-channel network input tensor, packed into a single rgba16f
14
+ * 3D storage texture with depth=3 (channels 0..3, 4..7, 8..11).
15
+ * 2. The encoded "nearest depth offset" used by postprocess to dilate
16
+ * velocity at output-res (`tNearestOffset` — components in [0, 1]
17
+ * decode to {-1, 0, 1}² via `(x*2 - 1)`).
18
+ *
19
+ * Per-pixel logic (matches the algorithm in ARM's `Preprocess()`):
20
+ * 1. Dilate depth over a 3×3 neighbourhood, remember the offset of the
21
+ * nearest sample.
22
+ * 2. Sample velocity at the dilated coord.
23
+ * 3. Project to the previous frame, sample warped history (bilinear).
24
+ * 4. Read the FSR2 depth-clip confidence from the upstream pass and
25
+ * invert it into the network's "high = disocclusion" convention.
26
+ * 5. Sample the warped feedback tensor (bilinear).
27
+ * 6. Compute the luma derivative between current and warped history.
28
+ * 7. Pack everything into the output tensor — colours
29
+ * tonemapped via `Tonemap(EXPOSURE * raw)` to match ARM's training
30
+ * distribution.
31
+ *
32
+ * @see ARM NSS reference: `Preprocess` in
33
+ * `Source/NG-SDK/sdk/include/FidelityFX/gpu/nss/ffx_nss_preprocess.h`
34
+ */
35
+ const resources = new ShaderResourceSetDescriptor();
36
+ resources.createGroup()
37
+ .addSampler("sLinear", "filtering", SAMPLER_LINEAR_UPSCALE)
38
+ // ── inputs at render-res ──
39
+ .addTexture("tColour", "float") // jittered scene colour, render-res
40
+ // depth32float can't be bound as 'float' (filterable) — WebGPU only
41
+ // accepts depth textures via 'unfilterable-float' in this context.
42
+ // We only ever read this via textureLoad inside the depth dilation.
43
+ .addTexture("tDepthCurrent", "unfilterable-float")
44
+ .addTexture("tVelocity", "float") // pixel-space motion vectors, render-res
45
+ // FSR2 depth-clip confidence (1 = trust history, 0 = disocclusion)
46
+ // produced by the engine's shared shader_depth_occlusion_clip pass.
47
+ // We invert it into ARM's "high = disocclusion" network input.
48
+ .addTexture("tDisocclusionConfidence", "float")
49
+ // ── inputs at output-res / feedback at render-res ──
50
+ .addTexture("tHistory", "float") // previous frame upscaled colour, output-res
51
+ .addTexture("tFeedbackIn", "float") // 4-ch feedback tensor from previous frame, render-res
52
+ // ── settings ──
53
+ .addUniform("settings", NSS_SETTINGS_STRUCT)
54
+ // ── outputs ──
55
+ // Single rgba16f 3D storage texture holds the 12-channel input tensor
56
+ // packed across depth=3 layers (4 channels each). rgba16f gives the
57
+ // network ~10 bits of mantissa per channel, which is plenty for
58
+ // normalized [0, 1] inputs after the network's first BN/scale.
59
+ .addStorageTexture("tTensor", "rgba16float", "3d", "write-only")
60
+ // Nearest-depth offset packed as (dx+1, dy+1) / 2 -> [0, 1]. Postprocess
61
+ // uses this to fetch the velocity at the dilated coordinate when warping
62
+ // the history at output-resolution.
63
+ .addStorageTexture("tNearestOffset", "rg8unorm", "2d", "write-only")
64
+ ;
65
+
66
+
67
+ const body = CodeChunk.from(
68
+ //language=WGSL
69
+ `
70
+ const NSS_EXPOSURE: f32 = 7.38905609893; // e^2 — matches ARM's NSSCommon.ush
71
+
72
+ // Karis tonemap (max-of-channels), applied to EXPOSURE-scaled colour.
73
+ // ARM's training distribution: Tonemap(EXPOSURE * raw) -> network input.
74
+ fn nss_tonemap_exposure(rgb: vec3<f32>) -> vec3<f32> {
75
+ let scaled = rgb * NSS_EXPOSURE;
76
+ let m = max(max(scaled.r, scaled.g), scaled.b);
77
+ return scaled / (1.0 + m);
78
+ }
79
+
80
+ // ARM's network was trained against inputs that go through their Quantize
81
+ // formula: int8 = round(fp * 255 - 128). The conv then sees (uint8 - 128)
82
+ // = signed int8 in [-128, 127] - i.e. fp 0 -> -128, fp 0.5 -> 0, fp 1 -> 127.
83
+ // Our pipeline naively feeds fp [0, 1] which has DC offset +0.5 vs ARM's
84
+ // expected DC of 0. The trained head biases were calibrated against that
85
+ // near-zero DC, so feeding +0.5 puts every conv accumulator off by
86
+ // (sum_of_weights * 0.5 * 255) - way outside the trained operating range.
87
+ //
88
+ // We use the SMOOTH (no-round) version of ARM's transform: a linear
89
+ // remap [0, 1] -> approx [-1.008, 1.008] clamped to [-1, 1]. Matches
90
+ // ARM's DC shift but without the round() discontinuities that caused
91
+ // feature-dependent flickering when small jitter-driven input changes
92
+ // pushed pixels across quantization boundaries. Network sensitivity to
93
+ // near-boundary inputs would otherwise flip int8 outputs by 1/127 per
94
+ // frame and propagate through every layer.
95
+ //
96
+ // Per-multiply lands at ~(ARM signed * int8_w) / 127^2, so our acc is
97
+ // approx (ARM int32_acc / 127^2). Our rescale_factor (= 127 * mult /
98
+ // 2^shift) then produces value_fp ~ int8_in / 127 going into the LUT -
99
+ // the shape ARM's network was trained to produce.
100
+ fn nss_arm_quantize(fp: f32) -> f32 {
101
+ return clamp(fp * (255.0 / 127.0) - (128.0 / 127.0), -1.0, 1.0);
102
+ }
103
+
104
+ fn nss_arm_quantize_v3(rgb: vec3<f32>) -> vec3<f32> {
105
+ return vec3<f32>(nss_arm_quantize(rgb.r), nss_arm_quantize(rgb.g), nss_arm_quantize(rgb.b));
106
+ }
107
+
108
+ fn nss_arm_quantize_v4(v: vec4<f32>) -> vec4<f32> {
109
+ return vec4<f32>(nss_arm_quantize(v.x), nss_arm_quantize(v.y), nss_arm_quantize(v.z), nss_arm_quantize(v.w));
110
+ }
111
+
112
+ fn nss_warp_history_sample(prev_uv: vec2<f32>) -> vec3<f32> {
113
+ let on_screen = all(prev_uv >= vec2<f32>(0.0)) && all(prev_uv <= vec2<f32>(1.0));
114
+ if (!on_screen) {
115
+ return vec3<f32>(0.0);
116
+ }
117
+ // ARM uses bilinear (LoadHistory in ffx_nss_callbacks_glsl.h:471);
118
+ // Catmull-Rom is opt-in via HISTORY_CATMULL define.
119
+ return max(vec3<f32>(0.0), textureSampleLevel(tHistory, sLinear, prev_uv, 0.0).rgb);
120
+ }
121
+
122
+ fn nss_warp_feedback_sample(prev_uv_render: vec2<f32>) -> vec4<f32> {
123
+ let on_screen = all(prev_uv_render >= vec2<f32>(0.0)) && all(prev_uv_render <= vec2<f32>(1.0));
124
+ if (!on_screen) {
125
+ return vec4<f32>(0.0);
126
+ }
127
+ return textureSampleLevel(tFeedbackIn, sLinear, prev_uv_render, 0.0);
128
+ }
129
+
130
+ @compute @workgroup_size(${NSS_WORKGROUP_SIZE}, ${NSS_WORKGROUP_SIZE}, 1)
131
+ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
132
+ let render_res_u = settings.render_resolution;
133
+ let render_res = vec2<i32>(render_res_u);
134
+
135
+ if (any(gid.xy >= render_res_u)) {
136
+ return;
137
+ }
138
+
139
+ let st = vec2<i32>(gid.xy);
140
+
141
+ // 1. Depth dilation
142
+ var nearest_off = vec2<i32>(0, 0);
143
+ let _dilated_depth = nss_find_nearest_depth(tDepthCurrent, st, render_res, &nearest_off);
144
+
145
+ // 2. Velocity at the depth-nearest tap (FSR2 strategy — sharpens
146
+ // silhouettes at disocclusion vs picking velocity at the centre).
147
+ let velocity = textureLoad(tVelocity, st + nearest_off, 0).rg;
148
+
149
+ // 3. Reproject to previous frame
150
+ let st_centre = vec2<f32>(st) + 0.5;
151
+ let prev_st_render = st_centre - velocity;
152
+ let prev_uv_render = prev_st_render / vec2<f32>(render_res);
153
+
154
+ // History lives at output resolution but the UV is the same in [0, 1].
155
+ let history_rgb = nss_warp_history_sample(prev_uv_render);
156
+
157
+ // 4. Disocclusion mask. The shared depth-clip pass returns FSR2
158
+ // confidence (1 = trust history, 0 = disocclusion); ARM's network
159
+ // input expects the inverse (high = disocclusion). Multiply by
160
+ // history_validity so a hard reset zeros the mask too.
161
+ let confidence = textureLoad(tDisocclusionConfidence, st, 0).r;
162
+ let disocclusion_mask = (1.0 - saturate(confidence)) * saturate(settings.history_validity);
163
+
164
+ // 5. Warped feedback. Multiplied by history_validity so the very first
165
+ // frame (or any reset) feeds neutral (0.5 raw -> 0 post-quant)
166
+ // feedback to the network instead of garbage from an uninitialised
167
+ // texture.
168
+ //
169
+ // feedback_scale (debug knob, default 1.0) blends between actual FB
170
+ // and the neutral value 0.5. At 0 the network sees raw 0.5 across
171
+ // all FB channels, which post-quantize is ≈0 — the trained
172
+ // "no signal" point, NOT a strong negative signal.
173
+ let feedback_actual = nss_warp_feedback_sample(prev_uv_render);
174
+ let feedback_neutral = vec4<f32>(0.5);
175
+ let feedback = mix(
176
+ feedback_neutral,
177
+ feedback_actual,
178
+ saturate(settings.history_validity) * saturate(settings.feedback_scale),
179
+ );
180
+
181
+ // 6. Current colour (load, no filtering — already at render-res)
182
+ let current_rgb = max(vec3<f32>(0.0), textureLoad(tColour, st, 0).rgb);
183
+
184
+ // 7. Luma derivative — uses raw colours; the chunk handles its own scaling.
185
+ let luma_deriv = nss_luma_derivative(current_rgb, history_rgb);
186
+
187
+ // Tonemap with EXPOSURE applied first — matches ARM's
188
+ // Tonemap(EXPOSURE * raw) training distribution. Raw [0, 1] tonemap
189
+ // (without exposure) lands values 2-5x below the network's trained
190
+ // operating point.
191
+ let history_t = nss_tonemap_exposure(history_rgb);
192
+ let current_t = nss_tonemap_exposure(current_rgb);
193
+
194
+ // Apply ARM's Quantize transformation in fp — converts our [0, 1] inputs
195
+ // into the [-1, 1] signed-int8 / 127 distribution the trained network
196
+ // expects (DC at 0, not +0.5). See nss_arm_quantize header for derivation.
197
+ // settings.quantize_inputs (default 1.0) blends between this transform
198
+ // and the raw [0, 1] tonemap (0.0). Useful as an A/B test knob.
199
+ let q = saturate(settings.quantize_inputs);
200
+ let history_q = mix(history_t, nss_arm_quantize_v3(history_t), q);
201
+ let current_q = mix(current_t, nss_arm_quantize_v3(current_t), q);
202
+ let disocclusion_q = mix(disocclusion_mask, nss_arm_quantize(disocclusion_mask), q);
203
+ let feedback_q = mix(feedback, nss_arm_quantize_v4(feedback), q);
204
+ let luma_deriv_q = mix(luma_deriv, nss_arm_quantize(luma_deriv), q);
205
+
206
+ // ── Pack into 12-channel tensor ──
207
+ // Layout (4ch × depth=3):
208
+ // z=0 : history.rgb, current.r
209
+ // z=1 : current.gb, disocclusion_mask, feedback.r
210
+ // z=2 : feedback.gba, luma_derivative
211
+ textureStore(tTensor, vec3<i32>(st, 0), vec4<f32>(history_q, current_q.r));
212
+ textureStore(tTensor, vec3<i32>(st, 1), vec4<f32>(current_q.g, current_q.b, disocclusion_q, feedback_q.r));
213
+ textureStore(tTensor, vec3<i32>(st, 2), vec4<f32>(feedback_q.gba, luma_deriv_q));
214
+
215
+ // Pack nearest offset for postprocess: (-1, 0, 1) in each axis -> [0, 1]
216
+ let nearest_packed = (vec2<f32>(nearest_off) + 1.0) * 0.5;
217
+ textureStore(tNearestOffset, st, vec4<f32>(nearest_packed, 0.0, 0.0));
218
+ }
219
+ `, [
220
+ chunk_nss_find_nearest_depth,
221
+ chunk_nss_luma_derivative,
222
+ NSS_SETTINGS_STRUCT.declaration_chunk,
223
+ ]
224
+ );
225
+
226
+ export const shader_nss_preprocess = ComputeShader.from({
227
+ label: "NSS / preprocess",
228
+ body,
229
+ resources,
230
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"depth_max_shader.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/ssr/depth_max_shader.js"],"names":[],"mappings":"AAuDA,2CAWG;4BAjEyB,6BAA6B"}
1
+ {"version":3,"file":"depth_max_shader.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/ssr/depth_max_shader.js"],"names":[],"mappings":"AAyDA,2CAWG;4BAnEyB,6BAA6B"}
@@ -1,68 +1,70 @@
1
- import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
2
- import { ImageShader } from "../../shader/ImageShader.js";
3
- import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
4
- import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
5
-
6
- const resources = new ShaderResourceSetDescriptor();
7
-
8
- resources.createGroup()
9
- .addUniform("output_resolution", "vec2<u32>")
10
- .addTexture("tInput");
11
-
12
- const body = CodeChunk.from(
13
- //language=WGSL
14
- `
15
- @fragment
16
- fn main(
17
- @builtin(position) coord : vec4<f32>,
18
- @location(0) uv: vec2<f32>,
19
- ) -> @location(0) f32 {
20
-
21
-
22
- let target_coord_i = vec2<u32>(coord.xy);
23
-
24
- let source_resolution = textureDimensions(tInput);
25
-
26
- let scale = vec2f(source_resolution) / vec2f(output_resolution);
27
-
28
- let scale_i = vec2u(ceil(scale));
29
-
30
- let source_coord_i = target_coord_i * 2;
31
-
32
- // compute bounds in source texture
33
- let source_bounds_max = min(
34
- source_coord_i + scale_i,
35
- source_resolution - 1
36
- );
37
-
38
- let source_bounds_min = source_coord_i;
39
-
40
- var max_value = 0.0;
41
-
42
- for(var y = source_bounds_min.y ; y <= source_bounds_max.y ; y++){
43
- for(var x = source_bounds_min.x ; x<= source_bounds_max.x ; x++){
44
-
45
- let depth = textureLoad(tInput, vec2u(x,y), 0).r;
46
-
47
- max_value = max(depth, max_value);
48
- }
49
- }
50
-
51
- return max_value;
52
- }
53
- `
54
- )
55
-
56
- export const depth_max_shader = new ImageShader({
57
- descriptor: ShaderDescriptor.from({
58
- label: "Depth Reduce / max",
59
- body,
60
- resources,
61
- }),
62
- targets: [
63
- {
64
- format: "r32float"
65
- }
66
- ]
67
- });
68
-
1
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
2
+ import { ImageShader } from "../../shader/ImageShader.js";
3
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
4
+ import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
5
+
6
+ const resources = new ShaderResourceSetDescriptor();
7
+
8
+ // per-pass, eight bytes, read-only: immediate data rather than a uniform buffer
9
+ resources.setImmediate("output_resolution", "vec2<u32>");
10
+
11
+ resources.createGroup()
12
+ .addTexture("tInput");
13
+
14
+ const body = CodeChunk.from(
15
+ //language=WGSL
16
+ `
17
+ @fragment
18
+ fn main(
19
+ @builtin(position) coord : vec4<f32>,
20
+ @location(0) uv: vec2<f32>,
21
+ ) -> @location(0) f32 {
22
+
23
+
24
+ let target_coord_i = vec2<u32>(coord.xy);
25
+
26
+ let source_resolution = textureDimensions(tInput);
27
+
28
+ let scale = vec2f(source_resolution) / vec2f(output_resolution);
29
+
30
+ let scale_i = vec2u(ceil(scale));
31
+
32
+ let source_coord_i = target_coord_i * 2;
33
+
34
+ // compute bounds in source texture
35
+ let source_bounds_max = min(
36
+ source_coord_i + scale_i,
37
+ source_resolution - 1
38
+ );
39
+
40
+ let source_bounds_min = source_coord_i;
41
+
42
+ var max_value = 0.0;
43
+
44
+ for(var y = source_bounds_min.y ; y <= source_bounds_max.y ; y++){
45
+ for(var x = source_bounds_min.x ; x<= source_bounds_max.x ; x++){
46
+
47
+ let depth = textureLoad(tInput, vec2u(x,y), 0).r;
48
+
49
+ max_value = max(depth, max_value);
50
+ }
51
+ }
52
+
53
+ return max_value;
54
+ }
55
+ `
56
+ )
57
+
58
+ export const depth_max_shader = new ImageShader({
59
+ descriptor: ShaderDescriptor.from({
60
+ label: "Depth Reduce / max",
61
+ body,
62
+ resources,
63
+ }),
64
+ targets: [
65
+ {
66
+ format: "r32float"
67
+ }
68
+ ]
69
+ });
70
+
@@ -1,3 +1,17 @@
1
- export const shader_ffx_denoiser_reflections_reproject: ComputeShader;
2
- import { ComputeShader } from "../../../shader/ComputeShader.js";
1
+ /**
2
+ * An unfinished translation of the FidelityFX reflection denoiser's reprojection pass.
3
+ *
4
+ * Not yet a shader, and not yet valid WGSL: the body still carries HLSL spellings the port has not
5
+ * reached (`FfxFloat16x4`, `FfxInt32x2`, `FFX_GROUP_MEMORY_BARRIER`), and `main` is an empty stub
6
+ * with no `@compute` and no `@workgroup_size`. It was a `ComputeShader` here until the workgroup
7
+ * size started being read out of the WGSL, which is a question this source cannot answer; it stays
8
+ * a chunk until someone finishes the port and writes the entry point.
9
+ *
10
+ * The bindings it will want are one texture, `tRadiance`.
11
+ *
12
+ * @see https://github.com/GPUOpen-LibrariesAndSDKs/FidelityFX-SDK/blob/1bbe66e7ea0d358e84af4471a90aa9c35b583de0/sdk/include/FidelityFX/gpu/denoiser/ffx_denoiser_reflections_reproject.h
13
+ * @type {CodeChunk}
14
+ */
15
+ export const chunk_ffx_denoiser_reflections_reproject: CodeChunk;
16
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
3
17
  //# sourceMappingURL=shader_ffx_denoiser_reflections_reproject.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shader_ffx_denoiser_reflections_reproject.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js"],"names":[],"mappings":"AAqcA,sEAGG;8BApc2B,kCAAkC"}
1
+ {"version":3,"file":"shader_ffx_denoiser_reflections_reproject.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;GAaG;AACH,uDAFU,SAAS,CAubjB;0BArcwB,uCAAuC"}