@woosh/meep-engine 3.17.2 → 3.18.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 (263) hide show
  1. package/editor/actions/concrete/ComponentAddAction.d.ts +1 -0
  2. package/editor/actions/concrete/ComponentAddAction.d.ts.map +1 -1
  3. package/editor/actions/concrete/ComponentAddAction.js +4 -0
  4. package/editor/actions/concrete/ComponentRemoveAction.d.ts +1 -0
  5. package/editor/actions/concrete/ComponentRemoveAction.d.ts.map +1 -1
  6. package/editor/actions/concrete/ComponentRemoveAction.js +4 -0
  7. package/editor/actions/concrete/EntityCreateAction.d.ts +1 -0
  8. package/editor/actions/concrete/EntityCreateAction.d.ts.map +1 -1
  9. package/editor/actions/concrete/EntityCreateAction.js +7 -0
  10. package/editor/actions/concrete/EntityRemoveAction.d.ts +1 -0
  11. package/editor/actions/concrete/EntityRemoveAction.d.ts.map +1 -1
  12. package/editor/actions/concrete/EntityRemoveAction.js +4 -0
  13. package/editor/actions/concrete/PatchTerrainHeightAction.d.ts +10 -0
  14. package/editor/actions/concrete/PatchTerrainHeightAction.d.ts.map +1 -1
  15. package/editor/actions/concrete/PatchTerrainHeightAction.js +107 -85
  16. package/editor/actions/concrete/TransformModifyAction.d.ts +1 -0
  17. package/editor/actions/concrete/TransformModifyAction.d.ts.map +1 -1
  18. package/editor/actions/concrete/TransformModifyAction.js +4 -0
  19. package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
  20. package/editor/particles/effect/ParticleEffectDocument.js +10 -6
  21. package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
  22. package/editor/particles/effect/ParticleReferenceSimulation.js +98 -4
  23. package/editor/particles/effect/make_starter_particle_effect.d.ts.map +1 -1
  24. package/editor/particles/effect/make_starter_particle_effect.js +0 -2
  25. package/editor/tools/engine/ToolEngine.d.ts +30 -0
  26. package/editor/tools/engine/ToolEngine.d.ts.map +1 -1
  27. package/editor/tools/engine/ToolEngine.js +257 -188
  28. package/editor/view/ecs/EntityList.d.ts.map +1 -1
  29. package/editor/view/ecs/EntityList.js +6 -5
  30. package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
  31. package/editor/view/particles/effect/ParticleEmitterInspectorView.js +17 -9
  32. package/package.json +1 -1
  33. package/src/CODEC_LAYOUT_VERIFICATION.md +1 -2
  34. package/src/core/binary/meshopt/MESHOPT_VERTEX_BLOCK.d.ts +56 -0
  35. package/src/core/binary/meshopt/MESHOPT_VERTEX_BLOCK.d.ts.map +1 -0
  36. package/src/core/binary/meshopt/MESHOPT_VERTEX_BLOCK.js +73 -0
  37. package/src/core/binary/meshopt/meshopt_decode_vertex_buffer.d.ts.map +1 -1
  38. package/src/core/binary/meshopt/meshopt_decode_vertex_buffer.js +18 -63
  39. package/src/core/binary/meshopt/meshopt_encode_byte_group.d.ts +53 -0
  40. package/src/core/binary/meshopt/meshopt_encode_byte_group.d.ts.map +1 -0
  41. package/src/core/binary/meshopt/meshopt_encode_byte_group.js +140 -0
  42. package/src/core/binary/meshopt/meshopt_encode_data_block.d.ts +32 -0
  43. package/src/core/binary/meshopt/meshopt_encode_data_block.d.ts.map +1 -0
  44. package/src/core/binary/meshopt/meshopt_encode_data_block.js +77 -0
  45. package/src/core/binary/meshopt/meshopt_encode_index_sequence.d.ts +46 -0
  46. package/src/core/binary/meshopt/meshopt_encode_index_sequence.d.ts.map +1 -0
  47. package/src/core/binary/meshopt/meshopt_encode_index_sequence.js +146 -0
  48. package/src/core/binary/meshopt/meshopt_encode_vertex_buffer.d.ts +40 -0
  49. package/src/core/binary/meshopt/meshopt_encode_vertex_buffer.d.ts.map +1 -0
  50. package/src/core/binary/meshopt/meshopt_encode_vertex_buffer.js +700 -0
  51. package/src/core/binary/meshopt/meshopt_write_uint_var.d.ts +24 -0
  52. package/src/core/binary/meshopt/meshopt_write_uint_var.d.ts.map +1 -0
  53. package/src/core/binary/meshopt/meshopt_write_uint_var.js +39 -0
  54. package/src/core/math/random/seededRandom_Mulberry32.d.ts.map +1 -1
  55. package/src/core/math/random/seededRandom_Mulberry32.js +4 -2
  56. package/src/core/process/undo/Action.d.ts +19 -0
  57. package/src/core/process/undo/Action.d.ts.map +1 -1
  58. package/src/core/process/undo/Action.js +17 -0
  59. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +78 -0
  60. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -0
  61. package/src/engine/graphics3/GPUParticleEmitterSystem.js +310 -0
  62. package/src/engine/graphics3/GraphicsEngine.d.ts +17 -0
  63. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
  64. package/src/engine/graphics3/GraphicsEngine.js +30 -10
  65. package/src/engine/graphics3/particles/particle_gpu_records.d.ts.map +1 -1
  66. package/src/engine/graphics3/particles/particle_gpu_records.js +0 -2
  67. package/src/engine/interpolation/InterpolationSystem.d.ts +7 -0
  68. package/src/engine/interpolation/InterpolationSystem.d.ts.map +1 -1
  69. package/src/engine/interpolation/InterpolationSystem.js +10 -0
  70. package/src/engine/network/NetworkSession.d.ts.map +1 -1
  71. package/src/engine/network/NetworkSession.js +14 -34
  72. package/src/engine/network/time/RenderPlayout.d.ts +76 -0
  73. package/src/engine/network/time/RenderPlayout.d.ts.map +1 -0
  74. package/src/engine/network/time/RenderPlayout.js +163 -0
  75. package/src/engine/network/transport/adapters/WebSocketTransport.d.ts.map +1 -1
  76. package/src/engine/network/transport/adapters/WebSocketTransport.js +11 -4
  77. package/src/engine/physics/ecs/PhysicsSystem.d.ts +4 -12
  78. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  79. package/src/engine/physics/ecs/PhysicsSystem.js +39 -13
  80. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  81. package/src/engine/sound/simulation/core/VolumeField.d.ts.map +1 -1
  82. package/src/engine/sound/simulation/core/VolumeField.js +4 -1
  83. package/src/format/scene/gltf/MESHOPT_COMPRESSION_PLAN.md +23 -2
  84. package/src/shade/playground/particle_system/README.md +139 -139
  85. package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
  86. package/src/shade/playground/particle_system/particle_prototype.js +0 -2
  87. package/src/shade/playground/particle_system/particle_scene.d.ts +6 -9
  88. package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
  89. package/src/shade/playground/particle_system/particle_scene.js +6 -13
  90. package/src/shade/playground/ssr_reprojection/README.md +103 -0
  91. package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.d.ts +17 -0
  92. package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.d.ts.map +1 -0
  93. package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.js +68 -0
  94. package/src/shade/playground/ssr_reprojection/index.html +79 -0
  95. package/src/shade/playground/ssr_reprojection/main.d.ts +2 -0
  96. package/src/shade/playground/ssr_reprojection/main.d.ts.map +1 -0
  97. package/src/shade/playground/ssr_reprojection/main.js +245 -0
  98. package/src/shade/playground/ssr_reprojection/scene.d.ts +18 -0
  99. package/src/shade/playground/ssr_reprojection/scene.d.ts.map +1 -0
  100. package/src/shade/playground/ssr_reprojection/scene.js +51 -0
  101. package/src/shade/renderer/Renderer.d.ts +2 -23
  102. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  103. package/src/shade/renderer/Renderer.js +185 -218
  104. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +5 -8
  105. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  106. package/src/shade/renderer/animation/GPUAnimationManager.js +12 -12
  107. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
  108. package/src/shade/renderer/buffer/table/GPUTypedTable.js +6 -0
  109. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  110. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +7 -0
  111. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_specular.d.ts +4 -0
  112. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_specular.d.ts.map +1 -0
  113. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_specular.js +51 -0
  114. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.d.ts.map +1 -1
  115. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.js +5 -35
  116. package/src/shade/renderer/particles/DESIGN.md +703 -514
  117. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +16 -4
  118. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  119. package/src/shade/renderer/particles/GPUParticleSystem.js +1189 -991
  120. package/src/shade/renderer/particles/ParticleConstants.d.ts +64 -0
  121. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  122. package/src/shade/renderer/particles/ParticleConstants.js +71 -0
  123. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts +57 -0
  124. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts.map +1 -0
  125. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +181 -0
  126. package/src/shade/renderer/particles/bounds/chunk_particle_bounds_unknown.d.ts +7 -0
  127. package/src/shade/renderer/particles/bounds/chunk_particle_bounds_unknown.d.ts.map +1 -0
  128. package/src/shade/renderer/particles/bounds/chunk_particle_bounds_unknown.js +12 -0
  129. package/src/shade/renderer/particles/bounds/graph_particle_bounds.d.ts +33 -0
  130. package/src/shade/renderer/particles/bounds/graph_particle_bounds.d.ts.map +1 -0
  131. package/src/shade/renderer/particles/bounds/graph_particle_bounds.js +67 -0
  132. package/src/shade/renderer/particles/bounds/shader_particle_bounds.d.ts +40 -0
  133. package/src/shade/renderer/particles/bounds/shader_particle_bounds.d.ts.map +1 -0
  134. package/src/shade/renderer/particles/bounds/shader_particle_bounds.js +187 -0
  135. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +15 -2
  136. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
  137. package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +14 -8
  138. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts +58 -4
  139. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts.map +1 -1
  140. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.js +79 -4
  141. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts +23 -1
  142. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts.map +1 -1
  143. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.js +35 -2
  144. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +4 -2
  145. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
  146. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +5 -8
  147. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -1
  148. package/src/shade/renderer/particles/data/particle_emitter_record.js +0 -6
  149. package/src/shade/renderer/particles/graph_particles.d.ts +25 -3
  150. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  151. package/src/shade/renderer/particles/graph_particles.js +108 -31
  152. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +6 -4
  153. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  154. package/src/shade/renderer/particles/graph_particles_avboit.js +5 -5
  155. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +5 -0
  156. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  157. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +27 -6
  158. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +4 -0
  159. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
  160. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +6 -1
  161. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +35 -27
  162. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  163. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +424 -425
  164. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_warmup.d.ts +20 -0
  165. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_warmup.d.ts.map +1 -0
  166. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts +4 -0
  167. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts.map +1 -1
  168. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +38 -2
  169. package/src/shade/renderer/particles/shaders/chunk_particle_spawn_budget.d.ts +22 -0
  170. package/src/shade/renderer/particles/shaders/chunk_particle_spawn_budget.d.ts.map +1 -0
  171. package/src/shade/renderer/particles/shaders/chunk_particle_spawn_budget.js +42 -0
  172. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +1 -1
  173. package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts.map +1 -1
  174. package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.js +53 -22
  175. package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.d.ts.map +1 -1
  176. package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.js +213 -216
  177. package/src/shade/renderer/particles/shaders/shader_particle_reclaim.d.ts +50 -0
  178. package/src/shade/renderer/particles/shaders/shader_particle_reclaim.d.ts.map +1 -0
  179. package/src/shade/renderer/particles/shaders/shader_particle_render.js +1 -1
  180. package/src/shade/renderer/particles/warmup/chunk_particle_warmup_step.d.ts +36 -0
  181. package/src/shade/renderer/particles/warmup/chunk_particle_warmup_step.d.ts.map +1 -0
  182. package/src/shade/renderer/particles/warmup/chunk_particle_warmup_step.js +102 -0
  183. package/src/shade/renderer/particles/warmup/graph_particle_warmup.d.ts +102 -0
  184. package/src/shade/renderer/particles/warmup/graph_particle_warmup.d.ts.map +1 -0
  185. package/src/shade/renderer/particles/warmup/graph_particle_warmup.js +329 -0
  186. package/src/shade/renderer/particles/warmup/shader_particle_warmup.d.ts +112 -0
  187. package/src/shade/renderer/particles/warmup/shader_particle_warmup.d.ts.map +1 -0
  188. package/src/shade/renderer/particles/warmup/shader_particle_warmup.js +318 -0
  189. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.d.ts +35 -0
  190. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.d.ts.map +1 -0
  191. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.js +108 -0
  192. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.d.ts +3 -0
  193. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.d.ts.map +1 -0
  194. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.js +70 -0
  195. package/src/shade/renderer/particles/warmup/warmup_schedule.d.ts +62 -0
  196. package/src/shade/renderer/particles/warmup/warmup_schedule.d.ts.map +1 -0
  197. package/src/shade/renderer/particles/warmup/warmup_schedule.js +55 -0
  198. package/src/shade/renderer/postprocess/PostProcess.d.ts.map +1 -1
  199. package/src/shade/renderer/postprocess/PostProcess.js +2 -1
  200. package/src/shade/renderer/postprocess/ssr/REPROJECTION_PROPOSAL.md +286 -0
  201. package/src/shade/renderer/postprocess/ssr/SSR.d.ts +57 -21
  202. package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
  203. package/src/shade/renderer/postprocess/ssr/SSR.js +230 -129
  204. package/src/shade/renderer/postprocess/ssr/SSRReprojectionMode.d.ts +11 -0
  205. package/src/shade/renderer/postprocess/ssr/SSRReprojectionMode.d.ts.map +1 -0
  206. package/src/shade/renderer/postprocess/ssr/SSRReprojectionMode.js +6 -0
  207. package/src/shade/renderer/postprocess/ssr/chunk_ssr_metadata.d.ts +4 -0
  208. package/src/shade/renderer/postprocess/ssr/chunk_ssr_metadata.d.ts.map +1 -0
  209. package/src/shade/renderer/postprocess/ssr/chunk_ssr_metadata.js +32 -0
  210. package/src/shade/renderer/postprocess/ssr/chunk_ssr_spatial_variance.d.ts +4 -0
  211. package/src/shade/renderer/postprocess/ssr/chunk_ssr_spatial_variance.d.ts.map +1 -0
  212. package/src/shade/renderer/postprocess/ssr/chunk_ssr_spatial_variance.js +41 -0
  213. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.d.ts +3 -0
  214. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.d.ts.map +1 -0
  215. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.js +30 -0
  216. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.d.ts +4 -0
  217. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.d.ts.map +1 -0
  218. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.js +70 -0
  219. package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.d.ts +21 -0
  220. package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.d.ts.map +1 -0
  221. package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.js +363 -0
  222. package/src/shade/renderer/postprocess/ssr/resolve/chunk_get_neighbour_weight.js +1 -1
  223. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_Brick4.d.ts +2 -0
  224. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_Brick4.d.ts.map +1 -0
  225. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_Brick4.js +24 -0
  226. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts +1 -6
  227. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
  228. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +16 -332
  229. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts +1 -6
  230. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
  231. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +25 -358
  232. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts +0 -5
  233. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts.map +1 -1
  234. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +201 -276
  235. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts +1 -0
  236. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  237. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +167 -143
  238. package/src/shade/renderer/shader/graph/graph_create_buffer.d.ts +15 -0
  239. package/src/shade/renderer/shader/graph/graph_create_buffer.d.ts.map +1 -0
  240. package/src/shade/renderer/shader/graph/graph_create_buffer.js +20 -0
  241. package/src/shade/renderer/view/GPUViewContext.d.ts +3 -4
  242. package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
  243. package/src/shade/renderer/view/GPUViewContext.js +5 -5
  244. package/src/core/binary/meshopt/__meshopt_test_streams.d.ts +0 -24
  245. package/src/core/binary/meshopt/__meshopt_test_streams.d.ts.map +0 -1
  246. package/src/core/binary/meshopt/__meshopt_test_streams.js +0 -237
  247. package/src/core/geom/3d/atlas/atlas_test_fixtures.d.ts +0 -84
  248. package/src/core/geom/3d/atlas/atlas_test_fixtures.d.ts.map +0 -1
  249. package/src/core/geom/3d/atlas/atlas_test_fixtures.js +0 -266
  250. package/src/engine/asset/loaders/gltf_test_fixtures.d.ts +0 -97
  251. package/src/engine/asset/loaders/gltf_test_fixtures.d.ts.map +0 -1
  252. package/src/engine/asset/loaders/gltf_test_fixtures.js +0 -359
  253. package/src/shade/renderer/animation/skin_test_fixtures.d.ts +0 -86
  254. package/src/shade/renderer/animation/skin_test_fixtures.d.ts.map +0 -1
  255. package/src/shade/renderer/animation/skin_test_fixtures.js +0 -250
  256. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_test_fixtures.d.ts +0 -16
  257. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_test_fixtures.d.ts.map +0 -1
  258. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_test_fixtures.js +0 -27
  259. package/src/shade/renderer/particles/particle_test_fixtures.d.ts +0 -151
  260. package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +0 -1
  261. package/src/shade/renderer/particles/particle_test_fixtures.js +0 -229
  262. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.js +0 -23
  263. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +0 -457
@@ -1,3 +1,6 @@
1
+ import { ShadeIndirectLightingMode } from "../../ShadeIndirectLightingMode.js";
2
+ import { ssr_resolve_shader_Brick4 } from "./resolve/ssr_resolve_shader_Brick4.js";
3
+ import { SSRReprojectionMode } from "./SSRReprojectionMode.js";
1
4
  import { assert } from "../../../../core/assert.js";
2
5
  import { TextureResourceDescriptor } from "../../../device/graph/TextureResourceDescriptor.js";
3
6
  import { graph_image_pass } from "../../shader/graph/graph_image_pass.js";
@@ -9,7 +12,7 @@ import { ssr_combine_shader } from "./ssr_combine_shader.js";
9
12
  import { ssr_graph_prefilter_color } from "./ssr_graph_prefilter_color.js";
10
13
  import { SSR_PREFILTER_MIP_COUNT } from "./SSR_PREFILTER_MIP_COUNT.js";
11
14
  import { ssr_reproject_shader } from "./ssr_reproject_shader.js";
12
- import { ssr_spatial_denoise_shader } from "./ssr_spatial_denoise_shader.js";
15
+ import { ssr_spatial_denoise_shader, ssr_spatial_denoise_metadata_shader } from "./ssr_spatial_denoise_shader.js";
13
16
  import { ssr_trace_shader } from "./ssr_trace_shader.js";
14
17
 
15
18
  export class SSR {
@@ -19,29 +22,74 @@ export class SSR {
19
22
  * @type {GPUTextureContext[]}
20
23
  */
21
24
  #history = [];
25
+ #metadata = [];
26
+ #geometry = [];
27
+ #read_index = 0;
28
+ #last_frame = -1;
29
+ #last_view;
30
+ #last_indirect_lighting_mode;
31
+ #last_jitter = [0, 0];
32
+ #valid = false;
33
+ #generation = 0;
34
+ #reset_history = true;
22
35
 
23
36
  frame_index = 0;
37
+ #reprojection_mode = SSRReprojectionMode.Parallax;
38
+ #spatial_denoising_enabled = true;
39
+
40
+ /** Toggle the three spatial passes independently of temporal reprojection. @returns {boolean} */
41
+ get spatial_denoising_enabled() { return this.#spatial_denoising_enabled; }
42
+ set spatial_denoising_enabled(value) {
43
+ assert.isBoolean(value, 'spatial_denoising_enabled');
44
+ if (value !== this.#spatial_denoising_enabled) {
45
+ this.#spatial_denoising_enabled = value;
46
+ // Pre-temporal filtering changes both radiance and its distance/support metadata.
47
+ this.reset_history = true;
48
+ }
49
+ }
50
+
51
+ /** @returns {SSRReprojectionMode} */
52
+ get reprojection_mode() { return this.#reprojection_mode; }
53
+ set reprojection_mode(value) {
54
+ assert.equal(Object.values(SSRReprojectionMode).includes(value), true, 'SSR reprojection mode');
55
+ if (value !== this.#reprojection_mode) {
56
+ this.#reprojection_mode = value;
57
+ this.reset_history = true;
58
+ }
59
+ }
24
60
 
25
61
  /**
26
62
  * When set, will disregard history buffer
27
63
  * Useful for camera cuts and large scene changes such as scene load
28
64
  * @type {boolean}
29
65
  */
30
- reset_history = false;
66
+ get reset_history() { return this.#reset_history; }
67
+ set reset_history(value) {
68
+ this.#reset_history = value;
69
+ if (value) {
70
+ this.#valid = false;
71
+ this.#generation++;
72
+ }
73
+ }
31
74
 
32
75
  /**
33
76
  *
34
- * @param {GraphicsContext} graphics
77
+ * @param {import("../../GraphicsContext.js").GraphicsContext} graphics
35
78
  */
36
79
  constructor(graphics) {
37
80
 
38
- for (let i = 0; i < 2; i++) {
39
- const texture = new GPUTextureContext(graphics.device);
40
-
41
- texture.descriptor.format = "rgba16float";
42
- texture.descriptor.usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT;
43
-
44
- this.#history[i] = texture;
81
+ for (const [history, format, label] of [
82
+ [this.#history, "rgba16float", "radiance"],
83
+ [this.#metadata, "rg32float", "metadata"],
84
+ [this.#geometry, "rgba16float", "geometry"],
85
+ ]) {
86
+ for (let i = 0; i < 2; i++) {
87
+ const texture = new GPUTextureContext(graphics.device);
88
+ texture.descriptor.label = `SSR history / ${label} ${i}`;
89
+ texture.descriptor.format = format;
90
+ texture.descriptor.usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.RENDER_ATTACHMENT;
91
+ history[i] = texture;
92
+ }
45
93
  }
46
94
  }
47
95
 
@@ -52,31 +100,45 @@ export class SSR {
52
100
  */
53
101
  resize(x, y) {
54
102
 
55
- this.#history.forEach(t => t.resize(x, y));
103
+ if (this.#history[0].width !== x || this.#history[0].height !== y) {
104
+ this.reset_history = true;
105
+ for (const history of [this.#history, this.#metadata, this.#geometry]) {
106
+ history.forEach(t => t.resize(x, y));
107
+ }
108
+ }
56
109
  }
57
110
 
58
111
  /**
59
- *
60
- * @param {FrameGraph} graph
61
- * @param {number} input_depth
62
- * @param {number} input_hzb
63
- * @param {number} input_scene_color
64
- * @param {number} input_albedo
65
- * @param {number} input_pbr
66
- * @param {number} input_normal
67
- * @param {number} input_velocity
68
- * @param {number} input_occlusion
69
- * @param {number[]} resolution
70
- * @param {number} camera_current
71
- * @param {number} camera_previous
72
- * @param {GPULightProbeVolume} [lpv]
73
- * @param {GPUViewContext} view_ctx
74
- * @param {number} [mip] higher mip = lower resolution trace
75
- * @returns {{final:number, trace:number, reflections:number, denoised: number}}
112
+ * Records SSR for one view; history becomes available after successful submission.
113
+ * @param {object} options
114
+ * @param {import("../../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph} options.graph
115
+ * @param {number} options.input_depth
116
+ * @param {number} [options.input_depth_previous] Same view and frame as camera_previous
117
+ * @param {number} options.input_hzb
118
+ * @param {number} options.input_scene_color
119
+ * @param {number} options.input_albedo
120
+ * @param {number} options.input_pbr
121
+ * @param {number} options.input_normal
122
+ * @param {number} options.input_velocity
123
+ * @param {number} options.input_occlusion
124
+ * @param {number} [options.input_environment]
125
+ * @param {ArrayLike<number>} options.resolution
126
+ * @param {number} options.camera_current
127
+ * @param {number} options.camera_previous
128
+ * @param {ShadeIndirectLightingMode} [options.indirect_lighting_mode] Explicit GI fallback selection
129
+ * @param {import("../../global_illumination/brick4/Brick4LightMap.js").Brick4LightMap} [options.brick4]
130
+ * @param {import("../../global_illumination/lpv/GPULightProbeVolume.js").GPULightProbeVolume} [options.lpv]
131
+ * @param {import("../../view/GPUViewContext.js").GPUViewContext} [options.view_ctx]
132
+ * @param {ArrayLike<number>} [options.jitter] Raster jitter in internal pixels
133
+ * @param {number} [options.mip] Higher mip = lower resolution trace
134
+ * @returns {{final:number, trace:number, reflections:number, denoised:number, denoised_1:number}}
76
135
  */
77
136
  graph_pass({
78
137
  graph,
79
138
  input_depth,
139
+ input_depth_previous = -1,
140
+ view_ctx,
141
+ jitter = [0, 0],
80
142
  input_hzb,
81
143
  input_scene_color,
82
144
  input_pbr,
@@ -88,22 +150,80 @@ export class SSR {
88
150
  camera_current,
89
151
  camera_previous,
90
152
  input_environment = -1,
153
+ indirect_lighting_mode = ShadeIndirectLightingMode.IBL,
91
154
  lpv,
155
+ brick4,
92
156
  mip = 0,
93
157
  }) {
94
158
 
95
159
  assert.defined(camera_current, 'camera');
96
160
 
97
- this.resize(...resolution);
161
+ let resolve_shader;
162
+ let gi_inputs;
163
+ switch (indirect_lighting_mode) {
164
+ case ShadeIndirectLightingMode.IBL:
165
+ resolve_shader = ssr_resolve_shader_IBL;
166
+ gi_inputs = { tEnvironment: input_environment };
167
+ break;
168
+ case ShadeIndirectLightingMode.Brick4:
169
+ assert.defined(brick4, 'SSR Brick4 lightmap');
170
+ resolve_shader = ssr_resolve_shader_Brick4;
171
+ gi_inputs = { brick4: brick4.buffer, tSTBN_vec2: STATIC_GRAPHICS_ENGINE_ASSETS.stbn_vec2 };
172
+ break;
173
+ case ShadeIndirectLightingMode.LPV:
174
+ assert.defined(lpv, 'SSR LPV');
175
+ resolve_shader = ssr_resolve_shader_LPV;
176
+ gi_inputs = {
177
+ tEnvironment: input_environment,
178
+ lpv_atlas_radiance: lpv.atlas.texture_radiance,
179
+ lpv_atlas_depth: lpv.atlas.texture_depth,
180
+ lpv_lookup: lpv.buffer_mesh_bvh,
181
+ lpv_metadata: lpv.buffer_metadata,
182
+ lpv_mesh: lpv.buffer_mesh,
183
+ lpv_probes: lpv.buffer_probes,
184
+ };
185
+ break;
186
+ default:
187
+ throw new Error(`Unsupported SSR indirect lighting mode: ${indirect_lighting_mode}`);
188
+ }
189
+
190
+ this.resize(resolution[0], resolution[1]);
98
191
 
99
192
  // import history textures into the graph
100
193
  const frame_index = this.frame_index;
101
194
 
102
- const h0 = this.#history[frame_index % 2];
103
- const h1 = this.#history[(frame_index + 1) % 2];
104
-
105
- const history = graph.import_resource("ssr_history", TextureResourceDescriptor.fromTexture(h0.gpu_texture), h0);
106
- const output = graph.import_resource("ssr_output", TextureResourceDescriptor.fromTexture(h1.gpu_texture), h1);
195
+ const valid = this.#valid && !this.#reset_history && input_depth_previous >= 0
196
+ && this.#last_frame === frame_index - 1 && this.#last_view === view_ctx
197
+ && this.#last_indirect_lighting_mode === indirect_lighting_mode;
198
+ const read_index = this.#read_index;
199
+ const write_index = 1 - read_index;
200
+ const generation = ++this.#generation;
201
+ const current_jitter = Array.from(jitter);
202
+ const jitter_delta = current_jitter.map((v, i) => this.#last_jitter[i] - v);
203
+ // Recording a graph is not producing a frame. Failed/abandoned graphs cannot publish history.
204
+ this.#valid = false;
205
+ const import_texture = (textures, index, name) => {
206
+ const t = textures[index];
207
+ return graph.import_resource(name, TextureResourceDescriptor.fromTexture(t.gpu_texture), t);
208
+ };
209
+ const history = import_texture(this.#history, read_index, "ssr_history");
210
+ const history_metadata = import_texture(this.#metadata, read_index, "ssr_history_metadata");
211
+ const history_geometry = import_texture(this.#geometry, read_index, "ssr_history_geometry");
212
+ const output = import_texture(this.#history, write_index, "ssr_output");
213
+ const output_metadata = import_texture(this.#metadata, write_index, "ssr_output_metadata");
214
+ const output_geometry = import_texture(this.#geometry, write_index, "ssr_output_geometry");
215
+ graph.onExecuted.addOne(context => {
216
+ context.encoder.onFinished.addOne(() => {
217
+ if (this.#generation !== generation) { return; }
218
+ this.#read_index = write_index;
219
+ this.#last_frame = frame_index;
220
+ this.#last_view = view_ctx;
221
+ this.#last_indirect_lighting_mode = indirect_lighting_mode;
222
+ this.#last_jitter = current_jitter;
223
+ this.#reset_history = false;
224
+ this.#valid = true;
225
+ });
226
+ });
107
227
 
108
228
  // TODO trace at 1/2 resolution, resolve at full res and "steal" neighbour traces where possible
109
229
 
@@ -141,89 +261,68 @@ export class SSR {
141
261
  mip_count: SSR_PREFILTER_MIP_COUNT
142
262
  });
143
263
 
144
- let reflections;
145
-
146
- if (lpv !== undefined) {
147
- [reflections] = graph_image_pass({
148
- graph,
149
- shader: ssr_resolve_shader_LPV,
150
- output_resolution: resolution,
151
- input_depth,
152
- inputs: {
153
- settings: {
154
- frame_index
155
- },
156
- tEnvironment: input_environment,
157
- tTrace: trace,
158
- tColor: scene_color_filtered,
159
- tDepth: input_depth,
160
- tPBR: input_pbr,
161
- tAlbedoAO: input_albedo,
162
- tNormal: input_normal,
163
- camera: camera_current,
164
- lpv_atlas_radiance: lpv.atlas.texture_radiance,
165
- lpv_atlas_depth: lpv.atlas.texture_depth,
166
- //
167
- lpv_lookup: lpv.buffer_mesh_bvh,
168
- lpv_metadata: lpv.buffer_metadata,
169
- lpv_mesh: lpv.buffer_mesh,
170
- lpv_probes: lpv.buffer_probes,
171
- }
172
- });
173
- } else {
174
- [reflections] = graph_image_pass({
175
- graph,
176
- shader: ssr_resolve_shader_IBL,
177
- output_resolution: resolution,
178
- input_depth,
179
- inputs: {
180
- settings: {
181
- frame_index
182
- },
183
- tEnvironment: input_environment,
184
- tTrace: trace,
185
- tColor: scene_color_filtered,
186
- tDepth: input_depth,
187
- tPBR: input_pbr,
188
- tAlbedoAO: input_albedo,
189
- tNormal: input_normal,
190
- camera: camera_current,
191
- }
192
- });
193
- }
264
+ const [reflections, reflection_metadata] = graph_image_pass({
265
+ graph,
266
+ shader: resolve_shader,
267
+ output_resolution: resolution,
268
+ input_depth,
269
+ inputs: {
270
+ ...gi_inputs,
271
+ settings: { frame_index },
272
+ tTrace: trace,
273
+ tColor: scene_color_filtered,
274
+ tDepth: input_depth,
275
+ tPBR: input_pbr,
276
+ tAlbedoAO: input_albedo,
277
+ tNormal: input_normal,
278
+ camera: camera_current,
279
+ },
280
+ });
194
281
 
195
- // TODO handle history reset
282
+ // History validity is captured above and consumed by temporal reprojection.
196
283
 
197
284
  // denoise
198
285
 
199
286
  let denoised = reflections;
287
+ let denoised_metadata = reflection_metadata;
200
288
 
201
289
  // before doing TAA we apply spatial denoise, this improves stability at the cost of a little extra blurriness
202
290
  // based on SEED hybrid rendering paper as well as AMDs reflection denoiser
203
291
 
204
- [denoised] = graph_image_pass({
205
- graph,
206
- shader: ssr_spatial_denoise_shader,
207
- output_resolution: resolution,
208
- inputs: {
209
- tInput: denoised,
210
- tDepth: input_depth,
211
- tNormal: input_normal,
212
- settings: {
213
- // see AMD's notes on A-torus, this produces following filter sizes: 1, 2, 4
214
- step_size: 1,
292
+ if (this.#spatial_denoising_enabled) {
293
+ [denoised, denoised_metadata] = graph_image_pass({
294
+ graph,
295
+ shader: ssr_spatial_denoise_metadata_shader,
296
+ output_resolution: resolution,
297
+ inputs: {
298
+ tInput: denoised,
299
+ tMetadata: denoised_metadata,
300
+ tDepth: input_depth,
301
+ tNormal: input_normal,
302
+ settings: {
303
+ // see AMD's notes on A-torus, this produces following filter sizes: 1, 2, 4
304
+ step_size: 1,
305
+ }
215
306
  }
216
- }
217
- });
307
+ });
308
+ }
218
309
  const denoised_1 = denoised;
219
310
 
220
- [denoised] = graph_image_pass({
311
+ [denoised, denoised_metadata] = graph_image_pass({
221
312
  graph,
222
313
  shader: ssr_reproject_shader,
223
- output: [output],
314
+ output: [output, output_metadata, output_geometry],
224
315
  inputs: {
225
316
  tInput: denoised,
317
+ tMetadata: denoised_metadata,
226
318
  tHistory: history,
319
+ tHistoryMetadata: history_metadata,
320
+ tHistoryGeometry: history_geometry,
321
+ tPreviousDepth: input_depth_previous >= 0 ? input_depth_previous : input_depth,
322
+ tDepth: input_depth,
323
+ tNormal: input_normal,
324
+ tPBR: input_pbr,
325
+ settings: { history_validity: valid ? 1 : 0, reprojection_mode: this.#reprojection_mode, jitter_delta },
227
326
  tVelocity: input_velocity,
228
327
  tOcclusion: input_occlusion,
229
328
  camera_current,
@@ -231,36 +330,38 @@ export class SSR {
231
330
  }
232
331
  });
233
332
 
234
- // 2 more spatial denoise steps
235
- [denoised] = graph_image_pass({
236
- graph,
237
- shader: ssr_spatial_denoise_shader,
238
- output_resolution: resolution,
239
- inputs: {
240
- tInput: denoised,
241
- tDepth: input_depth,
242
- tNormal: input_normal,
243
- settings: {
244
- // see AMD's notes on A-torus, this produces following filter sizes: 1, 2, 4
245
- step_size: 2,
333
+ if (this.#spatial_denoising_enabled) {
334
+ // 2 more spatial denoise steps
335
+ [denoised] = graph_image_pass({
336
+ graph,
337
+ shader: ssr_spatial_denoise_shader,
338
+ output_resolution: resolution,
339
+ inputs: {
340
+ tInput: denoised,
341
+ tDepth: input_depth,
342
+ tNormal: input_normal,
343
+ settings: {
344
+ // see AMD's notes on A-torus, this produces following filter sizes: 1, 2, 4
345
+ step_size: 2,
346
+ }
246
347
  }
247
- }
248
- });
348
+ });
249
349
 
250
- [denoised] = graph_image_pass({
251
- graph,
252
- shader: ssr_spatial_denoise_shader,
253
- output_resolution: resolution,
254
- inputs: {
255
- tInput: denoised,
256
- tDepth: input_depth,
257
- tNormal: input_normal,
258
- settings: {
259
- // see AMD's notes on A-torus, this produces following filter sizes: 1, 2, 4
260
- step_size: 4,
350
+ [denoised] = graph_image_pass({
351
+ graph,
352
+ shader: ssr_spatial_denoise_shader,
353
+ output_resolution: resolution,
354
+ inputs: {
355
+ tInput: denoised,
356
+ tDepth: input_depth,
357
+ tNormal: input_normal,
358
+ settings: {
359
+ // see AMD's notes on A-torus, this produces following filter sizes: 1, 2, 4
360
+ step_size: 4,
361
+ }
261
362
  }
262
- }
263
- });
363
+ });
364
+ }
264
365
 
265
366
  const [final] = graph_image_pass({
266
367
  graph,
@@ -277,7 +378,7 @@ export class SSR {
277
378
  }
278
379
  });
279
380
 
280
- this.reset_history = false;
381
+
281
382
 
282
383
  // technically we only need 'final' others are for debugging
283
384
 
@@ -289,4 +390,4 @@ export class SSR {
289
390
  reflections,
290
391
  };
291
392
  }
292
- }
393
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Diagnostic comparisons share the same resolve, validation and spatial filtering.
3
+ */
4
+ export type SSRReprojectionMode = number;
5
+ /** Diagnostic comparisons share the same resolve, validation and spatial filtering. @enum {number} */
6
+ export const SSRReprojectionMode: Readonly<{
7
+ Parallax: 0;
8
+ Surface: 1;
9
+ CurrentFrame: 2;
10
+ }>;
11
+ //# sourceMappingURL=SSRReprojectionMode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SSRReprojectionMode.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/ssr/SSRReprojectionMode.js"],"names":[],"mappings":";;;kCAA4F,MAAM;AAAlG,sGAAsG;AACtG;;;;GAIG"}
@@ -0,0 +1,6 @@
1
+ /** Diagnostic comparisons share the same resolve, validation and spatial filtering. @enum {number} */
2
+ export const SSRReprojectionMode = Object.freeze({
3
+ Parallax: 0,
4
+ Surface: 1,
5
+ CurrentFrame: 2,
6
+ });
@@ -0,0 +1,4 @@
1
+ /** Distance and support describe the radiance mixture, including spatially borrowed samples. */
2
+ export const chunk_ssr_metadata: CodeChunk;
3
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
4
+ //# sourceMappingURL=chunk_ssr_metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_ssr_metadata.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/ssr/chunk_ssr_metadata.js"],"names":[],"mappings":"AAGA,gGAAgG;AAChG,2CA2BsB;0BA/BI,oCAAoC"}
@@ -0,0 +1,32 @@
1
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
2
+ import { chunk_is_finite } from "../../shader/chunk/math/chunk_is_finite.js";
3
+
4
+ /** Distance and support describe the radiance mixture, including spatially borrowed samples. */
5
+ export const chunk_ssr_metadata = CodeChunk.from(/* language=WGSL */ `
6
+ struct SSRResolveOutput {
7
+ @location(0) radiance: vec4f,
8
+ @location(1) metadata: vec2f,
9
+ }
10
+
11
+ // (supported first/second distance moments, supported weight, total radiance weight).
12
+ // A miss still contributes total weight when mixed into an existing radiance signal.
13
+ fn ssr_distance_moments(distance: f32, support: f32, weight: f32) -> vec4f {
14
+ if (!is_finite(weight) || weight <= 0.0) { return vec4f(0.0); }
15
+ if (!is_finite(distance) || distance <= 0.0 || !is_finite(support)) {
16
+ return vec4f(0.0, 0.0, 0.0, weight);
17
+ }
18
+ let w = weight * saturate(support);
19
+ return vec4f(w * distance, w * distance * distance, w, weight);
20
+ }
21
+
22
+ fn ssr_resolve_metadata(moments: vec4f, source_fraction: f32) -> vec2f {
23
+ if (moments.z <= 1e-6 || moments.w <= 1e-6) { return vec2f(0.0); }
24
+ let distance = moments.x / moments.z;
25
+ let variance = max(0.0, moments.y / moments.z - distance * distance);
26
+ // Reject broad mixtures instead of treating the average as a real reflected depth.
27
+ let coherence = saturate(1.0 - sqrt(variance) / max(0.1 * distance, 1e-5));
28
+ let support = coherence * saturate(moments.z / moments.w) * saturate(source_fraction);
29
+ if (!is_finite(distance) || !is_finite(support)) { return vec2f(0.0); }
30
+ return vec2f(distance, support);
31
+ }
32
+ `, [chunk_is_finite]);
@@ -0,0 +1,4 @@
1
+ /** Bootstrap variance from spatial samples when resolve has too few rays to estimate noise. */
2
+ export const chunk_ssr_spatial_variance: CodeChunk;
3
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
4
+ //# sourceMappingURL=chunk_ssr_spatial_variance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_ssr_spatial_variance.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/ssr/chunk_ssr_spatial_variance.js"],"names":[],"mappings":"AAQA,+FAA+F;AAC/F,mDA+B4H;0BAxClG,oCAAoC"}
@@ -0,0 +1,41 @@
1
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
2
+ import { chunk_rgb_to_luminance } from "../../shader/chunk/color/chunk_rgb_to_luminance.js";
3
+ import { chunk_decode_g_buffer_normal } from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
4
+ import { chunk_get_std_dev } from "../../shader/chunk/math/statistics/chunk_get_std_dev.js";
5
+ import { chunk_is_on_screen_i32 } from "../../shader/chunk/texture/chunk_is_on_screen_i32.js";
6
+ import { chunk_ffx_dnsr_reflections_get_edge_stopping_normal_weight } from "./prefilter/chunk_ffx_dnsr_reflections_get_edge_stopping_normal_weight.js";
7
+ import { chunk_ffx_dnsr_reflections_get_edge_stopping_depth_weight } from "./prefilter/chunk_ffx_dnsr_reflections_get_edge_stopping_depth_weight.js";
8
+
9
+ /** Bootstrap variance from spatial samples when resolve has too few rays to estimate noise. */
10
+ export const chunk_ssr_spatial_variance = CodeChunk.from(/* language=WGSL */ `
11
+ fn ssr_spatial_variance(
12
+ radiance: texture_2d<f32>, depth: texture_2d<f32>, normals: texture_2d<u32>, p: vec2i,
13
+ ) -> f32 {
14
+ let center_luma = rgb_to_luminance(textureLoad(radiance,p,0).rgb);
15
+ let center_normal = decode_g_buffer_normal(textureLoad(normals,p,0).xy);
16
+ let center_depth = textureLoad(depth,p,0).r;
17
+ let size = vec2i(textureDimensions(radiance));
18
+ let kernel = array<f32,3>(0.25,0.125,0.0625);
19
+ var moments = vec2f(0.0);
20
+ var sum_weight = 0.0;
21
+ for (var y = -1; y <= 1; y++) {
22
+ for (var x = -1; x <= 1; x++) {
23
+ let q = p + vec2i(x,y);
24
+ if (!is_on_screen_i32(q,size)) { continue; }
25
+ let sample_normal = decode_g_buffer_normal(textureLoad(normals,q,0).xy);
26
+ let sample_depth = textureLoad(depth,q,0).r;
27
+ let weight = kernel[abs(x)+abs(y)]
28
+ * ffx_dnsr_reflections_get_edge_stopping_normal_weight(center_normal,sample_normal)
29
+ * ffx_dnsr_reflections_get_edge_stopping_depth_weight(center_depth,sample_depth);
30
+ // Differences about the centre avoid cancellation for a constant HDR signal.
31
+ let delta = rgb_to_luminance(textureLoad(radiance,q,0).rgb)-center_luma;
32
+ moments += vec2f(delta,delta*delta)*weight;
33
+ sum_weight += weight;
34
+ }
35
+ }
36
+ moments /= max(sum_weight,1e-8);
37
+ let sigma = get_std_dev(moments.x,moments.y);
38
+ return sigma*sigma;
39
+ }
40
+ `, [chunk_rgb_to_luminance, chunk_decode_g_buffer_normal, chunk_get_std_dev, chunk_is_on_screen_i32,
41
+ chunk_ffx_dnsr_reflections_get_edge_stopping_normal_weight, chunk_ffx_dnsr_reflections_get_edge_stopping_depth_weight]);
@@ -0,0 +1,3 @@
1
+ export const chunk_ssr_reprojection: CodeChunk;
2
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
3
+ //# sourceMappingURL=chunk_ssr_reprojection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_ssr_reprojection.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.js"],"names":[],"mappings":"AAIA,+CAyBuC;0BA7Bb,uCAAuC"}
@@ -0,0 +1,30 @@
1
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
2
+ import { chunk_ndc_to_uv } from "../../../shader/chunk/texture/chunk_ndc_to_uv.js";
3
+ import { chunk_is_finite } from "../../../shader/chunk/math/chunk_is_finite.js";
4
+
5
+ export const chunk_ssr_reprojection = CodeChunk.from(/* language=WGSL */ `
6
+ fn ssr_virtual_position(camera_position: vec3f, surface: vec3f, distance: f32) -> vec3f {
7
+ let ray = surface - camera_position;
8
+ return surface + ray * (distance / max(length(ray), 1e-6));
9
+ }
10
+
11
+ // Matrices address the raster grids, including jitter. Invalid projections never sample history.
12
+ fn ssr_history_uv(position: vec3f, previous_view_projection: mat4x4f) -> vec2f {
13
+ let clip = previous_view_projection * vec4f(position, 1.0);
14
+ if (!is_finite(clip.w) || clip.w <= 1e-6) { return vec2f(-1.0); }
15
+ let uv = ndc_to_uv(clip.xy / clip.w);
16
+ if (!is_finite(uv.x) || !is_finite(uv.y)) { return vec2f(-1.0); }
17
+ return uv;
18
+ }
19
+
20
+ fn ssr_surface_history_uv(pixel: vec2f, velocity: vec2f, jitter_delta: vec2f, size: vec2f) -> vec2f {
21
+ return (pixel - velocity + jitter_delta) / size;
22
+ }
23
+
24
+ // Apply confidence LAST. Variance and clamp heuristics cannot resurrect rejected history.
25
+ fn ssr_history_weight(current_variance: f32, history_variance: f32, current_blend: f32, confidence: f32) -> f32 {
26
+ let c = current_blend / (1.0 + max(current_variance, 0.0));
27
+ let h = (1.0 - current_blend) / (1.0 + max(history_variance, 0.0));
28
+ return h / max(c + h, 1e-20) * saturate(confidence);
29
+ }
30
+ `, [chunk_ndc_to_uv, chunk_is_finite]);
@@ -0,0 +1,4 @@
1
+ /** Resource names are supplied by ssr_reproject_shader. Validate exactly the taps we read. */
2
+ export const chunk_ssr_sample_history: CodeChunk;
3
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
4
+ //# sourceMappingURL=chunk_ssr_sample_history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_ssr_sample_history.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.js"],"names":[],"mappings":"AAUA,8FAA8F;AAC9F,iDA0DkD;0BArExB,uCAAuC"}