@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,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,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"}
@@ -2,18 +2,22 @@ import { chunk_unpack_float16_4 } from "../../../shader/chunk/binary/chunk_unpac
2
2
  import { chunk_rgb_to_luminance } from "../../../shader/chunk/color/chunk_rgb_to_luminance.js";
3
3
  import { chunk_dot2 } from "../../../shader/chunk/math/chunk_dot2.js";
4
4
  import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
5
- import { ComputeShader } from "../../../shader/ComputeShader.js";
6
- import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
7
-
8
- const resources = new ShaderResourceSetDescriptor();
9
- resources.createGroup()
10
- .addTexture("tRadiance");
11
5
 
12
6
  /**
7
+ * An unfinished translation of the FidelityFX reflection denoiser's reprojection pass.
8
+ *
9
+ * Not yet a shader, and not yet valid WGSL: the body still carries HLSL spellings the port has not
10
+ * reached (`FfxFloat16x4`, `FfxInt32x2`, `FFX_GROUP_MEMORY_BARRIER`), and `main` is an empty stub
11
+ * with no `@compute` and no `@workgroup_size`. It was a `ComputeShader` here until the workgroup
12
+ * size started being read out of the WGSL, which is a question this source cannot answer; it stays
13
+ * a chunk until someone finishes the port and writes the entry point.
14
+ *
15
+ * The bindings it will want are one texture, `tRadiance`.
16
+ *
13
17
  * @see https://github.com/GPUOpen-LibrariesAndSDKs/FidelityFX-SDK/blob/1bbe66e7ea0d358e84af4471a90aa9c35b583de0/sdk/include/FidelityFX/gpu/denoiser/ffx_denoiser_reflections_reproject.h
14
18
  * @type {CodeChunk}
15
19
  */
16
- const body = CodeChunk.from(
20
+ export const chunk_ffx_denoiser_reflections_reproject = CodeChunk.from(
17
21
  //language=WGSL
18
22
  `
19
23
 
@@ -450,8 +454,4 @@ fn main(){
450
454
  chunk_rgb_to_luminance,
451
455
  chunk_dot2,
452
456
  ]
453
- );
454
- export const shader_ffx_denoiser_reflections_reproject = ComputeShader.from({
455
- label: "ffx_denoiser_reflections_reproject",
456
- body
457
- });
457
+ );
@@ -1 +1 @@
1
- {"version":3,"file":"prepare_meshlet_draw_commands_by_material.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;GAYG;AACH;;;EAiTC"}
1
+ {"version":3,"file":"prepare_meshlet_draw_commands_by_material.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;GAYG;AACH;;;EA6SC"}